mirror of
https://github.com/Cantera/cantera.git
synced 2025-02-25 18:55:29 -06:00
[unittests] Improve test-zeroD coverage
This commit is contained in:
parent
d0e96223a2
commit
27f4ff261a
@ -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)
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user