diff --git a/test/SConscript b/test/SConscript index 52158445c..54387ffee 100644 --- a/test/SConscript +++ b/test/SConscript @@ -18,7 +18,10 @@ if 'LD_LIBRARY_PATH' in os.environ: def testRunner(target, source, env): """SCons Action to run a compiled test program""" program = source[0] - code = subprocess.call([program.abspath], env=env['ENV']) + workDir = Dir('#test/work').abspath + if not os.path.isdir(workDir): + os.mkdir(workDir) + code = subprocess.call([program.abspath], env=env['ENV'], cwd=workDir) if not code: open(target[0].path, 'w').write(time.asctime()+'\n') return code @@ -115,6 +118,7 @@ def addMatlabTest(script, dependencies=None): # Instantiate tests addTestProgram('thermo', 'nasapoly') +addTestProgram('kinetics', 'pdep') if localenv['python_package'] == 'full': addTestScript('python', 'runTests.py', diff --git a/test/data/pdep-test.cti b/test/data/pdep-test.cti new file mode 100644 index 000000000..8db635a6f --- /dev/null +++ b/test/data/pdep-test.cti @@ -0,0 +1,267 @@ +units(length='cm', time='s', quantity='mol', act_energy='cal/mol') + +ideal_gas(name='gas', + elements="H C", + species="""H R1A R1B P1 R2 + P2A P2B R3 P3A P3B + R4 P4 R5 P5A P5B + R6 P6A P6B""", + reactions='all', + initial_state=state(temperature=300.0, pressure=OneAtm)) + +#------------------------------------------------------------------------------- +# Species data +#------------------------------------------------------------------------------- + +species(name='H', + atoms='H:1', + thermo=(NASA([200.00, 1000.00], + [ 2.50000000E+00, 7.05332819E-13, -1.99591964E-15, + 2.30081632E-18, -9.27732332E-22, 2.54736599E+04, + -4.46682853E-01]), + NASA([1000.00, 3500.00], + [ 2.50000001E+00, -2.30842973E-11, 1.61561948E-14, + -4.73515235E-18, 4.98197357E-22, 2.54736599E+04, + -4.46682914E-01]))) + +species(name='R1A', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='R1B', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P1', + atoms='H:7 C:2', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='R2', + atoms='H:7 C:2', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P2A', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P2B', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='R3', + atoms='H:7 C:2', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P3A', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P3B', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='R4', + atoms='H:3 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P4', + atoms='H:3 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='R5', + atoms='H:7 C:2', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P5A', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P5B', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='R6', + atoms='H:8 C:2', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P6A', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +species(name='P6B', + atoms='H:4 C:1', + thermo=(NASA([200.00, 1000.00], + [ 5.14987613E+00, -1.36709788E-02, 4.91800599E-05, + -4.84743026E-08, 1.66693956E-11, -1.02466476E+04, + -4.64130376E+00]), + NASA([1000.00, 3500.00], + [ 7.48514950E-02, 1.33909467E-02, -5.73285809E-06, + 1.22292535E-09, -1.01815230E-13, -9.46834459E+03, + 1.84373180E+01]))) + +#------------------------------------------------------------------------------- +# Reaction data +#------------------------------------------------------------------------------- + +# Reaction 1 +pdep_arrhenius('R1A + R1B <=> P1 + H', + [(0.01, 'atm'), 1.212400e+16, -0.5779, 10872.7], + [(1.0, 'atm'), 4.910800e+31, -4.8507, 24772.8], + [(10.0, 'atm'), 1.286600e+47, -9.0246, 39796.5], + [(100.0, 'atm'), 5.963200e+56, -11.529, 52599.6]) + +# Reaction 2 +pdep_arrhenius('H + R2 <=> P2A + P2B', + [(0.001316, 'atm'), 1.230000e+08, 1.53, 4737.0], + [(0.039474, 'atm'), 2.720000e+09, 1.2, 6834.0], + [(1.0, 'atm'), 1.260000e+20, -1.83, 15003.0], + [(1.0, 'atm'), 1.230000e+04, 2.68, 6335.0], + [(10.0, 'atm'), 1.680000e+16, -0.6, 14754.0], + [(10.0, 'atm'), 3.310000e+08, 1.14, 8886.0], + [(100.0, 'atm'), 1.370000e+17, -0.79, 17603.0], + [(100.0, 'atm'), 1.280000e+06, 1.71, 9774.0]) + +# Reaction 3 +pdep_arrhenius('H + R3 <=> P3A + P3B', + [(0.001315789, 'atm'), 2.440000e+10, 1.04, 3980.0], + [(0.039473684, 'atm'), 3.890000e+10, 0.989, 4114.0], + [(1.0, 'atm'), 3.460000e+12, 0.442, 5463.0], + [(10.0, 'atm'), 1.720000e+14, -0.01, 7134.0], + [(100.0, 'atm'), -7.410000e+30, -5.54, 12108.0], + [(100.0, 'atm'), 1.900000e+15, -0.29, 8306.0]) + +# Reaction 4 +pdep_arrhenius('H + R4 <=> H + P4', + [(10.0, 'atm'), 1.740000e+07, 1.98, 4521.0]) + +# Reaction 5 +chebyshev_reaction('R5 + H (+ M) <=> P5A + P5B (+ M)', + Tmin=300.0, Tmax=2000.0, + Pmin=(0.0098692326671601278, 'atm'), Pmax=(98.692326671601279, 'atm'), + coeffs=[[ 8.28830e+00, -1.13970e+00, -1.20590e-01, 1.60340e-02], + [ 1.97640e+00, 1.00370e+00, 7.28650e-03, -3.04320e-02], + [ 3.17700e-01, 2.68890e-01, 9.48060e-02, -7.63850e-03], + [-3.12850e-02, -3.94120e-02, 4.43750e-02, 1.44580e-02]]) + +# Reaction 6 +chebyshev_reaction('R6 (+ M) <=> P6A + P6B (+ M)', + Tmin=290.0, Tmax=3000.0, + Pmin=(0.0098692326671601278, 'atm'), Pmax=(98.692326671601279, 'atm'), + coeffs=[[-1.44280e+01, 2.59970e-01, -2.24320e-02, -2.78700e-03], + [ 2.20630e+01, 4.88090e-01, -3.96430e-02, -5.48110e-03], + [-2.32940e-01, 4.01900e-01, -2.60730e-02, -5.04860e-03], + [-2.93660e-01, 2.85680e-01, -9.33730e-03, -4.01020e-03], + [-2.26210e-01, 1.69190e-01, 4.85810e-03, -2.38030e-03], + [-1.43220e-01, 7.71110e-02, 1.27080e-02, -6.41540e-04]]) diff --git a/test/data/pdep-test.inp b/test/data/pdep-test.inp new file mode 100644 index 000000000..1e7da5400 --- /dev/null +++ b/test/data/pdep-test.inp @@ -0,0 +1,149 @@ +ELEMENTS +H C AR +END + +SPECIES +H +R1A R1B P1 +R2 P2A P2B +R3 P3A P3B +R4 P4 +R5 P5A P5B +R6 P6A P6B +END + +THERMO ALL + 300.000 1000.000 5000.000 +! NOTE: All of this thermo data is bogus +H H 1 G 200.000 3500.000 1000.000 1 + 2.50000001E+00-2.30842973E-11 1.61561948E-14-4.73515235E-18 4.98197357E-22 2 + 2.54736599E+04-4.46682914E-01 2.50000000E+00 7.05332819E-13-1.99591964E-15 3 + 2.30081632E-18-9.27732332E-22 2.54736599E+04-4.46682853E-01 4 + +R1A C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +R1B C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P1 C 2H 7 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 + +R2 C 2H 7 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P2A C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P2B C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 + +R3 C 2H 7 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P3A C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P3B C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 + +R4 C 1H 3 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P4 C 1H 3 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 + +R5 C 2H 7 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P5A C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P5B C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 + +R6 C 2H 8 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P6A C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +P6B C 1H 4 G 200.000 3500.000 1000.000 1 + 7.48514950E-02 1.33909467E-02-5.73285809E-06 1.22292535E-09-1.01815230E-13 2 +-9.46834459E+03 1.84373180E+01 5.14987613E+00-1.36709788E-02 4.91800599E-05 3 +-4.84743026E-08 1.66693956E-11-1.02466476E+04-4.64130376E+00 4 +END + +REACTIONS +! Single PLOG reaction +R1A+R1B=P1+H 1.0 0.0 0.0 +PLOG / 0.01 1.2124e+16 -0.5779 10872.7 / +PLOG / 1 4.9108e+31 -4.8507 24772.8 / +PLOG / 10 1.2866e+47 -9.0246 39796.5 / +PLOG / 100 5.9632e+56 -11.5290 52599.6 / + +! Multiple PLOG expressions at the same pressure +H+R2=P2A+P2B 1.0 0.0 0.0 +PLOG / 0.001316 1.23e+08 1.53 4737 / +PLOG / 0.039474 2.72e+09 1.20 6834 / +PLOG / 1 1.26e+20 -1.83 15003 / +PLOG / 1 1.23E+04 2.68 6335 / +PLOG / 10 1.68e+16 -0.60 14754 / +PLOG / 10 3.31E+08 1.14 8886 / +PLOG / 100 1.37e+17 -0.79 17603 / +PLOG / 100 1.28E+06 1.71 9774 / + +! PLOG with duplicate rates and negative A-factors +H+R3=P3A+P3B 1.0 0.0 0.0 +PLOG / 0.001315789 2.44E+10 1.04 3980 / +PLOG / 0.039473684 3.89E+10 0.989 4114 / +PLOG / 1 3.46E+12 0.442 5463 / +PLOG / 10 1.72E+14 -0.01 7134 / +PLOG / 100 -7.41E+30 -5.54 12108 / +PLOG / 100 1.90E+15 -0.29 8306 / + +! Degenerate PLOG with a single rate expression +H+R4=H+P4 1.0 0.0 0.0 +PLOG / 10 1.74e+07 1.98 4521 / + +! Bimolecular CHEB +R5+H(+m)=P5A+P5B(+m) 1.0E0 0.0 0.0 +TCHEB / 300.0 2000.0 / PCHEB / 0.009869232667160128 98.69232667160128 / +CHEB / 4 4 / +CHEB / 8.2883000e+00 -1.1397000e+00 -1.2059000e-01 1.6034000e-02 / +CHEB / 1.9764000e+00 1.0037000e+00 7.2865000e-03 -3.0432000e-02 / +CHEB / 3.1770000e-01 2.6889000e-01 9.4806000e-02 -7.6385000e-03 / +CHEB / -3.1285000e-02 -3.9412000e-02 4.4375000e-02 1.4458000e-02 / + +! Unimolecular decomposition CHEB +R6(+M)=P6A+P6B(+M) 1.000e+00 0.000 0.000 +TCHEB / 290.0 3000.0 / PCHEB / 0.009869232667160128 98.69232667160128 / +CHEB / 6 4 / +CHEB / -1.4428000e+01 2.5997000e-01 -2.2432000e-02 -2.7870000e-03 / +CHEB / 2.2063000e+01 4.8809000e-01 -3.9643000e-02 -5.4811000e-03 / +CHEB / -2.3294000e-01 4.0190000e-01 -2.6073000e-02 -5.0486000e-03 / +CHEB / -2.9366000e-01 2.8568000e-01 -9.3373000e-03 -4.0102000e-03 / +CHEB / -2.2621000e-01 1.6919000e-01 4.8581000e-03 -2.3803000e-03 / +CHEB / -1.4322000e-01 7.7111000e-02 1.2708000e-02 -6.4154000e-04 / +END diff --git a/test/data/pdep-test.xml b/test/data/pdep-test.xml new file mode 100644 index 000000000..62f0827f1 --- /dev/null +++ b/test/data/pdep-test.xml @@ -0,0 +1,522 @@ + + + + + + + H C + + H R1A R1B P1 R2 + P2A P2B R3 P3A P3B + R4 P4 R5 P5A P5B + R6 P6A P6B + + + 300.0 + 101325.0 + + + + + + + + + + + + H:1 + + + + 2.500000000E+00, 7.053328190E-13, -1.995919640E-15, 2.300816320E-18, + -9.277323320E-22, 2.547365990E+04, -4.466828530E-01 + + + + 2.500000010E+00, -2.308429730E-11, 1.615619480E-14, -4.735152350E-18, + 4.981973570E-22, 2.547365990E+04, -4.466829140E-01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:7 C:2 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:7 C:2 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:7 C:2 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:3 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:3 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:7 C:2 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:8 C:2 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + H:4 C:1 + + + + 5.149876130E+00, -1.367097880E-02, 4.918005990E-05, -4.847430260E-08, + 1.666939560E-11, -1.024664760E+04, -4.641303760E+00 + + + + 7.485149500E-02, 1.339094670E-02, -5.732858090E-06, 1.222925350E-09, + -1.018152300E-13, -9.468344590E+03, 1.843731800E+01 + + + + + + + + + R1A + R1B [=] P1 + H + + + 1.212400E+13 + -0.57789999999999997 + 10872.700000 +

0.01

+
+ + 4.910800E+28 + -4.8506999999999998 + 24772.800000 +

1.0

+
+ + 1.286600E+44 + -9.0245999999999995 + 39796.500000 +

10.0

+
+ + 5.963200E+53 + -11.529 + 52599.600000 +

100.0

+
+
+ R1B:1 R1A:1.0 + H:1 P1:1.0 +
+ + + + H + R2 [=] P2A + P2B + + + 1.230000E+05 + 1.53 + 4737.000000 +

0.0013159999999999999

+
+ + 2.720000E+06 + 1.2 + 6834.000000 +

0.039474000000000002

+
+ + 1.260000E+17 + -1.8300000000000001 + 15003.000000 +

1.0

+
+ + 1.230000E+01 + 2.6800000000000002 + 6335.000000 +

1.0

+
+ + 1.680000E+13 + -0.59999999999999998 + 14754.000000 +

10.0

+
+ + 3.310000E+05 + 1.1399999999999999 + 8886.000000 +

10.0

+
+ + 1.370000E+14 + -0.79000000000000004 + 17603.000000 +

100.0

+
+ + 1.280000E+03 + 1.71 + 9774.000000 +

100.0

+
+
+ H:1.0 R2:1 + P2A:1.0 P2B:1 +
+ + + + H + R3 [=] P3A + P3B + + + 2.440000E+07 + 1.04 + 3980.000000 +

0.0013157889999999999

+
+ + 3.890000E+07 + 0.98899999999999999 + 4114.000000 +

0.039473684000000002

+
+ + 3.460000E+09 + 0.442 + 5463.000000 +

1.0

+
+ + 1.720000E+11 + -0.01 + 7134.000000 +

10.0

+
+ + -7.410000E+27 + -5.54 + 12108.000000 +

100.0

+
+ + 1.900000E+12 + -0.28999999999999998 + 8306.000000 +

100.0

+
+
+ H:1.0 R3:1 + P3B:1 P3A:1.0 +
+ + + + H + R4 [=] H + P4 + + + 1.740000E+04 + 1.98 + 4521.000000 +

10.0

+
+
+ R4:1 H:1.0 + H:1.0 P4:1 +
+ + + + R5 + H (+ M) [=] P5A + P5B (+ M) + + 300.0 + 2000.0 + 0.0098692326671601278 + 98.692326671601279 + + 5.28830e+00, -1.13970e+00, -1.20590e-01, 1.60340e-02, + 1.97640e+00, 1.00370e+00, 7.28650e-03, -3.04320e-02, + 3.17700e-01, 2.68890e-01, 9.48060e-02, -7.63850e-03, + -3.12850e-02, -3.94120e-02, 4.43750e-02, 1.44580e-02 + + R5:1.0 H:1 + P5A:1.0 P5B:1 + + + + + R6 (+ M) [=] P6A + P6B (+ M) + + 290.0 + 3000.0 + 0.0098692326671601278 + 98.692326671601279 + + -1.44280e+01, 2.59970e-01, -2.24320e-02, -2.78700e-03, + 2.20630e+01, 4.88090e-01, -3.96430e-02, -5.48110e-03, + -2.32940e-01, 4.01900e-01, -2.60730e-02, -5.04860e-03, + -2.93660e-01, 2.85680e-01, -9.33730e-03, -4.01020e-03, + -2.26210e-01, 1.69190e-01, 4.85810e-03, -2.38030e-03, + -1.43220e-01, 7.71110e-02, 1.27080e-02, -6.41540e-04 + + R6:1.0 + P6A:1.0 P6B:1 + +
+
diff --git a/test/kinetics/pdep.cpp b/test/kinetics/pdep.cpp new file mode 100644 index 000000000..8dee653ca --- /dev/null +++ b/test/kinetics/pdep.cpp @@ -0,0 +1,166 @@ +#include "gtest/gtest.h" +#include "cantera/kinetics/importKinetics.h" +#include "cantera/thermo/IdealGasPhase.h" +#include "cantera/kinetics/GasKinetics.h" + +namespace Cantera +{ + +class PdepTest : public testing::Test +{ +public: + PdepTest() {} + + static void SetUpTestCase() { + XML_Node* phase_node = get_XML_File("../data/pdep-test.xml"); + + thermo_ = new IdealGasPhase(); + kin_ = new GasKinetics(); + + buildSolutionFromXML(*phase_node, "gas", "phase", thermo_, kin_); + } + + static void TearDownTestCase() { + delete thermo_; + thermo_ = NULL; + + delete kin_; + kin_ = NULL; + } + + void SetUp() { + std::string Xref = "H:1.0, R1A:1.0, R1B:1.0, R2:1.0, " + "R3:1.0, R4:1.0, R5:1.0, R6:1.0"; + + thermo_->setState_TPX(900.0, 101325 * 8.0, Xref); + } + +protected: + static ThermoPhase* thermo_; + static Kinetics* kin_; + + void set_TP(double T, double P) { + T_ = T; + RT_ = GasConstant / 4184.0 * T; + P_ = P; + thermo_->setState_TP(T_, P_); + } + + double k(double A, double n, double Ea) { + return A * pow(T_, n) * exp(-Ea/RT_); + } + double T_, RT_, P_; +}; + +ThermoPhase* PdepTest::thermo_ = NULL; +Kinetics* PdepTest::kin_ = NULL; + +TEST_F(PdepTest, reactionCounts) { + EXPECT_EQ(6, kin_->nReactions()); +} + +TEST_F(PdepTest, PlogLowPressure) { + // Test that P-log reactions have the right low-pressure limit + set_TP(500.0, 1e-7); + vector_fp kf(6); + kin_->getFwdRateConstants(&kf[0]); + + // Pre-exponential factor decreases by 10^3 for second-order reaction + // when converting from cm + mol to m + kmol + double kf0 = k(1.212400e+13, -0.5779, 10872.7); + double kf1 = k(1.230000e+05, 1.53, 4737.0); + double kf2 = k(2.440000e+7, 1.04, 3980.0); + double kf3 = k(1.740000e+04, 1.98, 4521.0); + + EXPECT_NEAR(kf0, kf[0], 1e-9 * kf0); + EXPECT_NEAR(kf1, kf[1], 1e-9 * kf1); + EXPECT_NEAR(kf2, kf[2], 1e-9 * kf2); + EXPECT_NEAR(kf3, kf[3], 1e-9 * kf3); +} + +TEST_F(PdepTest, PlogHighPressure) { + // Test that P-log reactions have the right high-pressure limit + set_TP(500.0, 1e10); + vector_fp kf(6); + kin_->getFwdRateConstants(&kf[0]); + + // Pre-exponential factor decreases by 10^3 for second-order reaction + // when converting from cm + mol to m + kmol + double kf0 = k(5.963200e+53, -11.529, 52599.6); + double kf3 = k(1.740000e+04, 1.98, 4521.0); + + EXPECT_NEAR(kf0, kf[0], 1e-9 * kf0); + EXPECT_NEAR(kf3, kf[3], 1e-9 * kf3); +} + +TEST_F(PdepTest, PlogDuplicatePressures) { + // Test that multiple rate expressions are combined when necessary + set_TP(500.0, 1e10); + vector_fp kf(6); + + kin_->getFwdRateConstants(&kf[0]); + double kf1 = k(1.3700e+14, -0.79, 17603.0) + k(1.2800e+03, 1.71, 9774.0); + double kf2 = k(-7.4100e+27, -5.54, 12108.0) + k(1.9000e+12, -0.29, 8306.0); + + EXPECT_NEAR(kf1, kf[1], 1e-9 * kf1); + EXPECT_NEAR(kf2, kf[2], 1e-9 * kf2); +} + +TEST_F(PdepTest, PlogCornerCases) { + // Test rate evaluation at the corner cases where the pressure + // is exactly of the specified interpolation values + set_TP(500.0, 101325); + vector_fp kf(6); + kin_->getFwdRateConstants(&kf[0]); + + double kf0 = k(4.910800e+28, -4.8507, 24772.8); + double kf1 = k(1.2600e+17, -1.83, 15003.0) + k(1.2300e+01, 2.68, 6335.0); + double kf2 = k(3.4600e+9, 0.442, 5463.0); + + EXPECT_NEAR(kf0, kf[0], 1e-9 * kf0); + EXPECT_NEAR(kf1, kf[1], 1e-9 * kf1); + EXPECT_NEAR(kf2, kf[2], 1e-9 * kf2); +} + +TEST_F(PdepTest, PlogIntermediatePressure1) { + set_TP(1100.0, 20*101325); + vector_fp ropf(6); + kin_->getFwdRatesOfProgress(&ropf[0]); + + // Expected rates computed using Chemkin + // ROP increases by 10**3 when converting from mol/cm3 to kmol/m3 + EXPECT_NEAR(3.100682e+05, ropf[0], 1e2); + EXPECT_NEAR(2.006871e+05, ropf[1], 1e2); + EXPECT_NEAR(4.468658e+06, ropf[2], 1e2); + EXPECT_NEAR(1.774796e+06, ropf[3], 1e2); +} + +TEST_F(PdepTest, PlogIntermediatePressure2) { + thermo_->setState_TP(1100.0, 0.5*101325); + vector_fp ropf(6); + kin_->getFwdRatesOfProgress(&ropf[0]); + + EXPECT_NEAR(5.244649e+02, ropf[0], 5e-2); + EXPECT_NEAR(2.252537e+02, ropf[1], 2e-2); + EXPECT_NEAR(2.985338e+03, ropf[2], 3e-1); + EXPECT_NEAR(1.109248e+03, ropf[3], 1e-1); +} + +TEST_F(PdepTest, PlogIntermediatePressure3) { + thermo_->setState_TP(800.0, 70*101325); + vector_fp ropf(6); + kin_->getFwdRatesOfProgress(&ropf[0]); + + EXPECT_NEAR(2.274501e+04, ropf[0], 1e+1); + EXPECT_NEAR(2.307191e+05, ropf[1], 1e+2); + EXPECT_NEAR(2.224601e+07, ropf[2], 1e+3); + EXPECT_NEAR(1.007440e+07, ropf[3], 1e+3); +} +} // namespace Cantera + +int main(int argc, char** argv) +{ + printf("Running main() from pdep.cpp\n"); + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}