[unittests] Improve test-zeroD coverage

This commit is contained in:
Ingmar Schoegl 2024-08-22 15:34:58 -05:00
parent d0e96223a2
commit 27f4ff261a
2 changed files with 96 additions and 12 deletions

View File

@ -728,13 +728,6 @@ class TestReactor:
assert self.r1.name.startswith(f"{self.r1.type}_") # default name
assert res.name.startswith(f"{res.type}_") # default name
def test_valve_errors(self):
self.make_reactors()
v = ct.Valve(self.r1, self.r2)
with pytest.raises(ct.CanteraError, match='Already installed'):
# inlet and outlet cannot be reassigned
v._install(self.r2, self.r1)
def test_pressure_controller1(self):
self.make_reactors(n_reactors=1)
g = ct.Solution('h2o2.yaml', transport_model=None)

View File

@ -19,16 +19,16 @@ TEST(zerodim, simple)
auto sol = newSolution("gri30.yaml", "gri30", "none");
sol->thermo()->setState_TPX(T, P, X);
auto cppReactor = newReactor("IdealGasReactor", sol, "simple");
ASSERT_EQ(cppReactor->name(), "simple");
cppReactor->initialize();
auto reactor = newReactor("IdealGasReactor", sol, "simple");
ASSERT_EQ(reactor->name(), "simple");
reactor->initialize();
ReactorNet network;
network.addReactor(dynamic_cast<IdealGasReactor&>(*cppReactor));
network.addReactor(dynamic_cast<IdealGasReactor&>(*reactor));
network.initialize();
double t = 0.0;
while (t < 0.1) {
ASSERT_GE(cppReactor->temperature(), T);
ASSERT_GE(reactor->temperature(), T);
t = network.time() + 5e-3;
network.advance(t);
}
@ -56,6 +56,97 @@ TEST(zerodim, test_guards)
EXPECT_THROW(Valve().updateMassFlowRate(0.), CanteraError);
}
TEST(zerodim, flowdevice)
{
auto gas = newSolution("gri30.yaml", "gri30", "none");
auto node0 = newReactor("IdealGasReactor", gas, "upstream");
auto node1 = newReactor("IdealGasReactor", gas, "downstream");
auto valve = newFlowDevice("Valve", node0, node1, "valve");
ASSERT_EQ(valve->name(), "valve");
ASSERT_EQ(valve->in().name(), "upstream");
ASSERT_EQ(valve->out().name(), "downstream");
ASSERT_EQ(node0->nInlets(), 0);
ASSERT_EQ(node0->nOutlets(), 1);
ASSERT_EQ(node1->nInlets(), 1);
ASSERT_EQ(node1->nOutlets(), 0);
}
TEST(zerodim, wall)
{
auto gas = newSolution("gri30.yaml", "gri30", "none");
auto node0 = newReactor("IdealGasReactor", gas, "left");
auto node1 = newReactor("IdealGasReactor", gas, "right");
auto wall = newWall("Wall", node0, node1, "wall");
ASSERT_EQ(wall->name(), "wall");
ASSERT_EQ(wall->left().name(), "left");
ASSERT_EQ(wall->right().name(), "right");
ASSERT_EQ(node0->nWalls(), 1);
ASSERT_EQ(node1->nWalls(), 1);
}
TEST(zerodim, mole_reactor)
{
// simplified version of continuous_reactor.py
auto gas = newSolution("h2o2.yaml", "ohmech", "none");
auto tank = make_shared<Reservoir>(gas, "fuel-air-tank");
auto exhaust = make_shared<Reservoir>(gas, "exhaust");
auto stirred = make_shared<IdealGasMoleReactor>(gas, "stirred-reactor");
stirred->setEnergy(0);
stirred->setInitialVolume(30.5 * 1e-6);
auto mfc = make_shared<MassFlowController>(tank, stirred, "mass-flow-controller");
double residenceTime = 2.;
double mass = stirred->mass();
mfc->setMassFlowRate(mass/residenceTime);
auto preg = make_shared<PressureController>(stirred, exhaust, "pressure-regulator");
preg->setPrimary(mfc.get());
preg->setPressureCoeff(1e-3);
auto net = ReactorNet();
net.addReactor(*stirred);
net.initialize();
}
TEST(zerodim, mole_reactor_2)
{
// simplified version of continuous_reactor.py
auto gas = newSolution("h2o2.yaml", "ohmech", "none");
auto tank = std::dynamic_pointer_cast<Reservoir>(
newReactor("Reservoir", gas, "fuel-air-tank"));
auto exhaust = std::dynamic_pointer_cast<Reservoir>(
newReactor("Reservoir", gas, "exhaust"));
auto stirred = std::dynamic_pointer_cast<IdealGasMoleReactor>(
newReactor("IdealGasMoleReactor", gas, "stirred-reactor"));
stirred->setEnergy(0);
stirred->setInitialVolume(30.5 * 1e-6);
auto mfc = std::dynamic_pointer_cast<MassFlowController>(
newConnectorNode("MassFlowController", tank, stirred, "mass-flow-controller"));
double residenceTime = 2.;
double mass = stirred->mass();
mfc->setMassFlowRate(mass/residenceTime);
auto preg = std::dynamic_pointer_cast<PressureController>(
newConnectorNode("PressureController", stirred, exhaust, "pressure-regulator"));
preg->setPrimary(mfc.get());
preg->setPressureCoeff(1e-3);
auto net = ReactorNet();
net.addReactor(*stirred);
net.initialize();
}
// This test ensures that prior reactor initialization of a reactor does
// not affect later integration within a network. This example was
// adapted from test_reactor.py::test_equilibrium_HP.