Added a simple test that exercises the mixture gas transport

object on an arbitrary point. It produces an answer. The blessed
file will make sure the answer doesn't change going forward.
This commit is contained in:
Harry Moffat 2007-07-31 20:33:18 +00:00
parent 6b0516e54d
commit e346e62a73
6 changed files with 6940 additions and 0 deletions

View file

@ -0,0 +1,9 @@
outputa.txt
output.txt
transport_log.xml
diff_test.out
csvCode.txt
*.d
mixGasTransport
.depends
Makefile

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 = mixGasTransport
# the object files to be linked together. List those generated from Fortran
# and from C/C++ separately
OBJS = mixGasTransport.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

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,265 @@
/**
* @file mixGasTransport.cpp
* test problem for mixture transport
*/
// Example
//
// Test case for mixture transport in a gas
// The basic idea is to set up a gradient of some kind.
// Then the resulting transport coefficients out.
// Essentially all of the interface routines should be
// exercised and the results dumped out.
//
// A blessed solution test will make sure that the actual
// solution doesn't change as a function of time or
// further development.
// perhaps, later, an analytical solution could be added
#include <iostream>
#include <string>
#include <vector>
#include <string>
#include <iomanip>
using namespace std;
#define MAX(x,y) (( (x) > (y) ) ? (x) : (y))
/*****************************************************************/
/*****************************************************************/
#include "Cantera.h"
#include "transport.h"
#include "IdealGasMix.h"
#include "kernel/TransportFactory.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 k;
string infile = "diamond.xml";
try {
IdealGasMix g("gri30.xml", "gri30_mix");
int nsp = g.nSpecies();
double pres = 1.0E5;
vector_fp Xset(nsp, 0.0);
Xset[0] = 0.269205 ;
Xset[1] = 0.000107082;
Xset[2] = 1.36377e-09 ;
Xset[3] = 4.35475e-10;
Xset[4] = 4.34036e-06 ;
Xset[5] = 0.192249;
Xset[6] = 3.59356e-13;
Xset[7] = 2.78061e-12 ;
Xset[8] = 4.7406e-18 ;
Xset[9] = 4.12955e-17 ;
Xset[10] = 2.58549e-14 ;
Xset[11] = 8.96502e-16 ;
Xset[12] = 6.09056e-11 ;
Xset[13] = 7.56752e-09 ;
Xset[14] = 0.192253;
Xset[15] = 0.0385036;
Xset[16] = 1.49596e-08 ;
Xset[17] = 2.22378e-08 ;
Xset[18] = 1.43096e-13 ;
Xset[19] = 1.45312e-15 ;
Xset[20] = 1.96948e-12 ;
Xset[21] = 8.41937e-19;
Xset[22] = 3.18852e-13 ;
Xset[23] = 7.93625e-18 ;
Xset[24] = 3.20653e-15 ;
Xset[25] = 1.15149e-19 ;
Xset[26] = 1.61189e-18 ;
Xset[27] = 1.4719e-15 ;
Xset[28] = 5.24728e-13 ;
Xset[29] = 6.90582e-17 ;
Xset[30] = 6.37248e-12 ;
Xset[31] =5.93728e-11 ;
Xset[32] = 2.71219e-09 ;
Xset[33] = 2.66645e-06 ;
Xset[34] = 6.57142e-11 ;
Xset[35] = 9.52453e-08 ;
Xset[36] = 1.26006e-14;
Xset[37] = 3.49802e-12;
Xset[38] = 1.19232e-11 ;
Xset[39] = 7.17782e-13 ;
Xset[40] = 1.85347e-07 ;
Xset[41] = 8.25325e-14 ;
Xset[42] = 5.00914e-20 ;
Xset[43] = 1.54407e-16 ;
Xset[44] =3.07176e-11 ;
Xset[45] =4.93198e-08 ;
Xset[46] =4.84792e-12 ;
Xset[47] = 0.307675 ;
Xset[48] =0;
Xset[49] =6.21649e-29;
Xset[50] = 8.42393e-28 ;
Xset[51] = 6.77865e-18;
Xset[52] = 2.19225e-16;
double T1 = 1500.;
double sum = 0.0;
for (k = 0; k < nsp; k++) {
sum += Xset[k];
}
for (k = 0; k < nsp; k++) {
Xset[k] /= sum;
}
vector_fp X2set(nsp, 0.0);
X2set[0] = 0.25 ;
X2set[5] = 0.17;
X2set[14] = 0.15;
X2set[15] = 0.05;
X2set[47] = 0.38 ;
double T2 = 1200.;
double dist = 0.1;
vector_fp X3set(nsp, 0.0);
X3set[0] = 0.27 ;
X3set[5] = 0.15;
X3set[14] = 0.18;
X3set[15] = 0.06;
X3set[47] = 0.36 ;
double T3 = 1400.;
vector_fp grad_T(3, 0.0);
Array2D grad_X(nsp, 2, 0.0);
for( k = 0; k < nsp; k++) {
grad_X(k,0) = (X2set[k] - Xset[k])/dist;
grad_X(k,1) = (X3set[k] - Xset[k])/dist;
}
grad_T[0] = (T2 - T1) / dist;
grad_T[1] = (T3 - T1) / dist;
int log_level = 0;
Transport * tran = newTransportMgr("Mix", &g, log_level=0);
MixTransport * tranMix = dynamic_cast<MixTransport *>(tran);
g.setState_TPX(1500.0, pres, DATA_PTR(Xset));
vector_fp mixDiffs(nsp, 0.0);
tranMix->getMixDiffCoeffs(DATA_PTR(mixDiffs));
printf(" Dump of the mixture Diffusivities:\n");
for (k = 0; k < nsp; k++) {
string sss = g.speciesName(k);
printf(" %15s %13.5g\n", sss.c_str(), mixDiffs[k]);
}
vector_fp specVisc(nsp, 0.0);
tranMix->getSpeciesViscosities(DATA_PTR(specVisc));
printf(" Dump of the species viscosities:\n");
for (k = 0; k < nsp; k++) {
string sss = g.speciesName(k);
printf(" %15s %13.5g\n", sss.c_str(), specVisc[k]);
}
vector_fp thermDiff(nsp, 0.0);
tranMix->getThermalDiffCoeffs(DATA_PTR(thermDiff));
printf(" Dump of the Thermal Diffusivities :\n");
for (k = 0; k < nsp; k++) {
string sss = g.speciesName(k);
printf(" %15s %13.5g\n", sss.c_str(), thermDiff[k]);
}
printf("Viscoscity and thermal Cond vs. T\n");
for (k = 0; k < 10; k++) {
T1 = 400. + 100. * k;
g.setState_TPX(T1, pres, DATA_PTR(Xset));
double visc = tran->viscosity();
double cond = tran->thermalConductivity();
printf(" %13g %13.5g %13.5g\n", T1, visc, cond);
}
g.setState_TPX(T1, pres, DATA_PTR(Xset));
Array2D Bdiff(nsp, nsp, 0.0);
printf("Binary Diffusion Coefficients H2 vs species\n");
tranMix->getBinaryDiffCoeffs(nsp, Bdiff.ptrColumn(0));
for (k = 0; k < nsp; k++) {
string sss = g.speciesName(k);
printf(" H2 - %15s %13.5g %13.5g\n", sss.c_str(), Bdiff(0,k), Bdiff(k,0));
}
vector_fp specMob(nsp, 0.0);
tranMix->getMobilities(DATA_PTR(specMob));
printf(" Dump of the species mobilities:\n");
for (k = 0; k < nsp; k++) {
string sss = g.speciesName(k);
printf(" %15s %13.5g\n", sss.c_str(), specMob[k]);
}
Array2D fluxes(nsp, 2, 0.0);
tranMix->getSpeciesFluxes(2, DATA_PTR(grad_T), nsp,
grad_X.ptrColumn(0), nsp, fluxes.ptrColumn(0));
printf(" Dump of the species fluxes:\n");
double sum1 = 0.0;
double sum2 = 0.0;
double max1 = 0.0;
double max2 = 0.0;
for (k = 0; k < nsp; k++) {
string sss = g.speciesName(k);
printf(" %15s %13.5g %13.5g\n", sss.c_str(), fluxes(k,0), fluxes(k,1));
sum1 += fluxes(k,0);
if (fabs(fluxes(k,0) > max1)) {
max1 = fabs(fluxes(k,0));
}
sum2 += fluxes(k,1);
if (fabs(fluxes(k,1) > max2)) {
max2 = fabs(fluxes(k,0));
}
}
// Make sure roundoff error doesn't interfere with the printout.
// these should be zero.
if (fabs(sum1) * 1.0E14 > max1) {
printf("sum in x direction = %13.5g\n", sum1);
} else {
printf("sum in x direction = 0\n");
}
if (fabs(sum2) * 1.0E14 > max2) {
printf("sum in y direction = %13.5g\n", sum1);
} else {
printf("sum in y direction = 0\n");
}
}
catch (CanteraError) {
showErrors(cout);
}
return 0;
}
/***********************************************************/

View file

@ -0,0 +1,337 @@
Dump of the mixture Diffusivities:
H2 0.0016117
H 0.0022587
O 0.00064032
O2 0.00042264
OH 0.00062946
H2O 0.00055527
HO2 0.00042019
H2O2 0.00041763
C 0.00059188
CH 0.00068026
CH2 0.0004608
CH2(S) 0.0004608
CH3 0.00045156
CH4 0.00044985
CO 0.00040272
CO2 0.0003319
HCO 0.00036192
CH2O 0.00035926
CH2OH 0.00035027
CH3O 0.00035027
CH3OH 0.00035149
C2H 0.0003524
C2H2 0.00034919
C2H3 0.00034618
C2H4 0.00034634
C2H5 0.00031771
C2H6 0.00031538
HCCO 0.00053082
CH2CO 0.00030635
HCCOH 0.00030635
N 0.00056491
NH 0.00067404
NH2 0.00066041
NH3 0.00050222
NNH 0.00040495
NO 0.00041226
NO2 0.00037026
N2O 0.00033509
HNO 0.00041903
CN 0.00040648
HCN 0.00035852
H2CN 0.00035559
HCNN 0.00053081
HCNO 0.00033642
HOCN 0.00033642
HNCO 0.00033642
NCO 0.00033783
N2 0.00039204
AR 0.00041248
C3H7 0.00024676
C3H8 0.00024577
CH2CHO 0.00030507
CH3CHO 0.00030384
Dump of the species viscosities:
H2 2.5558e-05
H 3.012e-05
O 7.2846e-05
O2 6.232e-05
OH 7.5106e-05
H2O 5.3252e-05
HO2 6.3294e-05
H2O2 6.4253e-05
C 4.4565e-05
CH 6.5712e-05
CH2 3.2735e-05
CH2(S) 3.2735e-05
CH3 3.3891e-05
CH4 3.6048e-05
CO 5.31e-05
CO2 5.4383e-05
HCO 4.1657e-05
CH2O 4.2374e-05
CH2OH 4.1945e-05
CH3O 4.1945e-05
CH3OH 4.3184e-05
C2H 3.5412e-05
C2H2 3.6118e-05
C2H3 3.6811e-05
C2H4 3.7975e-05
C2H5 3.3592e-05
C2H6 3.4169e-05
HCCO 0.00012854
CH2CO 4.2391e-05
HCCOH 4.2391e-05
N 4.8126e-05
NH 7.5995e-05
NH2 7.8505e-05
NH3 4.7175e-05
NNH 5.2243e-05
NO 5.5922e-05
NO2 6.636e-05
N2O 5.2858e-05
HNO 5.9564e-05
CN 4.7597e-05
HCN 3.7899e-05
H2CN 3.86e-05
HCNN 0.00012855
HCNO 5.2262e-05
HOCN 5.2262e-05
HNCO 5.2262e-05
NCO 5.1646e-05
N2 5.4033e-05
AR 7.2525e-05
C3H7 3.0191e-05
C3H8 3.0542e-05
CH2CHO 4.2896e-05
CH3CHO 4.3395e-05
Dump of the Thermal Diffusivities :
H2 0
H 0
O 0
O2 0
OH 0
H2O 0
HO2 0
H2O2 0
C 0
CH 0
CH2 0
CH2(S) 0
CH3 0
CH4 0
CO 0
CO2 0
HCO 0
CH2O 0
CH2OH 0
CH3O 0
CH3OH 0
C2H 0
C2H2 0
C2H3 0
C2H4 0
C2H5 0
C2H6 0
HCCO 0
CH2CO 0
HCCOH 0
N 0
NH 0
NH2 0
NH3 0
NNH 0
NO 0
NO2 0
N2O 0
HNO 0
CN 0
HCN 0
H2CN 0
HCNN 0
HCNO 0
HOCN 0
HNCO 0
NCO 0
N2 0
AR 0
C3H7 0
C3H8 0
CH2CHO 0
CH3CHO 0
Viscoscity and thermal Cond vs. T
400 1.9759e-05 0.064075
500 2.3573e-05 0.076325
600 2.7136e-05 0.088307
700 3.0495e-05 0.10018
800 3.3685e-05 0.11201
900 3.6732e-05 0.12378
1000 3.9656e-05 0.13549
1100 4.2474e-05 0.14712
1200 4.5198e-05 0.15867
1300 4.7839e-05 0.17011
Binary Diffusion Coefficients H2 vs species
H2 - H2 0.0016879 0.0016879
H2 - H 0.0025721 0.0025721
H2 - O 0.0012683 0.0012683
H2 - O2 0.00095123 0.00095123
H2 - OH 0.0012641 0.0012641
H2 - H2O 0.0011339 0.0011339
H2 - HO2 0.00095037 0.00095037
H2 - H2O2 0.00094956 0.00094956
H2 - C 0.0010829 0.0010829
H2 - CH 0.0012845 0.0012845
H2 - CH2 0.00086916 0.00086916
H2 - CH2(S) 0.00086916 0.00086916
H2 - CH3 0.00086549 0.00086549
H2 - CH4 0.0008765 0.0008765
H2 - CO 0.00090717 0.00090717
H2 - CO2 0.00080661 0.00080661
H2 - HCO 0.00080996 0.00080996
H2 - CH2O 0.00080907 0.00080907
H2 - CH2OH 0.00079571 0.00079571
H2 - CH3O 0.00079571 0.00079571
H2 - CH3OH 0.00079987 0.00079987
H2 - C2H 0.00075165 0.00075165
H2 - C2H2 0.00075057 0.00075057
H2 - C2H3 0.00074956 0.00074956
H2 - C2H4 0.00075894 0.00075894
H2 - C2H5 0.00069633 0.00069633
H2 - C2H6 0.00069557 0.00069557
H2 - HCCO 0.0012756 0.0012756
H2 - CH2CO 0.00072381 0.00072381
H2 - HCCOH 0.00072381 0.00072381
H2 - N 0.0010717 0.0010717
H2 - NH 0.0013191 0.0013191
H2 - NH2 0.0013142 0.0013142
H2 - NH3 0.001032 0.001032
H2 - NNH 0.00088778 0.00088778
H2 - NO 0.00091389 0.00091389
H2 - NO2 0.00088641 0.00088641
H2 - N2O 0.00079306 0.00079306
H2 - HNO 0.00093713 0.00093713
H2 - CN 0.00087207 0.00087207
H2 - HCN 0.00079297 0.00079297
H2 - H2CN 0.00079198 0.00079198
H2 - HCNN 0.0012756 0.0012756
H2 - HCNO 0.00079346 0.00079346
H2 - HOCN 0.00079346 0.00079346
H2 - HNCO 0.00079346 0.00079346
H2 - NCO 0.00079388 0.00079388
H2 - N2 0.00091593 0.00091593
H2 - AR 0.00096702 0.00096702
H2 - C3H7 0.00057286 0.00057286
H2 - C3H8 0.00057256 0.00057256
H2 - CH2CHO 0.00072342 0.00072342
H2 - CH3CHO 0.00072305 0.00072305
Dump of the species mobilities:
H2 0
H 0
O 0
O2 0
OH 0
H2O 0
HO2 0
H2O2 0
C 0
CH 0
CH2 0
CH2(S) 0
CH3 0
CH4 0
CO 0
CO2 0
HCO 0
CH2O 0
CH2OH 0
CH3O 0
CH3OH 0
C2H 0
C2H2 0
C2H3 0
C2H4 0
C2H5 0
C2H6 0
HCCO 0
CH2CO 0
HCCOH 0
N 0
NH 0
NH2 0
NH3 0
NNH 0
NO 0
NO2 0
N2O 0
HNO 0
CN 0
HCN 0
H2CN 0
HCNN 0
HCNO 0
HOCN 0
HNCO 0
NCO 0
N2 0
AR 0
C3H7 0
C3H8 0
CH2CHO 0
CH3CHO 0
Dump of the species fluxes:
H2 4.9545e-06 4.7567e-07
H 1.7837e-08 1.789e-08
O 1.0349e-12 1.0455e-12
O2 4.3943e-13 4.4615e-13
OH 3.4428e-09 3.4784e-09
H2O 1.8709e-05 3.4889e-05
HO2 3.7201e-16 3.7773e-16
H2O2 2.9488e-15 2.9944e-15
C 2.4999e-21 2.5274e-21
CH 2.7066e-20 2.7325e-20
CH2 1.244e-17 1.2614e-17
CH2(S) 4.3133e-19 4.374e-19
CH3 3.0793e-14 3.1235e-14
CH4 4.0663e-12 4.1249e-12
CO 3.8712e-05 1.6658e-05
CO2 -1.0949e-05 -2.0749e-05
HCO 1.1703e-11 1.1913e-11
CH2O 1.7873e-11 1.8195e-11
CH2OH 1.1592e-16 1.1806e-16
CH3O 1.1772e-18 1.1989e-18
CH3OH 1.654e-15 1.6844e-15
C2H 5.5585e-22 5.6602e-22
C2H2 2.1705e-16 2.2105e-16
C2H3 5.5644e-21 5.668e-21
C2H4 2.3304e-18 2.3738e-18
C2H5 7.9768e-23 8.1382e-23
C2H6 1.1471e-21 1.1705e-21
HCCO 2.3793e-18 2.4084e-18
CH2CO 5.0625e-16 5.1689e-16
HCCOH 6.6627e-20 6.8027e-20
N 3.7434e-15 3.7864e-15
NH 4.4475e-14 4.4905e-14
NH2 2.1232e-12 2.1442e-12
NH3 1.6825e-09 1.7044e-09
NNH 5.7734e-14 5.8654e-14
NO 8.7981e-11 8.9359e-11
NO2 1.6047e-17 1.6326e-17
N2O 3.8657e-15 3.94e-15
HNO 1.1565e-14 1.1743e-14
CN 5.674e-16 5.7641e-16
HCN 1.3369e-10 1.3611e-10
H2CN 6.1262e-17 6.2378e-17
HCNN 8.0977e-23 8.1968e-23
HCNO 1.6745e-19 1.7065e-19
HOCN 3.3312e-14 3.395e-14
HNCO 5.3486e-11 5.4509e-11
NCO 5.1552e-15 5.2534e-15
N2 -5.1449e-05 -3.1297e-05
AR 0 0
C3H7 5.0022e-32 5.1314e-32
C3H8 6.9103e-31 7.0895e-31
CH2CHO 6.6698e-21 6.8105e-21
CH3CHO 2.199e-19 2.2455e-19
sum in x direction = 0
sum in y direction = 0

View file

@ -0,0 +1,34 @@
#!/bin/sh
#
#
temp_success="1"
/bin/rm -f output.txt outputa.txt
tname="mixGasTransport"
#################################################################
#
#################################################################
CANTERA_DATA=${CANTERA_DATA:=../../data/inputs}; export CANTERA_DATA
CANTERA_BIN=${CANTERA_BIN:=../../bin}
./mixGasTransport > output.txt
retnStat=$?
if [ $retnStat != "0" ]
then
temp_success="0"
echo "$tname ($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.out
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