Added a test problem for the duplication of common ThermoPhase

objects like IdealGasPhase and SurfPhase.
This commit is contained in:
Harry Moffat 2007-06-04 18:41:15 +00:00
parent 410dd699da
commit 084ac7aa53
11 changed files with 931 additions and 4 deletions

View file

@ -15,6 +15,7 @@ all:
cd fracCoeff; @MAKE@ all
cd negATest; @MAKE@ all
cd diamondSurf; @MAKE@ all
cd diamondSurf_dupl; @MAKE@ all
cd ChemEquil_gri_matrix; @MAKE@ all
cd ChemEquil_gri_pairs; @MAKE@ all
cd ChemEquil_ionizedGas; @MAKE@ all
@ -41,6 +42,7 @@ test:
@ cd fracCoeff; @MAKE@ -s test
@ cd negATest; @MAKE@ -s test
@ cd diamondSurf; @MAKE@ -s test
@ cd diamondSurf_dupl; @MAKE@ -s test
@ cd ChemEquil_gri_matrix; @MAKE@ -s test
@ cd ChemEquil_gri_pairs; @MAKE@ -s test
@ cd ChemEquil_ionizedGas; @MAKE@ -s test
@ -69,6 +71,7 @@ clean:
cd fracCoeff; $(RM) .depends ; @MAKE@ clean
cd negATest; $(RM) .depends ; @MAKE@ clean
cd diamondSurf; $(RM) .depends ; @MAKE@ clean
cd diamondSurf_dupl; $(RM) .depends ; @MAKE@ clean
cd ChemEquil_gri_matrix; $(RM) .depends ; @MAKE@ clean
cd ChemEquil_gri_pairs; $(RM) .depends ; @MAKE@ clean
cd ChemEquil_ionizedGas; $(RM) .depends ; @MAKE@ clean
@ -85,6 +88,7 @@ depends:
cd fracCoeff; @MAKE@ depends
cd negATest; @MAKE@ depends
cd diamondSurf; @MAKE@ depends
cd diamondSurf_dupl; @MAKE@ depends
cd ChemEquil_gri_matrix; @MAKE@ depends
cd ChemEquil_gri_pairs; @MAKE@ depends
cd ChemEquil_ionizedGas; @MAKE@ depends

View file

@ -5,3 +5,4 @@ DH_graph_1.d
DH_graph_1.log
Makefile
output.txt
csvCode.txt

View file

@ -5,4 +5,4 @@ DH_graph_1.d
DH_graph_1.log
Makefile
output.txt
csvCode.txt

View file

@ -5,3 +5,4 @@ DH_graph_1.d
DH_graph_1.log
Makefile
output.txt
csvCode.txt

View file

@ -31,6 +31,7 @@ ifeq ($(test_electrolytes),1)
cd DH_graph_bdotak; @MAKE@ all
cd DH_graph_NM; @MAKE@ all
cd DH_graph_Pitzer; @MAKE@ all
cd HMW_dupl_test; @MAKE@ all
endif
test:
@ -57,6 +58,7 @@ ifeq ($(test_electrolytes),1)
cd DH_graph_bdotak; @MAKE@ -s test
cd DH_graph_NM; @MAKE@ -s test
cd DH_graph_Pitzer; @MAKE@ -s test
cd HMW_dupl_test; @MAKE@ -s test
endif
#
# Have to remove .depends before calling make, because
@ -85,6 +87,7 @@ clean:
cd DH_graph_bdotak; $(RM) .depends ; @MAKE@ clean
cd DH_graph_NM; $(RM) .depends ; @MAKE@ clean
cd DH_graph_Pitzer; $(RM) .depends ; @MAKE@ clean
cd HMW_dupl_test; $(RM) .depends ; @MAKE@ clean
depends:
ifeq ($(test_issp),1)
@ -107,7 +110,8 @@ ifeq ($(test_electrolytes),1)
cd HMW_test_3; @MAKE@ depends
cd DH_graph_1; @MAKE@ depends
cd DH_graph_acommon; @MAKE@ depends
cd DH_graph_bdotak; @MAKE@ depends
cd DH_graph_NM; @MAKE@ depends
cd DH_graph_Pitzer; @MAKE@ depends
cd DH_graph_bdotak; @MAKE@ depends
cd DH_graph_NM; @MAKE@ depends
cd DH_graph_Pitzer; @MAKE@ depends
cd HMW_dupl_test; @MAKE@ depends
endif

View file

@ -0,0 +1,18 @@
Makefile
csvCode.txt
diff_test.out
output.txt
runDiamond
ct2ctml.log
xml_diff_test.out
.depends
*.d
.cttmp.py
runDiamond.ilk
diamondSurf.pdb
diamonda.xml
outputa.txt
test.xml
SunWS_cache
diff_test.txt
runDiamondDupl

View file

@ -0,0 +1,122 @@
#!/bin/sh
############################################################################
#
# Makefile to compile and link a C++ application to
# Cantera.
#
#############################################################################
# addition to suffixes
.SUFFIXES : .d
# the name of the executable program to be created
PROG_NAME = runDiamondDupl
# the object files to be linked together. List those generated from Fortran
# and from C/C++ separately
OBJS = runDiamondDupl.o
# Location of the current build. Will assume that tests are run
# in the source directory tree location
src_dir_tree = 0
# additional flags to be passed to the linker. If your program
# requires other external libraries, put them here
LINK_OPTIONS = @EXTRA_LINK@
#############################################################################
# Check to see whether we are in the msvc++ environment
os_is_win = @OS_IS_WIN@
# Fortran libraries
FORT_LIBS = @FLIBS@
# the C++ compiler
CXX = @CXX@
# C++ compile flags
ifeq ($(src_dir_tree), 1)
CXX_FLAGS = -DSRCDIRTREE @CXXFLAGS@
else
CXX_FLAGS = @CXXFLAGS@
endif
# Ending C++ linking libraries
LCXX_END_LIBS = @LCXX_END_LIBS@
# the directory where the Cantera libraries are located
CANTERA_LIBDIR=@buildlib@
# required Cantera libraries
CANTERA_LIBS = @LOCAL_LIBS@ -lctcxx
# the directory where Cantera include files may be found.
ifeq ($(src_dir_tree), 1)
CANTERA_INCDIR=../../Cantera/src
else
CANTERA_INCDIR=@ctroot@/build/include/cantera
endif
# flags passed to the C++ compiler/linker for the linking step
LCXX_FLAGS = -L$(CANTERA_LIBDIR) @LOCAL_LIB_DIRS@ @CXXFLAGS@
# How to compile C++ source files to object files
.@CXX_EXT@.@OBJ_EXT@: Interface.h
$(CXX) -c $< -I$(CANTERA_INCDIR) @CXX_INCLUDES@ $(CXX_FLAGS)
# How to compile the dependency file
.cpp.d:
@CXX_DEPENDS@ -I$(CANTERA_INCDIR) $(CXX_FLAGS) $*.cpp > $*.d
# List of dependency files to be created
DEPENDS=$(OBJS:.o=.d)
# Program Name
PROGRAM = $(PROG_NAME)$(EXE_EXT)
# all rule makes a single program
all: $(PROGRAM)
# Rule to make the program
$(PROGRAM): $(OBJS) $(CANTERA_LIBDIR)/libctbase.a
$(CXX) -o $(PROGRAM) $(OBJS) $(LCXX_FLAGS) $(LINK_OPTIONS) \
$(CANTERA_LIBS) @LIBS@ $(FORT_LIBS) \
$(LCXX_END_LIBS)
# Add an additional target for stability:
$(OBJS): $(CANTERA_LIBDIR)/libctbase.a $(CANTERA_LIBDIR)/libthermo.a
# depends target
depends:
$(RM) *.d .depends
@MAKE@ .depends
.depends: $(DEPENDS)
cat *.d > .depends
# Do the test -> For the windows vc++ environment, we have to skip checking on
# whether the program is uptodate, because we don't utilize make
# in that environment to build programs.
test:
ifeq ($(os_is_win), 1)
else
@ @MAKE@ -s $(PROGRAM)
endif
@ ./runtest
# clean target -> clean up
clean:
$(RM) $(OBJS) $(PROGRAM) $(DEPENDS) .depends
../../bin/rm_cvsignore
(if test -d SunWS_cache ; then \
$(RM) -rf SunWS_cache ; \
fi )
ifeq ($(wildcard .depends), .depends)
include .depends
endif

View file

@ -0,0 +1,449 @@
<?xml version="1.0"?>
<ctml>
<validate reactions="yes" species="yes"/>
<!-- phase gas -->
<phase dim="3" id="gas">
<elementArray datasrc="elements.xml">H C</elementArray>
<speciesArray datasrc="gri30.xml#species_data">H H2 CH3 CH4</speciesArray>
<state>
<temperature units="K">1200.0</temperature>
<pressure units="Pa">2666.4473684210525</pressure>
<moleFractions>H:0.002, H2:0.988, CH3:0.0002, CH4:0.01</moleFractions>
</state>
<thermo model="IdealGas"/>
<kinetics model="GasKinetics"/>
<transport model="None"/>
</phase>
<!-- phase diamond -->
<phase dim="3" id="diamond">
<elementArray datasrc="elements.xml">H C</elementArray>
<speciesArray datasrc="#species_data">C(d)</speciesArray>
<thermo model="StoichSubstance">
<density units="g/cm3">3.52</density>
</thermo>
<transport model="None"/>
<kinetics model="none"/>
</phase>
<!-- phase diamond_100 -->
<phase dim="2" id="diamond_100">
<elementArray datasrc="elements.xml">H C </elementArray>
<speciesArray datasrc="#species_data">c6HH c6H* c6*H c6** c6HM c6HM* c6*M c6B</speciesArray>
<reactionArray datasrc="#reaction_data"/>
<state>
<temperature units="K">1200.0</temperature>
<coverages>c6H*:0.1, c6HH:0.9</coverages>
</state>
<thermo model="Surface">
<site_density units="mol/cm2">3e-09</site_density>
</thermo>
<kinetics model="Interface"/>
<transport model="None"/>
<phaseArray>gas diamond</phaseArray>
</phase>
<!-- species definitions -->
<speciesData id="species_data">
<!-- species C(d) -->
<species name="C(d)">
<atomArray>C:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="J/mol">0.0</h0>
<s0 units="J/mol/K">0.0</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6H* -->
<species name="c6H*">
<atomArray>H:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">51.700000000000003</h0>
<s0 units="cal/mol/K">19.5</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6*H -->
<species name="c6*H">
<atomArray>H:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">46.100000000000001</h0>
<s0 units="cal/mol/K">19.899999999999999</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6HH -->
<species name="c6HH">
<atomArray>H:2 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">11.4</h0>
<s0 units="cal/mol/K">21.0</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6HM -->
<species name="c6HM">
<atomArray>H:4 C:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">26.899999999999999</h0>
<s0 units="cal/mol/K">40.299999999999997</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6HM* -->
<species name="c6HM*">
<atomArray>H:3 C:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">65.799999999999997</h0>
<s0 units="cal/mol/K">40.100000000000001</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6*M -->
<species name="c6*M">
<atomArray>H:3 C:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">53.299999999999997</h0>
<s0 units="cal/mol/K">38.899999999999999</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6** -->
<species name="c6**">
<atomArray>C:0 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">90.0</h0>
<s0 units="cal/mol/K">18.399999999999999</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
<!-- species c6B -->
<species name="c6B">
<atomArray>H:2 C:1 </atomArray>
<thermo>
<const_cp Tmax="5000.0" Tmin="100.0">
<t0 units="K">298.14999999999998</t0>
<h0 units="kcal/mol">40.899999999999999</h0>
<s0 units="cal/mol/K">26.899999999999999</s0>
<cp0 units="J/mol/K">0.0</cp0>
</const_cp>
</thermo>
</species>
</speciesData>
<reactionData id="reaction_data">
<!-- reaction 0001 -->
<reaction reversible="yes" type="surface" id="0001">
<equation>c6HH + H [=] c6H* + H2</equation>
<rateCoeff>
<Arrhenius>
<A>1.300000E+11</A>
<b>0.0</b>
<E units="kcal/mol">7.300000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6HH:1.0</reactants>
<products>H2:1 c6H*:1.0</products>
</reaction>
<!-- reaction 0002 -->
<reaction reversible="yes" type="surface" id="0002">
<equation>c6H* + H [=] c6HH</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6H*:1.0 H:1</reactants>
<products>c6HH:1.0</products>
</reaction>
<!-- reaction 0003 -->
<reaction reversible="yes" type="surface" id="0003">
<equation>c6H* + CH3 [=] c6HM</equation>
<rateCoeff>
<Arrhenius>
<A>5.000000E+09</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6H*:1.0 CH3:1</reactants>
<products>c6HM:1.0</products>
</reaction>
<!-- reaction 0004 -->
<reaction reversible="yes" type="surface" id="0004">
<equation>c6HM + H [=] c6*M + H2</equation>
<rateCoeff>
<Arrhenius>
<A>1.300000E+11</A>
<b>0.0</b>
<E units="kcal/mol">7.300000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6HM:1.0</reactants>
<products>H2:1 c6*M:1.0</products>
</reaction>
<!-- reaction 0005 -->
<reaction reversible="yes" type="surface" id="0005">
<equation>c6*M + H [=] c6HM</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6*M:1.0</reactants>
<products>c6HM:1.0</products>
</reaction>
<!-- reaction 0006 -->
<reaction reversible="yes" type="surface" id="0006">
<equation>c6HM + H [=] c6HM* + H2</equation>
<rateCoeff>
<Arrhenius>
<A>2.800000E+04</A>
<b>0.0</b>
<E units="kcal/mol">7.700000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6HM:1.0</reactants>
<products>H2:1 c6HM*:1.0</products>
</reaction>
<!-- reaction 0007 -->
<reaction reversible="yes" type="surface" id="0007">
<equation>c6HM* + H [=] c6HM</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6HM*:1.0 H:1</reactants>
<products>c6HM:1.0</products>
</reaction>
<!-- reaction 0008 -->
<reaction reversible="yes" type="surface" id="0008">
<equation>c6HM* [=] c6*M</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+08</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6HM*:1.0</reactants>
<products>c6*M:1.0</products>
</reaction>
<!-- reaction 0009 -->
<reaction reversible="yes" type="surface" id="0009">
<equation>c6HM* + H [=] c6H* + CH3</equation>
<rateCoeff>
<Arrhenius>
<A>3.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6HM*:1.0 H:1</reactants>
<products>c6H*:1.0 CH3:1</products>
</reaction>
<!-- reaction 0010 -->
<reaction reversible="yes" type="surface" id="0010">
<equation>c6HM* + H [=] c6B + H2</equation>
<rateCoeff>
<Arrhenius>
<A>1.300000E+11</A>
<b>0.0</b>
<E units="kcal/mol">7.300000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6HM*:1.0 H:1</reactants>
<products>H2:1 c6B:1.0</products>
</reaction>
<!-- reaction 0011 -->
<reaction reversible="yes" type="surface" id="0011">
<equation>c6*M + H [=] c6B + H2</equation>
<rateCoeff>
<Arrhenius>
<A>2.800000E+04</A>
<b>2.0</b>
<E units="kcal/mol">7.700000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6*M:1.0</reactants>
<products>H2:1 c6B:1.0</products>
</reaction>
<!-- reaction 0012 -->
<reaction reversible="yes" type="surface" id="0012">
<equation>c6HH + H [=] c6*H + H2</equation>
<rateCoeff>
<Arrhenius>
<A>1.300000E+11</A>
<b>0.0</b>
<E units="kcal/mol">7.300000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6HH:1.0</reactants>
<products>H2:1 c6*H:1.0</products>
</reaction>
<!-- reaction 0013 -->
<reaction reversible="yes" type="surface" id="0013">
<equation>c6*H + H [=] c6HH</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6*H:1.0 H:1</reactants>
<products>c6HH:1.0</products>
</reaction>
<!-- reaction 0014 -->
<reaction reversible="yes" type="surface" id="0014">
<equation>c6H* + H [=] c6** + H2</equation>
<rateCoeff>
<Arrhenius>
<A>1.300000E+11</A>
<b>0.0</b>
<E units="kcal/mol">7.300000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6H*:1.0 H:1</reactants>
<products>H2:1 c6**:1.0</products>
</reaction>
<!-- reaction 0015 -->
<reaction reversible="yes" type="surface" id="0015">
<equation>c6** + H [=] c6H*</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6**:1.0</reactants>
<products>c6H*:1.0</products>
</reaction>
<!-- reaction 0016 -->
<reaction reversible="yes" type="surface" id="0016">
<equation>c6*H + H [=] c6** + H2</equation>
<rateCoeff>
<Arrhenius>
<A>4.500000E+03</A>
<b>2.0</b>
<E units="kcal/mol">5.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6*H:1.0 H:1</reactants>
<products>H2:1 c6**:1.0</products>
</reaction>
<!-- reaction 0017 -->
<reaction reversible="yes" type="surface" id="0017">
<equation>c6** + H [=] c6*H</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+10</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>H:1 c6**:1.0</reactants>
<products>c6*H:1.0</products>
</reaction>
<!-- reaction 0018 -->
<reaction reversible="yes" type="surface" id="0018">
<equation>c6** + CH3 [=] c6*M</equation>
<rateCoeff>
<Arrhenius>
<A>5.000000E+09</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>CH3:1 c6**:1.0</reactants>
<products>c6*M:1.0</products>
</reaction>
<!-- reaction 0019 -->
<reaction reversible="yes" type="surface" id="0019">
<equation>c6H* [=] c6*H</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+08</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6H*:1.0</reactants>
<products>c6*H:1.0</products>
</reaction>
<!-- reaction 0020 -->
<reaction reversible="yes" type="surface" id="0020">
<equation>c6B [=] c6HH + C(d)</equation>
<rateCoeff>
<Arrhenius>
<A>1.000000E+09</A>
<b>0.0</b>
<E units="kcal/mol">0.000000</E>
</Arrhenius>
</rateCoeff>
<reactants>c6B:1.0</reactants>
<products>C(d):1 c6HH:1.0</products>
</reaction>
</reactionData>
</ctml>

View file

@ -0,0 +1,53 @@
Number of species = 4
Number of species in diamond = 1
Number of species in diamond_100 = 8
Number of reactions = 20
0 1 -8.95751e-05
1 2 4.48403e-05
2 3 -3.51539e-08
3 4 nil
4 0 3.51539e-08
5 2 nil
6 1 nil
7 1 nil
8 0 nil
9 4 nil
10 3 nil
11 3 nil
12 2 nil
sum = nil
growth rate = 0.43183 microns per hour
Coverages:
0 c6HH 0.462262
1 c6H* 0.037052
2 c6*H 0.474283
3 c6** 0.0219445
4 c6HM 0.00174648
5 c6HM* 2.56272e-05
6 c6*M 0.00264858
7 c6B 3.8171e-05
Number of reactions = 20
0 1 -8.95751e-05
1 2 4.48403e-05
2 3 -3.51539e-08
3 4 nil
4 0 3.51539e-08
5 2 nil
6 1 nil
7 1 nil
8 0 nil
9 4 nil
10 3 nil
11 3 nil
12 2 nil
sum = nil
growth rate = 0.43183 microns per hour
Coverages:
0 c6HH 0.462262
1 c6H* 0.037052
2 c6*H 0.474283
3 c6** 0.0219445
4 c6HM 0.00174648
5 c6HM* 2.56272e-05
6 c6*M 0.00264858
7 c6B 3.8171e-05

View file

@ -0,0 +1,240 @@
/**
* @file runDiamond.cpp
*
*/
// Example
//
// Note that this example needs updating. It works fine, but is
// written in a way that is less than transparent or
// user-friendly. This could be rewritten using class Interface to
// make things simpler.
#include <iostream>
#include <string>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
#ifdef DEBUG_HKM
int iDebug_HKM = 0;
#endif
/*****************************************************************/
/*****************************************************************/
#include "Cantera.h"
#include "kinetics.h"
using namespace Cantera;
void printDbl(double val) {
if (fabs(val) < 5.0E-17) {
cout << " nil";
} else {
cout << val;
}
}
int main(int argc, char** argv) {
int i, k;
string infile = "diamond.xml";
try {
XML_Node *xc = new XML_Node();
string path = findInputFile(infile);
ctml::get_CTML_Tree(xc, path);
XML_Node * const xg = xc->findNameID("phase", "gas");
ThermoPhase *gasTP = newPhase(*xg);
int nsp = gasTP->nSpecies();
cout << "Number of species = " << nsp << endl;
XML_Node * const xd = xc->findNameID("phase", "diamond");
ThermoPhase *diamondTP = newPhase(*xd);
int nsp_diamond = diamondTP->nSpecies();
cout << "Number of species in diamond = " << nsp_diamond << endl;
XML_Node * const xs = xc->findNameID("phase", "diamond_100");
ThermoPhase *diamond100TP = newPhase(*xs);
//SurfPhase *diamond100TP = new SurfPhase(*xs);
int nsp_d100 = diamond100TP->nSpecies();
cout << "Number of species in diamond_100 = " << nsp_d100 << endl;
vector<ThermoPhase *> phaseList;
phaseList.push_back(gasTP);
phaseList.push_back(diamondTP);
phaseList.push_back(diamond100TP);
InterfaceKinetics *iKin_ptr = new InterfaceKinetics();
importKinetics(*xs, phaseList, iKin_ptr);
int nr = iKin_ptr->nReactions();
cout << "Number of reactions = " << nr << endl;
double x[20];
for (i = 0; i < 20; i++) x[i] = 0.0;
x[0] = 0.0010;
x[1] = 0.9888;
x[2] = 0.0002;
x[3] = 0.0100;
double p = 20.0*OneAtm/760.0;
gasTP->setState_TPX(1200., p, x);
for (i = 0; i < 20; i++) x[i] = 0.0;
int i0 = diamond100TP->speciesIndex("c6H*");
x[i0] = 0.1;
int i1 = diamond100TP->speciesIndex("c6HH");
x[i1] = 0.9;
diamond100TP->setState_TX(1200., x);
for (i = 0; i < 20; i++) x[i] = 0.0;
x[0] = 1.0;
diamondTP->setState_TPX(1200., p, x);
iKin_ptr->advanceCoverages(100.);
// Throw some asserts in here to test that they compile
AssertTrace(p == p);
AssertThrow(p == p, "main");
AssertThrowMsg(i == 20, "main", "are you kidding");
double src[20];
for (i = 0; i < 20; i++) src[i] = 0.0;
iKin_ptr->getNetProductionRates(src);
double sum = 0.0;
double naH = 0.0;
for (k = 0; k < 13; k++) {
if (k < 4) {
naH = gasTP->nAtoms(k, 0);
} else if (k == 4) {
naH = 0;
} else if (k > 4) {
int itp = k - 5;
naH = diamond100TP->nAtoms(itp, 0);
}
cout << k << " " << naH << " " ;
printDbl(src[k]);
cout << endl;
sum += naH * src[k];
}
cout << "sum = ";
printDbl(sum);
cout << endl;
double mwd = diamondTP->molecularWeight(0);
double dens = diamondTP->density();
double gr = src[4] * mwd / dens;
gr *= 1.0E6 * 3600.;
cout << "growth rate = " << gr << " microns per hour" << endl;
diamond100TP->getMoleFractions(x);
cout << "Coverages:" << endl;
for (k = 0; k < 8; k++) {
cout << k << " " << diamond100TP->speciesName(k)
<< " "
<< x[k] << endl;
}
/*********************************************************************************/
/*
* OK NOW DUPLICATE EVERYTHING AND RECALCULATE
*/
ThermoPhase *gasTP_dupl = gasTP->duplMyselfAsThermoPhase();
ThermoPhase *diamondTP_dupl = diamondTP->duplMyselfAsThermoPhase();
ThermoPhase *diamond100TP_dupl = diamond100TP->duplMyselfAsThermoPhase();
vector<ThermoPhase *> phaseList_dupl;
phaseList_dupl.push_back(gasTP_dupl);
phaseList_dupl.push_back(diamondTP_dupl);
phaseList_dupl.push_back(diamond100TP_dupl);
InterfaceKinetics *iKin_ptr_dupl = new InterfaceKinetics();
importKinetics(*xs, phaseList_dupl, iKin_ptr_dupl);
int nr_dupl = iKin_ptr_dupl->nReactions();
cout << "Number of reactions = " << nr_dupl << endl;
for (i = 0; i < 20; i++) x[i] = 0.0;
x[0] = 0.0010;
x[1] = 0.9888;
x[2] = 0.0002;
x[3] = 0.0100;
p = 20.0*OneAtm/760.0;
gasTP_dupl->setState_TPX(1200., p, x);
for (i = 0; i < 20; i++) x[i] = 0.0;
i0 = diamond100TP_dupl->speciesIndex("c6H*");
x[i0] = 0.1;
i1 = diamond100TP_dupl->speciesIndex("c6HH");
x[i1] = 0.9;
diamond100TP_dupl->setState_TX(1200., x);
for (i = 0; i < 20; i++) x[i] = 0.0;
x[0] = 1.0;
diamondTP_dupl->setState_TPX(1200., p, x);
iKin_ptr_dupl->advanceCoverages(100.);
// Throw some asserts in here to test that they compile
AssertTrace(p == p);
AssertThrow(p == p, "main");
AssertThrowMsg(i == 20, "main", "are you kidding");
for (i = 0; i < 20; i++) src[i] = 0.0;
iKin_ptr_dupl->getNetProductionRates(src);
sum = 0.0;
naH = 0.0;
for (k = 0; k < 13; k++) {
if (k < 4) {
naH = gasTP_dupl->nAtoms(k, 0);
} else if (k == 4) {
naH = 0;
} else if (k > 4) {
int itp = k - 5;
naH = diamond100TP_dupl->nAtoms(itp, 0);
}
cout << k << " " << naH << " " ;
printDbl(src[k]);
cout << endl;
sum += naH * src[k];
}
cout << "sum = ";
printDbl(sum);
cout << endl;
mwd = diamondTP_dupl->molecularWeight(0);
dens = diamondTP_dupl->density();
gr = src[4] * mwd / dens;
gr *= 1.0E6 * 3600.;
cout << "growth rate = " << gr << " microns per hour" << endl;
diamond100TP_dupl->getMoleFractions(x);
cout << "Coverages:" << endl;
for (k = 0; k < 8; k++) {
cout << k << " " << diamond100TP_dupl->speciesName(k)
<< " "
<< x[k] << endl;
}
}
catch (CanteraError) {
showErrors(cout);
}
return 0;
}
/***********************************************************/

View file

@ -0,0 +1,35 @@
#!/bin/sh
#
#
temp_success="1"
/bin/rm -f output.txt outputa.txt diff_test.txt
tname="diamondSurf_dupl"
#################################################################
#
#################################################################
CANTERA_DATA=${CANTERA_DATA:=../../data/inputs}; export CANTERA_DATA
CANTERA_BIN=${CANTERA_BIN:=../../bin}
./runDiamondDupl > output.txt
retnStat=$?
if [ $retnStat != "0" ]
then
temp_success="0"
echo "runDiamond ($tname test) returned with bad status, $retnStat, check output"
fi
../../bin/exp3to2.sh output.txt > outputa.txt
diff -w outputa.txt output_blessed.txt > diff_test.txt
retnStat=$?
if [ $retnStat = "0" ]
then
echo "successful diff comparison on $tname test"
else
echo "unsuccessful diff comparison on $tname test"
echo "FAILED" > csvCode.txt
temp_success="0"
fi