Skip to content

Commit

Permalink
[unittest] Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ischoegl authored and speth committed Jul 1, 2023
1 parent a5c9006 commit bde497c
Showing 1 changed file with 47 additions and 37 deletions.
84 changes: 47 additions & 37 deletions test/python/test_reactor.py
Expand Up @@ -17,6 +17,7 @@ def make_reactors(self, independent=True, n_reactors=2,
T2=300, P2=101325, X2='O2:1.0'):

self.net = ct.ReactorNet()
assert self.net.initial_time == 0.

self.gas1 = ct.Solution('h2o2.yaml', transport_model=None)
self.gas1.TPX = T1, P1, X1
Expand Down Expand Up @@ -197,7 +198,8 @@ def test_timestepping(self):

self.net.max_time_step = dt_max
self.assertEqual(self.net.max_time_step, dt_max)
self.net.set_initial_time(tStart)
self.net.initial_time = tStart
assert self.net.initial_time == tStart
self.assertNear(self.net.time, tStart)

while t < tEnd:
Expand All @@ -215,7 +217,7 @@ def test_maxsteps(self):
# enough time-steps to reach the endtime
max_steps = 10
max_step_size = 1e-07
self.net.set_initial_time(0)
self.net.initial_time = 0.
self.net.max_time_step = max_step_size
self.net.max_steps = max_steps
with self.assertRaisesRegex(
Expand Down Expand Up @@ -361,10 +363,10 @@ def test_heat_transfer2(self):
w = self.add_wall(U=100, A=0.5)

self.assertNear(w.heat_transfer_coeff * w.area * (self.r1.T - self.r2.T),
w.qdot(0))
w.heat_rate)
self.net.advance(1.0)
self.assertNear(w.heat_transfer_coeff * w.area * (self.r1.T - self.r2.T),
w.qdot(1.0))
w.heat_rate)
T1b = self.r1.T
T2b = self.r2.T

Expand Down Expand Up @@ -427,19 +429,14 @@ def test_wall_velocity(self):

self.add_wall(A=A)

def v(t):
if 0 < t <= 1:
return t
elif 1 <= t <= 2:
return 2 - t
else:
return 0.0
v = ct.Tabulated1([0.0, 1.0, 2.0], [0.0, 1.0, 0.0])

self.w.set_velocity(v)
self.w.velocity = v
self.net.advance(1.0)
self.assertNear(self.w.vdot(1.0), 1.0 * A, 1e-7)
assert self.w.velocity == approx(v(1.0))
self.assertNear(self.w.expansion_rate, 1.0 * A, 1e-7)
self.net.advance(2.0)
self.assertNear(self.w.vdot(2.0), 0.0, 1e-7)
self.assertNear(self.w.expansion_rate, 0.0, 1e-7)

self.assertNear(self.r1.volume, V1 + 1.0 * A, 1e-7)
self.assertNear(self.r2.volume, V2 - 1.0 * A, 1e-7)
Expand Down Expand Up @@ -474,10 +471,12 @@ def test_heat_flux_func(self):
V2a = self.r2.volume

self.add_wall(A=0.3)
self.w.set_heat_flux(lambda t: 90000 * (1 - t**2) if t <= 1.0 else 0.0)
hfunc = lambda t: 90000 * (1 - t**2) if t <= 1.0 else 0.0
self.w.heat_flux = hfunc
Q = 0.3 * 60000

self.net.advance(1.1)
assert self.w.heat_flux == hfunc(1.1)
U1b = self.r1.volume * self.r1.density * self.r1.thermo.u
U2b = self.r2.volume * self.r2.density * self.r2.thermo.u

Expand Down Expand Up @@ -550,7 +549,7 @@ def test_mass_flow_controller_errors(self):
self.net.step()

with pytest.raises(NotImplementedError):
mfc.set_pressure_function(lambda p: p**2)
mfc.pressure_function = lambda p: p**2

def test_valve1(self):
self.make_reactors(P1=10*ct.one_atm, X1='AR:1.0', X2='O2:1.0')
Expand Down Expand Up @@ -627,7 +626,7 @@ def test_valve3(self):
self.net.atol = 1e-20
valve = ct.Valve(self.r1, self.r2)
mdot = lambda dP: 5e-3 * np.sqrt(dP) if dP > 0 else 0.0
valve.set_pressure_function(mdot)
valve.pressure_function = mdot
self.assertEqual(valve.valve_coeff, 1.)

Y1 = self.r1.Y
Expand Down Expand Up @@ -656,17 +655,26 @@ def test_valve_timing(self):
valve = ct.Valve(self.r1, self.r2)
k = 2e-5
valve.valve_coeff = k
valve.set_time_function(lambda t: t>.01)
valve.time_function = lambda t: t > .01

delta_p = lambda: self.r1.thermo.P - self.r2.thermo.P
mdot = lambda: valve.valve_coeff * (self.r1.thermo.P - self.r2.thermo.P)
self.net.initialize()
self.assertEqual(valve.mass_flow_rate, 0.0)
assert valve.time_function == 0.0
assert valve.pressure_function == approx(delta_p())
assert valve.mass_flow_rate == 0.0
self.net.advance(0.01)
self.assertEqual(valve.mass_flow_rate, 0.0)
assert valve.time_function == 0.0
assert valve.pressure_function == approx(delta_p())
assert valve.mass_flow_rate == 0.0
self.net.advance(0.01 + 1e-9)
self.assertNear(valve.mass_flow_rate, mdot())
assert valve.time_function == 1.0
assert valve.pressure_function == approx(delta_p())
assert valve.mass_flow_rate == approx(mdot())
self.net.advance(0.02)
self.assertNear(valve.mass_flow_rate, mdot())
assert valve.time_function == 1.0
assert valve.pressure_function == approx(delta_p())
assert valve.mass_flow_rate == approx(mdot())

def test_valve_errors(self):
self.make_reactors()
Expand All @@ -692,10 +700,10 @@ def test_pressure_controller1(self):
mfc = ct.MassFlowController(inlet_reservoir, self.r1)
mdot = lambda t: np.exp(-100*(t-0.5)**2)
mfc.mass_flow_coeff = 1.
mfc.set_time_function(mdot)
mfc.time_function = mdot

pc = ct.PressureController(self.r1, outlet_reservoir)
pc.set_master(mfc)
pc.primary = mfc
pc.pressure_coeff = 1e-5
self.assertEqual(pc.pressure_coeff, 1e-5)

Expand All @@ -717,12 +725,12 @@ def test_pressure_controller2(self):
mfc = ct.MassFlowController(inlet_reservoir, self.r1)
mdot = lambda t: np.exp(-100*(t-0.5)**2)
mfc.mass_flow_coeff = 1.
mfc.set_time_function(mdot)
mfc.time_function = mdot

pc = ct.PressureController(self.r1, outlet_reservoir)
pc.set_master(mfc)
pc.primary = mfc
pfunc = lambda dp: 1.e-5 * abs(dp)**.5
pc.set_pressure_function(pfunc)
pc.pressure_function = pfunc
self.assertEqual(pc.pressure_coeff, 1.)

t = 0
Expand All @@ -737,7 +745,7 @@ def test_pressure_controller_errors(self):
res = ct.Reservoir(self.gas1)
mfc = ct.MassFlowController(res, self.r1, mdot=0.6)

p = ct.PressureController(self.r1, self.r2, master=mfc, K=0.5)
p = ct.PressureController(self.r1, self.r2, primary=mfc, K=0.5)

with self.assertRaisesRegex(ct.CanteraError, 'is not ready'):
p = ct.PressureController(self.r1, self.r2, K=0.5)
Expand All @@ -749,35 +757,37 @@ def test_pressure_controller_errors(self):

with pytest.raises(NotImplementedError):
p = ct.PressureController(self.r1, self.r2)
p.set_time_function(lambda t: t>1.)
p.time_function = lambda t: t>1.

def test_set_initial_time(self):
self.make_reactors(P1=10*ct.one_atm, X1='AR:1.0', X2='O2:1.0')
self.net.rtol = 1e-12
valve = ct.Valve(self.r1, self.r2)
mdot = lambda dP: 5e-3 * np.sqrt(dP) if dP > 0 else 0.0
valve.set_pressure_function(mdot)
pfunc_a = lambda dP: 5e-3 * np.sqrt(dP) if dP > 0 else 0.0
valve.pressure_function = pfunc_a

t0 = 0.0
tf = t0 + 0.5
self.net.advance(tf)
self.assertNear(self.net.time, tf)
p1a = self.r1.thermo.P
p2a = self.r2.thermo.P
assert valve.pressure_function == approx(pfunc_a(p1a - p2a))

self.make_reactors(P1=10*ct.one_atm, X1='AR:1.0', X2='O2:1.0')
self.net.rtol = 1e-12
valve = ct.Valve(self.r1, self.r2)
mdot = lambda dP: 5e-3 * np.sqrt(dP) if dP > 0 else 0.0
valve.set_pressure_function(mdot)
pfunc_b = lambda dP: 5e-3 * np.sqrt(dP) if dP > 0 else 0.0
valve.pressure_function = pfunc_b

t0 = 0.2
self.net.set_initial_time(t0)
self.net.initial_time = t0
tf = t0 + 0.5
self.net.advance(tf)
self.assertNear(self.net.time, tf)
p1b = self.r1.thermo.P
p2b = self.r2.thermo.P
assert valve.pressure_function == approx(pfunc_b(p1b - p2b))

self.assertNear(p1a, p1b)
self.assertNear(p2a, p2b)
Expand Down Expand Up @@ -1432,7 +1442,7 @@ def test_reacting(self):
while net.distance < 1.0:
net.step()
i += 1
assert r.speed * r.density * r.area == pytest.approx(10)
assert r.speed * r.density * r.area == approx(10)

stats = net.solver_stats
assert stats['steps'] == i
Expand Down Expand Up @@ -1702,7 +1712,7 @@ def test_reinitialization(self):
r.mass_flow_rate = 0.01
r.syncState()

sim.set_initial_time(0.0)
sim.initial_time = 0.
sim.advance(0.6)
Ygas2 = r.thermo.Y
cov2 = rsurf.kinetics.coverages
Expand Down Expand Up @@ -2473,7 +2483,7 @@ def after_get_state(self, y):

def after_update_state(self, y):
self.v_wall = y[self.i_wall]
self.walls[0].set_velocity(self.v_wall)
self.walls[0].velocity = self.v_wall

def after_eval(self, t, LHS, RHS):
# Extra equation is d(v_wall)/dt = k * delta P
Expand Down

0 comments on commit bde497c

Please sign in to comment.