Skip to content

Commit

Permalink
[unittest] Update Sim1D.save/restore tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ischoegl authored and speth committed Jan 12, 2023
1 parent 834c39b commit 253e5e7
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 41 deletions.
78 changes: 78 additions & 0 deletions test/data/adiabatic_flame_legacy.yaml
@@ -0,0 +1,78 @@
setup:
description: initial guess
generator: Cantera Sim1D
cantera-version: 2.6.0
git-commit: unknown
date: Thu Dec 22 22:50:32 2022
reactants:
points: 1
type: inlet
temperature: 300.0
mass-flux: 1.338612362800703
mass-fractions:
H2: 9.478316470455491e-03
O2: 0.1367636951757011
AR: 0.8537579883538435
flame:
points: 9
tolerances:
transient-abstol: 1.0e-11
steady-abstol: 1.0e-09
transient-reltol: 1.0e-04
steady-reltol: 1.0e-04
type: Free Flame
pressure: 1.01325e+05
phase:
name: ohmech
source: /opt/homebrew/Caskroom/miniforge/base/envs/cantera/lib/python3.10/site-packages/cantera/data/h2o2.yaml
radiation-enabled: false
energy-enabled: true
Soret-enabled: false
species-enabled: true
refine-criteria:
ratio: 3.0
slope: 0.06
curve: 0.12
prune: 0.0
grid-min: 1.0e-10
max-points: 1000
fixed-point:
location: 0.0105
temperature: 698.1678485027373
grid: [0.0, 6.0e-03, 9.0e-03, 0.0105, 0.012, 0.015, 0.018, 0.024, 0.03]
velocity: [1.0, 1.0, 1.0, 2.205581220696009, 3.411162441392019, 5.822324882784038,
5.822324882784038, 5.822324882784038, 5.822324882784038]
T: [300.0, 300.0, 300.0, 698.1678485027371, 1096.335697005475,
1892.671394010949, 1892.671394010949, 1892.671394010949,
1892.671394010949]
H2: [9.478316470455491e-03, 9.478316470455491e-03, 9.478316470455491e-03,
7.109842855845580e-03, 4.741369241235666e-03, 4.422012015843635e-06,
4.422012015843405e-06, 4.422012015843405e-06, 4.422012015843405e-06]
H: [0.0, 0.0, 0.0, 4.691903645074276e-08, 9.383807290148556e-08,
1.876761458029711e-07, 1.876761458029711e-07, 1.876761458029711e-07,
1.876761458029711e-07]
O: [0.0, 0.0, 0.0, 8.204442509821813e-06, 1.640888501964364e-05,
3.281777003928727e-05, 3.281777003928727e-05, 3.281777003928727e-05,
3.281777003928727e-05]
O2: [0.1367636951757011, 0.1367636951757011, 0.1367636951757011,
0.1178952114224941, 0.09902672766928713, 0.06128976016287324,
0.06128976016287325, 0.06128976016287325, 0.06128976016287325]
OH: [0.0, 0.0, 0.0, 1.365789095524984e-04, 2.731578191049970e-04,
5.463156382099939e-04, 5.463156382099939e-04, 5.463156382099939e-04,
5.463156382099939e-04]
H2O: [0.0, 0.0, 0.0, 0.02109188182623040, 0.04218376365246081,
0.08436752730492161, 0.08436752730492161, 0.08436752730492161,
0.08436752730492161]
HO2: [0.0, 0.0, 0.0, 2.318933184184578e-07, 4.637866368369159e-07,
9.275732736738316e-07, 9.275732736738315e-07, 9.275732736738315e-07,
9.275732736738315e-07]
H2O2: [0.0, 0.0, 0.0, 1.337716924587937e-08, 2.675433849175876e-08,
5.350867698351750e-08, 5.350867698351750e-08, 5.350867698351750e-08,
5.350867698351750e-08]
AR: [0.8537579883538435, 0.8537579883538435, 0.8537579883538435,
0.8537579883538435, 0.8537579883538436, 0.8537579883538436,
0.8537579883538436, 0.8537579883538436, 0.8537579883538436]
N2: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
products:
points: 1
type: outlet
69 changes: 28 additions & 41 deletions test/python/test_onedim.py
Expand Up @@ -515,17 +515,25 @@ def test_prune(self):
# TODO: check that the solution is actually correct (that is, that the
# residual satisfies the error tolerances) on the new grid.

def test_save_restore_yaml_legacy(self):
self.run_save_restore("legacy")

def test_save_restore_yaml_transition(self):
self.run_save_restore("transition")
def test_restore_legacy_yaml(self):
reactants = 'H2:1.1, O2:1, AR:5'
p = 5 * ct.one_atm
Tin = 600
self.create_sim(p, Tin, reactants)
meta = self.sim.restore("adiabatic_flame_legacy.yaml", "setup")
assert meta["generator"] == "Cantera Sim1D"
assert meta["cantera-version"] == "2.6.0"
assert self.sim.inlet.T == 300
assert self.sim.P == pytest.approx(ct.one_atm)
assert len(self.sim.grid) == 9

def test_save_restore_yaml_array(self):
# save and restore using YAML format
self.run_save_restore("array")

@utilities.unittest.skipIf("native" not in ct.hdf_support(), "HighFive not installed")
def test_save_restore_hdf_array(self):
# save and restore using HDF format
self.run_save_restore("hdf")

def run_save_restore(self, mode):
Expand All @@ -550,26 +558,16 @@ def run_save_restore(self, mode):
V1 = self.sim.spread_rate
P1 = self.sim.P
T1 = self.sim.T

if mode in {"array", "hdf"}:
self.sim.save(filename, "test", loglevel=0)
else:
self.sim.write_yaml(filename, "test", quiet=True)
self.sim.save(filename, "test", loglevel=0)

# Save a second solution to the same file
self.sim.radiation_enabled = True
self.sim.boundary_emissivities = 0.3, 0.8
if mode in {"array", "hdf"}:
self.sim.save(filename, "test2", loglevel=0)
else:
self.sim.write_yaml(filename, "test2", quiet=True)
self.sim.save(filename, "test2", loglevel=0)

# Create flame object with dummy initial grid
self.sim = ct.FreeFlame(self.gas)
if mode == "legacy":
self.sim.read_yaml(filename, "test", quiet=True)
else:
self.sim.restore(filename, "test", loglevel=0)
self.sim.restore(filename, "test", loglevel=0)

# Sim is initially in "steady-state" mode, so this returns the
# steady-state tolerances
Expand Down Expand Up @@ -607,10 +605,7 @@ def run_save_restore(self, mode):
self.assertFalse(self.sim.radiation_enabled)
self.assertFalse(self.sim.soret_enabled)

if mode == "legacy":
self.sim.read_yaml(filename, "test2", quiet=True)
else:
self.sim.restore(filename, "test2", loglevel=0)
self.sim.restore(filename, "test2", loglevel=0)
self.assertTrue(self.sim.radiation_enabled)
self.assertEqual(self.sim.boundary_emissivities, (0.3, 0.8))

Expand Down Expand Up @@ -731,15 +726,18 @@ def test_write_csv(self):
@pytest.mark.usefixtures("allow_deprecated")
@utilities.unittest.skipIf("h5py" not in ct.hdf_support(), "h5py not installed")
def test_write_hdf_legacy(self):
# save and restore legacy h5py format
self.run_freeflame_write_hdf("legacy")

@pytest.mark.usefixtures("allow_deprecated")
@utilities.unittest.skipIf(ct.hdf_support() != {"h5py", "native"}, "h5py and/or HighFive not installed")
def test_write_hdf_transition(self):
# save legacy h5py format / restore with HighFive
self.run_freeflame_write_hdf("transition")

@utilities.unittest.skipIf("native" not in ct.hdf_support(), "HighFive not installed")
def test_write_hdf_native(self):
# save and restore with updated format (HighFive only)
self.run_freeflame_write_hdf("native")

def run_freeflame_write_hdf(self, mode):
Expand Down Expand Up @@ -1316,15 +1314,18 @@ def test_reacting_surface_case3(self):
@pytest.mark.usefixtures("allow_deprecated")
@utilities.unittest.skipIf("h5py" not in ct.hdf_support(), "h5py not installed")
def test_write_hdf_legacy(self):
# save and restore legacy h5py format
self.run_impingingjet_write("legacy")

@pytest.mark.usefixtures("allow_deprecated")
@utilities.unittest.skipIf(ct.hdf_support() != {"h5py", "native"}, "h5py and/or HighFive not installed")
def test_write_hdf_transition(self):
# save legacy h5py format and restore using HighFive
self.run_impingingjet_write("transition")

@utilities.unittest.skipIf("native" not in ct.hdf_support(), "HighFive not installed")
def test_write_hdf_native(self):
# save and restore updated HDF format
self.run_impingingjet_write("native")

def test_write_yaml_native(self):
Expand Down Expand Up @@ -1374,16 +1375,7 @@ def run_impingingjet_write(self, mode):

jet.solve(loglevel=0)

def test_save_restore_yaml_legacy(self):
self.run_save_restore_yaml("legacy")

def test_save_restore_yaml_transition(self):
self.run_save_restore_yaml("transition")

def test_save_restore_yaml_array(self):
self.run_save_restore_yaml("array")

def run_save_restore_yaml(self, mode):
comp = {'CH4': 0.095, 'O2': 0.21, 'N2': 0.79}
self.sim = self.create_reacting_surface(comp, tsurf=900, tinlet=300, width=0.1)

Expand All @@ -1394,20 +1386,13 @@ def run_save_restore_yaml(self, mode):

self.sim.solve(loglevel=0, auto=False)

filename = self.test_work_path / f"impingingjet-{mode}.yaml"
filename = self.test_work_path / f"impingingjet.yaml"
filename.unlink(missing_ok=True)

if mode == "array":
self.sim.save(filename, "test", loglevel=0)
else:
self.sim.write_yaml(filename, "test", quiet=True)
self.sim.save(filename, "test", loglevel=0)

self.surf_phase.TPX = 300, ct.one_atm, "PT(S):1"
sim2 = ct.ImpingingJet(gas=self.gas, width=0.12, surface=self.surf_phase)
if mode == "legacy":
sim2.read_yaml(filename, "test", quiet=True)
else:
sim2.restore(filename, "test", loglevel=0)
sim2.restore(filename, "test", loglevel=0)

self.assertArrayNear(self.sim.grid, sim2.grid)
self.assertArrayNear(self.sim.Y, sim2.Y)
Expand Down Expand Up @@ -1450,10 +1435,12 @@ def test_restart(self):
self.assertNear(sim.T[0], sim.reactants.T, 1e-4)

def test_save_restore_yaml(self):
# save and restore using YAML format
self.run_save_restore("yaml")

@utilities.unittest.skipIf("native" not in ct.hdf_support(), "HighFive not installed")
def test_save_restore_hdf(self):
# save and restore using HDF format
self.run_save_restore("hdf")

def run_save_restore(self, mode):
Expand Down

0 comments on commit 253e5e7

Please sign in to comment.