Skip to content

Commit

Permalink
add unittests for drawing methods
Browse files Browse the repository at this point in the history
  • Loading branch information
Naikless committed Sep 29, 2023
1 parent 24ca328 commit 3eea700
Showing 1 changed file with 126 additions and 0 deletions.
126 changes: 126 additions & 0 deletions test/python/test_reactor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@
from .utilities import unittest

import cantera as ct

try:
ct.drawnetwork._import_graphviz()
except ImportError:
pass

from cantera.drawnetwork import _graphviz

from . import utilities

class TestReactor(utilities.CanteraTest):
Expand Down Expand Up @@ -857,6 +865,124 @@ def test_preconditioner_unsupported(self):
with self.assertRaises(ct.CanteraError):
self.net.initialize()

@utilities.unittest.skipIf(_graphviz is None, "graphviz is not installed")
def test_draw_reactor(self):
T1, P1, X1 = 300, 101325, 'O2:1.0'
self.make_reactors(T1=T1, P1=P1, X1=X1)
self.r1.name = "Name"
self.r1.node_attr = {'style': 'filled', 'fillcolor': 'red'}
dot = self.r1.draw()
expected = ['\tName [fillcolor=red style=filled]\n']
self.assertEqual(dot.body, expected)

self.r1.node_attr = {"style": "filled"}
expected = [('\tName [label="{T (K)\\n300.00|P (bar)\\n1.013}|" '
'color=blue shape=Mrecord style=filled xlabel=Name]\n')]
dot = self.r1.draw(print_state=True, node_attr={"style": "",
"color": "blue"})
self.assertEqual(dot.body, expected)

self.r1.node_attr = {}
expected = [('\tName [label="{T (K)\\n300.00|P (bar)\\n1.013}|X (%)'
'\\nO2: 100.00" shape=Mrecord xlabel=Name]\n')]
dot = self.r1.draw(print_state=True, species="X")
self.assertEqual(dot.body, expected)

expected = [('\tName [label="{T (K)\\n300.00|P (bar)\\n1.013}|Y (%)'
'\\nO2: 100.00" shape=Mrecord xlabel=Name]\n')]
dot = self.r1.draw(print_state=True, species="Y")
self.assertEqual(dot.body, expected)

expected = [('\tName [label="{T (K)\\n300.00|P (bar)\\n1.013}|X (%)'
'\\nH2: 0.00" shape=Mrecord xlabel=Name]\n')]
dot = self.r1.draw(print_state=True, species=["H2"])
self.assertEqual(dot.body, expected)

dot = _graphviz.Digraph()
self.r1.draw(dot)
expected = ['\tName\n']
self.assertEqual(dot.body, expected)

@utilities.unittest.skipIf(_graphviz is None, "graphviz is not installed")
def test_draw_wall(self):
T1, P1, X1 = 300, 101325, 'O2:1.0'
T2, P2, X2 = 600, 101325, 'O2:1.0'
self.make_reactors(T1=T1, P1=P1, X1=X1, T2=T2, P2=P2, X2=X2)
self.r1.name = "Name 1"
self.r2.name = "Name 2"
self.add_wall(U=0.1)
self.w.edge_attr = {'color': 'blue'}
dot = self.w.draw(node_attr={'style': 'filled'},
edge_attr={'style': 'dotted'})
expected = [('\t"Name 2" -> "Name 1" [label="q = 30 W" '
'color=blue style=dotted]\n')]
self.assertEqual(dot.body, expected)

@utilities.unittest.skipIf(_graphviz is None, "graphviz is not installed")
def test_draw_flow_controller(self):
self.make_reactors(n_reactors=1)
self.r1.name = "Reactor"
gas2 = ct.Solution('h2o2.yaml', transport_model=None)
gas2.TPX = 300, 10*101325, 'H2:1.0'
inlet_reservoir = ct.Reservoir(gas2, name='Inlet')
gas2.TPX = 300, 101325, 'H2:1.0'
outlet_reservoir = ct.Reservoir(gas2, name='Outlet')
mfc = ct.MassFlowController(inlet_reservoir, self.r1, mdot=2,
edge_attr={'xlabel': 'MFC'})
pfc = ct.PressureController(self.r1, outlet_reservoir, primary=mfc)
self.net.advance_to_steady_state()
dot = mfc.draw(node_attr={'style': 'filled'},
edge_attr={'style': 'dotted'})
expected = [('\tInlet -> Reactor [label="m = 2 kg/s" '
'style=dotted xlabel=MFC]\n')]
self.assertEqual(dot.body, expected)

@utilities.unittest.skipIf(_graphviz is None, "graphviz is not installed")
def test_draw_network(self):
self.make_reactors()
self.r1.name = "Hot reactor"
self.r2.name = "Cold reactor"
self.add_wall(U=10)
gas2 = ct.Solution('h2o2.yaml', transport_model=None)
gas2.TPX = 600, 101325, 'O2:1.0'
hot_inlet = ct.Reservoir(gas2, name='Hot inlet')
gas2.TPX = 200, 101325, 'O2:1.0'
cold_inlet = ct.Reservoir(gas2, name='Cold inlet')
outlet = ct.Reservoir(gas2, name='Outlet')
mfc_hot1 = ct.MassFlowController(hot_inlet, self.r1, mdot=2)
mfc_hot2 = ct.MassFlowController(hot_inlet, self.r1, mdot=1)
mfc_cold = ct.MassFlowController(cold_inlet, self.r2, mdot=2)
pfc_hot1 = ct.PressureController(self.r1, outlet, primary=mfc_hot1)
pfc_hot2 = ct.PressureController(self.r1, outlet, primary=mfc_hot2)
pfc_cold = ct.PressureController(self.r2, outlet, primary=mfc_cold)
self.net.advance_to_steady_state()
dot = self.net.draw(mass_flow_attr={'color': 'green'},
heat_flow_attr={'color': 'orange'},
print_state=True)
expected = [('\t"Cold reactor" [label="{T (K)\\n202.18|P (bar)'
'\\n1.013}|" shape=Mrecord xlabel="Cold reactor"]\n'),
('\t"Hot reactor" [label="{T (K)\\n598.68|P (bar)'
'\\n1.013}|" shape=Mrecord xlabel="Hot reactor"]\n'),
('\t"Hot inlet" [label="{T (K)\\n600.00|P (bar)'
'\\n1.013}|" shape=Mrecord xlabel="Hot inlet"]\n'),
('\t"Cold inlet" [label="{T (K)\\n200.00|P (bar)'
'\\n1.013}|" shape=Mrecord xlabel="Cold inlet"]\n'),
('\tOutlet [label="{T (K)\\n200.00|P (bar)'
'\\n1.013}|" shape=Mrecord xlabel=Outlet]\n'),
('\t"Cold inlet" -> "Cold reactor" [label="m = 2 kg/s" '
'color=green]\n'),
('\t"Hot reactor" -> Outlet [label="m = 3 kg/s" '
'color=green]\n'),
('\t"Cold reactor" -> Outlet [label="m = 2 kg/s" '
'color=green]\n'),
('\t"Hot reactor" -> "Cold reactor" [label="q = 4e+03 W" '
'color=orange style=dashed]\n'),
('\t"Hot inlet" -> "Hot reactor" [label="m = 3 kg/s" '
'color=green]\n')]
# use sets because order can be random
self.assertSetEqual(set(dot.body), set(expected))


class TestMoleReactor(TestReactor):
reactorClass = ct.MoleReactor

Expand Down

0 comments on commit 3eea700

Please sign in to comment.