diff --git a/.gitignore b/.gitignore index 575d88cbe8d54fd9b98226418d0e4d73064c73ed..b124c8d88702c2e05e6568731f3f92889677c98f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.orig *.bak \#*\# +.directory # CVS recovered versions - anywhere .#* @@ -48,7 +49,9 @@ doc/[Dd]oxygen/man # source packages - anywhere *.tar.bz2 *.tar.gz +*.tar *.tgz +*.gtgz # ignore the persistent .build tag in the main directory /.build diff --git a/applications/solvers/DNS/dnsFoam/dnsFoam.C b/applications/solvers/DNS/dnsFoam/dnsFoam.C index ca4e0dcb584b61420b431965e32823ea11e8dd1a..891befab216900e04a1ec5e1c9666182b80d472d 100644 --- a/applications/solvers/DNS/dnsFoam/dnsFoam.C +++ b/applications/solvers/DNS/dnsFoam/dnsFoam.C @@ -41,17 +41,16 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMeshNoClear.H" + #include "readTransportProperties.H" + #include "createFields.H" + #include "readTurbulenceProperties.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMeshNoClear.H" -# include "readTransportProperties.H" -# include "createFields.H" -# include "readTurbulenceProperties.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< nl << "Starting time loop" << endl; @@ -59,7 +58,7 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readPISOControls.H" + #include "readPISOControls.H" force.internalField() = ReImSum ( @@ -69,12 +68,12 @@ int main(int argc, char *argv[]) ) ); -# include "globalProperties.H" + #include "globalProperties.H" fvVectorMatrix UEqn ( - fvm::ddt(U) - + fvm::div(phi, U) + fvm::ddt(U) + + fvm::div(phi, U) - fvm::laplacian(nu, U) == force @@ -90,7 +89,7 @@ int main(int argc, char *argv[]) volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); - phi = (fvc::interpolate(U) & mesh.Sf()) + phi = (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, U, phi); fvScalarMatrix pEqn @@ -102,7 +101,7 @@ int main(int argc, char *argv[]) phi -= pEqn.flux(); -# include "continuityErrs.H" + #include "continuityErrs.H" U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/Make/files b/applications/solvers/Lagrangian/kinematicParcelFoam/Make/files deleted file mode 100644 index a63fc64fa7371272e4c6f383b3181174750ea186..0000000000000000000000000000000000000000 --- a/applications/solvers/Lagrangian/kinematicParcelFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -kinematicParcelFoam.C - -EXE = $(FOAM_APPBIN)/kinematicParcelFoam diff --git a/applications/solvers/combustion/PDRFoam/Make/options b/applications/solvers/combustion/PDRFoam/Make/options index e765e61574002156fb224af7f32bcf8d4aef23cf..4e5b8fb9a077888bdd3802f41232ddfb6d7e4618 100644 --- a/applications/solvers/combustion/PDRFoam/Make/options +++ b/applications/solvers/combustion/PDRFoam/Make/options @@ -8,7 +8,7 @@ EXE_INC = \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ @@ -23,7 +23,7 @@ EXE_LIBS = \ -lmeshTools \ -lcompressibleRASModels \ -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lspecie \ -llaminarFlameSpeedModels \ -lfiniteVolume \ diff --git a/applications/solvers/combustion/PDRFoam/PDRFoam.C b/applications/solvers/combustion/PDRFoam/PDRFoam.C index 89a7b7f956d2d4b5c03e06f28bb4b0ef4dd33cbc..58bea3ed998e6951352a8be4943088bb4a66ec99 100644 --- a/applications/solvers/combustion/PDRFoam/PDRFoam.C +++ b/applications/solvers/combustion/PDRFoam/PDRFoam.C @@ -36,7 +36,7 @@ Description to be appropriate by comparison with the results from the spectral model. - Strain effects are encorporated directly into the Xi equation + Strain effects are incorporated directly into the Xi equation but not in the algebraic approximation. Further work need to be done on this issue, particularly regarding the enhanced removal rate caused by flame compression. Analysis using results of the spectral @@ -70,53 +70,52 @@ Description int main(int argc, char *argv[]) { -# include "setRootCase.H" + #include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readCombustionProperties.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "readPISOControls.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "CourantNo.H" -# include "setInitialDeltaT.H" + #include "createTime.H" + #include "createMesh.H" + #include "readCombustionProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "CourantNo.H" + #include "setInitialDeltaT.H" -scalar StCoNum = 0.0; + scalar StCoNum = 0.0; -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readTimeControls.H" -# include "readPISOControls.H" -# include "CourantNo.H" -# include "setDeltaT.H" + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "CourantNo.H" + #include "setDeltaT.H" runTime++; Info<< "\n\nTime = " << runTime.timeName() << endl; -# include "rhoEqn.H" -# include "UEqn.H" + #include "rhoEqn.H" + #include "UEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "bEqn.H" -# include "ftEqn.H" -# include "huEqn.H" -# include "hEqn.H" + #include "bEqn.H" + #include "ftEqn.H" + #include "huEqn.H" + #include "hEqn.H" if (!ign.ignited()) { hu == h; } -# include "pEqn.H" + #include "pEqn.H" } turbulence->correct(); diff --git a/applications/solvers/combustion/PDRFoam/StCourantNo.H b/applications/solvers/combustion/PDRFoam/StCourantNo.H index e529409475414941805f21949257eaac574a0f99..18d6e86a941045877155f7d01b3c844984c76965 100644 --- a/applications/solvers/combustion/PDRFoam/StCourantNo.H +++ b/applications/solvers/combustion/PDRFoam/StCourantNo.H @@ -31,23 +31,25 @@ Description \*---------------------------------------------------------------------------*/ { -scalar meanStCoNum = 0.0; + scalar meanStCoNum = 0.0; -if (mesh.nInternalFaces()) -{ - surfaceScalarField SfUfbyDelta = - mesh.surfaceInterpolation::deltaCoeffs() - *mag(phiSt/fvc::interpolate(rho)); + if (mesh.nInternalFaces()) + { + surfaceScalarField SfUfbyDelta = + mesh.surfaceInterpolation::deltaCoeffs() + *mag(phiSt/fvc::interpolate(rho)); - StCoNum = max(SfUfbyDelta/mesh.magSf()) - .value()*runTime.deltaT().value(); + StCoNum = + max(SfUfbyDelta/mesh.magSf()).value() + *runTime.deltaT().value(); - meanStCoNum = (sum(SfUfbyDelta)/sum(mesh.magSf())) - .value()*runTime.deltaT().value(); -} + meanStCoNum = + (sum(SfUfbyDelta)/sum(mesh.magSf())).value() + *runTime.deltaT().value(); + } -Info<< "St courant Number mean: " << meanStCoNum - << " max: " << StCoNum << endl; + Info<< "St courant Number mean: " << meanStCoNum + << " max: " << StCoNum << endl; } // ************************************************************************* // diff --git a/applications/solvers/combustion/PDRFoam/bEqn.H b/applications/solvers/combustion/PDRFoam/bEqn.H index 3fd99b65eaeaed0e25ce2c7e90f19fde9ff7ccf1..cb4493154030fc42af097a77dfd9258930ac62ec 100644 --- a/applications/solvers/combustion/PDRFoam/bEqn.H +++ b/applications/solvers/combustion/PDRFoam/bEqn.H @@ -1,7 +1,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection ( fv::convectionScheme<scalar>::New - ( + ( mesh, fields, phi, @@ -25,7 +25,7 @@ if (ign.ignited()) // Unburnt gas density // ~~~~~~~~~~~~~~~~~~~ - volScalarField rhou = thermo->rhou(); + volScalarField rhou = thermo.rhou(); // Calculate flame normal etc. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/applications/solvers/combustion/PDRFoam/createFields.H b/applications/solvers/combustion/PDRFoam/createFields.H index ba07a6dd4659b3c5e127efa8b96abd634611d42a..74a18ab6f5affe39d56ff90d41f084cd6e09e4f3 100644 --- a/applications/solvers/combustion/PDRFoam/createFields.H +++ b/applications/solvers/combustion/PDRFoam/createFields.H @@ -1,10 +1,11 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<hhuCombustionThermo> thermo + autoPtr<hhuCombustionThermo> pThermo ( hhuCombustionThermo::New(mesh) ); - combustionMixture& composition = thermo->composition(); + hhuCombustionThermo& thermo = pThermo(); + basicMultiComponentMixture& composition = thermo.composition(); volScalarField rho ( @@ -16,13 +17,13 @@ IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - const volScalarField& psi = thermo->psi(); - volScalarField& h = thermo->h(); - volScalarField& hu = thermo->hu(); + volScalarField& p = thermo.p(); + const volScalarField& psi = thermo.psi(); + volScalarField& h = thermo.h(); + volScalarField& hu = thermo.hu(); volScalarField& b = composition.Y("b"); Info<< "min(b) = " << min(b).value() << endl; @@ -54,7 +55,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/combustion/PDRFoam/hEqn.H b/applications/solvers/combustion/PDRFoam/hEqn.H index 807792948793710b37dea4320ffcfb34ec933db2..7f5292d01a903f7931aa0015e81cb26c9250253a 100644 --- a/applications/solvers/combustion/PDRFoam/hEqn.H +++ b/applications/solvers/combustion/PDRFoam/hEqn.H @@ -8,5 +8,5 @@ betav*DpDt ); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/combustion/PDRFoam/huEqn.H b/applications/solvers/combustion/PDRFoam/huEqn.H index 462f271f4b75dd60c6efc390b87b9ffc959e32e6..3467bc6b751177800f70b927250e2b61926ff04b 100644 --- a/applications/solvers/combustion/PDRFoam/huEqn.H +++ b/applications/solvers/combustion/PDRFoam/huEqn.H @@ -13,6 +13,6 @@ if (ign.ignited()) //+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), hu) == - betav*DpDt*rho/thermo->rhou() + betav*DpDt*rho/thermo.rhou() ); } diff --git a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H index 1ff6f981bbae09ec27284867cec07f78c0292a97..1931dbbb3554e8b9747fd107b799c6e9f0e4ce4c 100644 --- a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H +++ b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H @@ -196,8 +196,7 @@ public: // Destructor - - ~SCOPE(); + ~SCOPE(); // Member functions diff --git a/applications/solvers/combustion/PDRFoam/pEqn.H b/applications/solvers/combustion/PDRFoam/pEqn.H index 312de8301a25a9f843956a817d4f1beb5c27c475..524c8eac74935856805699ace15ed3bc019fb29b 100644 --- a/applications/solvers/combustion/PDRFoam/pEqn.H +++ b/applications/solvers/combustion/PDRFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn.A(); U = invA & UEqn.H(); @@ -8,7 +8,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) @@ -34,7 +34,7 @@ if (transonic) } else { - phi = + phi = fvc::interpolate(rho)* ( (fvc::interpolate(U) & mesh.Sf()) diff --git a/applications/solvers/combustion/XiFoam/Make/options b/applications/solvers/combustion/XiFoam/Make/options index bc89c0a716e3ef4bcfa3866e2284df73608389d6..c328b2c1b3417b0f8df438317fbf4e0376cdbe0b 100644 --- a/applications/solvers/combustion/XiFoam/Make/options +++ b/applications/solvers/combustion/XiFoam/Make/options @@ -2,7 +2,7 @@ EXE_INC = \ -I$(LIB_SRC)/engine/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ @@ -13,7 +13,7 @@ EXE_LIBS = \ -lcompressibleRASModels \ -lcompressibleLESModels \ -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lspecie \ -llaminarFlameSpeedModels \ -lfiniteVolume \ diff --git a/applications/solvers/combustion/XiFoam/XiFoam.C b/applications/solvers/combustion/XiFoam/XiFoam.C index d18ef0d2f4b91086fcd6bcdd93ad12a5942eb523..13a464a7550a5907d680772c21f565537eb37f2c 100644 --- a/applications/solvers/combustion/XiFoam/XiFoam.C +++ b/applications/solvers/combustion/XiFoam/XiFoam.C @@ -61,55 +61,54 @@ Description int main(int argc, char *argv[]) { -# include "setRootCase.H" - -# include "createTime.H" -# include "createMesh.H" -# include "readCombustionProperties.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "readPISOControls.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" + #include "setRootCase.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "createTime.H" + #include "createMesh.H" + #include "readCombustionProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readTimeControls.H" -# include "readPISOControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; -# include "rhoEqn.H" -# include "UEqn.H" + #include "rhoEqn.H" + #include "UEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "ftEqn.H" -# include "bEqn.H" -# include "huEqn.H" -# include "hEqn.H" + #include "ftEqn.H" + #include "bEqn.H" + #include "huEqn.H" + #include "hEqn.H" if (!ign.ignited()) { hu == h; } -# include "pEqn.H" + #include "pEqn.H" } turbulence->correct(); - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/combustion/XiFoam/bEqn.H b/applications/solvers/combustion/XiFoam/bEqn.H index 739d6987e833f64c06880d7b31d85351a1c77933..33ef24bfe655b2d587b7e403fbd8ee1f5d25b736 100644 --- a/applications/solvers/combustion/XiFoam/bEqn.H +++ b/applications/solvers/combustion/XiFoam/bEqn.H @@ -6,7 +6,7 @@ if (ign.ignited()) // Unburnt gas density // ~~~~~~~~~~~~~~~~~~~ - volScalarField rhou = thermo->rhou(); + volScalarField rhou = thermo.rhou(); // Calculate flame normal etc. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -76,7 +76,7 @@ if (ign.ignited()) volScalarField epsilon = pow(uPrimeCoef, 3)*turbulence->epsilon(); - volScalarField tauEta = sqrt(thermo->muu()/(rhou*epsilon)); + volScalarField tauEta = sqrt(thermo.muu()/(rhou*epsilon)); volScalarField Reta = up/ ( @@ -180,7 +180,7 @@ if (ign.ignited()) // with a linear correction function to give a plausible profile for Xi // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - volScalarField XiEqStar = + volScalarField XiEqStar = scalar(1.001) + XiCoef*sqrt(up/(Su + SuMin))*Reta; volScalarField XiEq = diff --git a/applications/solvers/combustion/XiFoam/createFields.H b/applications/solvers/combustion/XiFoam/createFields.H index 812188640279377c734494a62d05365bf982f28c..ef16bd615c9bef3cfd86788e8fbd5a8a2bb879f3 100644 --- a/applications/solvers/combustion/XiFoam/createFields.H +++ b/applications/solvers/combustion/XiFoam/createFields.H @@ -1,10 +1,11 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<hhuCombustionThermo> thermo + autoPtr<hhuCombustionThermo> pThermo ( hhuCombustionThermo::New(mesh) ); - combustionMixture& composition = thermo->composition(); + hhuCombustionThermo& thermo = pThermo(); + basicMultiComponentMixture& composition = thermo.composition(); volScalarField rho ( @@ -16,18 +17,18 @@ IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - const volScalarField& psi = thermo->psi(); - volScalarField& h = thermo->h(); - volScalarField& hu = thermo->hu(); + volScalarField& p = thermo.p(); + const volScalarField& psi = thermo.psi(); + volScalarField& h = thermo.h(); + volScalarField& hu = thermo.hu(); volScalarField& b = composition.Y("b"); Info<< "min(b) = " << min(b).value() << endl; - const volScalarField& T = thermo->T(); + const volScalarField& T = thermo.T(); Info<< "\nReading field U\n" << endl; @@ -55,7 +56,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/combustion/XiFoam/hEqn.H b/applications/solvers/combustion/XiFoam/hEqn.H index 2a5204aa8d21bbc24d91eb0f6d9c29d1f43149a0..ebce30e24e50dee92824de875abfa138f0abf3b1 100644 --- a/applications/solvers/combustion/XiFoam/hEqn.H +++ b/applications/solvers/combustion/XiFoam/hEqn.H @@ -8,5 +8,5 @@ DpDt ); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/combustion/XiFoam/huEqn.H b/applications/solvers/combustion/XiFoam/huEqn.H index 2f001b003265fca1aeeb2be7dd223546bf845bb3..0b4068344bc8b74a46691ba7ed205c6cd4efc9ba 100644 --- a/applications/solvers/combustion/XiFoam/huEqn.H +++ b/applications/solvers/combustion/XiFoam/huEqn.H @@ -13,6 +13,6 @@ if (ign.ignited()) //+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), hu) == - DpDt*rho/thermo->rhou() + DpDt*rho/thermo.rhou() ); } diff --git a/applications/solvers/combustion/XiFoam/pEqn.H b/applications/solvers/combustion/XiFoam/pEqn.H index 05db89627dabf5400a98c2e6a37784dcb9cc53cd..9443f909a356699185bfbc8497cf46e26fd1ed3b 100644 --- a/applications/solvers/combustion/XiFoam/pEqn.H +++ b/applications/solvers/combustion/XiFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); @@ -8,7 +8,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) @@ -34,9 +34,9 @@ if (transonic) } else { - phi = - fvc::interpolate(rho)* - ( + phi = + fvc::interpolate(rho) + *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) ); diff --git a/applications/solvers/combustion/coldEngineFoam/Make/options b/applications/solvers/combustion/coldEngineFoam/Make/options index 028498cc6304a59ec1903c7aa206eaac2c4f5cc3..53aa22b25a476812ba4e06f10cf17291d7b031f2 100644 --- a/applications/solvers/combustion/coldEngineFoam/Make/options +++ b/applications/solvers/combustion/coldEngineFoam/Make/options @@ -4,7 +4,7 @@ EXE_INC = \ -I$(LIB_SRC)/engine/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ -I$(LIB_SRC)/finiteVolume/lnInclude diff --git a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C index ddb4c3553009eb6acb7284c01e7c1f6517dfb89e..67def3fb5901fc279f6e51754b2c7070d658b185 100644 --- a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C +++ b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C @@ -33,7 +33,7 @@ Description #include "fvCFD.H" #include "engineTime.H" #include "engineMesh.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" #include "OFstream.H" @@ -41,27 +41,27 @@ Description int main(int argc, char *argv[]) { -# include "setRootCase.H" + #include "setRootCase.H" -# include "createEngineTime.H" -# include "createEngineMesh.H" -# include "createFields.H" -# include "initContinuityErrs.H" -# include "readEngineTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" -# include "startSummary.H" + #include "createEngineTime.H" + #include "createEngineMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readEngineTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + #include "startSummary.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readPISOControls.H" -# include "readEngineTimeControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readPISOControls.H" + #include "readEngineTimeControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; @@ -70,22 +70,22 @@ int main(int argc, char *argv[]) mesh.move(); -# include "rhoEqn.H" + #include "rhoEqn.H" -# include "UEqn.H" + #include "UEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "hEqn.H" -# include "pEqn.H" + #include "hEqn.H" + #include "pEqn.H" } turbulence->correct(); runTime.write(); -# include "logSummary.H" + #include "logSummary.H" Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/solvers/combustion/coldEngineFoam/createFields.H b/applications/solvers/combustion/coldEngineFoam/createFields.H index 7a369df4721e96dd98cf3d86d3d581d86ba59ef2..6bc3139ce6f070445cc5e55ba3b3df839522ab50 100644 --- a/applications/solvers/combustion/coldEngineFoam/createFields.H +++ b/applications/solvers/combustion/coldEngineFoam/createFields.H @@ -1,9 +1,10 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); volScalarField rho ( @@ -15,13 +16,13 @@ IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - const volScalarField& psi = thermo->psi(); - volScalarField& h = thermo->h(); - const volScalarField& T = thermo->T(); + volScalarField& p = thermo.p(); + const volScalarField& psi = thermo.psi(); + volScalarField& h = thermo.h(); + const volScalarField& T = thermo.T(); Info<< "\nReading field U\n" << endl; @@ -38,7 +39,7 @@ mesh ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" Info<< "Creating turbulence model\n" << endl; @@ -49,7 +50,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/combustion/coldEngineFoam/hEqn.H b/applications/solvers/combustion/coldEngineFoam/hEqn.H index f72ef0c89cb973b0150b3ec889b51c5be403b872..ae60d3316ec77061804e629360ed13f6cd891f68 100644 --- a/applications/solvers/combustion/coldEngineFoam/hEqn.H +++ b/applications/solvers/combustion/coldEngineFoam/hEqn.H @@ -8,5 +8,5 @@ DpDt ); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/combustion/dieselEngineFoam/Make/options b/applications/solvers/combustion/dieselEngineFoam/Make/options index 20f008d331ae504b3059652a3e2e9908a373665a..60558513fe28ea936712ecf14e78588ea4a4e1fe 100644 --- a/applications/solvers/combustion/dieselEngineFoam/Make/options +++ b/applications/solvers/combustion/dieselEngineFoam/Make/options @@ -7,10 +7,10 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ - -I$(LIB_SRC)/../applications/solvers/combustion/XiFoam \ + -I$(LIB_SRC)/../applications/solvers/reactionThermo/XiFoam \ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ -I$(LIB_SRC)/ODE/lnInclude \ -I$(LIB_SRC)/engine/lnInclude \ @@ -20,7 +20,7 @@ EXE_LIBS = \ -lengine \ -lcompressibleRASModels \ -lcompressibleLESModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lfiniteVolume \ -llagrangian \ -ldieselSpray \ diff --git a/applications/solvers/combustion/dieselEngineFoam/YEqn.H b/applications/solvers/combustion/dieselEngineFoam/YEqn.H index 2f74884bbdec649240d2a0c7c4c93ec43f245d53..9d46c0d6111aa2e759816f385277f8371c3ab538 100644 --- a/applications/solvers/combustion/dieselEngineFoam/YEqn.H +++ b/applications/solvers/combustion/dieselEngineFoam/YEqn.H @@ -14,7 +14,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection label inertIndex = -1; volScalarField Yt = 0.0*Y[0]; - for(label i=0; i<Y.size(); i++) + for (label i=0; i<Y.size(); i++) { if (Y[i].name() != inertSpecie) { @@ -39,8 +39,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection inertIndex = i; } } - + Y[inertIndex] = scalar(1) - Yt; Y[inertIndex].max(0.0); - } diff --git a/applications/solvers/combustion/dieselEngineFoam/createFields.H b/applications/solvers/combustion/dieselEngineFoam/createFields.H index cf0532b0f3a9079454779e4cb04a1054277129b3..9d9229cc3c1dbed27219d4e53ff49af24f78767d 100644 --- a/applications/solvers/combustion/dieselEngineFoam/createFields.H +++ b/applications/solvers/combustion/dieselEngineFoam/createFields.H @@ -1,13 +1,17 @@ Info<< nl << "Reading thermophysicalProperties" << endl; -autoPtr<hCombustionThermo> thermo + +autoPtr<psiChemistryModel> pChemistry ( - hCombustionThermo::New(mesh) + psiChemistryModel::New(mesh) ); +psiChemistryModel& chemistry = pChemistry(); + +hCombustionThermo& thermo = chemistry.thermo(); -combustionMixture& composition = thermo->composition(); +basicMultiComponentMixture& composition = thermo.composition(); PtrList<volScalarField>& Y = composition.Y(); -word inertSpecie(thermo->lookup("inertSpecie")); +word inertSpecie(thermo.lookup("inertSpecie")); volScalarField rho ( @@ -17,7 +21,7 @@ volScalarField rho runTime.timeName(), mesh ), - thermo->rho() + thermo.rho() ); Info<< "Reading field U\n" << endl; @@ -35,10 +39,10 @@ volVectorField U ); -volScalarField& p = thermo->p(); -const volScalarField& psi = thermo->psi(); -const volScalarField& T = thermo->T(); -volScalarField& h = thermo->h(); +volScalarField& p = thermo.p(); +const volScalarField& psi = thermo.psi(); +const volScalarField& T = thermo.T(); +volScalarField& h = thermo.h(); #include "compressibleCreatePhi.H" @@ -65,7 +69,7 @@ autoPtr<compressible::turbulenceModel> turbulence rho, U, phi, - thermo() + thermo ) ); @@ -73,31 +77,11 @@ Info<< "Creating field DpDt\n" << endl; volScalarField DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); -Info << "Constructing chemical mechanism" << endl; -chemistryModel chemistry -( - thermo(), - rho -); multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; -for(label i=0; i<Y.size(); i++) +forAll (Y, i) { fields.add(Y[i]); } fields.add(h); - -volScalarField dQ -( - IOobject - ( - "dQ", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - mesh, - dimensionedScalar("zero", dimensionSet(1,-3,-1,0,0,0,0), 0.0) -); diff --git a/applications/solvers/combustion/dieselEngineFoam/createSpray.H b/applications/solvers/combustion/dieselEngineFoam/createSpray.H index ac473957e5d1e86395509f79c2175c4f8039bc4d..4bc1a32f11becdd7e88f040685a97ae98be7e4e3 100644 --- a/applications/solvers/combustion/dieselEngineFoam/createSpray.H +++ b/applications/solvers/combustion/dieselEngineFoam/createSpray.H @@ -1,14 +1,15 @@ Info << "Constructing Spray" << endl; -PtrList<specieProperties> gasProperties(Y.size()); +PtrList<gasThermoPhysics> gasProperties(Y.size()); forAll(gasProperties, i) { gasProperties.set ( i, - new specieProperties + new gasThermoPhysics ( - dynamic_cast<const reactingMixture&>(thermo()).speciesData()[i] + dynamic_cast<const reactingMixture<gasThermoPhysics>&> + (thermo).speciesData()[i] ) ); } diff --git a/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C b/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C index 927afe9bc28e486ad50704f7b9ad2daecbe88ba8..ba910bcf56e2bd70d03251deb46429622fb3a0af 100644 --- a/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C +++ b/applications/solvers/combustion/dieselEngineFoam/dieselEngineFoam.C @@ -36,40 +36,41 @@ Description #include "hCombustionThermo.H" #include "turbulenceModel.H" #include "spray.H" -#include "chemistryModel.H" +#include "psiChemistryModel.H" #include "chemistrySolver.H" #include "multivariateScheme.H" #include "Switch.H" #include "OFstream.H" #include "volPointInterpolation.H" +#include "thermoPhysicsTypes.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) { -# include "setRootCase.H" -# include "createEngineTime.H" -# include "createEngineMesh.H" -# include "createFields.H" -# include "readEnvironmentalProperties.H" -# include "readCombustionProperties.H" -# include "createSpray.H" -# include "initContinuityErrs.H" -# include "readEngineTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" -# include "startSummary.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "setRootCase.H" + #include "createEngineTime.H" + #include "createEngineMesh.H" + #include "createFields.H" + #include "readEnvironmentalProperties.H" + #include "readCombustionProperties.H" + #include "createSpray.H" + #include "initContinuityErrs.H" + #include "readEngineTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + #include "startSummary.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info << "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readPISOControls.H" -# include "readEngineTimeControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readPISOControls.H" + #include "readEngineTimeControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; @@ -101,27 +102,27 @@ int main(int argc, char *argv[]) kappa = (runTime.deltaT() + tc)/(runTime.deltaT() + tc + tk); } -# include "rhoEqn.H" -# include "UEqn.H" + #include "rhoEqn.H" + #include "UEqn.H" for (label ocorr=1; ocorr <= nOuterCorr; ocorr++) { -# include "YEqn.H" -# include "hEqn.H" + #include "YEqn.H" + #include "hEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" } } turbulence->correct(); -# include "logSummary.H" -# include "spraySummary.H" + #include "logSummary.H" + #include "spraySummary.H" - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/combustion/dieselEngineFoam/hEqn.H b/applications/solvers/combustion/dieselEngineFoam/hEqn.H index 347fef1a9c33231900aeecc5703f7e120f26fc4c..0406f7fbd492100a3814d0531ef25487636df4c1 100644 --- a/applications/solvers/combustion/dieselEngineFoam/hEqn.H +++ b/applications/solvers/combustion/dieselEngineFoam/hEqn.H @@ -9,32 +9,5 @@ + dieselSpray.heatTransferSource() ); - thermo->correct(); - - forAll(dQ, i) - { - dQ[i] = 0.0; - } - - scalarField cp(dQ.size(), 0.0); - - forAll(Y, i) - { - volScalarField RRi = chemistry.RR(i); - - forAll(h, celli) - { - scalar Ti = T[celli]; - cp[celli] += Y[i][celli]*chemistry.specieThermo()[i].Cp(Ti); - scalar hi = chemistry.specieThermo()[i].h(Ti); - scalar RR = RRi[celli]; - dQ[celli] -= hi*RR; - } - - } - - forAll(dQ, celli) - { - dQ[celli] /= cp[celli]; - } + thermo.correct(); } diff --git a/applications/solvers/combustion/dieselEngineFoam/pEqn.H b/applications/solvers/combustion/dieselEngineFoam/pEqn.H index 0324a47ce01ecdc7496cdacc24b3a137b01fb703..b68ae732962c2e1f26c46876b69efae206eaaa45 100644 --- a/applications/solvers/combustion/dieselEngineFoam/pEqn.H +++ b/applications/solvers/combustion/dieselEngineFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField A = UEqn.A(); U = UEqn.H()/A; @@ -8,7 +8,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U)) ); diff --git a/applications/solvers/combustion/dieselEngineFoam/rhoEqn.H b/applications/solvers/combustion/dieselEngineFoam/rhoEqn.H index 396bf33f300d9549874fafa6aa92ae9b28d3a895..dd396486d35d57a7b96baeb69c944e461ab7c11f 100644 --- a/applications/solvers/combustion/dieselEngineFoam/rhoEqn.H +++ b/applications/solvers/combustion/dieselEngineFoam/rhoEqn.H @@ -44,7 +44,7 @@ volScalarField Sevap dimensionedScalar("zero", dimensionSet(1, -3, -1, 0, 0), 0.0) ); -for(label i=0; i<Y.size(); i++) +for (label i=0; i<Y.size(); i++) { if (dieselSpray.isLiquidFuel()[i]) { diff --git a/applications/solvers/combustion/dieselEngineFoam/spraySummary.H b/applications/solvers/combustion/dieselEngineFoam/spraySummary.H index 5b251e22902437f4b4bf964ee25c3d9c3169e90e..31337d0a77ee0dea6b686bd8f1c2b551d317329a 100644 --- a/applications/solvers/combustion/dieselEngineFoam/spraySummary.H +++ b/applications/solvers/combustion/dieselEngineFoam/spraySummary.H @@ -1,30 +1,30 @@ - label Nparcels = dieselSpray.size(); - reduce(Nparcels, sumOp<label>()); + label Nparcels = dieselSpray.size(); + reduce(Nparcels, sumOp<label>()); - Info<< "\nNumber of parcels in system.... | " - << Nparcels << endl - << "Injected liquid mass........... | " - << 1e6*dieselSpray.injectedMass(runTime.value()) << " mg" << endl - << "Liquid Mass in system.......... | " - << 1e6*dieselSpray.liquidMass() << " mg" << endl - << "SMD, Dmax...................... | " - << dieselSpray.smd()*1e6 << " mu, " - << dieselSpray.maxD()*1e6 << " mu" - << endl; + Info<< "\nNumber of parcels in system.... | " + << Nparcels << endl + << "Injected liquid mass........... | " + << 1e6*dieselSpray.injectedMass(runTime.value()) << " mg" << endl + << "Liquid Mass in system.......... | " + << 1e6*dieselSpray.liquidMass() << " mg" << endl + << "SMD, Dmax...................... | " + << dieselSpray.smd()*1e6 << " mu, " + << dieselSpray.maxD()*1e6 << " mu" + << endl; - scalar evapMass = - dieselSpray.injectedMass(runTime.value()) - - dieselSpray.liquidMass(); + scalar evapMass = + dieselSpray.injectedMass(runTime.value()) + - dieselSpray.liquidMass(); - scalar gasMass = fvc::domainIntegrate(rho).value(); + scalar gasMass = fvc::domainIntegrate(rho).value(); - if (dieselSpray.twoD()) - { - gasMass *= 2.0*mathematicalConstant::pi/dieselSpray.angleOfWedge(); - } + if (dieselSpray.twoD()) + { + gasMass *= 2.0*mathematicalConstant::pi/dieselSpray.angleOfWedge(); + } - scalar addedMass = gasMass - gasMass0; + scalar addedMass = gasMass - gasMass0; - Info<< "Added gas mass................. | " << 1e6*addedMass << " mg" - << nl << "Evaporation Continuity Error... | " - << 1e6*(addedMass - evapMass) << " mg" << endl; + Info<< "Added gas mass................. | " << 1e6*addedMass << " mg" + << nl << "Evaporation Continuity Error... | " + << 1e6*(addedMass - evapMass) << " mg" << endl; diff --git a/applications/solvers/combustion/dieselFoam/Make/options b/applications/solvers/combustion/dieselFoam/Make/options index 44d527b0628afd5941de71c0cb41ae0b094be99b..28605eb830357a8aedb735b6d9b13a7a0c721897 100644 --- a/applications/solvers/combustion/dieselFoam/Make/options +++ b/applications/solvers/combustion/dieselFoam/Make/options @@ -8,17 +8,17 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ - -I$(LIB_SRC)/../applications/solvers/combustion/XiFoam \ + -I$(LIB_SRC)/../applications/solvers/reactionThermo/XiFoam \ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ -I$(LIB_SRC)/ODE/lnInclude EXE_LIBS = \ -lcompressibleRASModels \ -lcompressibleLESModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -llagrangian \ -ldieselSpray \ -lliquids \ diff --git a/applications/solvers/combustion/dieselFoam/dieselFoam.C b/applications/solvers/combustion/dieselFoam/dieselFoam.C index 31d034bc5734e6807843059dff8eea02e17474a8..11cd91a488e349464b1b7eb8f9dce31c26e3a919 100644 --- a/applications/solvers/combustion/dieselFoam/dieselFoam.C +++ b/applications/solvers/combustion/dieselFoam/dieselFoam.C @@ -34,7 +34,7 @@ Description #include "hCombustionThermo.H" #include "turbulenceModel.H" #include "spray.H" -#include "chemistryModel.H" +#include "psiChemistryModel.H" #include "chemistrySolver.H" #include "multivariateScheme.H" @@ -46,28 +46,27 @@ Description int main(int argc, char *argv[]) { - -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "readEnvironmentalProperties.H" -# include "readCombustionProperties.H" -# include "createSpray.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "readEnvironmentalProperties.H" + #include "readCombustionProperties.H" + #include "createSpray.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info << "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readPISOControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; @@ -94,26 +93,26 @@ int main(int argc, char *argv[]) kappa = (runTime.deltaT() + tc)/(runTime.deltaT()+tc+tk); } -# include "rhoEqn.H" -# include "UEqn.H" + #include "rhoEqn.H" + #include "UEqn.H" for (label ocorr=1; ocorr <= nOuterCorr; ocorr++) { -# include "YEqn.H" -# include "hEqn.H" + #include "YEqn.H" + #include "hEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" } } turbulence->correct(); -# include "spraySummary.H" + #include "spraySummary.H" - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/combustion/dieselFoam/pEqn.H b/applications/solvers/combustion/dieselFoam/pEqn.H index 37e63e8635cfa1bdef7ec2021711add2c9b7b464..d74947fe5305882c8958f9237c17709ce530dbb6 100644 --- a/applications/solvers/combustion/dieselFoam/pEqn.H +++ b/applications/solvers/combustion/dieselFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); @@ -8,7 +8,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) @@ -36,9 +36,9 @@ if (transonic) } else { - phi = - fvc::interpolate(rho)* - ( + phi = + fvc::interpolate(rho) + *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) ); diff --git a/applications/solvers/combustion/engineFoam/Make/options b/applications/solvers/combustion/engineFoam/Make/options index 3ee7cc666f34f1c9356ad4ff1178d1cb7b80be8d..31775e03d63670129e67b82980e8aae38737f19a 100644 --- a/applications/solvers/combustion/engineFoam/Make/options +++ b/applications/solvers/combustion/engineFoam/Make/options @@ -3,7 +3,7 @@ EXE_INC = \ -I$(LIB_SRC)/engine/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude @@ -13,7 +13,7 @@ EXE_LIBS = \ -lcompressibleRASModels \ -lcompressibleLESModels \ -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lspecie \ -llaminarFlameSpeedModels \ -lfiniteVolume diff --git a/applications/solvers/combustion/engineFoam/engineFoam.C b/applications/solvers/combustion/engineFoam/engineFoam.C index a835e8ea4295fc3d04efc3665c751c3ec504020c..9adf73cc67c167a7cbbee0474c461aea7afdafb8 100644 --- a/applications/solvers/combustion/engineFoam/engineFoam.C +++ b/applications/solvers/combustion/engineFoam/engineFoam.C @@ -63,29 +63,28 @@ Description int main(int argc, char *argv[]) { -# include "setRootCase.H" - -# include "createEngineTime.H" -# include "createEngineMesh.H" -# include "readPISOControls.H" -# include "readCombustionProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" -# include "readEngineTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" -# include "startSummary.H" + #include "setRootCase.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "createEngineTime.H" + #include "createEngineMesh.H" + #include "readCombustionProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readEngineTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + #include "startSummary.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info << "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readPISOControls.H" -# include "readEngineTimeControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readPISOControls.H" + #include "readEngineTimeControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; @@ -93,31 +92,31 @@ int main(int argc, char *argv[]) mesh.move(); -# include "rhoEqn.H" + #include "rhoEqn.H" -# include "UEqn.H" + #include "UEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "ftEqn.H" -# include "bEqn.H" -# include "huEqn.H" -# include "hEqn.H" + #include "ftEqn.H" + #include "bEqn.H" + #include "huEqn.H" + #include "hEqn.H" if (!ign.ignited()) { hu == h; } -# include "pEqn.H" + #include "pEqn.H" } turbulence->correct(); -# include "logSummary.H" + #include "logSummary.H" - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/combustion/engineFoam/pEqn.H b/applications/solvers/combustion/engineFoam/pEqn.H index 638d952f1753a9ea38a5dd317c23ea543f7cc4d1..39b4967312055a320025d3ca3ba70b809fafe762 100644 --- a/applications/solvers/combustion/engineFoam/pEqn.H +++ b/applications/solvers/combustion/engineFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); @@ -8,8 +8,8 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) - *((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U)) + fvc::interpolate(psi) + *((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U)) ); for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) diff --git a/applications/solvers/combustion/engineFoam/readEngineTimeControls.H b/applications/solvers/combustion/engineFoam/readEngineTimeControls.H index 2aea3445eb2705ed41469074bcae777250a7f378..8d6d5f28b3b50a9d5fd54f33fd5c0a565e187b84 100644 --- a/applications/solvers/combustion/engineFoam/readEngineTimeControls.H +++ b/applications/solvers/combustion/engineFoam/readEngineTimeControls.H @@ -1,3 +1,3 @@ -#include "readTimeControls.H" + #include "readTimeControls.H" maxDeltaT = runTime.userTimeToTime(maxDeltaT); diff --git a/applications/solvers/combustion/reactingFoam/Make/options b/applications/solvers/combustion/reactingFoam/Make/options index 908472524a0d648dde43022a8e37bcb31941d483..e982f635a14fefba2fa2a03153961be4e1bf8fca 100644 --- a/applications/solvers/combustion/reactingFoam/Make/options +++ b/applications/solvers/combustion/reactingFoam/Make/options @@ -2,7 +2,7 @@ EXE_INC = \ -I../XiFoam \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ -I$(LIB_SRC)/ODE/lnInclude \ @@ -11,7 +11,7 @@ EXE_INC = \ EXE_LIBS = \ -lcompressibleRASModels \ -lcompressibleLESModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lspecie \ -lbasicThermophysicalModels \ -lchemistryModel \ diff --git a/applications/solvers/combustion/reactingFoam/YEqn.H b/applications/solvers/combustion/reactingFoam/YEqn.H index 873351ac9b4d4c03c6da75e907ab1eea09fdaac6..cda24ec2f72efc49c797a83bbcbb4ba2be6007b5 100644 --- a/applications/solvers/combustion/reactingFoam/YEqn.H +++ b/applications/solvers/combustion/reactingFoam/YEqn.H @@ -13,7 +13,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection label inertIndex = -1; volScalarField Yt = 0.0*Y[0]; - for(label i=0; i<Y.size(); i++) + for (label i=0; i<Y.size(); i++) { if (Y[i].name() != inertSpecie) { @@ -37,7 +37,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection inertIndex = i; } } - + Y[inertIndex] = scalar(1) - Yt; Y[inertIndex].max(0.0); } diff --git a/applications/solvers/combustion/reactingFoam/createFields.H b/applications/solvers/combustion/reactingFoam/createFields.H index cf0532b0f3a9079454779e4cb04a1054277129b3..d92766db5498508a45847a41101c7a54f5960701 100644 --- a/applications/solvers/combustion/reactingFoam/createFields.H +++ b/applications/solvers/combustion/reactingFoam/createFields.H @@ -1,13 +1,16 @@ Info<< nl << "Reading thermophysicalProperties" << endl; -autoPtr<hCombustionThermo> thermo +autoPtr<psiChemistryModel> pChemistry ( - hCombustionThermo::New(mesh) + psiChemistryModel::New(mesh) ); +psiChemistryModel& chemistry = pChemistry(); -combustionMixture& composition = thermo->composition(); +hCombustionThermo& thermo = chemistry.thermo(); + +basicMultiComponentMixture& composition = thermo.composition(); PtrList<volScalarField>& Y = composition.Y(); -word inertSpecie(thermo->lookup("inertSpecie")); +word inertSpecie(thermo.lookup("inertSpecie")); volScalarField rho ( @@ -17,7 +20,7 @@ volScalarField rho runTime.timeName(), mesh ), - thermo->rho() + thermo.rho() ); Info<< "Reading field U\n" << endl; @@ -35,10 +38,9 @@ volVectorField U ); -volScalarField& p = thermo->p(); -const volScalarField& psi = thermo->psi(); -const volScalarField& T = thermo->T(); -volScalarField& h = thermo->h(); +volScalarField& p = thermo.p(); +const volScalarField& psi = thermo.psi(); +volScalarField& h = thermo.h(); #include "compressibleCreatePhi.H" @@ -65,7 +67,7 @@ autoPtr<compressible::turbulenceModel> turbulence rho, U, phi, - thermo() + thermo ) ); @@ -73,31 +75,11 @@ Info<< "Creating field DpDt\n" << endl; volScalarField DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); -Info << "Constructing chemical mechanism" << endl; -chemistryModel chemistry -( - thermo(), - rho -); - multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; -for(label i=0; i<Y.size(); i++) +forAll (Y, i) { fields.add(Y[i]); } fields.add(h); -volScalarField dQ -( - IOobject - ( - "dQ", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - mesh, - dimensionedScalar("zero", dimensionSet(1,-3,-1,0,0,0,0), 0.0) -); diff --git a/applications/solvers/combustion/reactingFoam/reactingFoam.C b/applications/solvers/combustion/reactingFoam/reactingFoam.C index e915818bdc14525026340f04a7e5339bcd08e740..2a9e34e577395d117645f4f88dd19c90f9add5c2 100644 --- a/applications/solvers/combustion/reactingFoam/reactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/reactingFoam.C @@ -33,7 +33,7 @@ Description #include "fvCFD.H" #include "hCombustionThermo.H" #include "turbulenceModel.H" -#include "chemistryModel.H" +#include "psiChemistryModel.H" #include "chemistrySolver.H" #include "multivariateScheme.H" @@ -41,52 +41,52 @@ Description int main(int argc, char *argv[]) { -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readChemistryProperties.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readChemistryProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info << "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readTimeControls.H" -# include "readPISOControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; -# include "chemistry.H" -# include "rhoEqn.H" -# include "UEqn.H" + #include "chemistry.H" + #include "rhoEqn.H" + #include "UEqn.H" for (label ocorr=1; ocorr <= nOuterCorr; ocorr++) { -# include "YEqn.H" + #include "YEqn.H" -# define Db turbulence->alphaEff() -# include "hEqn.H" + #define Db turbulence->alphaEff() + #include "hEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" } } turbulence->correct(); - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/combustion/reactingFoam/readChemistryProperties.H b/applications/solvers/combustion/reactingFoam/readChemistryProperties.H index 1a60e6fb34645a004fd39321f7a54d3bd5b45381..ab51afe28361cdf65bc74af68961a6732535d6b3 100644 --- a/applications/solvers/combustion/reactingFoam/readChemistryProperties.H +++ b/applications/solvers/combustion/reactingFoam/readChemistryProperties.H @@ -8,7 +8,8 @@ IOdictionary chemistryProperties runTime.constant(), mesh, IOobject::MUST_READ, - IOobject::NO_WRITE + IOobject::NO_WRITE, + false ) ); diff --git a/applications/solvers/combustion/rhoReactingFoam/Make/files b/applications/solvers/combustion/rhoReactingFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..3a97a48fd60990418bf233232acce5b59a82bbb8 --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/Make/files @@ -0,0 +1,3 @@ +rhoReactingFoam.C + +EXE = $(FOAM_APPBIN)/rhoReactingFoam diff --git a/applications/solvers/combustion/rhoReactingFoam/Make/options b/applications/solvers/combustion/rhoReactingFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..e982f635a14fefba2fa2a03153961be4e1bf8fca --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/Make/options @@ -0,0 +1,19 @@ +EXE_INC = \ + -I../XiFoam \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ + -I$(LIB_SRC)/ODE/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -lcompressibleRASModels \ + -lcompressibleLESModels \ + -lreactionThermophysicalModels \ + -lspecie \ + -lbasicThermophysicalModels \ + -lchemistryModel \ + -lODE \ + -lfiniteVolume diff --git a/applications/solvers/combustion/rhoReactingFoam/YEqn.H b/applications/solvers/combustion/rhoReactingFoam/YEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..cda24ec2f72efc49c797a83bbcbb4ba2be6007b5 --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/YEqn.H @@ -0,0 +1,43 @@ +tmp<fv::convectionScheme<scalar> > mvConvection +( + fv::convectionScheme<scalar>::New + ( + mesh, + fields, + phi, + mesh.divScheme("div(phi,Yi_h)") + ) +); + +{ + label inertIndex = -1; + volScalarField Yt = 0.0*Y[0]; + + for (label i=0; i<Y.size(); i++) + { + if (Y[i].name() != inertSpecie) + { + volScalarField& Yi = Y[i]; + + solve + ( + fvm::ddt(rho, Yi) + + mvConvection->fvmDiv(phi, Yi) + - fvm::laplacian(turbulence->muEff(), Yi) + == + kappa*chemistry.RR(i), + mesh.solver("Yi") + ); + + Yi.max(0.0); + Yt += Yi; + } + else + { + inertIndex = i; + } + } + + Y[inertIndex] = scalar(1) - Yt; + Y[inertIndex].max(0.0); +} diff --git a/applications/solvers/combustion/rhoReactingFoam/chemistry.H b/applications/solvers/combustion/rhoReactingFoam/chemistry.H new file mode 100644 index 0000000000000000000000000000000000000000..d059bd9ed34f1a577175a271ef6e77360bf63bb6 --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/chemistry.H @@ -0,0 +1,24 @@ +{ + Info << "Solving chemistry" << endl; + + chemistry.solve + ( + runTime.value() - runTime.deltaT().value(), + runTime.deltaT().value() + ); + + // turbulent time scale + if (turbulentReaction) + { + volScalarField tk = + Cmix*sqrt(turbulence->muEff()/rho/turbulence->epsilon()); + volScalarField tc = chemistry.tc(); + + // Chalmers PaSR model + kappa = (runTime.deltaT() + tc)/(runTime.deltaT() + tc + tk); + } + else + { + kappa = 1.0; + } +} diff --git a/applications/solvers/combustion/rhoReactingFoam/createFields.H b/applications/solvers/combustion/rhoReactingFoam/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..d44b4b9171ef0f8f965b1c4732cb21132600f4d4 --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/createFields.H @@ -0,0 +1,85 @@ +Info<< nl << "Reading thermophysicalProperties" << endl; +autoPtr<rhoChemistryModel> pChemistry +( + rhoChemistryModel::New(mesh) +); +rhoChemistryModel& chemistry = pChemistry(); + +hReactionThermo& thermo = chemistry.thermo(); + +basicMultiComponentMixture& composition = thermo.composition(); +PtrList<volScalarField>& Y = composition.Y(); + +word inertSpecie(thermo.lookup("inertSpecie")); + +volScalarField rho +( + IOobject + ( + "rho", + runTime.timeName(), + mesh + ), + thermo.rho() +); + +Info<< "Reading field U\n" << endl; +volVectorField U +( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh +); + + +volScalarField& p = thermo.p(); +const volScalarField& psi = thermo.psi(); +volScalarField& h = thermo.h(); + + +#include "compressibleCreatePhi.H" + +volScalarField kappa +( + IOobject + ( + "kappa", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("zero", dimless, 0.0) +); + +Info << "Creating turbulence model.\n" << nl; +autoPtr<compressible::turbulenceModel> turbulence +( + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) +); + +Info<< "Creating field DpDt\n" << endl; +volScalarField DpDt = + fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); + +multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; + +forAll (Y, i) +{ + fields.add(Y[i]); +} +fields.add(h); + diff --git a/applications/solvers/combustion/rhoReactingFoam/pEqn.H b/applications/solvers/combustion/rhoReactingFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..a58cd28decb0cf466b393e4dda16144fd2664c54 --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/pEqn.H @@ -0,0 +1,93 @@ +{ + rho = thermo.rho(); + + // Thermodynamic density needs to be updated by psi*d(p) after the + // pressure solution - done in 2 parts. Part 1: + thermo.rho() -= psi*p; + + volScalarField rUA = 1.0/UEqn.A(); + U = rUA*UEqn.H(); + + if (transonic) + { + surfaceScalarField phiv = + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi); + + phi = fvc::interpolate(rho)*phiv; + + surfaceScalarField phid + ( + "phid", + fvc::interpolate(thermo.psi())*phiv + ); + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvc::ddt(rho) + fvc::div(phi) + + correction(fvm::ddt(psi, p) + fvm::div(phid, p)) + - fvm::laplacian(rho*rUA, p) + ); + + if (ocorr == nOuterCorr && corr == nCorr && nonOrth == nNonOrthCorr) + { + pEqn.solve(mesh.solver(p.name() + "Final")); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + phi += pEqn.flux(); + } + } + } + else + { + phi = + fvc::interpolate(rho) + *( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) + ); + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + + fvc::div(phi) + - fvm::laplacian(rho*rUA, p) + ); + + if (ocorr == nOuterCorr && corr == nCorr && nonOrth == nNonOrthCorr) + { + pEqn.solve(mesh.solver(p.name() + "Final")); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + phi += pEqn.flux(); + } + } + } + + // Second part of thermodynamic density update + thermo.rho() += psi*p; + + #include "rhoEqn.H" + #include "compressibleContinuityErrs.H" + + U -= rUA*fvc::grad(p); + U.correctBoundaryConditions(); + + DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); +} diff --git a/applications/solvers/combustion/rhoReactingFoam/readChemistryProperties.H b/applications/solvers/combustion/rhoReactingFoam/readChemistryProperties.H new file mode 100644 index 0000000000000000000000000000000000000000..ab51afe28361cdf65bc74af68961a6732535d6b3 --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/readChemistryProperties.H @@ -0,0 +1,23 @@ +Info<< "Reading chemistry properties\n" << endl; + +IOdictionary chemistryProperties +( + IOobject + ( + "chemistryProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) +); + +Switch turbulentReaction(chemistryProperties.lookup("turbulentReaction")); + +dimensionedScalar Cmix("Cmix", dimless, 1.0); + +if (turbulentReaction) +{ + chemistryProperties.lookup("Cmix") >> Cmix; +} diff --git a/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C b/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..16f49a197fe9d5028a1db860bf7bb58ddbf7244c --- /dev/null +++ b/applications/solvers/combustion/rhoReactingFoam/rhoReactingFoam.C @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + rhoReactingFoam + +Description + Chemical reaction code using density based thermodynamics package. + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "hReactionThermo.H" +#include "turbulenceModel.H" +#include "rhoChemistryModel.H" +#include "chemistrySolver.H" +#include "multivariateScheme.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readChemistryProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info << "\nStarting time loop\n" << endl; + + while (runTime.run()) + { + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" + + runTime++; + Info<< "Time = " << runTime.timeName() << nl << endl; + + #include "chemistry.H" + #include "rhoEqn.H" + #include "UEqn.H" + + for (label ocorr=1; ocorr <= nOuterCorr; ocorr++) + { + #include "YEqn.H" + #include "hEqn.H" + + // --- PISO loop + for (int corr=1; corr<=nCorr; corr++) + { + #include "pEqn.H" + } + } + + turbulence->correct(); + + rho = thermo.rho(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/solvers/compressible/rhoCentralFoam/compressibleCourantNo.H b/applications/solvers/compressible/rhoCentralFoam/compressibleCourantNo.H index ebec931a54fcda48dd8777c8fc77fac5a42400f8..33b4edc8a7d31da894068a3c7016dc38bf21137e 100644 --- a/applications/solvers/compressible/rhoCentralFoam/compressibleCourantNo.H +++ b/applications/solvers/compressible/rhoCentralFoam/compressibleCourantNo.H @@ -38,11 +38,11 @@ if (mesh.nInternalFaces()) surfaceScalarField amaxSfbyDelta = mesh.surfaceInterpolation::deltaCoeffs()*amaxSf; - CoNum = max(amaxSfbyDelta/mesh.magSf()) - .value()*runTime.deltaT().value(); + CoNum = max(amaxSfbyDelta/mesh.magSf()).value()*runTime.deltaT().value(); - meanCoNum = (sum(amaxSfbyDelta)/sum(mesh.magSf())) - .value()*runTime.deltaT().value(); + meanCoNum = + (sum(amaxSfbyDelta)/sum(mesh.magSf())).value() + *runTime.deltaT().value(); } Info<< "Mean and max Courant Numbers = " diff --git a/applications/solvers/compressible/rhoCentralFoam/createFields.H b/applications/solvers/compressible/rhoCentralFoam/createFields.H index 3b273bb3dda1ed515b346870e932faa9a73c3123..daf3a88435cc8b9bfbae14ab33085c9dcd72d55e 100644 --- a/applications/solvers/compressible/rhoCentralFoam/createFields.H +++ b/applications/solvers/compressible/rhoCentralFoam/createFields.H @@ -1,15 +1,16 @@ Info<< "Reading thermophysical properties\n" << endl; -autoPtr<basicThermo> thermo +autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); +basicPsiThermo& thermo = pThermo(); -volScalarField& p = thermo->p(); -volScalarField& h = thermo->h(); -const volScalarField& T = thermo->T(); -const volScalarField& psi = thermo->psi(); -const volScalarField& mu = thermo->mu(); +volScalarField& p = thermo.p(); +volScalarField& h = thermo.h(); +const volScalarField& T = thermo.T(); +const volScalarField& psi = thermo.psi(); +const volScalarField& mu = thermo.mu(); bool inviscid(true); if (max(mu.internalField()) > 0.0) @@ -42,7 +43,7 @@ volScalarField rho IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho(), + thermo.rho(), rhoBoundaryTypes ); diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoBoundaryTypes.H b/applications/solvers/compressible/rhoCentralFoam/rhoBoundaryTypes.H index c85f49198529d7ae1c3e400a5c1ae93afef47f1a..7118d24fc9247c5ed8f0301d9a7bb837ba278b0b 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoBoundaryTypes.H +++ b/applications/solvers/compressible/rhoCentralFoam/rhoBoundaryTypes.H @@ -3,10 +3,7 @@ wordList rhoBoundaryTypes = pbf.types(); forAll(rhoBoundaryTypes, patchi) { - if - ( - rhoBoundaryTypes[patchi] == "waveTransmissive" - ) + if (rhoBoundaryTypes[patchi] == "waveTransmissive") { rhoBoundaryTypes[patchi] = zeroGradientFvPatchScalarField::typeName; } diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C index 502406d1322f64edbdd77550ffa90b1f040e1ce1..f418f176374b384112da5f8cd760be97d61efc02 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C +++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "zeroGradientFvPatchFields.H" #include "fixedRhoFvPatchScalarField.H" @@ -40,18 +40,17 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "readThermophysicalProperties.H" + #include "readTimeControls.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "readThermophysicalProperties.H" -# include "readTimeControls.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -# include "readFluxScheme.H" + #include "readFluxScheme.H" dimensionedScalar v_zero("v_zero",dimVolume/dimTime, 0.0); @@ -91,7 +90,7 @@ int main(int argc, char *argv[]) surfaceScalarField phiv_pos = U_pos & mesh.Sf(); surfaceScalarField phiv_neg = U_neg & mesh.Sf(); - volScalarField c = sqrt(thermo->Cp()/thermo->Cv()*rPsi); + volScalarField c = sqrt(thermo.Cp()/thermo.Cv()*rPsi); surfaceScalarField cSf_pos = fvc::interpolate(c, pos, "reconstruct(T)")*mesh.magSf(); surfaceScalarField cSf_neg = fvc::interpolate(c, neg, "reconstruct(T)")*mesh.magSf(); @@ -102,9 +101,9 @@ int main(int argc, char *argv[]) surfaceScalarField amaxSf("amaxSf", max(mag(am), mag(ap))); -# include "compressibleCourantNo.H" -# include "readTimeControls.H" -# include "setDeltaT.H" + #include "compressibleCourantNo.H" + #include "readTimeControls.H" + #include "setDeltaT.H" runTime++; @@ -183,7 +182,7 @@ int main(int argc, char *argv[]) h = (rhoE + p)/rho - 0.5*magSqr(U); h.correctBoundaryConditions(); - thermo->correct(); + thermo.correct(); rhoE.boundaryField() = rho.boundaryField()* ( @@ -193,15 +192,15 @@ int main(int argc, char *argv[]) if (!inviscid) { - volScalarField k("k", thermo->Cp()*mu/Pr); + volScalarField k("k", thermo.Cp()*mu/Pr); solve ( fvm::ddt(rho, h) - fvc::ddt(rho, h) - - fvm::laplacian(thermo->alpha(), h) - + fvc::laplacian(thermo->alpha(), h) + - fvm::laplacian(thermo.alpha(), h) + + fvc::laplacian(thermo.alpha(), h) - fvc::laplacian(k, T) ); - thermo->correct(); + thermo.correct(); rhoE = rho*(h + 0.5*magSqr(U)) - p; } diff --git a/applications/solvers/compressible/rhoPimpleFoam/createFields.H b/applications/solvers/compressible/rhoPimpleFoam/createFields.H index e836704cb1fd79e93dd0dffec96d15d0001830e0..1433ea5cc3d7180c4310f7b0710b913025030977 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/createFields.H +++ b/applications/solvers/compressible/rhoPimpleFoam/createFields.H @@ -1,13 +1,14 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - const volScalarField& psi = thermo->psi(); + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); volScalarField rho ( @@ -19,7 +20,7 @@ IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); Info<< "Reading field U\n" << endl; @@ -51,7 +52,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/compressible/rhoPimpleFoam/hEqn.H b/applications/solvers/compressible/rhoPimpleFoam/hEqn.H index dbc76740f51da87673524ba4bda189998d837864..e66b99442b87bd6e3a4fdeb4025e94f5f88e09c3 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/hEqn.H +++ b/applications/solvers/compressible/rhoPimpleFoam/hEqn.H @@ -19,5 +19,5 @@ hEqn.solve(); } - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/compressible/rhoPimpleFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/pEqn.H index 7918618404a9653761dff2f60d6b67ce73b91bfb..0f3dfe450bccd217fa4e12925d8a5f082ce31b02 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoPimpleFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn().A(); U = rUA*UEqn().H(); @@ -13,7 +13,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) @@ -58,8 +58,6 @@ else //+ fvc::ddtPhiCorr(rUA, rho, U, phi) ); - //bool closedVolume = adjustPhi(phi, U, p); - for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { // Pressure corrector @@ -99,7 +97,7 @@ else // Explicitly relax pressure for momentum corrector p.relax(); - rho = thermo->rho(); + rho = thermo.rho(); rho.relax(); Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; @@ -117,7 +115,7 @@ bound(p, pMin); /* if (closedVolume) { - p += (initialMass - fvc::domainIntegrate(thermo->psi()*p)) - /fvc::domainIntegrate(thermo->psi()); + p += (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); } */ diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C index 8b916b308ef081bc5c90d7695a5bc52df53d4fad..19a26875db50c7d5f224371c229db652adc42ca3 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C @@ -35,7 +35,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" #include "bound.H" diff --git a/applications/solvers/compressible/rhoPisoFoam/createFields.H b/applications/solvers/compressible/rhoPisoFoam/createFields.H index 614f01702df40cf576ae7b94f5a82cd1405ded64..fdb706a14ce0651bf3722244ea51dae8c0df2d6b 100644 --- a/applications/solvers/compressible/rhoPisoFoam/createFields.H +++ b/applications/solvers/compressible/rhoPisoFoam/createFields.H @@ -1,13 +1,14 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - const volScalarField& psi = thermo->psi(); + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); volScalarField rho ( @@ -19,7 +20,7 @@ IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); Info<< "\nReading field U\n" << endl; @@ -47,7 +48,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/compressible/rhoPisoFoam/hEqn.H b/applications/solvers/compressible/rhoPisoFoam/hEqn.H index f72ef0c89cb973b0150b3ec889b51c5be403b872..ae60d3316ec77061804e629360ed13f6cd891f68 100644 --- a/applications/solvers/compressible/rhoPisoFoam/hEqn.H +++ b/applications/solvers/compressible/rhoPisoFoam/hEqn.H @@ -8,5 +8,5 @@ DpDt ); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/compressible/rhoPisoFoam/pEqn.H b/applications/solvers/compressible/rhoPisoFoam/pEqn.H index 05db89627dabf5400a98c2e6a37784dcb9cc53cd..280842ecc3874e9ba634fd997b194fd940635a57 100644 --- a/applications/solvers/compressible/rhoPisoFoam/pEqn.H +++ b/applications/solvers/compressible/rhoPisoFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); @@ -8,7 +8,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) @@ -34,7 +34,7 @@ if (transonic) } else { - phi = + phi = fvc::interpolate(rho)* ( (fvc::interpolate(U) & mesh.Sf()) diff --git a/applications/solvers/compressible/rhoPisoFoam/rhoPisoFoam.C b/applications/solvers/compressible/rhoPisoFoam/rhoPisoFoam.C index c349e7520e6ad34fd55550c77574107a6ff9fd13..cd462c28ab0efd926645aede91b206a5fcd423a1 100644 --- a/applications/solvers/compressible/rhoPisoFoam/rhoPisoFoam.C +++ b/applications/solvers/compressible/rhoPisoFoam/rhoPisoFoam.C @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -43,14 +43,13 @@ int main(int argc, char *argv[]) #include "createTime.H" #include "createMesh.H" #include "createFields.H" - #include "readPISOControls.H" #include "initContinuityErrs.H" #include "readTimeControls.H" #include "compressibleCourantNo.H" #include "setInitialDeltaT.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -77,7 +76,7 @@ int main(int argc, char *argv[]) turbulence->correct(); - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/compressible/rhoPorousSimpleFoam/createFields.H b/applications/solvers/compressible/rhoPorousSimpleFoam/createFields.H index eee3959a4e0850702aa4ef1a47052aece69971fb..1177cba2a4b86adcdc0081e5305b9095214976a9 100644 --- a/applications/solvers/compressible/rhoPorousSimpleFoam/createFields.H +++ b/applications/solvers/compressible/rhoPorousSimpleFoam/createFields.H @@ -1,9 +1,10 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); volScalarField rho ( @@ -15,11 +16,12 @@ IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); Info<< "Reading field U\n" << endl; @@ -36,7 +38,7 @@ mesh ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" label pRefCell = 0; @@ -56,7 +58,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/compressible/rhoPorousSimpleFoam/hEqn.H b/applications/solvers/compressible/rhoPorousSimpleFoam/hEqn.H index 8eb03f95eb46b687a79f9f68c09152bbd269224a..605b8820d1816daeaa6a6b4a2f20965e388a1c8f 100644 --- a/applications/solvers/compressible/rhoPorousSimpleFoam/hEqn.H +++ b/applications/solvers/compressible/rhoPorousSimpleFoam/hEqn.H @@ -14,5 +14,5 @@ eqnResidual = hEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/compressible/rhoPorousSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoPorousSimpleFoam/pEqn.H index ae41da9e36fd7af8dd172b163b16dd8829a93b8b..4d8e010f7e352464dd92558f23342c10774f6575 100644 --- a/applications/solvers/compressible/rhoPorousSimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoPorousSimpleFoam/pEqn.H @@ -65,10 +65,10 @@ bound(p, pMin); // to obey overall mass continuity if (closedVolume) { - p += (initialMass - fvc::domainIntegrate(thermo->psi()*p)) - /fvc::domainIntegrate(thermo->psi()); + p += (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); } -rho = thermo->rho(); +rho = thermo.rho(); rho.relax(); Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; diff --git a/applications/solvers/compressible/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C b/applications/solvers/compressible/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C index 0cd144fce23508b23d803c7abf25510f67f17f99..10bfeb61db53b4769d3cfd5b006a12ba587fa4fb 100644 --- a/applications/solvers/compressible/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C +++ b/applications/solvers/compressible/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C @@ -27,12 +27,12 @@ Application Description Steady-state solver for turbulent flow of compressible fluids with - implicit or explicit porosity treatment + RANS turbulence modelling, and implicit or explicit porosity treatment \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "RASModel.H" #include "porousZones.H" @@ -40,14 +40,13 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -55,17 +54,17 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" -# include "initConvergenceCheck.H" + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" p.storePrevIter(); rho.storePrevIter(); // Pressure-velocity SIMPLE corrector { -# include "UEqn.H" -# include "hEqn.H" -# include "pEqn.H" + #include "UEqn.H" + #include "hEqn.H" + #include "pEqn.H" } turbulence->correct(); @@ -75,7 +74,7 @@ int main(int argc, char *argv[]) << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; -# include "convergenceCheck.H" + #include "convergenceCheck.H" } Info<< "End\n" << endl; diff --git a/applications/solvers/compressible/rhoSimpleFoam/createFields.H b/applications/solvers/compressible/rhoSimpleFoam/createFields.H index 9c4f446c37ff45885232c1219825f8840fe9cbdb..690b53760d75b22618fc9cd0c1358c015d867854 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/createFields.H +++ b/applications/solvers/compressible/rhoSimpleFoam/createFields.H @@ -1,9 +1,10 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); volScalarField rho ( @@ -15,12 +16,12 @@ IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); Info<< "Reading field U\n" << endl; volVectorField U @@ -56,7 +57,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/compressible/rhoSimpleFoam/hEqn.H b/applications/solvers/compressible/rhoSimpleFoam/hEqn.H index 6a87bbdf11941f36afe9fb7a43186f92cf554e0f..e299d99f83c9b1e0c0ab95b35d015300f4f18d7b 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/hEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/hEqn.H @@ -14,5 +14,5 @@ eqnResidual = hEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H index e4fbe15aa485869258c231d8aef86f4e49a5c096..f6a433fd6164d0f803098051d4a9c44f4fafa38c 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn().A(); U = rUA*UEqn().H(); @@ -11,7 +11,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi())*(fvc::interpolate(U) & mesh.Sf()) + fvc::interpolate(psi)*(fvc::interpolate(U) & mesh.Sf()) ); for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) @@ -82,7 +82,7 @@ else // Explicitly relax pressure for momentum corrector p.relax(); -rho = thermo->rho(); +rho = thermo.rho(); rho.relax(); Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; @@ -95,6 +95,6 @@ bound(p, pMin); // to obey overall mass continuity if (closedVolume) { - p += (initialMass - fvc::domainIntegrate(thermo->psi()*p)) - /fvc::domainIntegrate(thermo->psi()); + p += (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); } diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C index bf6a9f24f3386c7c1f93237fc244c30f85e87951..099257e5ae40a7deec364106327f1a82205a935a 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C @@ -26,13 +26,13 @@ Application rhoSimpleFoam Description - Steady-state SIMPLE solver for laminar or turbulent flow of + Steady-state SIMPLE solver for laminar or turbulent RANS flow of compressible fluids. \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "RASModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/compressible/rhopSonicFoam/rhopSonicFoam.C b/applications/solvers/compressible/rhopSonicFoam/rhopSonicFoam.C index 7cd692b71dce38874e8e4a4555e8e0a449df8390..3d71de6324737b321553dd0945566e76e39372d8 100644 --- a/applications/solvers/compressible/rhopSonicFoam/rhopSonicFoam.C +++ b/applications/solvers/compressible/rhopSonicFoam/rhopSonicFoam.C @@ -42,14 +42,13 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readThermodynamicProperties.H" + #include "createFields.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readThermodynamicProperties.H" -# include "createFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -57,10 +56,10 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.value() << nl << endl; -# include "readPISOControls.H" + #include "readPISOControls.H" scalar HbyAblend = readScalar(piso.lookup("HbyAblend")); -# include "readTimeControls.H" + #include "readTimeControls.H" scalar CoNum = max ( @@ -70,7 +69,7 @@ int main(int argc, char *argv[]) Info<< "Max Courant Number = " << CoNum << endl; -# include "setDeltaT.H" + #include "setDeltaT.H" for (int outerCorr=0; outerCorr<nOuterCorr; outerCorr++) { @@ -145,9 +144,9 @@ int main(int argc, char *argv[]) phi -= phiGradp; -# include "resetPhiPatches.H" + #include "resetPhiPatches.H" - surfaceScalarField rhof = + surfaceScalarField rhof = mvConvection.interpolationScheme()()(rho)() .interpolate(rho); @@ -165,7 +164,7 @@ int main(int argc, char *argv[]) phi += phiGradp + pEqn.flux(); rho = psi*p; - rhof = + rhof = mvConvection.interpolationScheme()()(rho)() .interpolate(rho); phiv = phi/rhof; diff --git a/applications/solvers/compressible/sonicDyMFoam/compressibleContinuityErrs.H b/applications/solvers/compressible/sonicDyMFoam/compressibleContinuityErrs.H index eec8485329cfcb0956c0b49b9a6108ead3cc797e..1d869cc58dae738d345b2448f7dfdcf7a63c36cb 100644 --- a/applications/solvers/compressible/sonicDyMFoam/compressibleContinuityErrs.H +++ b/applications/solvers/compressible/sonicDyMFoam/compressibleContinuityErrs.H @@ -1,5 +1,5 @@ { -# include "rhoEqn.H" + #include "rhoEqn.H" } { scalar sumLocalContErr = diff --git a/applications/solvers/compressible/sonicDyMFoam/createFields.H b/applications/solvers/compressible/sonicDyMFoam/createFields.H index eb45a7c23af7826cd0843adead9e5a3ea74ccfbf..4344a4f5e49451f647a322eb45b08bd07bf062b5 100644 --- a/applications/solvers/compressible/sonicDyMFoam/createFields.H +++ b/applications/solvers/compressible/sonicDyMFoam/createFields.H @@ -1,13 +1,14 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - const volScalarField& psi = thermo->psi(); + volScalarField& p = thermo.p(); + volScalarField& e = thermo.e(); + const volScalarField& psi = thermo.psi(); volScalarField rho ( @@ -17,7 +18,7 @@ runTime.timeName(), mesh ), - thermo->rho() + thermo.rho() ); Info<< "Reading field U\n" << endl; @@ -45,7 +46,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/applications/solvers/compressible/sonicDyMFoam/sonicDyMFoam.C b/applications/solvers/compressible/sonicDyMFoam/sonicDyMFoam.C index 57b15a0f9ba4e546d59ad17eb9a7129989ca4ad1..cef51b6c58392cb7ebe33657b93784ffc1eb8675 100644 --- a/applications/solvers/compressible/sonicDyMFoam/sonicDyMFoam.C +++ b/applications/solvers/compressible/sonicDyMFoam/sonicDyMFoam.C @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" #include "motionSolver.H" @@ -72,7 +72,7 @@ int main(int argc, char *argv[]) solve(UEqn == -fvc::grad(p)); - #include "hEqn.H" + #include "eEqn.H" // --- PISO loop @@ -84,8 +84,8 @@ int main(int argc, char *argv[]) surfaceScalarField phid ( "phid", - fvc::interpolate(psi)* - ( + fvc::interpolate(psi) + *( (fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U) ) ); diff --git a/applications/solvers/compressible/sonicFoam/UEqn.H b/applications/solvers/compressible/sonicFoam/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..25506783aee86c36049d916b0bc349469a6510d4 --- /dev/null +++ b/applications/solvers/compressible/sonicFoam/UEqn.H @@ -0,0 +1,8 @@ +fvVectorMatrix UEqn +( + fvm::ddt(rho, U) + + fvm::div(phi, U) + + turbulence->divDevRhoReff(U) +); + +solve(UEqn == -fvc::grad(p)); diff --git a/applications/solvers/compressible/sonicFoam/compressibleContinuityErrs.H b/applications/solvers/compressible/sonicFoam/compressibleContinuityErrs.H deleted file mode 100644 index 128d99c94611b88f8c01b3bb683dedcf0f237dc1..0000000000000000000000000000000000000000 --- a/applications/solvers/compressible/sonicFoam/compressibleContinuityErrs.H +++ /dev/null @@ -1,12 +0,0 @@ -{ -# include "rhoEqn.H" -} -{ - scalar sumLocalContErr = (sum(mag(rho - psi*p))/sum(rho)).value(); - scalar globalContErr = (sum(rho - psi*p)/sum(rho)).value(); - cumulativeContErr += globalContErr; - - Info<< "time step continuity errors : sum local = " << sumLocalContErr - << ", global = " << globalContErr - << ", cumulative = " << cumulativeContErr << endl; -} diff --git a/applications/solvers/compressible/sonicFoam/createFields.H b/applications/solvers/compressible/sonicFoam/createFields.H index eb45a7c23af7826cd0843adead9e5a3ea74ccfbf..5d03dd2bb7ccd83fb9f8900e2e2a08f2b3774ba4 100644 --- a/applications/solvers/compressible/sonicFoam/createFields.H +++ b/applications/solvers/compressible/sonicFoam/createFields.H @@ -1,13 +1,14 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - const volScalarField& psi = thermo->psi(); + volScalarField& p = thermo.p(); + volScalarField& e = thermo.e(); + const volScalarField& psi = thermo.psi(); volScalarField rho ( @@ -17,7 +18,7 @@ runTime.timeName(), mesh ), - thermo->rho() + thermo.rho() ); Info<< "Reading field U\n" << endl; @@ -34,7 +35,7 @@ mesh ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" Info<< "Creating turbulence model\n" << endl; @@ -45,10 +46,6 @@ rho, U, phi, - thermo() + thermo ) ); - - Info<< "Creating field DpDt\n" << endl; - volScalarField DpDt = - fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); diff --git a/applications/solvers/compressible/sonicFoam/eEqn.H b/applications/solvers/compressible/sonicFoam/eEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..1d1d6aef0b2d53efa849347af2a0c4d6f9cbf912 --- /dev/null +++ b/applications/solvers/compressible/sonicFoam/eEqn.H @@ -0,0 +1,12 @@ +{ + solve + ( + fvm::ddt(rho, e) + + fvm::div(phi, e) + - fvm::laplacian(turbulence->alphaEff(), e) + == + - p*fvc::div(phi/fvc::interpolate(rho)) + ); + + thermo.correct(); +} diff --git a/applications/solvers/compressible/sonicFoam/hEqn.H b/applications/solvers/compressible/sonicFoam/hEqn.H deleted file mode 100644 index 5cb4c48c0883e6fce99b9e9a2e76b277e9cbfef7..0000000000000000000000000000000000000000 --- a/applications/solvers/compressible/sonicFoam/hEqn.H +++ /dev/null @@ -1,12 +0,0 @@ -{ - solve - ( - fvm::ddt(rho, h) - + fvm::div(phi, h) - - fvm::laplacian(turbulence->alphaEff(), h) - == - DpDt - ); - - thermo->correct(); -} diff --git a/applications/solvers/compressible/sonicFoam/pEqn.H b/applications/solvers/compressible/sonicFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..96a500d4c2644a1af8220d012f1888f67a297b2c --- /dev/null +++ b/applications/solvers/compressible/sonicFoam/pEqn.H @@ -0,0 +1,37 @@ +rho = thermo.rho(); + +volScalarField rUA = 1.0/UEqn.A(); +U = rUA*UEqn.H(); + +surfaceScalarField phid +( + "phid", + fvc::interpolate(psi) + *( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) + ) +); + +for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) +{ + fvScalarMatrix pEqn + ( + fvm::ddt(psi, p) + + fvm::div(phid, p) + - fvm::laplacian(rho*rUA, p) + ); + + pEqn.solve(); + + if (nonOrth == nNonOrthCorr) + { + phi = pEqn.flux(); + } +} + +#include "rhoEqn.H" +#include "compressibleContinuityErrs.H" + +U -= rUA*fvc::grad(p); +U.correctBoundaryConditions(); diff --git a/applications/solvers/compressible/sonicFoam/readThermodynamicProperties.H b/applications/solvers/compressible/sonicFoam/readThermodynamicProperties.H deleted file mode 100644 index 1fc57fc5fdc6ef0a6d8d232922fa06f124314a3a..0000000000000000000000000000000000000000 --- a/applications/solvers/compressible/sonicFoam/readThermodynamicProperties.H +++ /dev/null @@ -1,23 +0,0 @@ - Info<< "Reading thermodynamicProperties\n" << endl; - - IOdictionary thermodynamicProperties - ( - IOobject - ( - "thermodynamicProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); - - dimensionedScalar R - ( - thermodynamicProperties.lookup("R") - ); - - dimensionedScalar Cv - ( - thermodynamicProperties.lookup("Cv") - ); diff --git a/applications/solvers/compressible/sonicFoam/readTransportProperties.H b/applications/solvers/compressible/sonicFoam/readTransportProperties.H deleted file mode 100644 index 1502e2033a05c54d882dd06ea42731938527d1a8..0000000000000000000000000000000000000000 --- a/applications/solvers/compressible/sonicFoam/readTransportProperties.H +++ /dev/null @@ -1,18 +0,0 @@ - Info<< "Reading transportProperties\n" << endl; - - IOdictionary transportProperties - ( - IOobject - ( - "transportProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); - - dimensionedScalar mu - ( - transportProperties.lookup("mu") - ); diff --git a/applications/solvers/compressible/sonicFoam/sonicFoam.C b/applications/solvers/compressible/sonicFoam/sonicFoam.C index 6ff79607986802a024e450042be2ad286d6d5b12..df100262efbc93a9127978cd0b472c380a7e8a17 100644 --- a/applications/solvers/compressible/sonicFoam/sonicFoam.C +++ b/applications/solvers/compressible/sonicFoam/sonicFoam.C @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,64 +58,21 @@ int main(int argc, char *argv[]) #include "rhoEqn.H" - fvVectorMatrix UEqn - ( - fvm::ddt(rho, U) - + fvm::div(phi, U) - + turbulence->divDevRhoReff(U) - ); + #include "UEqn.H" - solve(UEqn == -fvc::grad(p)); - - #include "hEqn.H" + #include "eEqn.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) { - volScalarField rUA = 1.0/UEqn.A(); - U = rUA*UEqn.H(); - - surfaceScalarField phid - ( - "phid", - fvc::interpolate(thermo->psi()) - *( - (fvc::interpolate(U) & mesh.Sf()) - + fvc::ddtPhiCorr(rUA, rho, U, phi) - ) - ); - - for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) - { - fvScalarMatrix pEqn - ( - fvm::ddt(psi, p) - + fvm::div(phid, p) - - fvm::laplacian(rho*rUA, p) - ); - - pEqn.solve(); - - if (nonOrth == nNonOrthCorr) - { - phi = pEqn.flux(); - } - } - - #include "compressibleContinuityErrs.H" - - U -= rUA*fvc::grad(p); - U.correctBoundaryConditions(); + #include "pEqn.H" } - DpDt = - fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); - turbulence->correct(); - rho = psi*p; + rho = thermo.rho(); runTime.write(); diff --git a/applications/solvers/compressible/sonicLiquidFoam/createFields.H b/applications/solvers/compressible/sonicLiquidFoam/createFields.H index f419234c7dbf28ee9231ce36837df22d996912ae..1268cbb7b0657b70f8ffa4131204ad516b2e1b79 100644 --- a/applications/solvers/compressible/sonicLiquidFoam/createFields.H +++ b/applications/solvers/compressible/sonicLiquidFoam/createFields.H @@ -41,4 +41,4 @@ ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" diff --git a/applications/solvers/compressible/sonicLiquidFoam/sonicLiquidFoam.C b/applications/solvers/compressible/sonicLiquidFoam/sonicLiquidFoam.C index 0324da8299896476159dca790e388716a8ca8ac3..763e03a4b9759e3210379affa4bc44341e7ea848 100644 --- a/applications/solvers/compressible/sonicLiquidFoam/sonicLiquidFoam.C +++ b/applications/solvers/compressible/sonicLiquidFoam/sonicLiquidFoam.C @@ -37,16 +37,15 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readThermodynamicProperties.H" + #include "readTransportProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readThermodynamicProperties.H" -# include "readTransportProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -54,10 +53,10 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readPISOControls.H" -# include "compressibleCourantNo.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" -# include "rhoEqn.H" + #include "rhoEqn.H" fvVectorMatrix UEqn ( @@ -79,8 +78,8 @@ int main(int argc, char *argv[]) surfaceScalarField phid ( "phid", - psi* - ( + psi + *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) ) @@ -100,7 +99,7 @@ int main(int argc, char *argv[]) phi += pEqn.flux(); -# include "compressibleContinuityErrs.H" + #include "compressibleContinuityErrs.H" U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); diff --git a/applications/solvers/discreteMethods/dsmc/dsmcFoam/Make/files b/applications/solvers/discreteMethods/dsmc/dsmcFoam/Make/files old mode 100755 new mode 100644 diff --git a/applications/solvers/discreteMethods/dsmc/dsmcFoam/Make/options b/applications/solvers/discreteMethods/dsmc/dsmcFoam/Make/options old mode 100755 new mode 100644 diff --git a/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C b/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C index cb068960e8e459dc3c3fc7db1d45e458f649c552..7a4d8ce8b92c7e14a9dfa14eb67a790e7533c3cb 100644 --- a/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C +++ b/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/files b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/files old mode 100755 new mode 100644 diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/options b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/Make/options old mode 100755 new mode 100644 diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C index a124288dc5b64961f7dd48742525216ac3a2e39c..ea10d9129fae5ad178d0f0bb2ade20bf95cfa7fe 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H index 8289d014b03da3f2519d34be134ab4bcaa6ab2b9..b94745d9df20114094e7b75fdff62d15042164eb 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H +++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H @@ -14,5 +14,5 @@ IOdictionary mdEquilibrationDict scalar targetTemperature = readScalar ( - mdEquilibrationDict.lookup("equilibrationTargetTemperature") + mdEquilibrationDict.lookup("targetTemperature") ); diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/Make/files b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/Make/files old mode 100755 new mode 100644 diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/Make/options b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/Make/options old mode 100755 new mode 100644 diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C index 287065754e39c115a4c9b3a5a04e61faf631c332..9fafafe1c9e7f4a58a8d7e4c181505e688b96948 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C b/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C index ff0b3ad21a0ac248b21e9f4a6926c3e836a1c684..e2a3f3ea39575daa252841621d8fa7e262106aaf 100644 --- a/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C +++ b/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C @@ -36,14 +36,13 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting iteration loop\n" << endl; diff --git a/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C b/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C index d89b636d04392ffff0dae5344587421aec0278c1..f09b35efc97f93eac30fda4fdf212a436eedd22d 100644 --- a/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C +++ b/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C @@ -26,7 +26,7 @@ Application mhdFoam Description - Solver for magnetohydrodynamics (MHD): incompressible, laminar flow of a + Solver for magnetohydrodynamics (MHD): incompressible, laminar flow of a conducting fluid under the influence of a magnetic field. An applied magnetic field H acts as a driving force, @@ -58,27 +58,25 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "initContinuityErrs.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< nl << "Starting time loop" << endl; while (runTime.loop()) { -# include "readPISOControls.H" -# include "readBPISOControls.H" + #include "readPISOControls.H" + #include "readBPISOControls.H" Info<< "Time = " << runTime.timeName() << nl << endl; -# include "CourantNo.H" + #include "CourantNo.H" { fvVectorMatrix UEqn @@ -101,7 +99,7 @@ int main(int argc, char *argv[]) U = rUA*UEqn.H(); - phi = (fvc::interpolate(U) & mesh.Sf()) + phi = (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, U, phi); for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) @@ -120,7 +118,7 @@ int main(int argc, char *argv[]) } } -# include "continuityErrs.H" + #include "continuityErrs.H" U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); @@ -154,7 +152,7 @@ int main(int argc, char *argv[]) phiB -= pBEqn.flux(); -# include "magneticFieldErr.H" + #include "magneticFieldErr.H" } runTime.write(); diff --git a/applications/solvers/financial/financialFoam/financialFoam.C b/applications/solvers/financial/financialFoam/financialFoam.C index 86c18e2ac44a516d05f2ce0a9a5a8aaa49ff01e4..4bbb74e95f28bf9dcf176180f06f6cf12a4ae27a 100644 --- a/applications/solvers/financial/financialFoam/financialFoam.C +++ b/applications/solvers/financial/financialFoam/financialFoam.C @@ -38,14 +38,13 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -#include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" -#include "createTime.H" -#include "createMesh.H" -#include "createFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< nl << "Calculating value(price of comodities)" << endl; diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options index a53061a93cc503d9368d9d3a900ac6ef801015ba..041d2e0605468bb86b7eee749a4be8de8076f910 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I../buoyantBoussinesqSimpleFoam \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H index e2a89d1441582292fcb5a33ec7e092eac455a5a5..ece4b8ffe5c70d80f68e7093baffe960d5e76433 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H @@ -2,7 +2,7 @@ volScalarField kappaEff ( "kappaEff", - turbulence->nu() + turbulence->nut()/Prt + turbulence->nu()/Pr + turbulence->nut()/Prt ); fvScalarMatrix TEqn @@ -15,4 +15,6 @@ TEqn.relax(); TEqn.solve(); + + rhok = 1.0 - beta*(T - TRef); } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H index 3b5b5be24923c1b410d47c34fd14da319e117026..35387f4ff40468426b6ebc31a6fb517553759fe4 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H @@ -1,23 +1,26 @@ // Solve the momentum equation - tmp<fvVectorMatrix> UEqn + fvVectorMatrix UEqn ( fvm::ddt(U) + fvm::div(phi, U) + turbulence->divDevReff(U) ); - UEqn().relax(); + UEqn.relax(); - solve - ( - UEqn() - == - -fvc::reconstruct + if (momentumPredictor) + { + solve ( + UEqn + == + fvc::reconstruct ( - fvc::snGrad(pd) - - betaghf*fvc::snGrad(T) - ) * mesh.magSf() - ) - ); + ( + fvc::interpolate(rhok)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() + ) + ) + ); + } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C index bd0ce2ac373a09d4c8816ad5fc990244d31a51d7..a8ff18374220e04a17c01dcd59325f030ea38361 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,18 +30,18 @@ Description Uses the Boussinesq approximation: \f[ - rho_{eff} = 1 - beta(T - T_{ref}) + rho_{k} = 1 - beta(T - T_{ref}) \f] where: - \f$ rho_{eff} \f$ = the effective (driving) density + \f$ rho_{k} \f$ = the effective (driving) kinematic density beta = thermal expansion coefficient [1/K] T = temperature [K] \f$ T_{ref} \f$ = reference temperature [K] Valid when: \f[ - rho_{eff} << 1 + rho_{k} << 1 \f] \*---------------------------------------------------------------------------*/ @@ -54,18 +54,17 @@ Description int main(int argc, char *argv[]) { - -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "CourantNo.H" -# include "setInitialDeltaT.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "CourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -73,26 +72,23 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readTimeControls.H" -# include "readPISOControls.H" -# include "CourantNo.H" -# include "setDeltaT.H" + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "CourantNo.H" + #include "setDeltaT.H" -# include "UEqn.H" + #include "UEqn.H" + #include "TEqn.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) { -# include "TEqn.H" -# include "pdEqn.H" + #include "pEqn.H" } turbulence->correct(); - if (runTime.write()) - { -# include "writeAdditionalFields.H" - } + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H index 5f3f13626db0a860d7058e76ce5a90f397558c95..dde0e38b339348ac1693d4bfdf3da9889610a354 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H @@ -14,13 +14,12 @@ mesh ); - // kinematic pd - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -53,15 +52,25 @@ incompressible::RASModel::New(U, phi, laminarTransport) ); - Info<< "Calculating field beta*(g.h)\n" << endl; - surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf())); - - label pdRefCell = 0; - scalar pdRefValue = 0.0; + label pRefCell = 0; + scalar pRefValue = 0.0; setRefCell ( - pd, - mesh.solutionDict().subDict("SIMPLE"), - pdRefCell, - pdRefValue + p, + mesh.solutionDict().subDict("PISO"), + pRefCell, + pRefValue + ); + + + // Kinematic density for buoyancy force + volScalarField rhok + ( + IOobject + ( + "rhok", + runTime.timeName(), + mesh + ), + 1.0 - beta*(T - TRef) ); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pdEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pEqn.H similarity index 55% rename from applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pdEqn.H rename to applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pEqn.H index 25e2a9817fbe680f3b52b91b5a7fc187d52a3643..ff0c26f05893f6e625e7a8a5193c2f6a08882bc5 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pdEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pEqn.H @@ -1,9 +1,8 @@ { - volScalarField rUA("rUA", 1.0/UEqn().A()); + volScalarField rUA("rUA", 1.0/UEqn.A()); surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA)); - U = rUA*UEqn().H(); - UEqn.clear(); + U = rUA*UEqn.H(); surfaceScalarField phiU ( @@ -11,31 +10,31 @@ + fvc::ddtPhiCorr(rUA, U, phi) ); - phi = phiU + betaghf*fvc::snGrad(T)*rUAf*mesh.magSf(); + phi = phiU + rUAf*fvc::interpolate(rhok)*(g & mesh.Sf()); for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rUAf, pd) == fvc::div(phi) + fvm::laplacian(rUAf, p) == fvc::div(phi) ); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi += pdEqn.flux(); + phi -= pEqn.flux(); } } - U -= rUA*fvc::reconstruct((phi - phiU)/rUAf); + U += rUA*fvc::reconstruct((phi - phiU)/rUAf); U.correctBoundaryConditions(); #include "continuityErrs.H" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/readTransportProperties.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/readTransportProperties.H deleted file mode 100644 index 585128dfdeb7d5e5212f9412d9b415c05c15b752..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/readTransportProperties.H +++ /dev/null @@ -1,13 +0,0 @@ - singlePhaseTransportModel laminarTransport(U, phi); - - // thermal expansion coefficient [1/K] - dimensionedScalar beta(laminarTransport.lookup("beta")); - - // reference temperature [K] - dimensionedScalar TRef(laminarTransport.lookup("TRef")); - - // reference kinematic pressure [m2/s2] - dimensionedScalar pRef(laminarTransport.lookup("pRef")); - - // turbulent Prandtl number - dimensionedScalar Prt(laminarTransport.lookup("Prt")); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/writeAdditionalFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/writeAdditionalFields.H deleted file mode 100644 index 20f7c6ae1dcff80630dc2ca21253b1e824ea5d77..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/writeAdditionalFields.H +++ /dev/null @@ -1,29 +0,0 @@ -{ - volScalarField rhoEff - ( - IOobject - ( - "rhoEff", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - 1.0 - beta*(T - TRef) - ); - rhoEff.write(); - - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rhoEff*(g & mesh.C()) + pRef - ); - p.write(); -} diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H index d00f0877eaf592058b956d3c9f78979d91d6dbc1..7452a0495adf2207ffb0f66e9e4484e1e7c9bad2 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H @@ -2,7 +2,7 @@ volScalarField kappaEff ( "kappaEff", - turbulence->nu() + turbulence->nut()/Prt + turbulence->nu()/Pr + turbulence->nut()/Prt ); fvScalarMatrix TEqn @@ -16,4 +16,6 @@ eqnResidual = TEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); + + rhok = 1.0 - beta*(T - TRef); } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H index cf5c4a197893afff99ffec01847b2ce9bbd57b3e..a813a2d8b7aab17f8a45dfc9295e9ee6f161a683 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H @@ -13,12 +13,12 @@ ( UEqn() == - -fvc::reconstruct + fvc::reconstruct ( ( - fvc::snGrad(pd) - - betaghf*fvc::snGrad(T) - ) * mesh.magSf() + fvc::interpolate(rhok)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() + ) ) ).initialResidual(); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C index 26e732cf9c17b30ac63d080b03470a3678290aa0..63b938fa3625c2a15475b5ab5eb2157ce4cd9416 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,15 +54,14 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -70,30 +69,27 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" -# include "initConvergenceCheck.H" + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" - pd.storePrevIter(); + p.storePrevIter(); // Pressure-velocity SIMPLE corrector { -# include "UEqn.H" -# include "TEqn.H" -# include "pdEqn.H" + #include "UEqn.H" + #include "TEqn.H" + #include "pEqn.H" } turbulence->correct(); - if (runTime.write()) - { -# include "writeAdditionalFields.H" - } + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; -# include "convergenceCheck.H" + #include "convergenceCheck.H" } Info<< "End\n" << endl; diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H index 5f3f13626db0a860d7058e76ce5a90f397558c95..0e668e9d987c132605e1aa28daee9e9aa0bf9a94 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H @@ -14,13 +14,12 @@ mesh ); - // kinematic pd - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -56,12 +55,25 @@ Info<< "Calculating field beta*(g.h)\n" << endl; surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf())); - label pdRefCell = 0; - scalar pdRefValue = 0.0; + label pRefCell = 0; + scalar pRefValue = 0.0; setRefCell ( - pd, + p, mesh.solutionDict().subDict("SIMPLE"), - pdRefCell, - pdRefValue + pRefCell, + pRefValue + ); + + + // Kinematic density for buoyancy force + volScalarField rhok + ( + IOobject + ( + "rhok", + runTime.timeName(), + mesh + ), + 1.0 - beta*(T - TRef) ); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pdEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pEqn.H similarity index 64% rename from applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pdEqn.H rename to applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pEqn.H index e782d26c8dc5ad4374d1b5a76ab7dfd72f6b9601..6408c7ccc80754426579d2feab91af7e744a7bb8 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pdEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pEqn.H @@ -6,41 +6,43 @@ UEqn.clear(); phi = fvc::interpolate(U) & mesh.Sf(); - adjustPhi(phi, U, pd); - surfaceScalarField buoyancyPhi = -betaghf*fvc::snGrad(T)*rUAf*mesh.magSf(); - phi -= buoyancyPhi; + adjustPhi(phi, U, p); + + surfaceScalarField buoyancyPhi = + rUAf*fvc::interpolate(rhok)*(g & mesh.Sf()); + phi += buoyancyPhi; for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rUAf, pd) == fvc::div(phi) + fvm::laplacian(rUAf, p) == fvc::div(phi) ); - pdEqn.setReference(pdRefCell, pdRefValue); + pEqn.setReference(pRefCell, pRefValue); // retain the residual from the first iteration if (nonOrth == 0) { - eqnResidual = pdEqn.solve().initialResidual(); + eqnResidual = pEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); } else { - pdEqn.solve(); + pEqn.solve(); } if (nonOrth == nNonOrthCorr) { // Calculate the conservative fluxes - phi -= pdEqn.flux(); + phi -= pEqn.flux(); // Explicitly relax pressure for momentum corrector - pd.relax(); + p.relax(); // Correct the momentum source with the pressure gradient flux // calculated from the relaxed pressure - U -= rUA*fvc::reconstruct((buoyancyPhi + pdEqn.flux())/rUAf); + U += rUA*fvc::reconstruct((buoyancyPhi - pEqn.flux())/rUAf); U.correctBoundaryConditions(); } } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H index 585128dfdeb7d5e5212f9412d9b415c05c15b752..82d101d8c1b18d88c41af9ffd0f7e4d10fa89cd2 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H @@ -1,13 +1,13 @@ singlePhaseTransportModel laminarTransport(U, phi); - // thermal expansion coefficient [1/K] + // Thermal expansion coefficient [1/K] dimensionedScalar beta(laminarTransport.lookup("beta")); - // reference temperature [K] + // Reference temperature [K] dimensionedScalar TRef(laminarTransport.lookup("TRef")); - // reference kinematic pressure [m2/s2] - dimensionedScalar pRef(laminarTransport.lookup("pRef")); + // Laminar Prandtl number + dimensionedScalar Pr(laminarTransport.lookup("Pr")); - // turbulent Prandtl number + // Turbulent Prandtl number dimensionedScalar Prt(laminarTransport.lookup("Prt")); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/writeAdditionalFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/writeAdditionalFields.H deleted file mode 100644 index 20f7c6ae1dcff80630dc2ca21253b1e824ea5d77..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/writeAdditionalFields.H +++ /dev/null @@ -1,29 +0,0 @@ -{ - volScalarField rhoEff - ( - IOobject - ( - "rhoEff", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - 1.0 - beta*(T - TRef) - ); - rhoEff.write(); - - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rhoEff*(g & mesh.C()) + pRef - ); - p.write(); -} diff --git a/applications/solvers/heatTransfer/buoyantPisoFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantPisoFoam/UEqn.H index 24cfbf4f685a291b1a836fc0dfd931f9bfc526d1..d4878d063dab6ee8ed4243c61d529832d3dd9c6a 100644 --- a/applications/solvers/heatTransfer/buoyantPisoFoam/UEqn.H +++ b/applications/solvers/heatTransfer/buoyantPisoFoam/UEqn.H @@ -15,12 +15,10 @@ ( UEqn == - -fvc::reconstruct + fvc::reconstruct ( - ( - fvc::snGrad(pd) - + ghf*fvc::snGrad(rho) - ) * mesh.magSf() + fvc::interpolate(rho)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() ) ); } diff --git a/applications/solvers/heatTransfer/buoyantPisoFoam/buoyantPisoFoam.C b/applications/solvers/heatTransfer/buoyantPisoFoam/buoyantPisoFoam.C index 83527f8215130271882402bac0f6d5769ba4f860..b5055812c40e362d420c08ab862c9db91e2469c5 100644 --- a/applications/solvers/heatTransfer/buoyantPisoFoam/buoyantPisoFoam.C +++ b/applications/solvers/heatTransfer/buoyantPisoFoam/buoyantPisoFoam.C @@ -27,13 +27,13 @@ Application Description Transient Solver for buoyant, turbulent flow of compressible fluids for - ventilation and heat-transfer. Turbulence is modelled using a run-time - selectable compressible RAS model. + ventilation and heat-transfer. Turbulence is modelled using a run-time + selectable compressible RAS or LES model. \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicRhoThermo.H" #include "turbulenceModel.H" #include "fixedGradientFvPatchFields.H" @@ -81,6 +81,8 @@ int main(int argc, char *argv[]) turbulence->correct(); + rho = thermo.rho(); + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" diff --git a/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H b/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H index 103b3ea3bb531684ed48fc5fe74ac8ec588f4d99..b8ac5595e47cec77aa257c54a1710f91b08f20f7 100644 --- a/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H @@ -1,9 +1,10 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicRhoThermo> pThermo ( - basicThermo::New(mesh) + basicRhoThermo::New(mesh) ); + basicRhoThermo& thermo = pThermo(); volScalarField rho ( @@ -15,12 +16,12 @@ IOobject::NO_READ, IOobject::NO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - const volScalarField& psi = thermo->psi(); + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); Info<< "Reading field U\n" << endl; @@ -37,7 +38,7 @@ mesh ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" Info<< "Creating turbulence model\n" << endl; @@ -48,7 +49,7 @@ rho, U, phi, - thermo() + thermo ) ); @@ -59,27 +60,8 @@ fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p) ); - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - - dimensionedScalar pRef("pRef", p.dimensions(), thermo->lookup("pRef")); - - Info<< "Creating field pd\n" << endl; - volScalarField pd - ( - IOobject - ( - "pd", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - p = pd + rho*gh + pRef; - thermo->correct(); + thermo.correct(); dimensionedScalar initialMass = fvc::domainIntegrate(rho); + + dimensionedScalar totalVolume = sum(mesh.V()); diff --git a/applications/solvers/heatTransfer/buoyantPisoFoam/hEqn.H b/applications/solvers/heatTransfer/buoyantPisoFoam/hEqn.H index f1a87c6a798229100ff3493a194d73ccfdd601b9..3125cc3ffa86ce120e7dbbf774c9b46941105418 100644 --- a/applications/solvers/heatTransfer/buoyantPisoFoam/hEqn.H +++ b/applications/solvers/heatTransfer/buoyantPisoFoam/hEqn.H @@ -11,5 +11,5 @@ hEqn.relax(); hEqn.solve(); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/heatTransfer/buoyantPisoFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantPisoFoam/pEqn.H index 53f6688a6a8438f11c91816941e5d78b5bd47c14..c954c0ecb193a86033981bc7123725bc9335a9cc 100644 --- a/applications/solvers/heatTransfer/buoyantPisoFoam/pEqn.H +++ b/applications/solvers/heatTransfer/buoyantPisoFoam/pEqn.H @@ -1,7 +1,11 @@ { - bool closedVolume = pd.needReference(); + bool closedVolume = p.needReference(); - rho = thermo->rho(); + rho = thermo.rho(); + + // Thermodynamic density needs to be updated by psi*d(p) after the + // pressure solution - done in 2 parts. Part 1: + thermo.rho() -= psi*p; volScalarField rUA = 1.0/UEqn.A(); surfaceScalarField rhorUAf("(rho*(1|A(U)))", fvc::interpolate(rho*rUA)); @@ -17,38 +21,38 @@ ) ); - phi = phiU - ghf*fvc::snGrad(rho)*rhorUAf*mesh.magSf(); + phi = phiU + rhorUAf*fvc::interpolate(rho)*(g & mesh.Sf()); for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::ddt(psi, pd) - + fvc::ddt(psi)*pRef - + fvc::ddt(psi, rho)*gh + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + fvc::div(phi) - - fvm::laplacian(rhorUAf, pd) + - fvm::laplacian(rhorUAf, p) ); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi += pdEqn.flux(); + phi += pEqn.flux(); } } + // Second part of thermodynamic density update + thermo.rho() += psi*p; + U += rUA*fvc::reconstruct((phi - phiU)/rhorUAf); U.correctBoundaryConditions(); - p == pd + rho*gh + pRef; DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); #include "rhoEqn.H" @@ -58,10 +62,10 @@ // to obey overall mass continuity if (closedVolume) { - p += (initialMass - fvc::domainIntegrate(thermo->psi()*p)) - /fvc::domainIntegrate(thermo->psi()); - rho = thermo->rho(); + p += + (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); + thermo.rho() = psi*p; + rho += (initialMass - fvc::domainIntegrate(rho))/totalVolume; } - - pd == p - (rho*gh + pRef); } diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H index 71a57cd2a930c3affd56ba48b809e455d2a93e6c..aa476b4dc808f46619dd5c94fd9d8defaa10c55d 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/UEqn.H @@ -13,14 +13,11 @@ ( UEqn() == - -fvc::reconstruct + fvc::reconstruct ( - ( - fvc::snGrad(pd) - + ghf*fvc::snGrad(rho) - ) * mesh.magSf() + fvc::interpolate(rho)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() ) ).initialResidual(); maxResidual = max(eqnResidual, maxResidual); - diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C index d91b6398f27144233a20adab7983689e3d000c24..52f915bd7abe4b59a89aa7b30f1e40de0279e07c 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "RASModel.H" #include "fixedGradientFvPatchFields.H" @@ -39,15 +39,14 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -55,17 +54,17 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" -# include "initConvergenceCheck.H" + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" - pd.storePrevIter(); + p.storePrevIter(); rho.storePrevIter(); // Pressure-velocity SIMPLE corrector { -# include "UEqn.H" -# include "hEqn.H" -# include "pEqn.H" + #include "UEqn.H" + #include "hEqn.H" + #include "pEqn.H" } turbulence->correct(); @@ -76,7 +75,7 @@ int main(int argc, char *argv[]) << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; -# include "convergenceCheck.H" + #include "convergenceCheck.H" } Info<< "End\n" << endl; diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H index 879ee722b98ec4c6ab21ca66518c22fc31a9105c..b304ace1046bbb82fff0318762b17848835cce1d 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/createFields.H @@ -1,9 +1,10 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); volScalarField rho ( @@ -15,11 +16,12 @@ IOobject::NO_READ, IOobject::NO_WRITE ), - thermo->rho() + thermo.rho() ); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); Info<< "Reading field U\n" << endl; @@ -36,7 +38,7 @@ mesh ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" Info<< "Creating turbulence model\n" << endl; @@ -47,42 +49,20 @@ rho, U, phi, - thermo() + thermo ) ); - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); + thermo.correct(); - dimensionedScalar pRef("pRef", p.dimensions(), thermo->lookup("pRef")); - - Info<< "Creating field pd\n" << endl; - volScalarField pd - ( - IOobject - ( - "pd", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - p = pd + rho*gh + pRef; - thermo->correct(); - - - label pdRefCell = 0; - scalar pdRefValue = 0.0; + label pRefCell = 0; + scalar pRefValue = 0.0; setRefCell ( - pd, + p, mesh.solutionDict().subDict("SIMPLE"), - pdRefCell, - pdRefValue + pRefCell, + pRefValue ); diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/hEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/hEqn.H index dad078c2193a6797d2f08ed9751cdac4ca4ff157..0c507ce3d18bff29619626d62d5570c67e415cc2 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/hEqn.H +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/hEqn.H @@ -14,5 +14,5 @@ eqnResidual = hEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); - thermo->correct(); + thermo.correct(); } diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/initConvergenceCheck.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/initConvergenceCheck.H index b56197f22a50cfd07b04fc14d40b9a5454da8c5b..c920b6708d044d177227d79973ed61bc7f2658fc 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/initConvergenceCheck.H +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/initConvergenceCheck.H @@ -1,4 +1,4 @@ -// initialize values for convergence checks + // initialize values for convergence checks scalar eqnResidual = 1, maxResidual = 0; scalar convergenceCriterion = 0; diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H index 8d97ad9048a5a6e145d9fa0184629534df3a61e3..4bbb449df7250b144f84ac84ecaed6682c84be12 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/pEqn.H @@ -1,4 +1,6 @@ { + rho = thermo.rho(); + volScalarField rUA = 1.0/UEqn().A(); surfaceScalarField rhorUAf("(rho*(1|A(U)))", fvc::interpolate(rho*rUA)); @@ -7,60 +9,58 @@ phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf()); bool closedVolume = adjustPhi(phi, U, p); - surfaceScalarField buoyancyPhi = ghf*fvc::snGrad(rho)*rhorUAf*mesh.magSf(); - phi -= buoyancyPhi; + + surfaceScalarField buoyancyPhi = + rhorUAf*fvc::interpolate(rho)*(g & mesh.Sf()); + phi += buoyancyPhi; for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rhorUAf, pd) == fvc::div(phi) + fvm::laplacian(rhorUAf, p) == fvc::div(phi) ); - pdEqn.setReference(pdRefCell, pdRefValue); + pEqn.setReference(pRefCell, p[pRefCell]); // retain the residual from the first iteration if (nonOrth == 0) { - eqnResidual = pdEqn.solve().initialResidual(); + eqnResidual = pEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); } else { - pdEqn.solve(); + pEqn.solve(); } if (nonOrth == nNonOrthCorr) { + // For closed-volume cases adjust the pressure and density levels + // to obey overall mass continuity + if (closedVolume) + { + p += (initialMass - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); + } + // Calculate the conservative fluxes - phi -= pdEqn.flux(); + phi -= pEqn.flux(); // Explicitly relax pressure for momentum corrector - pd.relax(); + p.relax(); // Correct the momentum source with the pressure gradient flux // calculated from the relaxed pressure - U -= rUA*fvc::reconstruct((buoyancyPhi + pdEqn.flux())/rhorUAf); + U += rUA*fvc::reconstruct((buoyancyPhi - pEqn.flux())/rhorUAf); U.correctBoundaryConditions(); } } #include "continuityErrs.H" - p == pd + rho*gh + pRef; - - // For closed-volume cases adjust the pressure and density levels - // to obey overall mass continuity - if (closedVolume) - { - p += (initialMass - fvc::domainIntegrate(thermo->psi()*p)) - /fvc::domainIntegrate(thermo->psi()); - } - - rho = thermo->rho(); + rho = thermo.rho(); rho.relax(); Info<< "rho max/min : " << max(rho).value() << " " << min(rho).value() << endl; - - pd == p - (rho*gh + pRef); } diff --git a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C b/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C index 5996e6be23b5fe4d1845f46ea34965ada35422dd..c869eff89956a1b4e581fcdf6e1adf4643ecbfe4 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C +++ b/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "RASModel.H" #include "fixedGradientFvPatchFields.H" #include "radiationModel.H" @@ -41,16 +41,15 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "createRadiationModel.H" + #include "initContinuityErrs.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "createRadiationModel.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -58,17 +57,17 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" -# include "initConvergenceCheck.H" + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" - pd.storePrevIter(); + p.storePrevIter(); rho.storePrevIter(); // Pressure-velocity SIMPLE corrector { -# include "UEqn.H" -# include "hEqn.H" -# include "pEqn.H" + #include "UEqn.H" + #include "hEqn.H" + #include "pEqn.H" } turbulence->correct(); @@ -79,7 +78,7 @@ int main(int argc, char *argv[]) << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; -# include "convergenceCheck.H" + #include "convergenceCheck.H" } Info<< "End\n" << endl; diff --git a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/hEqn.H b/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/hEqn.H index 31462927b94bdd60bba71db3718e6d98a7e9defb..24b17645d2c3f62b38cdca9a4c7b908a8e08931f 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/hEqn.H +++ b/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/hEqn.H @@ -7,7 +7,7 @@ == fvc::div(phi/fvc::interpolate(rho)*fvc::interpolate(p)) - p*fvc::div(phi/fvc::interpolate(rho)) - + radiation->Sh(thermo()) + + radiation->Sh(thermo) ); hEqn.relax(); @@ -15,7 +15,7 @@ eqnResidual = hEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); - thermo->correct(); + thermo.correct(); radiation->correct(); } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files index 9d9152930a9c359695a4e969886336ce38466f62..9b95197f541bfa2b20797804bf04054db815eb9f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files @@ -1,10 +1,6 @@ regionProperties/regionProperties.C -coupleManager/coupleManager.C - derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C -derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.C -derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.C derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.C fluid/compressibleCourantNo.C diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options index a8797ca4564489292b11cf720b6ce80816a67192..12316d6bc7b7f06ed9d1f31316b9fd5c616d7e4e 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options @@ -2,9 +2,7 @@ EXE_INC = \ -Ifluid \ -Isolid \ -IregionProperties \ - -IcoupleManager \ - -IderivedFvPatchFields/solidWallTemperatureCoupled \ - -IderivedFvPatchFields/solidWallHeatFluxTemperatureCoupled \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index faff0edba042b2976c9fca21ec5fb09a0d8d6bca..54e1c8cb1840d4719b1f2f360a7ab3d4ba81b052 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" #include "fixedGradientFvPatchFields.H" #include "regionProperties.H" @@ -42,58 +42,72 @@ Description int main(int argc, char *argv[]) { - -# include "setRootCase.H" -# include "createTime.H" + #include "setRootCase.H" + #include "createTime.H" regionProperties rp(runTime); -# include "createFluidMeshes.H" -# include "createSolidMeshes.H" + #include "createFluidMeshes.H" + #include "createSolidMeshes.H" -# include "createFluidFields.H" -# include "createSolidFields.H" + #include "createFluidFields.H" + #include "createSolidFields.H" -# include "initContinuityErrs.H" + #include "initContinuityErrs.H" -# include "readTimeControls.H" + #include "readTimeControls.H" if (fluidRegions.size()) { -# include "compressibleMultiRegionCourantNo.H" -# include "setInitialDeltaT.H" + #include "compressibleMultiRegionCourantNo.H" + #include "setInitialDeltaT.H" } while (runTime.run()) { -# include "readTimeControls.H" + #include "readTimeControls.H" + #include "readPIMPLEControls.H" if (fluidRegions.size()) { -# include "compressibleMultiRegionCourantNo.H" -# include "setDeltaT.H" + #include "compressibleMultiRegionCourantNo.H" + #include "setDeltaT.H" } runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; - forAll(fluidRegions, i) + if (nOuterCorr != 1) { - Info<< "\nSolving for fluid region " - << fluidRegions[i].name() << endl; -# include "setRegionFluidFields.H" -# include "readFluidMultiRegionPISOControls.H" -# include "solveFluid.H" + forAll(fluidRegions, i) + { + #include "setRegionFluidFields.H" + #include "storeOldFluidFields.H" + } } - forAll(solidRegions, i) + + // --- PIMPLE loop + for (int oCorr=0; oCorr<nOuterCorr; oCorr++) { - Info<< "\nSolving for solid region " - << solidRegions[i].name() << endl; -# include "setRegionSolidFields.H" -# include "readSolidMultiRegionPISOControls.H" -# include "solveSolid.H" + forAll(fluidRegions, i) + { + Info<< "\nSolving for fluid region " + << fluidRegions[i].name() << endl; + #include "setRegionFluidFields.H" + #include "readFluidMultiRegionPIMPLEControls.H" + #include "solveFluid.H" + } + + forAll(solidRegions, i) + { + Info<< "\nSolving for solid region " + << solidRegions[i].name() << endl; + #include "setRegionSolidFields.H" + #include "readSolidMultiRegionPIMPLEControls.H" + #include "solveSolid.H" + } } runTime.write(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManager.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManager.C deleted file mode 100644 index 1668e1144c46f13024e37813296b96642fbcbc92..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManager.C +++ /dev/null @@ -1,186 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "coupleManager.H" -#include "OFstream.H" -#include "regionProperties.H" - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::coupleManager::coupleManager(const fvPatch& patch) -: - patch_(patch), - neighbourRegionName_("undefined-neighbourRegionName"), - neighbourPatchName_("undefined-neighbourPatchName"), - neighbourFieldName_("undefined-neighbourFieldName"), - localRegion_(patch_.boundaryMesh().mesh()) -{} - - -Foam::coupleManager::coupleManager -( - const fvPatch& patch, - const dictionary& dict -) -: - patch_(patch), - neighbourRegionName_(dict.lookup("neighbourRegionName")), - neighbourPatchName_(dict.lookup("neighbourPatchName")), - neighbourFieldName_(dict.lookup("neighbourFieldName")), - localRegion_(patch_.boundaryMesh().mesh()) -{} - - -Foam::coupleManager::coupleManager -( - const coupleManager& cm -) -: - patch_(cm.patch()), - neighbourRegionName_(cm.neighbourRegionName()), - neighbourPatchName_(cm.neighbourPatchName()), - neighbourFieldName_(cm.neighbourFieldName()), - localRegion_(patch_.boundaryMesh().mesh()) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::coupleManager::~coupleManager() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -bool Foam::coupleManager::regionOwner() const -{ - const fvMesh& nbrRegion = neighbourRegion(); - - const regionProperties& props = - localRegion_.objectRegistry::parent().lookupObject<regionProperties> - ( - "regionProperties" - ); - - label myIndex = findIndex(props.fluidRegionNames(), localRegion_.name()); - if (myIndex == -1) - { - label i = findIndex(props.solidRegionNames(), localRegion_.name()); - - if (i == -1) - { - FatalErrorIn("coupleManager::regionOwner() const") - << "Cannot find region " << localRegion_.name() - << " neither in fluids " << props.fluidRegionNames() - << " nor in solids " << props.solidRegionNames() - << exit(FatalError); - } - myIndex = props.fluidRegionNames().size() + i; - } - label nbrIndex = findIndex(props.fluidRegionNames(), nbrRegion.name()); - if (nbrIndex == -1) - { - label i = findIndex(props.solidRegionNames(), nbrRegion.name()); - - if (i == -1) - { - FatalErrorIn("coupleManager::regionOwner() const") - << "Cannot find region " << nbrRegion.name() - << " neither in fluids " << props.fluidRegionNames() - << " nor in solids " << props.solidRegionNames() - << exit(FatalError); - } - nbrIndex = props.fluidRegionNames().size() + i; - } - - return myIndex < nbrIndex; -} - - -void Foam::coupleManager::checkCouple() const -{ - Info<< "neighbourRegionName_ = " << neighbourRegionName_ << endl; - Info<< "neighbourPatchName_ = " << neighbourPatchName_ << endl; - Info<< "neighbourFieldName_ = " << neighbourFieldName_ << endl; - - const fvPatch& nPatch = neighbourPatch(); - - if (patch_.size() != nPatch.size()) - { - FatalErrorIn("Foam::coupleManager::checkCouple()") - << "Unequal patch sizes:" << nl - << " patch name (size) = " << patch_.name() - << "(" << patch_.size() << ")" << nl - << " neighbour patch name (size) = " - << nPatch.name() << "(" << patch_.size() << ")" << nl - << abort(FatalError); - } -} - - -void Foam::coupleManager::coupleToObj() const -{ - const fvPatch& nPatch = neighbourPatch(); - - OFstream obj - ( - patch_.name() + "_to_" + nPatch.name() + "_couple.obj" - ); - const vectorField& c1 = patch_.Cf(); - const vectorField& c2 = neighbourPatch().Cf(); - - if (c1.size() != c2.size()) - { - FatalErrorIn("coupleManager::coupleToObj() const") - << "Coupled patches are of unequal size:" << nl - << " patch0 = " << patch_.name() - << "(" << patch_.size() << ")" << nl - << " patch1 = " << nPatch.name() - << "(" << nPatch.size() << ")" << nl - << abort(FatalError); - } - - forAll(c1, i) - { - obj << "v " << c1[i].x() << " " << c1[i].y() << " " << c1[i].z() << nl - << "v " << c2[i].x() << " " << c2[i].y() << " " << c2[i].z() << nl - << "l " << (2*i + 1) << " " << (2*i + 2) << endl; - } -} - - -void Foam::coupleManager::writeEntries(Ostream& os) const -{ - os.writeKeyword("neighbourRegionName"); - os << neighbourRegionName_ << token::END_STATEMENT << nl; - os.writeKeyword("neighbourPatchName"); - os << neighbourPatchName_ << token::END_STATEMENT << nl; - os.writeKeyword("neighbourFieldName"); - os << neighbourFieldName_ << token::END_STATEMENT << nl; -} - - -// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManager.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManager.H deleted file mode 100644 index f1f73d23efe8505664cb5886dd3b37a5dc6727d2..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManager.H +++ /dev/null @@ -1,170 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - coupleManager - -Description - Object to handle the coupling of region patches. It can be queried to - return the neighbour information. - -SourceFiles - coupleManager.C - -\*---------------------------------------------------------------------------*/ - -#ifndef coupleManager_H -#define coupleManager_H - -#include "Ostream.H" -#include "dictionary.H" -#include "fvPatch.H" -#include "fvMesh.H" -#include "Time.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class coupleManager Declaration -\*---------------------------------------------------------------------------*/ - -class coupleManager -{ - // Private data - - //- Reference to the local fvPatch - const fvPatch& patch_; - - //- Name of neighbour region - word neighbourRegionName_; - - //- Name of patch on the neighbour region - word neighbourPatchName_; - - //- Name of field on the neighbour region - word neighbourFieldName_; - - //- Reference to the local region - const fvMesh& localRegion_; - - - // Private Member Functions - - //- Disallow default bitwise assignment - void operator=(const coupleManager&); - - -public: - - // Constructors - - //- Construct from fvPatch - coupleManager(const fvPatch& patch); - - //- Construct from fvPatch and dictionary - coupleManager(const fvPatch& patch, const dictionary& dict); - - //- Copy constructor - coupleManager(const coupleManager& cm); - - - // Destructor - - ~coupleManager(); - - - // Member Functions - - // Access - - //- Return a reference to the local patch - inline const fvPatch& patch() const; - - //- Return the name of the neighbour region - inline const word& neighbourRegionName() const; - - //- Return the name of the patch on the neighbour region - inline const word& neighbourPatchName() const; - - //- Return the name of the field on the neighbour region - inline const word& neighbourFieldName() const; - - //- Return a reference to the neighbour mesh - inline const fvMesh& neighbourRegion() const; - - //- Return the neighbour patch ID - inline label neighbourPatchID() const; - - //- Return a reference to the neighbour patch - inline const fvPatch& neighbourPatch() const; - - //- Return a reference to the neighbour patch field - template<class Type> - inline const fvPatchField<Type>& neighbourPatchField() const; - - //- Am I owner (= first to evaluate) of this region interface? - bool regionOwner() const; - - //- Check that the couple is valid - void checkCouple() const; - - - // Edit - - //- Return the name of the neighbour region - word& neighbourRegionName(); - - //- Return the name of the patch on the neighbour region - word& neighbourPatchName(); - - //- Return the name of the field on the neighbour region - word& neighbourFieldName(); - - - // Write - - //- Write couple to obj file - void coupleToObj() const; - - //- Write entries for patches - void writeEntries(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "coupleManagerI.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManagerI.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManagerI.H deleted file mode 100644 index 45e059ebae27d425e90403927352f7f36c5e8cde..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/coupleManager/coupleManagerI.H +++ /dev/null @@ -1,98 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -inline const Foam::fvPatch& Foam::coupleManager::patch() const -{ - return patch_; -}; - - -inline const Foam::word& Foam::coupleManager::neighbourRegionName() const -{ - return neighbourRegionName_; -}; - - -inline const Foam::word& Foam::coupleManager::neighbourPatchName() const -{ - return neighbourPatchName_; -}; - - -inline const Foam::word& Foam::coupleManager::neighbourFieldName() const -{ - return neighbourFieldName_; -}; - - -inline const Foam::fvMesh& Foam::coupleManager::neighbourRegion() const -{ - return localRegion_.objectRegistry::parent() - .lookupObject<fvMesh>(neighbourRegionName_); -} - - -inline Foam::label Foam::coupleManager::neighbourPatchID() const -{ - return neighbourRegion().boundaryMesh().findPatchID(neighbourPatchName_); -} - - -inline const Foam::fvPatch& Foam::coupleManager::neighbourPatch() const -{ - return neighbourRegion().boundary()[neighbourPatchID()]; -} - - -template<class Type> -inline const Foam::fvPatchField<Type>& -Foam::coupleManager::neighbourPatchField() const -{ - return neighbourPatch().lookupPatchField - <GeometricField<Type, fvPatchField, volMesh>, Type> - (neighbourFieldName_); -} - - -inline Foam::word& Foam::coupleManager::neighbourRegionName() -{ - return neighbourRegionName_; -}; - - -inline Foam::word& Foam::coupleManager::neighbourPatchName() -{ - return neighbourPatchName_; -}; - - -inline Foam::word& Foam::coupleManager::neighbourFieldName() -{ - return neighbourFieldName_; -}; - - -// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.C deleted file mode 100644 index 07bcac29a683edc4dcb95805f63df358f7613d77..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.C +++ /dev/null @@ -1,150 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "solidWallHeatFluxTemperatureCoupledFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" - -#include "solidWallTemperatureCoupledFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::solidWallHeatFluxTemperatureCoupledFvPatchScalarField:: -solidWallHeatFluxTemperatureCoupledFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedGradientFvPatchScalarField(p, iF), - coupleManager_(p), - KName_("undefined-K") -{} - - -Foam::solidWallHeatFluxTemperatureCoupledFvPatchScalarField:: -solidWallHeatFluxTemperatureCoupledFvPatchScalarField -( - const solidWallHeatFluxTemperatureCoupledFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedGradientFvPatchScalarField(ptf, p, iF, mapper), - coupleManager_(ptf.coupleManager_), - KName_(ptf.KName_) -{} - - -Foam::solidWallHeatFluxTemperatureCoupledFvPatchScalarField:: -solidWallHeatFluxTemperatureCoupledFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedGradientFvPatchScalarField(p, iF), - coupleManager_(p, dict), - KName_(dict.lookup("K")) -{ - if (dict.found("value")) - { - fvPatchField<scalar>::operator= - ( - scalarField("value", dict, p.size()) - ); - } - else - { - evaluate(); - } -} - - -Foam::solidWallHeatFluxTemperatureCoupledFvPatchScalarField:: -solidWallHeatFluxTemperatureCoupledFvPatchScalarField -( - const solidWallHeatFluxTemperatureCoupledFvPatchScalarField& whftcsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedGradientFvPatchScalarField(whftcsf, iF), - coupleManager_(whftcsf.coupleManager_), - KName_(whftcsf.KName_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::solidWallHeatFluxTemperatureCoupledFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const fvPatchField<scalar>& neighbourField = - coupleManager_.neighbourPatchField<scalar>(); - - const fvPatchField<scalar>& K = - patch().lookupPatchField<volScalarField, scalar>(KName_); - - gradient() = -refCast<const solidWallTemperatureCoupledFvPatchScalarField> - (neighbourField).flux()/K; - - fixedGradientFvPatchScalarField::updateCoeffs(); -} - - -void Foam::solidWallHeatFluxTemperatureCoupledFvPatchScalarField::write -( - Ostream& os -) const -{ - fvPatchScalarField::write(os); - coupleManager_.writeEntries(os); - os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -makePatchTypeField -( - fvPatchScalarField, - solidWallHeatFluxTemperatureCoupledFvPatchScalarField -); - -} // End namespace Foam - -// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.H deleted file mode 100644 index b7867ca8ce4a125415906382d43c43cedb916339..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallHeatFluxTemperatureCoupled/solidWallHeatFluxTemperatureCoupledFvPatchScalarField.H +++ /dev/null @@ -1,165 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - solidWallHeatFluxTemperatureCoupledFvPatchScalarField - -Description - Fixed heat-flux boundary condition for temperature, to be used by the - conjugate heat transfer solver. - - Example usage: - myInterfacePatchName - { - type solidWallHeatFluxTemperatureCoupled; - neighbourRegionName fluid; - neighbourPatchName fluidSolidInterface; - neighbourFieldName T; - K K; - value uniform 300; - } - -SourceFiles - solidWallHeatFluxTemperatureCoupledFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef solidWallHeatFluxTemperatureCoupledFvPatchScalarField_H -#define solidWallHeatFluxTemperatureCoupledFvPatchScalarField_H - -#include "fvPatchFields.H" -#include "fixedGradientFvPatchFields.H" -#include "coupleManager.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class solidWallHeatFluxTemperatureCoupledFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class solidWallHeatFluxTemperatureCoupledFvPatchScalarField -: - public fixedGradientFvPatchScalarField -{ - // Private data - - //- Couple manager object - coupleManager coupleManager_; - - //- Name of thermal conductivity field - word KName_; - - -public: - - //- Runtime type information - TypeName("solidWallHeatFluxTemperatureCoupled"); - - - // Constructors - - //- Construct from patch and internal field - solidWallHeatFluxTemperatureCoupledFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - solidWallHeatFluxTemperatureCoupledFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // solidWallHeatFluxTemperatureCoupledFvPatchScalarField - // onto a new patch - solidWallHeatFluxTemperatureCoupledFvPatchScalarField - ( - const solidWallHeatFluxTemperatureCoupledFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new solidWallHeatFluxTemperatureCoupledFvPatchScalarField - ( - *this - ) - ); - } - - //- Construct as copy setting internal field reference - solidWallHeatFluxTemperatureCoupledFvPatchScalarField - ( - const solidWallHeatFluxTemperatureCoupledFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new solidWallHeatFluxTemperatureCoupledFvPatchScalarField - ( - *this, - iF - ) - ); - } - - - // Member functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.C index b6bcfffa3f63f947ec0a84734b12df7ff39893a4..5bec5673108e4cd0c0684e041b6443f769c0ff55 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.C @@ -28,8 +28,62 @@ License #include "addToRunTimeSelectionTable.H" #include "fvPatchFieldMapper.H" #include "volFields.H" +#include "directMappedPatchBase.H" #include "regionProperties.H" +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +bool Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::interfaceOwner +( + const polyMesh& nbrRegion +) const +{ + const fvMesh& myRegion = patch().boundaryMesh().mesh(); + + const regionProperties& props = + myRegion.objectRegistry::parent().lookupObject<regionProperties> + ( + "regionProperties" + ); + + label myIndex = findIndex(props.fluidRegionNames(), myRegion.name()); + if (myIndex == -1) + { + label i = findIndex(props.solidRegionNames(), myRegion.name()); + + if (i == -1) + { + FatalErrorIn + ( + "solidWallMixedTemperatureCoupledFvPatchScalarField" + "::interfaceOwner(const polyMesh&) const" + ) << "Cannot find region " << myRegion.name() + << " neither in fluids " << props.fluidRegionNames() + << " nor in solids " << props.solidRegionNames() + << exit(FatalError); + } + myIndex = props.fluidRegionNames().size() + i; + } + label nbrIndex = findIndex(props.fluidRegionNames(), nbrRegion.name()); + if (nbrIndex == -1) + { + label i = findIndex(props.solidRegionNames(), nbrRegion.name()); + + if (i == -1) + { + FatalErrorIn("coupleManager::interfaceOwner(const polyMesh&) const") + << "Cannot find region " << nbrRegion.name() + << " neither in fluids " << props.fluidRegionNames() + << " nor in solids " << props.solidRegionNames() + << exit(FatalError); + } + nbrIndex = props.fluidRegionNames().size() + i; + } + + return myIndex < nbrIndex; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::solidWallMixedTemperatureCoupledFvPatchScalarField:: @@ -40,7 +94,7 @@ solidWallMixedTemperatureCoupledFvPatchScalarField ) : mixedFvPatchScalarField(p, iF), - coupleManager_(p), + neighbourFieldName_("undefined-neighbourFieldName"), KName_("undefined-K") { this->refValue() = 0.0; @@ -60,7 +114,7 @@ solidWallMixedTemperatureCoupledFvPatchScalarField ) : mixedFvPatchScalarField(ptf, p, iF, mapper), - coupleManager_(ptf.coupleManager_), + neighbourFieldName_(ptf.neighbourFieldName_), KName_(ptf.KName_), fixesValue_(ptf.fixesValue_) {} @@ -75,14 +129,46 @@ solidWallMixedTemperatureCoupledFvPatchScalarField ) : mixedFvPatchScalarField(p, iF), - coupleManager_(p, dict), + neighbourFieldName_(dict.lookup("neighbourFieldName")), KName_(dict.lookup("K")) { + if (!isA<directMappedPatchBase>(this->patch().patch())) + { + FatalErrorIn + ( + "solidWallMixedTemperatureCoupledFvPatchScalarField::" + "solidWallMixedTemperatureCoupledFvPatchScalarField\n" + "(\n" + " const fvPatch& p,\n" + " const DimensionedField<scalar, volMesh>& iF,\n" + " const dictionary& dict\n" + ")\n" + ) << "\n patch type '" << p.type() + << "' not type '" << directMappedPatchBase::typeName << "'" + << "\n for patch " << p.name() + << " of field " << dimensionedInternalField().name() + << " in file " << dimensionedInternalField().objectPath() + << exit(FatalError); + } + fvPatchScalarField::operator=(scalarField("value", dict, p.size())); - refValue() = static_cast<scalarField>(*this); - refGrad() = 0.0; - valueFraction() = 1.0; - fixesValue_ = true; + + if (dict.found("refValue")) + { + // Full restart + refValue() = scalarField("refValue", dict, p.size()); + refGrad() = scalarField("refGradient", dict, p.size()); + valueFraction() = scalarField("valueFraction", dict, p.size()); + fixesValue_ = readBool(dict.lookup("fixesValue")); + } + else + { + // Start from user entered data. Assume fixedValue. + refValue() = *this; + refGrad() = 0.0; + valueFraction() = 1.0; + fixesValue_ = true; + } } @@ -94,7 +180,7 @@ solidWallMixedTemperatureCoupledFvPatchScalarField ) : mixedFvPatchScalarField(wtcsf, iF), - coupleManager_(wtcsf.coupleManager_), + neighbourFieldName_(wtcsf.neighbourFieldName_), KName_(wtcsf.KName_), fixesValue_(wtcsf.fixesValue_) {} @@ -116,33 +202,111 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs() return; } + // Get the coupling information from the directMappedPatchBase + const directMappedPatchBase& mpp = refCast<const directMappedPatchBase> + ( + patch().patch() + ); + const polyMesh& nbrMesh = mpp.sampleMesh(); + tmp<scalarField> intFld = patchInternalField(); + if (interfaceOwner(nbrMesh)) + { + // Note: other side information could be cached - it only needs + // to be updated the first time round the iteration (i.e. when + // switching regions) but unfortunately we don't have this information. + + const mapDistribute& distMap = mpp.map(); + const fvPatch& nbrPatch = refCast<const fvMesh> + ( + nbrMesh + ).boundary()[mpp.samplePolyPatch().index()]; + + + // Calculate the temperature by harmonic averaging + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + const solidWallMixedTemperatureCoupledFvPatchScalarField& nbrField = + refCast<const solidWallMixedTemperatureCoupledFvPatchScalarField> + ( + nbrPatch.lookupPatchField<volScalarField, scalar> + ( + neighbourFieldName_ + ) + ); + + // Swap to obtain full local values of neighbour internal field + scalarField nbrIntFld = nbrField.patchInternalField(); + mapDistribute::distribute + ( + Pstream::defaultCommsType, + distMap.schedule(), + distMap.constructSize(), + distMap.subMap(), // what to send + distMap.constructMap(), // what to receive + nbrIntFld + ); + + // Swap to obtain full local values of neighbour K*delta + scalarField nbrKDelta = nbrField.K()*nbrPatch.deltaCoeffs(); + mapDistribute::distribute + ( + Pstream::defaultCommsType, + distMap.schedule(), + distMap.constructSize(), + distMap.subMap(), // what to send + distMap.constructMap(), // what to receive + nbrKDelta + ); + + + tmp<scalarField> myKDelta = K()*patch().deltaCoeffs(); + + // Calculate common wall temperature. Reuse *this to store common value. + scalarField Twall + ( + (myKDelta()*intFld() + nbrKDelta*nbrIntFld) + / (myKDelta() + nbrKDelta) + ); + // Assign to me + fvPatchScalarField::operator=(Twall); + // Distribute back and assign to neighbour + mapDistribute::distribute + ( + Pstream::defaultCommsType, + distMap.schedule(), + nbrField.size(), + distMap.constructMap(), // reverse : what to send + distMap.subMap(), + Twall + ); + const_cast<solidWallMixedTemperatureCoupledFvPatchScalarField&> + ( + nbrField + ).fvPatchScalarField::operator=(Twall); + } + + + // Switch between fixed value (of harmonic avg) or gradient + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + label nFixed = 0; // Like snGrad but bypass switching on refValue/refGrad. - tmp<scalarField> normalGradient = - (*this-intFld()) - * patch().deltaCoeffs(); + tmp<scalarField> normalGradient = (*this-intFld())*patch().deltaCoeffs(); if (debug) { + scalar Q = gSum(K()*patch().magSf()*normalGradient()); + Info<< "solidWallMixedTemperatureCoupledFvPatchScalarField::" << "updateCoeffs() :" << " patch:" << patch().name() + << " heatFlux:" << Q << " walltemperature " - << " min:" - << returnReduce - ( - (this->size() > 0 ? min(*this) : VGREAT), - minOp<scalar>() - ) - << " max:" - << returnReduce - ( - (this->size() > 0 ? max(*this) : -VGREAT), - maxOp<scalar>() - ) + << " min:" << gMin(*this) + << " max:" << gMax(*this) << " avg:" << gAverage(*this) << endl; } @@ -150,7 +314,7 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs() forAll(*this, i) { // if outgoing flux use fixed value. - if (intFld()[i] > operator[](i)) + if (normalGradient()[i] < 0.0) { this->refValue()[i] = operator[](i); this->refGrad()[i] = 0.0; // not used @@ -185,80 +349,16 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs() } -void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::evaluate -( - const Pstream::commsTypes -) -{ - if (!this->updated()) - { - this->updateCoeffs(); - } - - if (!coupleManager_.regionOwner()) - { - // I am the last one to evaluate. - - tmp<scalarField> intFld = patchInternalField(); - - const fvPatch& nbrPatch = coupleManager_.neighbourPatch(); - - solidWallMixedTemperatureCoupledFvPatchScalarField& nbrField = - refCast<solidWallMixedTemperatureCoupledFvPatchScalarField> - ( - const_cast<fvPatchField<scalar>&> - ( - coupleManager_.neighbourPatchField<scalar>() - ) - ); - tmp<scalarField> nbrIntFld = nbrField.patchInternalField(); - tmp<scalarField> myKDelta = K()*patch().deltaCoeffs(); - tmp<scalarField> nbrKDelta = nbrField.K()*nbrPatch.deltaCoeffs(); - - // Calculate common wall temperature and assign to both sides - scalarField::operator= - ( - (myKDelta()*intFld + nbrKDelta()*nbrIntFld) - / (myKDelta() + nbrKDelta()) - ); - - nbrField.scalarField::operator=(*this); - - if (debug) - { - Info<< "solidWallMixedTemperatureCoupledFvPatchScalarField::" - << "updateCoeffs() :" - << " patch:" << patch().name() - << " setting master and slave to wall temperature " - << " min:" - << returnReduce - ( - (this->size() > 0 ? min(*this) : VGREAT), - minOp<scalar>() - ) - << " max:" - << returnReduce - ( - (this->size() > 0 ? max(*this) : -VGREAT), - maxOp<scalar>() - ) - << " avg:" << gAverage(*this) - << endl; - } - } - - fvPatchScalarField::evaluate(); -} - - void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::write ( Ostream& os ) const { mixedFvPatchScalarField::write(os); - coupleManager_.writeEntries(os); + os.writeKeyword("neighbourFieldName")<< neighbourFieldName_ + << token::END_STATEMENT << nl; os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; + os.writeKeyword("fixesValue") << fixesValue_ << token::END_STATEMENT << nl; } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.H index 34c32b1abf4204864d1cc7268ecf3e5874a25d36..f4abacf648aad7283f04baa44b8ad29f856a54db 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.H @@ -37,13 +37,22 @@ Description myInterfacePatchName { type solidWallMixedTemperatureCoupled; - neighbourRegionName fluid; - neighbourPatchName fluidSolidInterface; neighbourFieldName T; K K; value uniform 300; } + Needs to be on underlying directMapped(Wall)FvPatch. + + Note: runs in parallel with arbitrary decomposition. Uses directMapped + functionality to calculate exchange. + + Note: lags interface data so both sides use same data. + - problem: schedule to calculate average would interfere + with standard processor swaps. + - so: updateCoeffs sets both to same Twall. Only need to do + this for last outer iteration but don't have access to this. + SourceFiles solidWallMixedTemperatureCoupledFvPatchScalarField.C @@ -54,7 +63,6 @@ SourceFiles #include "fvPatchFields.H" #include "mixedFvPatchFields.H" -#include "coupleManager.H" #include "fvPatch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -72,14 +80,21 @@ class solidWallMixedTemperatureCoupledFvPatchScalarField { // Private data - //- Couple manager object - coupleManager coupleManager_; - + //- Name of field on the neighbour region + const word neighbourFieldName_; + //- Name of thermal conductivity field - word KName_; + const word KName_; bool fixesValue_; + + // Private Member Functions + + //- Am I or neighbour owner of interface + bool interfaceOwner(const polyMesh& nbrRegion) const; + + public: //- Runtime type information @@ -162,12 +177,6 @@ public: //- Update the coefficients associated with the patch field virtual void updateCoeffs(); - //- Evaluate the patch field - virtual void evaluate - ( - const Pstream::commsTypes commsType=Pstream::blocking - ); - //- Write virtual void write(Ostream&) const; }; diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.H deleted file mode 100644 index 22fd168175134eb812ac447caac3d397dee21df3..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.H +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - solidWallHeatFluxCoupledFvPatchScalarField - -Description - Fixed value boundary condition for temperature, to be used by the - conjugate heat transfer solver. - - Example usage: - myInterfacePatchName - { - type solidWallTemperatureCoupled; - neighbourRegionName fluid; - neighbourPatchName fluidSolidInterface; - neighbourFieldName T; - K K; - value uniform 300; - } - -SourceFiles - solidWallTemperatureCoupledFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef solidWallTemperatureCoupledFvPatchScalarField_H -#define solidWallTemperatureCoupledFvPatchScalarField_H - -#include "fvPatchFields.H" -#include "fixedValueFvPatchFields.H" -#include "coupleManager.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class solidWallTemperatureCoupledFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class solidWallTemperatureCoupledFvPatchScalarField -: - public fixedValueFvPatchScalarField -{ - // Private data - - //- Couple manager object - coupleManager coupleManager_; - - //- Name of thermal conductivity field - word KName_; - - -public: - - //- Runtime type information - TypeName("solidWallTemperatureCoupled"); - - - // Constructors - - //- Construct from patch and internal field - solidWallTemperatureCoupledFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - solidWallTemperatureCoupledFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given solidWallTemperatureCoupledFvPatchScalarField - // onto a new patch - solidWallTemperatureCoupledFvPatchScalarField - ( - const solidWallTemperatureCoupledFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new solidWallTemperatureCoupledFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - solidWallTemperatureCoupledFvPatchScalarField - ( - const solidWallTemperatureCoupledFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new solidWallTemperatureCoupledFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - //- (intensive) flux - tmp<scalarField> flux() const; - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/UEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/UEqn.H index e719d92433926797b7850dc356ade232228ba502..65467f80864609f9225e9d058b9568890c500988 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/UEqn.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/UEqn.H @@ -14,12 +14,10 @@ ( UEqn() == - -fvc::reconstruct + fvc::reconstruct ( - ( - fvc::snGrad(pd) - + ghf*fvc::snGrad(rho) - ) * mesh.magSf() + fvc::interpolate(rho)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() ) ); } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H index 1f6e50de0a3872b76c239e920f054d5e1cb54ea2..7aa01dee7939de0bf5ce3595f0cefc73a5d7653f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/createFluidFields.H @@ -1,53 +1,25 @@ // Initialise fluid field pointer lists - PtrList<basicThermo> thermoFluid(fluidRegions.size()); + PtrList<basicPsiThermo> thermoFluid(fluidRegions.size()); PtrList<volScalarField> rhoFluid(fluidRegions.size()); PtrList<volScalarField> KFluid(fluidRegions.size()); PtrList<volVectorField> UFluid(fluidRegions.size()); PtrList<surfaceScalarField> phiFluid(fluidRegions.size()); PtrList<compressible::turbulenceModel> turbulence(fluidRegions.size()); PtrList<volScalarField> DpDtFluid(fluidRegions.size()); - PtrList<volScalarField> ghFluid(fluidRegions.size()); - PtrList<surfaceScalarField> ghfFluid(fluidRegions.size()); - PtrList<volScalarField> pdFluid(fluidRegions.size()); List<scalar> initialMassFluid(fluidRegions.size()); - dimensionedScalar pRef - ( - "pRef", - dimensionSet(1, -1, -2, 0, 0), - rp.lookup("pRef") - ); - // Populate fluid field pointer lists forAll(fluidRegions, i) { Info<< "*** Reading fluid mesh thermophysical properties for region " << fluidRegions[i].name() << nl << endl; - Info<< " Adding to pdFluid\n" << endl; - pdFluid.set - ( - i, - new volScalarField - ( - IOobject - ( - "pd", - runTime.timeName(), - fluidRegions[i], - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - fluidRegions[i] - ) - ); - Info<< " Adding to thermoFluid\n" << endl; thermoFluid.set ( i, - basicThermo::New(fluidRegions[i]).ptr() + basicPsiThermo::New(fluidRegions[i]).ptr() ); Info<< " Adding to rhoFluid\n" << endl; @@ -145,6 +117,7 @@ i, new volScalarField ( + "DpDt", fvc::DDt ( surfaceScalarField @@ -157,36 +130,5 @@ ) ); - const dictionary& environmentalProperties = - fluidRegions[i].lookupObject<IOdictionary> - ("environmentalProperties"); - dimensionedVector g(environmentalProperties.lookup("g")); - - Info<< " Adding to ghFluid\n" << endl; - ghFluid.set - ( - i, - new volScalarField - ( - "gh", - g & fluidRegions[i].C() - ) - ); - ghfFluid.set - ( - i, - new surfaceScalarField - ( - "ghf", - g & fluidRegions[i].Cf() - ) - ); - - Info<< " Updating p from pd\n" << endl; - thermoFluid[i].p() == pdFluid[i] + rhoFluid[i]*ghFluid[i] + pRef; - thermoFluid[i].correct(); - initialMassFluid[i] = fvc::domainIntegrate(rhoFluid[i]).value(); } - - diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/hEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/hEqn.H index 7f2202d5937d4e17ab988aef292979339269aabb..e070537db2c701e27baafd6cf64ef015e3898100 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/hEqn.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/hEqn.H @@ -1,5 +1,5 @@ { - tmp<fvScalarMatrix> hEqn + fvScalarMatrix hEqn ( fvm::ddt(rho, h) + fvm::div(phi, h) @@ -7,8 +7,16 @@ == DpDt ); - hEqn().relax(); - hEqn().solve(); + if (oCorr == nOuterCorr-1) + { + hEqn.relax(); + hEqn.solve(mesh.solver("hFinal")); + } + else + { + hEqn.relax(); + hEqn.solve(); + } thermo.correct(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H index e297989809aaa930b9c0be00e3049842869e44aa..a264b68fe5eab2388d38ca1aaf75a3f416db2330 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/pEqn.H @@ -1,5 +1,5 @@ { - bool closedVolume = pd.needReference(); + bool closedVolume = p.needReference(); rho = thermo.rho(); @@ -17,31 +17,34 @@ ) ); - phi = phiU - ghf*fvc::snGrad(rho)*rhorUAf*mesh.magSf(); + phi = phiU + fvc::interpolate(rho)*(g & mesh.Sf())*rhorUAf; for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::ddt(psi, pd) - + fvc::ddt(psi)*pRef - + fvc::ddt(psi, rho)*gh + fvm::ddt(psi, p) + fvc::div(phi) - - fvm::laplacian(rho*rUA, pd) + - fvm::laplacian(rhorUAf, p) ); - if (corr == nCorr-1 && nonOrth == nNonOrthCorr) + if + ( + oCorr == nOuterCorr-1 + && corr == nCorr-1 + && nonOrth == nNonOrthCorr + ) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi += pdEqn.flux(); + phi += pEqn.flux(); } } @@ -49,27 +52,24 @@ U += rUA*fvc::reconstruct((phi - phiU)/rhorUAf); U.correctBoundaryConditions(); - // Update pressure field (including bc) - p == pd + rho*gh + pRef; + // Update pressure substantive derivative DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); // Solve continuity -# include "rhoEqn.H" + #include "rhoEqn.H" // Update continuity errors -# include "compressibleContinuityErrors.H" + #include "compressibleContinuityErrors.H" // For closed-volume cases adjust the pressure and density levels // to obey overall mass continuity if (closedVolume) { - p += (massIni - fvc::domainIntegrate(psi*p))/fvc::domainIntegrate(psi); + p += (massIni - fvc::domainIntegrate(psi*p)) + /fvc::domainIntegrate(psi); rho = thermo.rho(); } // Update thermal conductivity K = thermoFluid[i].Cp()*turb.alphaEff(); - - // Update pd (including bc) - pd == p - (rho*gh + pRef); } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H new file mode 100644 index 0000000000000000000000000000000000000000..413c0225f0a34a82b3af1751011d7e8af7b935ba --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H @@ -0,0 +1,9 @@ + const dictionary& pimple = mesh.solutionDict().subDict("PIMPLE"); + + int nCorr(readInt(pimple.lookup("nCorrectors"))); + + int nNonOrthCorr = + pimple.lookupOrDefault<int>("nNonOrthogonalCorrectors", 0); + + bool momentumPredictor = + pimple.lookupOrDefault<Switch>("momentumPredictor", true); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/rhoEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/rhoEqn.H deleted file mode 100644 index a6b0ac9fe1c0c27d1f2479f27ab3715c87537cd9..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/rhoEqn.H +++ /dev/null @@ -1 +0,0 @@ - solve(fvm::ddt(rho) + fvc::div(phi)); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H index 35a64418a8c6cbd1d488970f1d665420a2f752b6..29aea044664c8a7c2045525c5e94d94e0c0b1e48 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H @@ -1,18 +1,21 @@ const fvMesh& mesh = fluidRegions[i]; - basicThermo& thermo = thermoFluid[i]; + basicPsiThermo& thermo = thermoFluid[i]; volScalarField& rho = rhoFluid[i]; volScalarField& K = KFluid[i]; volVectorField& U = UFluid[i]; surfaceScalarField& phi = phiFluid[i]; compressible::turbulenceModel& turb = turbulence[i]; volScalarField& DpDt = DpDtFluid[i]; - const volScalarField& gh = ghFluid[i]; - const surfaceScalarField& ghf = ghfFluid[i]; - volScalarField& pd = pdFluid[i]; volScalarField& p = thermo.p(); const volScalarField& psi = thermo.psi(); volScalarField& h = thermo.h(); const dimensionedScalar massIni("massIni", dimMass, initialMassFluid[i]); + + const dictionary& environmentalProperties = + fluidRegions[i].lookupObject<IOdictionary> + ("environmentalProperties"); + + const dimensionedVector g(environmentalProperties.lookup("g")); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/solveFluid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/solveFluid.H index 19ec50cac253986322e9155df1c2bcc0d7632c4a..86dd4344c15310f219bfb9bda406b22f2ffe7585 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/solveFluid.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/solveFluid.H @@ -1,15 +1,18 @@ -# include "rhoEqn.H" - for (int ocorr=0; ocorr<nOuterCorr; ocorr++) - { - # include "UEqn.H" +if (oCorr == 0) +{ + #include "rhoEqn.H" +} - # include "hEqn.H" +#include "UEqn.H" - // --- PISO loop +#include "hEqn.H" - for (int corr=0; corr<nCorr; corr++) - { - # include "pEqn.H" - } - } - turb.correct(); +// --- PISO loop +for (int corr=0; corr<nCorr; corr++) +{ + #include "pEqn.H" +} + +turb.correct(); + +rho = thermo.rho(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/storeOldFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/storeOldFluidFields.H new file mode 100644 index 0000000000000000000000000000000000000000..f63e85458e25253209094f92995e0c3c91858fc5 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/storeOldFluidFields.H @@ -0,0 +1,2 @@ + p.storePrevIter(); + rho.storePrevIter(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/readPIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/readPIMPLEControls.H new file mode 100644 index 0000000000000000000000000000000000000000..42793d9b9fdb82a890b5994673f07ade7745a659 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/readPIMPLEControls.H @@ -0,0 +1,7 @@ + // We do not have a top-level mesh. Construct the fvSolution for + // the runTime instead. + fvSolution solutionDict(runTime); + + const dictionary& pimple = solutionDict.subDict("PIMPLE"); + + int nOuterCorr(readInt(pimple.lookup("nOuterCorrectors"))); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPIMPLEControls.H new file mode 100644 index 0000000000000000000000000000000000000000..e23883c5fae11f298e0459feaacacc4c73af8dbe --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPIMPLEControls.H @@ -0,0 +1,4 @@ + const dictionary& pimple = mesh.solutionDict().subDict("PIMPLE"); + + int nNonOrthCorr = + pimple.lookupOrDefault<int>("nNonOrthogonalCorrectors", 0); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPISOControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPISOControls.H index 6373e79d49c0869238a30a138aef81a7af905d05..ce6a1c5bb2626f82eb411bc20b4f57b64e3271ff 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPISOControls.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/readSolidMultiRegionPISOControls.H @@ -1,4 +1,4 @@ - dictionary piso = solidRegions[i].solutionDict().subDict("PISO"); + const dictionary& piso = solidRegions[i].solutionDict().subDict("PISO"); int nNonOrthCorr = 0; if (piso.found("nNonOrthogonalCorrectors")) diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H index 04c90d2c4c108f479145e86e64c980f7d6296cba..f9e80e3d72385e7f6ae80107cc3b65921904c35f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H @@ -1,4 +1,4 @@ -// fvMesh& mesh = solidRegions[i]; + fvMesh& mesh = solidRegions[i]; volScalarField& rho = rhos[i]; volScalarField& cp = cps[i]; diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H index 5fa731824f375adfeb3e2175f280de55da5cd4b2..ce8b1d0f408d4ec033f88c37846a8c7ab80e61b0 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H @@ -1,10 +1,13 @@ { for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - solve + tmp<fvScalarMatrix> TEqn ( - fvm::ddt(rho*cp, T) - fvm::laplacian(K, T) + fvm::ddt(rho*cp, T) + - fvm::laplacian(K, T) ); + TEqn().relax(); + TEqn().solve(); } Info<< "Min/max T:" << min(T) << ' ' << max(T) << endl; diff --git a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C index ab10aab8d47e9359e9ca395e28d2315aef190f62..2ee69c120e09b41acb0edb4f9e8f6a736cd0d783 100644 --- a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C +++ b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C @@ -47,14 +47,13 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; diff --git a/applications/solvers/incompressible/channelFoam/readTransportProperties.H b/applications/solvers/incompressible/channelFoam/readTransportProperties.H index c99d0ae4b5b97f4ed18765efe9a69103ba08e2c3..87c93c9195880f243c7ac035020345c283fd2450 100644 --- a/applications/solvers/incompressible/channelFoam/readTransportProperties.H +++ b/applications/solvers/incompressible/channelFoam/readTransportProperties.H @@ -7,7 +7,8 @@ runTime.constant(), mesh, IOobject::MUST_READ, - IOobject::NO_WRITE + IOobject::NO_WRITE, + false ) ); diff --git a/applications/solvers/incompressible/icoFoam/icoFoam.C b/applications/solvers/incompressible/icoFoam/icoFoam.C index 9ac6bd4fa6fcacb849ab033471623d499e978b52..fef690f831a08a6db3da3c936caa96c35ac5c445 100644 --- a/applications/solvers/incompressible/icoFoam/icoFoam.C +++ b/applications/solvers/incompressible/icoFoam/icoFoam.C @@ -36,15 +36,14 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -52,8 +51,8 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readPISOControls.H" -# include "CourantNo.H" + #include "readPISOControls.H" + #include "CourantNo.H" fvVectorMatrix UEqn ( @@ -92,7 +91,7 @@ int main(int argc, char *argv[]) } } -# include "continuityErrs.H" + #include "continuityErrs.H" U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); diff --git a/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C b/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C index c5d2b0576c6e2acd547a1d2abf6bd94cf249964d..fb7ff1c8904c263cabb3a8dfcdb39266cbefb45d 100644 --- a/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C +++ b/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C @@ -37,15 +37,14 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMeshNoClear.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMeshNoClear.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -53,8 +52,8 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readPISOControls.H" -# include "CourantNo.H" + #include "readPISOControls.H" + #include "CourantNo.H" fluid.correct(); @@ -95,7 +94,7 @@ int main(int argc, char *argv[]) } } -# include "continuityErrs.H" + #include "continuityErrs.H" U -= rUA*fvc::grad(p); U.correctBoundaryConditions(); diff --git a/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H b/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H index 493c4e09297dda164af75b9c29b846be3ccf68e8..023ecc6d5a7e8afa95465df9db34b9a816d860e8 100644 --- a/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H +++ b/applications/solvers/incompressible/pimpleDyMFoam/correctPhi.H @@ -1,5 +1,9 @@ { - wordList pcorrTypes(p.boundaryField().types()); + wordList pcorrTypes + ( + p.boundaryField().size(), + zeroGradientFvPatchScalarField::typeName + ); for (label i=0; i<p.boundaryField().size(); i++) { diff --git a/applications/solvers/incompressible/pimpleDyMFoam/pimpleDyMFoam.C b/applications/solvers/incompressible/pimpleDyMFoam/pimpleDyMFoam.C index 66692cc4a854491f4d6339ccce0e4ab11e194e25..a9bcb42b451303ce7ea2c541a0eddde2f228da76 100644 --- a/applications/solvers/incompressible/pimpleDyMFoam/pimpleDyMFoam.C +++ b/applications/solvers/incompressible/pimpleDyMFoam/pimpleDyMFoam.C @@ -42,29 +42,28 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createDynamicFvMesh.H" + #include "readPIMPLEControls.H" + #include "initContinuityErrs.H" + #include "createFields.H" + #include "readTimeControls.H" -# include "createTime.H" -# include "createDynamicFvMesh.H" -# include "readPIMPLEControls.H" -# include "initContinuityErrs.H" -# include "createFields.H" -# include "readTimeControls.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readControls.H" -# include "CourantNo.H" + #include "readControls.H" + #include "CourantNo.H" // Make the fluxes absolute fvc::makeAbsolute(phi, U); -# include "setDeltaT.H" + #include "setDeltaT.H" runTime++; @@ -74,7 +73,7 @@ int main(int argc, char *argv[]) if (mesh.changing() && correctPhi) { -# include "correctPhi.H" + #include "correctPhi.H" } // Make the fluxes relative to the mesh motion @@ -82,7 +81,7 @@ int main(int argc, char *argv[]) if (mesh.changing() && checkMeshCourantNo) { -# include "meshCourantNo.H" + #include "meshCourantNo.H" } // --- PIMPLE loop @@ -93,7 +92,7 @@ int main(int argc, char *argv[]) p.storePrevIter(); } -# include "UEqn.H" + #include "UEqn.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) @@ -138,7 +137,7 @@ int main(int argc, char *argv[]) } } -# include "continuityErrs.H" + #include "continuityErrs.H" // Explicitly relax pressure for momentum corrector if (ocorr != nOuterCorr-1) diff --git a/applications/solvers/incompressible/simpleFoam/simpleFoam.C b/applications/solvers/incompressible/simpleFoam/simpleFoam.C index b5ac02c563c533dfb80b50e4afb1cab762f1b59d..4828bd507f61a4dc8a6c40932b2607e7e19b5d46 100644 --- a/applications/solvers/incompressible/simpleFoam/simpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/simpleFoam.C @@ -38,14 +38,13 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -53,15 +52,15 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" -# include "initConvergenceCheck.H" + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" p.storePrevIter(); // Pressure-velocity SIMPLE corrector { -# include "UEqn.H" -# include "pEqn.H" + #include "UEqn.H" + #include "pEqn.H" } turbulence->correct(); @@ -72,7 +71,7 @@ int main(int argc, char *argv[]) << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; -# include "convergenceCheck.H" + #include "convergenceCheck.H" } Info<< "End\n" << endl; diff --git a/applications/solvers/lagrangian/coalChemistryFoam/Make/files b/applications/solvers/lagrangian/coalChemistryFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..552d73450173870f57cee6a4b126b16fd63d08be --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/Make/files @@ -0,0 +1,3 @@ +coalChemistryFoam.C + +EXE = $(FOAM_APPBIN)/coalChemistryFoam diff --git a/applications/solvers/lagrangian/coalChemistryFoam/Make/options b/applications/solvers/lagrangian/coalChemistryFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..b7abd77a175372229b37f37bd8151117e904f3c2 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/Make/options @@ -0,0 +1,39 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I${LIB_SRC}/meshTools/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ + -I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/pdfs/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ + -I$(LIB_SRC)/ODE/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -lcompressibleRASModels \ + -lcompressibleLESModels \ + -llagrangian \ + -llagrangianIntermediate \ + -lcoalCombustion\ + -lspecie \ + -lbasicThermophysicalModels \ + -lliquids \ + -lliquidMixture \ + -lsolids \ + -lsolidMixture \ + -lthermophysicalFunctions \ + -lreactionThermophysicalModels \ + -lchemistryModel \ + -lradiation \ + -lODE diff --git a/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H b/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..b02a7c61e86523217ddf733841a2084e46cc2673 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/UEqn.H @@ -0,0 +1,17 @@ + fvVectorMatrix UEqn + ( + fvm::ddt(rho, U) + + fvm::div(phi, U) + + turbulence->divDevRhoReff(U) + == + rho.dimensionedInternalField()*g + + coalParcels.SU() + + limestoneParcels.SU() + ); + + UEqn.relax(); + + if (momentumPredictor) + { + solve(UEqn == -fvc::grad(p)); + } diff --git a/applications/solvers/lagrangian/coalChemistryFoam/YEqn.H b/applications/solvers/lagrangian/coalChemistryFoam/YEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..5c84cfdb3f5eae620a53dd50b8a0d32e6abb1fac --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/YEqn.H @@ -0,0 +1,43 @@ +tmp<fv::convectionScheme<scalar> > mvConvection +( + fv::convectionScheme<scalar>::New + ( + mesh, + fields, + phi, + mesh.divScheme("div(phi,Yi_h)") + ) +); + + +{ + label inertIndex = -1; + volScalarField Yt = 0.0*Y[0]; + + for (label i=0; i<Y.size(); i++) + { + if (Y[i].name() != inertSpecie) + { + volScalarField& Yi = Y[i]; + solve + ( + fvm::ddt(rho, Yi) + + mvConvection->fvmDiv(phi, Yi) + - fvm::laplacian(turbulence->muEff(), Yi) + == + coalParcels.Srho(i) + + kappa*chemistry.RR(i)().dimensionedInternalField() + ); + + Yi.max(0.0); + Yt += Yi; + } + else + { + inertIndex = i; + } + } + + Y[inertIndex] = scalar(1) - Yt; + Y[inertIndex].max(0.0); +} diff --git a/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H b/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H new file mode 100644 index 0000000000000000000000000000000000000000..07b1e9953b0db867186f6c668d27a9415a26c265 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/chemistry.H @@ -0,0 +1,25 @@ +{ + Info << "Solving chemistry" << endl; + + chemistry.solve + ( + runTime.value() - runTime.deltaT().value(), + runTime.deltaT().value() + ); + + // turbulent time scale + if (turbulentReaction) + { + DimensionedField<scalar, volMesh> tk = + Cmix*sqrt(turbulence->muEff()/rho/turbulence->epsilon()); + DimensionedField<scalar, volMesh> tc = + chemistry.tc()().dimensionedInternalField(); + + // Chalmers PaSR model + kappa = (runTime.deltaT() + tc)/(runTime.deltaT() + tc + tk); + } + else + { + kappa = 1.0; + } +} diff --git a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..0791c2e3583ccfc940772b2fc0f78bec15be0aca --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C @@ -0,0 +1,130 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + coalChemistryFoam + +Description + Transient solver for compressible, turbulent flow with coal and + limestone parcel injections, and combustion. + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "hCombustionThermo.H" +#include "turbulenceModel.H" +#include "basicThermoCloud.H" +#include "CoalCloud.H" +#include "psiChemistryModel.H" +#include "chemistrySolver.H" +#include "thermoPhysicsTypes.H" +#include "timeActivatedExplicitCellSource.H" +#include "radiationModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + + #include "createTime.H" + #include "createMesh.H" + #include "readChemistryProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "createClouds.H" + #include "createRadiationModel.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + while (runTime.run()) + { + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" + + runTime++; + + Info<< "Time = " << runTime.timeName() << nl << endl; + + rhoEffLagrangian = coalParcels.rhoEff() + limestoneParcels.rhoEff(); + pDyn = 0.5*rho*magSqr(U); + + coalParcels.evolve(); + + coalParcels.info(); + + Info<< endl; + + limestoneParcels.evolve(); + + limestoneParcels.info(); + + Info<< endl; + + #include "chemistry.H" + #include "rhoEqn.H" + + // --- PIMPLE loop + for (int ocorr=1; ocorr<=nOuterCorr; ocorr++) + { + #include "UEqn.H" + #include "YEqn.H" + #include "hEqn.H" + + // --- PISO loop + for (int corr=1; corr<=nCorr; corr++) + { + #include "pEqn.H" + } + + Info<< "T gas min/max = " << min(T).value() << ", " + << max(T).value() << endl; + } + + turbulence->correct(); + + rho = thermo.rho(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return(0); +} + + +// ************************************************************************* // diff --git a/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H b/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H new file mode 100644 index 0000000000000000000000000000000000000000..0a5fd91b756b58ec1b2bbadae9b72751a1ce2813 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H @@ -0,0 +1,19 @@ +Info<< "\nConstructing coal cloud" << endl; +CoalCloud<gasThermoPhysics> coalParcels +( + "coalCloud1", + rho, + U, + g, + thermo +); + +Info<< "\nConstructing limestone cloud" << endl; +basicThermoCloud limestoneParcels +( + "limestoneCloud1", + rho, + U, + g, + thermo +); diff --git a/applications/solvers/lagrangian/coalChemistryFoam/createFields.H b/applications/solvers/lagrangian/coalChemistryFoam/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..bba39fe8627d330b08eab8f586835fbe37449e39 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/createFields.H @@ -0,0 +1,128 @@ + Info<< "Reading thermophysical properties\n" << endl; + + autoPtr<psiChemistryModel> pChemistry + ( + psiChemistryModel::New(mesh) + ); + psiChemistryModel& chemistry = pChemistry(); + + hCombustionThermo& thermo = chemistry.thermo(); + + basicMultiComponentMixture& composition = thermo.composition(); + PtrList<volScalarField>& Y = composition.Y(); + + word inertSpecie(thermo.lookup("inertSpecie")); + + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& T = thermo.T(); + const volScalarField& psi = thermo.psi(); + + multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; + + forAll (Y, i) + { + fields.add(Y[i]); + } + fields.add(h); + + volScalarField rho + ( + IOobject + ( + "rho", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + thermo.rho() + ); + + // lagrangian effective density field - used externally (optional) + volScalarField rhoEffLagrangian + ( + IOobject + ( + "rhoEffLagrangian", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("zero", dimDensity, 0.0) + ); + + // dynamic pressure field - used externally (optional) + volScalarField pDyn + ( + IOobject + ( + "pDyn", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("zero", dimPressure, 0.0) + ); + + + Info<< "\nReading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + #include "compressibleCreatePhi.H" + + DimensionedField<scalar, volMesh> kappa + ( + IOobject + ( + "kappa", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("zero", dimless, 0.0) + ); + + Info<< "Creating turbulence model\n" << endl; + autoPtr<compressible::turbulenceModel> turbulence + ( + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + Info<< "Creating field DpDt\n" << endl; + volScalarField DpDt + ( + "DpDt", + fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p) + ); + + Info<< "\nConstructing explicit enthalpy cell source" << endl; + timeActivatedExplicitCellSource enthalpySource + ( + "enthalpySource", + mesh, + h.dimensions()*phi.dimensions()/mesh.V().dimensions() + ); diff --git a/applications/solvers/lagrangian/coalChemistryFoam/hEqn.H b/applications/solvers/lagrangian/coalChemistryFoam/hEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..2eaf6315cfb9fabe9f4f2ae6e1149fbd111c9739 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/hEqn.H @@ -0,0 +1,22 @@ +{ + fvScalarMatrix hEqn + ( + fvm::ddt(rho, h) + + mvConvection->fvmDiv(phi, h) + - fvm::laplacian(turbulence->alphaEff(), h) + == + DpDt + + coalParcels.Sh() + + limestoneParcels.Sh() + + enthalpySource.Su() + + radiation->Sh(thermo) + ); + + hEqn.relax(); + + hEqn.solve(); + + thermo.correct(); + + radiation->correct(); +} diff --git a/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H b/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..b31ad45ed4529b30d6d0dbc6c32c1b1e7f5ca6f0 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/pEqn.H @@ -0,0 +1,72 @@ +rho = thermo.rho(); + +volScalarField rUA = 1.0/UEqn.A(); +U = rUA*UEqn.H(); + +if (transonic) +{ + surfaceScalarField phid + ( + "phid", + fvc::interpolate(psi) + *( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) + ) + ); + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::ddt(psi, p) + + fvm::div(phid, p) + - fvm::laplacian(rho*rUA, p) + == + coalParcels.Srho() + ); + + pEqn.solve(); + + if (nonOrth == nNonOrthCorr) + { + phi == pEqn.flux(); + } + } +} +else +{ + phi = + fvc::interpolate(rho)* + ( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) + ); + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::ddt(psi, p) + + fvc::div(phi) + - fvm::laplacian(rho*rUA, p) + == + coalParcels.Srho() + ); + + pEqn.solve(); + + if (nonOrth == nNonOrthCorr) + { + phi += pEqn.flux(); + } + } +} + +#include "rhoEqn.H" +#include "compressibleContinuityErrs.H" + +U -= rUA*fvc::grad(p); +U.correctBoundaryConditions(); + +DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); diff --git a/applications/solvers/lagrangian/coalChemistryFoam/readChemistryProperties.H b/applications/solvers/lagrangian/coalChemistryFoam/readChemistryProperties.H new file mode 100644 index 0000000000000000000000000000000000000000..ab51afe28361cdf65bc74af68961a6732535d6b3 --- /dev/null +++ b/applications/solvers/lagrangian/coalChemistryFoam/readChemistryProperties.H @@ -0,0 +1,23 @@ +Info<< "Reading chemistry properties\n" << endl; + +IOdictionary chemistryProperties +( + IOobject + ( + "chemistryProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) +); + +Switch turbulentReaction(chemistryProperties.lookup("turbulentReaction")); + +dimensionedScalar Cmix("Cmix", dimless, 1.0); + +if (turbulentReaction) +{ + chemistryProperties.lookup("Cmix") >> Cmix; +} diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCFCStencilObject.C b/applications/solvers/lagrangian/coalChemistryFoam/rhoEqn.H similarity index 83% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCFCStencilObject.C rename to applications/solvers/lagrangian/coalChemistryFoam/rhoEqn.H index 81292b002ece8bb5f58d8bf69642305f4152a30a..ce337f5acf76fdf2f21080c15ce27973d4fc93cf 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCFCStencilObject.C +++ b/applications/solvers/lagrangian/coalChemistryFoam/rhoEqn.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2007 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,17 +22,22 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -\*---------------------------------------------------------------------------*/ - -#include "upwindCFCStencilObject.H" +Global + rhoEqn +Description + Solve the continuity for density. -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +\*---------------------------------------------------------------------------*/ -namespace Foam { - defineTypeNameAndDebug(upwindCFCStencilObject, 0); + solve + ( + fvm::ddt(rho) + + fvc::div(phi) + == + coalParcels.Srho() + ); } - // ************************************************************************* // diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/Make/files b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..dfee7d7d19ff7f3015c4ea903a462dec1200e73a --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/Make/files @@ -0,0 +1,3 @@ +porousExplicitSourceReactingParcelFoam.C + +EXE = $(FOAM_APPBIN)/porousExplicitSourceReactingParcelFoam diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/Make/options b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..76bc8b084f460664af2e459e21f691c45be205e4 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/Make/options @@ -0,0 +1,38 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I${LIB_SRC}/meshTools/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ + -I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/pdfs/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ + -I$(LIB_SRC)/ODE/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -lcompressibleRASModels \ + -lcompressibleLESModels \ + -llagrangian \ + -llagrangianIntermediate \ + -lspecie \ + -lbasicThermophysicalModels \ + -lliquids \ + -lliquidMixture \ + -lsolids \ + -lsolidMixture \ + -lthermophysicalFunctions \ + -lreactionThermophysicalModels \ + -lchemistryModel \ + -lradiation \ + -lODE diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/UEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..b408709aed902619ce7a316b11d0049a1f0e9948 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/UEqn.H @@ -0,0 +1,18 @@ + fvVectorMatrix UEqn + ( +// fvm::ddt(rho, U) + pZones.ddt(rho, U) + + fvm::div(phi, U) + + turbulence->divDevRhoReff(U) + == + rho.dimensionedInternalField()*g + + parcels.SU() + ); + + pZones.addResistance(UEqn); + + if (momentumPredictor) + { + solve(UEqn == -fvc::grad(p)); + } + diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/YEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/YEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..e802fdfe0d85929101f5e6723080b6666dfa2fb4 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/YEqn.H @@ -0,0 +1,46 @@ + +tmp<fv::convectionScheme<scalar> > mvConvection +( + fv::convectionScheme<scalar>::New + ( + mesh, + fields, + phi, + mesh.divScheme("div(phi,Yi_h)") + ) +); + + +{ + label inertIndex = -1; + volScalarField Yt = 0.0*Y[0]; + + for (label i=0; i<Y.size(); i++) + { + if (Y[i].name() != inertSpecie) + { + volScalarField& Yi = Y[i]; + solve + ( + fvm::ddt(rho, Yi) + + mvConvection->fvmDiv(phi, Yi) + - fvm::laplacian(turbulence->muEff(), Yi) + == + parcels.Srho(i) + + kappa*chemistry.RR(i)().dimensionedInternalField() + + pointMassSources.Su(i), + mesh.solver("Yi") + ); + + Yi.max(0.0); + Yt += Yi; + } + else + { + inertIndex = i; + } + } + + Y[inertIndex] = scalar(1) - Yt; + Y[inertIndex].max(0.0); +} diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H new file mode 100644 index 0000000000000000000000000000000000000000..07b1e9953b0db867186f6c668d27a9415a26c265 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/chemistry.H @@ -0,0 +1,25 @@ +{ + Info << "Solving chemistry" << endl; + + chemistry.solve + ( + runTime.value() - runTime.deltaT().value(), + runTime.deltaT().value() + ); + + // turbulent time scale + if (turbulentReaction) + { + DimensionedField<scalar, volMesh> tk = + Cmix*sqrt(turbulence->muEff()/rho/turbulence->epsilon()); + DimensionedField<scalar, volMesh> tc = + chemistry.tc()().dimensionedInternalField(); + + // Chalmers PaSR model + kappa = (runTime.deltaT() + tc)/(runTime.deltaT() + tc + tk); + } + else + { + kappa = 1.0; + } +} diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createClouds.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createClouds.H new file mode 100644 index 0000000000000000000000000000000000000000..728e605e572d043b2b0158ebe8a57f5741e3fe09 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createClouds.H @@ -0,0 +1,9 @@ +Info<< "\nConstructing reacting cloud" << endl; +BasicReactingCloud<icoPoly8ThermoPhysics> parcels +( + "reactingCloud1", + rho, + U, + g, + thermo +); diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createFields.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..a3054db0f5853192df84abadd77f6a3e3fed6687 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createFields.H @@ -0,0 +1,83 @@ + Info<< "Reading thermophysical properties\n" << endl; + + autoPtr<rhoChemistryModel> pChemistry + ( + rhoChemistryModel::New(mesh) + ); + rhoChemistryModel& chemistry = pChemistry(); + + hReactionThermo& thermo = chemistry.thermo(); + + basicMultiComponentMixture& composition = thermo.composition(); + PtrList<volScalarField>& Y = composition.Y(); + + word inertSpecie(thermo.lookup("inertSpecie")); + + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& T = thermo.T(); + const volScalarField& psi = thermo.psi(); + + volScalarField rho + ( + IOobject + ( + "rho", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + thermo.rho() + ); + + Info<< "\nReading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + #include "compressibleCreatePhi.H" + + DimensionedField<scalar, volMesh> kappa + ( + IOobject + ( + "kappa", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("zero", dimless, 0.0) + ); + + Info<< "Creating turbulence model\n" << endl; + autoPtr<compressible::turbulenceModel> turbulence + ( + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + Info<< "Creating multi-variate interpolation scheme\n" << endl; + multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; + + forAll (Y, i) + { + fields.add(Y[i]); + } + fields.add(h); diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createMulticomponentPointSources.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createMulticomponentPointSources.H new file mode 100644 index 0000000000000000000000000000000000000000..52de65dc5050296f6aca81542b733afe5252e704 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createMulticomponentPointSources.H @@ -0,0 +1,8 @@ +Info<< "\nConstructing multi-component mass flow rate point sources" << endl; +timeActivatedExplicitMulticomponentPointSource pointMassSources +( + "pointMassSources", + mesh, + Y, + dimMass/dimVolume/dimTime +); diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createPorousZones.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createPorousZones.H new file mode 100644 index 0000000000000000000000000000000000000000..90506856d2a072cad5ee3b4be584ee0aa42fda81 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/createPorousZones.H @@ -0,0 +1,3 @@ + Info<< "Creating porous zones" << nl << endl; + + porousZones pZones(mesh); diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/hEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/hEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..6e6b0c763ae85dbde75e0745e8c27b2899598fe3 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/hEqn.H @@ -0,0 +1,51 @@ +{ + tmp<volScalarField> pWork + ( + new volScalarField + ( + IOobject + ( + "pWork", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar("zero", dimensionSet(1, -1, -3, 0, 0), 0.0) + ) + ); + + if (dpdt) + { + pWork() += fvc::ddt(p); + } + if (eWork) + { + pWork() = -p*fvc::div(phi/fvc::interpolate(rho)); + } + if (hWork) + { + pWork() += fvc::div(phi/fvc::interpolate(rho)*fvc::interpolate(p)); + } + + { + solve + ( + fvm::ddt(rho, h) + + mvConvection->fvmDiv(phi, h) + - fvm::laplacian(turbulence->alphaEff(), h) + == + pWork() + + parcels.Sh() + + radiation->Sh(thermo) + ); + + thermo.correct(); + + radiation->correct(); + + Info<< "T gas min/max = " << min(T).value() << ", " + << max(T).value() << endl; + } +} diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..32657588b0f594133d47d0b886a88be1a21907ac --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H @@ -0,0 +1,61 @@ +{ + rho = thermo.rho(); + + // Thermodynamic density needs to be updated by psi*d(p) after the + // pressure solution - done in 2 parts. Part 1: + thermo.rho() -= psi*p; + + volScalarField rAU = 1.0/UEqn.A(); + U = rAU*UEqn.H(); + + if (pZones.size() > 0) + { + // ddtPhiCorr not well defined for cases with porosity + phi = fvc::interpolate(rho)*(fvc::interpolate(U) & mesh.Sf()); + } + else + { + phi = + fvc::interpolate(rho) + *( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rAU, rho, U, phi) + ); + } + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + + fvc::div(phi) + - fvm::laplacian(rho*rAU, p) + == + parcels.Srho() + + pointMassSources.Su() + ); + + if (corr == nCorr-1 && nonOrth == nNonOrthCorr) + { + pEqn.solve(mesh.solver("pFinal")); + } + else + { + pEqn.solve(); + } + + if (nonOrth == nNonOrthCorr) + { + phi += pEqn.flux(); + } + } + + // Second part of thermodynamic density update + thermo.rho() += psi*p; + + #include "rhoEqn.H" + #include "compressibleContinuityErrs.H" + + U -= rAU*fvc::grad(p); + U.correctBoundaryConditions(); +} diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/porousExplicitSourceReactingParcelFoam.C b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/porousExplicitSourceReactingParcelFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..760627de80fc83d1785dc29ab3956688679c57eb --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/porousExplicitSourceReactingParcelFoam.C @@ -0,0 +1,120 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + porousExplicitSourceReactingParcelFoam + +Description + - reacting parcel cloud + - porous media + - point mass sources + - polynomial based, incompressible thermodynamics (f(T)) + + Note: ddtPhiCorr not used here when porous zones are active + - not well defined for porous calcs + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "hReactionThermo.H" +#include "turbulenceModel.H" +#include "BasicReactingCloud.H" +#include "rhoChemistryModel.H" +#include "chemistrySolver.H" +#include "thermoPhysicsTypes.H" +#include "radiationModel.H" +#include "porousZones.H" +#include "timeActivatedExplicitMulticomponentPointSource.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + + #include "createTime.H" + #include "createMesh.H" + #include "readChemistryProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "createRadiationModel.H" + #include "createClouds.H" + #include "createMulticomponentPointSources.H" + #include "createPorousZones.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + while (runTime.run()) + { + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "readAdditionalSolutionControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" + + runTime++; + + Info<< "Time = " << runTime.timeName() << nl << endl; + + parcels.evolve(); + + parcels.info(); + + #include "chemistry.H" + #include "rhoEqn.H" + #include "UEqn.H" + #include "YEqn.H" + #include "hEqn.H" + + // --- PISO loop + for (int corr=0; corr<nCorr; corr++) + { + #include "pEqn.H" + } + + + turbulence->correct(); + + rho = thermo.rho(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return(0); +} + + +// ************************************************************************* // diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H new file mode 100644 index 0000000000000000000000000000000000000000..8159205caee0a202b8fc1be04130bf4a0b4d5c46 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readAdditionalSolutionControls.H @@ -0,0 +1,20 @@ +dictionary additional = mesh.solutionDict().subDict("additional"); + +bool dpdt = true; +if (additional.found("dpdt")) +{ + additional.lookup("dpdt") >> dpdt; +} + +bool eWork = true; +if (additional.found("eWork")) +{ + additional.lookup("eWork") >> eWork; +} + +bool hWork = true; +if (additional.found("hWork")) +{ + additional.lookup("hWork") >> hWork; +} + diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readChemistryProperties.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readChemistryProperties.H new file mode 100644 index 0000000000000000000000000000000000000000..ab51afe28361cdf65bc74af68961a6732535d6b3 --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/readChemistryProperties.H @@ -0,0 +1,23 @@ +Info<< "Reading chemistry properties\n" << endl; + +IOdictionary chemistryProperties +( + IOobject + ( + "chemistryProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) +); + +Switch turbulentReaction(chemistryProperties.lookup("turbulentReaction")); + +dimensionedScalar Cmix("Cmix", dimless, 1.0); + +if (turbulentReaction) +{ + chemistryProperties.lookup("Cmix") >> Cmix; +} diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/rhoEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/rhoEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..5bc5e120a01dee5c2ac7434c3700503b66fe4e8e --- /dev/null +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/rhoEqn.H @@ -0,0 +1,48 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Global + rhoEqn + +Description + Solve the continuity for density. + +\*---------------------------------------------------------------------------*/ + +{ + fvScalarMatrix rhoEqn + ( + fvm::ddt(rho) + + fvc::div(phi) + == + parcels.Srho() + + pointMassSources.Su() + ); + + rhoEqn.relax(); + + rhoEqn.solve(); +} + +// ************************************************************************* // diff --git a/applications/solvers/lagrangian/reactingParcelFoam/Make/files b/applications/solvers/lagrangian/reactingParcelFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..3710ca4e2df104e37cd2c720455d658fd102d2d0 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/Make/files @@ -0,0 +1,3 @@ +reactingParcelFoam.C + +EXE = $(FOAM_APPBIN)/reactingParcelFoam diff --git a/applications/solvers/lagrangian/reactingParcelFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..d10253a8fa3615ecf3f0d435390af869fb16a743 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/Make/options @@ -0,0 +1,37 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I${LIB_SRC}/meshTools/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/pdfs/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ + -I$(LIB_SRC)/ODE/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -lcompressibleRASModels \ + -lcompressibleLESModels \ + -llagrangian \ + -llagrangianIntermediate \ + -lspecie \ + -lbasicThermophysicalModels \ + -lliquids \ + -lliquidMixture \ + -lsolids \ + -lsolidMixture \ + -lthermophysicalFunctions \ + -lreactionThermophysicalModels \ + -lchemistryModel \ + -lradiation \ + -lODE diff --git a/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H b/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..3c4a927091a474e5b8d0d4e50b2794a26202cc8a --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/UEqn.H @@ -0,0 +1,16 @@ + fvVectorMatrix UEqn + ( + fvm::ddt(rho, U) + + fvm::div(phi, U) + + turbulence->divDevRhoReff(U) + == + rho.dimensionedInternalField()*g + + parcels.SU() + ); + + UEqn.relax(); + + if (momentumPredictor) + { + solve(UEqn == -fvc::grad(p)); + } diff --git a/applications/solvers/lagrangian/reactingParcelFoam/YEqn.H b/applications/solvers/lagrangian/reactingParcelFoam/YEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..5cf44cb09fef5500b0813c099abc57c433cee9cc --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/YEqn.H @@ -0,0 +1,44 @@ +tmp<fv::convectionScheme<scalar> > mvConvection +( + fv::convectionScheme<scalar>::New + ( + mesh, + fields, + phi, + mesh.divScheme("div(phi,Yi_h)") + ) +); + + +{ + label inertIndex = -1; + volScalarField Yt = 0.0*Y[0]; + + for (label i=0; i<Y.size(); i++) + { + if (Y[i].name() != inertSpecie) + { + volScalarField& Yi = Y[i]; + solve + ( + fvm::ddt(rho, Yi) + + mvConvection->fvmDiv(phi, Yi) + - fvm::laplacian(turbulence->muEff(), Yi) + == + parcels.Srho(i) + + kappa*chemistry.RR(i)().dimensionedInternalField(), + mesh.solver("Yi") + ); + + Yi.max(0.0); + Yt += Yi; + } + else + { + inertIndex = i; + } + } + + Y[inertIndex] = scalar(1) - Yt; + Y[inertIndex].max(0.0); +} diff --git a/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H b/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H new file mode 100644 index 0000000000000000000000000000000000000000..07b1e9953b0db867186f6c668d27a9415a26c265 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/chemistry.H @@ -0,0 +1,25 @@ +{ + Info << "Solving chemistry" << endl; + + chemistry.solve + ( + runTime.value() - runTime.deltaT().value(), + runTime.deltaT().value() + ); + + // turbulent time scale + if (turbulentReaction) + { + DimensionedField<scalar, volMesh> tk = + Cmix*sqrt(turbulence->muEff()/rho/turbulence->epsilon()); + DimensionedField<scalar, volMesh> tc = + chemistry.tc()().dimensionedInternalField(); + + // Chalmers PaSR model + kappa = (runTime.deltaT() + tc)/(runTime.deltaT() + tc + tk); + } + else + { + kappa = 1.0; + } +} diff --git a/applications/solvers/lagrangian/reactingParcelFoam/createClouds.H b/applications/solvers/lagrangian/reactingParcelFoam/createClouds.H new file mode 100644 index 0000000000000000000000000000000000000000..4ae0633ab7bc74f993286571c10f3c52f645e7e4 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/createClouds.H @@ -0,0 +1,9 @@ +Info<< "\nConstructing reacting cloud" << endl; +BasicReactingCloud<gasThermoPhysics> parcels +( + "reactingCloud1", + rho, + U, + g, + thermo +); diff --git a/applications/solvers/lagrangian/reactingParcelFoam/createFields.H b/applications/solvers/lagrangian/reactingParcelFoam/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..ec820fa5e364dcc3a56781d08bf9ac2dc7925ad0 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/createFields.H @@ -0,0 +1,89 @@ + Info<< "Reading thermophysical properties\n" << endl; + + autoPtr<psiChemistryModel> pChemistry + ( + psiChemistryModel::New(mesh) + ); + psiChemistryModel& chemistry = pChemistry(); + + hCombustionThermo& thermo = chemistry.thermo(); + + basicMultiComponentMixture& composition = thermo.composition(); + PtrList<volScalarField>& Y = composition.Y(); + + word inertSpecie(thermo.lookup("inertSpecie")); + + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& T = thermo.T(); + const volScalarField& psi = thermo.psi(); + + volScalarField rho + ( + IOobject + ( + "rho", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + thermo.rho() + ); + + Info<< "\nReading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + #include "compressibleCreatePhi.H" + + DimensionedField<scalar, volMesh> kappa + ( + IOobject + ( + "kappa", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedScalar("zero", dimless, 0.0) + ); + + Info<< "Creating turbulence model\n" << endl; + autoPtr<compressible::turbulenceModel> turbulence + ( + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + Info<< "Creating field DpDt\n" << endl; + volScalarField DpDt + ( + "DpDt", + fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p) + ); + + multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; + + forAll (Y, i) + { + fields.add(Y[i]); + } + fields.add(h); diff --git a/applications/solvers/lagrangian/reactingParcelFoam/hEqn.H b/applications/solvers/lagrangian/reactingParcelFoam/hEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..d686e452f46f053c7b52f7b19872f964d9c054ef --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/hEqn.H @@ -0,0 +1,20 @@ +{ + fvScalarMatrix hEqn + ( + fvm::ddt(rho, h) + + mvConvection->fvmDiv(phi, h) + - fvm::laplacian(turbulence->alphaEff(), h) + == + DpDt + + parcels.Sh() + + radiation->Sh(thermo) + ); + + hEqn.relax(); + + hEqn.solve(); + + thermo.correct(); + + radiation->correct(); +} diff --git a/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..d27afcce8ac2464b63b09e05645bcb5de6aa1282 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/pEqn.H @@ -0,0 +1,72 @@ +rho = thermo.rho(); + +volScalarField rUA = 1.0/UEqn.A(); +U = rUA*UEqn.H(); + +if (transonic) +{ + surfaceScalarField phid + ( + "phid", + fvc::interpolate(psi) + *( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) + ) + ); + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::ddt(psi, p) + + fvm::div(phid, p) + - fvm::laplacian(rho*rUA, p) + == + parcels.Srho() + ); + + pEqn.solve(); + + if (nonOrth == nNonOrthCorr) + { + phi == pEqn.flux(); + } + } +} +else +{ + phi = + fvc::interpolate(rho) + *( + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) + ); + + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::ddt(psi, p) + + fvc::div(phi) + - fvm::laplacian(rho*rUA, p) + == + parcels.Srho() + ); + + pEqn.solve(); + + if (nonOrth == nNonOrthCorr) + { + phi += pEqn.flux(); + } + } +} + +#include "rhoEqn.H" +#include "compressibleContinuityErrs.H" + +U -= rUA*fvc::grad(p); +U.correctBoundaryConditions(); + +DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); diff --git a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..8c26cb652829a95fb6a9e74733c9759798a9d345 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C @@ -0,0 +1,117 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + reactingParcelFoam + +Description + Transient PISO solver for compressible, laminar or turbulent flow with + reacting Lagrangian parcels. + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "hCombustionThermo.H" +#include "turbulenceModel.H" +#include "BasicReactingCloud.H" +#include "psiChemistryModel.H" +#include "chemistrySolver.H" +#include "thermoPhysicsTypes.H" +#include "radiationModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + + #include "createTime.H" + #include "createMesh.H" + #include "readChemistryProperties.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "createClouds.H" + #include "createRadiationModel.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + while (runTime.run()) + { + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" + + runTime++; + + Info<< "Time = " << runTime.timeName() << nl << endl; + + parcels.evolve(); + + parcels.info(); + + #include "chemistry.H" + #include "rhoEqn.H" + + // --- PIMPLE loop + for (int ocorr=1; ocorr<=nOuterCorr; ocorr++) + { + #include "UEqn.H" + #include "YEqn.H" + + // --- PISO loop + for (int corr=1; corr<=nCorr; corr++) + { + #include "hEqn.H" + #include "pEqn.H" + } + + Info<< "T gas min/max = " << min(T).value() << ", " + << max(T).value() << endl; + } + + turbulence->correct(); + + rho = thermo.rho(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return(0); +} + + +// ************************************************************************* // diff --git a/applications/solvers/lagrangian/reactingParcelFoam/readChemistryProperties.H b/applications/solvers/lagrangian/reactingParcelFoam/readChemistryProperties.H new file mode 100644 index 0000000000000000000000000000000000000000..ab51afe28361cdf65bc74af68961a6732535d6b3 --- /dev/null +++ b/applications/solvers/lagrangian/reactingParcelFoam/readChemistryProperties.H @@ -0,0 +1,23 @@ +Info<< "Reading chemistry properties\n" << endl; + +IOdictionary chemistryProperties +( + IOobject + ( + "chemistryProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ) +); + +Switch turbulentReaction(chemistryProperties.lookup("turbulentReaction")); + +dimensionedScalar Cmix("Cmix", dimless, 1.0); + +if (turbulentReaction) +{ + chemistryProperties.lookup("Cmix") >> Cmix; +} diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCPCStencilObject.C b/applications/solvers/lagrangian/reactingParcelFoam/rhoEqn.H similarity index 83% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCPCStencilObject.C rename to applications/solvers/lagrangian/reactingParcelFoam/rhoEqn.H index 36f0c19b34d715ca71e287ea4b094429524b346d..131c144114eb2b6f04bfd0798ec2facac0516ef0 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCPCStencilObject.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/rhoEqn.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,17 +22,22 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -\*---------------------------------------------------------------------------*/ - -#include "upwindCPCStencilObject.H" +Global + rhoEqn +Description + Solve the continuity for density. -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +\*---------------------------------------------------------------------------*/ -namespace Foam { - defineTypeNameAndDebug(upwindCPCStencilObject, 0); + solve + ( + fvm::ddt(rho) + + fvc::div(phi) + == + parcels.Srho() + ); } - // ************************************************************************* // diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/files b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..387367f16917a0b06d8665f690daff7f4e4f93db --- /dev/null +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/files @@ -0,0 +1,3 @@ +uncoupledKinematicParcelFoam.C + +EXE = $(FOAM_APPBIN)/uncoupledKinematicParcelFoam diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/Make/options b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options similarity index 80% rename from applications/solvers/Lagrangian/kinematicParcelFoam/Make/options rename to applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options index c9727abd52c16029478cb71f8ab0d1754f17d9a8..83ef9251c59430f44264fc1a6733d120a19135a5 100644 --- a/applications/solvers/Lagrangian/kinematicParcelFoam/Make/options +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options @@ -3,10 +3,11 @@ EXE_INC = \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ - -I$(LIB_SRC)/finiteVolume/lnInclude + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ EXE_LIBS = \ -llagrangian \ diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H similarity index 86% rename from applications/solvers/Lagrangian/kinematicParcelFoam/createFields.H rename to applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H index c76a81ca4666d882442b8c8f09663be378a134d0..78b0e8b552f8a9b63fce0a2bf52b545200d944f4 100644 --- a/applications/solvers/Lagrangian/kinematicParcelFoam/createFields.H +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/createFields.H @@ -1,9 +1,10 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); volScalarField rho ( @@ -15,7 +16,7 @@ IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); Info<< "\nReading field U\n" << endl; @@ -42,7 +43,7 @@ rho, U, phi, - thermo() + thermo ) ); @@ -55,6 +56,6 @@ kinematicCloudName, rho, U, - thermo().mu(), + thermo.mu(), g ); diff --git a/applications/solvers/Lagrangian/kinematicParcelFoam/kinematicParcelFoam.C b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C similarity index 96% rename from applications/solvers/Lagrangian/kinematicParcelFoam/kinematicParcelFoam.C rename to applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C index 786146219b622aa7a8b7ec6625080ec6f148f22c..2039346411b21b7ac84a633416040c4e1ecc71d0 100644 --- a/applications/solvers/Lagrangian/kinematicParcelFoam/kinematicParcelFoam.C +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" #include "basicKinematicCloud.H" diff --git a/applications/solvers/multiphase/bubbleFoam/bubbleFoam.C b/applications/solvers/multiphase/bubbleFoam/bubbleFoam.C index 66df8cfb9f260d31d788d24f20819ee5ed208629..af6de6def0bb1d6561b24052aee46724b67a2f54 100644 --- a/applications/solvers/multiphase/bubbleFoam/bubbleFoam.C +++ b/applications/solvers/multiphase/bubbleFoam/bubbleFoam.C @@ -26,7 +26,7 @@ Application bubbleFoam Description - Solver for a system of 2 incompressible fluid phases with one phase + Solver for a system of 2 incompressible fluid phases with one phase dispersed, e.g. gas bubbles in a liquid. \*---------------------------------------------------------------------------*/ @@ -40,16 +40,15 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -57,30 +56,30 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readBubbleFoamControls.H" -# include "CourantNo.H" + #include "readBubbleFoamControls.H" + #include "CourantNo.H" -# include "alphaEqn.H" -# include "liftDragCoeffs.H" -# include "UEqns.H" + #include "alphaEqn.H" + #include "liftDragCoeffs.H" + #include "UEqns.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" if (correctAlpha) { -# include "alphaEqn.H" + #include "alphaEqn.H" } } -# include "DDtU.H" + #include "DDtU.H" -# include "kEpsilon.H" + #include "kEpsilon.H" -# include "write.H" + #include "write.H" Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/solvers/multiphase/bubbleFoam/createFields.H b/applications/solvers/multiphase/bubbleFoam/createFields.H index 875a4f1be13550588c393b2d52e17a19e3990a4a..9aca6933fc300f754f064f3b2ad95c05168e7fdd 100644 --- a/applications/solvers/multiphase/bubbleFoam/createFields.H +++ b/applications/solvers/multiphase/bubbleFoam/createFields.H @@ -141,8 +141,8 @@ transportProperties.lookup("Ct") ); -# include "createPhia.H" -# include "createPhib.H" + #include "createPhia.H" + #include "createPhib.H" surfaceScalarField phi ( @@ -157,7 +157,7 @@ ); -# include "createRASTurbulence.H" + #include "createRASTurbulence.H" Info<< "Calculating field DDtUa and DDtUb\n" << endl; diff --git a/applications/solvers/multiphase/bubbleFoam/kEpsilon.H b/applications/solvers/multiphase/bubbleFoam/kEpsilon.H index 016d1f4488c43c53bb22e11802bff96667712220..b1c8951b04ab389de71cbdf1a5efbc9193c734fb 100644 --- a/applications/solvers/multiphase/bubbleFoam/kEpsilon.H +++ b/applications/solvers/multiphase/bubbleFoam/kEpsilon.H @@ -9,7 +9,7 @@ if(turbulence) volScalarField G = 2*nutb*(tgradUb() && dev(symm(tgradUb()))); tgradUb.clear(); -# include "wallFunctions.H" + #include "wallFunctions.H" // Dissipation equation fvScalarMatrix epsEqn @@ -22,7 +22,7 @@ if(turbulence) - fvm::Sp(C2*beta*epsilon/k, epsilon) ); -# include "wallDissipation.H" + #include "wallDissipation.H" epsEqn.relax(); epsEqn.solve(); @@ -48,8 +48,7 @@ if(turbulence) //- Re-calculate turbulence viscosity nutb = Cmu*sqr(k)/epsilon; -# include "wallViscosity.H" - + #include "wallViscosity.H" } nuEffa = sqr(Ct)*nutb + nua; diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C index 12a8f4d49991b3e8f280bcef7f3274f05498a921..62aa7a076fbff1fb215ce1cda8f04cfd88119c13 100644 --- a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C +++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C @@ -41,40 +41,39 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readThermodynamicProperties.H" + #include "readControls.H" + #include "createFields.H" + #include "initContinuityErrs.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" -# include "createTime.H" -# include "createMesh.H" -# include "readThermodynamicProperties.H" -# include "readControls.H" -# include "createFields.H" -# include "initContinuityErrs.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readControls.H" -# include "CourantNo.H" -# include "setDeltaT.H" + #include "readControls.H" + #include "CourantNo.H" + #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; for (int outerCorr=0; outerCorr<nOuterCorr; outerCorr++) { -# include "rhoEqn.H" -# include "gammaPsi.H" -# include "UEqn.H" + #include "rhoEqn.H" + #include "gammaPsi.H" + #include "UEqn.H" for (int corr=0; corr<nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" } } diff --git a/applications/solvers/multiphase/cavitatingFoam/createFields.H b/applications/solvers/multiphase/cavitatingFoam/createFields.H index dc2f5e696129edaac8b20e59effedc957c975a24..49c7de1473355e69429cf309091dc81aaea5a563 100644 --- a/applications/solvers/multiphase/cavitatingFoam/createFields.H +++ b/applications/solvers/multiphase/cavitatingFoam/createFields.H @@ -71,8 +71,8 @@ mesh ); -# include "createPhiv.H" -# include "compressibleCreatePhi.H" + #include "createPhiv.H" + #include "compressibleCreatePhi.H" Info<< "Reading transportProperties\n" << endl; diff --git a/applications/solvers/multiphase/cavitatingFoam/pEqn.H b/applications/solvers/multiphase/cavitatingFoam/pEqn.H index c22aa76479a0d503d22bc60af591a82a7733d850..979834717be78414443c08afdf542d4355eb5b64 100644 --- a/applications/solvers/multiphase/cavitatingFoam/pEqn.H +++ b/applications/solvers/multiphase/cavitatingFoam/pEqn.H @@ -24,7 +24,7 @@ phiv -= phiGradp/rhof; -# include "resetPhivPatches.H" + #include "resetPhivPatches.H" for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { @@ -82,6 +82,5 @@ Info<< "max-min rho: " << max(rho).value() << " " << min(rho).value() << endl; -# include "gammaPsi.H" - + #include "gammaPsi.H" } diff --git a/applications/solvers/multiphase/compressibleInterDyMFoam/UEqn.H b/applications/solvers/multiphase/compressibleInterDyMFoam/UEqn.H index 1576f6ba787b037d97c84368836912f0c7d129dd..138e58fc7f72b23abdcba18deef3da53e3b6b951 100644 --- a/applications/solvers/multiphase/compressibleInterDyMFoam/UEqn.H +++ b/applications/solvers/multiphase/compressibleInterDyMFoam/UEqn.H @@ -24,10 +24,10 @@ == fvc::reconstruct ( - ( + fvc::interpolate(rho)*(g & mesh.Sf()) + + ( fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - - fvc::snGrad(pd) + - fvc::snGrad(p) ) * mesh.magSf() ) ); diff --git a/applications/solvers/multiphase/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterDyMFoam/compressibleInterDyMFoam.C index 65afde39c2dedd071b59d6dd39880e18880e486d..176900f0c63aaa65a7b8db19d0a2da8e1330614b 100644 --- a/applications/solvers/multiphase/compressibleInterDyMFoam/compressibleInterDyMFoam.C +++ b/applications/solvers/multiphase/compressibleInterDyMFoam/compressibleInterDyMFoam.C @@ -104,12 +104,6 @@ int main(int argc, char *argv[]) #include "meshCourantNo.H" } - if (mesh.changing()) - { - gh = g & mesh.C(); - ghf = g & mesh.Cf(); - } - turbulence->correct(); // --- Outer-corrector loop diff --git a/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H b/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H index 4152105784639530f725c53b7b561841b798c624..d82a03edb59a2d419420700638404e6f90b197c8 100644 --- a/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H +++ b/applications/solvers/multiphase/compressibleInterDyMFoam/correctPhi.H @@ -12,7 +12,7 @@ IOobject::NO_WRITE ), mesh, - dimensionedScalar("pcorr", pd.dimensions(), 0.0), + dimensionedScalar("pcorr", p.dimensions(), 0.0), pcorrTypes ); diff --git a/applications/solvers/multiphase/compressibleInterDyMFoam/createFields.H b/applications/solvers/multiphase/compressibleInterDyMFoam/createFields.H index dc04fb454680bbeadec55c8946227270601651c7..3da1b5e9c19d85ba9dede2bcdb85f346a5610c9e 100644 --- a/applications/solvers/multiphase/compressibleInterDyMFoam/createFields.H +++ b/applications/solvers/multiphase/compressibleInterDyMFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -46,11 +46,6 @@ #include "createPhi.H" - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - - Info<< "Reading transportProperties\n" << endl; twoPhaseMixture twoPhaseProperties(U, phi); @@ -88,24 +83,6 @@ dimensionedScalar pMin(twoPhaseProperties.lookup("pMin")); - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - max - ( - (pd + gh*(alpha1*rho10 + alpha2*rho20)) - /(1.0 - gh*(alpha1*psi1 + alpha2*psi2)), - pMin - ) - ); - volScalarField rho1 = rho10 + psi1*p; volScalarField rho2 = rho20 + psi2*p; @@ -152,11 +129,15 @@ ); - wordList pcorrTypes(pd.boundaryField().types()); + wordList pcorrTypes + ( + p.boundaryField().size(), + zeroGradientFvPatchScalarField::typeName + ); - for (label i=0; i<pd.boundaryField().size(); i++) + for (label i=0; i<p.boundaryField().size(); i++) { - if (pd.boundaryField()[i].fixesValue()) + if (p.boundaryField()[i].fixesValue()) { pcorrTypes[i] = fixedValueFvPatchScalarField::typeName; } diff --git a/applications/solvers/multiphase/compressibleInterDyMFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterDyMFoam/pEqn.H index 7e4b37061fdede3fccc625875cc38c447657a198..e6004eb9de9f6d157dd5a42637540fa3d70c6ddb 100644 --- a/applications/solvers/multiphase/compressibleInterDyMFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleInterDyMFoam/pEqn.H @@ -2,17 +2,17 @@ volScalarField rUA = 1.0/UEqn.A(); surfaceScalarField rUAf = fvc::interpolate(rUA); - tmp<fvScalarMatrix> pdEqnComp; + tmp<fvScalarMatrix> pEqnComp; if (transonic) { - pdEqnComp = - (fvm::ddt(pd) + fvm::div(phi, pd) - fvm::Sp(fvc::div(phi), pd)); + pEqnComp = + (fvm::ddt(p) + fvm::div(phi, p) - fvm::Sp(fvc::div(phi), p)); } else { - pdEqnComp = - (fvm::ddt(pd) + fvc::div(phi, pd) - fvc::Sp(fvc::div(phi), pd)); + pEqnComp = + (fvm::ddt(p) + fvc::div(phi, p) - fvc::Sp(fvc::div(phi), p)); } @@ -26,16 +26,16 @@ phi = phiU + ( - fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - )*rUAf*mesh.magSf(); + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rUAf; for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqnIncomp + fvScalarMatrix pEqnIncomp ( fvc::div(phi) - - fvm::laplacian(rUAf, pd) + - fvm::laplacian(rUAf, p) ); if @@ -51,9 +51,9 @@ max(alpha1, scalar(0))*(psi1/rho1) + max(alpha2, scalar(0))*(psi2/rho2) ) - *pdEqnComp() - + pdEqnIncomp, - mesh.solver(pd.name() + "Final") + *pEqnComp() + + pEqnIncomp, + mesh.solver(p.name() + "Final") ); } else @@ -64,8 +64,8 @@ max(alpha1, scalar(0))*(psi1/rho1) + max(alpha2, scalar(0))*(psi2/rho2) ) - *pdEqnComp() - + pdEqnIncomp + *pEqnComp() + + pEqnIncomp ); } @@ -73,26 +73,21 @@ { dgdt = (pos(alpha2)*(psi2/rho2) - pos(alpha1)*(psi1/rho1)) - *(pdEqnComp & pd); - phi += pdEqnIncomp.flux(); + *(pEqnComp & p); + phi += pEqnIncomp.flux(); } } U += rUA*fvc::reconstruct((phi - phiU)/rUAf); U.correctBoundaryConditions(); - p = max - ( - (pd + gh*(alpha1*rho10 + alpha2*rho20)) - /(1.0 - gh*(alpha1*psi1 + alpha2*psi2)), - pMin - ); + p.max(pMin); rho1 = rho10 + psi1*p; rho2 = rho20 + psi2*p; Info<< "max(U) " << max(mag(U)).value() << endl; - Info<< "min(pd) " << min(pd).value() << endl; + Info<< "min(p) " << min(p).value() << endl; // Make the fluxes relative to the mesh motion fvc::makeRelative(phi, U); diff --git a/applications/solvers/multiphase/compressibleInterFoam/UEqn.H b/applications/solvers/multiphase/compressibleInterFoam/UEqn.H index 528e0aaafd892c2995fa94848c0d59b66af41942..0b1a9ac029d776dbd57da20f91c14da8ee88f5a7 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/UEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/UEqn.H @@ -24,10 +24,10 @@ == fvc::reconstruct ( - ( + fvc::interpolate(rho)*(g & mesh.Sf()) + + ( fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - - fvc::snGrad(pd) + - fvc::snGrad(p) ) * mesh.magSf() ) ); diff --git a/applications/solvers/multiphase/compressibleInterFoam/createFields.H b/applications/solvers/multiphase/compressibleInterFoam/createFields.H index 1f579d245bdcac21f647ac2a90a516b5f612b3c9..3e6904d383e677c976ac8daacd110b31af414f75 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/createFields.H +++ b/applications/solvers/multiphase/compressibleInterFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -46,11 +46,6 @@ #include "createPhi.H" - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - - Info<< "Reading transportProperties\n" << endl; twoPhaseMixture twoPhaseProperties(U, phi); @@ -88,24 +83,6 @@ dimensionedScalar pMin(twoPhaseProperties.lookup("pMin")); - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - max - ( - (pd + gh*(alpha1*rho10 + alpha2*rho20)) - /(1.0 - gh*(alpha1*psi1 + alpha2*psi2)), - pMin - ) - ); - volScalarField rho1 = rho10 + psi1*p; volScalarField rho2 = rho20 + psi2*p; diff --git a/applications/solvers/multiphase/compressibleInterFoam/pEqn.H b/applications/solvers/multiphase/compressibleInterFoam/pEqn.H index ebf24498ade0bd1d1572d6055da8b5bccd369ffa..9d2dc23916babb9c6c94acd2b53125c8cfee1dad 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleInterFoam/pEqn.H @@ -2,17 +2,17 @@ volScalarField rUA = 1.0/UEqn.A(); surfaceScalarField rUAf = fvc::interpolate(rUA); - tmp<fvScalarMatrix> pdEqnComp; + tmp<fvScalarMatrix> pEqnComp; if (transonic) { - pdEqnComp = - (fvm::ddt(pd) + fvm::div(phi, pd) - fvm::Sp(fvc::div(phi), pd)); + pEqnComp = + (fvm::ddt(p) + fvm::div(phi, p) - fvm::Sp(fvc::div(phi), p)); } else { - pdEqnComp = - (fvm::ddt(pd) + fvc::div(phi, pd) - fvc::Sp(fvc::div(phi), pd)); + pEqnComp = + (fvm::ddt(p) + fvc::div(phi, p) - fvc::Sp(fvc::div(phi), p)); } @@ -26,16 +26,16 @@ phi = phiU + ( - fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - )*rUAf*mesh.magSf(); + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rUAf; for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqnIncomp + fvScalarMatrix pEqnIncomp ( fvc::div(phi) - - fvm::laplacian(rUAf, pd) + - fvm::laplacian(rUAf, p) ); solve @@ -44,31 +44,27 @@ max(alpha1, scalar(0))*(psi1/rho1) + max(alpha2, scalar(0))*(psi2/rho2) ) - *pdEqnComp() - + pdEqnIncomp + *pEqnComp() + + pEqnIncomp ); if (nonOrth == nNonOrthCorr) { dgdt = (pos(alpha2)*(psi2/rho2) - pos(alpha1)*(psi1/rho1)) - *(pdEqnComp & pd); - phi += pdEqnIncomp.flux(); + *(pEqnComp & p); + phi += pEqnIncomp.flux(); } } U += rUA*fvc::reconstruct((phi - phiU)/rUAf); U.correctBoundaryConditions(); - p = max - ( - (pd + gh*(alpha1*rho10 + alpha2*rho20))/(1.0 - gh*(alpha1*psi1 + alpha2*psi2)), - pMin - ); + p.max(pMin); rho1 = rho10 + psi1*p; rho2 = rho20 + psi2*p; Info<< "max(U) " << max(mag(U)).value() << endl; - Info<< "min(pd) " << min(pd).value() << endl; + Info<< "min(p) " << min(p).value() << endl; } diff --git a/applications/solvers/multiphase/interDyMFoam/correctPhi.H b/applications/solvers/multiphase/interDyMFoam/correctPhi.H index c975c9b37416e10a066bb578ac05b531a4217473..0854a68b8e3ae1b941dbdad26c244017efc04d8e 100644 --- a/applications/solvers/multiphase/interDyMFoam/correctPhi.H +++ b/applications/solvers/multiphase/interDyMFoam/correctPhi.H @@ -1,5 +1,5 @@ { -# include "continuityErrs.H" + #include "continuityErrs.H" volScalarField pcorr ( @@ -12,7 +12,7 @@ IOobject::NO_WRITE ), mesh, - dimensionedScalar("pcorr", pd.dimensions(), 0.0), + dimensionedScalar("pcorr", p.dimensions(), 0.0), pcorrTypes ); @@ -27,7 +27,7 @@ fvm::laplacian(rAUf, pcorr) == fvc::div(phi) ); - pcorrEqn.setReference(pdRefCell, pdRefValue); + pcorrEqn.setReference(pRefCell, pRefValue); pcorrEqn.solve(); if (nonOrth == nNonOrthCorr) @@ -36,5 +36,5 @@ } } -# include "continuityErrs.H" + #include "continuityErrs.H" } diff --git a/applications/solvers/multiphase/interDyMFoam/createFields.H b/applications/solvers/multiphase/interDyMFoam/createFields.H index bcceb9d748193843a3124b585b538497b61e9d22..905ba0d64656e7be4b5fa0acdcefd6710d31999f 100644 --- a/applications/solvers/multiphase/interDyMFoam/createFields.H +++ b/applications/solvers/multiphase/interDyMFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -92,47 +92,21 @@ incompressible::turbulenceModel::New(U, phi, twoPhaseProperties) ); - wordList pcorrTypes(pd.boundaryField().types()); + wordList pcorrTypes + ( + p.boundaryField().size(), + zeroGradientFvPatchScalarField::typeName + ); - for (label i=0; i<pd.boundaryField().size(); i++) + for (label i=0; i<p.boundaryField().size(); i++) { - if (pd.boundaryField()[i].fixesValue()) + if (p.boundaryField()[i].fixesValue()) { pcorrTypes[i] = fixedValueFvPatchScalarField::typeName; } } - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rho*(g & mesh.C()) - ); - - label pdRefCell = 0; - scalar pdRefValue = 0.0; - setRefCell(pd, mesh.solutionDict().subDict("PISO"), pdRefCell, pdRefValue); - + label pRefCell = 0; scalar pRefValue = 0.0; - - if (pd.needReference()) - { - pRefValue = readScalar - ( - mesh.solutionDict().subDict("PISO").lookup("pRefValue") - ); - - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } + setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue); diff --git a/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C index 046503a8c459abc2f1c6caeb958c39a2ee985668..466333ff3014a6fa3942a556846e6edd7ae49316 100644 --- a/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C +++ b/applications/solvers/multiphase/interDyMFoam/interDyMFoam.C @@ -86,9 +86,6 @@ int main(int argc, char *argv[]) << " s" << endl; } - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - if (mesh.changing() && correctPhi) { #include "correctPhi.H" @@ -114,18 +111,6 @@ int main(int argc, char *argv[]) #include "pEqn.H" } - p = pd + rho*gh; - - if (pd.needReference()) - { - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } - turbulence->correct(); runTime.write(); diff --git a/applications/solvers/multiphase/interDyMFoam/pEqn.H b/applications/solvers/multiphase/interDyMFoam/pEqn.H index f8ff18f60631c3cd66f02a8b9b4e8adc5ceb19e9..2af289a76f31beb1654acfde23592bb299346f1c 100644 --- a/applications/solvers/multiphase/interDyMFoam/pEqn.H +++ b/applications/solvers/multiphase/interDyMFoam/pEqn.H @@ -5,40 +5,40 @@ U = rAU*UEqn.H(); surfaceScalarField phiU("phiU", (fvc::interpolate(U) & mesh.Sf())); - phi = phiU + - ( - fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - )*rAUf*mesh.magSf(); - - if (pd.needReference()) + if (p.needReference()) { - fvc::makeRelative(phi, U); - adjustPhi(phi, U, pd); - fvc::makeAbsolute(phi, U); + fvc::makeRelative(phiU, U); + adjustPhi(phiU, U, p); + fvc::makeAbsolute(phiU, U); } + phi = phiU + + ( + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rAUf; + for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rAUf, pd) == fvc::div(phi) + fvm::laplacian(rAUf, p) == fvc::div(phi) ); - pdEqn.setReference(pdRefCell, pdRefValue); + pEqn.setReference(pRefCell, pRefValue); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi -= pdEqn.flux(); + phi -= pEqn.flux(); } } diff --git a/applications/solvers/multiphase/interFoam/UEqn.H b/applications/solvers/multiphase/interFoam/UEqn.H index 528e0aaafd892c2995fa94848c0d59b66af41942..0b1a9ac029d776dbd57da20f91c14da8ee88f5a7 100644 --- a/applications/solvers/multiphase/interFoam/UEqn.H +++ b/applications/solvers/multiphase/interFoam/UEqn.H @@ -24,10 +24,10 @@ == fvc::reconstruct ( - ( + fvc::interpolate(rho)*(g & mesh.Sf()) + + ( fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - - fvc::snGrad(pd) + - fvc::snGrad(p) ) * mesh.magSf() ) ); diff --git a/applications/solvers/multiphase/interFoam/correctPhi.H b/applications/solvers/multiphase/interFoam/correctPhi.H index 171e1670f47dbdf29d3904c47af7d196b706296e..0274b7e9ed8dc75b372db31efa743722a7dafc56 100644 --- a/applications/solvers/multiphase/interFoam/correctPhi.H +++ b/applications/solvers/multiphase/interFoam/correctPhi.H @@ -1,11 +1,15 @@ { -# include "continuityErrs.H" + #include "continuityErrs.H" - wordList pcorrTypes(pd.boundaryField().types()); + wordList pcorrTypes + ( + p.boundaryField().size(), + zeroGradientFvPatchScalarField::typeName + ); - for (label i=0; i<pd.boundaryField().size(); i++) + for (label i=0; i<p.boundaryField().size(); i++) { - if (pd.boundaryField()[i].fixesValue()) + if (p.boundaryField()[i].fixesValue()) { pcorrTypes[i] = fixedValueFvPatchScalarField::typeName; } @@ -22,7 +26,7 @@ IOobject::NO_WRITE ), mesh, - dimensionedScalar("pcorr", pd.dimensions(), 0.0), + dimensionedScalar("pcorr", p.dimensions(), 0.0), pcorrTypes ); @@ -37,7 +41,7 @@ fvm::laplacian(rUAf, pcorr) == fvc::div(phi) ); - pcorrEqn.setReference(pdRefCell, pdRefValue); + pcorrEqn.setReference(pRefCell, pRefValue); pcorrEqn.solve(); if (nonOrth == nNonOrthCorr) @@ -46,5 +50,5 @@ } } -# include "continuityErrs.H" + #include "continuityErrs.H" } diff --git a/applications/solvers/multiphase/interFoam/createFields.H b/applications/solvers/multiphase/interFoam/createFields.H index 70637747528a9851a51dad21b021fead0adc3761..622d5d578c977d745f94419f993145222842d8a9 100644 --- a/applications/solvers/multiphase/interFoam/createFields.H +++ b/applications/solvers/multiphase/interFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -83,45 +83,9 @@ ); - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - - - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rho*gh - ); - - - label pdRefCell = 0; - scalar pdRefValue = 0.0; - setRefCell(pd, mesh.solutionDict().subDict("PISO"), pdRefCell, pdRefValue); - + label pRefCell = 0; scalar pRefValue = 0.0; - - if (pd.needReference()) - { - pRefValue = readScalar - ( - mesh.solutionDict().subDict("PISO").lookup("pRefValue") - ); - - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } + setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue); // Construct interface from alpha1 distribution diff --git a/applications/solvers/multiphase/interFoam/interFoam.C b/applications/solvers/multiphase/interFoam/interFoam.C index 4dd86bd8f72fafbdbcb9db63cea841d79b6d1d26..b111351c39dbaef4cbb3eaaa3ef08707221baf14 100644 --- a/applications/solvers/multiphase/interFoam/interFoam.C +++ b/applications/solvers/multiphase/interFoam/interFoam.C @@ -89,18 +89,6 @@ int main(int argc, char *argv[]) #include "continuityErrs.H" - p = pd + rho*gh; - - if (pd.needReference()) - { - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } - turbulence->correct(); runTime.write(); diff --git a/applications/solvers/multiphase/interFoam/pEqn.H b/applications/solvers/multiphase/interFoam/pEqn.H index e5afbb8e4f24606318afe045faac8554960b04e5..7aa172b858473b0f5e5c0934e5690233ef60755a 100644 --- a/applications/solvers/multiphase/interFoam/pEqn.H +++ b/applications/solvers/multiphase/interFoam/pEqn.H @@ -7,38 +7,39 @@ surfaceScalarField phiU ( "phiU", - (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) ); + adjustPhi(phiU, U, p); + phi = phiU + ( - fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - )*rUAf*mesh.magSf(); - - adjustPhi(phi, U, pd); + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rUAf; for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rUAf, pd) == fvc::div(phi) + fvm::laplacian(rUAf, p) == fvc::div(phi) ); - pdEqn.setReference(pdRefCell, pdRefValue); + pEqn.setReference(pRefCell, pRefValue); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi -= pdEqn.flux(); + phi -= pEqn.flux(); } } diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/UEqn.H b/applications/solvers/multiphase/interPhaseChangeFoam/UEqn.H index c59137c7b87a9be3c799e03567dc8209341798f5..757e37a2cfdc7d9dbdacd0621120452219ac2a2c 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/UEqn.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/UEqn.H @@ -25,10 +25,10 @@ == fvc::reconstruct ( - ( + fvc::interpolate(rho)*(g & mesh.Sf()) + + ( fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - - fvc::snGrad(pd) + - fvc::snGrad(p) ) * mesh.magSf() ) ); diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H b/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H index 171e1670f47dbdf29d3904c47af7d196b706296e..17377302f0ecd97c2ee04e98cea8bcfc88ab4921 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/correctPhi.H @@ -1,11 +1,15 @@ { -# include "continuityErrs.H" + #include "continuityErrs.H" - wordList pcorrTypes(pd.boundaryField().types()); + wordList pcorrTypes + ( + p.boundaryField().size(), + zeroGradientFvPatchScalarField::typeName + ); - for (label i=0; i<pd.boundaryField().size(); i++) + for (label i=0; i<p.boundaryField().size(); i++) { - if (pd.boundaryField()[i].fixesValue()) + if (p.boundaryField()[i].fixesValue()) { pcorrTypes[i] = fixedValueFvPatchScalarField::typeName; } @@ -22,7 +26,7 @@ IOobject::NO_WRITE ), mesh, - dimensionedScalar("pcorr", pd.dimensions(), 0.0), + dimensionedScalar("pcorr", p.dimensions(), 0.0), pcorrTypes ); @@ -37,7 +41,7 @@ fvm::laplacian(rUAf, pcorr) == fvc::div(phi) ); - pcorrEqn.setReference(pdRefCell, pdRefValue); + pcorrEqn.setReference(pRefCell, pRefValue); pcorrEqn.solve(); if (nonOrth == nNonOrthCorr) diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H b/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H index 5e727dea3eca4828580cadaf9a10531a7719fd62..98d166214b2ca5d34fa2aa554dfab679e16df7ee 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -66,26 +66,9 @@ rho.oldTime(); - label pdRefCell = 0; - scalar pdRefValue = 0.0; - setRefCell(pd, mesh.solutionDict().subDict("PISO"), pdRefCell, pdRefValue); - - Info<< "Calculating field g.h" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rho*gh - ); + label pRefCell = 0; + scalar pRefValue = 0.0; + setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue); // Construct interface from alpha1 distribution diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H b/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H index 0037d71cf52ce5dd50dd298767b27987d4e03e38..3c164cc574311612e838abda97310fd3959e9e72 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H +++ b/applications/solvers/multiphase/interPhaseChangeFoam/pEqn.H @@ -11,13 +11,13 @@ + fvc::ddtPhiCorr(rUA, rho, U, phi) ); + adjustPhi(phiU, U, p); + phi = phiU + ( - fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) - - ghf*fvc::snGrad(rho) - )*rUAf*mesh.magSf(); - - adjustPhi(phi, U, pd); + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rUAf; Pair<tmp<volScalarField> > vDotP = twoPhaseProperties->vDotP(); const volScalarField& vDotcP = vDotP[0](); @@ -25,31 +25,29 @@ for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvc::div(phi) - fvm::laplacian(rUAf, pd) - + (vDotvP - vDotcP)*(rho*gh - pSat) + fvm::Sp(vDotvP - vDotcP, pd) + fvc::div(phi) - fvm::laplacian(rUAf, p) + - (vDotvP - vDotcP)*pSat + fvm::Sp(vDotvP - vDotcP, p) ); - pdEqn.setReference(pdRefCell, pdRefValue); + pEqn.setReference(pRefCell, pRefValue); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi += pdEqn.flux(); + phi += pEqn.flux(); } } - p = pd + rho*gh; - U += rUA*fvc::reconstruct((phi - phiU)/rUAf); U.correctBoundaryConditions(); } diff --git a/applications/solvers/multiphase/multiphaseInterFoam/UEqn.H b/applications/solvers/multiphase/multiphaseInterFoam/UEqn.H index 5ce0c0c08847df8fd9b99161e8feb3962b3006bf..17686b592c4750443414cec36260eaa98f1a3205 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/UEqn.H +++ b/applications/solvers/multiphase/multiphaseInterFoam/UEqn.H @@ -24,10 +24,10 @@ == fvc::reconstruct ( - ( + fvc::interpolate(rho)*(g & mesh.Sf()) + + ( mixture.surfaceTensionForce() - - ghf*fvc::snGrad(rho) - - fvc::snGrad(pd) + - fvc::snGrad(p) ) * mesh.magSf() ) ); diff --git a/applications/solvers/multiphase/multiphaseInterFoam/createFields.H b/applications/solvers/multiphase/multiphaseInterFoam/createFields.H index 07650fd4ddaf26054f94c303fdb1259f525244a3..fb6449629402a36f340e711e6ef89d7b64da8d96 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/createFields.H +++ b/applications/solvers/multiphase/multiphaseInterFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -45,45 +45,9 @@ rho.oldTime(); - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("ghf", g & mesh.Cf()); - - - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rho*gh - ); - - - label pdRefCell = 0; - scalar pdRefValue = 0.0; - setRefCell(pd, mesh.solutionDict().subDict("PISO"), pdRefCell, pdRefValue); - + label pRefCell = 0; scalar pRefValue = 0.0; - - if (pd.needReference()) - { - pRefValue = readScalar - ( - mesh.solutionDict().subDict("PISO").lookup("pRefValue") - ); - - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } + setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue); // Construct incompressible turbulence model diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C index c5fdb5f3c2e36d8ae693a7aead0ee0a71168d482..b6968ca1a11c4a8b664b2c1721c0d608a884dad4 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C @@ -81,18 +81,6 @@ int main(int argc, char *argv[]) #include "continuityErrs.H" - p = pd + rho*gh; - - if (pd.needReference()) - { - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } - turbulence->correct(); runTime.write(); diff --git a/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H b/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H index 3fd1e3e60614032c75793b4b5767387e6ac9ab84..4bec77f950d54fadbefe8507abe3ed8699476c54 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H +++ b/applications/solvers/multiphase/multiphaseInterFoam/pEqn.H @@ -10,35 +10,35 @@ (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) ); + adjustPhi(phiU, U, p); + phi = phiU + ( - mixture.surfaceTensionForce() - - ghf*fvc::snGrad(rho) - )*rUAf*mesh.magSf(); - - adjustPhi(phi, U, pd); + mixture.surfaceTensionForce()*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rUAf; for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rUAf, pd) == fvc::div(phi) + fvm::laplacian(rUAf, p) == fvc::div(phi) ); - pdEqn.setReference(pdRefCell, pdRefValue); + pEqn.setReference(pRefCell, pRefValue); if (corr == nCorr-1) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } if (nonOrth == nNonOrthCorr) { - phi -= pdEqn.flux(); + phi -= pEqn.flux(); } } diff --git a/applications/solvers/multiphase/settlingFoam/UEqn.H b/applications/solvers/multiphase/settlingFoam/UEqn.H index ac4c18ab19dc4b70fe0770f23e0a24bc4af3eebd..04e9194363d9ee4edc6aaa65e032fcebcaeddfca 100644 --- a/applications/solvers/multiphase/settlingFoam/UEqn.H +++ b/applications/solvers/multiphase/settlingFoam/UEqn.H @@ -22,10 +22,8 @@ == fvc::reconstruct ( - ( - - ghf*fvc::snGrad(rho) - - fvc::snGrad(p) - )*mesh.magSf() + fvc::interpolate(rho)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() ) ); } diff --git a/applications/solvers/multiphase/settlingFoam/createFields.H b/applications/solvers/multiphase/settlingFoam/createFields.H index b13649c3124ddaf5ba06c5e13e3b090b746798ec..916acde39ed5264a9f7bc765d3ec445b83519637 100644 --- a/applications/solvers/multiphase/settlingFoam/createFields.H +++ b/applications/solvers/multiphase/settlingFoam/createFields.H @@ -128,7 +128,7 @@ alpha.boundaryField().types() ); -# include "compressibleCreatePhi.H" + #include "compressibleCreatePhi.H" label pRefCell = 0; @@ -337,6 +337,3 @@ ), mut + mul ); - - Info<< "Calculating field (g.h)f\n" << endl; - surfaceScalarField ghf = surfaceScalarField("ghf", g & mesh.Cf()); diff --git a/applications/solvers/multiphase/settlingFoam/pEqn.H b/applications/solvers/multiphase/settlingFoam/pEqn.H index 65b954c6da84e1fe6b98ee5a99f295f7a14ff324..b4fc05b32ab56f04646427310478e9cc92429b11 100644 --- a/applications/solvers/multiphase/settlingFoam/pEqn.H +++ b/applications/solvers/multiphase/settlingFoam/pEqn.H @@ -15,7 +15,7 @@ phi = ); surfaceScalarField phiU("phiU", phi); -phi -= ghf*fvc::snGrad(rho)*rUAf*mesh.magSf(); +phi += fvc::interpolate(rho)*(g & mesh.Sf())*rUAf; for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { diff --git a/applications/solvers/multiphase/settlingFoam/settlingFoam.C b/applications/solvers/multiphase/settlingFoam/settlingFoam.C index ad8dbe3646cf2deb96e6affbdf75d155f2c90d37..e68ddbb0f0710ab911cc6855763e624c818c9883 100644 --- a/applications/solvers/multiphase/settlingFoam/settlingFoam.C +++ b/applications/solvers/multiphase/settlingFoam/settlingFoam.C @@ -43,17 +43,15 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "initContinuityErrs.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -61,27 +59,27 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readPISOControls.H" -# include "compressibleCourantNo.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" -# include "rhoEqn.H" + #include "rhoEqn.H" -# include "calcVdj.H" + #include "calcVdj.H" -# include "UEqn.H" + #include "UEqn.H" -# include "alphaEqn.H" + #include "alphaEqn.H" -# include "correctViscosity.H" + #include "correctViscosity.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" } -# include "kEpsilon.H" + #include "kEpsilon.H" runTime.write(); diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/UEqn.H b/applications/solvers/multiphase/twoLiquidMixingFoam/UEqn.H index 5a945697caa2ffa30846b7fc1831c8b92dbde7fb..18b915b16bde8f4f8bda4b5a13daf8d99b3b74cb 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/UEqn.H +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/UEqn.H @@ -14,7 +14,14 @@ //- fvc::div(muEff*(fvc::interpolate(dev(fvc::grad(U))) & mesh.Sf())) ); - UEqn.relax(); + if (oCorr == nOuterCorr-1) + { + UEqn.relax(1); + } + else + { + UEqn.relax(); + } if (momentumPredictor) { @@ -22,9 +29,11 @@ ( UEqn == - -fvc::reconstruct + fvc::reconstruct ( - mesh.magSf()*(fvc::snGrad(pd) + ghf*fvc::snGrad(rho)) - ) + fvc::interpolate(rho)*(g & mesh.Sf()) + - mesh.magSf()*fvc::snGrad(p) + ), + mesh.solver(oCorr == nOuterCorr-1 ? "UFinal" : "U") ); } diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/alphaEqn.H b/applications/solvers/multiphase/twoLiquidMixingFoam/alphaEqn.H index c12602536870ab39e1a63a81062b143d5d360c00..8194753c8fca0674fc224b189f88851e4cb24d34 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/alphaEqn.H +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/alphaEqn.H @@ -3,7 +3,12 @@ ( fvm::ddt(alpha1) + fvm::div(phi, alpha1) - - fvm::laplacian(Dab, alpha1) + //- fvm::Sp(fvc::div(phi), alpha1) + - fvm::laplacian + ( + Dab + alphatab*turbulence->nut(), alpha1, + "laplacian(Dab,alpha1)" + ) ); alpha1Eqn.solve(); diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/createFields.H b/applications/solvers/multiphase/twoLiquidMixingFoam/createFields.H index a38135dc19a968cd10cf38beec6b3a35a4e4165b..b94bf6c23e65cb80f5557f2bccd1ecd8e4c23946 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/createFields.H +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/createFields.H @@ -1,9 +1,9 @@ - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -40,7 +40,7 @@ mesh ); -# include "createPhi.H" + #include "createPhi.H" Info<< "Reading transportProperties\n" << endl; twoPhaseMixture twoPhaseProperties(U, phi); @@ -50,6 +50,9 @@ dimensionedScalar Dab(twoPhaseProperties.lookup("Dab")); + // Read the reciprocal of the turbulent Schmidt number + dimensionedScalar alphatab(twoPhaseProperties.lookup("alphatab")); + // Need to store rho for ddt(rho, U) volScalarField rho("rho", alpha1*rho1 + (scalar(1) - alpha1)*rho2); rho.oldTime(); @@ -72,45 +75,9 @@ ); - Info<< "Calculating field g.h\n" << endl; - volScalarField gh("gh", g & mesh.C()); - surfaceScalarField ghf("gh", g & mesh.Cf()); - - - volScalarField p - ( - IOobject - ( - "p", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - pd + rho*gh - ); - - - label pdRefCell = 0; - scalar pdRefValue = 0.0; - setRefCell(pd, mesh.solutionDict().subDict("PISO"), pdRefCell, pdRefValue); - + label pRefCell = 0; scalar pRefValue = 0.0; - - if (pd.needReference()) - { - pRefValue = readScalar - ( - mesh.solutionDict().subDict("PISO").lookup("pRefValue") - ); - - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); - } + setRefCell(p, mesh.solutionDict().subDict("PIMPLE"), pRefCell, pRefValue); // Construct incompressible turbulence model diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H b/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H index eaa0cef6294ad14b8b4bfdc7b54201ae811ae26d..7ba3cdba8a6a2badce20af6292008e62487f23b7 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/pEqn.H @@ -7,26 +7,37 @@ surfaceScalarField phiU ( "phiU", - (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) + (fvc::interpolate(U) & mesh.Sf()) + + fvc::ddtPhiCorr(rUA, rho, U, phi) ); - phi = phiU - ghf*fvc::snGrad(rho)*rUAf*mesh.magSf(); - - adjustPhi(phi, U, pd); + phi = phiU + fvc::interpolate(rho)*(g & mesh.Sf())*rUAf; for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rUAf, pd) == fvc::div(phi) + fvm::laplacian(rUAf, p) == fvc::div(phi) ); - pdEqn.setReference(pdRefCell, pdRefValue); - pdEqn.solve(); + pEqn.setReference(pRefCell, pRefValue); + + if + ( + corr == nCorr-1 + && nonOrth == nNonOrthCorr + ) + { + pEqn.solve(mesh.solver(p.name() + "Final")); + } + else + { + pEqn.solve(mesh.solver(p.name())); + } if (nonOrth == nNonOrthCorr) { - phi -= pdEqn.flux(); + phi -= pEqn.flux(); } } diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C index 1caf455708079ff2f4f04733c388aa070393ba8a..63991f149e513901c1e15dda5effeeda7567ca28 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C @@ -40,53 +40,52 @@ Description int main(int argc, char *argv[]) { - -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "initContinuityErrs.H" -# include "createFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "readPIMPLEControls.H" + #include "initContinuityErrs.H" + #include "createFields.H" + #include "readTimeControls.H" + #include "CourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; - while (runTime.loop()) + while (runTime.run()) { - Info<< "Time = " << runTime.timeName() << nl << endl; + #include "readPIMPLEControls.H" + #include "readTimeControls.H" + #include "CourantNo.H" + #include "setDeltaT.H" -# include "readPISOControls.H" -# include "CourantNo.H" + runTime++; - twoPhaseProperties.correct(); + Info<< "Time = " << runTime.timeName() << nl << endl; -# include "alphaEqn.H" + // --- Pressure-velocity PIMPLE corrector loop + for (int oCorr=0; oCorr<nOuterCorr; oCorr++) + { + twoPhaseProperties.correct(); -# include "UEqn.H" + #include "alphaEqn.H" - // --- PISO loop - for (int corr=0; corr<nCorr; corr++) - { -# include "pEqn.H" - } + #include "UEqn.H" -# include "continuityErrs.H" + // --- PISO loop + for (int corr=0; corr<nCorr; corr++) + { + #include "pEqn.H" + } - p = pd + rho*gh; + #include "continuityErrs.H" - if (pd.needReference()) - { - p += dimensionedScalar - ( - "p", - p.dimensions(), - pRefValue - getRefCellValue(p, pdRefCell) - ); + turbulence->correct(); } - turbulence->correct(); - runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C index ce3fb2aa551eeb45011a373277d6d8e169c01b7e..a28d929578081eb03bee4d6599b6575dc40341b7 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C @@ -47,59 +47,58 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "readPPProperties.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "CourantNo.H" + #include "setInitialDeltaT.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "readPPProperties.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "CourantNo.H" -# include "setInitialDeltaT.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readTwoPhaseEulerFoamControls.H" -# include "CourantNos.H" -# include "setDeltaT.H" + #include "readTwoPhaseEulerFoamControls.H" + #include "CourantNos.H" + #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; -# include "alphaEqn.H" + #include "alphaEqn.H" -# include "liftDragCoeffs.H" + #include "liftDragCoeffs.H" -# include "UEqns.H" + #include "UEqns.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) { -# include "pEqn.H" + #include "pEqn.H" if (correctAlpha && corr<nCorr-1) { -# include "alphaEqn.H" + #include "alphaEqn.H" } } -# include "DDtU.H" + #include "DDtU.H" -# include "kEpsilon.H" + #include "kEpsilon.H" if (kineticTheory.on()) { kineticTheory.solve(); nuEffa += kineticTheory.mua()/rhoa; } -# include "write.H" + #include "write.H" Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C index 4574ef7f1c5cc46bf4ddbee646b4f8ed4eb9e003..e7f432d29d8f25b3ddb8837309c371ddbe5435ee 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C @@ -43,17 +43,16 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readMechanicalProperties.H" + #include "readThermalProperties.H" + #include "readSolidDisplacementFoamControls.H" + #include "createFields.H" -# include "createTime.H" -# include "createMesh.H" -# include "readMechanicalProperties.H" -# include "readThermalProperties.H" -# include "readSolidDisplacementFoamControls.H" -# include "createFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nCalculating displacement field\n" << endl; @@ -61,7 +60,7 @@ int main(int argc, char *argv[]) { Info<< "Iteration: " << runTime.value() << nl << endl; -# include "readSolidDisplacementFoamControls.H" + #include "readSolidDisplacementFoamControls.H" int iCorr = 0; scalar initialResidual = 0; @@ -91,7 +90,7 @@ int main(int argc, char *argv[]) const volScalarField& T = Tptr(); DEqn += fvc::grad(threeKalpha*T); } - + //DEqn.setComponentReference(1, 0, vector::X, 0); //DEqn.setComponentReference(1, 0, vector::Z, 0); @@ -123,7 +122,7 @@ int main(int argc, char *argv[]) } while (initialResidual > convergenceTolerance && ++iCorr < nCorr); -# include "calculateStress.H" + #include "calculateStress.H" Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/test/DynamicField/DynamicFieldTest.C b/applications/test/DynamicField/DynamicFieldTest.C new file mode 100644 index 0000000000000000000000000000000000000000..19ba78109d84db17ccdd443ac409db03bc5e30c2 --- /dev/null +++ b/applications/test/DynamicField/DynamicFieldTest.C @@ -0,0 +1,80 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + +\*---------------------------------------------------------------------------*/ + +#include "DynamicField.H" +#include "IOstreams.H" +#include "labelField.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Main program: + +int main(int argc, char *argv[]) +{ + { + DynamicField<label> dl(10); + Pout<< "null construct dl:" << dl << endl; + dl.append(3); + dl.append(2); + dl.append(1); + Pout<< "appending : dl:" << dl << endl; + } + + { + DynamicField<label> dl(IStringStream("(1 2 3)")()); + Pout<< "reading : dl:" << dl << endl; + } + + { + labelField lf(3); + lf[0] = 1; + lf[1] = 2; + lf[2] = 3; + DynamicField<label> dl; + dl = lf; + Pout<< "assigning from labelField : dl:" << dl << endl; + } + + { + labelField lf(3); + lf[0] = 1; + lf[1] = 2; + lf[2] = 3; + DynamicField<label> dl(lf); + Pout<< "constructing from labelField dl:" << dl << endl; + } + + + Info<< "\nEnd\n"; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/test/DynamicField/Make/files b/applications/test/DynamicField/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..bcf6af7eceec7845507b794f6183bc83694839b6 --- /dev/null +++ b/applications/test/DynamicField/Make/files @@ -0,0 +1,3 @@ +DynamicFieldTest.C + +EXE = $(FOAM_USER_APPBIN)/DynamicFieldTest diff --git a/applications/test/DynamicField/Make/options b/applications/test/DynamicField/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..6a9e9810b3d5ce6684bdaf03143933480ff45e42 --- /dev/null +++ b/applications/test/DynamicField/Make/options @@ -0,0 +1,2 @@ +/* EXE_INC = -I$(LIB_SRC)/cfdTools/include */ +/* EXE_LIBS = -lfiniteVolume */ diff --git a/applications/test/directMappedPatch/Make/files b/applications/test/directMappedPatch/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..65f39a47b8e09776cb7c8259d27f73a15663e335 --- /dev/null +++ b/applications/test/directMappedPatch/Make/files @@ -0,0 +1,4 @@ + +testDirectMappedPatch.C + +EXE = $(FOAM_USER_APPBIN)/testDirectMappedPatch diff --git a/applications/test/directMappedPatch/Make/options b/applications/test/directMappedPatch/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..d76bd10c8fa52345df9ce1be79cdeae2b41dde84 --- /dev/null +++ b/applications/test/directMappedPatch/Make/options @@ -0,0 +1,6 @@ +EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -lfiniteVolume diff --git a/applications/test/directMappedPatch/testDirectMappedPatch.C b/applications/test/directMappedPatch/testDirectMappedPatch.C new file mode 100644 index 0000000000000000000000000000000000000000..dd27ff6955d92b5adf9023913b2966b0ee38f748 --- /dev/null +++ b/applications/test/directMappedPatch/testDirectMappedPatch.C @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + testDirectMappedPatch + +Description + Test direct mapped b.c. by mapping face centres (mesh.C().boundaryField()). + +\*---------------------------------------------------------------------------*/ + + +#include "argList.H" +#include "fvMesh.H" +#include "volFields.H" +#include "meshTools.H" +#include "Time.H" +#include "OFstream.H" +#include "volFields.H" +#include "directMappedFixedValueFvPatchFields.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +// Main program: + +int main(int argc, char *argv[]) +{ +# include "addTimeOptions.H" +# include "setRootCase.H" +# include "createTime.H" +# include "createMesh.H" + + wordList patchFieldTypes + ( + mesh.boundaryMesh().size(), + calculatedFvPatchVectorField::typeName + ); + + forAll(mesh.boundaryMesh(), patchI) + { + if (isA<directMappedPolyPatch>(mesh.boundaryMesh()[patchI])) + { + patchFieldTypes[patchI] = + directMappedFixedValueFvPatchVectorField::typeName; + } + } + + Pout<< "patchFieldTypes:" << patchFieldTypes << endl; + + volVectorField cc + ( + IOobject + ( + "cc", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + mesh, + dimensionedVector("zero", dimLength, vector::zero), + patchFieldTypes + ); + + cc.internalField() = mesh.C().internalField(); + cc.boundaryField().updateCoeffs(); + + forAll(cc.boundaryField(), patchI) + { + if + ( + isA<directMappedFixedValueFvPatchVectorField> + ( + cc.boundaryField()[patchI] + ) + ) + { + Pout<< "Detected a directMapped patch:" << patchI << endl; + + OFstream str(mesh.boundaryMesh()[patchI].name() + ".obj"); + Pout<< "Writing mapped values to " << str.name() << endl; + + label vertI = 0; + const fvPatchVectorField& fvp = cc.boundaryField()[patchI]; + + forAll(fvp, i) + { + meshTools::writeOBJ(str, fvp.patch().Cf()[i]); + vertI++; + meshTools::writeOBJ(str, fvp[i]); + vertI++; + str << "l " << vertI-1 << ' ' << vertI << nl; + } + } + } + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/test/extendedStencil/Make/files b/applications/test/extendedStencil/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..236668cde8f9c8da6ac1f75d1e0d9de0f36ad04f --- /dev/null +++ b/applications/test/extendedStencil/Make/files @@ -0,0 +1,4 @@ + +testExtendedStencil.C + +EXE = $(FOAM_USER_APPBIN)/testExtendedStencil diff --git a/applications/test/extendedStencil/Make/options b/applications/test/extendedStencil/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..b733f6ac04019776e5ae1378c65835fcd6209972 --- /dev/null +++ b/applications/test/extendedStencil/Make/options @@ -0,0 +1,6 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude + +EXE_LIBS = \ + -lfiniteVolume diff --git a/applications/test/extendedStencil/testExtendedStencil.C b/applications/test/extendedStencil/testExtendedStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..b8db2b89bf993552dd8582ba0c77c2cef58b121a --- /dev/null +++ b/applications/test/extendedStencil/testExtendedStencil.C @@ -0,0 +1,499 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + testExtendedStencil + +Description + Test app for determining extended stencil. + +\*---------------------------------------------------------------------------*/ + +#include "argList.H" +#include "fvMesh.H" +#include "volFields.H" +#include "Time.H" +#include "mapDistribute.H" +#include "OFstream.H" +#include "meshTools.H" +//#include "FECCellToFaceStencil.H" +//#include "CFCCellToFaceStencil.H" +//#include "CPCCellToFaceStencil.H" +//#include "CECCellToFaceStencil.H" +//#include "extendedCentredCellToFaceStencil.H" +//#include "extendedUpwindCellToFaceStencil.H" + +//#include "centredCFCCellToFaceStencilObject.H" +//#include "centredFECCellToFaceStencilObject.H" +//#include "centredCPCCellToFaceStencilObject.H" +//#include "centredCECCellToFaceStencilObject.H" + +//#include "upwindFECCellToFaceStencilObject.H" +//#include "upwindCPCCellToFaceStencilObject.H" +//#include "upwindCECCellToFaceStencilObject.H" + +//#include "upwindCFCCellToFaceStencilObject.H" +#include "centredCFCFaceToCellStencilObject.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +void writeStencilOBJ +( + const fileName& fName, + const point& fc, + const List<point>& stencilCc +) +{ + OFstream str(fName); + label vertI = 0; + + meshTools::writeOBJ(str, fc); + vertI++; + + forAll(stencilCc, i) + { + meshTools::writeOBJ(str, stencilCc[i]); + vertI++; + str << "l 1 " << vertI << nl; + } +} + + +// Stats +void writeStencilStats(const labelListList& stencil) +{ + label sumSize = 0; + label nSum = 0; + label minSize = labelMax; + label maxSize = labelMin; + + forAll(stencil, i) + { + const labelList& sCells = stencil[i]; + + if (sCells.size() > 0) + { + sumSize += sCells.size(); + nSum++; + minSize = min(minSize, sCells.size()); + maxSize = max(maxSize, sCells.size()); + } + } + reduce(sumSize, sumOp<label>()); + reduce(nSum, sumOp<label>()); + sumSize /= nSum; + + reduce(minSize, minOp<label>()); + reduce(maxSize, maxOp<label>()); + + Info<< "Stencil size :" << nl + << " average : " << sumSize << nl + << " min : " << minSize << nl + << " max : " << maxSize << nl + << endl; +} + + +// Main program: + +int main(int argc, char *argv[]) +{ +# include "addTimeOptions.H" +# include "setRootCase.H" +# include "createTime.H" + + // Get times list + instantList Times = runTime.times(); +# include "checkTimeOptions.H" + runTime.setTime(Times[startTime], startTime); +# include "createMesh.H" + + // Force calculation of extended edge addressing + const labelListList& edgeFaces = mesh.edgeFaces(); + const labelListList& edgeCells = mesh.edgeCells(); + const labelListList& pointCells = mesh.pointCells(); + Info<< "dummy:" << edgeFaces.size() + edgeCells.size() + pointCells.size() + << endl; + + + // Centred, semi-extended stencil (edge cells only) + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// { +// //const FECCellToFaceStencil cfcStencil(mesh); +// //const extendedCentredCellToFaceStencil addressing +// //( +// // cfcStencil +// //); +// const extendedCentredStencil& addressing = +// centredFECCellToFaceStencilObject::New +// ( +// mesh +// ); +// +// Info<< "faceEdgeCell:" << endl; +// writeStencilStats(addressing.stencil()); +// +// // Collect stencil cell centres +// List<List<point> > stencilPoints(mesh.nFaces()); +// addressing.collectData +// ( +// mesh.C(), +// stencilPoints +// ); +// +// forAll(stencilPoints, faceI) +// { +// writeStencilOBJ +// ( +// runTime.path()/"faceEdgeCell" + Foam::name(faceI) + ".obj", +// mesh.faceCentres()[faceI], +// stencilPoints[faceI] +// ); +// } +// } + + + + +// // Centred, face stencil +// // ~~~~~~~~~~~~~~~~~~~~~ +// +// { +// const extendedCentredCellToFaceStencil& addressing = +// centredCFCCellToFaceStencilObject::New +// ( +// mesh +// ); +// +// Info<< "cellFaceCell:" << endl; +// writeStencilStats(addressing.stencil()); +// +// +// //// Do some interpolation. +// //{ +// // const labelListList& stencil = addressing.stencil(); +// // List<List<scalar> > stencilWeights(stencil.size()); +// // forAll(stencil, faceI) +// // { +// // const labelList& fStencil = stencil[faceI]; +// // +// // if (fStencil.size() > 0) +// // { +// // // Uniform weights +// // stencilWeights[faceI] = scalarList +// // ( +// // fStencil.size(), +// // 1.0/fStencil.size() +// // ); +// // } +// // } +// // +// // tmp<surfaceVectorField> tfc +// // ( +// // addressing.weightedSum(mesh.C(), stencilWeights) +// // ); +// //} +// +// +// // Collect stencil cell centres +// List<List<point> > stencilPoints(mesh.nFaces()); +// addressing.collectData +// ( +// mesh.C(), +// stencilPoints +// ); +// +// forAll(stencilPoints, faceI) +// { +// if (stencilPoints[faceI].size() >= 15) +// { +// writeStencilOBJ +// ( +// runTime.path()/"centredFace" + Foam::name(faceI) + ".obj", +// mesh.faceCentres()[faceI], +// stencilPoints[faceI] +// ); +// } +// } +// } + + +// // Centred, point stencil +// // ~~~~~~~~~~~~~~~~~~~~~~ +// +// { +// //const extendedCentredCellToFaceStencil& addressing = +// //centredCPCStencilObject::New +// //( +// // mesh +// //); +// // +// //Info<< "cellPointCell:" << endl; +// //writeStencilStats(addressing.stencil()); +// // +// // +// //// Collect stencil cell centres +// //List<List<point> > stencilPoints(mesh.nFaces()); +// //addressing.collectData +// //( +// // mesh.C(), +// // stencilPoints +// //); +// // +// //forAll(stencilPoints, faceI) +// //{ +// // writeStencilOBJ +// // ( +// // runTime.path()/"centredPoint" + Foam::name(faceI) + ".obj", +// // mesh.faceCentres()[faceI], +// // stencilPoints[faceI] +// // ); +// //} +// } + + + +// // Centred, edge stencil +// // ~~~~~~~~~~~~~~~~~~~~~~ +// +// { +// //const extendedCentredCellToFaceStencil& addressing = +// //centredCECStencilObject::New +// //( +// // mesh +// //); +// // +// //Info<< "cellEdgeCell:" << endl; +// //writeStencilStats(addressing.stencil()); +// // +// // +// //// Collect stencil cell centres +// //List<List<point> > stencilPoints(mesh.nFaces()); +// //addressing.collectData +// //( +// // mesh.C(), +// // stencilPoints +// //); +// // +// //forAll(stencilPoints, faceI) +// //{ +// // writeStencilOBJ +// // ( +// // runTime.path()/"centredEdge" + Foam::name(faceI) + ".obj", +// // mesh.faceCentres()[faceI], +// // stencilPoints[faceI] +// // ); +// //} +// } + + + + // Upwind, semi-extended stencil + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + //{ + // const extendedUpwindCellToFaceStencil& addressing = + // upwindFECCellToFaceStencilObject::New + // ( + // mesh, + // 0.5 + // ); + // + // Info<< "upwind-faceEdgeCell:" << endl; + // writeStencilStats(addressing.ownStencil()); + // + // { + // // Collect stencil cell centres + // List<List<point> > ownPoints(mesh.nFaces()); + // addressing.collectData + // ( + // addressing.ownMap(), + // addressing.ownStencil(), + // mesh.C(), + // ownPoints + // ); + // + // forAll(ownPoints, faceI) + // { + // writeStencilOBJ + // ( + // runTime.path()/"ownFEC" + Foam::name(faceI) + ".obj", + // mesh.faceCentres()[faceI], + // ownPoints[faceI] + // ); + // } + // } + // { + // // Collect stencil cell centres + // List<List<point> > neiPoints(mesh.nFaces()); + // addressing.collectData + // ( + // addressing.neiMap(), + // addressing.neiStencil(), + // mesh.C(), + // neiPoints + // ); + // + // forAll(neiPoints, faceI) + // { + // writeStencilOBJ + // ( + // runTime.path()/"neiFEC" + Foam::name(faceI) + ".obj", + // mesh.faceCentres()[faceI], + // neiPoints[faceI] + // ); + // } + // } + //} + + + + // Upwind, extended stencil + // ~~~~~~~~~~~~~~~~~~~~~~~~ + + //{ + // const extendedUpwindCellToFaceStencil& addressing = + // upwindCFCCellToFaceStencilObject::New + // ( + // mesh, + // 0.5 + // ); + // + // Info<< "upwind-cellFaceCell:" << endl; + // writeStencilStats(addressing.ownStencil()); + // + // { + // // Collect stencil cell centres + // List<List<point> > ownPoints(mesh.nFaces()); + // addressing.collectData + // ( + // addressing.ownMap(), + // addressing.ownStencil(), + // mesh.C(), + // ownPoints + // ); + // + // forAll(ownPoints, faceI) + // { + // writeStencilOBJ + // ( + // runTime.path()/"ownCFC" + Foam::name(faceI) + ".obj", + // mesh.faceCentres()[faceI], + // ownPoints[faceI] + // ); + // } + // } + // { + // // Collect stencil cell centres + // List<List<point> > neiPoints(mesh.nFaces()); + // addressing.collectData + // ( + // addressing.neiMap(), + // addressing.neiStencil(), + // mesh.C(), + // neiPoints + // ); + // + // forAll(neiPoints, faceI) + // { + // writeStencilOBJ + // ( + // runTime.path()/"neiCFC" + Foam::name(faceI) + ".obj", + // mesh.faceCentres()[faceI], + // neiPoints[faceI] + // ); + // } + // } + //} + + + + //---- CELL CENTRED STENCIL ----- + + // Centred, cell stencil + // ~~~~~~~~~~~~~~~~~~~~~ + + { + const extendedCentredFaceToCellStencil& addressing = + centredCFCFaceToCellStencilObject::New + ( + mesh + ); + + Info<< "cellFaceCell:" << endl; + writeStencilStats(addressing.stencil()); + + // Collect stencil face centres + List<List<point> > stencilPoints(mesh.nCells()); + addressing.collectData + ( + mesh.Cf(), + stencilPoints + ); + + forAll(stencilPoints, cellI) + { + writeStencilOBJ + ( + runTime.path()/"centredCell" + Foam::name(cellI) + ".obj", + mesh.cellCentres()[cellI], + stencilPoints[cellI] + ); + } + } + + +//XXXXXX +// // Evaluate +// List<List<scalar> > stencilData(faceStencils.size()); +// collectStencilData +// ( +// distMap, +// faceStencils, +// vf, +// stencilData +// ); +// for(label faci = 0; faci < mesh.nInternalFaces(); faci++) +// { +// const scalarList& stData = stencilData[faceI]; +// const scalarList& stWeight = fit[faceI]; +// +// forAll(stData, i) +// { +// sf[faceI] += stWeight[i]*stData[i]; +// } +// } +// See finiteVolume/lnInclude/leastSquaresGrad.C +//XXXXXX + + Pout<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/test/ptrList/Make/files b/applications/test/ptrList/Make/files deleted file mode 100644 index 2a4e0ad01b0034628d241506a8a8919e9b30b214..0000000000000000000000000000000000000000 --- a/applications/test/ptrList/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -ptrListTest.C - -EXE = $(FOAM_USER_APPBIN)/ptrListTest diff --git a/applications/test/readCHEMKINIII/Make/options b/applications/test/readCHEMKINIII/Make/options index dcc48758d3cc8768ef85a9c2e542f6503dcc63b6..233d9fa2ef5a1b20403b69c5470f3a5db127765a 100644 --- a/applications/test/readCHEMKINIII/Make/options +++ b/applications/test/readCHEMKINIII/Make/options @@ -1,8 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude EXE_LIBS = \ -lspecie \ -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels + -lreactionThermophysicalModels diff --git a/applications/test/speed/Make/files b/applications/test/speed/Make/files deleted file mode 100644 index 84a6d2fa6202cc1e7fb7482bfc9e23dc718b406d..0000000000000000000000000000000000000000 --- a/applications/test/speed/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -speedTest.C - -EXE = $(FOAM_USER_APPBIN)/speedTest diff --git a/applications/test/speed/Make/options b/applications/test/speed/Make/options deleted file mode 100644 index e68056198750cebb50fea02c6fffbf8db9220261..0000000000000000000000000000000000000000 --- a/applications/test/speed/Make/options +++ /dev/null @@ -1 +0,0 @@ -EXE_INC = /* -ffast-math -mtune=core2 */ diff --git a/applications/test/speed/scalarSpeedTest/Make/files b/applications/test/speed/scalarSpeedTest/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..dae64db89f8cb8366067016721994cf8b3d09b82 --- /dev/null +++ b/applications/test/speed/scalarSpeedTest/Make/files @@ -0,0 +1,3 @@ +scalarSpeedTest.C + +EXE = $(FOAM_USER_APPBIN)/scalarSpeedTest diff --git a/applications/test/ptrList/Make/options b/applications/test/speed/scalarSpeedTest/Make/options similarity index 100% rename from applications/test/ptrList/Make/options rename to applications/test/speed/scalarSpeedTest/Make/options diff --git a/applications/test/speed/scalarSpeedTest/scalarSpeedTest.C b/applications/test/speed/scalarSpeedTest/scalarSpeedTest.C new file mode 100644 index 0000000000000000000000000000000000000000..e1858e2d42bf578d54a747c469019fedbd1a3bdd --- /dev/null +++ b/applications/test/speed/scalarSpeedTest/scalarSpeedTest.C @@ -0,0 +1,192 @@ +#include "primitiveFields.H" +#include "Random.H" +#include "cpuTime.H" +#include "IOstreams.H" +#include "OFstream.H" + +using namespace Foam; + +int main() +{ + Info<< "Initialising fields" << endl; + + const label nIter = 100; + const label size = 10000000; + const label rndAddrSkip = 40; + const label redFac = 6; + const label redSize = size/redFac; + Random genAddr(100); + + double* f1 = new double[size]; + double* f2 = new double[size]; + double* f3 = new double[size]; + double* f4 = new double[size]; + double* fr = new double[redSize]; + label* addr = new label[size]; + label* redAddr = new label[size]; + label* redAddr2 = new label[size]; + + for (register label i=0; i<size; i++) + { + f1[i] = 1.0; + f2[i] = 1.0; + f3[i] = 1.0; + addr[i] = i; + redAddr[i] = i/redFac; + redAddr2[i] = (size - i - 1)/redFac; + } + + for (register label i=0; i<size; i+=rndAddrSkip) + { + addr[i] = genAddr.integer(0, size-1); + } + + for (register label i=0; i<redSize; i++) + { + fr[i] = 1.0; + } + + Info<< "Done\n" <<endl; + + { + Info<< "Single loop combined operation (expression templates)" + << endl; + + cpuTime executionTime; + + for (int j=0; j<nIter; j++) + { + for (register label i=0; i<size; i++) + { + f4[i] = f1[i] + f2[i] - f3[i]; + } + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< f4[1] << endl << endl; + } + + { + Info<< "Single loop combined operation with indirect addressing" + << endl; + + cpuTime executionTime; + + for (int j=0; j<nIter; j++) + { + for (register label i=0; i<size; i++) + { + f4[addr[i]] = f1[addr[i]] + f2[addr[i]] - f3[addr[i]]; + } + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< f4[1] << endl << endl; + } + + { + Info<< "Single loop reduction operation" + << endl; + + cpuTime executionTime; + label redOffset = (size - 1)/redFac; + + for (int j=0; j<nIter; j++) + { + for (register label i=0; i<size; i++) + { + label j = i/redFac; + fr[j] += f1[i]; + fr[redOffset - j] -= f2[i]; + } + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< fr[1] << endl << endl; + } + + { + Info<< "Single loop reduction operation with indirect addressing" + << endl; + + cpuTime executionTime; + + for (int j=0; j<nIter; j++) + { + for (register label i=0; i<size; i++) + { + fr[redAddr[i]] += f1[i]; + fr[redAddr2[i]] -= f2[i]; + } + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< fr[1] << endl << endl; + } + + { + Info<< "Separate loops ?= operations" << endl; + + cpuTime executionTime; + + for (int j=0; j<nIter; j++) + { + for (register label i=0; i<size; i++) + { + f4[i] = f1[i]; + } + for (register label i=0; i<size; i++) + { + f4[i] += f2[i]; + } + for (register label i=0; i<size; i++) + { + f4[i] -= f3[i]; + } + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< f4[1] << endl << endl; + } + + { + Info<< "OpenFOAM field algebra" << endl; + + scalarField + sf1(size, 1.0), + sf2(size, 1.0), + sf3(size, 1.0), + sf4(size); + + cpuTime executionTime; + + for (int j=0; j<nIter; j++) + { + //sf4 = sf1 + sf2 - sf3; + sf4 = sf1; + sf4 += sf2; + sf4 -= sf3; + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< sf4[1] << endl << endl; + } +} diff --git a/applications/test/speed/speedTest.C b/applications/test/speed/speedTest.C deleted file mode 100644 index 052514359190204cbf8d9cab1fab1470461f9f2d..0000000000000000000000000000000000000000 --- a/applications/test/speed/speedTest.C +++ /dev/null @@ -1,99 +0,0 @@ -#include "primitiveFields.H" -#include "cpuTime.H" -#include "IOstreams.H" - -using namespace Foam; - -int main() -{ - const label nIter = 10; - const label size = 10000000; - - double* f1 = new double[size]; - double* f2 = new double[size]; - double* f3 = new double[size]; - double* f4 = new double[size]; - - for (register label i=0; i<size; i++) - { - f1[i] = 1.0; - f2[i] = 1.0; - f3[i] = 1.0; - } - - cpuTime executionTime1; - - for (int j=0; j<nIter; j++) - { - for (register label i=0; i<size; i++) - { - f4[i] = f1[i] + f2[i] - f3[i]; - } - } - - Info<< "ExecutionTime = " - << executionTime1.elapsedCpuTime() - << " s\n" << endl; - - Info << f4[1] << endl << endl; - - - scalarField sf1(size, 1.0), sf2(size, 1.0), sf3(size, 1.0), sf4(size); - - cpuTime executionTime2; - - for (register int j=0; j<nIter; j++) - { - sf4 = sf1 + sf2 - sf3; - //sf4 = sf1; - //sf4 += sf2; - //sf4 -= sf3; - } - - Info<< "ExecutionTime = " - << executionTime2.elapsedCpuTime() - << " s\n" << endl; - - Info << sf4[1] << endl << endl; - - - vectorField - vf1(size, vector::one), - vf2(size, vector::one), - vf3(size, vector::one), - vf4(size); - - cpuTime executionTime3; - - for (register int j=0; j<nIter; j++) - { - vf4 = vf1 + vf2 - vf3; - } - - Info<< "ExecutionTime = " - << executionTime3.elapsedCpuTime() - << " s\n" << endl; - - Info << vf4[1] << endl << endl; - - cpuTime executionTime4; - - scalarField sf11(size, 1.0), sf12(size, 1.0), sf13(size, 1.0), sf14(size); - scalarField sf21(size, 1.0), sf22(size, 1.0), sf23(size, 1.0), sf24(size); - scalarField sf31(size, 1.0), sf32(size, 1.0), sf33(size, 1.0), sf34(size); - - for (register int j=0; j<nIter; j++) - { - sf14 = sf11 + sf12 - sf13; - sf24 = sf21 + sf22 - sf23; - sf34 = sf31 + sf32 - sf33; - } - - Info<< "ExecutionTime = " - << executionTime4.elapsedCpuTime() - << " s\n" << endl; - - Info << sf14[1] << sf24[1] << sf34[1] << endl << endl; - - -} diff --git a/applications/test/speed/vectorSpeedTest/Make/files b/applications/test/speed/vectorSpeedTest/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..ccb0187615ed49e981498b9ad532c2f7b7b55326 --- /dev/null +++ b/applications/test/speed/vectorSpeedTest/Make/files @@ -0,0 +1,3 @@ +vectorSpeedTest.C + +EXE = $(FOAM_USER_APPBIN)/vectorSpeedTest diff --git a/applications/test/speed/vectorSpeedTest/Make/options b/applications/test/speed/vectorSpeedTest/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/applications/test/speed/vectorSpeedTest/vectorSpeedTest.C b/applications/test/speed/vectorSpeedTest/vectorSpeedTest.C new file mode 100644 index 0000000000000000000000000000000000000000..da802bab20e7c39767f97318d484536f127f5a40 --- /dev/null +++ b/applications/test/speed/vectorSpeedTest/vectorSpeedTest.C @@ -0,0 +1,39 @@ +#include "primitiveFields.H" +#include "cpuTime.H" +#include "IOstreams.H" +#include "OFstream.H" + +using namespace Foam; + +int main() +{ + const label nIter = 100; + const label size = 1000000; + + Info<< "Initialising fields" << endl; + + vectorField + vf1(size, vector::one), + vf2(size, vector::one), + vf3(size, vector::one), + vf4(size); + + Info<< "Done\n" << endl; + + { + cpuTime executionTime; + + Info<< "vectorField algebra" << endl; + + for (register int j=0; j<nIter; j++) + { + vf4 = vf1 + vf2 - vf3; + } + + Info<< "ExecutionTime = " + << executionTime.elapsedCpuTime() + << " s\n" << endl; + + Snull<< vf4[1] << endl << endl; + } +} diff --git a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L index bbaab8b01d5aaa463e01049c03dab2306326ce9f..89477520816024a4934fab977c33523148eab2d9 100644 --- a/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L +++ b/applications/utilities/mesh/conversion/fluent3DMeshToFoam/fluent3DMeshToFoam.L @@ -816,6 +816,8 @@ int main(int argc, char *argv[]) // Pre-filtering: flip "owner" boundary or wrong oriented internal // faces and move to neighbour + + boolList fm(faces.size(), false); forAll (faces, facei) { if @@ -824,6 +826,7 @@ int main(int argc, char *argv[]) || (neighbour[facei] != -1 && owner[facei] > neighbour[facei]) ) { + fm[facei] = true; faces[facei] = faces[facei].reverseFace(); Swap(owner[facei], neighbour[facei]); } @@ -1175,7 +1178,7 @@ int main(int argc, char *argv[]) false, // flipFaceFlux -1, // patchID faceZonei, // zoneID - false // zoneFlip + fm[facei] // zoneFlip ); } diff --git a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C index 68eb9c46cfc2cb6b3d22b26e1d4c960382cee03e..23aec54cd871425b943c4efbd233a7e5c0e51022 100644 --- a/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C +++ b/applications/utilities/mesh/conversion/gmshToFoam/gmshToFoam.C @@ -657,6 +657,16 @@ void readCells << " tet :" << nTet << endl << endl; + if (cells.size() == 0) + { + FatalErrorIn("readCells(..)") + << "No cells read from file " << inFile.name() << nl + << "Does your file specify any 3D elements (hex=" << MSHHEX + << ", prism=" << MSHPRISM << ", pyramid=" << MSHPYR + << ", tet=" << MSHTET << ")?" << nl + << "Perhaps you have not exported the 3D elements?" + << exit(FatalError); + } Info<< "CellZones:" << nl << "Zone\tSize" << endl; diff --git a/applications/utilities/mesh/conversion/ideasUnvToFoam/Make/files b/applications/utilities/mesh/conversion/ideasUnvToFoam/Make/files old mode 100755 new mode 100644 diff --git a/applications/utilities/mesh/conversion/ideasUnvToFoam/Make/options b/applications/utilities/mesh/conversion/ideasUnvToFoam/Make/options old mode 100755 new mode 100644 diff --git a/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C b/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C index ad7affddaeec4ed9d1ba8dbb4ea1a09fca6e0643..dfc1fbb20e651bb85c0ea2edee738d3e111234ae 100644 --- a/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C +++ b/applications/utilities/mesh/conversion/polyDualMesh/meshDualiser.C @@ -1077,7 +1077,7 @@ void Foam::meshDualiser::setRefinement { label pointI = multiCellFeaturePoints[i]; - if (pointToDualCells_[pointI].size()) + if (pointToDualCells_[pointI].size() > 0) { FatalErrorIn ( diff --git a/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C index e2bf673ce26375af9422b21a9e5ca3451988c247..a410c1d8922b14000fedc606a662eb82e5b07bb4 100644 --- a/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C +++ b/applications/utilities/mesh/conversion/polyDualMesh/polyDualMeshApp.C @@ -25,22 +25,34 @@ License Description Calculate the dual of a polyMesh. Adheres to all the feature&patch edges. - Feature angle: - convex features : point becomes single boundary cell with multiple - boundary faces. - concave features: point becomes multiple boundary cells. - -splitAllFaces: +Usage + + - polyDualMesh featureAngle + + Detects any boundary edge > angle and creates multiple boundary faces + for it. Normal behaviour is to have each point become a cell + (1.5 behaviour) + + @param -concaveMultiCells + Creates multiple cells for each point on a concave edge. Might limit + the amount of distortion on some meshes. + + @param -splitAllFaces Normally only constructs a single face between two cells. This single face might be too distorted. splitAllFaces will create a single face for every original cell the face passes through. The mesh will thus have multiple faces inbetween two cells! (so is not strictly upper-triangular anymore - checkMesh will complain) - -doNotPreserveFaceZones: + + @param -doNotPreserveFaceZones: By default all faceZones are preserved by marking all faces, edges and points on them as features. The -doNotPreserveFaceZones disables this behaviour. + Note: is just a driver for meshDualiser. Substitute your own + simpleMarkFeatures to have different behaviour. + \*---------------------------------------------------------------------------*/ #include "argList.H" @@ -70,6 +82,7 @@ void simpleMarkFeatures const polyMesh& mesh, const PackedBoolList& isBoundaryEdge, const scalar featureAngle, + const bool concaveMultiCells, const bool doNotPreserveFaceZones, labelList& featureFaces, @@ -182,7 +195,7 @@ void simpleMarkFeatures - allBoundary[f0].centre(allBoundary.points()) ); - if ((c1c0 & n0) > SMALL) + if (concaveMultiCells && (c1c0 & n0) > SMALL) { // Found concave edge. Make into multiCell features Info<< "Detected concave feature edge:" << edgeI @@ -230,7 +243,7 @@ void simpleMarkFeatures if (doNotPreserveFaceZones) { - if (faceZones.size()) + if (faceZones.size() > 0) { WarningIn("simpleMarkFeatures(..)") << "Detected " << faceZones.size() @@ -240,7 +253,7 @@ void simpleMarkFeatures } else { - if (faceZones.size()) + if (faceZones.size() > 0) { Info<< "Detected " << faceZones.size() << " faceZones. Preserving these by marking their" @@ -345,6 +358,7 @@ int main(int argc, char *argv[]) argList::validArgs.append("feature angle[0-180]"); argList::validOptions.insert("splitAllFaces", ""); + argList::validOptions.insert("concaveMultiCells", ""); argList::validOptions.insert("doNotPreserveFaceZones", ""); argList::validOptions.insert("overwrite", ""); @@ -381,11 +395,25 @@ int main(int argc, char *argv[]) const bool splitAllFaces = args.optionFound("splitAllFaces"); + if (splitAllFaces) + { + Info<< "Splitting all internal faces to create multiple faces" + << " between two cells." << nl + << endl; + } + const bool overwrite = args.optionFound("overwrite"); const bool doNotPreserveFaceZones = args.optionFound ( "doNotPreserveFaceZones" ); + const bool concaveMultiCells = args.optionFound("concaveMultiCells"); + if (concaveMultiCells) + { + Info<< "Generating multiple cells for points on concave feature edges." + << nl << endl; + } + // Face(centre)s that need inclusion in the dual mesh labelList featureFaces; @@ -393,7 +421,7 @@ int main(int argc, char *argv[]) labelList featureEdges; // Points (that become a single cell) that need inclusion in the dual mesh labelList singleCellFeaturePoints; - // Points (that become a mulitple cells) ,, + // Points (that become a multiple cells) ,, labelList multiCellFeaturePoints; // Sample implementation of feature detection. @@ -402,6 +430,7 @@ int main(int argc, char *argv[]) mesh, isBoundaryEdge, featureAngle, + concaveMultiCells, doNotPreserveFaceZones, featureFaces, diff --git a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C index 1bcee69984d1f8b32fed33fc9be7b434e78f2954..1d034714efe91a489d0f6a90b5f8c2d67988ea6c 100644 --- a/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C +++ b/applications/utilities/mesh/generation/blockMesh/blockMeshApp.C @@ -243,14 +243,7 @@ int main(int argc, char *argv[]) meshDict.lookup("mergePatchPairs") ); - if (mergePatchPairs.size()) - { - FatalErrorIn(args.executable()) - << "mergePatchPairs not currently supported." - << exit(FatalError); - } - - //// #include "mergePatchPairs.H" +# include "mergePatchPairs.H" } else { diff --git a/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.C b/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H similarity index 98% rename from applications/utilities/mesh/generation/blockMesh/mergePatchPairs.C rename to applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H index 3347db180bbe769eefeb5a41762550409e5b16e2..aeb3137adfe091daaabbda9490016527a066afe9 100644 --- a/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.C +++ b/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H @@ -1,7 +1,7 @@ - Info<< "Creating merge patch pairs" << nl << endl; - if (mergePatchPairs.size()) { + Info<< "Creating merge patch pairs" << nl << endl; + // Create and add point and face zones and mesh modifiers List<pointZone*> pz(mergePatchPairs.size()); List<faceZone*> fz(3*mergePatchPairs.size()); diff --git a/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C b/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C index 95ec6c5b8ae8e12a02dd5df4b63cbefc9537eac2..69dc36bccf838d9659e4f8c01d7a89f8efccf66b 100644 --- a/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C +++ b/applications/utilities/mesh/generation/extrudeMesh/extrudeMesh.C @@ -23,7 +23,8 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Description - Extrude mesh from existing patch or from patch read from file. + Extrude mesh from existing patch (flipped so has inwards pointing + normals) or from patch read from file. Note: Merges close points so be careful. Type of extrusion prescribed by run-time selectable model. @@ -52,43 +53,35 @@ using namespace Foam; int main(int argc, char *argv[]) { - #include "setRoots.H" + #include "setRootCase.H" #include "createTimeExtruded.H" - if (args.optionFound("sourceCase") == args.optionFound("surface")) - { - FatalErrorIn(args.executable()) - << "Specify either -sourceCase and -sourcePatch" - " or -surface options\n" - " to specify the source of the patch to extrude" - << exit(FatalError); - } - autoPtr<extrudedMesh> meshPtr(NULL); - autoPtr<extrudeModel> model + IOdictionary dict ( - extrudeModel::New + IOobject ( - IOdictionary - ( - IOobject - ( - "extrudeProperties", - runTimeExtruded.constant(), - runTimeExtruded, - IOobject::MUST_READ - ) - ) + "extrudeProperties", + runTimeExtruded.constant(), + runTimeExtruded, + IOobject::MUST_READ ) ); - if (args.optionFound("sourceCase")) + autoPtr<extrudeModel> model(extrudeModel::New(dict)); + + const word sourceType(dict.lookup("constructFrom")); + + autoPtr<faceMesh> fMesh; + + if (sourceType == "patch") { - fileName sourceCasePath(args.option("sourceCase")); + fileName sourceCasePath(dict.lookup("sourceCase")); + sourceCasePath.expand(); fileName sourceRootDir = sourceCasePath.path(); fileName sourceCaseDir = sourceCasePath.name(); - word patchName(args.option("sourcePatch")); + word patchName(dict.lookup("sourcePatch")); Info<< "Extruding patch " << patchName << " on mesh " << sourceCasePath << nl @@ -114,75 +107,69 @@ int main(int argc, char *argv[]) } const polyPatch& pp = mesh.boundaryMesh()[patchID]; + fMesh.reset(new faceMesh(pp.localFaces(), pp.localPoints())); + fMesh().flip(); { fileName surfName(patchName + ".sMesh"); - Info<< "Writing patch as surfaceMesh to " << surfName << nl << endl; - - faceMesh fMesh(pp.localFaces(), pp.localPoints()); + Info<< "Writing (flipped) patch as surfaceMesh to " + << surfName << nl << endl; OFstream os(surfName); - os << fMesh << nl; + os << fMesh() << nl; } - - meshPtr.reset - ( - new extrudedMesh - ( - IOobject - ( - extrudedMesh::defaultRegion, - runTimeExtruded.constant(), - runTimeExtruded - ), - pp, - model() - ) - ); } - else + else if (sourceType == "surface") { // Read from surface - fileName surfName(args.option("surface")); + fileName surfName(dict.lookup("surface")); Info<< "Extruding surfaceMesh read from file " << surfName << nl << endl; IFstream is(surfName); - faceMesh fMesh(is); + fMesh.reset(new faceMesh(is)); - Info<< "Read patch from file " << surfName << ':' << nl - << " points : " << fMesh.points().size() << nl - << " faces : " << fMesh.size() << nl + Info<< "Read patch from file " << surfName << nl << endl; + } + else + { + FatalErrorIn(args.executable()) + << "Illegal 'constructFrom' specification. Should either be " + << "patch or surface." << exit(FatalError); + } - meshPtr.reset + + Info<< "Extruding patch with :" << nl + << " points : " << fMesh().points().size() << nl + << " faces : " << fMesh().size() << nl + << " normals[0] : " << fMesh().faceNormals()[0] + << nl + << endl; + + extrudedMesh mesh + ( + IOobject ( - new extrudedMesh - ( - IOobject - ( - extrudedMesh::defaultRegion, - runTimeExtruded.constant(), - runTimeExtruded - ), - fMesh, - model() - ) - ); - } - extrudedMesh& mesh = meshPtr(); + extrudedMesh::defaultRegion, + runTimeExtruded.constant(), + runTimeExtruded + ), + fMesh(), + model() + ); const boundBox& bb = mesh.globalData().bb(); const vector span = bb.span(); const scalar mergeDim = 1E-4 * bb.minDim(); - Info<< "Mesh bounding box:" << bb << nl - << " with span:" << span << nl - << "Merge distance :" << mergeDim << nl + Info<< "Mesh bounding box : " << bb << nl + << " with span : " << span << nl + << "Merge distance : " << mergeDim << nl << endl; const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -250,7 +237,8 @@ int main(int argc, char *argv[]) // Merging front and back patch faces // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - if (args.optionFound("mergeFaces")) + Switch mergeFaces(dict.lookup("mergeFaces")); + if (mergeFaces) { Info<< "Assuming full 360 degree axisymmetric case;" << " stitching faces on patches " diff --git a/applications/utilities/mesh/generation/extrudeMesh/extrudeModel/wedge/wedge.C b/applications/utilities/mesh/generation/extrudeMesh/extrudeModel/wedge/wedge.C index 6da971a1bf0e2d048976c808abbaa0dea944908c..3d2c883ea1901edb740f8afdd7de3c9b634858a2 100644 --- a/applications/utilities/mesh/generation/extrudeMesh/extrudeModel/wedge/wedge.C +++ b/applications/utilities/mesh/generation/extrudeMesh/extrudeModel/wedge/wedge.C @@ -88,7 +88,8 @@ point wedge::operator() } else { - sliceAngle = angle_*(layer + 1)/nLayers_; + //sliceAngle = angle_*(layer + 1)/nLayers_; + sliceAngle = angle_*layer/nLayers_; } // Find projection onto axis (or rather decompose surfacePoint diff --git a/applications/utilities/mesh/generation/extrudeMesh/extrudeProperties b/applications/utilities/mesh/generation/extrudeMesh/extrudeProperties index ecbe160a150ab5f1b16ecad4e5fd423a64edc278..20de7b21524b083cf6cc37a684a971bcda890059 100644 --- a/applications/utilities/mesh/generation/extrudeMesh/extrudeProperties +++ b/applications/utilities/mesh/generation/extrudeMesh/extrudeProperties @@ -14,23 +14,41 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -extrudeModel wedge; +// Where to get surface from: either from surface ('surface') or +// from (flipped) patch of existing case ('patch') +constructFrom patch; //surface; + +// If construct from (flipped) patch +sourceCase "../cavity"; +sourcePatch movingWall; + +// If construct from surface +surface "movingWall.sMesh"; + + +// Do front and back need to be merged? +mergeFaces false; + +//- Linear extrusion in point-normal direction //extrudeModel linearNormal; +//- Wedge extrusion. If nLayers is 1 assumes symmetry around plane. +extrudeModel wedge; +//- Extrudes into sphere around (0 0 0) //extrudeModel linearRadial; //extrudeModel sigmaRadial; -nLayers 1; +nLayers 6; wedgeCoeffs { - axisPt (0 0 0); - axis (0 -1 0); - angle 2.0; + axisPt (0 0.1 0); + axis (1 0 0); + angle 90.0; // For nLayers=1 assume symmetry so angle/2 on each side } linearNormalCoeffs { - thickness 0.1; + thickness 0.05; } linearRadialCoeffs @@ -47,3 +65,4 @@ sigmaRadialCoeffs // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + diff --git a/applications/utilities/mesh/generation/extrudeMesh/extrudedMesh/extrudedMesh.C b/applications/utilities/mesh/generation/extrudeMesh/extrudedMesh/extrudedMesh.C index bcbcb3ddb78c20a6ee0ca35055a13d5488945310..b258c594451332958c13cdda37c9bbfeb28dd459 100644 --- a/applications/utilities/mesh/generation/extrudeMesh/extrudedMesh/extrudedMesh.C +++ b/applications/utilities/mesh/generation/extrudeMesh/extrudedMesh/extrudedMesh.C @@ -117,7 +117,7 @@ Foam::Xfer<Foam::faceList> Foam::extrudedMesh::extrudedFaces quad[2] = surfaceEdges[i][0] + nextLayerOffset; quad[3] = surfaceEdges[i][1] + nextLayerOffset; - eFaces[facei++] = face(quad); + eFaces[facei++] = face(quad).reverseFace(); } // Faces between layer and layer+1 @@ -130,7 +130,7 @@ Foam::Xfer<Foam::faceList> Foam::extrudedMesh::extrudedFaces ( surfaceFaces[i].reverseFace() + nextLayerOffset - ); + ).reverseFace(); } } } @@ -152,7 +152,7 @@ Foam::Xfer<Foam::faceList> Foam::extrudedMesh::extrudedFaces label ownerFace = extrudePatch.edgeFaces()[i][0]; - if (!sameOrder(surfaceFaces[ownerFace], e)) + if (sameOrder(surfaceFaces[ownerFace], e)) { reverse(quad); } @@ -164,7 +164,7 @@ Foam::Xfer<Foam::faceList> Foam::extrudedMesh::extrudedFaces // Top faces forAll(surfaceFaces, i) { - eFaces[facei++] = face(surfaceFaces[i]); + eFaces[facei++] = face(surfaceFaces[i]).reverseFace(); } // Bottom faces @@ -175,7 +175,7 @@ Foam::Xfer<Foam::faceList> Foam::extrudedMesh::extrudedFaces ( surfaceFaces[i].reverseFace() + nLayers*surfacePoints.size() - ); + ).reverseFace(); } // return points for transferring diff --git a/applications/utilities/mesh/generation/extrudeMesh/faceMesh.H b/applications/utilities/mesh/generation/extrudeMesh/faceMesh.H index 818ce58f00e80a363432e08f19bc919e5e1042cf..c8e1075f52e5f31ceba4f8930ad6be4dbab9158e 100644 --- a/applications/utilities/mesh/generation/extrudeMesh/faceMesh.H +++ b/applications/utilities/mesh/generation/extrudeMesh/faceMesh.H @@ -78,6 +78,18 @@ public: {} + // Member Functions + + void flip() + { + forAll(*this, i) + { + face& f = operator[](i); + f = f.reverseFace(); + } + clearOut(); + } + // IOstream Operators friend Ostream& operator<<(Ostream& os, const faceMesh& fm) @@ -85,7 +97,8 @@ public: return os << fm.points() << token::NL - << static_cast<PrimitivePatch<face, Foam::List, pointField> >(fm); + << static_cast<PrimitivePatch<face, Foam::List, pointField> > + (fm); } }; diff --git a/applications/utilities/mesh/generation/extrudeMesh/setRoots.H b/applications/utilities/mesh/generation/extrudeMesh/setRoots.H deleted file mode 100644 index 9c13db28d19f93ec3fc4bb9b7be943bc721eed33..0000000000000000000000000000000000000000 --- a/applications/utilities/mesh/generation/extrudeMesh/setRoots.H +++ /dev/null @@ -1,16 +0,0 @@ - argList::validArgs.clear(); - argList::noParallel(); - - argList::validOptions.insert("sourceCase", "source case"); - argList::validOptions.insert("sourcePatch", "source patch"); - - argList::validOptions.insert("surface", "surface file"); - - argList::validOptions.insert("mergeFaces", ""); - - argList args(argc, argv); - - if (!args.check()) - { - FatalError.exit(); - } diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C index 706866bd2a1df6def0525cd0b00366edeec313c7..6f086523dd2204170a516d19f0955cc6e68f5e1f 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C @@ -96,7 +96,7 @@ void writeMesh const fvMesh& mesh = meshRefiner.mesh(); meshRefiner.printMeshInfo(debug, msg); - Info<< "Writing mesh to time " << mesh.time().timeName() << endl; + Info<< "Writing mesh to time " << meshRefiner.timeName() << endl; meshRefiner.write(meshRefinement::MESH|meshRefinement::SCALARLEVELS, ""); if (debug & meshRefinement::OBJINTERSECTIONS) @@ -104,7 +104,7 @@ void writeMesh meshRefiner.write ( meshRefinement::OBJINTERSECTIONS, - mesh.time().path()/mesh.time().timeName() + mesh.time().path()/meshRefiner.timeName() ); } Info<< "Written mesh in = " @@ -115,6 +115,7 @@ void writeMesh int main(int argc, char *argv[]) { + argList::validOptions.insert("overwrite", ""); # include "setRootCase.H" # include "createTime.H" runTime.functionObjects().off(); @@ -123,6 +124,9 @@ int main(int argc, char *argv[]) Info<< "Read mesh in = " << runTime.cpuTimeIncrement() << " s" << endl; + const bool overwrite = args.optionFound("overwrite"); + + // Check patches and faceZones are synchronised mesh.boundaryMesh().checkParallelSync(true); meshRefinement::checkCoupledFaceZones(mesh); @@ -170,6 +174,13 @@ int main(int argc, char *argv[]) const dictionary& layerDict = meshDict.subDict("addLayersControls"); + const scalar mergeDist = getMergeDistance + ( + mesh, + readScalar(meshDict.lookup("mergeTolerance")) + ); + + // Debug // ~~~~~ @@ -192,8 +203,9 @@ int main(int argc, char *argv[]) IOobject ( "abc", // dummy name - mesh.time().constant(), // directory - "triSurface", // instance + //mesh.time().constant(), // instance + mesh.time().findInstance("triSurface", word::null),// instance + "triSurface", // local mesh.time(), // registry IOobject::MUST_READ, IOobject::NO_WRITE @@ -235,6 +247,34 @@ int main(int argc, char *argv[]) << mesh.time().cpuTimeIncrement() << " s" << nl << endl; + // Refinement engine + // ~~~~~~~~~~~~~~~~~ + + Info<< nl + << "Determining initial surface intersections" << nl + << "-----------------------------------------" << nl + << endl; + + // Main refinement engine + meshRefinement meshRefiner + ( + mesh, + mergeDist, // tolerance used in sorting coordinates + overwrite, // overwrite mesh files? + surfaces, // for surface intersection refinement + shells // for volume (inside/outside) refinement + ); + Info<< "Calculated surface intersections in = " + << mesh.time().cpuTimeIncrement() << " s" << nl << endl; + + // Some stats + meshRefiner.printMeshInfo(debug, "Initial mesh"); + + meshRefiner.write + ( + debug&meshRefinement::OBJINTERSECTIONS, + mesh.time().path()/meshRefiner.timeName() + ); // Add all the surface regions as patches @@ -265,9 +305,8 @@ int main(int argc, char *argv[]) forAll(regNames, i) { - label patchI = meshRefinement::addPatch + label patchI = meshRefiner.addMeshedPatch ( - mesh, regNames[i], wallPolyPatch::typeName ); @@ -308,45 +347,10 @@ int main(int argc, char *argv[]) << exit(FatalError); } - const scalar mergeDist = getMergeDistance - ( - mesh, - readScalar(meshDict.lookup("mergeTolerance")) - ); - - // Mesh distribution engine (uses tolerance to reconstruct meshes) fvMeshDistribute distributor(mesh, mergeDist); - // Refinement engine - // ~~~~~~~~~~~~~~~~~ - - Info<< nl - << "Determining initial surface intersections" << nl - << "-----------------------------------------" << nl - << endl; - - // Main refinement engine - meshRefinement meshRefiner - ( - mesh, - mergeDist, // tolerance used in sorting coordinates - surfaces, // for surface intersection refinement - shells // for volume (inside/outside) refinement - ); - Info<< "Calculated surface intersections in = " - << mesh.time().cpuTimeIncrement() << " s" << nl << endl; - - // Some stats - meshRefiner.printMeshInfo(debug, "Initial mesh"); - - meshRefiner.write - ( - debug&meshRefinement::OBJINTERSECTIONS, - mesh.time().path()/mesh.time().timeName() - ); - @@ -370,6 +374,11 @@ int main(int argc, char *argv[]) // Refinement parameters refinementParameters refineParams(refineDict); + if (!overwrite) + { + const_cast<Time&>(mesh.time())++; + } + refineDriver.doRefine(refineDict, refineParams, wantSnap, motionDict); writeMesh @@ -391,6 +400,11 @@ int main(int argc, char *argv[]) // Snap parameters snapParameters snapParams(snapDict); + if (!overwrite) + { + const_cast<Time&>(mesh.time())++; + } + snapDriver.doSnap(snapDict, motionDict, snapParams); writeMesh @@ -403,15 +417,16 @@ int main(int argc, char *argv[]) if (wantLayers) { - autoLayerDriver layerDriver - ( - meshRefiner, - globalToPatch - ); + autoLayerDriver layerDriver(meshRefiner); // Layer addition parameters layerParameters layerParams(layerDict, mesh.boundaryMesh()); + if (!overwrite) + { + const_cast<Time&>(mesh.time())++; + } + layerDriver.doLayers ( layerDict, @@ -435,7 +450,7 @@ int main(int argc, char *argv[]) Info<< "End\n" << endl; - return 0; + return(0); } diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index 205c767600bede32ffba05d4a2bd0873598b7511..b19b207124979ab412a80fcb8e88506be8f98c77 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -209,6 +209,10 @@ snapControls // Settings for the layer addition. addLayersControls { + // Are the thickness parameters below relative to the undistorted + // size of the refined cell outside layer (true) or absolute sizes (false). + relativeSizes true; + // Per final patch (so not geometry!) the layer information layers { @@ -226,15 +230,15 @@ addLayersControls // Expansion factor for layer mesh expansionRatio 1.0; + //- Wanted thickness of final added cell layer. If multiple layers - // is the - // thickness of the layer furthest away from the wall. - // Relative to undistorted size of cell outside layer. - finalLayerRatio 0.3; + // is the thickness of the layer furthest away from the wall. + // See relativeSizes parameter. + finalLayerThickness 0.3; //- Minimum thickness of cell layer. If for any reason layer // cannot be above minThickness do not add layer. - // Relative to undistorted size of cell outside layer. + // See relativeSizes parameter. minThickness 0.25; //- If points get not extruded do nGrow layers of connected faces that are diff --git a/applications/utilities/mesh/manipulation/cellSet/cellSetDict b/applications/utilities/mesh/manipulation/cellSet/cellSetDict index 95465d8f5421d2316b2a74f0404ea79e10700010..fd11ab871d9b66a0bb4b3c89feb0d7d8015b40c4 100644 --- a/applications/utilities/mesh/manipulation/cellSet/cellSetDict +++ b/applications/utilities/mesh/manipulation/cellSet/cellSetDict @@ -26,12 +26,31 @@ action new; topoSetSources ( + // Select by explicitly providing cell labels + labelToCell + { + value (12 13 56); // labels of cells + } + // Copy elements from cellSet cellToCell { set c1; } + // Cells in cell zone + zoneToCell + { + name ".*Zone"; // Name of cellZone, regular expressions allowed + } + + // Cells on master or slave side of faceZone + faceZoneToCell + { + name ".*Zone"; // Name of faceZone, regular expressions allowed + option master; // master/slave + } + // Select based on faceSet faceToCell { @@ -51,12 +70,6 @@ topoSetSources //option all; // cell with all points in pointSet } - // Select by explicitly providing cell labels - labelToCell - { - value (12 13 56); // labels of cells - } - // Select based on cellShape shapeToCell { @@ -87,7 +100,6 @@ topoSetSources radius 5.0; } - // Cells with centre within sphere sphereToCell { @@ -95,20 +107,6 @@ topoSetSources radius 5.0; } - // Cells in cell zone - zoneToCell - { - name ".*Zone"; // Name of cellZone, regular expressions allowed - } - - // values of field within certain range - fieldToCell - { - fieldName U; // Note: uses mag(U) since volVectorField - min 0.1; - max 0.5; - } - // Cells with cellCentre nearest to coordinates nearestToCell { @@ -129,6 +127,22 @@ topoSetSources // and near surf curvature // (set to -100 if not used) } + + // values of field within certain range + fieldToCell + { + fieldName U; // Note: uses mag(U) since volVectorField + min 0.1; + max 0.5; + } + + // Mesh region (non-face connected part of (subset of)mesh) + regionToCell + { + set c0; // name of cellSet giving mesh subset + insidePoint (1 2 3); // point inside region to select + } + ); diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C index 14f57048365684cd02cdb66cb879dcd868c37cb2..9ce34cda1c73f4638439af2c837f24b1a89eb23e 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C @@ -7,6 +7,31 @@ #include "pointSet.H" #include "IOmanip.H" +bool Foam::checkSync(const wordList& names) +{ + List<wordList> allNames(Pstream::nProcs()); + allNames[Pstream::myProcNo()] = names; + Pstream::gatherList(allNames); + + bool hasError = false; + + for (label procI = 1; procI < allNames.size(); procI++) + { + if (allNames[procI] != allNames[0]) + { + hasError = true; + + Info<< " ***Inconsistent zones across processors, " + "processor 0 has zones:" << allNames[0] + << ", processor " << procI << " has zones:" + << allNames[procI] + << endl; + } + } + return hasError; +} + + Foam::label Foam::checkTopology ( const polyMesh& mesh, @@ -24,6 +49,31 @@ Foam::label Foam::checkTopology // Check if the boundary processor patches are correct mesh.boundaryMesh().checkParallelSync(true); + // Check names of zones are equal + if (checkSync(mesh.cellZones().names())) + { + noFailedChecks++; + } + if (checkSync(mesh.faceZones().names())) + { + noFailedChecks++; + } + if (checkSync(mesh.pointZones().names())) + { + noFailedChecks++; + } + + // Check contents of faceZones consistent + { + forAll(mesh.faceZones(), zoneI) + { + if (mesh.faceZones()[zoneI].checkParallelSync(true)) + { + noFailedChecks++; + } + } + } + { pointSet points(mesh, "unusedPoints", mesh.nPoints()/100); if (mesh.checkPoints(true, &points)) diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H index 787aa4318d21cbe49eb162932f74f94ff5444757..4790765d16e408c18d9ada199da97235e4c82975 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H +++ b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H @@ -1,8 +1,11 @@ #include "label.H" +#include "wordList.H" namespace Foam { class polyMesh; + bool checkSync(const wordList& names); + label checkTopology(const polyMesh&, const bool, const bool); } diff --git a/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C b/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C index 9a2c9396afba0a645483f86eec3d65239372cb43..269656594c5c6524c6508c7c602967ac419173df 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C +++ b/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C @@ -69,13 +69,13 @@ void Foam::printMeshStats(const polyMesh& mesh, const bool allTopology) << " cells: " << returnReduce(mesh.cells().size(), sumOp<label>()) << nl << " boundary patches: " - << returnReduce(mesh.boundaryMesh().size(), sumOp<label>()) << nl + << mesh.boundaryMesh().size() << nl << " point zones: " - << returnReduce(mesh.pointZones().size(), sumOp<label>()) << nl + << mesh.pointZones().size() << nl << " face zones: " - << returnReduce(mesh.faceZones().size(), sumOp<label>()) << nl + << mesh.faceZones().size() << nl << " cell zones: " - << returnReduce(mesh.cellZones().size(), sumOp<label>()) << nl + << mesh.cellZones().size() << nl << endl; diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C index 1fb8cc64efe26da5a52ac4f31de7a293d6d7274f..88af3a1f2915628a05fe5b70306c4b3daa770fae 100644 --- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C +++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C @@ -43,16 +43,89 @@ Description #include "ReadFields.H" #include "volFields.H" #include "surfaceFields.H" +#include "ZoneIDs.H" using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +void modifyOrAddFace +( + polyTopoChange& meshMod, + const face& f, + const label faceI, + const label own, + const bool flipFaceFlux, + const label newPatchI, + const label zoneID, + const bool zoneFlip, + + PackedBoolList& modifiedFace +) +{ + if (!modifiedFace[faceI]) + { + // First usage of face. Modify. + meshMod.setAction + ( + polyModifyFace + ( + f, // modified face + faceI, // label of face + own, // owner + -1, // neighbour + flipFaceFlux, // face flip + newPatchI, // patch for face + false, // remove from zone + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + modifiedFace[faceI] = 1; + } + else + { + // Second or more usage of face. Add. + meshMod.setAction + ( + polyAddFace + ( + f, // modified face + own, // owner + -1, // neighbour + -1, // master point + -1, // master edge + faceI, // master face + flipFaceFlux, // face flip + newPatchI, // patch for face + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + } +} + + +label findPatchID(const polyMesh& mesh, const word& name) +{ + label patchI = mesh.boundaryMesh().findPatchID(name); + + if (patchI == -1) + { + FatalErrorIn("findPatchID(const polyMesh&, const word&)") + << "Cannot find patch " << name << endl + << "Valid patches are " << mesh.boundaryMesh().names() + << exit(FatalError); + } + return patchI; +} + + // Main program: int main(int argc, char *argv[]) { - argList::validArgs.append("set"); + argList::validArgs.append("faceZone"); argList::validArgs.append("patch"); argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)"); argList::validOptions.insert("overwrite", ""); @@ -67,30 +140,28 @@ int main(int argc, char *argv[]) const faceZoneMesh& faceZones = mesh.faceZones(); // Faces to baffle - word setName(args.additionalArgs()[0]); - Info<< "Reading faceSet from " << setName << nl << endl; - faceSet facesToSplit(mesh, setName); - // Make sure set is synchronised across couples - facesToSplit.sync(mesh); - Info<< "Read " << returnReduce(facesToSplit.size(), sumOp<label>()) - << " faces from " << setName << nl << endl; + faceZoneID zoneID(args.additionalArgs()[0], faceZones); + + Info<< "Converting faces on zone " << zoneID.name() + << " into baffles." << nl << endl; + + const faceZone& fZone = faceZones[zoneID.index()]; + + Info<< "Found " << returnReduce(fZone.size(), sumOp<label>()) + << " faces on zone " << zoneID.name() << nl << endl; + // Make sure patches and zoneFaces are synchronised across couples + patches.checkParallelSync(true); + fZone.checkParallelSync(true); // Patches to put baffles into DynamicList<label> newPatches(1); word patchName(args.additionalArgs()[1]); - newPatches.append(patches.findPatchID(patchName)); - Pout<< "Using patch " << patchName + newPatches.append(findPatchID(mesh, patchName)); + Info<< "Using patch " << patchName << " at index " << newPatches[0] << endl; - if (newPatches[0] == -1) - { - FatalErrorIn(args.executable()) - << "Cannot find patch " << patchName << endl - << "Valid patches are " << patches.names() << exit(FatalError); - } - // Additional patches if (args.optionFound("additionalPatches")) @@ -103,19 +174,9 @@ int main(int argc, char *argv[]) newPatches.reserve(patchNames.size() + 1); forAll(patchNames, i) { - label patchI = patches.findPatchID(patchNames[i]); + newPatches.append(findPatchID(mesh, patchNames[i])); Info<< "Using additional patch " << patchNames[i] - << " at index " << patchI << endl; - - if (patchI == -1) - { - FatalErrorIn(args.executable()) - << "Cannot find patch " << patchNames[i] << endl - << "Valid patches are " << patches.names() - << exit(FatalError); - } - - newPatches.append(patchI); + << " at index " << newPatches[newPatches.size()-1] << endl; } } @@ -166,111 +227,112 @@ int main(int argc, char *argv[]) polyTopoChange meshMod(mesh); - // Do the actual changes - // Note order in which faces are modified/added is so they end up correctly - // for cyclic patches (original faces first and then reversed faces) - // since otherwise it will have trouble matching baffles. + // Do the actual changes. Note: + // - loop in incrementing face order (not necessary if faceZone ordered). + // Preserves any existing ordering on patch faces. + // - two passes, do non-flip faces first and flip faces second. This + // guarantees that when e.g. creating a cyclic all faces from one + // side come first and faces from the other side next. - label nBaffled = 0; + PackedBoolList modifiedFace(mesh.nFaces()); forAll(newPatches, i) { label newPatchI = newPatches[i]; + // Pass 1. Do selected side of zone + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++) { - if (facesToSplit.found(faceI)) - { - const face& f = mesh.faces()[faceI]; - label zoneID = faceZones.whichZone(faceI); - bool zoneFlip = false; - if (zoneID >= 0) - { - const faceZone& fZone = faceZones[zoneID]; - zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; - } + label zoneFaceI = fZone.whichFace(faceI); - if (i == 0) + if (zoneFaceI != -1) + { + if (!fZone.flipMap()[zoneFaceI]) { - // First usage of face. Modify. - meshMod.setAction + // Use owner side of face + modifyOrAddFace ( - polyModifyFace - ( - f, // modified face - faceI, // label of face - mesh.faceOwner()[faceI], // owner - -1, // neighbour - false, // face flip - newPatchI, // patch for face - false, // remove from zone - zoneID, // zone for face - zoneFlip // face flip in zone - ) + meshMod, + mesh.faces()[faceI], // modified face + faceI, // label of face + mesh.faceOwner()[faceI],// owner + false, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + false, // face flip in zone + modifiedFace // modify or add status ); } else { - // Second or more usage of face. Add. - meshMod.setAction + // Use neighbour side of face + modifyOrAddFace ( - polyAddFace - ( - f, // modified face - mesh.faceOwner()[faceI], // owner - -1, // neighbour - -1, // master point - -1, // master edge - faceI, // master face - false, // face flip - newPatchI, // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ) + meshMod, + mesh.faces()[faceI].reverseFace(), // modified face + faceI, // label of face + mesh.faceNeighbour()[faceI],// owner + true, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + true, // face flip in zone + modifiedFace // modify or add status ); } - - nBaffled++; } } - // Add the reversed face. + + // Pass 2. Do other side of zone + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++) { - if (facesToSplit.found(faceI)) + label zoneFaceI = fZone.whichFace(faceI); + + if (zoneFaceI != -1) { - const face& f = mesh.faces()[faceI]; - label zoneID = faceZones.whichZone(faceI); - bool zoneFlip = false; - if (zoneID >= 0) + if (!fZone.flipMap()[zoneFaceI]) { - const faceZone& fZone = faceZones[zoneID]; - zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + // Use neighbour side of face + modifyOrAddFace + ( + meshMod, + mesh.faces()[faceI].reverseFace(), // modified face + faceI, // label of face + mesh.faceNeighbour()[faceI], // owner + true, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + true, // face flip in zone + modifiedFace // modify or add + ); } - label nei = mesh.faceNeighbour()[faceI]; - - meshMod.setAction - ( - polyAddFace + else + { + // Use owner side of face + modifyOrAddFace ( - f.reverseFace(), // modified face - nei, // owner - -1, // neighbour - -1, // masterPointID - -1, // masterEdgeID - faceI, // masterFaceID, - true, // face flip - newPatchI, // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ) - ); - - nBaffled++; + meshMod, + mesh.faces()[faceI], // modified face + faceI, // label of face + mesh.faceOwner()[faceI],// owner + false, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + false, // face flip in zone + modifiedFace // modify or add status + ); + } } } + // Modify any boundary faces + // ~~~~~~~~~~~~~~~~~~~~~~~~~ + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; @@ -286,58 +348,22 @@ int main(int argc, char *argv[]) { label faceI = pp.start()+i; - if (facesToSplit.found(faceI)) + label zoneFaceI = fZone.whichFace(faceI); + + if (zoneFaceI != -1) { - const face& f = mesh.faces()[faceI]; - label zoneID = faceZones.whichZone(faceI); - bool zoneFlip = false; - if (zoneID >= 0) - { - const faceZone& fZone = faceZones[zoneID]; - zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; - } - - if (i == 0) - { - // First usage of face. Modify. - meshMod.setAction - ( - polyModifyFace - ( - f, // modified face - faceI, // label of face - mesh.faceOwner()[faceI],// owner - -1, // neighbour - false, // face flip - newPatchI, // patch for face - false, // remove from zone - zoneID, // zone for face - zoneFlip // face flip in zone - ) - ); - } - else - { - // Second or more usage of face. Add. - meshMod.setAction - ( - polyAddFace - ( - f, // modified face - mesh.faceOwner()[faceI],// owner - -1, // neighbour - -1, // master point - -1, // master edge - faceI, // master face - false, // face flip - newPatchI, // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ) - ); - } - - nBaffled++; + modifyOrAddFace + ( + meshMod, + mesh.faces()[faceI], // modified face + faceI, // label of face + mesh.faceOwner()[faceI], // owner + false, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + fZone.flipMap()[zoneFaceI], // face flip in zone + modifiedFace // modify or add status + ); } } } @@ -345,7 +371,7 @@ int main(int argc, char *argv[]) } - Info<< "Converted " << returnReduce(nBaffled, sumOp<label>()) + Info<< "Converted " << returnReduce(modifiedFace.count(), sumOp<label>()) << " faces into boundary faces on patch " << patchName << nl << endl; if (!overwrite) diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C index 3c799ca5a4b0a66d6017f956d53bdade480b7c0b..7d74e7208c2e552d4bf0cc3af9d05b19ec8c64ef 100644 --- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C +++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C @@ -73,23 +73,6 @@ public: }; - -label getPatch(const polyBoundaryMesh& patches, const word& patchName) -{ - label patchI = patches.findPatchID(patchName); - - if (patchI == -1) - { - FatalErrorIn("createPatch(const polyBoundaryMesh&, const word&)") - << "Cannot find source patch " << patchName - << endl << "Valid patch names are " << patches.names() - << exit(FatalError); - } - - return patchI; -} - - void changePatchID ( const polyMesh& mesh, @@ -704,14 +687,12 @@ int main(int argc, char *argv[]) if (sourceType == "patches") { - wordList patchSources(dict.lookup("patches")); + labelHashSet patchSources(patches.patchSet(dict.lookup("patches"))); // Repatch faces of the patches. - forAll(patchSources, sourceI) + forAllConstIter(labelHashSet, patchSources, iter) { - label patchI = getPatch(patches, patchSources[sourceI]); - - const polyPatch& pp = patches[patchI]; + const polyPatch& pp = patches[iter.key()]; Info<< "Moving faces from patch " << pp.name() << " to patch " << destPatchI << endl; diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatchDict b/applications/utilities/mesh/manipulation/createPatch/createPatchDict index 9052daa0a8d56c2ab9c82be8d3ccc42511089532..7dc93d5abaf160ff2b6a37b0b095efe3ad069066 100644 --- a/applications/utilities/mesh/manipulation/createPatch/createPatchDict +++ b/applications/utilities/mesh/manipulation/createPatch/createPatchDict @@ -69,8 +69,8 @@ patches // How to construct: either from 'patches' or 'set' constructFrom patches; - // If constructFrom = patches : names of patches - patches (periodic-1 periodic-2); + // If constructFrom = patches : names of patches. Wildcards allowed. + patches ("periodic.*"); // If constructFrom = set : name of faceSet set f0; diff --git a/applications/utilities/mesh/manipulation/pointSet/pointSetDict b/applications/utilities/mesh/manipulation/pointSet/pointSetDict index 1c704a1868fe88c46be3e5d7f53a7eb184eae708..895dcd7f0aec3d01e875c335962a85ae0c6211f7 100644 --- a/applications/utilities/mesh/manipulation/pointSet/pointSetDict +++ b/applications/utilities/mesh/manipulation/pointSet/pointSetDict @@ -51,18 +51,24 @@ topoSetSources value (12 13 56); // labels of points } - // Points with coordinate within box - boxToPoint - { - box (0 0 0) (1 1 1); - } - // All points in pointzone zoneToPoint { name ".*Zone"; // name of pointZone, regular expressions allowed } + // Points nearest to coordinates + nearestToPoint + { + points ((0 0 0) (1 1 1)); + } + + // Points with coordinate within box + boxToPoint + { + box (0 0 0) (1 1 1); + } + // Select based on surface surfaceToPoint { diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C index d79d516806e040de45f70483eec4cdd195bacd04..42ad6110ea9bf258e29b23c075755bfa66e321a9 100644 --- a/applications/utilities/mesh/manipulation/setSet/setSet.C +++ b/applications/utilities/mesh/manipulation/setSet/setSet.C @@ -367,7 +367,7 @@ bool doCommand { r = IOobject::NO_READ; - backup(mesh, setName, setName + "_old"); + //backup(mesh, setName, setName + "_old"); currentSetPtr = topoSet::New(setType, mesh, setName, typSize); } @@ -399,11 +399,11 @@ bool doCommand << " Action:" << actionName << endl; - if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST)) - { - // currentSet has been read so can make copy. - backup(mesh, setName, currentSet, setName + "_old"); - } + //if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST)) + //{ + // // currentSet has been read so can make copy. + // backup(mesh, setName, currentSet, setName + "_old"); + //} switch (action) { @@ -558,7 +558,8 @@ void printMesh(const Time& runTime, const polyMesh& mesh) << " cells:" << mesh.nCells() << " faces:" << mesh.nFaces() << " points:" << mesh.nPoints() - << " patches:" << mesh.boundaryMesh().size() << nl; + << " patches:" << mesh.boundaryMesh().size() + << " bb:" << mesh.bounds() << nl; } diff --git a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C index dfd7262fd17ba65a287bd041289dbcc95475c7df..a369a195b8c8dcf1d22b6bb60656993fe04c5417 100644 --- a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C +++ b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C @@ -28,8 +28,8 @@ Description There is one catch: for faceZones you also need to specify a flip condition which basically denotes the side of the face. In this app - it reads a cellSet (xxxCells if 'xxx' is the name of the faceSet) and - any face whose neighbour is in the cellSet gets a flip=true. + it reads a cellSet (xxxCells if 'xxx' is the name of the faceSet) which + is the masterCells of the zone. There are lots of situations in which this will go wrong but it is the best I can think of for now. @@ -87,7 +87,7 @@ int main(int argc, char *argv[]) polyMesh::meshSubDir/"sets" ); - Pout<< "Searched : " << mesh.pointsInstance()/polyMesh::meshSubDir/"sets" + Info<< "Searched : " << mesh.pointsInstance()/polyMesh::meshSubDir/"sets" << nl << "Found : " << objects.names() << nl << endl; @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) IOobjectList pointObjects(objects.lookupClass(pointSet::typeName)); - Pout<< "pointSets:" << pointObjects.names() << endl; + //Pout<< "pointSets:" << pointObjects.names() << endl; for ( @@ -126,6 +126,7 @@ int main(int argc, char *argv[]) ) ); mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.pointZones().instance() = mesh.facesInstance(); } else { @@ -133,57 +134,17 @@ int main(int argc, char *argv[]) << " with that of set " << set.name() << "." << endl; mesh.pointZones()[zoneID] = pointLabels; mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.pointZones().instance() = mesh.facesInstance(); } } - IOobjectList cellObjects(objects.lookupClass(cellSet::typeName)); - - Pout<< "cellSets:" << cellObjects.names() << endl; - - for - ( - IOobjectList::const_iterator iter = cellObjects.begin(); - iter != cellObjects.end(); - ++iter - ) - { - // Not in memory. Load it. - cellSet set(*iter()); - SortableList<label> cellLabels(set.toc()); - - label zoneID = mesh.cellZones().findZoneID(set.name()); - if (zoneID == -1) - { - Info<< "Adding set " << set.name() << " as a cellZone." << endl; - label sz = mesh.cellZones().size(); - mesh.cellZones().setSize(sz+1); - mesh.cellZones().set - ( - sz, - new cellZone - ( - set.name(), //name - cellLabels, //addressing - sz, //index - mesh.cellZones() //pointZoneMesh - ) - ); - mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; - } - else - { - Info<< "Overwriting contents of existing cellZone " << zoneID - << " with that of set " << set.name() << "." << endl; - mesh.cellZones()[zoneID] = cellLabels; - mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; - } - } - IOobjectList faceObjects(objects.lookupClass(faceSet::typeName)); - Pout<< "faceSets:" << faceObjects.names() << endl; + HashSet<word> slaveCellSets; + + //Pout<< "faceSets:" << faceObjects.names() << endl; for ( @@ -201,14 +162,11 @@ int main(int argc, char *argv[]) if (!noFlipMap) { - word setName(set.name() + "Cells"); - - Pout<< "Trying to load cellSet " << setName - << " to find out the flipMap." << nl - << "If the neighbour side of the face is in the cellSet" - << " the flipMap becomes true," << nl - << "in all other cases it stays false." - << " If you do not care about the flipMap" + word setName(set.name() + "SlaveCells"); + + Info<< "Trying to load cellSet " << setName + << " to find out the slave side of the zone." << nl + << "If you do not care about the flipMap" << " (i.e. do not use the sideness)" << nl << "use the -noFlipMap command line option." << endl; @@ -216,6 +174,9 @@ int main(int argc, char *argv[]) // Load corresponding cells cellSet cells(mesh, setName); + // Store setName to exclude from cellZones further on + slaveCellSets.insert(setName); + forAll(faceLabels, i) { label faceI = faceLabels[i]; @@ -302,6 +263,7 @@ int main(int argc, char *argv[]) ) ); mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.faceZones().instance() = mesh.facesInstance(); } else { @@ -313,10 +275,63 @@ int main(int argc, char *argv[]) flipMap.shrink() ); mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.faceZones().instance() = mesh.facesInstance(); + } + } + + + + IOobjectList cellObjects(objects.lookupClass(cellSet::typeName)); + + //Pout<< "cellSets:" << cellObjects.names() << endl; + + for + ( + IOobjectList::const_iterator iter = cellObjects.begin(); + iter != cellObjects.end(); + ++iter + ) + { + if (!slaveCellSets.found(iter.key())) + { + // Not in memory. Load it. + cellSet set(*iter()); + SortableList<label> cellLabels(set.toc()); + + label zoneID = mesh.cellZones().findZoneID(set.name()); + if (zoneID == -1) + { + Info<< "Adding set " << set.name() << " as a cellZone." << endl; + label sz = mesh.cellZones().size(); + mesh.cellZones().setSize(sz+1); + mesh.cellZones().set + ( + sz, + new cellZone + ( + set.name(), //name + cellLabels, //addressing + sz, //index + mesh.cellZones() //pointZoneMesh + ) + ); + mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.cellZones().instance() = mesh.facesInstance(); + } + else + { + Info<< "Overwriting contents of existing cellZone " << zoneID + << " with that of set " << set.name() << "." << endl; + mesh.cellZones()[zoneID] = cellLabels; + mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.cellZones().instance() = mesh.facesInstance(); + } } } - Pout<< "Writing mesh." << endl; + + + Info<< "Writing mesh." << endl; if (!mesh.write()) { @@ -325,7 +340,7 @@ int main(int argc, char *argv[]) << exit(FatalError); } - Pout << nl << "End" << endl; + Info<< nl << "End" << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C index e3536a5ad05862bd0370cf9e000992673797d944..859ddf20a277f137d522f75bc779f6bd98f7623d 100644 --- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C +++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C @@ -63,6 +63,7 @@ Description #include "slidingInterface.H" #include "perfectInterface.H" #include "IOobjectList.H" +#include "ReadFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -90,34 +91,6 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name) } -// Read field -template<class GeoField> -void readFields -( - const fvMesh& mesh, - const IOobjectList& objects, - PtrList<GeoField>& fields -) -{ - // Search list of objects for volScalarFields - IOobjectList fieldObjects(objects.lookupClass(GeoField::typeName)); - - // Construct the vol scalar fields - fields.setSize(fieldObjects.size()); - - label fieldi = 0; - for - ( - IOobjectList::iterator iter = fieldObjects.begin(); - iter != fieldObjects.end(); - ++iter - ) - { - fields.set(fieldi++, new GeoField(*iter(), mesh)); - } -} - - // Main program: int main(int argc, char *argv[]) @@ -343,7 +316,8 @@ int main(int argc, char *argv[]) cutZoneName, masterPatchName, slavePatchName, - tom // integral or partial + tom, // integral or partial + true // couple/decouple mode ) ); } @@ -355,30 +329,30 @@ int main(int argc, char *argv[]) // Read all current fvFields so they will get mapped Info<< "Reading all current volfields" << endl; PtrList<volScalarField> volScalarFields; - readFields(mesh, objects, volScalarFields); + ReadFields(mesh, objects, volScalarFields); PtrList<volVectorField> volVectorFields; - readFields(mesh, objects, volVectorFields); + ReadFields(mesh, objects, volVectorFields); PtrList<volSphericalTensorField> volSphericalTensorFields; - readFields(mesh, objects, volSphericalTensorFields); + ReadFields(mesh, objects, volSphericalTensorFields); PtrList<volSymmTensorField> volSymmTensorFields; - readFields(mesh, objects, volSymmTensorFields); + ReadFields(mesh, objects, volSymmTensorFields); PtrList<volTensorField> volTensorFields; - readFields(mesh, objects, volTensorFields); + ReadFields(mesh, objects, volTensorFields); //- uncomment if you want to interpolate surface fields (usually bad idea) //Info<< "Reading all current surfaceFields" << endl; //PtrList<surfaceScalarField> surfaceScalarFields; - //readFields(mesh, objects, surfaceScalarFields); + //ReadFields(mesh, objects, surfaceScalarFields); // //PtrList<surfaceVectorField> surfaceVectorFields; - //readFields(mesh, objects, surfaceVectorFields); + //ReadFields(mesh, objects, surfaceVectorFields); // //PtrList<surfaceTensorField> surfaceTensorFields; - //readFields(mesh, objects, surfaceTensorFields); + //ReadFields(mesh, objects, surfaceTensorFields); if (!overwrite) { @@ -394,11 +368,22 @@ int main(int argc, char *argv[]) if (overwrite) { mesh.setInstance(oldInstance); + stitcher.instance() = oldInstance; } Info << nl << "Writing polyMesh to time " << runTime.timeName() << endl; IOstream::defaultPrecision(10); - if (!mesh.write()) + + // Bypass runTime write (since only writes at outputTime) + if + ( + !runTime.objectRegistry::writeObject + ( + runTime.writeFormat(), + IOstream::currentVersion, + runTime.writeCompression() + ) + ) { FatalErrorIn(args.executable()) << "Failed writing polyMesh." diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options index de8242a89ffbb56259d8dec06155de72e98cb29e..ed65d154376ca5fb02e4738b07af1e0541e0d749 100644 --- a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options +++ b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options @@ -1,7 +1,7 @@ EXE_LIBS = \ -lbasicThermophysicalModels \ -lchemistryModel \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lcompressibleLESModels \ -ldecompositionMethods \ -ldieselSpray \ diff --git a/applications/utilities/miscellaneous/foamFormatConvert/foamFormatConvert.C b/applications/utilities/miscellaneous/foamFormatConvert/foamFormatConvert.C index c8dd69c4428c67f13d95915f2016c7ad29b6186b..0140ba4e232affb451fc499b1ba2048fa7361ab0 100644 --- a/applications/utilities/miscellaneous/foamFormatConvert/foamFormatConvert.C +++ b/applications/utilities/miscellaneous/foamFormatConvert/foamFormatConvert.C @@ -41,6 +41,7 @@ Description #include "pointFields.H" #include "cellIOList.H" #include "IOobjectList.H" +#include "IOPtrList.H" #include "writeMeshObject.H" #include "fieldDictionary.H" @@ -49,6 +50,14 @@ using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +namespace Foam +{ + defineTemplateTypeNameAndDebug(IOPtrList<entry>, 0); +} + + +// Main program: + int main(int argc, char *argv[]) { timeSelector::addOptions(); @@ -67,6 +76,9 @@ int main(int argc, char *argv[]) writeMeshObject<labelIOList>("neighbour", runTime); writeMeshObject<faceIOList>("faces", runTime); writeMeshObject<pointIOField>("points", runTime); + writeMeshObject<IOPtrList<entry> >("cellZones", runTime); + writeMeshObject<IOPtrList<entry> >("faceZones", runTime); + writeMeshObject<IOPtrList<entry> >("pointZones", runTime); // Get list of objects from the database IOobjectList objects(runTime, runTime.timeName()); diff --git a/applications/utilities/miscellaneous/foamFormatConvert/writeMeshObject.H b/applications/utilities/miscellaneous/foamFormatConvert/writeMeshObject.H index 383154223eb76b9c83d32565efa97f86a2fbfd66..10b6d83d90e18e9e2ae8816db78f679b19c0c8f7 100644 --- a/applications/utilities/miscellaneous/foamFormatConvert/writeMeshObject.H +++ b/applications/utilities/miscellaneous/foamFormatConvert/writeMeshObject.H @@ -61,8 +61,17 @@ inline bool writeMeshObject(const word& name, Time& runTime) Info<< " Reading " << io.headerClassName() << " : " << name << endl; + // Switch off type checking (for reading e.g. faceZones as + // generic list of dictionaries). + const word oldTypeName = T::typeName; + const_cast<word&>(T::typeName) = word::null; + T meshObject(io); + const_cast<word&>(T::typeName) = oldTypeName; + // Fake type back to what was in field + const_cast<word&>(meshObject.type()) = io.headerClassName(); + Info<< " Writing " << name << endl; writeOk = meshObject.regIOobject::write(); } diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 65dd679ecd73fc3bd6688aecb0964566465bf042..a26179507a167b9ec254643ebcab8cadde3ed420 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -566,7 +566,7 @@ int main(int argc, char *argv[]) IOobject ( "cellProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, @@ -579,7 +579,7 @@ int main(int argc, char *argv[]) IOobject ( "boundaryProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, @@ -603,7 +603,7 @@ int main(int argc, char *argv[]) IOobject ( "faceProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, @@ -645,7 +645,7 @@ int main(int argc, char *argv[]) IOobject ( "pointProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::MUST_READ, diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposeParDict b/applications/utilities/parallelProcessing/decomposePar/decomposeParDict index 0c566d50812ffcdbd856d09f12ebac9244177468..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposeParDict +++ b/applications/utilities/parallelProcessing/decomposePar/decomposeParDict @@ -55,7 +55,17 @@ metisCoeffs } scotchCoeffs -{} +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} manualCoeffs { diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C index 2940577d163722f8dcabbd761ef70215f252d77b..e310cc758f0809cc6ae1e49fe95add7c5614bae3 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C @@ -269,7 +269,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( this->polyMesh::name(), // region name of undecomposed mesh - "constant", + pointsInstance(), processorDb ), xferMove(procPoints), @@ -620,7 +620,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "pointProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, @@ -635,7 +635,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "faceProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, @@ -650,7 +650,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "cellProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, @@ -665,7 +665,7 @@ bool domainDecomposition::writeDecomposition() IOobject ( "boundaryProcAddressing", - "constant", + procMesh.facesInstance(), procMesh.meshSubDir, procMesh, IOobject::NO_READ, diff --git a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C index 15eb039bfd847dbeddb8dd6414c57711d72cad5b..f5a6451c1266b6a0e02c165c3501c037c7f85b64 100644 --- a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C +++ b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.C @@ -56,13 +56,12 @@ processorVolPatchFieldDecomposer const unallocLabelList& addressingSlice ) : - addressing_(addressingSlice.size()), - weights_(addressingSlice.size()) + directAddressing_(addressingSlice.size()) { const labelList& own = mesh.faceOwner(); const labelList& neighb = mesh.faceNeighbour(); - forAll (addressing_, i) + forAll (directAddressing_, i) { // Subtract one to align addressing. label ai = mag(addressingSlice[i]) - 1; @@ -74,18 +73,14 @@ processorVolPatchFieldDecomposer // on the parallel boundary. // Give face the value of the neighbour. - addressing_[i].setSize(1); - weights_[i].setSize(1); - weights_[i][0] = 1.0; - if (addressingSlice[i] >= 0) { // I have the owner so use the neighbour value - addressing_[i][0] = neighb[ai]; + directAddressing_[i] = neighb[ai]; } else { - addressing_[i][0] = own[ai]; + directAddressing_[i] = own[ai]; } } else @@ -96,12 +91,7 @@ processorVolPatchFieldDecomposer // up the different (face) list of data), so I will // just grab the value from the owner cell - addressing_[i].setSize(1); - weights_[i].setSize(1); - - addressing_[i][0] = own[ai]; - - weights_[i][0] = 1.0; + directAddressing_[i] = own[ai]; } } } diff --git a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.H b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.H index 9641bf031b86af158c15d3c5b6078404be782c14..89b69a17813895772c74686a47c921fcff44b277 100644 --- a/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.H +++ b/applications/utilities/parallelProcessing/decomposePar/fvFieldDecomposer.H @@ -96,15 +96,16 @@ public: }; - //- Processor patch field decomposer class + //- Processor patch field decomposer class. Maps either owner or + // neighbour data (no interpolate anymore - processorFvPatchField + // holds neighbour data) class processorVolPatchFieldDecomposer : public fvPatchFieldMapper { // Private data - labelListList addressing_; - scalarListList weights_; + labelList directAddressing_; public: @@ -120,27 +121,23 @@ public: label size() const { - return addressing_.size(); + return directAddressing_.size(); } bool direct() const { - return false; - } - - const labelListList& addressing() const - { - return addressing_; + return true; } - const scalarListList& weights() const + const unallocLabelList& directAddressing() const { - return weights_; + return directAddressing_; } }; - //- Processor patch field decomposer class + //- Processor patch field decomposer class. Surface field is assumed + // to have direction (so manipulates sign when mapping) class processorSurfacePatchFieldDecomposer : public fvPatchFieldMapper diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightField.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightField.C index 64452a05f70c00bffbfc7ab792e545a4cda369a7..90a597e57888a3e2155b7deba0efb09e90f04a12 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightField.C +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightField.C @@ -178,7 +178,6 @@ void writeAllDataBinary } - template<class Type> void writeAllFaceData ( @@ -275,7 +274,7 @@ template<class Type> bool writePatchField ( const Foam::Field<Type>& pf, - const Foam::label patchI, + const Foam::label patchi, const Foam::label ensightPatchI, const Foam::faceSets& boundaryFaceSet, const Foam::ensightMesh::nFacePrimitives& nfp, @@ -335,7 +334,7 @@ template<class Type> bool writePatchFieldBinary ( const Foam::Field<Type>& pf, - const Foam::label patchI, + const Foam::label patchi, const Foam::label ensightPatchI, const Foam::faceSets& boundaryFaceSet, const Foam::ensightMesh::nFacePrimitives& nfp, @@ -406,34 +405,27 @@ void writePatchField const Time& runTime = eMesh.mesh().time(); const List<faceSets>& boundaryFaceSets = eMesh.boundaryFaceSets(); - const HashTable<labelList>& allPatchNames = eMesh.allPatchNames(); - const HashTable<label>& patchIndices = eMesh.patchIndices(); + const wordList& allPatchNames = eMesh.allPatchNames(); + const List<labelList>& allPatchProcs = eMesh.allPatchProcs(); const HashTable<ensightMesh::nFacePrimitives>& nPatchPrims = eMesh.nPatchPrims(); - label patchI = -1; - - if (patchIndices.found(patchName)) - { - patchI = patchIndices.find(patchName)(); - } - label ensightPatchI = eMesh.patchPartOffset(); - for - ( - HashTable<labelList>::const_iterator iter = - allPatchNames.begin(); - iter != allPatchNames.end(); - ++iter - ) + label patchi = -1; + + forAll(allPatchNames, i) { - if (iter.key() == patchName) break; + if (allPatchNames[i] == patchName) + { + patchi = i; + break; + } ensightPatchI++; } - const labelList& patchProcessors = allPatchNames.find(patchName)(); + const labelList& patchProcessors = allPatchProcs[patchi]; word pfName = patchName + '.' + fieldName; @@ -472,14 +464,14 @@ void writePatchField ensightFile << pTraits<Type>::typeName << nl; } - if (patchI >= 0) + if (patchi >= 0) { writePatchField ( pf, - patchI, + patchi, ensightPatchI, - boundaryFaceSets[patchI], + boundaryFaceSets[patchi], nPatchPrims.find(patchName)(), patchProcessors, ensightFile @@ -507,6 +499,7 @@ void writePatchField } } + template<class Type> void ensightFieldAscii ( @@ -527,8 +520,8 @@ void ensightFieldAscii const cellSets& meshCellSets = eMesh.meshCellSets(); const List<faceSets>& boundaryFaceSets = eMesh.boundaryFaceSets(); - const HashTable<labelList>& allPatchNames = eMesh.allPatchNames(); - const HashTable<label>& patchIndices = eMesh.patchIndices(); + const wordList& allPatchNames = eMesh.allPatchNames(); + const List<labelList>& allPatchProcs = eMesh.allPatchProcs(); const wordHashSet& patchNames = eMesh.patchNames(); const HashTable<ensightMesh::nFacePrimitives>& nPatchPrims = eMesh.nPatchPrims(); @@ -623,30 +616,23 @@ void ensightFieldAscii label ensightPatchI = eMesh.patchPartOffset(); - for - ( - HashTable<labelList>::const_iterator iter = allPatchNames.begin(); - iter != allPatchNames.end(); - ++iter - ) + forAll(allPatchNames, patchi) { - const word& patchName = iter.key(); - const labelList& patchProcessors = iter(); + const word& patchName = allPatchNames[patchi]; + const labelList& patchProcessors = allPatchProcs[patchi]; if (patchNames.empty() || patchNames.found(patchName)) { - if (patchIndices.found(patchName)) + if (mesh.boundary()[patchi].size()) { - label patchI = patchIndices.find(patchName)(); - if ( writePatchField ( - vf.boundaryField()[patchI], - patchI, + vf.boundaryField()[patchi], + patchi, ensightPatchI, - boundaryFaceSets[patchI], + boundaryFaceSets[patchi], nPatchPrims.find(patchName)(), patchProcessors, ensightFile @@ -708,8 +694,8 @@ void ensightFieldBinary const cellSets& meshCellSets = eMesh.meshCellSets(); const List<faceSets>& boundaryFaceSets = eMesh.boundaryFaceSets(); - const HashTable<labelList>& allPatchNames = eMesh.allPatchNames(); - const HashTable<label>& patchIndices = eMesh.patchIndices(); + const wordList& allPatchNames = eMesh.allPatchNames(); + const List<labelList>& allPatchProcs = eMesh.allPatchProcs(); const wordHashSet& patchNames = eMesh.patchNames(); const HashTable<ensightMesh::nFacePrimitives>& nPatchPrims = eMesh.nPatchPrims(); @@ -726,7 +712,11 @@ void ensightFieldBinary { // set the filename of the ensight file fileName ensightFileName(timeFile + "." + fieldObject.name()); - ensightFilePtr = new std::ofstream((postProcPath/ensightFileName).c_str(), ios_base::out | ios_base::binary | ios_base::trunc); + ensightFilePtr = new std::ofstream + ( + (postProcPath/ensightFileName).c_str(), + ios_base::out | ios_base::binary | ios_base::trunc + ); // Check on file opened? } @@ -787,38 +777,62 @@ void ensightFieldBinary } } - writeAllDataBinary("penta6", vf, prisms, meshCellSets.nPrisms, ensightFile); - writeAllDataBinary("pyramid5", vf, pyrs, meshCellSets.nPyrs, ensightFile); - writeAllDataBinary("tetra4", vf, tets, meshCellSets.nTets, ensightFile); - writeAllDataBinary("nfaced", vf, polys, meshCellSets.nPolys, ensightFile); + writeAllDataBinary + ( + "penta6", + vf, + prisms, + meshCellSets.nPrisms, + ensightFile + ); + + writeAllDataBinary + ( + "pyramid5", + vf, + pyrs, + meshCellSets.nPyrs, + ensightFile + ); + + writeAllDataBinary + ( + "tetra4", + vf, + tets, + meshCellSets.nTets, + ensightFile + ); + + writeAllDataBinary + ( + "nfaced", + vf, + polys, + meshCellSets.nPolys, + ensightFile + ); } label ensightPatchI = eMesh.patchPartOffset(); - for - ( - HashTable<labelList>::const_iterator iter = allPatchNames.begin(); - iter != allPatchNames.end(); - ++iter - ) + forAll(allPatchNames, patchi) { - const word& patchName = iter.key(); - const labelList& patchProcessors = iter(); + const word& patchName = allPatchNames[patchi]; + const labelList& patchProcessors = allPatchProcs[patchi]; if (patchNames.empty() || patchNames.found(patchName)) { - if (patchIndices.found(patchName)) + if (mesh.boundary()[patchi].size()) { - label patchI = patchIndices.find(patchName)(); - if ( writePatchFieldBinary ( - vf.boundaryField()[patchI], - patchI, + vf.boundaryField()[patchi], + patchi, ensightPatchI, - boundaryFaceSets[patchI], + boundaryFaceSets[patchi], nPatchPrims.find(patchName)(), patchProcessors, ensightFile @@ -859,6 +873,7 @@ void ensightFieldBinary } } + template<class Type> void ensightField ( diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C index 079145a0c567597811b54295430bf454d350c24e..c3262e6b9c4d3d98e1eacb8d5f50af6cb45fedb9 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.C @@ -28,6 +28,7 @@ License #include "Time.H" #include "ensightMesh.H" #include "fvMesh.H" +#include "globalMeshData.H" #include "PstreamCombineReduceOps.H" #include "processorPolyPatch.H" #include "cellModeller.H" @@ -40,43 +41,37 @@ License namespace Foam { + //- Proxy-class to hold the patch processor list combination operator + class concatPatchProcs + { -class concatPatchNames -{ - -public: + public: - void operator() - ( - HashTable<labelList>& x, - const HashTable<labelList>& y - ) const - { - forAllConstIter(HashTable<labelList>, y, iter) + void operator() + ( + List<labelList>& x, + const List<labelList>& y + ) const { - HashTable<labelList>::iterator xiter = x.find(iter.key()); - - if (xiter == x.end()) - { - x.insert(iter.key(), iter()); - } - else + forAll(y, i) { - labelList& xPatches = xiter(); - const labelList& yPatches = iter(); - - label offset = xPatches.size(); - xPatches.setSize(offset + yPatches.size()); + const labelList& yPatches = y[i]; - forAll(yPatches, i) + if (yPatches.size()) { - xPatches[i + offset] = yPatches[i]; + labelList& xPatches = x[i]; + + label offset = xPatches.size(); + xPatches.setSize(offset + yPatches.size()); + + forAll(yPatches, i) + { + xPatches[i + offset] = yPatches[i]; + } } } } - } -}; - + }; } // End namespace Foam @@ -95,7 +90,7 @@ Foam::ensightMesh::ensightMesh meshCellSets_(mesh_.nCells()), boundaryFaceSets_(mesh_.boundary().size()), allPatchNames_(0), - patchIndices_(0), + allPatchProcs_(0), patchNames_(0), nPatchPrims_(0) { @@ -109,32 +104,24 @@ Foam::ensightMesh::ensightMesh if (!args.optionFound("noPatches")) { - forAll (mesh_.boundaryMesh(), patchI) + allPatchNames_ = wordList::subList + ( + mesh_.boundaryMesh().names(), mesh_.boundary().size() + - mesh_.globalData().processorPatches().size() + ); + + allPatchProcs_.setSize(allPatchNames_.size()); + + forAll (allPatchProcs_, patchi) { - if - ( - typeid(mesh_.boundaryMesh()[patchI]) - != typeid(processorPolyPatch) - ) + if (mesh_.boundary()[patchi].size()) { - if (!allPatchNames_.found(mesh_.boundaryMesh()[patchI].name())) - { - allPatchNames_.insert - ( - mesh_.boundaryMesh()[patchI].name(), - labelList(1, Pstream::myProcNo()) - ); - - patchIndices_.insert - ( - mesh_.boundaryMesh()[patchI].name(), - patchI - ); - } + allPatchProcs_[patchi].setSize(1); + allPatchProcs_[patchi][0] = Pstream::myProcNo(); } } - combineReduce(allPatchNames_, concatPatchNames()); + combineReduce(allPatchProcs_, concatPatchProcs()); if (args.optionFound("patches")) { @@ -142,7 +129,7 @@ Foam::ensightMesh::ensightMesh if (patchNameList.empty()) { - patchNameList = allPatchNames_.toc(); + patchNameList = allPatchNames_; } forAll (patchNameList, i) @@ -230,15 +217,15 @@ Foam::ensightMesh::ensightMesh if (!args.optionFound("noPatches")) { - forAll (mesh.boundary(), patchI) + forAll (mesh.boundary(), patchi) { - if (mesh.boundary()[patchI].size()) + if (mesh.boundary()[patchi].size()) { - const polyPatch& p = mesh.boundaryMesh()[patchI]; + const polyPatch& p = mesh.boundaryMesh()[patchi]; - labelList& tris = boundaryFaceSets_[patchI].tris; - labelList& quads = boundaryFaceSets_[patchI].quads; - labelList& polys = boundaryFaceSets_[patchI].polys; + labelList& tris = boundaryFaceSets_[patchi].tris; + labelList& quads = boundaryFaceSets_[patchi].quads; + labelList& polys = boundaryFaceSets_[patchi].polys; tris.setSize(p.size()); quads.setSize(p.size()); @@ -274,21 +261,19 @@ Foam::ensightMesh::ensightMesh } - forAllConstIter(HashTable<labelList>, allPatchNames_, iter) + forAll(allPatchNames_, patchi) { - const word& patchName = iter.key(); + const word& patchName = allPatchNames_[patchi]; nFacePrimitives nfp; if (patchNames_.empty() || patchNames_.found(patchName)) { - if (patchIndices_.found(patchName)) + if (mesh.boundary()[patchi].size()) { - label patchI = patchIndices_.find(patchName)(); - - nfp.nPoints = mesh.boundaryMesh()[patchI].localPoints().size(); - nfp.nTris = boundaryFaceSets_[patchI].tris.size(); - nfp.nQuads = boundaryFaceSets_[patchI].quads.size(); - nfp.nPolys = boundaryFaceSets_[patchI].polys.size(); + nfp.nPoints = mesh.boundaryMesh()[patchi].localPoints().size(); + nfp.nTris = boundaryFaceSets_[patchi].tris.size(); + nfp.nQuads = boundaryFaceSets_[patchi].quads.size(); + nfp.nPolys = boundaryFaceSets_[patchi].polys.size(); } } @@ -1052,13 +1037,13 @@ void Foam::ensightMesh::writeAscii label ensightPatchI = patchPartOffset_; - forAllConstIter(HashTable<labelList>, allPatchNames_, iter) + forAll(allPatchNames_, patchi) { - const labelList& patchProcessors = iter(); + const word& patchName = allPatchNames_[patchi]; + const labelList& patchProcessors = allPatchProcs_[patchi]; - if (patchNames_.empty() || patchNames_.found(iter.key())) + if (patchNames_.empty() || patchNames_.found(patchName)) { - const word& patchName = iter.key(); const nFacePrimitives& nfp = nPatchPrims_.find(patchName)(); const labelList *trisPtr = NULL; @@ -1068,14 +1053,13 @@ void Foam::ensightMesh::writeAscii const pointField *patchPointsPtr = NULL; const faceList *patchFacesPtr = NULL; - if (patchIndices_.found(iter.key())) + if (mesh_.boundary()[patchi].size()) { - label patchI = patchIndices_.find(iter.key())(); - const polyPatch& p = mesh_.boundaryMesh()[patchI]; + const polyPatch& p = mesh_.boundaryMesh()[patchi]; - trisPtr = &boundaryFaceSets_[patchI].tris; - quadsPtr = &boundaryFaceSets_[patchI].quads; - polysPtr = &boundaryFaceSets_[patchI].polys; + trisPtr = &boundaryFaceSets_[patchi].tris; + quadsPtr = &boundaryFaceSets_[patchi].quads; + polysPtr = &boundaryFaceSets_[patchi].polys; patchPointsPtr = &(p.localPoints()); patchFacesPtr = &(p.localFaces()); @@ -1265,7 +1249,7 @@ void Foam::ensightMesh::writeBinary { writeEnsDataBinary("part",ensightGeometryFile); writeEnsDataBinary(1,ensightGeometryFile); - writeEnsDataBinary("FOAM cells",ensightGeometryFile); + writeEnsDataBinary("internalMesh",ensightGeometryFile); writeEnsDataBinary("coordinates",ensightGeometryFile); writeEnsDataBinary(nPoints,ensightGeometryFile); @@ -1379,14 +1363,14 @@ void Foam::ensightMesh::writeBinary label ensightPatchI = patchPartOffset_; label iCount = 0; - forAllConstIter(HashTable<labelList>, allPatchNames_, iter) + forAll(allPatchNames_, patchi) { iCount ++; - const labelList& patchProcessors = iter(); + const word& patchName = allPatchNames_[patchi]; + const labelList& patchProcessors = allPatchProcs_[patchi]; - if (patchNames_.empty() || patchNames_.found(iter.key())) + if (patchNames_.empty() || patchNames_.found(patchName)) { - const word& patchName = iter.key(); const nFacePrimitives& nfp = nPatchPrims_.find(patchName)(); const labelList *trisPtr = NULL; @@ -1396,14 +1380,13 @@ void Foam::ensightMesh::writeBinary const pointField *patchPointsPtr = NULL; const faceList *patchFacesPtr = NULL; - if (patchIndices_.found(iter.key())) + if (mesh_.boundary()[patchi].size()) { - label patchI = patchIndices_.find(iter.key())(); - const polyPatch& p = mesh_.boundaryMesh()[patchI]; + const polyPatch& p = mesh_.boundaryMesh()[patchi]; - trisPtr = &boundaryFaceSets_[patchI].tris; - quadsPtr = &boundaryFaceSets_[patchI].quads; - polysPtr = &boundaryFaceSets_[patchI].polys; + trisPtr = &boundaryFaceSets_[patchi].tris; + quadsPtr = &boundaryFaceSets_[patchi].quads; + polysPtr = &boundaryFaceSets_[patchi].polys; patchPointsPtr = &(p.localPoints()); patchFacesPtr = &(p.localFaces()); @@ -1424,7 +1407,7 @@ void Foam::ensightMesh::writeBinary writeEnsDataBinary("part",ensightGeometryFile); writeEnsDataBinary(ensightPatchI++,ensightGeometryFile); //writeEnsDataBinary(patchName.c_str(),ensightGeometryFile); - writeEnsDataBinary(iter.key().c_str(),ensightGeometryFile); + writeEnsDataBinary(patchName.c_str(),ensightGeometryFile); writeEnsDataBinary("coordinates",ensightGeometryFile); writeEnsDataBinary(nfp.nPoints,ensightGeometryFile); diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H index 6a3cb824708bb7a3e7543f327acc69fc2c918379..4ddb084d3d054c34961fb8e1d4c3a5a3bcb3db52 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/ensightMesh.H @@ -91,9 +91,9 @@ class ensightMesh List<faceSets> boundaryFaceSets_; - HashTable<labelList> allPatchNames_; + wordList allPatchNames_; - HashTable<label> patchIndices_; + List<labelList> allPatchProcs_; wordHashSet patchNames_; @@ -269,14 +269,14 @@ public: return boundaryFaceSets_; } - const HashTable<labelList>& allPatchNames() const + const wordList& allPatchNames() const { return allPatchNames_; } - const HashTable<label>& patchIndices() const + const List<labelList>& allPatchProcs() const { - return patchIndices_; + return allPatchProcs_; } const wordHashSet& patchNames() const diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index 9bce0df59f259b5849ab9209e2ef6a94c78c264b..74ac3c5676bbeac0ae3b6da5d57348f6ff7d83a3 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -90,6 +90,9 @@ Usage The quoting is required to avoid shell expansions and to pass the information as a single argument. + @param -useTimeName \n + use the time index in the VTK file name instead of the time index + Note mesh subset is handled by vtkMesh. Slight inconsistency in interpolation: on the internal field it interpolates the whole volfield @@ -242,6 +245,7 @@ int main(int argc, char *argv[]) argList::validOptions.insert("excludePatches","patches to exclude"); argList::validOptions.insert("noFaceZones",""); argList::validOptions.insert("noLinks",""); + argList::validOptions.insert("useTimeName",""); # include "setRootCase.H" # include "createTime.H" @@ -250,6 +254,7 @@ int main(int argc, char *argv[]) bool doFaceZones = !args.optionFound("noFaceZones"); bool doLinks = !args.optionFound("noLinks"); bool binary = !args.optionFound("ascii"); + bool useTimeName = args.optionFound("useTimeName"); if (binary && (sizeof(floatScalar) != 4 || sizeof(label) != 4)) { @@ -359,6 +364,16 @@ int main(int argc, char *argv[]) Info<< "Time: " << runTime.timeName() << endl; + word timeDesc = ""; + if (useTimeName) + { + timeDesc = runTime.timeName(); + } + else + { + timeDesc = name(runTime.timeIndex()); + } + // Check for new polyMesh/ and update mesh, fvMeshSubset and cell // decomposition. polyMesh::readUpdateState meshState = vMesh.readUpdate(); @@ -388,7 +403,7 @@ int main(int argc, char *argv[]) ( fvPath/set.name()/set.name() + "_" - + name(timeI) + + timeDesc + ".vtk" ); @@ -411,7 +426,7 @@ int main(int argc, char *argv[]) ( fvPath/set.name()/set.name() + "_" - + name(timeI) + + timeDesc + ".vtk" ); @@ -548,7 +563,7 @@ int main(int argc, char *argv[]) ( fvPath/vtkName + "_" - + name(timeI) + + timeDesc + ".vtk" ); @@ -654,8 +669,8 @@ int main(int argc, char *argv[]) fvPath /"surfaceFields" /"surfaceFields" - + "_" - + name(timeI) + + "_" + + timeDesc + ".vtk" ); @@ -689,7 +704,7 @@ int main(int argc, char *argv[]) patchFileName = fvPath/"allPatches"/cellSetName + "_" - + name(timeI) + + timeDesc + ".vtk"; } else @@ -697,7 +712,7 @@ int main(int argc, char *argv[]) patchFileName = fvPath/"allPatches"/"allPatches" + "_" - + name(timeI) + + timeDesc + ".vtk"; } @@ -767,7 +782,7 @@ int main(int argc, char *argv[]) patchFileName = fvPath/pp.name()/cellSetName + "_" - + name(timeI) + + timeDesc + ".vtk"; } else @@ -775,7 +790,7 @@ int main(int argc, char *argv[]) patchFileName = fvPath/pp.name()/pp.name() + "_" - + name(timeI) + + timeDesc + ".vtk"; } @@ -867,7 +882,7 @@ int main(int argc, char *argv[]) patchFileName = fvPath/pp.name()/cellSetName + "_" - + name(timeI) + + timeDesc + ".vtk"; } else @@ -875,7 +890,7 @@ int main(int argc, char *argv[]) patchFileName = fvPath/pp.name()/pp.name() + "_" - + name(timeI) + + timeDesc + ".vtk"; } @@ -931,7 +946,7 @@ int main(int argc, char *argv[]) fileName lagrFileName ( fvPath/cloud::prefix/cloudDirs[i]/cloudDirs[i] - + "_" + name(timeI) + ".vtk" + + "_" + timeDesc + ".vtk" ); Info<< " Lagrangian: " << lagrFileName << endl; diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/CMakeLists.txt b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/CMakeLists.txt index 17be614da4d2e9db4390f247b195c4f92f351bd9..670b78c33d80f3f2e1db2e6f4ce3ac7e0f0551cf 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/CMakeLists.txt +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/CMakeLists.txt @@ -23,7 +23,7 @@ INCLUDE_DIRECTORIES( ) ADD_DEFINITIONS( - -D$ENV{WM_PRECISION_OPTION} + -DWM_$ENV{WM_PRECISION_OPTION} ) # Set output library destination to plugin folder diff --git a/applications/utilities/postProcessing/graphics/PVFoamReader/PVFoamReader/CMakeLists.txt b/applications/utilities/postProcessing/graphics/PVFoamReader/PVFoamReader/CMakeLists.txt index acbe2254eb0a63be837caad19a7727dc231c0160..1c88efbbfff2b768cc1cdb3938bc190d54d7e45e 100644 --- a/applications/utilities/postProcessing/graphics/PVFoamReader/PVFoamReader/CMakeLists.txt +++ b/applications/utilities/postProcessing/graphics/PVFoamReader/PVFoamReader/CMakeLists.txt @@ -22,7 +22,7 @@ INCLUDE_DIRECTORIES( $ENV{ParaView_INST_DIR}/include ../vtkFoam/lnInclude ) -ADD_DEFINITIONS(-D$ENV{WM_PRECISION_OPTION}) +ADD_DEFINITIONS(-DWM_$ENV{WM_PRECISION_OPTION}) #----------------------------------------------------------------------------- # Most users should not need to change anything below this line. diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/Make/files b/applications/utilities/postProcessing/lagrangian/particleTracks/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..316b0f6ade74d966f2dd2aa14124e4701c2ec5dc --- /dev/null +++ b/applications/utilities/postProcessing/lagrangian/particleTracks/Make/files @@ -0,0 +1,3 @@ +particleTracks.C + +EXE = $(FOAM_APPBIN)/particleTracks diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/Make/options b/applications/utilities/postProcessing/lagrangian/particleTracks/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..1adeeefa12999bb91513d9e0b16a0a52a9fc15d2 --- /dev/null +++ b/applications/utilities/postProcessing/lagrangian/particleTracks/Make/options @@ -0,0 +1,7 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -llagrangian diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/createFields.H b/applications/utilities/postProcessing/lagrangian/particleTracks/createFields.H new file mode 100644 index 0000000000000000000000000000000000000000..aef0139de1db22ae157c16f641ec0b2e54947d47 --- /dev/null +++ b/applications/utilities/postProcessing/lagrangian/particleTracks/createFields.H @@ -0,0 +1,22 @@ +IOdictionary propsDict +( + IOobject + ( + "particleTrackProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ + ) +); + +word cloudName(propsDict.lookup("cloudName")); + +label sampleFrequency(readLabel(propsDict.lookup("sampleFrequency"))); + +// outputMode: compositeFile, filePerTrack +//word outputmode(propsDict.lookup("outputMode")) + +label maxPositions(readLabel(propsDict.lookup("maxPositions"))); + +// outputFormat: raw, vtk +//word outputFormat(propsDict.lookup("outputFormat")); diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C new file mode 100644 index 0000000000000000000000000000000000000000..3ad01ef870cbed3bad0679237c047cff41b22df7 --- /dev/null +++ b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C @@ -0,0 +1,238 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + particleTracks + +Description + Generates a VTK file of particle tracks for cases that were computed using + a tracked-parcel-type cloud + +\*---------------------------------------------------------------------------*/ + +#include "argList.H" +#include "Cloud.H" +#include "IOdictionary.H" +#include "fvMesh.H" +#include "Time.H" +#include "timeSelector.H" +#include "OFstream.H" +#include "passiveParticleCloud.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + timeSelector::addOptions(); + #include "addRegionOption.H" + + #include "setRootCase.H" + + #include "createTime.H" + instantList timeDirs = timeSelector::select0(runTime, args); + #include "createNamedMesh.H" + #include "createFields.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + fileName vtkPath(runTime.path()/"VTK"); + mkDir(vtkPath); + + Info<< "Scanning times to determine track data for cloud " << cloudName + << nl << endl; + + labelList maxIds(Pstream::nProcs(), -1); + forAll(timeDirs, timeI) + { + runTime.setTime(timeDirs[timeI], timeI); + Info<< "Time = " << runTime.timeName() << endl; + + Info<< " Reading particle positions" << endl; + passiveParticleCloud myCloud(mesh, cloudName); + Info<< " Read " << returnReduce(myCloud.size(), sumOp<label>()) + << " particles" << endl; + + forAllConstIter(passiveParticleCloud, myCloud, iter) + { + label origId = iter().origId(); + label origProc = iter().origProc(); + + maxIds[origProc] = max(maxIds[origProc], origId); + } + } + Pstream::listCombineGather(maxIds, maxEqOp<label>()); + Pstream::listCombineScatter(maxIds); + + labelList numIds = maxIds + 1; + + Info<< nl << "Particle statistics:" << endl; + forAll(maxIds, procI) + { + Info<< " Found " << numIds[procI] << " particles originating" + << " from processor " << procI << endl; + } + Info<< nl << endl; + + + // calc starting ids for particles on each processor + List<label> startIds(numIds.size(), 0); + for (label i = 0; i < numIds.size()-1; i++) + { + startIds[i+1] += startIds[i] + numIds[i]; + } + label nParticle = startIds[startIds.size()-1] + numIds[startIds.size()-1]; + + + + // number of tracks to generate + label nTracks = nParticle/sampleFrequency; + + // storage for all particle tracks + List<DynamicList<vector> > allTracks(nTracks); + + Info<< "\nGenerating " << nTracks << " particle tracks for cloud " + << cloudName << nl << endl; + + forAll(timeDirs, timeI) + { + runTime.setTime(timeDirs[timeI], timeI); + Info<< "Time = " << runTime.timeName() << endl; + + List<pointField> allPositions(Pstream::nProcs()); + List<labelField> allOrigIds(Pstream::nProcs()); + List<labelField> allOrigProcs(Pstream::nProcs()); + + // Read particles. Will be size 0 if no particles. + Info<< " Reading particle positions" << endl; + passiveParticleCloud myCloud(mesh, cloudName); + + // collect the track data on all processors that have positions + allPositions[Pstream::myProcNo()].setSize + ( + myCloud.size(), + point::zero + ); + allOrigIds[Pstream::myProcNo()].setSize(myCloud.size(), 0); + allOrigProcs[Pstream::myProcNo()].setSize(myCloud.size(), 0); + + label i = 0; + forAllConstIter(passiveParticleCloud, myCloud, iter) + { + allPositions[Pstream::myProcNo()][i] = iter().position(); + allOrigIds[Pstream::myProcNo()][i] = iter().origId(); + allOrigProcs[Pstream::myProcNo()][i] = iter().origProc(); + i++; + } + + // collect the track data on the master processor + Pstream::gatherList(allPositions); + Pstream::gatherList(allOrigIds); + Pstream::gatherList(allOrigProcs); + + Info<< " Constructing tracks" << nl << endl; + if (Pstream::master()) + { + forAll(allPositions, procI) + { + forAll(allPositions[procI], i) + { + label globalId = + startIds[allOrigProcs[procI][i]] + + allOrigIds[procI][i]; + + if (globalId % sampleFrequency == 0) + { + label trackId = globalId/sampleFrequency; + if (allTracks[trackId].size() < maxPositions) + { + allTracks[trackId].append + ( + allPositions[procI][i] + ); + } + } + } + } + } + } + + if (Pstream::master()) + { + OFstream vtkTracks(vtkPath/"particleTracks.vtk"); + + Info<< "\nWriting particle tracks to " << vtkTracks.name() + << nl << endl; + + // Total number of points in tracks + 1 per track + label nPoints = 0; + forAll(allTracks, trackI) + { + nPoints += allTracks[trackI].size(); + } + + vtkTracks + << "# vtk DataFile Version 2.0" << nl + << "particleTracks" << nl + << "ASCII" << nl + << "DATASET POLYDATA" << nl + << "POINTS " << nPoints << " float" << nl; + + // Write track points to file + forAll(allTracks, trackI) + { + forAll(allTracks[trackI], i) + { + const vector& pt = allTracks[trackI][i]; + vtkTracks << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl; + } + } + + // write track (line) connectivity to file + vtkTracks << "LINES " << nTracks << ' ' << nPoints+nTracks << nl; + + // Write ids of track points to file + label globalPtI = 0; + forAll(allTracks, trackI) + { + vtkTracks << allTracks[trackI].size(); + + forAll(allTracks[trackI], i) + { + vtkTracks << ' ' << globalPtI; + globalPtI++; + } + + vtkTracks << nl; + } + + Info<< "end" << endl; + } + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/Make/files b/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/Make/files old mode 100755 new mode 100644 diff --git a/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/Make/options b/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/Make/options old mode 100755 new mode 100644 diff --git a/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C b/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C index 15c1153db5b17dec5191b50311c85937d588e88b..95077df225fbae93d2ac8db5d3584c81dbe68a60 100644 --- a/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C +++ b/applications/utilities/postProcessing/miscellaneous/dsmcFieldsCalc/dsmcFieldsCalc.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C index 0843f3acf3b72ea161cfb5958493373792787fac..b9310ffc92c5a51be55475d778465399da550a32 100644 --- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C +++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C @@ -42,7 +42,7 @@ Description #include "incompressible/RAS/RASModel/RASModel.H" #include "incompressible/LES/LESModel/LESModel.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "compressible/RAS/RASModel/RASModel.H" #include "compressible/LES/LESModel/LESModel.H" @@ -194,7 +194,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) } else if (phi.dimensions() == dimensionSet(1, 0, -1, 0, 0)) { - autoPtr<basicThermo> thermo(basicThermo::New(mesh)); + autoPtr<basicPsiThermo> thermo(basicPsiThermo::New(mesh)); volScalarField rho ( diff --git a/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C b/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C index dc92aade57b699d0a6b4816c1825684b304b2575..54acae002582bfa1dcb5e09c5c20255be2c7bac4 100644 --- a/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C +++ b/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) // Give patch area if (isType<cyclicPolyPatch>(mesh.boundaryMesh()[patchi])) { - Info<< " Cyclic patch area: " << nl; + Info<< " Cyclic patch vector area: " << nl; label nFaces = mesh.boundaryMesh()[patchi].size(); vector sum1 = vector::zero; vector sum2 = vector::zero; @@ -92,12 +92,18 @@ int main(int argc, char *argv[]) Info<< " - half 1 = " << sum1 << ", " << mag(sum1) << nl << " - half 2 = " << sum2 << ", " << mag(sum2) << nl << " - total = " << (sum1 + sum2) << ", " - << mag(sum1 + sum2) << endl;; + << mag(sum1 + sum2) << endl; + Info<< " Cyclic patch area magnitude = " + << gSum(mesh.magSf().boundaryField()[patchi])/2.0 << endl; } else { - Info<< " Patch area = " + Info<< " Area vector of patch " + << patchName << '[' << patchi << ']' << " = " << gSum(mesh.Sf().boundaryField()[patchi]) << endl; + Info<< " Area magnitude of patch " + << patchName << '[' << patchi << ']' << " = " + << gSum(mesh.magSf().boundaryField()[patchi]) << endl; } // Read field and calc integral @@ -107,15 +113,26 @@ int main(int argc, char *argv[]) << fieldName << endl; volScalarField field(fieldHeader, mesh); - vector sumField = gSum - ( - mesh.Sf().boundaryField()[patchi] - *field.boundaryField()[patchi] - ); - Info<< " Integral of " << fieldName << " over patch " + Info<< " Integral of " << fieldName + << " over vector area of patch " << patchName << '[' << patchi << ']' << " = " - << sumField << nl; + << gSum + ( + mesh.Sf().boundaryField()[patchi] + *field.boundaryField()[patchi] + ) + << nl; + + Info<< " Integral of " << fieldName + << " over area magnitude of patch " + << patchName << '[' << patchi << ']' << " = " + << gSum + ( + mesh.magSf().boundaryField()[patchi] + *field.boundaryField()[patchi] + ) + << nl; } else if ( diff --git a/applications/utilities/postProcessing/velocityField/Mach/Mach.C b/applications/utilities/postProcessing/velocityField/Mach/Mach.C index daa4aa2ccf3d7aef33eef506761f46cb7c168a1c..2e7c517e9d0358f7bbdb37ea0e121384b755f356 100644 --- a/applications/utilities/postProcessing/velocityField/Mach/Mach.C +++ b/applications/utilities/postProcessing/velocityField/Mach/Mach.C @@ -33,7 +33,7 @@ Description \*---------------------------------------------------------------------------*/ #include "calc.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) @@ -66,9 +66,9 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) if (isFile(runTime.constantPath()/"thermophysicalProperties")) { // thermophysical Mach - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> thermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); volScalarField Cp = thermo->Cp(); diff --git a/applications/utilities/postProcessing/velocityField/Mach/thermophysicalMach.H b/applications/utilities/postProcessing/velocityField/Mach/thermophysicalMach.H index 4e4ea81b3d87463b4c8d91fb115e0ea465e4b41b..7283802f7790a6c0cf209195a9273e51697fc017 100644 --- a/applications/utilities/postProcessing/velocityField/Mach/thermophysicalMach.H +++ b/applications/utilities/postProcessing/velocityField/Mach/thermophysicalMach.H @@ -18,9 +18,9 @@ { volVectorField U(Uheader, mesh); - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> thermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); volScalarField Cp = thermo->Cp(); diff --git a/applications/utilities/postProcessing/velocityField/Pe/Pe.C b/applications/utilities/postProcessing/velocityField/Pe/Pe.C index 905074131d9f32b2d3d199dc8f12aae410343cb1..05c9ca1a0d2488dcd717df604e96f230f9cb9c7b 100644 --- a/applications/utilities/postProcessing/velocityField/Pe/Pe.C +++ b/applications/utilities/postProcessing/velocityField/Pe/Pe.C @@ -39,7 +39,7 @@ Description #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" #include "incompressible/RAS/RASModel/RASModel.H" #include "incompressible/LES/LESModel/LESModel.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "compressible/RAS/RASModel/RASModel.H" #include "compressible/LES/LESModel/LESModel.H" @@ -204,7 +204,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { IOdictionary RASProperties(RASPropertiesHeader); - autoPtr<basicThermo> thermo(basicThermo::New(mesh)); + autoPtr<basicPsiThermo> thermo(basicPsiThermo::New(mesh)); volScalarField rho ( @@ -252,7 +252,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { IOdictionary LESProperties(LESPropertiesHeader); - autoPtr<basicThermo> thermo(basicThermo::New(mesh)); + autoPtr<basicPsiThermo> thermo(basicPsiThermo::New(mesh)); volScalarField rho ( diff --git a/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options b/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options index 64ac8299174fe95e6954bf6c3f74967bbdd80004..8cdfe23fd1daf63d9c8e782f084eb202d891dd6e 100644 --- a/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options +++ b/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options @@ -2,13 +2,13 @@ EXE_INC = \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ -lcompressibleRASModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lfiniteVolume \ -lspecie \ -lbasicThermophysicalModels diff --git a/applications/utilities/postProcessing/wall/yPlusLES/Make/options b/applications/utilities/postProcessing/wall/yPlusLES/Make/options index 79fbbac91eff3fd29abdd775aa543a905a0c1162..f6131ce41c17a8d8d5b852fe0e1f07e1d62308f6 100644 --- a/applications/utilities/postProcessing/wall/yPlusLES/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusLES/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/LES/LESModel \ -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ diff --git a/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C b/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C index 82ee27fa0ab6580cfcece3f9854718ded7abe196..67dc0df3f0e8c333fb2996255b047c34f8455f3c 100644 --- a/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C +++ b/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C @@ -34,6 +34,7 @@ Description #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" #include "LESModel.H" #include "nearWallDist.H" +#include "wallDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -49,7 +50,18 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; - mesh.readUpdate(); + fvMesh::readUpdateState state = mesh.readUpdate(); + + // Wall distance + if (timeI == 0 || state != fvMesh::UNCHANGED) + { + Info<< "Calculating wall distance\n" << endl; + wallDist y(mesh, true); + Info<< "Writing wall distance to field " + << y.name() << nl << endl; + y.write(); + } + volScalarField yPlus ( @@ -116,6 +128,9 @@ int main(int argc, char *argv[]) } } + Info<< "Writing yPlus to field " + << yPlus.name() << nl << endl; + yPlus.write(); } diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options index 89632547e0815e442b8f0082777fabb715fbc981..9ec5fca52baaa1f55b00483950ab4cf2ad1f9909 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C index 7d1e4796f2b5f75ae740b31169a522bbc9dfbd9d..a93712263e6aafbc375270c815609afc5aae904f 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C +++ b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C @@ -34,6 +34,7 @@ Description #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" #include "RASModel.H" #include "wallFvPatch.H" +#include "wallDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -49,7 +50,17 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; - mesh.readUpdate(); + fvMesh::readUpdateState state = mesh.readUpdate(); + + // Wall distance + if (timeI == 0 || state != fvMesh::UNCHANGED) + { + Info<< "Calculating wall distance\n" << endl; + wallDist y(mesh, true); + Info<< "Writing wall distance to field " + << y.name() << nl << endl; + y.write(); + } volScalarField yPlus ( @@ -106,6 +117,9 @@ int main(int argc, char *argv[]) } } + Info<< "Writing yPlus to field " + << yPlus.name() << nl << endl; + yPlus.write(); } diff --git a/applications/utilities/preProcessing/dsmcInitialise/Make/files b/applications/utilities/preProcessing/dsmcInitialise/Make/files old mode 100755 new mode 100644 diff --git a/applications/utilities/preProcessing/dsmcInitialise/Make/options b/applications/utilities/preProcessing/dsmcInitialise/Make/options old mode 100755 new mode 100644 diff --git a/applications/utilities/preProcessing/dsmcInitialise/dsmcInitialise.C b/applications/utilities/preProcessing/dsmcInitialise/dsmcInitialise.C index c2f797c17e0d027bcdfc6ccd86770f03c6a4ae4d..f8b831001df83cdafbfb6998a79312ed03176049 100644 --- a/applications/utilities/preProcessing/dsmcInitialise/dsmcInitialise.C +++ b/applications/utilities/preProcessing/dsmcInitialise/dsmcInitialise.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/preProcessing/mdInitialise/Make/files b/applications/utilities/preProcessing/mdInitialise/Make/files old mode 100755 new mode 100644 diff --git a/applications/utilities/preProcessing/mdInitialise/Make/options b/applications/utilities/preProcessing/mdInitialise/Make/options old mode 100755 new mode 100644 diff --git a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C index 2f06531e335727955a2c8ac97d908da5d71c1937..ecd0221957f1a6836a9b98f838917a907e3d7149 100644 --- a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C +++ b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/files b/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/files deleted file mode 100755 index 6501e68426960c755a310e7a12b7b53548ddeb98..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/files +++ /dev/null @@ -1,8 +0,0 @@ -latticeStructures = latticeStructures -velocityDistributions = velocityDistributions - -createMolecules.C -molConfig.C -genMolConfig.C - -EXE = $(FOAM_APPBIN)/molConfig diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/options b/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/options deleted file mode 100755 index aab9a2ca4f7e9119ebfa389b5b14b74911317f1a..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/options +++ /dev/null @@ -1,17 +0,0 @@ -EXE_INC = \ - -I$(latticeStructures) \ - -I$(velocityDistributions) \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/dynamicMesh/lnInclude \ - -I$(LIB_SRC)/lagrangian/molecularDynamics/molecule/lnInclude \ - -I$(LIB_SRC)/lagrangian/molecularDynamics/potential/lnInclude \ - -I$(LIB_SRC)/lagrangian/basic/lnInclude \ - -I$(LIB_SRC)/finiteVolume/lnInclude - -EXE_LIBS = \ - -lmeshTools \ - -ldynamicMesh \ - -lfiniteVolume \ - -llagrangian \ - -lmolecule \ - -lpotential diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/correctVelocities.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/correctVelocities.H deleted file mode 100644 index 0c69f15c7cda7cff0fa4387196c1dbea09c096e1..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/correctVelocities.H +++ /dev/null @@ -1,21 +0,0 @@ -for (molN = totalMols; molN < totalMols + totalZoneMols; molN++) -{ - - // Remove bulk momentum introduced by random numbers and add - // desired bulk velocity - - // For systems with molecules of significantly differing masses, this may - // need to be an iterative process or employ a better algorithm for - // removing an appropriate share of the excess momentum from each molecule. - - initialVelocities(molN) += bulkVelocity - momentumSum/totalZoneMols/mass; -} - -// momentumSum = vector::zero; -// -// for (molN = totalMols; molN < totalMols + totalZoneMols; molN++) -// { -// momentumSum += mass*initialVelocities(molN); -// } -// -// Info << "Check momentum adjustment: " << momentumSum << endl; diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createMolecules.C b/applications/utilities/preProcessing/mdInitialise/molConfig_old/createMolecules.C deleted file mode 100644 index dbb0f680ce2ee87e3e0846f9a4c8b50b3ca4c876..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createMolecules.C +++ /dev/null @@ -1,253 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*----------------------------------------------------------------------------*/ - -#include "molConfig.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -void Foam::molConfig::createMolecules() -{ - Info<< nl << "Creating molecules from zone specifications\n" << endl; - - DynamicList<vector> initialPositions(0); - - DynamicList<label> initialIds(0); - - DynamicList<scalar> initialMasses(0); - - DynamicList<label> initialCelli(0); - - DynamicList<vector> initialVelocities(0); - - DynamicList<vector> initialAccelerations(0); - - DynamicList<label> initialTethered(0); - - DynamicList<vector> initialTetherPositions(0); - - label totalMols = 0; - - label idAssign; - - Random rand(clock::getTime()); - -// * * * * * * * * Building the IdList * * * * * * * * * // - -//Notes: - each processor will have an identical idList_. -// - The order of id's inside the idList_ depends on the order -// of subDicts inside the molConigDict. - - Info<< "Building the idList: " ; - - forAll(molConfigDescription_.toc(), cZs) - { - word subDictName (molConfigDescription_.toc()[cZs]); - - word iD (molConfigDescription_.subDict(subDictName).lookup("id")); - - if (findIndex(idList_,iD) == -1) - { - idList_.append(iD); - } - } - - forAll(idList_, i) - { - Info << " " << idList_[i]; - } - - Info << nl << endl; - -// * * * * * * * * Filling the Mesh * * * * * * * * * // - - const cellZoneMesh& cellZoneI = mesh_.cellZones(); - - if (cellZoneI.size()) - { - Info<< "Filling the zones with molecules." << nl << endl; - } - else - { - FatalErrorIn("void createMolecules()\n") - << "No cellZones found in mesh description." - << abort(FatalError); - } - - forAll (cellZoneI, cZ) - { - if (cellZoneI[cZ].size()) - { - if (!molConfigDescription_.found(cellZoneI[cZ].name())) - { - Info << "Zone specification subDictionary: " - << cellZoneI[cZ].name() << " not found." << endl; - } - else - { - label n = 0; - - label totalZoneMols = 0; - - label molsPlacedThisIteration; - -# include "readZoneSubDict.H" - - idAssign = findIndex(idList_,id); - -# include "startingPoint.H" - - // Continue trying to place molecules as long as at - // least one molecule is placed in each iteration. - // The "|| totalZoneMols == 0" condition means that the - // algorithm will continue if the origin is outside the - // zone - it will cause an infinite loop if no molecules - // are ever placed by the algorithm. - - if (latticeStructure != "empty") - { - - while - ( - molsPlacedThisIteration != 0 - || totalZoneMols == 0 - ) - { - molsPlacedThisIteration = 0; - - bool partOfLayerInBounds = false; - -# include "createPositions.H" - - if - ( - totalZoneMols == 0 - && !partOfLayerInBounds - ) - { - WarningIn("molConfig::createMolecules()") - << "A whole layer of unit cells was placed " - << "outside the bounds of the mesh, but no " - << "molecules have been placed in zone '" - << cellZoneI[cZ].name() - << "'. This is likely to be because the zone " - << "has few cells (" - << cellZoneI[cZ].size() - << " in this case) and no lattice position " - << "fell inside them. " - << "Aborting filling this zone." - << endl; - - break; - } - - totalZoneMols += molsPlacedThisIteration; - - n++; - } - - label molN; - - for - ( - molN = totalMols; - molN < totalMols + totalZoneMols; - molN++ - ) - { - initialIds.append(idAssign); - - initialMasses.append(mass); - - initialAccelerations.append(vector::zero); - - if (tethered) - { - initialTethered.append(1); - - initialTetherPositions.append - ( - initialPositions[molN] - ); - } - - else - { - initialTethered.append(0); - - initialTetherPositions.append(vector::zero); - } - } - -# include "createVelocities.H" - -# include "correctVelocities.H" - - } - - totalMols += totalZoneMols; - } - } - } - - idList_.shrink(); - - positions_ = initialPositions; - - positions_.setSize(initialPositions.size()); - - id_ = initialIds; - - id_.setSize(initialIds.size()); - - mass_ = initialMasses; - - mass_.setSize(initialMasses.size()); - - cells_ = initialCelli; - - cells_.setSize(initialCelli.size()); - - U_ = initialVelocities; - - U_.setSize(initialVelocities.size()); - - A_ = initialAccelerations; - - A_.setSize(initialAccelerations.size()); - - tethered_ = initialTethered; - - tethered_.setSize(initialTethered.size()); - - tetherPositions_ = initialTetherPositions; - - tetherPositions_.setSize(initialTetherPositions.size()); - - nMol_ = totalMols; -} - - -// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createPositions.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/createPositions.H deleted file mode 100644 index b26486338caf7228188244aac4e989fb9380cb0d..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createPositions.H +++ /dev/null @@ -1,26 +0,0 @@ -vector latticePosition; - -vector globalPosition; - -if (latticeStructure == "SC") -{ -# include "SC.H" -} - -else if (latticeStructure == "FCC") -{ -# include "FCC.H" -} - -else if (latticeStructure == "BCC") -{ -# include "BCC.H" -} - -else -{ - FatalErrorIn("createPositions.H\n") - << "latticeStructure " << latticeStructure - << " not supported." - << abort(FatalError); -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createVelocities.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/createVelocities.H deleted file mode 100644 index d014ffd146044db0be9307b511e793ee490f0464..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createVelocities.H +++ /dev/null @@ -1,13 +0,0 @@ -vector velocity; - -vector momentumSum = vector::zero; - -if (velocityDistribution == "uniform") -{ -# include "uniform.H" -} - -if (velocityDistribution == "maxwellian") -{ -# include "maxwellian.H" -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/genMolConfig.C b/applications/utilities/preProcessing/mdInitialise/molConfig_old/genMolConfig.C deleted file mode 100644 index 7df9ce562228a12973103ba1ea7ce7d95b7d47e3..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/genMolConfig.C +++ /dev/null @@ -1,129 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "molConfig.H" -#include "fvCFD.H" - -using namespace Foam; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Main program: - -int main(int argc, char *argv[]) -{ -# include "setRootCase.H" -# include "createTime.H" -# include "createMesh.H" - - Info<< nl << "Reading molecular configuration description dictionary" - << endl; - - IOobject molConfigDescriptionIOobject - ( - "molConfigDict", - runTime.system(), - runTime, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (!molConfigDescriptionIOobject.headerOk()) - { - FatalErrorIn(args.executable()) - << "Cannot find molConfig description file " << nl - << args.caseName()/runTime.system()/"molConfig"/"molConfigDict" - << nl << exit(FatalError); - } - - IOdictionary molConfigDescription(molConfigDescriptionIOobject); - - - // Create molCloud, registering object with mesh - - Info<< nl << "Creating molecular configuration" << endl; - - molConfig molecules(molConfigDescription, mesh); - - label totalMolecules = molecules.nMol(); - - if (Pstream::parRun()) - { - reduce(totalMolecules, sumOp<label>()); - } - - Info<< nl << "Total number of molecules added: " << totalMolecules - << nl << endl; - - moleculeCloud molCloud - ( - mesh, - molecules.nMol(), - molecules.id(), - molecules.mass(), - molecules.positions(), - molecules.cells(), - molecules.U(), - molecules.A(), - molecules.tethered(), - molecules.tetherPositions() - ); - - IOdictionary idListDict - ( - IOobject - ( - "idList", - mesh.time().constant(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ) - ); - - idListDict.add("idList", molecules.molIdList()); - - IOstream::defaultPrecision(12); - - Info << nl << "Writing molecular configuration" << endl; - - if (!mesh.write()) - { - FatalErrorIn(args.executable()) - << "Failed writing moleculeCloud." - << nl << exit(FatalError); - } - - Info<< nl << "ClockTime = " << runTime.elapsedClockTime() << " s" - << nl << endl; - - Info << nl << "End\n" << endl; - - return 0; -} - - -// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/BCC.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/BCC.H deleted file mode 100644 index cd3cbdf100ba1c7fcafecca68e2c730ebfc2b97c..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/BCC.H +++ /dev/null @@ -1,179 +0,0 @@ -labelVector iN(0,0,0); - -vector gap = (vector::one)*pow((numberDensity/2.0),-(1.0/3.0)); - -#include "origin.H" - -// Info<< "gap = " << gap << endl; - -// Special treatment is required for the first position, i.e. iteration zero. - -if (n == 0) -{ - latticePosition.x() = (iN.x()*gap.x()); - - latticePosition.y() = (iN.y()*gap.y()); - - latticePosition.z() = (iN.z()*gap.z()); - - // Placing 2 molecules in each unit cell, using the algorithm from - // D. Rapaport, The Art of Molecular Dynamics Simulation, 2nd Ed, p68 - - for (label iU = 0; iU < 2; iU++) - { - vector unitCellLatticePosition = latticePosition; - - if (iU == 1) - { - unitCellLatticePosition += 0.5 * gap; - } - - if (originSpecifies == "corner") - { - unitCellLatticePosition -= 0.25*gap; - } - -// Info << nl << n << ", " << unitCellLatticePosition; - - globalPosition = - origin + transform(latticeToGlobal,unitCellLatticePosition); - - partOfLayerInBounds = mesh_.bounds().contains(globalPosition); - - if - ( - findIndex(mesh_.cellZones()[cZ], mesh_.findCell(globalPosition)) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } -} -else -{ - // Place top and bottom caps. - - for (iN.z() = -n; iN.z() <= n; iN.z() += 2*n) - { - for (iN.y() = -n; iN.y() <= n; iN.y()++) - { - for (iN.x() = -n; iN.x() <= n; iN.x()++) - { - latticePosition.x() = (iN.x() * gap.x()); - - latticePosition.y() = (iN.y() * gap.y()); - - latticePosition.z() = (iN.z() * gap.z()); - - for (label iU = 0; iU < 2; iU++) - { - vector unitCellLatticePosition = latticePosition; - - if (iU == 1) - { - unitCellLatticePosition += 0.5*gap; - } - - if(originSpecifies == "corner") - { - unitCellLatticePosition -= 0.25*gap; - } - -// Info << nl << iN << ", " << unitCellLatticePosition; - - globalPosition = - origin - + transform(latticeToGlobal,unitCellLatticePosition); - - partOfLayerInBounds = - mesh_.bounds().contains(globalPosition); - - if - ( - findIndex - ( - mesh_.cellZones()[cZ], - mesh_.findCell(globalPosition) - ) - != -1) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } - } - } - } - -// Placing sides - - for (iN.z() = -(n-1); iN.z() <= (n-1); iN.z()++) - { - for (label iR = 0; iR <= 2*n -1; iR++) - { - latticePosition.x() = (n*gap.x()); - - latticePosition.y() = ((-n + (iR + 1))*gap.y()); - - latticePosition.z() = (iN.z() * gap.z()); - - for (label iK = 0; iK < 4; iK++) - { - for (label iU = 0; iU < 2; iU++) - { - vector unitCellLatticePosition = latticePosition; - - if (iU == 1) - { - unitCellLatticePosition += 0.5 * gap; - } - - if (originSpecifies == "corner") - { - unitCellLatticePosition -= 0.25*gap; - } - - globalPosition = - origin - + transform(latticeToGlobal,unitCellLatticePosition); - - partOfLayerInBounds = - mesh_.bounds().contains(globalPosition); - - if - ( - findIndex - ( - mesh_.cellZones()[cZ], - mesh_.findCell(globalPosition) - ) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } - - latticePosition = - vector - ( - - latticePosition.y(), - latticePosition.x(), - latticePosition.z() - ); - } - } - } -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/FCC.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/FCC.H deleted file mode 100644 index 313ebf96cb89bf2b1111b45fe1de462133fb5197..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/FCC.H +++ /dev/null @@ -1,217 +0,0 @@ -labelVector iN(0,0,0); - -vector gap = (vector::one)*pow((numberDensity/4.0),-(1.0/3.0)); - -#include "origin.H" - -// Info<< "gap = " << gap << endl; - -// Special treatment is required for the first position, i.e. iteration zero. - -if (n == 0) -{ - latticePosition.x() = (iN.x() * gap.x()); - - latticePosition.y() = (iN.y() * gap.y()); - - latticePosition.z() = (iN.z() * gap.z()); - - // Placing 4 molecules in each unit cell, using the algorithm from - // D. Rapaport, The Art of Molecular Dynamics Simulation, 2nd Ed, p68 - - for (label iU = 0; iU < 4; iU++) - { - vector unitCellLatticePosition = latticePosition; - - if (iU != 3) - { - if (iU != 0) - { - unitCellLatticePosition.x() += 0.5 * gap.x(); - } - - if (iU != 1) - { - unitCellLatticePosition.y() += 0.5 * gap.y(); - } - - if (iU != 2) - { - unitCellLatticePosition.z() += 0.5 * gap.z(); - } - } - - if (originSpecifies == "corner") - { - unitCellLatticePosition -= 0.25*gap; - } - -// Info << nl << n << ", " << unitCellLatticePosition; - - globalPosition = - origin + transform(latticeToGlobal,unitCellLatticePosition); - - partOfLayerInBounds = mesh_.bounds().contains(globalPosition); - - if - ( - findIndex(mesh_.cellZones()[cZ], mesh_.findCell(globalPosition)) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } -} -else -{ - // Place top and bottom caps. - - for (iN.z() = -n; iN.z() <= n; iN.z() += 2*n) - { - for (iN.y() = -n; iN.y() <= n; iN.y()++) - { - for (iN.x() = -n; iN.x() <= n; iN.x()++) - { - latticePosition.x() = (iN.x() * gap.x()); - - latticePosition.y() = (iN.y() * gap.y()); - - latticePosition.z() = (iN.z() * gap.z()); - - for (label iU = 0; iU < 4; iU++) - { - vector unitCellLatticePosition = latticePosition; - - if (iU != 3) - { - if (iU != 0) - { - unitCellLatticePosition.x() += 0.5 * gap.x(); - } - - if (iU != 1) - { - unitCellLatticePosition.y() += 0.5 * gap.y(); - } - - if (iU != 2) - { - unitCellLatticePosition.z() += 0.5 * gap.z(); - } - } - - if (originSpecifies == "corner") - { - unitCellLatticePosition -= 0.25*gap; - } - - globalPosition = - origin - + transform(latticeToGlobal,unitCellLatticePosition); - - partOfLayerInBounds = - mesh_.bounds().contains(globalPosition); - - if - ( - findIndex - ( - mesh_.cellZones()[cZ], - mesh_.findCell(globalPosition) - ) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } - } - } - } - -// Placing sides - - for (iN.z() = -(n-1); iN.z() <= (n-1); iN.z()++) - { - for (label iR = 0; iR <= 2*n -1; iR++) - { - latticePosition.x() = (n * gap.x()); - - latticePosition.y() = ((-n + (iR + 1)) * gap.y()); - - latticePosition.z() = (iN.z() * gap.z()); - - for (label iK = 0; iK < 4; iK++) - { - for (label iU = 0; iU < 4; iU++) - { - vector unitCellLatticePosition = latticePosition; - - if (iU != 3) - { - if (iU != 0) - { - unitCellLatticePosition.x() += 0.5 * gap.x(); - } - - if (iU != 1) - { - unitCellLatticePosition.y() += 0.5 * gap.y(); - } - - if (iU != 2) - { - unitCellLatticePosition.z() += 0.5 * gap.z(); - } - } - - if (originSpecifies == "corner") - { - unitCellLatticePosition -= 0.25*gap; - } - - globalPosition = - origin - + transform(latticeToGlobal,unitCellLatticePosition); - - partOfLayerInBounds = - mesh_.bounds().contains(globalPosition); - - if - ( - findIndex - ( - mesh_.cellZones()[cZ], - mesh_.findCell(globalPosition) - ) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } - - latticePosition = - vector - ( - - latticePosition.y(), - latticePosition.x(), - latticePosition.z() - ); - } - } - } -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/SC.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/SC.H deleted file mode 100644 index dd0ff7c00f67453884b5693ed32003566f90b1b0..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/SC.H +++ /dev/null @@ -1,127 +0,0 @@ -labelVector iN(0,0,0); - -vector gap = (vector::one)*pow(numberDensity, -(1.0/3.0)); - -#include "origin.H" - -// Info<< "gap = " << gap << endl; - -// Special treatment is required for the first position, i.e. iteration zero. - -if (n == 0) -{ - latticePosition = vector::zero; - - if (originSpecifies == "corner") - { - latticePosition += 0.5*gap; - } - - globalPosition = origin + transform(latticeToGlobal,latticePosition); - - partOfLayerInBounds = mesh_.bounds().contains(globalPosition); - - if (findIndex(mesh_.cellZones()[cZ], mesh_.findCell(globalPosition)) != -1) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } -} -else -{ - for (iN.z() = -n; iN.z() <= n; iN.z() += 2*n) - { - for (iN.y() = -n; iN.y() <= n; iN.y()++) - { - for (iN.x() = -n; iN.x() <= n; iN.x()++) - { - latticePosition.x() = (iN.x() * gap.x()); - - latticePosition.y() = (iN.y() * gap.y()); - - latticePosition.z() = (iN.z() * gap.z()); - - if (originSpecifies == "corner") - { - latticePosition += 0.5*gap; - } - - globalPosition = - origin + transform(latticeToGlobal,latticePosition); - - partOfLayerInBounds = mesh_.bounds().contains(globalPosition); - - if - ( - findIndex - ( - mesh_.cellZones()[cZ], - mesh_.findCell(globalPosition) - ) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - } - } - } - - tensor quarterRotate(EulerCoordinateRotation(-90, 0, 0, true).R()); - - iN.x() = n; - for (iN.z() = -(n-1); iN.z() <= (n-1); iN.z()++) - { - for (iN.y() = -(n-1); iN.y() <= n; iN.y()++) - { - latticePosition.x() = (iN.x()*gap.x()); - - latticePosition.y() = (iN.y()*gap.y()); - - latticePosition.z() = (iN.z()*gap.z()); - - for (label iR = 0; iR < 4; iR++) - { - vector offsetCorrectedLatticePosition = latticePosition; - - if (originSpecifies == "corner") - { - offsetCorrectedLatticePosition += 0.5*gap; - } - - globalPosition = - origin - + transform(latticeToGlobal,offsetCorrectedLatticePosition); - - partOfLayerInBounds = mesh_.bounds().contains(globalPosition); - - if - ( - findIndex - ( - mesh_.cellZones()[cZ], - mesh_.findCell(globalPosition) - ) - != -1 - ) - { - molsPlacedThisIteration++; - - initialPositions.append(globalPosition); - - initialCelli.append(mesh_.findCell(globalPosition)); - } - - latticePosition = transform(quarterRotate,latticePosition); - } - } - } -} - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/origin.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/origin.H deleted file mode 100644 index 24bc994d34fe8eaee58b7c77a71613d1bf8bc004..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/origin.H +++ /dev/null @@ -1,49 +0,0 @@ -// Please refer to notes - -// 1. Determine the unit cell dimensions: xU, yU and zU - -const scalar xU = gap.x(); -const scalar yU = gap.y(); -const scalar zU = gap.z(); - -// 2. Determine the anchorPoint co-ordinates: xA, yA and zA - -const scalar xA = anchorPoint.x(); -const scalar yA = anchorPoint.y(); -const scalar zA = anchorPoint.z(); - -// 3. Determine the vector rAB from global co-ordinate system: - -const vector rAB((xMid - xA), (yMid - yA), (zMid - zA)); - -// 4. Transform vector rAS into lattice co-ordinate system: - -const vector rASTransf = transform(latticeToGlobal.T(), rAB); - -// Info << "The vector rAS = " << rAS << endl; -// Info << "The vector rAStransf = " << rAStransf << endl; - -// 5. Calculate the integer values: ni, nj and nk -scalar nIscalar = rASTransf.x()/xU; -scalar nJscalar = rASTransf.y()/yU; -scalar nKscalar = rASTransf.z()/zU; - -// Info << "The nI, nJ, nK values before are: " << nIscalar <<" "<< nJscalar <<" "<< nKscalar << endl; - -label nI = label(nIscalar + 0.5*sign(nIscalar)); -label nJ = label(nJscalar + 0.5*sign(nJscalar)); -label nK = label(nKscalar + 0.5*sign(nKscalar)); - -// Info << "The nI, nJ, nK values after are: " << nI <<" "<< nJ <<" "<< nK << endl; - -// 6. Calculate the corrected starting point, rAC (in the lattice co-ordinate system): -const vector rAC((nI*xU), (nJ*yU), (nK*zU)); - -// 7. Transform the corrected starting point in the global co-ordinate system, rC: -const vector rC = anchorPoint + transform(latticeToGlobal, rAC); - - -const vector& origin = rC; - -// Pout << "The Corrected Starting Point: " << origin << endl; - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/readZoneSubDict.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/readZoneSubDict.H deleted file mode 100644 index 72705c761e2650f4ec4f7faa72078235e1f288df..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/readZoneSubDict.H +++ /dev/null @@ -1,93 +0,0 @@ - -// Info << "Zone description subDict " << cZ <<": " << cellZoneI[cZ].name() << endl; - -const dictionary& subDictI = - molConfigDescription_.subDict(cellZoneI[cZ].name()); - -const scalar temperature(readScalar(subDictI.lookup("temperature"))); - -const word velocityDistribution(subDictI.lookup("velocityDistribution")); - -const vector bulkVelocity(subDictI.lookup("bulkVelocity")); - -const word id(subDictI.lookup("id")); - -const scalar mass(readScalar(subDictI.lookup("mass"))); - -scalar numberDensity_read(0.0); - -if (subDictI.found("numberDensity")) -{ - numberDensity_read = readScalar(subDictI.lookup("numberDensity")); -} -else if (subDictI.found("massDensity")) -{ - numberDensity_read = readScalar(subDictI.lookup("massDensity"))/mass; -} -else -{ - FatalErrorIn("readZoneSubDict.H\n") - << "massDensity or numberDensity not specified " << nl - << abort(FatalError); -} - -const scalar numberDensity(numberDensity_read); - -const word latticeStructure(subDictI.lookup("latticeStructure")); - -const vector anchorPoint(subDictI.lookup("anchor")); - -const word originSpecifies(subDictI.lookup("anchorSpecifies")); - -if -( - originSpecifies != "corner" - && originSpecifies != "molecule" -) -{ - FatalErrorIn("readZoneSubDict.H\n") - << "anchorSpecifies must be either 'corner' or 'molecule', found " - << originSpecifies << nl - << abort(FatalError); -} - -bool tethered = false; - -if (subDictI.found("tethered")) -{ - tethered = Switch(subDictI.lookup("tethered")); -} - -const vector orientationAngles(subDictI.lookup("orientationAngles")); - -scalar phi(orientationAngles.x()*mathematicalConstant::pi/180.0); -scalar theta(orientationAngles.y()*mathematicalConstant::pi/180.0); -scalar psi(orientationAngles.z()*mathematicalConstant::pi/180.0); - -const tensor latticeToGlobal -( - cos(psi)*cos(phi) - cos(theta)*sin(phi)*sin(psi), - cos(psi)*sin(phi) + cos(theta)*cos(phi)*sin(psi), - sin(psi)*sin(theta), - - sin(psi)*cos(phi) - cos(theta)*sin(phi)*cos(psi), - - sin(psi)*sin(phi) + cos(theta)*cos(phi)*cos(psi), - cos(psi)*sin(theta), - sin(theta)*sin(phi), - - sin(theta)*cos(phi), - cos(theta) -); - -// Info << "\tcells: " << cellZoneI[cZ].size() << endl; -// Info << "\tnumberDensity: " << numberDensity << endl; -// Info << "\ttemperature: " << temperature << endl; -// Info << "\tvelocityDistribution: " << velocityDistribution << endl; -// Info << "\tbulkVelocity: " << bulkVelocity << endl; -// Info << "\tid: " << id << endl; -// Info << "\tmass: " << mass << endl; -// Info << "\tlatticeStructure: " << latticeStructure << endl; -// Info << "\tanchor: " << anchorPoint << endl; -// Info << "\toriginSpecifies: " << originSpecifies << endl; -// Info << "\ttethered: " << tethered << endl; -// Info << "\torientationAngles: " << orientationAngles << endl; -// Info << "\tlatticeToGlobal: " << latticeToGlobal << endl; - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/startingPoint.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/startingPoint.H deleted file mode 100644 index 6ae01c83f11039a01d4307816c08951f1ad33d1c..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/startingPoint.H +++ /dev/null @@ -1,97 +0,0 @@ -scalar xMax = 0; - -scalar yMax = 0; - -scalar zMax = 0; - -scalar xMin = 0; - -scalar yMin = 0; - -scalar zMin = 0; - -label xMaxPtLabel = 0; - -label yMaxPtLabel = 0; - -label zMaxPtLabel = 0; - -label xMinPtLabel = 0; - -label yMinPtLabel = 0; - -label zMinPtLabel = 0; - -forAll (cellZoneI[cZ], nC) -{ - const labelList& cellPointsJ = mesh_.cellPoints()[cellZoneI[cZ][nC]]; - - forAll(cellPointsJ, nP) - { - const point& ptI = mesh_.points()[cellPointsJ[nP]]; - - const label& ptILabel = cellPointsJ[nP]; - - if (ptI.x() > xMax || nC == 0) - { - xMax = ptI.x(); - xMaxPtLabel = ptILabel; - } - if (ptI.y() > yMax || nC == 0) - { - yMax = ptI.y(); - yMaxPtLabel = ptILabel; - } - if (ptI.z() > zMax || nC == 0) - { - zMax = ptI.z(); - zMaxPtLabel = ptILabel; - } - if (ptI.x() < xMin || nC == 0) - { - xMin = ptI.x(); - xMinPtLabel = ptILabel; - } - if (ptI.y() < yMin || nC == 0) - { - yMin = ptI.y(); - yMinPtLabel = ptILabel; - } - if (ptI.z() < zMin || nC == 0) - { - zMin = ptI.z(); - zMinPtLabel = ptILabel; - } - } -} - -// Info << "Xmax: label = " << xMaxPtLabel2 << "; vector = " <<mesh_.points()[xMaxPtLabel2] -// <<"; x-component = " << mesh_.points()[xMaxPtLabel2].x() << endl; -// Info << "Ymax: label = " << yMaxPtLabel2 << "; vector = " <<mesh_.points()[yMaxPtLabel2] -// <<"; y-component = " << mesh_.points()[yMaxPtLabel2].y() << endl; -// Info << "Zmax: label = " << zMaxPtLabel2 << "; vector = " <<mesh_.points()[zMaxPtLabel2] -// <<"; z-component = " << mesh_.points()[zMaxPtLabel2].z() << endl; -// -// Info << "Xmin: label = " << xMinPtLabel << "; vector = " <<mesh_.points()[xMinPtLabel] -// <<"; x-component = " << mesh_.points()[xMinPtLabel].x() << endl; -// Info << "Ymin: label = " << yMinPtLabel << "; vector = " <<mesh_.points()[yMinPtLabel] -// <<"; y-component = " << mesh_.points()[yMinPtLabel].y() << endl; -// Info << "Zmin: label = " << zMinPtLabel << "; vector = " <<mesh_.points()[zMinPtLabel] -// <<"; z-component = " << mesh_.points()[zMinPtLabel].z() << endl; - -scalar xMid = - (mesh_.points()[xMaxPtLabel].x() - + mesh_.points()[xMinPtLabel].x()) / 2; - -scalar yMid = - (mesh_.points()[yMaxPtLabel].y() - + mesh_.points()[yMinPtLabel].y()) / 2; - -scalar zMid = - (mesh_.points()[zMaxPtLabel].z() - + mesh_.points()[zMinPtLabel].z()) / 2; - -vector rS(xMid, yMid, zMid); - -// Info << "\t The Estimated Starting Point: " << rS << endl; - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/maxwellian.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/maxwellian.H deleted file mode 100644 index 01c3ff87168fc1a4057b4512472f58afec0bb5e0..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/maxwellian.H +++ /dev/null @@ -1,26 +0,0 @@ -scalar velCmptMag = sqrt(moleculeCloud::kb*temperature/mass); - -for (molN = totalMols; molN < totalMols + totalZoneMols; molN++) -{ - // Assign velocity: random direction, magnitude determined by desired - // maxwellian distribution at temperature - - // Temperature gradients could be created by specifying a gradient in the - // zone subDict, or by reading a field from a mesh. - - // The velocities are treated on a zone-by-zone basis for the purposes of - // removal of bulk momentum - hence nMols becomes totalZoneMols - - velocity = vector - ( - velCmptMag*rand.GaussNormal(), - velCmptMag*rand.GaussNormal(), - velCmptMag*rand.GaussNormal() - ); - - momentumSum += mass*velocity; - - initialVelocities.append(velocity); -} - - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/uniform.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/uniform.H deleted file mode 100644 index 9c178af262aabb88a239f9711b1c334cdd39e4e1..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/uniform.H +++ /dev/null @@ -1,27 +0,0 @@ -scalar initVelMag = - sqrt - ( - 3.0*(1.0 - 1.0 / totalZoneMols) - *moleculeCloud::kb*temperature - /mass - ); - -for (molN = totalMols; molN < totalMols + totalZoneMols; molN++) -{ - // Assign velocity: random direction, magnitude determined by desired - // temperature - - // Temperature gradients could be created by specifying a gradient in the - // zone subDict, or by reading a field from a mesh. - - // The velocities are treated on a zone-by-zone basis for the purposes of - // removal of bulk momentum - hence nMols becomes totalZoneMols - - velocity = (2.0*rand.vector01() - vector::one); - - velocity *= initVelMag/mag(velocity); - - momentumSum += mass*velocity; - - initialVelocities.append(velocity); -} diff --git a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C index 3ea9e07a82e02f278f2d70275014151d50796a1f..53f726ac5cd675498182376308400aa2735fbcf1 100644 --- a/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C +++ b/applications/utilities/surface/surfaceMeshTriangulate/surfaceMeshTriangulate.C @@ -50,9 +50,8 @@ using namespace Foam; int main(int argc, char *argv[]) { argList::validArgs.append("output file"); - +# include "addRegionOption.H" argList::validOptions.insert("excludeProcPatches", ""); - argList::validOptions.insert("patches", "(patch0 .. patchN)"); # include "setRootCase.H" @@ -65,7 +64,7 @@ int main(int argc, char *argv[]) Pout<< "Reading mesh from time " << runTime.value() << endl; -# include "createPolyMesh.H" +# include "createNamedPolyMesh.H" bool includeProcPatches = !( diff --git a/applications/utilities/surface/surfaceRedistributePar/Make/files b/applications/utilities/surface/surfaceRedistributePar/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..4825ff735d6d625bfcb39fae4fb9c7a13bda5742 --- /dev/null +++ b/applications/utilities/surface/surfaceRedistributePar/Make/files @@ -0,0 +1,3 @@ +surfaceRedistributePar.C + +EXE = $(FOAM_APPBIN)/surfaceRedistributePar diff --git a/applications/utilities/surface/surfaceRedistributePar/Make/options b/applications/utilities/surface/surfaceRedistributePar/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..2db41f545a2fde53b3cf2d357bc790d25f6fbed5 --- /dev/null +++ b/applications/utilities/surface/surfaceRedistributePar/Make/options @@ -0,0 +1,7 @@ +EXE_INC = \ + -I$(LIB_SRC)/triSurface/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude + +EXE_LIBS = \ + -lmeshTools \ + -ltriSurface diff --git a/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C new file mode 100644 index 0000000000000000000000000000000000000000..cdb041ce350d19b6f79e893bd114d014f32e4e09 --- /dev/null +++ b/applications/utilities/surface/surfaceRedistributePar/surfaceRedistributePar.C @@ -0,0 +1,295 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + surfaceRedistributePar + +Description + (Re)distribution of triSurface. Either takes an undecomposed surface + or an already decomposed surface and redistribute it so each processor + has all triangles that overlap its mesh. + +Note + - best decomposition option is hierarchGeomDecomp since + guarantees square decompositions. + - triangles might be present on multiple processors. + - merging uses geometric tolerance so take care with writing precision. + +\*---------------------------------------------------------------------------*/ + +#include "treeBoundBox.H" +#include "FixedList.H" +#include "argList.H" +#include "Time.H" +#include "polyMesh.H" +#include "distributedTriSurfaceMesh.H" +#include "mapDistribute.H" +#include "triSurfaceFields.H" +#include "Pair.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Print on master all the per-processor surface stats. +void writeProcStats +( + const triSurface& s, + const List<List<treeBoundBox> >& meshBb +) +{ + // Determine surface bounding boxes, faces, points + List<treeBoundBox> surfBb(Pstream::nProcs()); + { + surfBb[Pstream::myProcNo()] = boundBox(s.points(), false); + Pstream::gatherList(surfBb); + Pstream::scatterList(surfBb); + } + + labelList nPoints(Pstream::nProcs()); + nPoints[Pstream::myProcNo()] = s.points().size(); + Pstream::gatherList(nPoints); + Pstream::scatterList(nPoints); + + labelList nFaces(Pstream::nProcs()); + nFaces[Pstream::myProcNo()] = s.size(); + Pstream::gatherList(nFaces); + Pstream::scatterList(nFaces); + + forAll(surfBb, procI) + { + const List<treeBoundBox>& bbs = meshBb[procI]; + + Info<< "processor" << procI << endl + << "\tMesh bounds : " << bbs[0] << nl; + for (label i = 1; i < bbs.size(); i++) + { + Info<< "\t " << bbs[i]<< nl; + } + Info<< "\tSurface bounding box : " << surfBb[procI] << nl + << "\tTriangles : " << nFaces[procI] << nl + << "\tVertices : " << nPoints[procI] + << endl; + } + Info<< endl; +} + + +// Main program: + +int main(int argc, char *argv[]) +{ + argList::validArgs.append("triSurfaceMesh"); + argList::validArgs.append("distributionType"); + + argList::validOptions.insert("keepNonMapped", ""); +# include "setRootCase.H" +# include "createTime.H" + runTime.functionObjects().off(); + + fileName surfFileName(args.additionalArgs()[0]); + Info<< "Reading surface from " << surfFileName << nl << endl; + + const word distType(args.additionalArgs()[1]); + + Info<< "Using distribution method " + << distributedTriSurfaceMesh::distributionTypeNames_[distType] + << " " << distType << nl << endl; + + bool keepNonMapped = args.options().found("keepNonMapped"); + + if (keepNonMapped) + { + Info<< "Preserving surface outside of mesh bounds." << nl << endl; + } + else + { + Info<< "Removing surface outside of mesh bounds." << nl << endl; + } + + + if (!Pstream::parRun()) + { + FatalErrorIn(args.executable()) + << "Please run this program on the decomposed case." + << " It will read surface " << surfFileName + << " and decompose it such that it overlaps the mesh bounding box." + << exit(FatalError); + } + + +# include "createPolyMesh.H" + + Random rndGen(653213); + + // Determine mesh bounding boxes: + List<List<treeBoundBox> > meshBb(Pstream::nProcs()); + { + meshBb[Pstream::myProcNo()] = List<treeBoundBox> + ( + 1, + treeBoundBox + ( + boundBox(mesh.points(), false) + ).extend(rndGen, 1E-3) + ); + Pstream::gatherList(meshBb); + Pstream::scatterList(meshBb); + } + + IOobject io + ( + surfFileName, // name + //runTime.findInstance("triSurface", surfFileName), // instance + runTime.constant(), // instance + "triSurface", // local + runTime, // registry + IOobject::MUST_READ, + IOobject::NO_WRITE + ); + + const fileName actualPath(io.filePath()); + fileName localPath(actualPath); + localPath.replace(runTime.rootPath() + '/', ""); + + if (actualPath == io.objectPath()) + { + Info<< "Loading local (decomposed) surface " << localPath << nl <<endl; + } + else + { + Info<< "Loading undecomposed surface " << localPath << nl << endl; + } + + + // Create dummy dictionary for bounding boxes if does not exist. + if (!isFile(actualPath / "Dict")) + { + dictionary dict; + dict.add("bounds", meshBb[Pstream::myProcNo()]); + dict.add("distributionType", distType); + dict.add("mergeDistance", SMALL); + + IOdictionary ioDict + ( + IOobject + ( + io.name() + "Dict", + io.instance(), + io.local(), + io.db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + dict + ); + + Info<< "Writing dummy bounds dictionary to " << ioDict.name() + << nl << endl; + + ioDict.regIOobject::writeObject + ( + IOstream::ASCII, + IOstream::currentVersion, + ioDict.time().writeCompression() + ); + } + + + // Load surface + distributedTriSurfaceMesh surfMesh(io); + Info<< "Loaded surface" << nl << endl; + + + // Generate a test field + { + const triSurface& s = static_cast<const triSurface&>(surfMesh); + + autoPtr<triSurfaceVectorField> fcPtr + ( + new triSurfaceVectorField + ( + IOobject + ( + surfMesh.searchableSurface::name(), // name + surfMesh.searchableSurface::instance(), // instance + surfMesh.searchableSurface::local(), // local + surfMesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + surfMesh, + dimLength + ) + ); + triSurfaceVectorField& fc = fcPtr(); + + forAll(fc, triI) + { + fc[triI] = s[triI].centre(s.points()); + } + + // Steal pointer and store object on surfMesh + fcPtr.ptr()->store(); + } + + + // Write per-processor stats + Info<< "Before redistribution:" << endl; + writeProcStats(surfMesh, meshBb); + + + // Do redistribution + Info<< "Redistributing surface" << nl << endl; + autoPtr<mapDistribute> faceMap; + autoPtr<mapDistribute> pointMap; + surfMesh.distribute + ( + meshBb[Pstream::myProcNo()], + keepNonMapped, + faceMap, + pointMap + ); + faceMap.clear(); + pointMap.clear(); + + Info<< endl; + + + // Write per-processor stats + Info<< "After redistribution:" << endl; + writeProcStats(surfMesh, meshBb); + + + Info<< "Writing surface." << nl << endl; + surfMesh.searchableSurface::write(); + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/utilities/thermophysical/chemkinToFoam/Make/options b/applications/utilities/thermophysical/chemkinToFoam/Make/options index d4d6f35e08864dde6a1a43d84ed4c5869ff005b6..7fe5ba4077fe6c57b2daafcc873b929c962665a2 100644 --- a/applications/utilities/thermophysical/chemkinToFoam/Make/options +++ b/applications/utilities/thermophysical/chemkinToFoam/Make/options @@ -1,8 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude EXE_LIBS = \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lbasicThermophysicalModels \ -lspecie diff --git a/bin/buildParaView b/bin/buildParaView index 76a0264e69baefe1b5503212a49297ccba5c9d4d..cceee964873f6d4b2f2ed29875bb861da9ea38ba 100755 --- a/bin/buildParaView +++ b/bin/buildParaView @@ -56,6 +56,11 @@ MESA_LIBRARY="/usr/lib64/libOSMesa.so" # extra QT gui support (useful for re-using the installation for engrid) withQTSUPPORT=true +# Set the path to the Qt-4.3.? qmake if the system Qt is other than this version +QMAKE_PATH="" +#QMAKE_PATH=/usr/local/Trolltech/Qt-4.3.5/bin/qmake +#QMAKE_PATH=$WM_THIRD_PARTY_DIR/qt-x11-opensource-src-4.3.5/platforms/linux64GccDPOpt/bin/qmake + # # No further editing below this line #------------------------------------------------------------------------------ diff --git a/bin/foamClearPolyMesh b/bin/foamClearPolyMesh index dcc507b811d39dbdd4ac0d57a3fc7b7589cc4488..1af677459dfbe7808bead2d18e9c795f5e8dcb1c 100755 --- a/bin/foamClearPolyMesh +++ b/bin/foamClearPolyMesh @@ -109,7 +109,7 @@ fi # -# remove files and subdirectories +# remove files (mesh itself, modifiers, snappyHexMesh ones) and subdirectories # echo "Clearing ${caseDir:-.}/$meshDir" 1>&2 @@ -126,6 +126,10 @@ for i in \ meshModifiers \ parallelData \ sets \ + cellLevel \ + pointLevel \ + refinementHistory \ + surfaceIndex \ ; do rm -rf $meshDir/$i diff --git a/bin/foamTemplates/foamScript b/bin/foamTemplates/foamScript index 6dd5781ac1af9aef4c4d809bfa235f1547533d9b..e8a160860c298189fb416e8ccdd8cacdedadd5ca 100644 --- a/bin/foamTemplates/foamScript +++ b/bin/foamTemplates/foamScript @@ -3,7 +3,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License diff --git a/bin/foamTemplates/source/foamAppTemplate.C b/bin/foamTemplates/source/foamAppTemplate.C index 2c75d7e107e02b0ee790ca1c0c49a5724bb2536b..46c089c1a865c2884cd4f62323db9f5c67442dce 100644 --- a/bin/foamTemplates/source/foamAppTemplate.C +++ b/bin/foamTemplates/source/foamAppTemplate.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/source/foamTemplate.C b/bin/foamTemplates/source/foamTemplate.C index 97251605e82048d4607ab495094cdc129e7659a8..903fe66b5f50909b991291f4608f89491a96da35 100644 --- a/bin/foamTemplates/source/foamTemplate.C +++ b/bin/foamTemplates/source/foamTemplate.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/source/foamTemplate.H b/bin/foamTemplates/source/foamTemplate.H index 963fc74cdf486bc0e0f9baae13fd52b659086c36..e0b6cf21577a30947428b32ef1da7e8947d5900b 100644 --- a/bin/foamTemplates/source/foamTemplate.H +++ b/bin/foamTemplates/source/foamTemplate.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/source/foamTemplateI.H b/bin/foamTemplates/source/foamTemplateI.H index 42bc929311152d7464c792bf0b3378adda1da890..10e8e4fec8ff30bc0e113d06c5081a217cfb6944 100644 --- a/bin/foamTemplates/source/foamTemplateI.H +++ b/bin/foamTemplates/source/foamTemplateI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/source/foamTemplateIO.C b/bin/foamTemplates/source/foamTemplateIO.C index 2d95dc47de4b741469a521ac8d96da5110843cd1..d9119ed354a4bce766750b5afd1a4c997245db29 100644 --- a/bin/foamTemplates/source/foamTemplateIO.C +++ b/bin/foamTemplates/source/foamTemplateIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/source/newSource b/bin/foamTemplates/source/newSource old mode 100755 new mode 100644 index a06d1bcc732219f35c4772a1d22622b24c87880e..927ad36b31d407b723573fc2eef6abcaf03990c5 --- a/bin/foamTemplates/source/newSource +++ b/bin/foamTemplates/source/newSource @@ -3,7 +3,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------- # License diff --git a/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.C b/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.C index 674341d11c2243dcd463f75119270915273dd2f6..5acafb25e79133c97b4a9a7ee277d687e01ab14f 100644 --- a/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.C +++ b/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.H b/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.H index 79250a7019e8a81a4689ce6bf062315d49fde131..76bdd558601d023c9eaa24c9a2cbd128eb4421a1 100644 --- a/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.H +++ b/bin/foamTemplates/sourceTemplate/foamTemplateTemplate.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -129,16 +129,10 @@ public: // IOstream Operators - friend Istream& operator>> - #ifndef __CINT__ - <TemplateArgument> - #endif + friend Istream& operator>> <TemplateArgument> (Istream&, ClassName<TemplateArgument>&); - friend Ostream& operator<< - #ifndef __CINT__ - <TemplateArgument> - #endif + friend Ostream& operator<< <TemplateArgument> (Ostream&, const ClassName<TemplateArgument>&); }; diff --git a/bin/foamTemplates/sourceTemplate/foamTemplateTemplateI.H b/bin/foamTemplates/sourceTemplate/foamTemplateTemplateI.H index 42bc929311152d7464c792bf0b3378adda1da890..10e8e4fec8ff30bc0e113d06c5081a217cfb6944 100644 --- a/bin/foamTemplates/sourceTemplate/foamTemplateTemplateI.H +++ b/bin/foamTemplates/sourceTemplate/foamTemplateTemplateI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/sourceTemplate/foamTemplateTemplateIO.C b/bin/foamTemplates/sourceTemplate/foamTemplateTemplateIO.C index 41bd21f5c359b520241fbcf98f3d860ee96c83ae..1c805f6f6a39e5883e96d06d9f4b4531902c811b 100644 --- a/bin/foamTemplates/sourceTemplate/foamTemplateTemplateIO.C +++ b/bin/foamTemplates/sourceTemplate/foamTemplateTemplateIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/bin/foamTemplates/sourceTemplate/newSourceTemplate b/bin/foamTemplates/sourceTemplate/newSourceTemplate index 238c6f43316623b2772853197c30e9fb33aa359c..b62a7f4c0e9f45150c30218f83bf8b28c5574f07 100755 --- a/bin/foamTemplates/sourceTemplate/newSourceTemplate +++ b/bin/foamTemplates/sourceTemplate/newSourceTemplate @@ -3,7 +3,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------- # License diff --git a/bin/tools/CleanFunctions b/bin/tools/CleanFunctions index c63b69c45fb8bb28fdba781ce0d8874fe5d9287d..e7a5da07536e87ae69fe6b9f63ac26b83048ea47 100644 --- a/bin/tools/CleanFunctions +++ b/bin/tools/CleanFunctions @@ -64,6 +64,9 @@ cleanCase () rm -rf constant/polyMesh/{allOwner*,cell*,face*,meshModifiers*} \ constant/polyMesh/{owner*,neighbour*,point*,edge*} \ + constant/polyMesh/{cellLevel*,pointLevel*,refinementHistory*,surfaceIndex*} \ + constant/{cellLevel*,pointLevel*} \ + constant/polyMesh/sets/ \ > /dev/null 2>&1 for f in `find . -name "*Dict"` diff --git a/etc/apps/cint/bashrc b/etc/apps/cint/bashrc deleted file mode 100644 index dbbd89631e2487e11803e1dea7cb95a720e0aafc..0000000000000000000000000000000000000000 --- a/etc/apps/cint/bashrc +++ /dev/null @@ -1,51 +0,0 @@ -#----------------------------------*-sh-*-------------------------------------- -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. -# \\/ M anipulation | -#------------------------------------------------------------------------------ -# License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# -# Script -# cint/bashrc -# -# Description -# Setup file for cint -# Sourced from OpenFOAM-*/etc/bashrc -# -#------------------------------------------------------------------------------ - -for CINTSYSDIR in \ - $HOME/pub/CINT/cint7 \ - $WM_THIRD_PARTY_DIR/cint-svn/platforms/$WM_OPTIONS \ - ; -do - if [ -r $CINTSYSDIR ] - then - export CINTSYSDIR - export PATH=$PATH:$CINTSYSDIR/bin - export MANPATH=$MANPATH:$CINTSYSDIR/doc - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CINTSYSDIR/lib - break - fi -done - -[ -r "$CINTSYSDIR" ] || unset CINTSYSDIR - -# ----------------------------------------------------------------------------- diff --git a/etc/apps/cint/cshrc b/etc/apps/cint/cshrc deleted file mode 100644 index f2c38c481a3ebca703415c4e094137bb8efc43db..0000000000000000000000000000000000000000 --- a/etc/apps/cint/cshrc +++ /dev/null @@ -1,34 +0,0 @@ -#----------------------------------*-sh-*-------------------------------------- -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. -# \\/ M anipulation | -#------------------------------------------------------------------------------- -# License -# This file is part of OpenFOAM. -# -# OpenFOAM is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2 of the License, or (at your -# option) any later version. -# -# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenFOAM; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# -# Script -# cint/cshrc -# -# Description -# Setup file for cint -# Sourced from OpenFOAM-*/etc/cshrc -# -#------------------------------------------------------------------------------ - -# ----------------------------------------------------------------------------- diff --git a/etc/apps/paraview3/bashrc b/etc/apps/paraview3/bashrc index f49288b36ec26ad2c712a9f824cfd5b3ddc4a9ce..6536eb32ce6425f2efd66f0e0530b9ae3750dc1c 100644 --- a/etc/apps/paraview3/bashrc +++ b/etc/apps/paraview3/bashrc @@ -46,8 +46,8 @@ do fi done -paraviewMajor=paraview-3.5 -export ParaView_VERSION=3.5-cvs +paraviewMajor=paraview-3.6 +export ParaView_VERSION=3.6 export ParaView_INST_DIR=$WM_THIRD_PARTY_DIR/paraview-$ParaView_VERSION export ParaView_DIR=$ParaView_INST_DIR/platforms/$WM_ARCH$WM_COMPILER diff --git a/etc/apps/paraview3/cshrc b/etc/apps/paraview3/cshrc index 1c500f4962544271b887b812dff67f268cf89c04..66c7e1a54f283c56121c74164e482b7b221d437d 100644 --- a/etc/apps/paraview3/cshrc +++ b/etc/apps/paraview3/cshrc @@ -44,8 +44,8 @@ foreach cmake ( cmake-2.6.4 cmake-2.6.2 cmake-2.4.6 ) endif end -set paraviewMajor=paraview-3.5 -setenv ParaView_VERSION 3.5-cvs +set paraviewMajor=paraview-3.6 +setenv ParaView_VERSION 3.6 setenv ParaView_INST_DIR $WM_THIRD_PARTY_DIR/paraview-$ParaView_VERSION setenv ParaView_DIR $ParaView_INST_DIR/platforms/$WM_ARCH$WM_COMPILER diff --git a/etc/bashrc b/etc/bashrc index edd0265b63d079bec3730a3be43a72878b692d6c..f906c99080ba679d8ea58dcb7d3f29b713b665e7 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -74,7 +74,7 @@ export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION # Location of third-party software # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty +export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION # Operating System/Platform @@ -244,7 +244,6 @@ _foamSource $WM_PROJECT_DIR/etc/aliases.sh # _foamSource $WM_PROJECT_DIR/etc/apps/paraview/bashrc _foamSource $WM_PROJECT_DIR/etc/apps/paraview3/bashrc _foamSource $WM_PROJECT_DIR/etc/apps/ensight/bashrc -_foamSource $WM_PROJECT_DIR/etc/apps/cint/bashrc # Clean environment paths again. Only remove duplicates diff --git a/etc/controlDict b/etc/controlDict index c5f3831a30c143a6b1ee1fabf780c353080e8682..f06bbbd96123726a277fbb8a18a29ea084bb8d10 100644 --- a/etc/controlDict +++ b/etc/controlDict @@ -95,6 +95,7 @@ DebugSwitches Euler 0; EulerImplicit 0; EulerRotation 0; + extendedCellToFaceStencil 0; FDIC 0; FaceCellWave 0; GAMG 0; @@ -423,7 +424,7 @@ DebugSwitches filteredLinear3 0; filteredLinear3V 0; fixedEnthalpy 0; - fixedFluxBuoyantPressure 0; + buoyantPressure 0; fixedFluxBoussinesqBuoyantPressure 0; fixedFluxPressure 0; fixedGradient 0; diff --git a/etc/cshrc b/etc/cshrc index 17e75ba888df4e149d0d9bd52650d7e88a3bc482..e1960e39dc71b9b2f29b1e9bd61826a9ef65b1e4 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -68,7 +68,7 @@ setenv WM_PROJECT_USER_DIR $HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION # Location of third-party software # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -setenv WM_THIRD_PARTY_DIR $WM_PROJECT_INST_DIR/ThirdParty +setenv WM_THIRD_PARTY_DIR $WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION # Operating System/Platform @@ -241,7 +241,6 @@ _foamSource $WM_PROJECT_DIR/etc/aliases.csh # _foamSource $WM_PROJECT_DIR/etc/apps/paraview/cshrc _foamSource $WM_PROJECT_DIR/etc/apps/paraview3/cshrc # _foamSource $WM_PROJECT_DIR/etc/apps/ensight/cshrc -# _foamSource $WM_PROJECT_DIR/etc/apps/cint/cshrc # Clean environment paths again. Only remove duplicates diff --git a/src/OSspecific/POSIX/signals/sigFpe.C b/src/OSspecific/POSIX/signals/sigFpe.C index 813364d366779395a04efd49558e37cefd227ba0..6aeaac2d197dd4ba7b621a8c8c5701905b11a594 100644 --- a/src/OSspecific/POSIX/signals/sigFpe.C +++ b/src/OSspecific/POSIX/signals/sigFpe.C @@ -68,7 +68,7 @@ void* Foam::sigFpe::my_malloc_hook(size_t size, const void *caller) result = malloc (size); // initialize to signalling nan -# ifdef SP +# ifdef WM_SP const uint32_t sNAN = 0x7ff7fffflu; @@ -177,7 +177,7 @@ Foam::sigFpe::~sigFpe() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::sigFpe::set() +void Foam::sigFpe::set(const bool verbose) { if (oldAction_.sa_handler) { @@ -190,6 +190,12 @@ void Foam::sigFpe::set() if (env("FOAM_SIGFPE")) { + if (verbose) + { + Info<< "SigFpe : Enabling floating point exception trapping" + << " (FOAM_SIGFPE)." << endl; + } + # ifdef LINUX_GNUC feenableexcept @@ -240,6 +246,12 @@ void Foam::sigFpe::set() if (env("FOAM_SETNAN")) { + if (verbose) + { + Info<< "SetNaN : Initialising allocated memory to NaN" + << " (FOAM_SETNAN)." << endl; + } + # ifdef LINUX_GNUC // Set our malloc diff --git a/src/OSspecific/POSIX/signals/sigFpe.H b/src/OSspecific/POSIX/signals/sigFpe.H index 6d9fe7623ccf7d6aa2520efe3938e3ebafb641d6..46755873de60d020e70ff50eea209addc167dcf7 100644 --- a/src/OSspecific/POSIX/signals/sigFpe.H +++ b/src/OSspecific/POSIX/signals/sigFpe.H @@ -107,7 +107,7 @@ public: // Member functions - void set(); + void set(const bool verbose); }; diff --git a/src/OSspecific/POSIX/signals/sigInt.C b/src/OSspecific/POSIX/signals/sigInt.C index 922374fa7347e81b812cf10fe2f25b3337a1b25e..1f3555ec8746d86f7fc06a09ed0823185c006969 100644 --- a/src/OSspecific/POSIX/signals/sigInt.C +++ b/src/OSspecific/POSIX/signals/sigInt.C @@ -81,7 +81,7 @@ Foam::sigInt::~sigInt() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::sigInt::set() +void Foam::sigInt::set(const bool verbose) { if (oldAction_.sa_handler) { diff --git a/src/OSspecific/POSIX/signals/sigInt.H b/src/OSspecific/POSIX/signals/sigInt.H index 49cf7ea41e354c8a6c89ad28b1dbe5c31272fefe..1f89c47f97ea6dcb28741af7922b3146570aa901 100644 --- a/src/OSspecific/POSIX/signals/sigInt.H +++ b/src/OSspecific/POSIX/signals/sigInt.H @@ -78,7 +78,7 @@ public: // Member functions - void set(); + void set(const bool verbose); }; diff --git a/src/OSspecific/POSIX/signals/sigQuit.C b/src/OSspecific/POSIX/signals/sigQuit.C index 890d4d3430e3ad9eafcf8a3c15a16b7f08ff2aa2..7c67c903bc98772df9726a8c7bda5b491781b27d 100644 --- a/src/OSspecific/POSIX/signals/sigQuit.C +++ b/src/OSspecific/POSIX/signals/sigQuit.C @@ -83,7 +83,7 @@ Foam::sigQuit::~sigQuit() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::sigQuit::set() +void Foam::sigQuit::set(const bool verbose) { if (oldAction_.sa_handler) { diff --git a/src/OSspecific/POSIX/signals/sigQuit.H b/src/OSspecific/POSIX/signals/sigQuit.H index c130416a687a76f477b88d8df708c7f7da512dc5..23890cc6dbae3d24f352a87b420118bd04c52cc5 100644 --- a/src/OSspecific/POSIX/signals/sigQuit.H +++ b/src/OSspecific/POSIX/signals/sigQuit.H @@ -78,7 +78,7 @@ public: // Member functions - void set(); + void set(const bool verbose); }; diff --git a/src/OSspecific/POSIX/signals/sigSegv.C b/src/OSspecific/POSIX/signals/sigSegv.C index 270a21461979d4232b3df8f5586f67ff094fb119..14ab77ffe326c878e7cf1507c3d0cebb3e8b328f 100644 --- a/src/OSspecific/POSIX/signals/sigSegv.C +++ b/src/OSspecific/POSIX/signals/sigSegv.C @@ -83,7 +83,7 @@ Foam::sigSegv::~sigSegv() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::sigSegv::set() +void Foam::sigSegv::set(const bool verbose) { if (oldAction_.sa_handler) { diff --git a/src/OSspecific/POSIX/signals/sigSegv.H b/src/OSspecific/POSIX/signals/sigSegv.H index 2c405c9565bd665c303c76c60957a6a39e18be6e..5aae61de7d3319b1f9f5dbc950d13cf290671fd6 100644 --- a/src/OSspecific/POSIX/signals/sigSegv.H +++ b/src/OSspecific/POSIX/signals/sigSegv.H @@ -78,7 +78,7 @@ public: // Member functions - void set(); + void set(const bool verbose); }; diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index c99ee23fa5105c25076fc4bb5b73769c74751864..24208bfcd5fcd7b65fd0e9ac717da1f635113233 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -63,7 +63,7 @@ primitives/random/Random.C containers/HashTables/HashTable/HashTableName.C containers/HashTables/StaticHashTable/StaticHashTableName.C containers/Lists/SortableList/ParSortableListName.C -containers/Lists/PackedList/PackedListCore.C +containers/Lists/PackedList/PackedListName.C containers/Lists/ListOps/ListOps.C containers/LinkedLists/linkTypes/SLListBase/SLListBase.C containers/LinkedLists/linkTypes/DLListBase/DLListBase.C @@ -72,6 +72,7 @@ primitiveLists = primitives/Lists $(primitiveLists)/boolList.C $(primitiveLists)/labelIOList.C $(primitiveLists)/scalarList.C +$(primitiveLists)/scalarIOList.C $(primitiveLists)/vectorList.C $(primitiveLists)/sphericalTensorList.C $(primitiveLists)/symmTensorList.C diff --git a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H index 8ae3697f1dd95a402c56b2ca69616084be84fd74..78cb735e17066245c211c932bbd20ac486777b3b 100644 --- a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H +++ b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTable.H @@ -122,19 +122,13 @@ public: // IOstream Operators - friend Istream& operator>> - #ifndef __CINT__ - <T, Key, Hash> - #endif + friend Istream& operator>> <T, Key, Hash> ( Istream&, HashPtrTable<T, Key, Hash>& ); - friend Ostream& operator<< - #ifndef __CINT__ - <T, Key, Hash> - #endif + friend Ostream& operator<< <T, Key, Hash> ( Ostream&, const HashPtrTable<T, Key, Hash>& diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H index 0e13b7c9a1d82016ff51b5915f09db97b6a42a64..3871db3a50e486370485979b9974290a74526ea9 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTable.H @@ -417,19 +417,13 @@ public: // IOstream Operator - friend Istream& operator>> - #ifndef __CINT__ - <T, Key, Hash> - #endif + friend Istream& operator>> <T, Key, Hash> ( Istream&, HashTable<T, Key, Hash>& ); - friend Ostream& operator<< - #ifndef __CINT__ - <T, Key, Hash> - #endif + friend Ostream& operator<< <T, Key, Hash> ( Ostream&, const HashTable<T, Key, Hash>& diff --git a/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H b/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H index e2655da4334ea4878513b757d56d1133156b35b5..5212d57f5168d289e5fcdc6b9fdedef1e9569632 100644 --- a/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H +++ b/src/OpenFOAM/containers/HashTables/HashTable/HashTableI.H @@ -428,20 +428,19 @@ inline bool Foam::HashTable<T, Key, Hash>::const_iterator::operator!= template<class T, class Key, class Hash> -inline const T& +inline const T& Foam::HashTable<T, Key, Hash>::const_iterator::operator*() const { return elmtPtr_->obj_; } -#ifndef __CINT__ template<class T, class Key, class Hash> inline const T& Foam::HashTable<T, Key, Hash>::const_iterator::operator()() const { return elmtPtr_->obj_; } -#endif + template<class T, class Key, class Hash> inline diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H index 2e0823fe3d69c8344123ad156b1eea395063a153..20635fa53f944bedcaa4f240d05657a09782f2df 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/ILList/ILList.H @@ -152,10 +152,7 @@ public: // Istream operator //- Read List from Istream, discarding contents of existing List. - friend Istream& operator>> - #ifndef __CINT__ - <LListBase, T> - #endif + friend Istream& operator>> <LListBase, T> ( Istream&, ILList<LListBase, T>& diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H index 9c8a22945ac8934cd75f880d6e4204742b95125e..0905f5543cbd7f272845f62d5d7d8afa0633b9ae 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/LList/LList.H @@ -327,19 +327,13 @@ public: // IOstream operators - friend Istream& operator>> - #ifndef __CINT__ - <LListBase, T> - #endif + friend Istream& operator>> <LListBase, T> ( Istream&, LList<LListBase, T>& ); - friend Ostream& operator<< - #ifndef __CINT__ - <LListBase, T> - #endif + friend Ostream& operator<< <LListBase, T> ( Ostream&, const LList<LListBase, T>& diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H index ed98956ad5bd168b51b791b92ef7f24352b93465..333d916a65a4bbb84a0b75532cfcfaca28a0d463 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/LPtrList/LPtrList.H @@ -260,19 +260,13 @@ public: // IOstream operators - friend Istream& operator>> - #ifndef __CINT__ - <LListBase, T> - #endif + friend Istream& operator>> <LListBase, T> ( Istream&, LPtrList<LListBase, T>& ); - friend Ostream& operator<< - #ifndef __CINT__ - <LListBase, T> - #endif + friend Ostream& operator<< <LListBase, T> ( Ostream&, const LPtrList<LListBase, T>& diff --git a/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H b/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H index feefd60c7c8460aac8574299e6ff3d8b86b4248d..61585d6ac8c25afb931dd08f689a84b5fee7de3b 100644 --- a/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H +++ b/src/OpenFOAM/containers/LinkedLists/accessTypes/UILList/UILList.H @@ -277,10 +277,7 @@ public: // Ostream operator - friend Ostream& operator<< - #ifndef __CINT__ - <LListBase, T> - #endif + friend Ostream& operator<< <LListBase, T> ( Ostream&, const UILList<LListBase, T>& diff --git a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H index 460d325006d133cfa3be15018539bf76c3806bd5..daccd7af3d11c1f358ff7aeb3397018cd9d545c9 100644 --- a/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H +++ b/src/OpenFOAM/containers/Lists/DynamicList/DynamicList.H @@ -210,20 +210,14 @@ public: // IOstream operators // Write DynamicList to Ostream. - friend Ostream& operator<< - #ifndef __CINT__ - <T, SizeInc, SizeMult, SizeDiv> - #endif + friend Ostream& operator<< <T, SizeInc, SizeMult, SizeDiv> ( Ostream&, const DynamicList<T, SizeInc, SizeMult, SizeDiv>& ); //- Read from Istream, discarding contents of existing DynamicList. - friend Istream& operator>> - #ifndef __CINT__ - <T, SizeInc, SizeMult, SizeDiv> - #endif + friend Istream& operator>> <T, SizeInc, SizeMult, SizeDiv> ( Istream&, DynamicList<T, SizeInc, SizeMult, SizeDiv>& diff --git a/src/OpenFOAM/containers/Lists/FixedList/FixedList.H b/src/OpenFOAM/containers/Lists/FixedList/FixedList.H index 6c64a92d03f3a0400a33ff3cf0cd7e40cceff75a..76f9527701d4eec378553f1f4767572be282055a 100644 --- a/src/OpenFOAM/containers/Lists/FixedList/FixedList.H +++ b/src/OpenFOAM/containers/Lists/FixedList/FixedList.H @@ -331,17 +331,11 @@ public: // IOstream operators //- Read List from Istream, discarding contents of existing List. - friend Istream& operator>> - #ifndef __CINT__ - <T, Size> - #endif + friend Istream& operator>> <T, Size> (Istream&, FixedList<T, Size>&); // Write FixedList to Ostream. - friend Ostream& operator<< - #ifndef __CINT__ - <T, Size> - #endif + friend Ostream& operator<< <T, Size> ( Ostream&, const FixedList<T, Size>& diff --git a/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H b/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H index 055f785471b909e9ee65c324d2d62bfb23b1777c..1c3fe7131e6f179ad801a0151da2dd93d746c83e 100644 --- a/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H +++ b/src/OpenFOAM/containers/Lists/FixedList/FixedListI.H @@ -398,7 +398,6 @@ inline bool Foam::FixedList<T, Size>::empty() const } -#ifndef __CINT__ template<class T, unsigned Size> template<class HashT> inline unsigned Foam::FixedList<T, Size>::Hash<HashT>::operator() @@ -426,6 +425,5 @@ inline unsigned Foam::FixedList<T, Size>::Hash<HashT>::operator() } } -#endif // __CINT__ // ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/List/List.C b/src/OpenFOAM/containers/Lists/List/List.C index 3fa3dcc8748bb8a3fbb8e775a4510baa705ab189..08422fd9ba23333451a1123d5ebf7217b4f9bfd6 100644 --- a/src/OpenFOAM/containers/Lists/List/List.C +++ b/src/OpenFOAM/containers/Lists/List/List.C @@ -35,8 +35,6 @@ License #include "BiIndirectList.H" #include "contiguous.H" -#include <algorithm> - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // @@ -442,34 +440,6 @@ void Foam::List<T>::transfer(SortableList<T>& a) } -template<class T> -void Foam::sort(List<T>& a) -{ - std::sort(a.begin(), a.end()); -} - - -template<class T, class Cmp> -void Foam::sort(List<T>& a, const Cmp& cmp) -{ - std::sort(a.begin(), a.end(), cmp); -} - - -template<class T> -void Foam::stableSort(List<T>& a) -{ - std::stable_sort(a.begin(), a.end()); -} - - -template<class T, class Cmp> -void Foam::stableSort(List<T>& a, const Cmp& cmp) -{ - std::stable_sort(a.begin(), a.end(), cmp); -} - - // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // // Assignment to UList operator. Takes linear time. diff --git a/src/OpenFOAM/containers/Lists/List/List.H b/src/OpenFOAM/containers/Lists/List/List.H index 434320cf5b21b980bbbbf286a57df2186e4e98fe..b89f6c95a9f15c2bfe07eddfb3aa537a30c1d9b1 100644 --- a/src/OpenFOAM/containers/Lists/List/List.H +++ b/src/OpenFOAM/containers/Lists/List/List.H @@ -233,10 +233,7 @@ public: // Istream operator //- Read List from Istream, discarding contents of existing List. - friend Istream& operator>> - #ifndef __CINT__ - <T> - #endif + friend Istream& operator>> <T> (Istream&, List<T>&); }; @@ -251,18 +248,6 @@ public: template<class T> List<T> readList(Istream&); -template<class T> -void sort(List<T>&); - -template<class T, class Cmp> -void sort(List<T>&, const Cmp&); - -template<class T> -void stableSort(List<T>&); - -template<class T, class Cmp> -void stableSort(List<T>&, const Cmp&); - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/containers/Lists/List/ListLoopM.H b/src/OpenFOAM/containers/Lists/List/ListLoopM.H index da90147c64c08f5e5ef03cab1b57900eb79cb319..48b8c5d17e5336268f6fcd6ae7798c662d4b5233 100644 --- a/src/OpenFOAM/containers/Lists/List/ListLoopM.H +++ b/src/OpenFOAM/containers/Lists/List/ListLoopM.H @@ -31,8 +31,6 @@ Description #ifndef ListLoop_H #define ListLoop_H -#include "undefListLoopM.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef vectorMachine @@ -48,8 +46,11 @@ Description #define List_ELEM(f, fp, i) (fp[i]) -#define List_ACCESS(type, f, fp) type* __restrict__ fp = (f).begin() -#define List_CONST_ACCESS(type, f, fp) const type* __restrict__ fp = (f).begin() +#define List_ACCESS(type, f, fp) \ + type* const __restrict__ fp = (f).begin() + +#define List_CONST_ACCESS(type, f, fp) \ + const type* const __restrict__ fp = (f).begin() #else @@ -64,8 +65,11 @@ Description #define List_ELEM(f, fp, i) (*fp++) -#define List_ACCESS(type, f, fp) register type* __restrict__ fp = (f).begin() -#define List_CONST_ACCESS(type, f, fp) register const type* __restrict__ fp = (f).begin() +#define List_ACCESS(type, f, fp) \ + register type* __restrict__ fp = (f).begin() + +#define List_CONST_ACCESS(type, f, fp) \ + register const type* __restrict__ fp = (f).begin() #endif diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H index 7de9239d04deed112a68f7ddf745c5d1d933133c..1504fb4d78363167fd2f4e934270702728afc71d 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H @@ -73,7 +73,7 @@ void inplaceReorder(const UList<label>& oldToNew, ListType&); template<class Container> void inplaceMapValue(const UList<label>& oldToNew, Container&); -//- Recreate with mapped keys. Remove elements with negative key. +//- Recreate with mapped keys. Do not map elements with negative key. template<class Container> void inplaceMapKey(const UList<label>& oldToNew, Container&); diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C index f2178ee38df53e583476328496325f068ef8fc34..dd8536eec9b9f1466c518e2069c4a96b489cdc80 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C @@ -147,7 +147,7 @@ void Foam::inplaceMapKey Container& lst ) { - Container newLst(lst); + Container newLst(lst.size()); for ( diff --git a/src/OpenFOAM/containers/Lists/PackedList/PackedListCore.C b/src/OpenFOAM/containers/Lists/PackedList/PackedListName.C similarity index 99% rename from src/OpenFOAM/containers/Lists/PackedList/PackedListCore.C rename to src/OpenFOAM/containers/Lists/PackedList/PackedListName.C index 270d1c30eb8138da1d492d92218bdf94325700ab..5973d3021e011a682921cabac851ee87f6d5082a 100644 --- a/src/OpenFOAM/containers/Lists/PackedList/PackedListCore.C +++ b/src/OpenFOAM/containers/Lists/PackedList/PackedListName.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "PackedList.H" diff --git a/src/OpenFOAM/containers/Lists/PtrList/PtrList.C b/src/OpenFOAM/containers/Lists/PtrList/PtrList.C index 6418537b02089d50eb8e1905cda5f556f2fa33ae..11d997dd3f2fe6047b0ad9734c0de207404a302d 100644 --- a/src/OpenFOAM/containers/Lists/PtrList/PtrList.C +++ b/src/OpenFOAM/containers/Lists/PtrList/PtrList.C @@ -27,7 +27,6 @@ License #include "error.H" #include "PtrList.H" -#include "PtrListLoopM.H" #include "SLPtrList.H" // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H b/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H index ec6a1b9fd6f330f6d5feb3c5e7bd4d78a8b411af..0219e02af72861fb2c92b001b498f6ff1fb68b18 100644 --- a/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H +++ b/src/OpenFOAM/containers/Lists/UIndirectList/UIndirectList.H @@ -97,16 +97,16 @@ public: //- Assignment of all entries to the given value inline void operator=(const T&); + // Ostream operator //- Write UIndirectList to Ostream // Binary output is currently still a bit of a problem - friend Ostream& operator<< - #ifndef __CINT__ - <T> - #endif - (Ostream&, const UIndirectList<T>&); - + friend Ostream& operator<< <T> + ( + Ostream&, + const UIndirectList<T>& + ); }; diff --git a/src/OpenFOAM/containers/Lists/UList/UList.C b/src/OpenFOAM/containers/Lists/UList/UList.C index 255a91ecfecc83484da0f0f6873795e82dbf586d..42d00bc41e7ede72f47b9e4dcf9490e0891c2f33 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.C +++ b/src/OpenFOAM/containers/Lists/UList/UList.C @@ -30,6 +30,8 @@ License #include "ListLoopM.H" #include "contiguous.H" +#include <algorithm> + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class T> @@ -116,6 +118,34 @@ Foam::label Foam::UList<T>::byteSize() const } +template<class T> +void Foam::sort(UList<T>& a) +{ + std::sort(a.begin(), a.end()); +} + + +template<class T, class Cmp> +void Foam::sort(UList<T>& a, const Cmp& cmp) +{ + std::sort(a.begin(), a.end(), cmp); +} + + +template<class T> +void Foam::stableSort(UList<T>& a) +{ + std::stable_sort(a.begin(), a.end()); +} + + +template<class T, class Cmp> +void Foam::stableSort(UList<T>& a, const Cmp& cmp) +{ + std::stable_sort(a.begin(), a.end(), cmp); +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template<class T> diff --git a/src/OpenFOAM/containers/Lists/UList/UList.H b/src/OpenFOAM/containers/Lists/UList/UList.H index 6370f8e749fe4025bb66c5e255bf6d13fa5848d7..087f685ff6cf182cee3be9fe3a4c24370d3f25fa 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.H +++ b/src/OpenFOAM/containers/Lists/UList/UList.H @@ -313,13 +313,25 @@ public: // Ostream operator // Write UList to Ostream. - friend Ostream& operator<< - #ifndef __CINT__ - <T> - #endif - (Ostream&, const UList<T>&); + friend Ostream& operator<< <T> + ( + Ostream&, + const UList<T>& + ); }; +template<class T> +void sort(UList<T>&); + +template<class T, class Cmp> +void sort(UList<T>&, const Cmp&); + +template<class T> +void stableSort(UList<T>&); + +template<class T, class Cmp> +void stableSort(UList<T>&, const Cmp&); + // Reverse the first n elements of the list template<class T> inline void reverse(UList<T>&, const label n); diff --git a/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C b/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C index 02015efb9b663ec6dbd13a36398bce94def3a9ee..bed0214749efe46fecb7de60e3e063c612fbf7d7 100644 --- a/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C +++ b/src/OpenFOAM/containers/Lists/UPtrList/UPtrList.C @@ -27,7 +27,6 @@ License #include "error.H" #include "UPtrList.H" -#include "PtrListLoopM.H" // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/db/IOobject/IOobject.H b/src/OpenFOAM/db/IOobject/IOobject.H index 5fc5a839b13d8d86a06828551200584335ca9f4c..063af46c66118b07ab87b42faf9bb834d83a5d76 100644 --- a/src/OpenFOAM/db/IOobject/IOobject.H +++ b/src/OpenFOAM/db/IOobject/IOobject.H @@ -83,8 +83,6 @@ class objectRegistry; Class IOobject Declaration \*---------------------------------------------------------------------------*/ -#include "CintDefs.H" - class IOobject { @@ -395,7 +393,6 @@ public: void operator=(const IOobject&); }; -#include "CintUndefs.H" #if defined (__GNUC__) template<> diff --git a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C index 8fcc3bd982ece6f33764891971d3d4e67bbc5cfe..fcb2fbdebe9e84708f5bb6a71d4538db4738a1dc 100644 --- a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C +++ b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.C @@ -63,6 +63,21 @@ Foam::IOPtrList<T>::IOPtrList(const IOobject& io) } +template<class T> +Foam::IOPtrList<T>::IOPtrList(const IOobject& io, const label s) +: + regIOobject(io), + PtrList<T>(s) +{ + if (io.readOpt() != IOobject::NO_READ) + { + FatalErrorIn("IOPtrList<T>::IOPtrList(const IOobject&, const label)") + << "NO_READ must be set if specifying size" << nl + << exit(FatalError); + } +} + + template<class T> Foam::IOPtrList<T>::IOPtrList(const IOobject& io, const PtrList<T>& list) : diff --git a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H index 9a2e8ce5afe2ad9462d45ac02dd911a84d2728fa..bc2232056f4aed9f7518674b11db746c7f2b5429 100644 --- a/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H +++ b/src/OpenFOAM/db/IOobjects/IOPtrList/IOPtrList.H @@ -70,6 +70,9 @@ public: //- Construct from IOobject IOPtrList(const IOobject&); + //- Construct from IOobject with given size + IOPtrList(const IOobject&, const label); + //- Construct from IOobject and a PtrList IOPtrList(const IOobject&, const PtrList<T>&); diff --git a/src/OpenFOAM/db/IOstreams/Fstreams/OFstream.H b/src/OpenFOAM/db/IOstreams/Fstreams/OFstream.H index 29079d33f8c740b69222e63c77ad8cd0b0b8752d..7ad2ebd88a17bd08dd93305d2771171da6b3c982 100644 --- a/src/OpenFOAM/db/IOstreams/Fstreams/OFstream.H +++ b/src/OpenFOAM/db/IOstreams/Fstreams/OFstream.H @@ -148,9 +148,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Global predefined null output stream -#ifndef __CINT__ extern OFstream Snull; -#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/db/IOstreams/IOstreams/IOstream.H b/src/OpenFOAM/db/IOstreams/IOstreams/IOstream.H index f2846f47f5735db3206b15613676a4bfda02b690..a9c50741e932333e10c53b8163ab704533918126 100644 --- a/src/OpenFOAM/db/IOstreams/IOstreams/IOstream.H +++ b/src/OpenFOAM/db/IOstreams/IOstreams/IOstream.H @@ -74,8 +74,6 @@ namespace Foam Class IOstream Declaration \*---------------------------------------------------------------------------*/ -#include "CintDefs.H" - class IOstream { @@ -193,9 +191,7 @@ public: //- Ostream operator - #ifndef __MAKECINT__ friend Ostream& operator<<(Ostream& os, const versionNumber& vn); - #endif }; @@ -421,7 +417,7 @@ public: } //- Return compression of given compression name - static compressionType compressionEnum(const word&); + static compressionType compressionEnum(const word&); //- Return the stream compression compressionType compression() const @@ -545,7 +541,6 @@ public: } }; -#include "CintUndefs.H" Ostream& operator<<(Ostream& os, const IOstream::streamFormat& sf); Ostream& operator<<(Ostream& os, const IOstream::versionNumber& vn); @@ -554,7 +549,6 @@ Ostream& operator<<(Ostream& os, const IOstream::versionNumber& vn); // -------------------------------------------------------------------- // ------ Manipulators (not taking arguments) // -------------------------------------------------------------------- -#ifndef __CINT__ typedef IOstream& (*IOstreamManip)(IOstream&); @@ -595,8 +589,6 @@ inline IOstream& scientific(IOstream& io) return io; } -#endif - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/db/IOstreams/IOstreams/InfoProxy.H b/src/OpenFOAM/db/IOstreams/IOstreams/InfoProxy.H index b4f48ab18f8268b3f2579a64b535fa015d9eb8c7..ff2c1e8a3e7e384e2677594f2eb5f6b81a12cc80 100644 --- a/src/OpenFOAM/db/IOstreams/IOstreams/InfoProxy.H +++ b/src/OpenFOAM/db/IOstreams/IOstreams/InfoProxy.H @@ -52,19 +52,14 @@ class InfoProxy { public: - #ifndef __MAKECINT__ const T& t_; - #endif InfoProxy(const T& t) : t_(t) {} - - friend Ostream& operator<< - #ifndef __CINT__ - <T> - #endif + + friend Ostream& operator<< <T> (Ostream&, const InfoProxy<T>&); }; diff --git a/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H b/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H index f446f2938f270e2af1205f0ea956ba0afb7be812..701c674b14f5a6df33da9c6f4ce86e40663e6d62 100644 --- a/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H +++ b/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H @@ -152,7 +152,6 @@ public: // -------------------------------------------------------------------- // ------ Manipulators (not taking arguments) // -------------------------------------------------------------------- -#ifndef __CINT__ typedef Istream& (*IstreamManip)(Istream&); @@ -169,8 +168,6 @@ inline Istream& operator>>(Istream& is, IOstreamManip f) return is; } -#endif - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/db/IOstreams/IOstreams/Ostream.H b/src/OpenFOAM/db/IOstreams/IOstreams/Ostream.H index f82c7962225dc04df0b1930e19d0157720b27a65..6ea3380777f252c4bc76faaed0309f1d20311f60 100644 --- a/src/OpenFOAM/db/IOstreams/IOstreams/Ostream.H +++ b/src/OpenFOAM/db/IOstreams/IOstreams/Ostream.H @@ -70,6 +70,7 @@ protected: //- Current indent level unsigned short indentLevel_; + public: // Constructors @@ -87,10 +88,9 @@ public: {} - // Destructor - - virtual ~Ostream() - {} + //- Destructor + virtual ~Ostream() + {} // Member functions @@ -199,7 +199,6 @@ public: // -------------------------------------------------------------------- // ------ Manipulators (not taking arguments) // -------------------------------------------------------------------- -#ifndef __CINT__ typedef Ostream& (*OstreamManip)(Ostream&); @@ -254,8 +253,6 @@ inline Ostream& endl(Ostream& os) return os; } -#endif - // Useful aliases for tab and newline characters static const char tab = '\t'; diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H index ba7904639c001e024c44ee1e7be9e140c07a9102..dff94c259f78ee2cbe7811d244432f43576a7c7f 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H +++ b/src/OpenFOAM/db/IOstreams/Pstreams/Pstream.H @@ -151,9 +151,7 @@ public: // Ostream Operator - #ifndef __CINT__ friend Ostream& operator<<(Ostream&, const commsStruct&); - #endif }; diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H index 45dc5a607ce67b94804d0a698c8af96d61af8521..fe778fa01031cccb4d0602d913ba61da3ebb6889 100644 --- a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H +++ b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H @@ -58,9 +58,7 @@ class ISstream // Private data fileName name_; - #ifndef __CINT__ istream& is_; - #endif // Private member functions diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H b/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H index 75d18ef793779d2051fd0d6139031b3bb8018a8f..5c862afd9311328093b843440feb846e1baf2d09 100644 --- a/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H +++ b/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H @@ -58,9 +58,7 @@ class OSstream // Private data fileName name_; - #ifndef __CINT__ ostream& os_; - #endif // Private Member Functions diff --git a/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H b/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H index 3a34761db789bc27ddfdc0ac27b698d5a10299d6..891c8f0dab8472b7d13aca6e0e881619e7e3501b 100644 --- a/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H +++ b/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H @@ -98,6 +98,12 @@ public: } + // Destructor + + virtual ~ITstream() + {} + + // Member functions // Inquiry @@ -142,31 +148,31 @@ public: // Read functions //- Return next token from stream - Istream& read(token&); + virtual Istream& read(token&); //- Read a character - Istream& read(char&); + virtual Istream& read(char&); //- Read a word - Istream& read(word&); + virtual Istream& read(word&); // Read a string (including enclosing double-quotes) - Istream& read(string&); + virtual Istream& read(string&); //- Read a label - Istream& read(label&); + virtual Istream& read(label&); //- Read a floatScalar - Istream& read(floatScalar&); + virtual Istream& read(floatScalar&); //- Read a doubleScalar - Istream& read(doubleScalar&); + virtual Istream& read(doubleScalar&); //- Read binary block - Istream& read(char*, std::streamsize); + virtual Istream& read(char*, std::streamsize); //- Rewind and return the stream so that it may be read again - Istream& rewind(); + virtual Istream& rewind(); // Edit diff --git a/src/OpenFOAM/db/IOstreams/token/token.H b/src/OpenFOAM/db/IOstreams/token/token.H index 2defc09d73b7ff615fad2a6622d5820c2a575cb0..0880b13d13262ef949a75b7de29932fcb87b6f82 100644 --- a/src/OpenFOAM/db/IOstreams/token/token.H +++ b/src/OpenFOAM/db/IOstreams/token/token.H @@ -66,8 +66,6 @@ Ostream& operator<<(Ostream&, const token&); Class token Declaration \*---------------------------------------------------------------------------*/ -#include "CintDefs.H" - class token { @@ -206,9 +204,7 @@ public: // IOstream Operators - #ifndef __MAKECINT__ friend Ostream& operator<<(Ostream&, const compound&); - #endif }; @@ -431,7 +427,6 @@ public: friend ostream& operator<<(ostream&, const InfoProxy<token>&); }; -#include "CintUndefs.H" Ostream& operator<<(Ostream&, const token::punctuationToken&); ostream& operator<<(ostream&, const token::punctuationToken&); diff --git a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H index e4255827bf60572cdf5d43f8b0cf5da577d79fe8..6fc94aa1ad6ca8255832a3981d1bd5a42bab1d10 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H +++ b/src/OpenFOAM/db/dictionary/functionEntries/includeEntry/includeEntry.H @@ -80,7 +80,7 @@ class includeEntry public: //- Runtime type information - TypeName("include"); + ClassName("include"); // Member Functions diff --git a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H index da3bd7a0676ae53a969fdaa7f09e0a696916e363..4aace67dfaff2c01f98bfe7e31aeca78bc800be4 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H +++ b/src/OpenFOAM/db/dictionary/functionEntries/inputModeEntry/inputModeEntry.H @@ -96,7 +96,7 @@ class inputModeEntry public: //- Runtime type information - TypeName("inputMode"); + ClassName("inputMode"); // Member Functions @@ -118,7 +118,6 @@ public: //- Return true if the inputMode is %error static bool error(); - }; diff --git a/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.H index 1ed2d99639228540938aba2c4d993a3a749a6185..b98da86e67de68f421d4865389a8c74e812fddd7 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.H +++ b/src/OpenFOAM/db/dictionary/functionEntries/removeEntry/removeEntry.H @@ -74,7 +74,7 @@ class removeEntry public: //- Runtime type information - TypeName("remove"); + ClassName("remove"); // Member Functions diff --git a/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.H b/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.H index c5189c1520d6c2ddb955f300d27c9d9c7eb1edf0..afc391248380ea12f90f3fd14cf9fa5b5db8bd5c 100644 --- a/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.H +++ b/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntry.H @@ -66,9 +66,6 @@ class primitiveEntry public entry, public ITstream { - -public: - // Private member functions //- Append the given token to this entry @@ -93,9 +90,6 @@ public: Istream& ); - //- Read tokens from the given stream - bool read(const dictionary&, Istream&); - //- Read the complete entry from the given stream void readEntry(const dictionary&, Istream&); @@ -169,6 +163,9 @@ public: // calling this function generates a FatalError dictionary& dict(); + //- Read tokens from the given stream + bool read(const dictionary&, Istream&); + // Write void write(Ostream&) const; diff --git a/src/OpenFOAM/db/error/error.H b/src/OpenFOAM/db/error/error.H index 1cd9574e6dcb5c56d0fdd55dae072edebc0a6dee..639bd933c6e75b2af398044d75b402b337c43428 100644 --- a/src/OpenFOAM/db/error/error.H +++ b/src/OpenFOAM/db/error/error.H @@ -150,12 +150,9 @@ public: //- Convert to Ostream // Prints basic message and then returns Ostream for further info. - #ifndef __CINT__ operator OSstream&(); - #endif //- Explicitly convert to Ostream for << operations - // needed in cint OSstream& operator()() { return operator OSstream&(); @@ -311,9 +308,7 @@ extern IOerror FatalIOError; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#ifndef __CINT__ #include "errorManip.H" -#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/db/error/messageStream.H b/src/OpenFOAM/db/error/messageStream.H index 20b04363276ef44c38d5314e644175bdca0a1668..d37f6a010c7c2f23accf7a329e01ad54a5a25640 100644 --- a/src/OpenFOAM/db/error/messageStream.H +++ b/src/OpenFOAM/db/error/messageStream.H @@ -182,12 +182,9 @@ public: ); //- Convert to Ostream for << operations - #ifndef __CINT__ operator OSstream&(); - #endif //- Explicitly convert to Ostream for << operations - // needed in cint OSstream& operator()() { return operator OSstream&(); diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H index 5ab4ebbecec37c35c8e76d5d1eb5653e0ed13fad..9ac00bd060f7d650f216ad162595af56ca7a31f6 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H @@ -63,17 +63,28 @@ class OutputFilterFunctionObject { // Private data + //- Output filter name word name_; + + //- Reference to the time database const Time& time_; + + //- Input dictionary dictionary dict_; + + //- Name of region word regionName_; + + //- Optional dictionary name to supply required inputs word dictName_; //- Switch for the execution of the functionObject bool enabled_; + //- Output controls outputFilterOutputControl outputControl_; + //- Pointer to the output filter autoPtr<OutputFilter> ptr_; @@ -108,31 +119,78 @@ public: // Member Functions - //- Return name - virtual const word& name() const - { - return name_; - } + // Access + + //- Return name + virtual const word& name() const + { + return name_; + } + + //- Return time database + virtual const Time& time() const + { + return time_; + } + + //- Return the input dictionary + virtual const dictionary& dict() const + { + return dict_; + } + + //- Return the region name + virtual const word& regionName() const + { + return regionName_; + } + + //- Return the optional dictionary name + virtual const word& dictName() const + { + return dictName_; + } + + //- Return the enabled flag + virtual bool enabled() const + { + return enabled_; + } + + //- Return the output control object + virtual const outputFilterOutputControl& outputControl() const + { + return outputControl_; + } + + //- Return the output filter + virtual const OutputFilter& outputFilter() const + { + return ptr_(); + } + + + // Function object control - //- Switch the function object on - virtual void on(); + //- Switch the function object on + virtual void on(); - //- Switch the function object off - virtual void off(); + //- Switch the function object off + virtual void off(); - //- Called at the start of the time-loop - virtual bool start(); + //- Called at the start of the time-loop + virtual bool start(); - //- Called at each ++ or += of the time-loop - virtual bool execute(); + //- Called at each ++ or += of the time-loop + virtual bool execute(); - //- Called when Time::run() determines that the time-loop exits - virtual bool end(); + //- Called when Time::run() determines that the time-loop exits + virtual bool end(); - //- Read and set the function object if its data have changed - virtual bool read(const dictionary&); + //- Read and set the function object if its data have changed + virtual bool read(const dictionary&); }; diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C index a5a5e8e1e3dfbe847b6d4b5667e8faaf8af5149a..6e2682e19902ce4bcc2beb16f6cbaa7aab357eea 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.C +++ b/src/OpenFOAM/db/regIOobject/regIOobject.C @@ -134,14 +134,26 @@ bool Foam::regIOobject::checkIn() // any mapping registered_ = db().checkIn(*this); - // checkin on defaultRegion is allowed to fail, since subsetted meshes + // check-in on defaultRegion is allowed to fail, since subsetted meshes // are created with the same name as their originating mesh if (!registered_ && debug && name() != polyMesh::defaultRegion) { - WarningIn("regIOobject::checkIn()") - << "failed to register object " << objectPath() + if (debug == 2) + { + // for ease of finding where attempted duplicate check-in + // originated + FatalErrorIn("regIOobject::checkIn()") + << "failed to register object " << objectPath() << " the name already exists in the objectRegistry" - << endl; + << abort(FatalError); + } + else + { + WarningIn("regIOobject::checkIn()") + << "failed to register object " << objectPath() + << " the name already exists in the objectRegistry" + << endl; + } } } diff --git a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H index 1ad252955a3e7430c78c7b0ff84c5f78beeffa9c..6817098a6cbb8ffd0960ce9f7f65c3421b8f04ce 100644 --- a/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H +++ b/src/OpenFOAM/dimensionedTypes/dimensionedType/dimensionedType.H @@ -174,16 +174,10 @@ public: // IOstream operators - friend Istream& operator>> - #ifndef __CINT__ - <Type> - #endif + friend Istream& operator>> <Type> (Istream&, dimensioned<Type>&); - friend Ostream& operator<< - #ifndef __CINT__ - <Type> - #endif + friend Ostream& operator<< <Type> (Ostream&, const dimensioned<Type>&); }; diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H index f9744fc4fd954de3eb38b35073b74bfd1f7d1c64..1d26e508a53093541135f65409ddd7a80a72b5be 100644 --- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H +++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedField.H @@ -217,9 +217,8 @@ public: tmp<DimensionedField<Type, GeoMesh> > clone() const; - // Destructor - - ~DimensionedField(); + //- Destructor + virtual ~DimensionedField(); // Member Functions diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.C b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.C new file mode 100644 index 0000000000000000000000000000000000000000..783581f5c5727429db49881491c64a4978a6ad15 --- /dev/null +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.C @@ -0,0 +1,112 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DynamicField.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * Static Members * * * * * * * * * * * * * * // + +template<class Type> +const char* const DynamicField<Type>::typeName("DynamicField"); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +DynamicField<Type>::DynamicField(Istream& is) +: + Field<Type>(is), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +tmp<DynamicField<Type> > DynamicField<Type>::clone() const +{ + return tmp<DynamicField<Type> >(new DynamicField<Type>(*this)); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +void DynamicField<Type>::setSize(const label nElem) +{ + // allocate more capacity? + if (nElem > capacity_) + { + capacity_ = max(nElem, label(1 + capacity_*2)); + + Field<Type>::setSize(capacity_); + } + + // adjust addressed size + Field<Type>::size(nElem); +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + + +// * * * * * * * * * * * * * * * IOstream Operator * * * * * * * * * * * * * // + +template<class Type> +Ostream& operator<<(Ostream& os, const DynamicField<Type>& f) +{ + os << static_cast<const Field<Type>&>(f); + return os; +} + + +template<class Type> +Ostream& operator<<(Ostream& os, const tmp<DynamicField<Type> >& tf) +{ + os << tf(); + tf.clear(); + return os; +} + + +template<class Type> +Istream& operator>>(Istream& is, DynamicField<Type>& lst) +{ + is >> static_cast<Field<Type>&>(lst); + lst.capacity_ = lst.Field<Type>::size(); + + return is; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + + +// ************************************************************************* // diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H new file mode 100644 index 0000000000000000000000000000000000000000..1b9915d5730da34d75fca1c2680911217c1fd1cb --- /dev/null +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H @@ -0,0 +1,215 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::DynamicField + +Description + Dynamically sized Field. WIP. + +SourceFiles + DynamicField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef DynamicField_H +#define DynamicField_H + +#include "Field.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of friend functions and operators + +template<class Type> +class DynamicField; + +template<class Type> +Ostream& operator<<(Ostream&, const DynamicField<Type>&); + +template<class Type> +Ostream& operator<<(Ostream&, const tmp<DynamicField<Type> >&); + +template<class Type> +Istream& operator>>(Istream&, DynamicField<Type>&); + + +/*---------------------------------------------------------------------------*\ + Class DynamicField Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class DynamicField +: + public Field<Type> +{ + + // Private data + + //- The capacity (allocated size) of the underlying field. + label capacity_; + + + //- Construct given size and initial value + DynamicField(const label, const Type&); + + //- Construct as copy of tmp<DynamicField> +# ifdef ConstructFromTmp + DynamicField(const tmp<DynamicField<Type> >&); +# endif + + //- Construct from a dictionary entry + DynamicField(const word&, const dictionary&, const label); + +public: + + // Static data members + + static const char* const typeName; + + + // Static Member Functions + + //- Return a null field + inline static const DynamicField<Type>& null() + { + return *reinterpret_cast< DynamicField<Type>* >(0); + } + + + // Constructors + + //- Construct null + // Used for temporary fields which are initialised after construction + DynamicField(); + + //- Construct given size + // Used for temporary fields which are initialised after construction + explicit inline DynamicField(const label); + + //- Construct as copy of a UList\<Type\> + explicit inline DynamicField(const UList<Type>&); + + //- Construct by transferring the List contents + explicit inline DynamicField(const Xfer<List<Type> >&); + + //- Construct by 1 to 1 mapping from the given field + inline DynamicField + ( + const UList<Type>& mapF, + const labelList& mapAddressing + ); + + //- Construct by interpolative mapping from the given field + inline DynamicField + ( + const UList<Type>& mapF, + const labelListList& mapAddressing, + const scalarListList& weights + ); + + //- Construct by mapping from the given field + inline DynamicField + ( + const UList<Type>& mapF, + const FieldMapper& map + ); + + //- Construct as copy + inline DynamicField(const DynamicField<Type>&); + + //- Construct as copy or re-use as specified. + inline DynamicField(DynamicField<Type>&, bool reUse); + + //- Construct by transferring the Field contents + inline DynamicField(const Xfer<DynamicField<Type> >&); + + //- Construct from Istream + inline DynamicField(Istream&); + + //- Clone + tmp<DynamicField<Type> > clone() const; + + + // Member Functions + + //- Size of the underlying storage. + inline label capacity() const; + + //- Append an element at the end of the list + inline void append(const Type&); + + //- Alter the addressed list size. + // New space will be allocated if required. + // Use this to resize the list prior to using the operator[] for + // setting values (as per List usage). + void setSize(const label nElem); + + // Member operators + + inline void operator=(const DynamicField<Type>&); + inline void operator=(const UList<Type>&); + inline void operator=(const tmp<DynamicField<Type> >&); + + //- Return element of Field. + inline Type& operator[](const label i); + + //- Return element of constant Field. + inline const Type& operator[](const label) const; + + // IOstream operators + + friend Ostream& operator<< <Type> + (Ostream&, const DynamicField<Type>&); + + friend Ostream& operator<< <Type> + (Ostream&, const tmp<DynamicField<Type> >&); + + friend Istream& operator>> <Type> + (Istream&, DynamicField<Type>&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "DynamicFieldI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "DynamicField.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H b/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H new file mode 100644 index 0000000000000000000000000000000000000000..8680fbff25a1a81c3562d44f3944cb3f429a95d0 --- /dev/null +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H @@ -0,0 +1,221 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DynamicField.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +DynamicField<Type>::DynamicField() +: + Field<Type>(), + capacity_(0) +{} + + +template<class Type> +DynamicField<Type>::DynamicField(const label size) +: + Field<Type>(size), + capacity_(Field<Type>::size()) +{ + Field<Type>::size(0); +} + + +template<class Type> +inline Foam::DynamicField<Type>::DynamicField +( + const UList<Type>& lst +) +: + Field<Type>(lst), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +inline Foam::DynamicField<Type>::DynamicField +( + const Xfer<List<Type> >& lst +) +: + Field<Type>(lst), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +DynamicField<Type>::DynamicField +( + const UList<Type>& mapF, + const labelList& mapAddressing +) +: + Field<Type>(mapF, mapAddressing), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +DynamicField<Type>::DynamicField +( + const UList<Type>& mapF, + const labelListList& mapAddressing, + const scalarListList& weights +) +: + Field<Type>(mapF, mapAddressing, weights), + capacity_(Field<Type>::size()) +{} + + +//- Construct by mapping from the given field +template<class Type> +DynamicField<Type>::DynamicField +( + const UList<Type>& mapF, + const FieldMapper& map +) +: + DynamicField<Type>(mapF, map), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +DynamicField<Type>::DynamicField(const DynamicField<Type>& f) +: + Field<Type>(f), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +DynamicField<Type>::DynamicField(DynamicField<Type>& f, bool reUse) +: + Field<Type>(f, reUse), + capacity_(Field<Type>::size()) +{} + + +template<class Type> +DynamicField<Type>::DynamicField(const Xfer<DynamicField<Type> >& f) +: + Field<Type>(f), + capacity_(Field<Type>::size()) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +Foam::label DynamicField<Type>::capacity() const +{ + return capacity_; +} + + +template<class Type> +void DynamicField<Type>::append(const Type& t) +{ + label elemI = Field<Type>::size(); + setSize(elemI + 1); + + this->operator[](elemI) = t; +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +template<class Type> +void DynamicField<Type>::operator=(const DynamicField<Type>& rhs) +{ + if (this == &rhs) + { + FatalErrorIn("DynamicField<Type>::operator=(const DynamicField<Type>&)") + << "attempted assignment to self" + << abort(FatalError); + } + + Field<Type>::operator=(rhs); + capacity_ = Field<Type>::size(); +} + + +template<class Type> +void DynamicField<Type>::operator=(const UList<Type>& rhs) +{ + Field<Type>::operator=(rhs); + capacity_ = Field<Type>::size(); +} + + +template<class Type> +void DynamicField<Type>::operator=(const tmp<DynamicField>& rhs) +{ + if (this == &(rhs())) + { + FatalErrorIn("DynamicField<Type>::operator=(const tmp<DynamicField>&)") + << "attempted assignment to self" + << abort(FatalError); + } + + // This is dodgy stuff, don't try it at home. + DynamicField* fieldPtr = rhs.ptr(); + List<Type>::transfer(*fieldPtr); + delete fieldPtr; + capacity_ = Field<Type>::size(); +} + + +template<class Type> +Type& DynamicField<Type>::operator[](const label i) +{ + return Field<Type>::operator[](i); +} + + +template<class Type> +const Type& DynamicField<Type>::operator[](const label i) const +{ + return Field<Type>::operator[](i); +} + + +// * * * * * * * * * * * * * * * IOstream Operator * * * * * * * * * * * * * // + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/OpenFOAM/fields/Fields/Field/Field.H b/src/OpenFOAM/fields/Fields/Field/Field.H index e56e4633713df00768e640c2db83283368f87e73..98e664ec8d5a503fb0ea98802fe0ab54dc8414f4 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.H +++ b/src/OpenFOAM/fields/Fields/Field/Field.H @@ -75,8 +75,6 @@ class dictionary; Class Field Declaration \*---------------------------------------------------------------------------*/ -#include "CintDefs.H" - template<class Type> class Field : @@ -198,13 +196,11 @@ public: //- Return a pointer to a new calculatedFvPatchFieldField created on // freestore without setting patchField values - #ifndef __CINT__ template<class Type2> static tmp<Field<Type> > NewCalculatedType(const Field<Type2>& f) { return tmp<Field<Type> >(new Field<Type>(f.size())); } - #endif // Member Functions @@ -343,20 +339,13 @@ public: // IOstream operators - friend Ostream& operator<< - #ifndef __CINT__ - <Type> - #endif + friend Ostream& operator<< <Type> (Ostream&, const Field<Type>&); - friend Ostream& operator<< - #ifndef __CINT__ - <Type> - #endif + friend Ostream& operator<< <Type> (Ostream&, const tmp<Field<Type> >&); }; -#include "CintUndefs.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/fields/Fields/symmTransformField/symmTransformField.C b/src/OpenFOAM/fields/Fields/symmTransformField/symmTransformField.C index 67cb86e1935460040eb44360e4d0fabb38769ccb..db24d88042d79969d4d7bbf2032387b2145dae16 100644 --- a/src/OpenFOAM/fields/Fields/symmTransformField/symmTransformField.C +++ b/src/OpenFOAM/fields/Fields/symmTransformField/symmTransformField.C @@ -50,7 +50,7 @@ void transform { TFOR_ALL_F_OP_FUNC_F_F ( - Type, rtf, =, transform, tensor, trf, Type, tf + Type, rtf, =, transform, symmTensor, trf, Type, tf ) } } diff --git a/src/OpenFOAM/fields/cloud/cloud.H b/src/OpenFOAM/fields/cloud/cloud.H index 0c0915464edfb6f92a00958fb473f0d9c7620e00..d48e5dffbb579ead329d8a069a951f3dfc6ac438 100644 --- a/src/OpenFOAM/fields/cloud/cloud.H +++ b/src/OpenFOAM/fields/cloud/cloud.H @@ -75,15 +75,15 @@ public: //- The default cloud name: %defaultCloud static word defaultName; + // Constructors //- Construct for the given objectRegistry and named cloud instance cloud(const objectRegistry&, const word& cloudName = ""); - // Destructor - - virtual ~cloud(); + //- Destructor + virtual ~cloud(); // Member Functions diff --git a/src/OpenFOAM/global/argList/argList.C b/src/OpenFOAM/global/argList/argList.C index 4a45b56f4516358e835530e8d81ae4c60ac22f6f..707d68b88f49a87f9a378c73228b2d8d9b429513 100644 --- a/src/OpenFOAM/global/argList/argList.C +++ b/src/OpenFOAM/global/argList/argList.C @@ -298,6 +298,7 @@ Foam::argList::argList jobInfo.add("startTime", timeString); jobInfo.add("userName", userName()); jobInfo.add("foamVersion", word(FOAMversion)); + jobInfo.add("foamBuild", Foam::FOAMbuild); jobInfo.add("code", executable_); jobInfo.add("argList", argListString); jobInfo.add("currentDir", cwd()); @@ -526,10 +527,10 @@ Foam::argList::argList // Switch on signal trapping. We have to wait until after Pstream::init // since this sets up its own ones. - sigFpe_.set(); - sigInt_.set(); - sigQuit_.set(); - sigSegv_.set(); + sigFpe_.set(bannerEnabled); + sigInt_.set(bannerEnabled); + sigQuit_.set(bannerEnabled); + sigSegv_.set(bannerEnabled); if (Pstream::master() && bannerEnabled) { diff --git a/src/OpenFOAM/include/CintDefs.H b/src/OpenFOAM/include/CintDefs.H deleted file mode 100644 index 90e1f62a2f1a2cd098a4b8ecac448273cbae4635..0000000000000000000000000000000000000000 --- a/src/OpenFOAM/include/CintDefs.H +++ /dev/null @@ -1,6 +0,0 @@ -#ifdef __CINT__ -# define tmp Foam::tmp -# define UList Foam::UList -# define List Foam::List -# define InfoProxy Foam::InfoProxy -#endif diff --git a/src/OpenFOAM/include/CintUndefs.H b/src/OpenFOAM/include/CintUndefs.H deleted file mode 100644 index 6b0b69e99ceba4cca1744c51d733c6b685329344..0000000000000000000000000000000000000000 --- a/src/OpenFOAM/include/CintUndefs.H +++ /dev/null @@ -1,6 +0,0 @@ -#ifdef __CINT__ -# undef tmp -# undef UList -# undef List -# undef InfoProxy -#endif diff --git a/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixATmul.C b/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixATmul.C index 05958edf68ad060e63c51e8f078656fbbb82a5e6..cb376fde10c28ba807da0541cac76140a3043e8e 100644 --- a/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixATmul.C +++ b/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixATmul.C @@ -67,38 +67,15 @@ void Foam::lduMatrix::Amul register const label nCells = diag().size(); for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&psiPtr[cell+96],0,1); - __builtin_prefetch (&diagPtr[cell+96],0,1); - __builtin_prefetch (&ApsiPtr[cell+96],1,1); - #endif - ApsiPtr[cell] = diagPtr[cell]*psiPtr[cell]; } register const label nFaces = upper().size(); - #ifdef ICC_IA64_PREFETCH - #pragma swp - #endif + for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+32],0,0); - __builtin_prefetch (&lPtr[face+32],0,0); - __builtin_prefetch (&lowerPtr[face+32],0,1); - __builtin_prefetch (&psiPtr[lPtr[face+32]],0,1); - __builtin_prefetch (&ApsiPtr[uPtr[face+32]],0,1); - #endif - ApsiPtr[uPtr[face]] += lowerPtr[face]*psiPtr[lPtr[face]]; - - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&upperPtr[face+32],0,1); - __builtin_prefetch (&psiPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&ApsiPtr[lPtr[face+32]],0,1); - #endif - ApsiPtr[lPtr[face]] += upperPtr[face]*psiPtr[uPtr[face]]; } @@ -151,34 +128,13 @@ void Foam::lduMatrix::Tmul register const label nCells = diag().size(); for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&psiPtr[cell+96],0,1); - __builtin_prefetch (&diagPtr[cell+96],0,1); - __builtin_prefetch (&TpsiPtr[cell+96],1,1); - #endif - TpsiPtr[cell] = diagPtr[cell]*psiPtr[cell]; } register const label nFaces = upper().size(); for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+32],0,0); - __builtin_prefetch (&lPtr[face+32],0,0); - __builtin_prefetch (&upperPtr[face+32],0,1); - __builtin_prefetch (&psiPtr[lPtr[face+32]],0,1); - __builtin_prefetch (&TpsiPtr[uPtr[face+32]],0,1); - #endif - TpsiPtr[uPtr[face]] += upperPtr[face]*psiPtr[lPtr[face]]; - - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&lowerPtr[face+32],0,1); - __builtin_prefetch (&psiPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&TpsiPtr[lPtr[face+32]],0,1); - #endif - TpsiPtr[lPtr[face]] += lowerPtr[face]*psiPtr[uPtr[face]]; } @@ -218,34 +174,12 @@ void Foam::lduMatrix::sumA for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&diagPtr[cell+96],0,1); - __builtin_prefetch (&sumAPtr[cell+96],1,1); - #endif - sumAPtr[cell] = diagPtr[cell]; } - #ifdef ICC_IA64_PREFETCH - #pragma swp - #endif - for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+32],0,0); - __builtin_prefetch (&lPtr[face+32],0,0); - __builtin_prefetch (&lowerPtr[face+32],0,1); - __builtin_prefetch (&sumAPtr[uPtr[face+32]],0,1); - #endif - sumAPtr[uPtr[face]] += lowerPtr[face]; - - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&upperPtr[face+32],0,1); - __builtin_prefetch (&sumAPtr[lPtr[face+32]],0,1); - #endif - sumAPtr[lPtr[face]] += upperPtr[face]; } @@ -323,39 +257,15 @@ void Foam::lduMatrix::residual register const label nCells = diag().size(); for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&psiPtr[cell+96],0,1); - __builtin_prefetch (&diagPtr[cell+96],0,1); - __builtin_prefetch (&sourcePtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],1,1); - #endif - rAPtr[cell] = sourcePtr[cell] - diagPtr[cell]*psiPtr[cell]; } register const label nFaces = upper().size(); - #ifdef ICC_IA64_PREFETCH - #pragma swp - #endif + for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+32],0,0); - __builtin_prefetch (&lPtr[face+32],0,0); - __builtin_prefetch (&lowerPtr[face+32],0,1); - __builtin_prefetch (&psiPtr[lPtr[face+32]],0,1); - __builtin_prefetch (&rAPtr[uPtr[face+32]],0,1); - #endif - rAPtr[uPtr[face]] -= lowerPtr[face]*psiPtr[lPtr[face]]; - - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&upperPtr[face+32],0,1); - __builtin_prefetch (&psiPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&rAPtr[lPtr[face+32]],0,1); - #endif - rAPtr[lPtr[face]] -= upperPtr[face]*psiPtr[uPtr[face]]; } diff --git a/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixOperations.C b/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixOperations.C index 6766e0ec803c065050bff3149c59f5c085a76fc6..9c898f2d9ea008666028023b17147a2aaaee3892 100644 --- a/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixOperations.C +++ b/src/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixOperations.C @@ -353,20 +353,7 @@ Foam::tmp<Foam::scalarField > Foam::lduMatrix::H1() const for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+32],0,0); - __builtin_prefetch (&lPtr[face+32],0,0); - __builtin_prefetch (&lowerPtr[face+32],0,1); - __builtin_prefetch (&H1Ptr[uPtr[face+32]],0,1); - #endif - H1Ptr[uPtr[face]] -= lowerPtr[face]; - - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&upperPtr[face+32],0,1); - __builtin_prefetch (&H1Ptr[lPtr[face+32]],0,1); - #endif - H1Ptr[lPtr[face]] -= upperPtr[face]; } } diff --git a/src/OpenFOAM/matrices/lduMatrix/preconditioners/DICPreconditioner/DICPreconditioner.C b/src/OpenFOAM/matrices/lduMatrix/preconditioners/DICPreconditioner/DICPreconditioner.C index dbf5b31f2a7ec91cdcea2ff1741d994584fda43b..f6fc7ab87f1f086ddd1f8e4997b5f238d3fc4605 100644 --- a/src/OpenFOAM/matrices/lduMatrix/preconditioners/DICPreconditioner/DICPreconditioner.C +++ b/src/OpenFOAM/matrices/lduMatrix/preconditioners/DICPreconditioner/DICPreconditioner.C @@ -71,29 +71,15 @@ void Foam::DICPreconditioner::calcReciprocalD register const label nFaces = matrix.upper().size(); for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&upperPtr[face+96],0,1); - __builtin_prefetch (&rDPtr[lPtr[face+24]],0,1); - __builtin_prefetch (&rDPtr[uPtr[face+24]],1,1); - #endif - rDPtr[uPtr[face]] -= upperPtr[face]*upperPtr[face]/rDPtr[lPtr[face]]; } // Calculate the reciprocal of the preconditioned diagonal register const label nCells = rD.size(); - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif + for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&rDPtr[cell+96],0,1); - #endif - rDPtr[cell] = 1.0/rDPtr[cell]; } } @@ -120,61 +106,18 @@ void Foam::DICPreconditioner::precondition register label nFaces = solver_.matrix().upper().size(); register label nFacesM1 = nFaces - 1; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&rDPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - #endif - wAPtr[cell] = rDPtr[cell]*rAPtr[cell]; } - #ifdef ICC_IA64_PREFETCH - #pragma noprefetch uPtr,lPtr,upperPtr,rDPtr,wAPtr - #pragma nounroll - #endif - for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&upperPtr[face+96],0,0); - __builtin_prefetch (&rDPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face+32]],0,1); - #endif - wAPtr[uPtr[face]] -= rDPtr[uPtr[face]]*upperPtr[face]*wAPtr[lPtr[face]]; } - #ifdef ICC_IA64_PREFETCH - #pragma noprefetch uPtr,lPtr,rDPtr,wAPtr - #pragma nounroll - #endif - for (register label face=nFacesM1; face>=0; face--) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face-95],0,0); - __builtin_prefetch (&lPtr[face-95],0,0); - __builtin_prefetch (&rDPtr[lPtr[face-16]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-16]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-16]],0,1); - __builtin_prefetch (&rDPtr[lPtr[face-24]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-24]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-24]],0,1); - __builtin_prefetch (&rDPtr[lPtr[face-32]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-32]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-32]],0,1); - #endif - wAPtr[lPtr[face]] -= rDPtr[lPtr[face]]*upperPtr[face]*wAPtr[uPtr[face]]; } } diff --git a/src/OpenFOAM/matrices/lduMatrix/preconditioners/DILUPreconditioner/DILUPreconditioner.C b/src/OpenFOAM/matrices/lduMatrix/preconditioners/DILUPreconditioner/DILUPreconditioner.C index 5193acb5eb192f21b0f78f848ead3846fa6a2e3f..4fdebcd9c58a6c68402645a8e413577e9ad10c86 100644 --- a/src/OpenFOAM/matrices/lduMatrix/preconditioners/DILUPreconditioner/DILUPreconditioner.C +++ b/src/OpenFOAM/matrices/lduMatrix/preconditioners/DILUPreconditioner/DILUPreconditioner.C @@ -72,30 +72,15 @@ void Foam::DILUPreconditioner::calcReciprocalD register label nFaces = matrix.upper().size(); for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&upperPtr[face+96],0,1); - __builtin_prefetch (&lowerPtr[face+96],0,1); - __builtin_prefetch (&rDPtr[lPtr[face+24]],0,1); - __builtin_prefetch (&rDPtr[uPtr[face+24]],1,1); - #endif - rDPtr[uPtr[face]] -= upperPtr[face]*lowerPtr[face]/rDPtr[lPtr[face]]; } // Calculate the reciprocal of the preconditioned diagonal register label nCells = rD.size(); - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif + for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&rDPtr[cell+96],0,1); - #endif - rDPtr[cell] = 1.0/rDPtr[cell]; } } @@ -128,26 +113,14 @@ void Foam::DILUPreconditioner::precondition register label nFaces = solver_.matrix().upper().size(); register label nFacesM1 = nFaces - 1; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&rDPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - #endif - wAPtr[cell] = rDPtr[cell]*rAPtr[cell]; } register label sface; - #ifdef ICC_IA64_PREFETCH - #pragma nounroll - #endif + for (register label face=0; face<nFaces; face++) { sface = losortPtr[face]; @@ -155,28 +128,8 @@ void Foam::DILUPreconditioner::precondition rDPtr[uPtr[sface]]*lowerPtr[sface]*wAPtr[lPtr[sface]]; } - #ifdef ICC_IA64_PREFETCH - #pragma noprefetch uPtr,lPtr,rDPtr,wAPtr - #pragma nounroll - #endif - for (register label face=nFacesM1; face>=0; face--) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face-95],0,0); - __builtin_prefetch (&lPtr[face-95],0,0); - __builtin_prefetch (&upperPtr[face-95],0,1); - __builtin_prefetch (&rDPtr[lPtr[face-16]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-16]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-16]],0,1); - __builtin_prefetch (&rDPtr[lPtr[face-24]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-24]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-24]],0,1); - __builtin_prefetch (&rDPtr[lPtr[face-32]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-32]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-32]],0,1); - #endif - wAPtr[lPtr[face]] -= rDPtr[lPtr[face]]*upperPtr[face]*wAPtr[uPtr[face]]; } @@ -210,46 +163,20 @@ void Foam::DILUPreconditioner::preconditionT register label nFaces = solver_.matrix().upper().size(); register label nFacesM1 = nFaces - 1; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&wTPtr[cell+96],0,1); - __builtin_prefetch (&rDPtr[cell+96],0,1); - __builtin_prefetch (&rTPtr[cell+96],0,1); - #endif - wTPtr[cell] = rDPtr[cell]*rTPtr[cell]; } - #ifdef ICC_IA64_PREFETCH - #pragma noprefetch uPtr,lPtr,upperPtr,rDPtr,wTPtr - #pragma nounroll - #endif - for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&upperPtr[face+96],0,1); - __builtin_prefetch (&rDPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&wTPtr[lPtr[face+32]],0,1); - __builtin_prefetch (&wTPtr[uPtr[face+32]],0,1); - #endif - wTPtr[uPtr[face]] -= rDPtr[uPtr[face]]*upperPtr[face]*wTPtr[lPtr[face]]; } register label sface; - #ifdef ICC_IA64_PREFETCH - #pragma nounroll - #endif + for (register label face=nFacesM1; face>=0; face--) { sface = losortPtr[face]; diff --git a/src/OpenFOAM/matrices/lduMatrix/preconditioners/FDICPreconditioner/FDICPreconditioner.C b/src/OpenFOAM/matrices/lduMatrix/preconditioners/FDICPreconditioner/FDICPreconditioner.C index 9b17ef902d1cd7cd31ac6637bc70470112253361..db4a51c4b7f6a204b75545b0eb1ab6c845513396 100644 --- a/src/OpenFOAM/matrices/lduMatrix/preconditioners/FDICPreconditioner/FDICPreconditioner.C +++ b/src/OpenFOAM/matrices/lduMatrix/preconditioners/FDICPreconditioner/FDICPreconditioner.C @@ -66,47 +66,17 @@ Foam::FDICPreconditioner::FDICPreconditioner for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&upperPtr[face+96],0,1); - __builtin_prefetch (&rDPtr[lPtr[face+24]],0,1); - __builtin_prefetch (&rDPtr[uPtr[face+24]],1,1); - #endif - rDPtr[uPtr[face]] -= sqr(upperPtr[face])/rDPtr[lPtr[face]]; } - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - // Generate reciprocal FDIC for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&rDPtr[cell+96],0,1); - #endif - rDPtr[cell] = 1.0/rDPtr[cell]; } - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&upperPtr[face+96],0,0); - __builtin_prefetch (&rDuUpperPtr[face+96],0,0); - __builtin_prefetch (&rDlUpperPtr[face+96],0,0); - __builtin_prefetch (&rDPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&rDPtr[lPtr[face+32]],0,1); - #endif - rDuUpperPtr[face] = rDPtr[uPtr[face]]*upperPtr[face]; rDlUpperPtr[face] = rDPtr[lPtr[face]]*upperPtr[face]; } @@ -138,58 +108,18 @@ void Foam::FDICPreconditioner::precondition register label nFaces = solver_.matrix().upper().size(); register label nFacesM1 = nFaces - 1; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&rDPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - #endif - wAPtr[cell] = rDPtr[cell]*rAPtr[cell]; } - #ifdef ICC_IA64_PREFETCH - #pragma noprefetch uPtr,lPtr,rDuUpperPtr,wAPtr - #pragma nounroll - #endif - for (register label face=0; face<nFaces; face++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face+96],0,0); - __builtin_prefetch (&lPtr[face+96],0,0); - __builtin_prefetch (&rDuUpperPtr[face+96],0,0); - __builtin_prefetch (&wAPtr[uPtr[face+32]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face+32]],0,1); - #endif - wAPtr[uPtr[face]] -= rDuUpperPtr[face]*wAPtr[lPtr[face]]; } - #ifdef ICC_IA64_PREFETCH - #pragma noprefetch uPtr,lPtr,rDlUpperPtr,wAPtr - #pragma nounroll - #endif - for (register label face=nFacesM1; face>=0; face--) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&uPtr[face-95],0,0); - __builtin_prefetch (&lPtr[face-95],0,0); - __builtin_prefetch (&rDlUpperPtr[face-95],0,0); - __builtin_prefetch (&wAPtr[lPtr[face-16]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-16]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-24]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-24]],0,1); - __builtin_prefetch (&wAPtr[lPtr[face-32]],0,1); - __builtin_prefetch (&wAPtr[uPtr[face-32]],0,1); - #endif - wAPtr[lPtr[face]] -= rDlUpperPtr[face]*wAPtr[uPtr[face]]; } } diff --git a/src/OpenFOAM/matrices/lduMatrix/preconditioners/diagonalPreconditioner/diagonalPreconditioner.C b/src/OpenFOAM/matrices/lduMatrix/preconditioners/diagonalPreconditioner/diagonalPreconditioner.C index e5a32fa1689220f3e558e1e866cc8184c1b65b1e..04ccc2add03118dc662013e3925be372cff2b97a 100644 --- a/src/OpenFOAM/matrices/lduMatrix/preconditioners/diagonalPreconditioner/diagonalPreconditioner.C +++ b/src/OpenFOAM/matrices/lduMatrix/preconditioners/diagonalPreconditioner/diagonalPreconditioner.C @@ -58,18 +58,9 @@ Foam::diagonalPreconditioner::diagonalPreconditioner register label nCells = rD.size(); - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - // Generate reciprocal diagonal for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&rDPtr[cell+96],0,1); - __builtin_prefetch (&DPtr[cell+96],0,1); - #endif - rDPtr[cell] = 1.0/DPtr[cell]; } } @@ -90,18 +81,8 @@ void Foam::diagonalPreconditioner::precondition register label nCells = wA.size(); - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&rDPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - #endif - wAPtr[cell] = rDPtr[cell]*rAPtr[cell]; } } diff --git a/src/OpenFOAM/matrices/lduMatrix/preconditioners/noPreconditioner/noPreconditioner.C b/src/OpenFOAM/matrices/lduMatrix/preconditioners/noPreconditioner/noPreconditioner.C index d1df531040c6fceea43d259a4a9e3553cc7b25fe..54302bea66223a2d4cfa7bb014bec2fb431e80cb 100644 --- a/src/OpenFOAM/matrices/lduMatrix/preconditioners/noPreconditioner/noPreconditioner.C +++ b/src/OpenFOAM/matrices/lduMatrix/preconditioners/noPreconditioner/noPreconditioner.C @@ -68,17 +68,8 @@ void Foam::noPreconditioner::precondition register label nCells = wA.size(); - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - #endif - wAPtr[cell] = rAPtr[cell]; } } diff --git a/src/OpenFOAM/matrices/lduMatrix/smoothers/GaussSeidel/GaussSeidelSmoother.C b/src/OpenFOAM/matrices/lduMatrix/smoothers/GaussSeidel/GaussSeidelSmoother.C index ff206e2e5fcbc31eb2184c600dd7b84c74dd8cfc..4c04d67b361d32368ad29a8b90df7d58e88cd6f2 100644 --- a/src/OpenFOAM/matrices/lduMatrix/smoothers/GaussSeidel/GaussSeidelSmoother.C +++ b/src/OpenFOAM/matrices/lduMatrix/smoothers/GaussSeidel/GaussSeidelSmoother.C @@ -146,19 +146,6 @@ void Foam::GaussSeidelSmoother::smooth for (register label cellI=0; cellI<nCells; cellI++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&psiPtr[cellI+64],0,1); - __builtin_prefetch (&bPrimePtr[cellI+64],0,1); - __builtin_prefetch (&ownStartPtr[cellI+64],0,1); - __builtin_prefetch (&diagPtr[cellI+64],0,1); - __builtin_prefetch (&uPtr[ownStartPtr[cellI+24]],0,1); - __builtin_prefetch (&uPtr[ownStartPtr[cellI+25]],0,1); - __builtin_prefetch (&uPtr[ownStartPtr[cellI+26]],0,1); - __builtin_prefetch (&uPtr[ownStartPtr[cellI+27]],0,1); - __builtin_prefetch (&upperPtr[ownStartPtr[cellI+24]],0,1); - __builtin_prefetch (&lowerPtr[ownStartPtr[cellI+24]],0,1); - #endif - // Start and end of this row fStart = fEnd; fEnd = ownStartPtr[cellI + 1]; diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCG/PBiCG.C b/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCG/PBiCG.C index 0a5f1036749844421ecb7e7518aeadfb056e04a9..c514276c84e9d5341d8d5bb99d241600303393a8 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCG/PBiCG.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/PBiCG/PBiCG.C @@ -144,19 +144,8 @@ Foam::lduMatrix::solverPerformance Foam::PBiCG::solve if (solverPerf.nIterations() == 0) { - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&pAPtr[cell+96],0,1); - __builtin_prefetch (&pTPtr[cell+96],0,1); - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&wTPtr[cell+96],0,1); - #endif - pAPtr[cell] = wAPtr[cell]; pTPtr[cell] = wTPtr[cell]; } @@ -165,19 +154,8 @@ Foam::lduMatrix::solverPerformance Foam::PBiCG::solve { scalar beta = wArT/wArTold; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&pAPtr[cell+96],0,1); - __builtin_prefetch (&pTPtr[cell+96],0,1); - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&wTPtr[cell+96],0,1); - #endif - pAPtr[cell] = wAPtr[cell] + beta*pAPtr[cell]; pTPtr[cell] = wTPtr[cell] + beta*pTPtr[cell]; } @@ -199,21 +177,8 @@ Foam::lduMatrix::solverPerformance Foam::PBiCG::solve scalar alpha = wArT/wApT; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&pAPtr[cell+96],0,1); - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&wTPtr[cell+96],0,1); - __builtin_prefetch (&psiPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - __builtin_prefetch (&rTPtr[cell+96],0,1); - #endif - psiPtr[cell] += alpha*pAPtr[cell]; rAPtr[cell] -= alpha*wAPtr[cell]; rTPtr[cell] -= alpha*wTPtr[cell]; diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/PCG/PCG.C b/src/OpenFOAM/matrices/lduMatrix/solvers/PCG/PCG.C index 03b9419db20c7f266bbb1ddb2565380952c4f201..ea7581903cc5fd8c8b24ff29b67607dde9f1e66b 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/PCG/PCG.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/PCG/PCG.C @@ -134,17 +134,8 @@ Foam::lduMatrix::solverPerformance Foam::PCG::solve if (solverPerf.nIterations() == 0) { - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&pAPtr[cell+96],0,1); - __builtin_prefetch (&wAPtr[cell+96],0,1); - #endif - pAPtr[cell] = wAPtr[cell]; } } @@ -152,17 +143,8 @@ Foam::lduMatrix::solverPerformance Foam::PCG::solve { scalar beta = wArA/wArAold; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&pAPtr[cell+96],0,1); - __builtin_prefetch (&wAPtr[cell+96],0,1); - #endif - pAPtr[cell] = wAPtr[cell] + beta*pAPtr[cell]; } } @@ -182,19 +164,8 @@ Foam::lduMatrix::solverPerformance Foam::PCG::solve scalar alpha = wArA/wApA; - #ifdef ICC_IA64_PREFETCH - #pragma ivdep - #endif - for (register label cell=0; cell<nCells; cell++) { - #ifdef ICC_IA64_PREFETCH - __builtin_prefetch (&pAPtr[cell+96],0,1); - __builtin_prefetch (&wAPtr[cell+96],0,1); - __builtin_prefetch (&psiPtr[cell+96],0,1); - __builtin_prefetch (&rAPtr[cell+96],0,1); - #endif - psiPtr[cell] += alpha*pAPtr[cell]; rAPtr[cell] -= alpha*wAPtr[cell]; } diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.C b/src/OpenFOAM/meshes/MeshObject/MeshObject.C index 68f05c2f82b58136ab9ac14c8865287369cec943..8b7947525a67d3bada4e8cc56aebbd97260ca900 100644 --- a/src/OpenFOAM/meshes/MeshObject/MeshObject.C +++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.C @@ -137,7 +137,7 @@ const Type& Foam::MeshObject<Mesh, Type>::New { if (!mesh.thisDb().objectRegistry::foundObject<Type>(Type::typeName)) { - return store(new Type(mesh, d3, d4)); + return store(new Type(mesh, d1, d2, d3, d4)); } else { diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H index 5f7ed0a2b269f283af2a0c5f9f1d624c2bb83d97..e394f679d042dd0c425f6fa7a869ebafeb5f2a4a 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H @@ -81,27 +81,49 @@ public: // Member Functions - //- Start of procI+1 data - inline const labelList& offsets() const; + ////- Start of procI+1 data + //inline const labelList& offsets() const; - //- Global sum of localSizes - inline label size() const; - //- From local to global - inline label toGlobal(const label i) const; + // Queries relating to my processor - //- Is on local processor - inline bool isLocal(const label i) const; + //- my local size + inline label localSize() const; - //- From global to local on procI - inline label toLocal(const label procI, const label i) const; + //- From local to global + inline label toGlobal(const label i) const; - //- From global to local on current processor. - // FatalError if not on local processor. - inline label toLocal(const label i) const; + //- Is on local processor + inline bool isLocal(const label i) const; + + //- From global to local on current processor. + // FatalError if not on local processor. + inline label toLocal(const label i) const; + + + // Global queries + + //- Global sum of localSizes + inline label size() const; + + //- Size of procI data + inline label localSize(const label procI) const; + + //- From local to global on procI + inline label toGlobal(const label procI, const label i) const; + + //- Is on processor procI + inline bool isLocal(const label procI, const label i) const; + + //- From global to local on procI + inline label toLocal(const label procI, const label i) const; + + //- Which processor does global come from? Binary search. + inline label whichProcID(const label i) const; + + //- Start of procI data + inline label offset(const label procI) const; - //- Which processor does global come from? - inline label whichProcID(const label i) const; // IOstream Operators diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H index b01ed6e8ba8240ffd7903f721c4102663baeb5dc..d7c44107c665e29d0fd38900b2767e116b5e1b57 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H @@ -28,9 +28,32 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -inline const Foam::labelList& Foam::globalIndex::offsets() const +//inline const Foam::labelList& Foam::globalIndex::offsets() const +//{ +// return offsets_; +//} + + +inline Foam::label Foam::globalIndex::offset(const label procI) const +{ + return (procI == 0 ? 0 : offsets_[procI-1]); +} + + +inline Foam::label Foam::globalIndex::localSize(const label procI) const +{ + return + ( + procI == 0 + ? offsets_[procI] + : offsets_[procI] - offsets_[procI-1] + ); +} + + +inline Foam::label Foam::globalIndex::localSize() const { - return offsets_; + return localSize(Pstream::myProcNo()); } @@ -40,27 +63,39 @@ inline Foam::label Foam::globalIndex::size() const } +inline Foam::label Foam::globalIndex::toGlobal +( + const label procI, + const label i +) const +{ + return(procI == 0 ? i : i + offsets_[procI-1]); +} + + inline Foam::label Foam::globalIndex::toGlobal(const label i) const { - return - ( - Pstream::myProcNo() == 0 - ? i - : i + offsets_[Pstream::myProcNo()-1] - ); + return toGlobal(Pstream::myProcNo(), i); } + //- Is on local processor -inline bool Foam::globalIndex::isLocal(const label i) const +inline bool Foam::globalIndex::isLocal(const label procI, const label i) const { return - (i < offsets_[Pstream::myProcNo()]) - && (i >= (Pstream::myProcNo() == 0 ? 0 : offsets_[Pstream::myProcNo()-1])); + (i < offsets_[procI]) + && (i >= (procI == 0 ? 0 : offsets_[procI-1])); +} + + +inline bool Foam::globalIndex::isLocal(const label i) const +{ + return isLocal(Pstream::myProcNo(), i); } inline Foam::label Foam::globalIndex::toLocal(const label procI, const label i) - const +const { label localI = (procI == 0 ? i : i - offsets_[procI-1]); diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C index 4bd093e6412905bda8b5402d828fbdd362777ab0..cc4278e22180486f75e545660af5b85ff5dd2ce8 100644 --- a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.C @@ -273,6 +273,15 @@ Foam::mapDistribute::mapDistribute } +Foam::mapDistribute::mapDistribute(const mapDistribute& map) +: + constructSize_(map.constructSize_), + subMap_(map.subMap_), + constructMap_(map.constructMap_), + schedulePtr_() +{} + + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::mapDistribute::compact(const boolList& elemIsUsed) @@ -413,4 +422,24 @@ void Foam::mapDistribute::compact(const boolList& elemIsUsed) } +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +void Foam::mapDistribute::operator=(const mapDistribute& rhs) +{ + // Check for assignment to self + if (this == &rhs) + { + FatalErrorIn + ( + "Foam::mapDistribute::operator=(const Foam::mapDistribute&)" + ) << "Attempted assignment to self" + << abort(FatalError); + } + constructSize_ = rhs.constructSize_; + subMap_ = rhs.subMap_; + constructMap_ = rhs.constructMap_; + schedulePtr_.clear(); +} + + // ************************************************************************* // diff --git a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H index 3ccf81047697164d8cb2e7ed2a004a9feb8157f5..d2cfe64ca53c0dde02c3d424d5236b415728151d 100644 --- a/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H +++ b/src/OpenFOAM/meshes/polyMesh/mapPolyMesh/mapDistribute/mapDistribute.H @@ -81,16 +81,6 @@ class mapDistribute mutable autoPtr<List<labelPair> > schedulePtr_; - // Private Member Functions - - //- Disallow default bitwise copy construct - mapDistribute(const mapDistribute&); - - //- Disallow default bitwise assignment - void operator=(const mapDistribute&); - - - public: // Constructors @@ -120,6 +110,9 @@ public: const labelList& recvProcs ); + //- Construct copy + mapDistribute(const mapDistribute&); + // Member Functions @@ -262,6 +255,11 @@ public: "mapDistribute::updateMesh(const mapPolyMesh&)" ); } + + // Member Operators + + void operator=(const mapDistribute&); + }; diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H index 690fb1083b4a4fce2f27c84df711fe8e5d33ea10..de1d9cc9f98c4fe60502606c3842c1057e7c8c9c 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H @@ -32,7 +32,6 @@ Description SourceFiles coupledPolyPatch.C - coupledPolyPatchMorph.C \*---------------------------------------------------------------------------*/ diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C index 5b688c64000f37ec36d79c6016e5d0abc0ae9a4d..d4cc0a284360f45bab1dd8ff9f995dfce256e606 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C @@ -34,6 +34,7 @@ Description #include "primitiveMesh.H" #include "demandDrivenData.H" #include "mapPolyMesh.H" +#include "syncTools.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -530,6 +531,87 @@ bool Foam::faceZone::checkDefinition(const bool report) const } +bool Foam::faceZone::checkParallelSync(const bool report) const +{ + const polyMesh& mesh = zoneMesh().mesh(); + const polyBoundaryMesh& bm = mesh.boundaryMesh(); + + bool boundaryError = false; + + + // Check that zone faces are synced + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + { + boolList neiZoneFace(mesh.nFaces()-mesh.nInternalFaces(), false); + boolList neiZoneFlip(mesh.nFaces()-mesh.nInternalFaces(), false); + forAll(*this, i) + { + label faceI = operator[](i); + + if (!mesh.isInternalFace(faceI)) + { + neiZoneFace[faceI-mesh.nInternalFaces()] = true; + neiZoneFlip[faceI-mesh.nInternalFaces()] = flipMap()[i]; + } + } + boolList myZoneFace(neiZoneFace); + syncTools::swapBoundaryFaceList(mesh, neiZoneFace, false); + boolList myZoneFlip(neiZoneFlip); + syncTools::swapBoundaryFaceList(mesh, neiZoneFlip, false); + + forAll(*this, i) + { + label faceI = operator[](i); + + label patchI = bm.whichPatch(faceI); + + if (patchI != -1 && bm[patchI].coupled()) + { + label bFaceI = faceI-mesh.nInternalFaces(); + + // Check face in zone on both sides + if (myZoneFace[bFaceI] != neiZoneFace[bFaceI]) + { + boundaryError = true; + + if (report) + { + Pout<< " ***Problem with faceZone " << index() + << " named " << name() + << ". Face " << faceI + << " on coupled patch " + << bm[patchI].name() + << " is not consistent with its coupled neighbour." + << endl; + } + } + + // Flip state should be opposite. + if (myZoneFlip[bFaceI] == neiZoneFlip[bFaceI]) + { + boundaryError = true; + + if (report) + { + Pout<< " ***Problem with faceZone " << index() + << " named " << name() + << ". Face " << faceI + << " on coupled patch " + << bm[patchI].name() + << " does not have consistent flipMap" + << " across coupled faces." + << endl; + } + } + } + } + } + + return returnReduce(boundaryError, orOp<bool>()); +} + + void Foam::faceZone::movePoints(const pointField& p) { if (patchPtr_) diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H index f96c1dc189fb884bbe8e1d9ba34136dbb8e30003..16c7e82b09c0ad272d99d1f9d60ecd552afcf3f9 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H @@ -302,6 +302,10 @@ public: //- Check zone definition. Return true if in error. bool checkDefinition(const bool report = false) const; + //- Check whether all procs have faces synchronised. Return + // true if in error. + bool checkParallelSync(const bool report = false) const; + //- Correct patch after moving points virtual void movePoints(const pointField&); diff --git a/src/OpenFOAM/meshes/primitiveShapes/line/line.H b/src/OpenFOAM/meshes/primitiveShapes/line/line.H index 8af00d5bf9a70f1f2d081f00f288fac019d7abf6..e9f7c0296f81327d41a868ebe73eed644150b83b 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/line/line.H +++ b/src/OpenFOAM/meshes/primitiveShapes/line/line.H @@ -124,19 +124,13 @@ public: // Ostream operator - friend Istream& operator>> - #ifndef __CINT__ - <Point, PointRef> - #endif + friend Istream& operator>> <Point, PointRef> ( Istream&, line& ); - friend Ostream& operator<< - #ifndef __CINT__ - <Point, PointRef> - #endif + friend Ostream& operator<< <Point, PointRef> ( Ostream&, const line& diff --git a/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointHit.H b/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointHit.H index 8ae9afc7f24b19abddca4140c4059619634872a6..375978a0b22e293cac8c772ecfc4a08880a8a8d1 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointHit.H +++ b/src/OpenFOAM/meshes/primitiveShapes/objectHit/PointHit.H @@ -184,10 +184,7 @@ public: // Ostream operator - friend Ostream& operator<< - #ifndef __CINT__ - <Point> - #endif + friend Ostream& operator<< <Point> ( Ostream& os, const PointHit<Point>& b @@ -202,7 +199,7 @@ inline Ostream& operator<<(Ostream& os, const PointHit<Point>& b) << b.rawPoint() << token::SPACE << b.distance() << token::SPACE << b.eligibleMiss(); - + return os; } diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H index 33b3cab15e67775129d8997818a299add2d687f9..e43d4b9d2948219c3c4f11d2b1eb653200609992 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H @@ -607,6 +607,18 @@ inline bool triangle<Point, PointRef>::classify // system E0, E1 // + //Pout<< "alpha:" << alpha << endl; + //Pout<< "beta:" << beta << endl; + //Pout<< "hit:" << hit << endl; + //Pout<< "tol:" << tol << endl; + + if (hit) + { + // alpha,beta might get negative due to precision errors + alpha = max(0.0, min(1.0, alpha)); + beta = max(0.0, min(1.0, beta)); + } + nearType = NONE; nearLabel = -1; diff --git a/src/thermophysicalModels/solids/Cs/Cs.C b/src/OpenFOAM/primitives/Lists/scalarIOList.C similarity index 81% rename from src/thermophysicalModels/solids/Cs/Cs.C rename to src/OpenFOAM/primitives/Lists/scalarIOList.C index 5b15f122744fdbbbbb3dbdf0cd246243d5b6ebf1..2d30cd4c25eeb989d22db756fad9496b7424e0b7 100644 --- a/src/thermophysicalModels/solids/Cs/Cs.C +++ b/src/OpenFOAM/primitives/Lists/scalarIOList.C @@ -22,24 +22,25 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +Description + Declaration of scalar IOList containers + \*---------------------------------------------------------------------------*/ -#include "Cs.H" +#include "scalarIOList.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(Cs, 0); -addToRunTimeSelectionTable(solid, Cs,); -addToRunTimeSelectionTable(solid, Cs, Istream); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam + defineTemplateTypeNameAndDebugWithName(scalarIOList, "scalarList", 0); + defineTemplateTypeNameAndDebugWithName + ( + scalarListIOList, + "scalarListList", + 0 + ); +} // ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/List/undefListLoopM.H b/src/OpenFOAM/primitives/Lists/scalarIOList.H similarity index 84% rename from src/OpenFOAM/containers/Lists/List/undefListLoopM.H rename to src/OpenFOAM/primitives/Lists/scalarIOList.H index 3c125e2376c580a43c5eceb9c906ff01f5cb40bf..5c91ea000f60061cfc289c0bc62713fcb0e7800d 100644 --- a/src/OpenFOAM/containers/Lists/List/undefListLoopM.H +++ b/src/OpenFOAM/primitives/Lists/scalarIOList.H @@ -22,22 +22,27 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +Typedef + Foam::scalarIOList + Description - A List\<Type\> is a 1D array of objects of type 'Type', - where the size of the array is known and used for subscript - bounds checking, etc. + Scalar container classes \*---------------------------------------------------------------------------*/ -#ifdef List_FOR_ALL +#ifndef scalarIOList_H +#define scalarIOList_H + +#include "scalarList.H" +#include "IOList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#undef List_FOR_ALL -#undef List_END_FOR_ALL -#undef List_ELEM -#undef List_ACCESS -#undef List_CONST_ACCESS +namespace Foam +{ + typedef IOList<scalar> scalarIOList; + typedef IOList<scalarList> scalarListIOList; +} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H index 0dd919d90d9194e19b2f1679d57227733128e4c1..f27612e9f08f2edc39fdb8e63af3e39871b7eb83 100644 --- a/src/OpenFOAM/primitives/Scalar/scalar/scalar.H +++ b/src/OpenFOAM/primitives/Scalar/scalar/scalar.H @@ -27,7 +27,7 @@ Typedef Description Single floating point number identical to float or double depending on - whether SP or DP is defined. + whether WM_SP or WM_DP is defined. SourceFiles scalar.C @@ -42,7 +42,7 @@ SourceFiles // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#if defined(SP) +#if defined(WM_SP) // Define scalar as a float @@ -60,7 +60,7 @@ namespace Foam scalar readScalar(Istream& is); } -#elif defined(DP) +#elif defined(WM_DP) // Define scalar as a double diff --git a/src/OpenFOAM/primitives/SphericalTensor/SphericalTensorI.H b/src/OpenFOAM/primitives/SphericalTensor/SphericalTensorI.H index 28b7b8b9d3050737cf197100c22cd3b69204025f..0459aedecf2f2f192ece94d9154031d266fcf87d 100644 --- a/src/OpenFOAM/primitives/SphericalTensor/SphericalTensorI.H +++ b/src/OpenFOAM/primitives/SphericalTensor/SphericalTensorI.H @@ -181,7 +181,7 @@ inline Cmpt det(const SphericalTensor<Cmpt>& st) template <class Cmpt> inline SphericalTensor<Cmpt> inv(const SphericalTensor<Cmpt>& st) { - return SphericalTensor<Cmpt>(1.0/st.ii()); + return SphericalTensor<Cmpt>(1.0/st.ii()); } @@ -202,7 +202,6 @@ public: }; -#ifndef __CINT__ template<class Cmpt> class innerProduct<SphericalTensor<Cmpt>, SphericalTensor<Cmpt> > { @@ -227,7 +226,6 @@ public: typedef Vector<Cmpt> type; }; -#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H index 5a2de5dbbda00df13548802a55f409fc4ffe20ec..3078f941e6ada25d9d3b29f4f70b6fe57277a0ea 100644 --- a/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H +++ b/src/OpenFOAM/primitives/SymmTensor/SymmTensorI.H @@ -520,7 +520,6 @@ public: typedef SymmTensor<Cmpt> type; }; -#ifndef __CINT__ template<class Cmpt> class innerProduct<SymmTensor<Cmpt>, SymmTensor<Cmpt> > { @@ -529,7 +528,6 @@ public: typedef SymmTensor<Cmpt> type; }; - template<class Cmpt> class innerProduct<SymmTensor<Cmpt>, Vector<Cmpt> > { @@ -578,7 +576,7 @@ public: typedef SymmTensor<Cmpt> type; }; -#endif + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/Tensor/TensorI.H b/src/OpenFOAM/primitives/Tensor/TensorI.H index 7ca9958aa1800237f79a2d7766d62680732c28e6..71e7c0c76732a91728311840f2a0233d811bf80a 100644 --- a/src/OpenFOAM/primitives/Tensor/TensorI.H +++ b/src/OpenFOAM/primitives/Tensor/TensorI.H @@ -647,7 +647,6 @@ operator&&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2) return(t1.xx()*st2.ii() + t1.yy()*st2.ii() + t1.zz()*st2.ii()); } -#ifndef __CINT__ template<class Cmpt> class typeOfSum<SphericalTensor<Cmpt>, Tensor<Cmpt> > { @@ -679,7 +678,7 @@ public: typedef Tensor<Cmpt> type; }; -#endif + // * * * * * * * * * * Mixed Tensor SymmTensor Operators * * * * * * * * * * // @@ -806,7 +805,6 @@ operator&&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2) ); } -#ifndef __CINT__ template<class Cmpt> class typeOfSum<SymmTensor<Cmpt>, Tensor<Cmpt> > { @@ -839,7 +837,6 @@ public: typedef Tensor<Cmpt> type; }; -#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/Tuple2/Tuple2.H b/src/OpenFOAM/primitives/Tuple2/Tuple2.H index 9a850e623666a1813acb77609206a0246355a19a..cac459587279012ae41af4cea6a53c9ddedb1c3b 100644 --- a/src/OpenFOAM/primitives/Tuple2/Tuple2.H +++ b/src/OpenFOAM/primitives/Tuple2/Tuple2.H @@ -139,19 +139,13 @@ public: // Friend Operators - friend bool operator== - #ifndef __CINT__ - <Type1, Type2> - #endif + friend bool operator== <Type1, Type2> ( const Tuple2<Type1, Type2>& a, const Tuple2<Type1, Type2>& b ); - friend bool operator!= - #ifndef __CINT__ - <Type1, Type2> - #endif + friend bool operator!= <Type1, Type2> ( const Tuple2<Type1, Type2>& a, const Tuple2<Type1, Type2>& b @@ -161,20 +155,14 @@ public: // IOstream operators //- Read Tuple2 from Istream, discarding contents of existing Tuple2. - friend Istream& operator>> - #ifndef __CINT__ - <Type1, Type2> - #endif + friend Istream& operator>> <Type1, Type2> ( Istream& is, Tuple2<Type1, Type2>& t2 ); // Write Tuple2 to Ostream. - friend Ostream& operator<< - #ifndef __CINT__ - <Type1, Type2> - #endif + friend Ostream& operator<< <Type1, Type2> ( Ostream& os, const Tuple2<Type1, Type2>& t2 diff --git a/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H b/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H index dda9bd280428ed77f170f21c0b244653b5aea170..31e5b84f4aab19d6e507dcddf174501325937898 100644 --- a/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H +++ b/src/OpenFOAM/primitives/VectorSpace/VectorSpace.H @@ -136,19 +136,13 @@ public: // IOstream Operators - friend Istream& operator>> - #ifndef __CINT__ - <Form, Cmpt, nCmpt> - #endif + friend Istream& operator>> <Form, Cmpt, nCmpt> ( Istream&, VectorSpace<Form, Cmpt, nCmpt>& ); - friend Ostream& operator<< - #ifndef __CINT__ - <Form, Cmpt, nCmpt> - #endif + friend Ostream& operator<< <Form, Cmpt, nCmpt> ( Ostream&, const VectorSpace<Form, Cmpt, nCmpt>& diff --git a/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H b/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H index f368c6b8aef52b1023f3ea64afdbaba3cba7a955..eeea5f6bffe8fb4488e72f626beae526725adf02 100644 --- a/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H +++ b/src/OpenFOAM/primitives/VectorSpace/VectorSpaceI.H @@ -263,7 +263,6 @@ inline const Cmpt& component // Powers of a Form // Equivalent to outer-products between the Form and itself -#ifndef __CINT__ // Form^0 = 1.0 template<class Form, class Cmpt, int nCmpt> inline typename powProduct<Form, 0>::type pow @@ -300,7 +299,7 @@ inline typename powProduct<Form, 2>::type pow { return sqr(static_cast<const Form&>(v)); } -#endif + template<class Form, class Cmpt, int nCmpt> inline scalar magSqr @@ -515,7 +514,6 @@ inline Form operator+ return v; } - template<class Form, class Cmpt, int nCmpt> inline Form operator- ( diff --git a/src/OpenFOAM/primitives/VectorSpace/products.H b/src/OpenFOAM/primitives/VectorSpace/products.H index d91790f02c1b138942d669212b7778ed8f9297e5..64647f71462c0a2c35b6932a7dfc9e359f488648 100644 --- a/src/OpenFOAM/primitives/VectorSpace/products.H +++ b/src/OpenFOAM/primitives/VectorSpace/products.H @@ -61,8 +61,6 @@ public: }; -#ifndef __CINT__ - template<class arg1, class arg2> class outerProduct { @@ -121,52 +119,6 @@ public: >::type type; }; -#else - -template<class arg1, class arg2> -class outerProduct -{ -public: - - typedef arg1 type; -}; - - -template<class arg1, class arg2> -class crossProduct -{ -public: - - typedef arg1 type; -}; - -template<class arg1, class arg2> -class innerProduct -{ -public: - - typedef arg1 type; -}; - -template<class arg1, class arg2> -class scalarProduct -{ -public: - - typedef typename pTraits<arg1>::cmptType type; -}; - - -template<class arg1, int arg2> -class powProduct -{ -public: - - typedef arg1 type; -}; - -#endif - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/primitives/functions/Polynomial/Polynomial.C b/src/OpenFOAM/primitives/functions/Polynomial/Polynomial.C new file mode 100644 index 0000000000000000000000000000000000000000..8f3381ea45a634a60de6614e33b6f9eadd13f709 --- /dev/null +++ b/src/OpenFOAM/primitives/functions/Polynomial/Polynomial.C @@ -0,0 +1,196 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "Polynomial.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<int PolySize> +Foam::Polynomial<PolySize>::Polynomial() +: + VectorSpace<Polynomial<PolySize>, scalar, PolySize>(), + name_("unknownPolynomialName"), + logActive_(false), + logCoeff_(0.0) +{} + + +template<int PolySize> +Foam::Polynomial<PolySize>::Polynomial(const word& name, Istream& is) +: + VectorSpace<Polynomial<PolySize>, scalar, PolySize>(), + name_(is), + logActive_(false), + logCoeff_(0.0) +{ + if (name_ != name) + { + FatalErrorIn + ( + "Polynomial<PolySize>::Polynomial(const word&, Istream&)" + ) << "Expected polynomial name " << name << " but read " << name_ + << nl << exit(FatalError); + } + + VectorSpace<Polynomial<PolySize>, scalar, PolySize>:: + operator=(VectorSpace<Polynomial<PolySize>, scalar, PolySize>(is)); + + if (this->size() == 0) + { + FatalErrorIn + ( + "Polynomial<PolySize>::Polynomial(const word&, Istream&)" + ) << "Polynomial coefficients for entry " << name_ + << " are invalid (empty)" << nl << exit(FatalError); + } +} + + +template<int PolySize> +Foam::Polynomial<PolySize>::Polynomial +( + const word& name, + const Polynomial<PolySize>& poly +) +: + VectorSpace<Polynomial<PolySize>, scalar, PolySize>(poly), + name_(name), + logActive_(poly.logActive_), + logCoeff_(poly.logCoeff_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<int PolySize> +const Foam::word& Foam::Polynomial<PolySize>::name() const +{ + return name_; +} + + +template<int PolySize> +bool& Foam::Polynomial<PolySize>::logActive() +{ + return logActive_; +} + + +template<int PolySize> +Foam::scalar& Foam::Polynomial<PolySize>::logCoeff() +{ + return logCoeff_; +} + + +template<int PolySize> +Foam::scalar Foam::Polynomial<PolySize>::evaluate(const scalar x) const +{ + scalar y = this->v_[0]; + + for (label i=1; i<PolySize; i++) + { + y += this->v_[i]*pow(x, i); + } + + if (logActive_) + { + y += logCoeff_*log(x); + } + + return y; +} + + +template<int PolySize> +Foam::scalar Foam::Polynomial<PolySize>::integrateLimits +( + const scalar x1, + const scalar x2 +) const +{ + if (logActive_) + { + FatalErrorIn + ( + "scalar Polynomial<PolySize>::integrateLimits" + "(" + "const scalar, " + "const scalar" + ") const" + ) << "Cannot integrate polynomial with logarithmic coefficients" + << nl << abort(FatalError); + } + + intPolyType poly = this->integrate(); + + return poly.evaluate(x2) - poly.evaluate(x1); +} + + +template<int PolySize> +typename Foam::Polynomial<PolySize>::intPolyType +Foam::Polynomial<PolySize>::integrate(const scalar intConstant) +{ + intPolyType newCoeffs; + + newCoeffs[0] = intConstant; + forAll(*this, i) + { + newCoeffs[i + 1] = this->v_[i]/(i + 1); + } + + return newCoeffs; +} + + +template<int PolySize> +typename Foam::Polynomial<PolySize>::polyType +Foam::Polynomial<PolySize>::integrateMinus1(const scalar intConstant) +{ + polyType newCoeffs; + + if (this->v_[0] > VSMALL) + { + newCoeffs.logActive() = true; + newCoeffs.logCoeff() = this->v_[0]; + } + + newCoeffs[0] = intConstant; + + if (PolySize > 0) + { + for (label i=1; i<PolySize; i++) + { + newCoeffs[i] = this->v_[i]/i; + } + } + + return newCoeffs; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/functions/Polynomial/Polynomial.H b/src/OpenFOAM/primitives/functions/Polynomial/Polynomial.H new file mode 100644 index 0000000000000000000000000000000000000000..c1e2b580090235841c2f83260c04a1bf5543c72b --- /dev/null +++ b/src/OpenFOAM/primitives/functions/Polynomial/Polynomial.H @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::Polynomial + +Description + Polynomial templated on size (order): + + poly = logCoeff*log(x) + sum(coeff_[i]*x^i) + + where 0 <= i <= n + + - integer powers, starting at zero + - evaluate(x) to evaluate the poly for a given value + - integrate(x1, x2) between two scalar values + - integrate() to return a new, intergated coeff polynomial + - increases the size (order) + - integrateMinus1() to return a new, integrated coeff polynomial where + the base poly starts at order -1 + +SourceFiles + Polynomial.C + +\*---------------------------------------------------------------------------*/ + +#ifndef Polynomial_H +#define Polynomial_H + +#include "word.H" +#include "scalar.H" +#include "Ostream.H" +#include "VectorSpace.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +template<int PolySize> +class Polynomial; + +// Forward declaration of friend functions +template<int PolySize> +Ostream& operator<< +( + Ostream&, + const Polynomial<PolySize>& +); + + +/*---------------------------------------------------------------------------*\ + Class Polynomial Declaration +\*---------------------------------------------------------------------------*/ + +template<int PolySize> +class Polynomial +: + public VectorSpace<Polynomial<PolySize>, scalar, PolySize> +{ + // Private data + + //- Polynomial name + word name_; + + //- Include the log term? - only activated using integrateMinus1() + bool logActive_; + + //- Log coefficient - only activated using integrateMinus1() + scalar logCoeff_; + + +public: + + typedef Polynomial<PolySize> polyType; + + typedef Polynomial<PolySize+1> intPolyType; + + + // Constructors + + //- Construct null + Polynomial(); + + //- Construct from name and Istream + Polynomial(const word& name, Istream& is); + + //- Copy constructor with name + Polynomial(const word& name, const Polynomial& poly); + + + // Member Functions + + // Access + + //- Return const access to the polynomial name + const word& name() const; + + //- Return access to the log term active flag + bool& logActive(); + + //- Return access to the log coefficient + scalar& logCoeff(); + + + // Evaluation + + //- Return polynomial value + scalar evaluate(const scalar x) const; + + //- Return integrated polynomial coefficients + // argument becomes zeroth element (constant of integration) + intPolyType integrate(const scalar intConstant = 0.0); + + //- Return integrated polynomial coefficients when lowest order + // is -1. Argument added to zeroth element + polyType integrateMinus1(const scalar intConstant = 0.0); + + //- Integrate between two values + scalar integrateLimits(const scalar x1, const scalar x2) const; + + + //- Ostream Operator + friend Ostream& operator<< <PolySize> + ( + Ostream&, + const Polynomial& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "Polynomial.C" +# include "PolynomialIO.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/functions/Polynomial/PolynomialIO.C b/src/OpenFOAM/primitives/functions/Polynomial/PolynomialIO.C new file mode 100644 index 0000000000000000000000000000000000000000..2a0d2187aa79c1df3d7051527598263216d4c76e --- /dev/null +++ b/src/OpenFOAM/primitives/functions/Polynomial/PolynomialIO.C @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "Polynomial.H" + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<int PolySize> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const Polynomial<PolySize>& poly +) +{ + os << poly.name_ << token::SPACE + << static_cast + <VectorSpace<Polynomial<PolySize>, scalar, PolySize> >(poly); + + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const Polynomial<PolySize>&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/Pstream/mpi/Pstream.C b/src/Pstream/mpi/Pstream.C index 8011fb3b428cc45772fc36e78d94dde01f877a14..ba4629d754a67907d737386cf2def875c1d525df 100644 --- a/src/Pstream/mpi/Pstream.C +++ b/src/Pstream/mpi/Pstream.C @@ -34,9 +34,9 @@ License #include <cstdlib> #include <csignal> -#if defined(SP) +#if defined(WM_SP) # define MPI_SCALAR MPI_FLOAT -#elif defined(DP) +#elif defined(WM_DP) # define MPI_SCALAR MPI_DOUBLE #endif diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C index 5bb4a0ee2d03b8b5a24ec8bbdfb59b2a5ed2c153..3c2221f8d04f9e2289ac5d1e3029cd6cf4d09355 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C @@ -148,6 +148,7 @@ Foam::scalar Foam::autoHexMeshDriver::getMergeDistance(const scalar mergeTol) Foam::autoHexMeshDriver::autoHexMeshDriver ( fvMesh& mesh, + const bool overwrite, const dictionary& dict, const dictionary& decomposeDict ) @@ -292,6 +293,41 @@ Foam::autoHexMeshDriver::autoHexMeshDriver meshRefinement::checkCoupledFaceZones(mesh_); + // Refinement engine + // ~~~~~~~~~~~~~~~~~ + + { + Info<< nl + << "Determining initial surface intersections" << nl + << "-----------------------------------------" << nl + << endl; + + // Main refinement engine + meshRefinerPtr_.reset + ( + new meshRefinement + ( + mesh, + mergeDist_, // tolerance used in sorting coordinates + overwrite, + surfaces(), + shells() + ) + ); + Info<< "Calculated surface intersections in = " + << mesh_.time().cpuTimeIncrement() << " s" << endl; + + // Some stats + meshRefinerPtr_().printMeshInfo(debug_, "Initial mesh"); + + meshRefinerPtr_().write + ( + debug_&meshRefinement::OBJINTERSECTIONS, + mesh_.time().path()/meshRefinerPtr_().timeName() + ); + } + + // Add all the surface regions as patches // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -319,9 +355,8 @@ Foam::autoHexMeshDriver::autoHexMeshDriver forAll(regNames, i) { - label patchI = meshRefinement::addPatch + label patchI = meshRefinerPtr_().addMeshedPatch ( - mesh, regNames[i], wallPolyPatch::typeName ); @@ -404,40 +439,6 @@ Foam::autoHexMeshDriver::autoHexMeshDriver // Mesh distribution engine (uses tolerance to reconstruct meshes) distributorPtr_.reset(new fvMeshDistribute(mesh_, mergeDist_)); } - - - // Refinement engine - // ~~~~~~~~~~~~~~~~~ - - { - Info<< nl - << "Determining initial surface intersections" << nl - << "-----------------------------------------" << nl - << endl; - - // Main refinement engine - meshRefinerPtr_.reset - ( - new meshRefinement - ( - mesh, - mergeDist_, // tolerance used in sorting coordinates - surfaces(), - shells() - ) - ); - Info<< "Calculated surface intersections in = " - << mesh_.time().cpuTimeIncrement() << " s" << endl; - - // Some stats - meshRefinerPtr_().printMeshInfo(debug_, "Initial mesh"); - - meshRefinerPtr_().write - ( - debug_&meshRefinement::OBJINTERSECTIONS, - mesh_.time().path()/mesh_.time().timeName() - ); - } } @@ -448,7 +449,7 @@ void Foam::autoHexMeshDriver::writeMesh(const string& msg) const const meshRefinement& meshRefiner = meshRefinerPtr_(); meshRefiner.printMeshInfo(debug_, msg); - Info<< "Writing mesh to time " << mesh_.time().timeName() << endl; + Info<< "Writing mesh to time " << meshRefiner.timeName() << endl; meshRefiner.write(meshRefinement::MESH|meshRefinement::SCALARLEVELS, ""); if (debug_ & meshRefinement::OBJINTERSECTIONS) @@ -456,7 +457,7 @@ void Foam::autoHexMeshDriver::writeMesh(const string& msg) const meshRefiner.write ( meshRefinement::OBJINTERSECTIONS, - mesh_.time().path()/mesh_.time().timeName() + mesh_.time().path()/meshRefiner.timeName() ); } Info<< "Written mesh in = " @@ -522,11 +523,7 @@ void Foam::autoHexMeshDriver::doMesh() const dictionary& shrinkDict = dict_.subDict("shrinkDict"); PtrList<dictionary> surfaceDicts(dict_.lookup("surfaces")); - autoLayerDriver layerDriver - ( - meshRefinerPtr_(), - globalToPatch_ - ); + autoLayerDriver layerDriver(meshRefinerPtr_()); // Get all the layer specific params layerParameters layerParams diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H index c0b7668d0ac6e68c56ab8a5a6546a61ce48b289d..02eba5afbe95025f2124860158b9f9f0196e68c7 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H @@ -174,6 +174,7 @@ public: autoHexMeshDriver ( fvMesh& mesh, + const bool overwrite, const dictionary& meshDict, const dictionary& decomposeDict ); diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C index 01ab952c165a5997df49085828e556fb41d6d209..fea25e35eb8a6e64bfd01564cda14d42299d1403 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C @@ -75,7 +75,7 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo labelHashSet boundaryCells(mesh.nFaces()-mesh.nInternalFaces()); { - labelList patchIDs(meshRefinement::addedPatches(globalToPatch_)); + labelList patchIDs(meshRefiner_.meshedPatches()); const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -159,12 +159,16 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo mesh.clearOut(); } + if (meshRefiner_.overwrite()) + { + mesh.setInstance(meshRefiner_.oldInstance()); + } + faceCombiner.updateMesh(map); meshRefiner_.updateMesh(map, labelList(0)); - for (label iteration = 0; iteration < 100; iteration++) { Info<< nl @@ -313,6 +317,11 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo mesh.clearOut(); } + if (meshRefiner_.overwrite()) + { + mesh.setInstance(meshRefiner_.oldInstance()); + } + faceCombiner.updateMesh(map); // Renumber restore maps @@ -336,7 +345,7 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo if (debug) { Pout<< "Writing merged-faces mesh to time " - << mesh.time().timeName() << nl << endl; + << meshRefiner_.timeName() << nl << endl; mesh.write(); } } @@ -380,6 +389,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::autoLayerDriver::doRemovePoints mesh.clearOut(); } + if (meshRefiner_.overwrite()) + { + mesh.setInstance(meshRefiner_.oldInstance()); + } + pointRemover.updateMesh(map); meshRefiner_.updateMesh(map, labelList(0)); @@ -433,6 +447,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::autoLayerDriver::doRestorePoints mesh.clearOut(); } + if (meshRefiner_.overwrite()) + { + mesh.setInstance(meshRefiner_.oldInstance()); + } + pointRemover.updateMesh(map); meshRefiner_.updateMesh(map, labelList(0)); @@ -656,7 +675,7 @@ Foam::label Foam::autoLayerDriver::mergeEdgesUndo if (debug) { Pout<< "Writing merged-edges mesh to time " - << mesh.time().timeName() << nl << endl; + << meshRefiner_.timeName() << nl << endl; mesh.write(); } } @@ -2446,14 +2465,9 @@ void Foam::autoLayerDriver::getLayerCellsFaces // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::autoLayerDriver::autoLayerDriver -( - meshRefinement& meshRefiner, - const labelList& globalToPatch -) +Foam::autoLayerDriver::autoLayerDriver(meshRefinement& meshRefiner) : - meshRefiner_(meshRefiner), - globalToPatch_(globalToPatch) + meshRefiner_(meshRefiner) {} @@ -2729,7 +2743,7 @@ void Foam::autoLayerDriver::addLayers IOobject ( "pointMedialDist", - mesh.time().timeName(), + meshRefiner_.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE, @@ -2744,7 +2758,7 @@ void Foam::autoLayerDriver::addLayers IOobject ( "dispVec", - mesh.time().timeName(), + meshRefiner_.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE, @@ -2759,7 +2773,7 @@ void Foam::autoLayerDriver::addLayers IOobject ( "medialRatio", - mesh.time().timeName(), + meshRefiner_.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE, @@ -2911,7 +2925,7 @@ void Foam::autoLayerDriver::addLayers ); const_cast<Time&>(mesh.time())++; - Info<< "Writing shrunk mesh to " << mesh.time().timeName() << endl; + Info<< "Writing shrunk mesh to " << meshRefiner_.timeName() << endl; // See comment in autoSnapDriver why we should not remove meshPhi // using mesh.clearPout(). @@ -3012,6 +3026,11 @@ void Foam::autoLayerDriver::addLayers //?neccesary? Update fields newMesh.updateMesh(map); + if (meshRefiner_.overwrite()) + { + newMesh.setInstance(meshRefiner_.oldInstance()); + } + // Update numbering on addLayer: // - cell/point labels to be newMesh. // - patchFaces to remain in oldMesh order. @@ -3034,7 +3053,7 @@ void Foam::autoLayerDriver::addLayers if (debug) { - Info<< "Writing layer mesh to " << mesh.time().timeName() << endl; + Info<< "Writing layer mesh to " << meshRefiner_.timeName() << endl; newMesh.write(); cellSet addedCellSet ( @@ -3113,6 +3132,11 @@ void Foam::autoLayerDriver::addLayers mesh.clearOut(); } + if (meshRefiner_.overwrite()) + { + mesh.setInstance(meshRefiner_.oldInstance()); + } + meshRefiner_.updateMesh(map, labelList(0)); @@ -3181,8 +3205,6 @@ void Foam::autoLayerDriver::doLayers << "----------------------------------" << nl << endl; - const_cast<Time&>(mesh.time())++; - Info<< "Using mesh parameters " << motionDict << nl << endl; // Merge coplanar boundary faces diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H index 164fd88ce04e5b06c33ef1c48d8745ea34a8dcc0..12569570069144b603074002ea3ad7af8c3bb91f 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H @@ -101,9 +101,6 @@ class autoLayerDriver //- Mesh+surface meshRefinement& meshRefiner_; - //- From surface region to patch - const labelList globalToPatch_; - // Private Member Functions @@ -509,11 +506,7 @@ public: // Constructors //- Construct from components - autoLayerDriver - ( - meshRefinement& meshRefiner, - const labelList& globalToPatch - ); + autoLayerDriver(meshRefinement& meshRefiner); // Member Functions diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C index 9c4e0a17c521b8e06b4b2ecceb18ed80bb917d06..0ac24a5574aad7e415a2bf4dbc489bb310d4e728 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C @@ -344,8 +344,8 @@ void Foam::autoRefineDriver::removeInsideCells if (debug) { Pout<< "Writing subsetted mesh to time " - << mesh.time().timeName() << '.' << endl; - meshRefiner_.write(debug, mesh.time().path()/mesh.time().timeName()); + << meshRefiner_.timeName() << '.' << endl; + meshRefiner_.write(debug, mesh.time().path()/meshRefiner_.timeName()); Pout<< "Dumped mesh in = " << mesh.time().cpuTimeIncrement() << " s\n" << nl << endl; } @@ -561,11 +561,11 @@ void Foam::autoRefineDriver::zonify if (debug) { Pout<< "Writing zoned mesh to time " - << mesh.time().timeName() << '.' << endl; + << meshRefiner_.timeName() << '.' << endl; meshRefiner_.write ( debug, - mesh.time().path()/mesh.time().timeName() + mesh.time().path()/meshRefiner_.timeName() ); } @@ -653,8 +653,8 @@ void Foam::autoRefineDriver::splitAndMergeBaffles if (debug) { Pout<< "Writing handleProblemCells mesh to time " - << mesh.time().timeName() << '.' << endl; - meshRefiner_.write(debug, mesh.time().path()/mesh.time().timeName()); + << meshRefiner_.timeName() << '.' << endl; + meshRefiner_.write(debug, mesh.time().path()/meshRefiner_.timeName()); } } @@ -680,7 +680,7 @@ void Foam::autoRefineDriver::mergePatchFaces ( Foam::cos(45*mathematicalConstant::pi/180.0), Foam::cos(45*mathematicalConstant::pi/180.0), - meshRefinement::addedPatches(globalToPatch_) + meshRefiner_.meshedPatches() ); if (debug) @@ -712,9 +712,6 @@ void Foam::autoRefineDriver::doRefine const fvMesh& mesh = meshRefiner_.mesh(); - const_cast<Time&>(mesh.time())++; - - // Check that all the keep points are inside the mesh. refineParams.findCells(mesh); diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C index 011417c29ecd92107e34ff596c9ba506a60cb50a..41475a321af054c67f083d2ebc9fadfb8c0d5d22 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C @@ -557,7 +557,7 @@ Foam::tmp<Foam::scalarField> Foam::autoSnapDriver::edgePatchDist // IOobject // ( // "pointDist", - // mesh.DB().timeName(), + // meshRefiner_.timeName(), // mesh.DB(), // IOobject::NO_READ, // IOobject::AUTO_WRITE @@ -580,7 +580,7 @@ Foam::tmp<Foam::scalarField> Foam::autoSnapDriver::edgePatchDist // pointDist[pointI] /= mesh.pointEdges()[pointI].size(); // } // Info<< "Writing patch distance to " << pointDist.name() - // << " at time " << mesh.DB().timeName() << endl; + // << " at time " << meshRefiner_.timeName() << endl; // // pointDist.write(); //} @@ -750,7 +750,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::autoSnapDriver::createZoneBaffles { const_cast<Time&>(mesh.time())++; Pout<< "Writing baffled mesh to time " - << mesh.time().timeName() << endl; + << meshRefiner_.timeName() << endl; mesh.write(); } } @@ -830,35 +830,6 @@ Foam::scalarField Foam::autoSnapDriver::calcSnapDistance } -//// Invert globalToPatch_ to get the patches related to surfaces. -//Foam::labelList Foam::autoSnapDriver::getSurfacePatches() const -//{ -// // Set of patches originating from surface -// labelHashSet surfacePatchSet(globalToPatch_.size()); -// -// forAll(globalToPatch_, i) -// { -// if (globalToPatch_[i] != -1) -// { -// surfacePatchSet.insert(globalToPatch_[i]); -// } -// } -// -// const fvMesh& mesh = meshRefiner_.mesh(); -// -// DynamicList<label> surfacePatches(surfacePatchSet.size()); -// -// for (label patchI = 0; patchI < mesh.boundaryMesh().size(); patchI++) -// { -// if (surfacePatchSet.found(patchI)) -// { -// surfacePatches.append(patchI); -// } -// } -// return surfacePatches.shrink(); -//} - - void Foam::autoSnapDriver::preSmoothPatch ( const snapParameters& snapParams, @@ -928,7 +899,7 @@ void Foam::autoSnapDriver::preSmoothPatch if (debug) { const_cast<Time&>(mesh.time())++; - Pout<< "Writing patch smoothed mesh to time " << mesh.time().timeName() + Pout<< "Writing patch smoothed mesh to time " << meshRefiner_.timeName() << endl; mesh.write(); @@ -1222,7 +1193,7 @@ void Foam::autoSnapDriver::smoothDisplacement if (debug) { const_cast<Time&>(mesh.time())++; - Pout<< "Writing smoothed mesh to time " << mesh.time().timeName() + Pout<< "Writing smoothed mesh to time " << meshRefiner_.timeName() << endl; // Moving mesh creates meshPhi. Can be cleared out by a mesh.clearOut @@ -1284,7 +1255,7 @@ void Foam::autoSnapDriver::scaleMesh if (debug) { const_cast<Time&>(mesh.time())++; - Pout<< "Writing scaled mesh to time " << mesh.time().timeName() + Pout<< "Writing scaled mesh to time " << meshRefiner_.timeName() << endl; mesh.write(); @@ -1476,10 +1447,8 @@ void Foam::autoSnapDriver::doSnap << "--------------" << nl << endl; - const_cast<Time&>(mesh.time())++; - // Get the labels of added patches. - labelList adaptPatchIDs(meshRefinement::addedPatches(globalToPatch_)); + labelList adaptPatchIDs(meshRefiner_.meshedPatches()); // Create baffles (pairs of faces that share the same points) // Baffles stored as owner and neighbour face that have been created. diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H index 5d9b2bc357d0e2dff037bcfccc9d27ae08613114..cdf8673d75d425d82c0633b0a93364c731e42429 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H @@ -170,9 +170,6 @@ public: const indirectPrimitivePatch& ) const; - ////- Get patches generated for surfaces. - //labelList getSurfacePatches() const; - //- Smooth the mesh (patch and internal) to increase visibility // of surface points (on castellated mesh) w.r.t. surface. void preSmoothPatch diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C index 6a021f9e8a75d0628a811eefa3623f8c77c8b767..7e90beae6f6699b8231773e40e3c76f2f9a06f5d 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C @@ -84,12 +84,15 @@ void Foam::meshRefinement::calcNeighbourData const polyBoundaryMesh& patches = mesh_.boundaryMesh(); + labelHashSet addedPatchIDSet(meshedPatches()); + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; const unallocLabelList& faceCells = pp.faceCells(); const vectorField::subField faceCentres = pp.faceCentres(); + const vectorField::subField faceAreas = pp.faceAreas(); label bFaceI = pp.start()-mesh_.nInternalFaces(); @@ -102,6 +105,36 @@ void Foam::meshRefinement::calcNeighbourData bFaceI++; } } + else if (addedPatchIDSet.found(patchI)) + { + // Face was introduced from cell-cell intersection. Try to + // reconstruct other side cell(centre). Three possibilities: + // - cells same size. + // - preserved cell smaller. Not handled. + // - preserved cell larger. + forAll(faceCells, i) + { + // Extrapolate the face centre. + vector fn = faceAreas[i]; + fn /= mag(fn)+VSMALL; + + label own = faceCells[i]; + label ownLevel = cellLevel[own]; + label faceLevel = meshCutter_.getAnchorLevel(pp.start()+i); + + // Normal distance from face centre to cell centre + scalar d = ((faceCentres[i] - cellCentres[own]) & fn); + if (faceLevel > ownLevel) + { + // Other cell more refined. Adjust normal distance + d *= 0.5; + } + neiLevel[bFaceI] = cellLevel[ownLevel]; + // Calculate other cell centre by extrapolation + neiCc[bFaceI] = faceCentres[i] + d*fn; + bFaceI++; + } + } else { forAll(faceCells, i) @@ -432,6 +465,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::doRemoveCells mesh_.clearOut(); } + if (overwrite_) + { + mesh_.setInstance(oldInstance_); + } + // Update local mesh data cellRemover.updateMesh(map); @@ -784,12 +822,15 @@ Foam::meshRefinement::meshRefinement ( fvMesh& mesh, const scalar mergeDistance, + const bool overwrite, const refinementSurfaces& surfaces, const shellSurfaces& shells ) : mesh_(mesh), mergeDistance_(mergeDistance), + overwrite_(overwrite), + oldInstance_(mesh.pointsInstance()), surfaces_(surfaces), shells_(shells), meshCutter_ @@ -1166,8 +1207,6 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::meshRefinement::balance // Helper function to get intersected faces Foam::labelList Foam::meshRefinement::intersectedFaces() const { - // Mark all faces that will become baffles - label nBoundaryFaces = 0; forAll(surfaceIndex_, faceI) @@ -1193,10 +1232,7 @@ Foam::labelList Foam::meshRefinement::intersectedFaces() const // Helper function to get points used by faces -Foam::labelList Foam::meshRefinement::intersectedPoints -( -// const labelList& globalToPatch -) const +Foam::labelList Foam::meshRefinement::intersectedPoints() const { const faceList& faces = mesh_.faces(); @@ -1221,9 +1257,10 @@ Foam::labelList Foam::meshRefinement::intersectedPoints } //// Insert all meshed patches. - //forAll(globalToPatch, i) + //labelList adaptPatchIDs(meshedPatches()); + //forAll(adaptPatchIDs, i) //{ - // label patchI = globalToPatch[i]; + // label patchI = adaptPatchIDs[i]; // // if (patchI != -1) // { @@ -1262,27 +1299,6 @@ Foam::labelList Foam::meshRefinement::intersectedPoints } -Foam::labelList Foam::meshRefinement::addedPatches -( - const labelList& globalToPatch -) -{ - labelList patchIDs(globalToPatch.size()); - label addedI = 0; - - forAll(globalToPatch, i) - { - if (globalToPatch[i] != -1) - { - patchIDs[addedI++] = globalToPatch[i]; - } - } - patchIDs.setSize(addedI); - - return patchIDs; -} - - //- Create patch from set of patches Foam::autoPtr<Foam::indirectPrimitivePatch> Foam::meshRefinement::makePatch ( @@ -1372,7 +1388,7 @@ Foam::tmp<Foam::pointVectorField> Foam::meshRefinement::makeDisplacementField IOobject ( "pointDisplacement", - mesh.time().timeName(), + mesh.time().timeName(), //timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE @@ -1653,6 +1669,53 @@ Foam::label Foam::meshRefinement::addPatch } +Foam::label Foam::meshRefinement::addMeshedPatch +( + const word& name, + const word& type +) +{ + label meshedI = findIndex(meshedPatches_, name); + + if (meshedI != -1) + { + // Already there. Get corresponding polypatch + return mesh_.boundaryMesh().findPatchID(name); + } + else + { + // Add patch + label patchI = addPatch(mesh_, name, type); + + // Store + label sz = meshedPatches_.size(); + meshedPatches_.setSize(sz+1); + meshedPatches_[sz] = name; + + return patchI; + } +} + + +Foam::labelList Foam::meshRefinement::meshedPatches() const +{ + labelList patchIDs(meshedPatches_.size()); + forAll(meshedPatches_, i) + { + patchIDs[i] = mesh_.boundaryMesh().findPatchID(meshedPatches_[i]); + + if (patchIDs[i] == -1) + { + FatalErrorIn("meshRefinement::meshedPatches() const") + << "Problem : did not find patch " << meshedPatches_[i] + << abort(FatalError); + } + } + + return patchIDs; +} + + Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMeshRegions ( const point& keepPoint @@ -2000,6 +2063,20 @@ void Foam::meshRefinement::printMeshInfo(const bool debug, const string& msg) } +//- Return either time().constant() or oldInstance +Foam::word Foam::meshRefinement::timeName() const +{ + if (overwrite_ && mesh_.time().timeIndex() == 0) + { + return oldInstance_; + } + else + { + return mesh_.time().timeName(); + } +} + + void Foam::meshRefinement::dumpRefinementLevel() const { volScalarField volRefLevel @@ -2007,7 +2084,7 @@ void Foam::meshRefinement::dumpRefinementLevel() const IOobject ( "cellLevel", - mesh_.time().timeName(), + timeName(), mesh_, IOobject::NO_READ, IOobject::AUTO_WRITE, @@ -2034,7 +2111,7 @@ void Foam::meshRefinement::dumpRefinementLevel() const IOobject ( "pointLevel", - mesh_.time().timeName(), + timeName(), mesh_, IOobject::NO_READ, IOobject::NO_WRITE, diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H index 06004c8a6e00bc12c093cb36afb2782638b4b2d3..93ce3ceeb8fb3043d0b8435ef22209d6ee073711 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H @@ -110,6 +110,12 @@ private: //- tolerance used for sorting coordinates (used in 'less' routine) const scalar mergeDistance_; + //- overwrite the mesh? + const bool overwrite_; + + //- Instance of mesh upon construction. Used when in overwrite_ mode. + const word oldInstance_; + //- All surface-intersection interaction const refinementSurfaces& surfaces_; @@ -125,6 +131,10 @@ private: //- user supplied face based data. List<Tuple2<mapType, labelList> > userFaceData_; + //- Meshed patches - are treated differently. Stored as wordList since + // order changes. + wordList meshedPatches_; + // Private Member Functions @@ -163,9 +173,6 @@ private: //- Find any intersection of surface. Store in surfaceIndex_. void updateIntersections(const labelList& changedFaces); - //- Set instance of all local IOobjects - void setInstance(const fileName&); - //- Remove cells. Put exposedFaces into exposedPatchIDs. autoPtr<mapPolyMesh> doRemoveCells ( @@ -400,12 +407,11 @@ private: const labelList& globalToPatch ) const; - //- Initial test of marking faces using geometric information. - labelList markFacesOnProblemCellsGeometric - ( - const dictionary& motionDict, - const labelList& globalToPatch - ) const; + ////- Initial test of marking faces using geometric information. + //labelList markFacesOnProblemCellsGeometric + //( + // const dictionary& motionDict + //) const; // Baffle merging @@ -475,6 +481,7 @@ public: ( fvMesh& mesh, const scalar mergeDistance, + const bool overwrite, const refinementSurfaces&, const shellSurfaces& ); @@ -499,6 +506,18 @@ public: return mergeDistance_; } + //- Overwrite the mesh? + bool overwrite() const + { + return overwrite_; + } + + //- (points)instance of mesh upon construction + const word& oldInstance() const + { + return oldInstance_; + } + //- reference to surface search engines const refinementSurfaces& surfaces() const { @@ -578,9 +597,6 @@ public: //- Get points on surfaces with intersection and boundary faces. labelList intersectedPoints() const; - //- Get added patches (inverse of globalToPatch) - static labelList addedPatches(const labelList& globalToPatch); - //- Create patch from set of patches static autoPtr<indirectPrimitivePatch> makePatch ( @@ -688,9 +704,16 @@ public: // Other topo changes - //- Helper function to add patch to mesh + //- Helper:add patch to mesh. Update all registered fields. + // Use addMeshedPatch to add patches originating from surfaces. static label addPatch(fvMesh&, const word& name, const word& type); + //- Add patch originating from meshing. Update meshedPatches_. + label addMeshedPatch(const word& name, const word& type); + + //- Get patchIDs for patches added in addMeshedPatch. + labelList meshedPatches() const; + //- Split mesh. Keep part containing point. autoPtr<mapPolyMesh> splitMeshRegions(const point& keepPoint); @@ -699,7 +722,11 @@ public: //- Update for external change to mesh. changedFaces are in new mesh // face labels. - void updateMesh(const mapPolyMesh&, const labelList& changedFaces); + void updateMesh + ( + const mapPolyMesh&, + const labelList& changedFaces + ); // Restoring : is where other processes delete and reinsert data. @@ -757,6 +784,13 @@ public: //- Print some mesh stats. void printMeshInfo(const bool, const string&) const; + //- Replacement for Time::timeName() : return oldInstance (if + // overwrite_) + word timeName() const; + + //- Set instance of all local IOobjects + void setInstance(const fileName&); + //- Write mesh and all data bool write() const; diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C index 3904f960737a3e9a84b8e4366ca71b49bfa31f4c..b5b4174fb3a23963d98831280d98bd368c18a2b6 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C @@ -110,10 +110,10 @@ Foam::label Foam::meshRefinement::createBaffle -1, // masterPointID -1, // masterEdgeID faceI, // masterFaceID, - false, // face flip + true, // face flip neiPatch, // patch for face zoneID, // zone for face - zoneFlip // face flip in zone + !zoneFlip // face flip in zone ) ); } @@ -226,7 +226,13 @@ void Foam::meshRefinement::getBafflePatches label vertI = 0; if (debug&OBJINTERSECTIONS) { - str.reset(new OFstream(mesh_.time().timePath()/"intersections.obj")); + str.reset + ( + new OFstream + ( + mesh_.time().path()/timeName()/"intersections.obj" + ) + ); Pout<< "getBafflePatches : Writing surface intersections to file " << str().name() << nl << endl; @@ -461,6 +467,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createBaffles mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + //- Redo the intersections on the newly create baffle faces. Note that // this changes also the cell centre positions. faceSet baffledFacesSet(mesh_, "baffledFacesSet", 2*nBaffles); @@ -820,6 +831,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::mergeBaffles mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + // Update intersections. Recalculate intersections on merged faces since // this seems to give problems? Note: should not be nessecary since // baffles preserve intersections from when they were created. @@ -1001,7 +1017,7 @@ void Foam::meshRefinement::findCellZoneGeometric if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone)) { - // Give face the zone of the owner + // Give face the zone of max cell zone namedSurfaceIndex[faceI] = findIndex ( surfaceToCellZone, @@ -1043,7 +1059,7 @@ void Foam::meshRefinement::findCellZoneGeometric if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone)) { - // Give face the zone of the owner + // Give face the max cell zone namedSurfaceIndex[faceI] = findIndex ( surfaceToCellZone, @@ -1482,7 +1498,7 @@ void Foam::meshRefinement::baffleAndSplitMesh if (debug) { - Pout<< "Writing baffled mesh to time " << mesh_.time().timeName() + Pout<< "Writing baffled mesh to time " << timeName() << endl; write(debug, runTime.path()/"baffles"); Pout<< "Dumped debug data in = " @@ -1511,11 +1527,7 @@ void Foam::meshRefinement::baffleAndSplitMesh perpendicularAngle, globalToPatch ) - //markFacesOnProblemCellsGeometric - //( - // motionDict, - // globalToPatch - //) + //markFacesOnProblemCellsGeometric(motionDict) ); Info<< "Analyzed problem cells in = " << runTime.cpuTimeIncrement() << " s\n" << nl << endl; @@ -1569,7 +1581,7 @@ void Foam::meshRefinement::baffleAndSplitMesh if (debug) { Pout<< "Writing extra baffled mesh to time " - << mesh_.time().timeName() << endl; + << timeName() << endl; write(debug, runTime.path()/"extraBaffles"); Pout<< "Dumped debug data in = " << runTime.cpuTimeIncrement() << " s\n" << nl << endl; @@ -1604,9 +1616,9 @@ void Foam::meshRefinement::baffleAndSplitMesh if (debug) { - Pout<< "Writing subsetted mesh to time " << mesh_.time().timeName() + Pout<< "Writing subsetted mesh to time " << timeName() << endl; - write(debug, runTime.timePath()); + write(debug, runTime.path()/timeName()); Pout<< "Dumped debug data in = " << runTime.cpuTimeIncrement() << " s\n" << nl << endl; } @@ -1665,7 +1677,7 @@ void Foam::meshRefinement::baffleAndSplitMesh // Split off (with optional buffer layers) unreachable areas of mesh. -Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh +Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh ( const label nBufferLayers, const labelList& globalToPatch, @@ -1998,6 +2010,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::dupNonManifoldPoints() mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + // Update intersections. Is mapping only (no faces created, positions stay // same) so no need to recalculate intersections. updateMesh(map, labelList(0)); @@ -2194,16 +2211,14 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify { label faceI = testFaces[i]; - label own = mesh_.faceOwner()[faceI]; - if (mesh_.isInternalFace(faceI)) { - start[i] = cellCentres[own]; - end[i] = cellCentres[mesh_.faceNeighbour()[faceI]]; + start[i] = cellCentres[faceOwner[faceI]]; + end[i] = cellCentres[faceNeighbour[faceI]]; } else { - start[i] = cellCentres[own]; + start[i] = cellCentres[faceOwner[faceI]]; end[i] = neiCc[faceI-mesh_.nInternalFaces()]; } } @@ -2340,6 +2355,20 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify if (surfI != -1) { + // Orient face zone to have slave cells in max cell zone. + label ownZone = cellToZone[faceOwner[faceI]]; + label neiZone = cellToZone[faceNeighbour[faceI]]; + + bool flip; + if (ownZone == max(ownZone, neiZone)) + { + flip = false; + } + else + { + flip = true; + } + meshMod.setAction ( polyModifyFace @@ -2352,12 +2381,31 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify -1, // patch for face false, // remove from zone surfaceToFaceZone[surfI], // zone for face - false // face flip in zone + flip // face flip in zone ) ); } } + // Get coupled neighbour cellZone. Set to -1 on non-coupled patches. + labelList neiCellZone(mesh_.nFaces()-mesh_.nInternalFaces(), -1); + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (pp.coupled()) + { + forAll(pp, i) + { + label faceI = pp.start()+i; + neiCellZone[faceI-mesh_.nInternalFaces()] = + cellToZone[mesh_.faceOwner()[faceI]]; + } + } + } + syncTools::swapBoundaryFaceList(mesh_, neiCellZone, false); + + // Set owner as no-flip forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; @@ -2370,6 +2418,19 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify if (surfI != -1) { + label ownZone = cellToZone[faceOwner[faceI]]; + label neiZone = neiCellZone[faceI-mesh_.nInternalFaces()]; + + bool flip; + if (ownZone == max(ownZone, neiZone)) + { + flip = false; + } + else + { + flip = true; + } + meshMod.setAction ( polyModifyFace @@ -2382,7 +2443,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify patchI, // patch for face false, // remove from zone surfaceToFaceZone[surfI], // zone for face - false // face flip in zone + flip // face flip in zone ) ); } @@ -2429,6 +2490,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + // None of the faces has changed, only the zones. Still... updateMesh(map, labelList()); diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C index 7ad77e83bf2bc300fdec8492065239fec6141d9f..b1461cea77c00c17589eeb11153ebf2d415499bd 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementMerge.C @@ -29,10 +29,6 @@ License #include "polyTopoChange.H" #include "removePoints.H" - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // Merge faces that are in-line. @@ -108,6 +104,11 @@ Foam::label Foam::meshRefinement::mergePatchFaces mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + faceCombiner.updateMesh(map); // Get the kept faces that need to be recalculated. @@ -203,6 +204,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::mergeEdges mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + pointRemover.updateMesh(map); // Get the kept faces that need to be recalculated. diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementProblemCells.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementProblemCells.C index ea1e8a083cd24cac69c384129668cf6fecb1a7cf..fb0a7e2121f020576494e848ad8b6116f71fbcdd 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementProblemCells.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementProblemCells.C @@ -136,15 +136,13 @@ Foam::Map<Foam::label> Foam::meshRefinement::findEdgeConnectedProblemCells const labelList& globalToPatch ) const { - labelList adaptPatchIDs(meshRefinement::addedPatches(globalToPatch)); - - // Construct addressing engine. + // Construct addressing engine from all patches added for meshing. autoPtr<indirectPrimitivePatch> ppPtr ( meshRefinement::makePatch ( mesh_, - adaptPatchIDs + meshedPatches() ) ); const indirectPrimitivePatch& pp = ppPtr(); @@ -386,11 +384,6 @@ Foam::labelList Foam::meshRefinement::markFacesOnProblemCells const labelList& pointLevel = meshCutter_.pointLevel(); const polyBoundaryMesh& patches = mesh_.boundaryMesh(); - // Swap neighbouring cell centres and cell level - labelList neiLevel(mesh_.nFaces()-mesh_.nInternalFaces()); - pointField neiCc(mesh_.nFaces()-mesh_.nInternalFaces()); - calcNeighbourData(neiLevel, neiCc); - // Per internal face (boundary faces not used) the patch that the // baffle should get (or -1) labelList facePatch(mesh_.nFaces(), -1); @@ -403,7 +396,7 @@ Foam::labelList Foam::meshRefinement::markFacesOnProblemCells // Fill boundary data. All elements on meshed patches get marked. // Get the labels of added patches. - labelList adaptPatchIDs(meshRefinement::addedPatches(globalToPatch)); + labelList adaptPatchIDs(meshedPatches()); forAll(adaptPatchIDs, i) { @@ -427,6 +420,12 @@ Foam::labelList Foam::meshRefinement::markFacesOnProblemCells } } + // Swap neighbouring cell centres and cell level + labelList neiLevel(mesh_.nFaces()-mesh_.nInternalFaces()); + pointField neiCc(mesh_.nFaces()-mesh_.nInternalFaces()); + calcNeighbourData(neiLevel, neiCc); + + // Count of faces marked for baffling label nBaffleFaces = 0; @@ -961,20 +960,16 @@ Foam::labelList Foam::meshRefinement::markFacesOnProblemCells //// test to find nearest surface and checks which faces would get squashed. //Foam::labelList Foam::meshRefinement::markFacesOnProblemCellsGeometric //( -// const dictionary& motionDict, -// const labelList& globalToPatch +// const dictionary& motionDict //) const //{ -// // Get the labels of added patches. -// labelList adaptPatchIDs(meshRefinement::addedPatches(globalToPatch)); -// // // Construct addressing engine. // autoPtr<indirectPrimitivePatch> ppPtr // ( // meshRefinement::makePatch // ( // mesh_, -// adaptPatchIDs +// meshedPatches() // ) // ); // const indirectPrimitivePatch& pp = ppPtr(); diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementRefine.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementRefine.C index 7aabbc6321cf9132e9e5c271d46e15abd7e00673..e35607a5980172c0d90377eae1f38efeeca6614f 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementRefine.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementRefine.C @@ -1232,6 +1232,11 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::refine mesh_.clearOut(); } + if (overwrite()) + { + mesh_.setInstance(oldInstance()); + } + // Update intersection info updateMesh(map, getChangedFaces(map, cellsToRefine)); @@ -1256,12 +1261,12 @@ Foam::meshRefinement::refineAndBalance if (debug) { Pout<< "Writing refined but unbalanced " << msg - << " mesh to time " << mesh_.time().timeName() << endl; + << " mesh to time " << timeName() << endl; write ( debug, mesh_.time().path() - /mesh_.time().timeName() + /timeName() ); Pout<< "Dumped debug data in = " << mesh_.time().cpuTimeIncrement() << " s" << endl; @@ -1299,12 +1304,11 @@ Foam::meshRefinement::refineAndBalance if (debug) { Pout<< "Writing balanced " << msg - << " mesh to time " << mesh_.time().timeName() << endl; + << " mesh to time " << timeName() << endl; write ( debug, - mesh_.time().path() - /mesh_.time().timeName() + mesh_.time().path()/timeName() ); Pout<< "Dumped debug data in = " << mesh_.time().cpuTimeIncrement() << " s" << endl; diff --git a/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.C b/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.C index 4f847636b59daa3216e056da4a544b4501df55b3..7cd8fb9dd2120de505040ab6afe713005d95a200 100644 --- a/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.C +++ b/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.C @@ -56,7 +56,7 @@ Foam::trackedParticle::trackedParticle bool readFields ) : - ExactParticle<trackedParticle>(c, is) + ExactParticle<trackedParticle>(c, is, readFields) { if (readFields) { @@ -115,6 +115,28 @@ bool Foam::trackedParticle::move(trackedParticle::trackData& td) } +bool Foam::trackedParticle::hitPatch +( + const polyPatch&, + trackedParticle::trackData& td, + const label patchI +) +{ + return false; +} + + +bool Foam::trackedParticle::hitPatch +( + const polyPatch&, + int&, + const label +) +{ + return false; +} + + void Foam::trackedParticle::hitWedgePatch ( const wedgePolyPatch&, diff --git a/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.H b/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.H index ab7ab06d20c9a513e481e3e89b645c898e11992a..3e2d12a1d2f16b84b3881883a7813d40a9026ec6 100644 --- a/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.H +++ b/src/autoMesh/autoHexMesh/trackedParticle/trackedParticle.H @@ -169,6 +169,21 @@ public: bool move(trackData&); + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + bool hitPatch + ( + const polyPatch&, + trackedParticle::trackData& td, + const label patchI + ); + bool hitPatch + ( + const polyPatch&, + int&, + const label patchI + ); + //- Overridable function to handle the particle hitting a wedge void hitWedgePatch ( diff --git a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C b/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C index a33e49b82889148fb6d3db92ff7d51dd3d2bc80e..994a82419285a24da2695f3e3850ee4580d1f8ac 100644 --- a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C +++ b/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C @@ -75,6 +75,24 @@ extern "C" } +// Hack: scotch generates floating point errors so need to switch of error +// trapping! +#if defined(linux) || defined(linuxAMD64) || defined(linuxIA64) +# define LINUX +#endif + +#if defined(LINUX) && defined(__GNUC__) +# define LINUX_GNUC +#endif + +#ifdef LINUX_GNUC +# ifndef __USE_GNU +# define __USE_GNU +# endif +# include <fenv.h> +#endif + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -113,13 +131,30 @@ Foam::label Foam::scotchDecomp::decompose { // Strategy // ~~~~~~~~ + // Default. SCOTCH_Strat stradat; check(SCOTCH_stratInit(&stradat), "SCOTCH_stratInit"); - //SCOTCH_stratGraphMap(&stradat, &argv[i][2]); - //fprintf(stdout, "S\tStrat="); - //SCOTCH_stratSave(&stradat, stdout); - //fprintf(stdout, "\n"); + + if (decompositionDict_.found("scotchCoeffs")) + { + const dictionary& scotchCoeffs = + decompositionDict_.subDict("scotchCoeffs"); + + + string strategy; + if (scotchCoeffs.readIfPresent("strategy", strategy)) + { + if (debug) + { + Info<< "scotchDecomp : Using strategy " << strategy << endl; + } + SCOTCH_stratGraphMap(&stradat, strategy.c_str()); + //fprintf(stdout, "S\tStrat="); + //SCOTCH_stratSave(&stradat, stdout); + //fprintf(stdout, "\n"); + } + } // Graph @@ -153,37 +188,40 @@ Foam::label Foam::scotchDecomp::decompose const dictionary& scotchCoeffs = decompositionDict_.subDict("scotchCoeffs"); - Switch writeGraph(scotchCoeffs.lookup("writeGraph")); - - if (writeGraph) + if (scotchCoeffs.found("writeGraph")) { - OFstream str(mesh_.time().path() / mesh_.name() + ".grf"); - - Info<< "Dumping Scotch graph file to " << str.name() << endl - << "Use this in combination with gpart." << endl; - - label version = 0; - str << version << nl; - // Numer of vertices - str << xadj.size()-1 << ' ' << adjncy.size() << nl; - // Numbering starts from 0 - label baseval = 0; - // Has weights? - label hasEdgeWeights = 0; - label hasVertexWeights = 0; - label numericflag = 10*hasEdgeWeights+hasVertexWeights; - str << baseval << ' ' << numericflag << nl; - for (label cellI = 0; cellI < xadj.size()-1; cellI++) - { - label start = xadj[cellI]; - label end = xadj[cellI+1]; - str << end-start; + Switch writeGraph(scotchCoeffs.lookup("writeGraph")); - for (label i = start; i < end; i++) + if (writeGraph) + { + OFstream str(mesh_.time().path() / mesh_.name() + ".grf"); + + Info<< "Dumping Scotch graph file to " << str.name() << endl + << "Use this in combination with gpart." << endl; + + label version = 0; + str << version << nl; + // Numer of vertices + str << xadj.size()-1 << ' ' << adjncy.size() << nl; + // Numbering starts from 0 + label baseval = 0; + // Has weights? + label hasEdgeWeights = 0; + label hasVertexWeights = 0; + label numericflag = 10*hasEdgeWeights+hasVertexWeights; + str << baseval << ' ' << numericflag << nl; + for (label cellI = 0; cellI < xadj.size()-1; cellI++) { - str << ' ' << adjncy[i]; + label start = xadj[cellI]; + label end = xadj[cellI+1]; + str << end-start; + + for (label i = start; i < end; i++) + { + str << ' ' << adjncy[i]; + } + str << nl; } - str << nl; } } } @@ -195,12 +233,36 @@ Foam::label Foam::scotchDecomp::decompose SCOTCH_Arch archdat; check(SCOTCH_archInit(&archdat), "SCOTCH_archInit"); - check - ( - // SCOTCH_archCmpltw for weighted. - SCOTCH_archCmplt(&archdat, nProcessors_), - "SCOTCH_archCmplt" - ); + + List<label> processorWeights; + if (decompositionDict_.found("scotchCoeffs")) + { + const dictionary& scotchCoeffs = + decompositionDict_.subDict("scotchCoeffs"); + + scotchCoeffs.readIfPresent("processorWeights", processorWeights); + } + if (processorWeights.size()) + { + if (debug) + { + Info<< "scotchDecomp : Using procesor weights " << processorWeights + << endl; + } + check + ( + SCOTCH_archCmpltw(&archdat, nProcessors_, processorWeights.begin()), + "SCOTCH_archCmpltw" + ); + } + else + { + check + ( + SCOTCH_archCmplt(&archdat, nProcessors_), + "SCOTCH_archCmplt" + ); + } //SCOTCH_Mapping mapdat; @@ -209,6 +271,16 @@ Foam::label Foam::scotchDecomp::decompose //SCOTCH_graphMapExit(&grafdat, &mapdat); + // Hack:switch off fpu error trapping +# ifdef LINUX_GNUC + int oldExcepts = fedisableexcept + ( + FE_DIVBYZERO + | FE_INVALID + | FE_OVERFLOW + ); +# endif + finalDecomp.setSize(xadj.size()-1); finalDecomp = 0; check @@ -223,6 +295,11 @@ Foam::label Foam::scotchDecomp::decompose "SCOTCH_graphMap" ); +# ifdef LINUX_GNUC + feenableexcept(oldExcepts); +# endif + + //finalDecomp.setSize(xadj.size()-1); //check diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.H index 71bfdbe92816ee196930ebe8505b4409ceda0608..d986946b578e18a92c3157af25bf131c34200e62 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/hexRef8.H @@ -185,8 +185,6 @@ class hexRef8 const bool searchForward, const label wantedLevel ) const; - //- Gets level such that the face has four points <= level. - label getAnchorLevel(const label faceI) const; ////- Print levels of list of points. //void printLevels(Ostream&, const labelList&) const; @@ -370,6 +368,9 @@ public: // Refinement + //- Gets level such that the face has four points <= level. + label getAnchorLevel(const label faceI) const; + //- Given valid mesh and current cell level and proposed // cells to refine calculate any clashes (due to 2:1) and return // ok list of cells to refine. diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H index cecd70d390de58cb2199b1291f170470b675f6cc..8a2eff1eb91fa3597e4e332fd7926ae520153acb 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H @@ -159,7 +159,7 @@ public: // return nRegions_; //} - //- Per point that is to duplicated to the local index + //- Per point that is to be duplicated the local index const Map<label>& meshPointMap() const { return meshPointMap_; diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C index d2728f8b9d634d40aa563b009502d909d9c493fe..27f81f3081f193ac4816f19b848de54c2fc69cc2 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C @@ -58,23 +58,6 @@ const Foam::point Foam::polyTopoChange::greatPoint // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Renumber -void Foam::polyTopoChange::renumber -( - const labelList& map, - DynamicList<label>& elems -) -{ - forAll(elems, elemI) - { - if (elems[elemI] >= 0) - { - elems[elemI] = map[elems[elemI]]; - } - } -} - - // Renumber with special handling for merged items (marked with <-1) void Foam::polyTopoChange::renumberReverseMap ( @@ -208,6 +191,20 @@ void Foam::polyTopoChange::countMap } +Foam::labelHashSet Foam::polyTopoChange::getSetIndices(const PackedBoolList& lst) +{ + labelHashSet values(lst.count()); + forAll(lst, i) + { + if (lst[i]) + { + values.insert(i); + } + } + return values; +} + + void Foam::polyTopoChange::writeMeshStats(const polyMesh& mesh, Ostream& os) { const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -383,6 +380,35 @@ void Foam::polyTopoChange::checkFace << " own:" << own << " nei:" << nei << " patchI:" << patchI << abort(FatalError); } + if (faceI >= 0 && faceI < faces_.size() && faceRemoved(faceI)) + { + FatalErrorIn + ( + "polyTopoChange::checkFace(const face&, const label" + ", const label, const label, const label)" + ) << "Face already marked for removal" + << nl + << "f:" << f + << " faceI(-1 if added face):" << faceI + << " own:" << own << " nei:" << nei + << " patchI:" << patchI << abort(FatalError); + } + forAll(f, fp) + { + if (f[fp] < points_.size() && pointRemoved(f[fp])) + { + FatalErrorIn + ( + "polyTopoChange::checkFace(const face&, const label" + ", const label, const label, const label)" + ) << "Face uses removed vertices" + << nl + << "f:" << f + << " faceI(-1 if added face):" << faceI + << " own:" << own << " nei:" << nei + << " patchI:" << patchI << abort(FatalError); + } + } } @@ -753,9 +779,11 @@ void Foam::polyTopoChange::reorderCompactFaces renumberKey(oldToNew, faceFromPoint_); renumberKey(oldToNew, faceFromEdge_); - renumber(oldToNew, flipFaceFlux_); + inplaceReorder(oldToNew, flipFaceFlux_); + flipFaceFlux_.setCapacity(newSize); renumberKey(oldToNew, faceZone_); - renumberKey(oldToNew, faceZoneFlip_); + inplaceReorder(oldToNew, faceZoneFlip_); + faceZoneFlip_.setCapacity(newSize); } @@ -1068,6 +1096,18 @@ void Foam::polyTopoChange::compact { faces_[faceI] = faces_[faceI].reverseFace(); Swap(faceOwner_[faceI], faceNeighbour_[faceI]); + flipFaceFlux_[faceI] = + ( + flipFaceFlux_[faceI] + ? 0 + : 1 + ); + faceZoneFlip_[faceI] = + ( + faceZoneFlip_[faceI] + ? 0 + : 1 + ); } } } @@ -2273,9 +2313,9 @@ void Foam::polyTopoChange::addMesh faceMap_.setCapacity(faceMap_.size() + nAllFaces); faceFromPoint_.resize(faceFromPoint_.size() + nAllFaces/100); faceFromEdge_.resize(faceFromEdge_.size() + nAllFaces/100); - flipFaceFlux_.resize(flipFaceFlux_.size() + nAllFaces/100); + flipFaceFlux_.setCapacity(faces_.size() + nAllFaces); faceZone_.resize(faceZone_.size() + nAllFaces/100); - faceZoneFlip_.resize(faceZoneFlip_.size() + nAllFaces/100); + faceZoneFlip_.setCapacity(faces_.size() + nAllFaces); // Precalc offset zones @@ -2687,16 +2727,13 @@ Foam::label Foam::polyTopoChange::addFace } reverseFaceMap_.append(faceI); - if (flipFaceFlux) - { - flipFaceFlux_.insert(faceI); - } + flipFaceFlux_[faceI] = (flipFaceFlux ? 1 : 0); if (zoneID >= 0) { faceZone_.insert(faceI, zoneID); - faceZoneFlip_.insert(faceI, zoneFlip); } + faceZoneFlip_[faceI] = (zoneFlip ? 1 : 0); return faceI; } @@ -2725,14 +2762,7 @@ void Foam::polyTopoChange::modifyFace faceNeighbour_[faceI] = nei; region_[faceI] = patchID; - if (flipFaceFlux) - { - flipFaceFlux_.insert(faceI); - } - else - { - flipFaceFlux_.erase(faceI); - } + flipFaceFlux_[faceI] = (flipFaceFlux ? 1 : 0); Map<label>::iterator faceFnd = faceZone_.find(faceI); @@ -2741,19 +2771,17 @@ void Foam::polyTopoChange::modifyFace if (zoneID >= 0) { faceFnd() = zoneID; - faceZoneFlip_.find(faceI)() = zoneFlip; } else { faceZone_.erase(faceFnd); - faceZoneFlip_.erase(faceI); } } else if (zoneID >= 0) { faceZone_.insert(faceI, zoneID); - faceZoneFlip_.insert(faceI, zoneFlip); } + faceZoneFlip_[faceI] = (zoneFlip ? 1 : 0); } @@ -2794,9 +2822,9 @@ void Foam::polyTopoChange::removeFace(const label faceI, const label mergeFaceI) } faceFromEdge_.erase(faceI); faceFromPoint_.erase(faceI); - flipFaceFlux_.erase(faceI); + flipFaceFlux_[faceI] = 0; faceZone_.erase(faceI); - faceZoneFlip_.erase(faceI); + faceZoneFlip_[faceI] = 0; } @@ -3090,6 +3118,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh labelListList faceZonePointMap(mesh.faceZones().size()); calcFaceZonePointMap(mesh, oldFaceZoneMeshPointMaps, faceZonePointMap); + labelHashSet flipFaceFluxSet(getSetIndices(flipFaceFlux_)); return autoPtr<mapPolyMesh> ( @@ -3118,7 +3147,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh reverseFaceMap_, reverseCellMap_, - flipFaceFlux_, + flipFaceFluxSet, patchPointMap, @@ -3381,6 +3410,8 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh writeMeshStats(mesh, Pout); } + labelHashSet flipFaceFluxSet(getSetIndices(flipFaceFlux_)); + return autoPtr<mapPolyMesh> ( new mapPolyMesh @@ -3408,7 +3439,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh reverseFaceMap_, reverseCellMap_, - flipFaceFlux_, + flipFaceFluxSet, patchPointMap, diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H index 9d0dce468c6cb288b2659587a5a5100931195fb8..77801e21f0dc33b703585f15ef3ffbd65a5c70ad 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H @@ -171,13 +171,13 @@ class polyTopoChange Map<label> faceFromEdge_; //- In mapping whether to reverse the flux. - labelHashSet flipFaceFlux_; + PackedBoolList flipFaceFlux_; //- Zone of face Map<label> faceZone_; //- Orientation of face in zone - Map<bool> faceZoneFlip_; + PackedBoolList faceZoneFlip_; //- Active faces label nActiveFaces_; @@ -216,8 +216,7 @@ class polyTopoChange template<class T> static void renumberKey(const labelList& map, Map<T>&); - //- Renumber elements of list according to map - static void renumber(const labelList&, DynamicList<label>&); + //- Renumber elements of container according to map static void renumber(const labelList&, labelHashSet&); //- Special handling of reverse maps which have <-1 in them static void renumberReverseMap(const labelList&, DynamicList<label>&); @@ -225,6 +224,9 @@ class polyTopoChange //- Renumber & compact elements of list according to map static void renumberCompact(const labelList&, labelList&); + //- Get all set elements as a labelHashSet + static labelHashSet getSetIndices(const PackedBoolList&); + //- Count number of added and removed quantities from maps. static void countMap ( diff --git a/src/dynamicMesh/slidingInterface/coupleSlidingInterface.C b/src/dynamicMesh/slidingInterface/coupleSlidingInterface.C index 82e77d76740542a500cfe0be5ccfbd7302bde215..18d1170c0073161c32dd6d9023aa0aef7fbc2d45 100644 --- a/src/dynamicMesh/slidingInterface/coupleSlidingInterface.C +++ b/src/dynamicMesh/slidingInterface/coupleSlidingInterface.C @@ -35,9 +35,11 @@ License #include "plane.H" #include "polyTopoChanger.H" #include "polyAddPoint.H" +#include "polyRemovePoint.H" #include "polyAddFace.H" #include "polyModifyPoint.H" #include "polyModifyFace.H" +#include "polyRemoveFace.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -765,6 +767,9 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const projectedSlavePoints ); + // Demand driven calculate the cut faces. Apart from the + // cutFaces/cutFaceMaster/cutFaceSlave no information from the cutPatch + // is used anymore! const faceList& cutFaces = cutPatch.cutFaces(); const labelList& cutFaceMaster = cutPatch.cutFaceMaster(); const labelList& cutFaceSlave = cutPatch.cutFaceSlave(); @@ -1109,22 +1114,26 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const { nOrphanedMasters++; - // Recover original orientation - ref.setAction - ( - polyModifyFace - ( - masterPatch[faceI], // new face - masterPatchAddr[faceI], // master face index - -1, // owner - -1, // neighbour - false, // flux flip - -1, // patch ID - false, // remove from zone - masterFaceZoneID_.index(), // zone ID - false // zone flip - ) - ); + //// Recover original orientation + //ref.setAction + //( + // polyModifyFace + // ( + // masterPatch[faceI], // new face + // masterPatchAddr[faceI], // master face index + // -1, // owner + // -1, // neighbour + // false, // flux flip + // -1, // patch ID + // false, // remove from zone + // masterFaceZoneID_.index(), // zone ID + // false // zone flip + // ) + //); + + //Pout<< "**MJ:deleting master face " << masterPatchAddr[faceI] + // << " old verts:" << masterPatch[faceI] << endl; + ref.setAction(polyRemoveFace(masterPatchAddr[faceI])); } } @@ -1136,22 +1145,26 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const { nOrphanedSlaves++; - // Recover original orientation - ref.setAction - ( - polyModifyFace - ( - slavePatch[faceI], // new face - slavePatchAddr[faceI], // slave face index - -1, // owner - -1, // neighbour - false, // flux flip - -1, // patch ID - false, // remove from zone - slaveFaceZoneID_.index(), // zone ID - false // zone flip - ) - ); + //// Recover original orientation + //ref.setAction + //( + // polyModifyFace + // ( + // slavePatch[faceI], // new face + // slavePatchAddr[faceI], // slave face index + // -1, // owner + // -1, // neighbour + // false, // flux flip + // -1, // patch ID + // false, // remove from zone + // slaveFaceZoneID_.index(), // zone ID + // false // zone flip + // ) + //); + + //Pout<< "**MJ:deleting slave face " << slavePatchAddr[faceI] + // << " old verts:" << slavePatch[faceI] << endl; + ref.setAction(polyRemoveFace(slavePatchAddr[faceI])); } } @@ -1400,24 +1413,46 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const face newFace; newFace.transfer(newFaceLabels); -// Pout << "Modifying master stick-out face " << curFaceID << " old face: " << oldFace << " new face: " << newFace << endl; + //Pout << "Modifying master stick-out face " << curFaceID + // << " old face: " << oldFace << " new face: " << newFace << endl; // Modify the face - ref.setAction - ( - polyModifyFace + if (mesh.isInternalFace(curFaceID)) + { + ref.setAction ( - newFace, // modified face - curFaceID, // label of face being modified - own[curFaceID], // owner - nei[curFaceID], // neighbour - false, // face flip - mesh.boundaryMesh().whichPatch(curFaceID), // patch for face - false, // remove from zone - modifiedFaceZone, // zone for face - modifiedFaceZoneFlip // face flip in zone - ) - ); + polyModifyFace + ( + newFace, // modified face + curFaceID, // label of face being modified + own[curFaceID], // owner + nei[curFaceID], // neighbour + false, // face flip + -1, // patch for face + false, // remove from zone + modifiedFaceZone, // zone for face + modifiedFaceZoneFlip // face flip in zone + ) + ); + } + else + { + ref.setAction + ( + polyModifyFace + ( + newFace, // modified face + curFaceID, // label of face being modified + own[curFaceID], // owner + -1, // neighbour + false, // face flip + mesh.boundaryMesh().whichPatch(curFaceID), // patch for face + false, // remove from zone + modifiedFaceZone, // zone for face + modifiedFaceZoneFlip // face flip in zone + ) + ); + } } } @@ -1688,21 +1723,42 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const // Pout << "Modifying slave stick-out face " << curFaceID << " old face: " << oldFace << " new face: " << newFace << endl; // Modify the face - ref.setAction - ( - polyModifyFace + if (mesh.isInternalFace(curFaceID)) + { + ref.setAction ( - newFace, // modified face - curFaceID, // label of face being modified - own[curFaceID], // owner - nei[curFaceID], // neighbour - false, // face flip - mesh.boundaryMesh().whichPatch(curFaceID), // patch for face - false, // remove from zone - modifiedFaceZone, // zone for face - modifiedFaceZoneFlip // face flip in zone - ) - ); + polyModifyFace + ( + newFace, // modified face + curFaceID, // label of face being modified + own[curFaceID], // owner + nei[curFaceID], // neighbour + false, // face flip + -1, // patch for face + false, // remove from zone + modifiedFaceZone, // zone for face + modifiedFaceZoneFlip // face flip in zone + ) + ); + } + else + { + ref.setAction + ( + polyModifyFace + ( + newFace, // modified face + curFaceID, // label of face being modified + own[curFaceID], // owner + -1, // neighbour + false, // face flip + mesh.boundaryMesh().whichPatch(curFaceID), // patch for face + false, // remove from zone + modifiedFaceZone, // zone for face + modifiedFaceZoneFlip // face flip in zone + ) + ); + } } } @@ -1735,15 +1791,25 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const // slave patch nRetiredPoints++; + //ref.setAction + //( + // polyModifyPoint + // ( + // slaveMeshPoints[pointI], // point ID + // points[slaveMeshPoints[pointI]], // point + // false, // remove from zone + // mesh.pointZones().whichZone(slaveMeshPoints[pointI]),// zone + // false // in a cell + // ) + //); + //Pout<< "MJ retire slave point " << slaveMeshPoints[pointI] + // << " coord " << points[slaveMeshPoints[pointI]] + // << endl; ref.setAction ( - polyModifyPoint + polyRemovePoint ( - slaveMeshPoints[pointI], // point ID - points[slaveMeshPoints[pointI]], // point - false, // remove from zone - mesh.pointZones().whichZone(slaveMeshPoints[pointI]),// zone - false // in a cell + slaveMeshPoints[pointI] ) ); diff --git a/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.C b/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.C index 11c401027d3f92e3780991ad3b3c036798543e5b..eb191b3f0f124bfd971fa91d9e6e3bcb5fb6bf4a 100644 --- a/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.C +++ b/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.C @@ -28,6 +28,8 @@ Description #include "enrichedPatch.H" #include "demandDrivenData.H" +#include "OFstream.H" +#include "meshTools.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -249,6 +251,33 @@ bool Foam::enrichedPatch::checkSupport() const } +void Foam::enrichedPatch::writeOBJ(const fileName& fName) const +{ + OFstream str(fName); + + const pointField& lp = localPoints(); + + forAll(lp, pointI) + { + meshTools::writeOBJ(str, lp[pointI]); + } + + const faceList& faces = localFaces(); + + forAll(faces, faceI) + { + const face& f = faces[faceI]; + + str << 'f'; + forAll(f, fp) + { + str << ' ' << f[fp]+1; + } + str << nl; + } +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // diff --git a/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.H b/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.H index 0bf22c513cb7df9510b7ed9bfa3c7d53728f1ba5..f8f7e8f5e9812f399669891852f5204f830e45d8 100644 --- a/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.H +++ b/src/dynamicMesh/slidingInterface/enrichedPatch/enrichedPatch.H @@ -199,9 +199,9 @@ public: ( const primitiveFacePatch& masterPatch, const primitiveFacePatch& slavePatch, - const labelList& slavePointPointHits, - const labelList& slavePointEdgeHits, - const List<objectHit>& slavePointFaceHits + const labelList& slavePointPointHits,// -1 or common point snapped to + const labelList& slavePointEdgeHits, // -1 or common edge snapped to + const List<objectHit>& slavePointFaceHits // master face snapped to ); @@ -276,6 +276,10 @@ public: //- Check if the patch is fully supported bool checkSupport() const; + + + //- Debugging: dump graphical representation to obj format file + void writeOBJ(const fileName&) const; }; diff --git a/src/dynamicMesh/slidingInterface/slidingInterface.C b/src/dynamicMesh/slidingInterface/slidingInterface.C index 0f8dd3603af39d6de31a581a915de396546a7d93..80d68749e84ae89a39ec3d900c418fd34457126a 100644 --- a/src/dynamicMesh/slidingInterface/slidingInterface.C +++ b/src/dynamicMesh/slidingInterface/slidingInterface.C @@ -664,14 +664,15 @@ void Foam::slidingInterface::updateMesh(const mapPolyMesh& m) masterPatchID_.update(mesh.boundaryMesh()); slavePatchID_.update(mesh.boundaryMesh()); - if (!attached()) - { - calcAttachedAddressing(); - } - else - { - renumberAttachedAddressing(m); - } +//MJ:Disabled updating +// if (!attached()) +// { +// calcAttachedAddressing(); +// } +// else +// { +// renumberAttachedAddressing(m); +// } } diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 54afdb355197c66add7dfcee688bec1e63ad50fe..54bfbc7cf6e4a46600704deee7add747fd581d92 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -39,26 +39,41 @@ fvMeshMapper = fvMesh/fvMeshMapper $(fvMeshMapper)/fvPatchMapper.C $(fvMeshMapper)/fvSurfaceMapper.C + extendedStencil = fvMesh/extendedStencil -$(extendedStencil)/extendedStencil.C -$(extendedStencil)/extendedUpwindStencil.C -$(extendedStencil)/extendedCentredStencil.C - -$(extendedStencil)/faceStencil/faceStencil.C -$(extendedStencil)/faceStencil/faceEdgeCellStencil.C -$(extendedStencil)/faceStencil/cellFaceCellStencil.C -$(extendedStencil)/faceStencil/cellPointCellStencil.C -$(extendedStencil)/faceStencil/cellEdgeCellStencil.C - -$(extendedStencil)/extendedStencilMeshObjects/centredCECStencilObject.C -$(extendedStencil)/extendedStencilMeshObjects/centredCFCStencilObject.C -$(extendedStencil)/extendedStencilMeshObjects/centredCPCStencilObject.C -$(extendedStencil)/extendedStencilMeshObjects/centredFECStencilObject.C - -$(extendedStencil)/extendedStencilMeshObjects/upwindCECStencilObject.C -$(extendedStencil)/extendedStencilMeshObjects/upwindCFCStencilObject.C -$(extendedStencil)/extendedStencilMeshObjects/upwindCPCStencilObject.C -$(extendedStencil)/extendedStencilMeshObjects/upwindFECStencilObject.C + +cellToCell = $(extendedStencil)/cellToCell +$(cellToCell)/fullStencils/cellToCellStencil.C +$(cellToCell)/fullStencils/CFCCellToCellStencil.C +$(cellToCell)/fullStencils/CPCCellToCellStencil.C +$(cellToCell)/fullStencils/CECCellToCellStencil.C + +cellToFace = $(extendedStencil)/cellToFace +$(cellToFace)/fullStencils/cellToFaceStencil.C +$(cellToFace)/fullStencils/CFCCellToFaceStencil.C +$(cellToFace)/fullStencils/CECCellToFaceStencil.C +$(cellToFace)/fullStencils/CPCCellToFaceStencil.C +$(cellToFace)/fullStencils/FECCellToFaceStencil.C +$(cellToFace)/extendedCellToFaceStencil.C +$(cellToFace)/extendedCentredCellToFaceStencil.C +$(cellToFace)/extendedUpwindCellToFaceStencil.C +$(cellToFace)/MeshObjects/centredCECCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/centredCFCCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/centredCPCCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/centredFECCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/upwindCECCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/upwindCFCCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/upwindCPCCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/upwindFECCellToFaceStencilObject.C +$(cellToFace)/MeshObjects/pureUpwindCFCCellToFaceStencilObject.C + +faceToCell = $(extendedStencil)/faceToCell +$(faceToCell)/fullStencils/faceToCellStencil.C +$(faceToCell)/fullStencils/CFCFaceToCellStencil.C +$(faceToCell)/extendedFaceToCellStencil.C +$(faceToCell)/extendedCentredFaceToCellStencil.C +$(faceToCell)/MeshObjects/centredCFCFaceToCellStencilObject.C + fvPatchFields = fields/fvPatchFields $(fvPatchFields)/fvPatchField/fvPatchFields.C @@ -93,8 +108,7 @@ $(derivedFvPatchFields)/advective/advectiveFvPatchFields.C $(derivedFvPatchFields)/directMappedFixedValue/directMappedFixedValueFvPatchFields.C $(derivedFvPatchFields)/directMappedVelocityFluxFixedValue/directMappedVelocityFluxFixedValueFvPatchField.C $(derivedFvPatchFields)/fan/fanFvPatchFields.C -$(derivedFvPatchFields)/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C -$(derivedFvPatchFields)/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C +$(derivedFvPatchFields)/buoyantPressure/buoyantPressureFvPatchScalarField.C $(derivedFvPatchFields)/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.C $(derivedFvPatchFields)/fixedInternalValueFvPatchField/fixedInternalValueFvPatchFields.C $(derivedFvPatchFields)/fixedNormalSlip/fixedNormalSlipFvPatchFields.C @@ -133,6 +147,7 @@ $(derivedFvPatchFields)/turbulentInlet/turbulentInletFvPatchFields.C $(derivedFvPatchFields)/turbulentIntensityKineticEnergyInlet/turbulentIntensityKineticEnergyInletFvPatchScalarField.C $(derivedFvPatchFields)/uniformFixedValue/uniformFixedValueFvPatchFields.C $(derivedFvPatchFields)/waveTransmissive/waveTransmissiveFvPatchFields.C +$(derivedFvPatchFields)/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C fvsPatchFields = fields/fvsPatchFields $(fvsPatchFields)/fvsPatchField/fvsPatchFields.C @@ -166,6 +181,8 @@ $(interpolation)/interpolationCell/makeInterpolationCell.C $(interpolation)/interpolationCellPoint/cellPointWeight/cellPointWeight.C $(interpolation)/interpolationCellPoint/makeInterpolationCellPoint.C $(interpolation)/interpolationCellPointFace/makeInterpolationCellPointFace.C +$(interpolation)/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.C +$(interpolation)/interpolationCellPointWallModified/makeInterpolationCellPointWallModified.C volPointInterpolation = interpolation/volPointInterpolation $(volPointInterpolation)/pointPatchInterpolation/pointPatchInterpolation.C @@ -200,6 +217,10 @@ $(schemes)/quadraticFit/quadraticFit.C $(schemes)/quadraticLinearUpwindFit/quadraticLinearUpwindFit.C $(schemes)/quadraticUpwindFit/quadraticUpwindFit.C $(schemes)/cubicUpwindFit/cubicUpwindFit.C +/* +$(schemes)/quadraticLinearPureUpwindFit/quadraticLinearPureUpwindFit.C +*/ +$(schemes)/linearPureUpwindFit/linearPureUpwindFit.C limitedSchemes = $(surfaceInterpolation)/limitedSchemes $(limitedSchemes)/limitedSurfaceInterpolationScheme/limitedSurfaceInterpolationSchemes.C @@ -295,18 +316,32 @@ $(laplacianSchemes)/gaussLaplacianScheme/gaussLaplacianSchemes.C finiteVolume/fvc/fvcMeshPhi.C -cfdTools/general/findRefCell/findRefCell.C -cfdTools/general/adjustPhi/adjustPhi.C -cfdTools/general/bound/bound.C -cfdTools/general/porousMedia/porousZone.C -cfdTools/general/porousMedia/porousZones.C -cfdTools/general/MRF/MRFZone.C -cfdTools/general/MRF/MRFZones.C -cfdTools/general/fieldSources/pressureGradientExplicitSource/pressureGradientExplicitSource.C -cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.C -cfdTools/general/SRF/SRFModel/SRFModel/SRFModel.C -cfdTools/general/SRF/SRFModel/SRFModel/newSRFModel.C -cfdTools/general/SRF/SRFModel/rpm/rpm.C -cfdTools/general/SRF/derivedFvPatchFields/SRFVelocityFvPatchVectorField/SRFVelocityFvPatchVectorField.C +general = cfdTools/general +$(general)/findRefCell/findRefCell.C +$(general)/adjustPhi/adjustPhi.C +$(general)/bound/bound.C + +porousMedia = $(general)/porousMedia +$(porousMedia)/porousZone.C +$(porousMedia)/porousZones.C + +MRF = $(general)/MRF +$(MRF)/MRFZone.C +$(MRF)/MRFZones.C + +SRF = $(general)/SRF +$(SRF)/SRFModel/SRFModel/SRFModel.C +$(SRF)/SRFModel/SRFModel/newSRFModel.C +$(SRF)/SRFModel/rpm/rpm.C +$(SRF)/derivedFvPatchFields/SRFVelocityFvPatchVectorField/SRFVelocityFvPatchVectorField.C + +fieldSources = $(general)/fieldSources +$(fieldSources)/pressureGradientExplicitSource/pressureGradientExplicitSource.C +$(fieldSources)/timeActivatedExplicitSource/timeActivatedExplicitSource.C +$(fieldSources)/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.C + +$(fieldSources)/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.C +$(fieldSources)/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.C +$(fieldSources)/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesIO.C LIB = $(FOAM_LIBBIN)/libfiniteVolume diff --git a/src/finiteVolume/cfdTools/compressible/compressibleContinuityErrs.H b/src/finiteVolume/cfdTools/compressible/compressibleContinuityErrs.H index b846a36cde00196ab2210bc8d0ad705887ebc4f3..9500b6d6713d3f17b48f5a242680d34155f28b33 100644 --- a/src/finiteVolume/cfdTools/compressible/compressibleContinuityErrs.H +++ b/src/finiteVolume/cfdTools/compressible/compressibleContinuityErrs.H @@ -33,15 +33,11 @@ Description { dimensionedScalar totalMass = fvc::domainIntegrate(rho); - scalar sumLocalContErr = - ( - fvc::domainIntegrate(mag(rho - thermo->rho()))/totalMass - ).value(); - - scalar globalContErr = - ( - fvc::domainIntegrate(rho - thermo->rho())/totalMass - ).value(); + scalar sumLocalContErr = + (fvc::domainIntegrate(mag(rho - thermo.rho()))/totalMass).value(); + + scalar globalContErr = + (fvc::domainIntegrate(rho - thermo.rho())/totalMass).value(); cumulativeContErr += globalContErr; diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C index ce32ad5b84c2ac57f520161ad93bd8ec1f8a14d5..3618d87ef5dfa6ea4ea03003cf5928d4d3c3c2e0 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.C @@ -312,6 +312,31 @@ void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn) const } +void Foam::MRFZone::addCoriolis +( + const volScalarField& rho, + fvVectorMatrix& UEqn +) const +{ + if (cellZoneID_ == -1) + { + return; + } + + const labelList& cells = mesh_.cellZones()[cellZoneID_]; + const scalarField& V = mesh_.V(); + vectorField& Usource = UEqn.source(); + const vectorField& U = UEqn.psi(); + const vector& Omega = Omega_.value(); + + forAll(cells, i) + { + label celli = cells[i]; + Usource[celli] -= V[celli]*rho[celli]*(Omega ^ U[celli]); + } +} + + void Foam::MRFZone::relativeVelocity(volVectorField& U) const { const volVectorField& C = mesh_.C(); diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H index 9fa3085914151d22df5fe9c59b0fef097878749d..d5554a5b0810ea1fab45d5474df22397db3390d7 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZone.H +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZone.H @@ -154,6 +154,9 @@ public: //- Add the Coriolis force contribution to the momentum equation void addCoriolis(fvVectorMatrix& UEqn) const; + //- Add the Coriolis force contribution to the momentum equation + void addCoriolis(const volScalarField& rho, fvVectorMatrix& UEqn) const; + //- Make the given absolute velocity relative within the MRF region void relativeVelocity(volVectorField& U) const; diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZones.C b/src/finiteVolume/cfdTools/general/MRF/MRFZones.C index 3e6854e3de3de0e92d8ace6ae528d9febf31b5b5..5ef8b3ee83ffbac7bdb843f8873d842aedd5208d 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZones.C +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZones.C @@ -65,6 +65,19 @@ void Foam::MRFZones::addCoriolis(fvVectorMatrix& UEqn) const } +void Foam::MRFZones::addCoriolis +( + const volScalarField& rho, + fvVectorMatrix& UEqn +) const +{ + forAll(*this, i) + { + operator[](i).addCoriolis(rho, UEqn); + } +} + + void Foam::MRFZones::relativeVelocity(volVectorField& U) const { forAll(*this, i) diff --git a/src/finiteVolume/cfdTools/general/MRF/MRFZones.H b/src/finiteVolume/cfdTools/general/MRF/MRFZones.H index 8895963606eaa46f167d3e4213ba5195d9d9322c..6e979903a9b803fa4b897863876b3f23765517ff 100644 --- a/src/finiteVolume/cfdTools/general/MRF/MRFZones.H +++ b/src/finiteVolume/cfdTools/general/MRF/MRFZones.H @@ -76,6 +76,9 @@ public: //- Add the Coriolis force contribution to the momentum equation void addCoriolis(fvVectorMatrix& UEqn) const; + //- Add the Coriolis force contribution to the momentum equation + void addCoriolis(const volScalarField& rho, fvVectorMatrix& UEqn) const; + //- Make the given absolute velocity relative within the MRF region void relativeVelocity(volVectorField& U) const; diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.C b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.C new file mode 100644 index 0000000000000000000000000000000000000000..624adadf67f938b02c247c34dcaca254becba9bc --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.C @@ -0,0 +1,175 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "timeActivatedExplicitCellSource.H" +#include "volFields.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::timeActivatedExplicitCellSource::updateCellSet() +{ + cellSelector_->applyToSet(topoSetSource::NEW, selectedCellSet_); + + Info<< " " << name_ << ": selected " + << returnReduce(selectedCellSet_.size(), sumOp<label>()) + << " cells" << nl << endl; + + V_ = scalarField(selectedCellSet_.size(), 1.0); + if (volumeType_ == vtAbsolute) + { + label i = 0; + forAllConstIter(cellSet, selectedCellSet_, iter) + { + V_[i++] = mesh_.V()[iter.key()]; + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::timeActivatedExplicitCellSource::timeActivatedExplicitCellSource +( + const word& name, + const fvMesh& mesh, + const dimensionSet& dims +) +: + timeActivatedExplicitSource(name, mesh, dims), + onValue_(readScalar(lookup("onValue"))), + offValue_(readScalar(lookup("offValue"))), + V_(0), + cellSource_(lookup("cellSource")), + cellSelector_ + ( + topoSetSource::New + ( + cellSource_, + mesh, + subDict(cellSource_ + "Coeffs") + ) + ), + selectedCellSet_ + ( + mesh, + name + "SourceCellSet", + mesh.nCells()/10 + 1 // Reasonable size estimate. + ) +{ + // Create the cell set + updateCellSet(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::scalar Foam::timeActivatedExplicitCellSource::onValue() const +{ + return onValue_; +} + + +Foam::scalar Foam::timeActivatedExplicitCellSource::offValue() const +{ + return offValue_; +} + + +Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > +Foam::timeActivatedExplicitCellSource::Su() +{ + tmp<DimensionedField<scalar, volMesh> > tSource + ( + new DimensionedField<scalar, volMesh> + ( + IOobject + ( + name_ + "Su", + runTime_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedScalar("zero", dimensions_, 0.0) + ) + ); + + scalar value = offValue_; + if + ( + active_ + && (runTime_.time().value() >= timeStart_) + && (runTime_.time().value() <= timeStart_ + duration_) + ) + { + // Update the cell set if the mesh is changing + if (mesh_.changing()) + { + updateCellSet(); + } + + value = onValue_; + } + + DimensionedField<scalar, volMesh>& sourceField = tSource(); + + label i = 0; + forAllConstIter(cellSet, selectedCellSet_, iter) + { + sourceField[iter.key()] = value/V_[i++]; + } + + return tSource; +} + + +bool Foam::timeActivatedExplicitCellSource::read() +{ + if (timeActivatedExplicitSource::read()) + { + lookup("onValue") >> onValue_; + lookup("offValue") >> offValue_; + lookup("cellSource") >> cellSource_; + cellSelector_ = + topoSetSource::New + ( + cellSource_, + mesh_, + subDict(cellSource_ + "Coeffs") + ); + updateCellSet(); + + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.H b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.H new file mode 100644 index 0000000000000000000000000000000000000000..96dfb3a5e822609beccce827aa97d5e88f98afdf --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitCellSource/timeActivatedExplicitCellSource.H @@ -0,0 +1,143 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::timeActivatedExplicitSourceNew + +Description + Creates a cell set source that is activated at a given time, and remains + active for a specified duration. The source value is either in specific + (XX/m3) or absolute (XX) units. + +SourceFiles + timeActivatedExplicitCellSource.C + +\*---------------------------------------------------------------------------*/ + +#ifndef timeActivatedExplicitCellSource_H +#define timeActivatedExplicitCellSource_H + +#include "timeActivatedExplicitSource.H" +#include "topoSetSource.H" +#include "cellSet.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class timeActivatedExplicitCellSource Declaration +\*---------------------------------------------------------------------------*/ + +class timeActivatedExplicitCellSource +: + public timeActivatedExplicitSource +{ +private: + + // Private member functions + + //- Update the cell set that the source is acting on + void updateCellSet(); + + + // Private Member Functions + + //- Disallow default bitwise copy construct + timeActivatedExplicitCellSource(const timeActivatedExplicitCellSource&); + + //- Disallow default bitwise assignment + void operator=(const timeActivatedExplicitCellSource&); + + +protected: + + // Protected data + + // Source properties + + //- Value when "on" + scalar onValue_; + + //- Value when "off" + scalar offValue_; + + + // Cell set + + //- Cell volumes + scalarList V_; + + //- Name of cell source (XXXToCell) + word cellSource_; + + //- Method by which the cells will be selected + autoPtr<topoSetSource> cellSelector_; + + //- Set of selected cells + cellSet selectedCellSet_; + + +public: + + // Constructors + + //- Construct from explicit source name and mesh + timeActivatedExplicitCellSource + ( + const word&, + const fvMesh&, + const dimensionSet& + ); + + + // Member Functions + + // Access + + //- Return the "on" value + virtual scalar onValue() const; + + //- Return the "off" value + virtual scalar offValue() const; + + //- Return a tmp field of the source + virtual tmp<DimensionedField<scalar, volMesh> > Su(); + + + //- Read properties dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.C b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.C new file mode 100644 index 0000000000000000000000000000000000000000..5d7ad2ac46b509fbafb1b6448d98395be7ab9cf3 --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.C @@ -0,0 +1,87 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "pointSourceProperties.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::pointSourceProperties::pointSourceProperties() +: + name_("unknownPointSourceName"), + timeStart_(0.0), + duration_(0.0), + location_(point::zero), + fieldData_() +{} + + +Foam::pointSourceProperties::pointSourceProperties(const dictionary& dict) +: + name_(dict.name().name()), + timeStart_(readScalar(dict.lookup("timeStart"))), + duration_(readScalar(dict.lookup("duration"))), + location_(dict.lookup("location")), + fieldData_(dict.lookup("fieldData")) +{} + + +Foam::pointSourceProperties::pointSourceProperties +( + const pointSourceProperties& psp +) +: + name_(psp.name_), + timeStart_(psp.timeStart_), + duration_(psp.duration_), + location_(psp.location_), + fieldData_(psp.fieldData_) +{} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +void Foam::pointSourceProperties::operator=(const pointSourceProperties& rhs) +{ + // Check for assignment to self + if (this == &rhs) + { + FatalErrorIn + ( + "pointSourceProperties::operator=(const pointSourceProperties&)" + ) << "Attempted assignment to self" << nl + << abort(FatalError); + } + + // Set updated values + name_ = rhs.name_; + timeStart_ = rhs.timeStart_; + duration_ = rhs.duration_; + location_ = rhs.location_; + fieldData_ = rhs.fieldData_;} + + + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.H b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.H new file mode 100644 index 0000000000000000000000000000000000000000..c83e3fc6662634ff92882909fdbc54721bfa2f58 --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourceProperties.H @@ -0,0 +1,158 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::pointSourceProperties + +Description + Helper class to describe point source properties + +SourceFiles + pointSourceProperties.C + +\*---------------------------------------------------------------------------*/ + +#ifndef pointSourceProperties_H +#define pointSourceProperties_H + +#include "IOdictionary.H" +#include "fvMesh.H" +#include "Time.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class pointSourceProperties Declaration +\*---------------------------------------------------------------------------*/ + +class pointSourceProperties +{ +protected: + + // Protected data + + typedef Tuple2<word, scalar> fieldNameValuePair; + + //- Source name + word name_; + + //- Time start + scalar timeStart_; + + //- Duration + scalar duration_; + + //- Point location + point location_; + + //- List of source field name vs value pairs + List<fieldNameValuePair> fieldData_; + + +public: + + // Constructors + + //- Construct null + pointSourceProperties(); + + //- Construct from dictionary + pointSourceProperties(const dictionary& dict); + + //- Construct from Istream + pointSourceProperties(Istream& is); + + //- Copy constructor + pointSourceProperties(const pointSourceProperties&); + + + // Member Functions + + // Access + + //- Return const access to the source name + inline const word& name() const; + + //- Return const access to the time start + inline scalar timeStart() const; + + //- Return const access to the time end + inline scalar timeEnd() const; + + //- Return const access to the duration + inline scalar duration() const; + + //- Return const access to the point location + inline const point& location() const; + + //- Return const access to the source field name vs value pairs + inline const List<fieldNameValuePair>& fieldData() const; + + + // Edit + + //- Return access to the source name + inline word& name(); + + //- Return access to the time start + inline scalar& timeStart(); + + //- Return access to the duration + inline scalar& duration(); + + //- Return access to the point location + inline point& location(); + + //- Return access to the source field name vs value pairs + inline List<fieldNameValuePair>& fieldData(); + + + // Member Operators + + void operator=(const pointSourceProperties&); + + // IOstream operators + + friend Istream& operator>>(Istream&, pointSourceProperties&); + friend Ostream& operator<<(Ostream&, const pointSourceProperties&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "pointSourcePropertiesI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfigI.H b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesI.H similarity index 56% rename from applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfigI.H rename to src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesI.H index 2cfd5bf57bcf750224f9d2c42f55633d36f4e4e9..60d02c2d5d14f295bee2ad0e2390c121312b52bf 100644 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfigI.H +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesI.H @@ -24,75 +24,76 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ +#include "pointSourceProperties.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -inline const List<word>& molConfig::molIdList() const +inline const Foam::word& Foam::pointSourceProperties::name() const { - return idList_; + return name_; } -inline const labelField& molConfig::id() const +inline Foam::scalar Foam::pointSourceProperties::timeStart() const { - return id_; + return timeStart_; } -inline const scalarField& molConfig::mass() const +inline Foam::scalar Foam::pointSourceProperties::timeEnd() const { - return mass_; + return timeStart_ + duration_; } -inline const vectorField& molConfig::positions() const +inline Foam::scalar Foam::pointSourceProperties::duration() const { - return positions_; + return duration_; } -inline const labelField& molConfig::cells() const +inline const Foam::point& Foam::pointSourceProperties::location() const { - return cells_; + return location_; } -inline const vectorField& molConfig::U() const +inline const Foam::List<Foam::pointSourceProperties::fieldNameValuePair>& +Foam::pointSourceProperties::fieldData() const { - return U_; + return fieldData_; } -inline const vectorField& molConfig::A() const +inline Foam::word& Foam::pointSourceProperties::name() { - return A_; + return name_; } -inline const labelField& molConfig::tethered() const +inline Foam::scalar& Foam::pointSourceProperties::timeStart() { - return tethered_; + return timeStart_; } -inline const vectorField& molConfig::tetherPositions() const +inline Foam::scalar& Foam::pointSourceProperties::duration() { - return tetherPositions_; + return duration_; } -inline label molConfig::nMol() const +inline Foam::point& Foam::pointSourceProperties::location() { - return nMol_; + return location_; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +inline Foam::List<Foam::pointSourceProperties::fieldNameValuePair>& +Foam::pointSourceProperties::fieldData() +{ + return fieldData_; +} -} // End namespace Foam // ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesIO.C b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesIO.C new file mode 100644 index 0000000000000000000000000000000000000000..5b0ca2e63efa8751afa1425704cb5d3f72d31d25 --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/pointSourceProperties/pointSourcePropertiesIO.C @@ -0,0 +1,88 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "pointSourceProperties.H" +#include "dictionaryEntry.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::pointSourceProperties::pointSourceProperties(Istream& is) +: + name_("unknownPointSourceName"), + timeStart_(0.0), + duration_(0.0), + location_(point::zero), + fieldData_() +{ + is.check("pointSourceProperties(Istream&)"); + + const dictionaryEntry entry(dictionary::null, is); + + name_ = entry.keyword(); + entry.lookup("timeStart") >> timeStart_; + entry.lookup("duration") >> duration_; + entry.lookup("location") >> location_; + entry.lookup("fieldData") >> fieldData_; +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::Istream& Foam::operator>>(Istream& is, pointSourceProperties& psp) +{ + is.check("Istream& operator>>(Istream&, pointSourceProperties&)"); + + const dictionaryEntry entry(dictionary::null, is); + + psp.name_ = entry.keyword(); + entry.lookup("timeStart") >> psp.timeStart_; + entry.lookup("duration") >> psp.duration_; + entry.lookup("location") >> psp.location_; + entry.lookup("fieldData") >> psp.fieldData_; + + return is; +} + + +Foam::Ostream& Foam::operator<<(Ostream& os, const pointSourceProperties& psp) +{ + os.check("Ostream& operator<<(Ostream&, const pointSourceProperties&)"); + + os << psp.name_ << nl << token::BEGIN_BLOCK << nl; + os.writeKeyword("timeStart") << psp.timeStart_ << token::END_STATEMENT << nl; + os.writeKeyword("duration") << psp.duration_ << token::END_STATEMENT << nl; + os.writeKeyword("location") << psp.location_ << token::END_STATEMENT << nl; + os.writeKeyword("fieldData") << psp.fieldData_ << token::END_STATEMENT << nl; + os << token::END_BLOCK << nl; + + os.check("Ostream& operator<<(Ostream&, const pointSourceProperties&)"); + + return os; +} + + + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.C b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.C new file mode 100644 index 0000000000000000000000000000000000000000..221b7949b4365c9bad6c6753e1cac6b831e579d5 --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.C @@ -0,0 +1,292 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "timeActivatedExplicitMulticomponentPointSource.H" +#include "volFields.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +Foam::label +Foam::timeActivatedExplicitMulticomponentPointSource::carrierFieldId +( + const word& fieldName +) +{ + forAll(carrierFields_, fieldI) + { + if (carrierFields_[fieldI].name() == fieldName) + { + return fieldI; + } + } + + return -1; +} + + +void Foam::timeActivatedExplicitMulticomponentPointSource::updateAddressing() +{ + forAll(pointSources_, sourceI) + { + const pointSourceProperties& psp = pointSources_[sourceI]; + bool foundCell = false; + label cid = mesh_.findCell(psp.location()); + if (cid >= 0) + { + foundCell = mesh_.pointInCell(psp.location(), cid); + } + reduce(foundCell, orOp<bool>()); + if (!foundCell) + { + label cid = mesh_.findNearestCell(psp.location()); + if (cid >= 0) + { + foundCell = mesh_.pointInCell(psp.location(), cid); + } + } + reduce(foundCell, orOp<bool>()); + + if (!foundCell) + { + FatalErrorIn + ( + "timeActivatedExplicitMulticomponentPointSource::" + "updateAddressing()" + ) << "Unable to find location " << psp.location() << " in mesh " + << "for source " << psp.name() << nl + << exit(FatalError); + } + else + { + cellOwners_[sourceI] = cid; + } + + fieldIds_[sourceI].setSize(psp.fieldData().size()); + forAll(psp.fieldData(), fieldI) + { + const word& fieldName = psp.fieldData()[fieldI].first(); + label cfid = carrierFieldId(fieldName); + if (cfid < 0) + { + FatalErrorIn + ( + "timeActivatedExplicitMulticomponentPointSource::" + "updateAddressing()" + ) << "Unable to find field " << fieldName << " in carrier " + << "fields for source " << psp.name() << nl + << exit(FatalError); + } + else + { + fieldIds_[sourceI][fieldI] = cfid; + } + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::timeActivatedExplicitMulticomponentPointSource:: +timeActivatedExplicitMulticomponentPointSource +( + const word& name, + const fvMesh& mesh, + const PtrList<volScalarField>& carrierFields, + const dimensionSet& dims +) +: + IOdictionary + ( + IOobject + ( + name + "Properties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ), + name_(name), + mesh_(mesh), + runTime_(mesh.time()), + dimensions_(dims), + carrierFields_(carrierFields), + active_(lookup("active")), + pointSources_(lookup("pointSources")), + cellOwners_(pointSources_.size()), + fieldIds_(pointSources_.size()) +{ + // Initialise the field addressing + updateAddressing(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > +Foam::timeActivatedExplicitMulticomponentPointSource::Su +( + const label fieldI +) +{ + if (mesh_.changing()) + { + updateAddressing(); + } + + tmp<DimensionedField<scalar, volMesh> > tSource + ( + new DimensionedField<scalar, volMesh> + ( + IOobject + ( + name_ + carrierFields_[fieldI].name() + "Su", + runTime_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedScalar("zero", dimensions_, 0.0) + ) + ); + + if (active_) + { + DimensionedField<scalar, volMesh>& sourceField = tSource(); + + const scalarField& V = mesh_.V(); + const scalar dt = runTime_.deltaT().value(); + + forAll(pointSources_, sourceI) + { + const pointSourceProperties& psp = pointSources_[sourceI]; + + forAll(fieldIds_[sourceI], i) + { + if + ( + fieldIds_[sourceI][i] == fieldI + && (runTime_.time().value() >= psp.timeStart()) + && (runTime_.time().value() <= psp.timeEnd()) + ) + { + const label cid = cellOwners_[sourceI]; + if (cid >= 0) + { + sourceField[cid] += + dt*psp.fieldData()[i].second()/V[cid]; + } + } + } + } + } + + return tSource; +} + + +Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > +Foam::timeActivatedExplicitMulticomponentPointSource::Su() +{ + if (mesh_.changing()) + { + updateAddressing(); + } + + tmp<DimensionedField<scalar, volMesh> > tSource + ( + new DimensionedField<scalar, volMesh> + ( + IOobject + ( + name_ + "TotalSu", + runTime_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedScalar("zero", dimensions_, 0.0) + ) + ); + + if (active_) + { + DimensionedField<scalar, volMesh>& sourceField = tSource(); + + const scalarField& V = mesh_.V(); + const scalar dt = runTime_.deltaT().value(); + + forAll(pointSources_, sourceI) + { + const pointSourceProperties& psp = pointSources_[sourceI]; + + forAll(fieldIds_[sourceI], i) + { + if + ( + (runTime_.time().value() >= psp.timeStart()) + && (runTime_.time().value() <= psp.timeEnd()) + ) + { + const label cid = cellOwners_[sourceI]; + if (cid >= 0) + { + sourceField[cid] += + dt*psp.fieldData()[i].second()/V[cid]; + } + } + } + } + } + + return tSource; +} + + +bool Foam::timeActivatedExplicitMulticomponentPointSource::read() +{ + if (regIOobject::read()) + { + lookup("active") >> active_; + lookup("pointSources") >> pointSources_; + + cellOwners_.setSize(pointSources_.size()); + + updateAddressing(); + + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.H b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.H new file mode 100644 index 0000000000000000000000000000000000000000..a1d74268f90d8ba9db44cddc03b8f70316bc776b --- /dev/null +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitMulticomponentPointSource/timeActivatedExplicitMulticomponentPointSource.H @@ -0,0 +1,185 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::timeActivatedExplicitMulticomponentPointSourceNew + +Description + Provides a mechanism to introduce point sources to a set of carrier fields. + Carrier fields are supplied on consruction, and interrogated to provide the + field indices of the sources. + + Source values are assumed to be in <quantity>/s, and divided through by the + cell volumes before being returned, e.g. for a kg/s source + + Properties are described in a <name>Properties dictionary + + active true; // are sources active (true/false) + + pointSources + ( + source1 // source name + { + timeStart 0.0; + duration 1.0; + location (0 0 0); + fieldData + ( + (H2O 0.1) // kg/s + (O2 0.05) // kg/s + ); + } + source2 // source name + { + timeStart 0.5; + duration 2.0; + location (1 1 1); + fieldData + ( + (NO 0.1) // kg/s + (CO2 0.05) // kg/s + (H2 0.001) // kg/s + ); + } + ); + + +SourceFiles + timeActivatedExplicitMulticomponentPointSourceNew.C + +\*---------------------------------------------------------------------------*/ + +#ifndef timeActivatedExplicitMulticomponentPointSource_H +#define timeActivatedExplicitMulticomponentPointSource_H + +#include "IOdictionary.H" +#include "fvMesh.H" +#include "Time.H" +#include "pointSourceProperties.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class timeActivatedExplicitMulitcomponentPointSource Declaration +\*---------------------------------------------------------------------------*/ + +class timeActivatedExplicitMulticomponentPointSource +: + public IOdictionary +{ +protected: + + // Protected data + + //- Name of the source + word name_; + + //- Reference to the mesh + const fvMesh& mesh_; + + //- Reference to time database + const Time& runTime_; + + //- Source dimensions + const dimensionSet& dimensions_; + + //- Reference to the multicomponent carrier fields + const PtrList<volScalarField>& carrierFields_; + + //- Active flag + bool active_; + + //- List of point source properties + List<pointSourceProperties> pointSources_; + + //- List of cell owners for point source locations + List<label> cellOwners_; + + //- List of field ids for each source + List<labelList> fieldIds_; + + + // Protected Member Functions + + //- Return the id of field given its name + label carrierFieldId(const word& fieldName); + + //- Update the addressing between source and carrier fields + void updateAddressing(); + + //- Disallow default bitwise copy construct + timeActivatedExplicitMulticomponentPointSource + ( + const timeActivatedExplicitMulticomponentPointSource& + ); + + //- Disallow default bitwise assignment + void operator=(const timeActivatedExplicitMulticomponentPointSource&); + + +public: + + // Constructors + + //- Construct from components + timeActivatedExplicitMulticomponentPointSource + ( + const word&, + const fvMesh&, + const PtrList<volScalarField>&, + const dimensionSet& + ); + + + // Member Functions + + // Access + + //- Return a tmp field of the source for field fieldI + virtual tmp<DimensionedField<scalar, volMesh> > Su + ( + const label fieldI + ); + + //- Return a tmp field of the total source + virtual tmp<DimensionedField<scalar, volMesh> > Su(); + + + //- Read properties dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.C b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.C index 48de23bfe239d49755f674995ac405fb20409362..c59b74a770eba9dc0aba0fbca48068d46a22e6ba 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.C +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.C @@ -44,33 +44,11 @@ const Foam::NamedEnum<Foam::timeActivatedExplicitSource::volumeType, 2> Foam::timeActivatedExplicitSource::volumeTypeNames_; -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Foam::timeActivatedExplicitSource::updateCellSet() -{ - cellSelector_->applyToSet(topoSetSource::NEW, selectedCellSet_); - - Info<< " " << sourceName_ << ": selected " - << returnReduce(selectedCellSet_.size(), sumOp<label>()) - << " cells" << nl << endl; - - V_ = scalarField(selectedCellSet_.size(), 1.0); - if (volumeType_ == vtAbsolute) - { - label i = 0; - forAllConstIter(cellSet, selectedCellSet_, iter) - { - V_[i++] = mesh_.V()[iter.key()]; - } - } -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::timeActivatedExplicitSource::timeActivatedExplicitSource ( - const word& sourceName, + const word& name, const fvMesh& mesh, const dimensionSet& dims ) @@ -79,104 +57,72 @@ Foam::timeActivatedExplicitSource::timeActivatedExplicitSource ( IOobject ( - sourceName + "Properties", + name + "Properties", mesh.time().constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ), - sourceName_(sourceName), mesh_(mesh), runTime_(mesh.time()), + name_(name), + active_(lookup("active")), dimensions_(dims), volumeType_(volumeTypeNames_.read(lookup("volumeType"))), timeStart_(readScalar(lookup("timeStart"))), - duration_(readScalar(lookup("duration"))), - onValue_(readScalar(lookup("onValue"))), - offValue_(readScalar(lookup("offValue"))), - currentValue_(0.0), - V_(0), - cellSource_(lookup("cellSource")), - cellSelector_ - ( - topoSetSource::New - ( - cellSource_, - mesh, - subDict(cellSource_ + "Coeffs") - ) - ), - selectedCellSet_ - ( - mesh, - sourceName + "SourceCellSet", - mesh.nCells()/10 + 1 // Reasonable size estimate. - ) -{ - // Create the cell set - updateCellSet(); + duration_(readScalar(lookup("duration"))) +{} + - // Initialise the value - update(); +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const Foam::fvMesh& Foam::timeActivatedExplicitSource::mesh() const +{ + return mesh_; } -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +const Foam::Time& Foam::timeActivatedExplicitSource::runTime() const +{ + return runTime_; +} -Foam::scalar Foam::timeActivatedExplicitSource::timeStart() const + +const Foam::word& Foam::timeActivatedExplicitSource::name() const { - return timeStart_; + return name_; } -Foam::scalar Foam::timeActivatedExplicitSource::duration() const +const Foam::Switch& Foam::timeActivatedExplicitSource::active() const { - return duration_; + return active_; } -const Foam::dimensionedScalar -Foam::timeActivatedExplicitSource::currentValue() const +const Foam::dimensionSet& Foam::timeActivatedExplicitSource::dimensions() const { - return dimensionedScalar - ( - sourceName_, - dimensions_, - currentValue_ - ); + return dimensions_; } -Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > -Foam::timeActivatedExplicitSource::Su() const +const Foam::timeActivatedExplicitSource::volumeType& +Foam::timeActivatedExplicitSource::volume() const { - tmp<DimensionedField<scalar, volMesh> > tSource - ( - new DimensionedField<scalar, volMesh> - ( - IOobject - ( - sourceName_ + "Su", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("zero", dimensions_, 0.0) - ) - ); + return volumeType_; +} - DimensionedField<scalar, volMesh>& sourceField = tSource(); - label i = 0; - forAllConstIter(cellSet, selectedCellSet_, iter) - { - sourceField[iter.key()] = currentValue_/V_[i++]; - } +Foam::scalar Foam::timeActivatedExplicitSource::timeStart() const +{ + return timeStart_; +} + - return tSource; +Foam::scalar Foam::timeActivatedExplicitSource::duration() const +{ + return duration_; } @@ -184,22 +130,18 @@ bool Foam::timeActivatedExplicitSource::read() { if (regIOobject::read()) { - volumeType_ = volumeTypeNames_.read(lookup("volumeType")); - lookup("timeStart") >> duration_; - lookup("duration") >> duration_; - lookup("onValue") >> onValue_; - lookup("offValue") >> offValue_; - lookup("cellSource") >> cellSource_; - cellSelector_ = - topoSetSource::New - ( - cellSource_, - mesh_, - subDict(cellSource_ + "Coeffs") - ); - updateCellSet(); - - return true; + lookup("active") >> active_; + if (active_) + { + volumeType_ = volumeTypeNames_.read(lookup("volumeType")); + lookup("timeStart") >> duration_; + lookup("duration") >> duration_; + return true; + } + else + { + return false; + } } else { @@ -208,28 +150,6 @@ bool Foam::timeActivatedExplicitSource::read() } -void Foam::timeActivatedExplicitSource::update() -{ - // Set the source value - if - ( - (runTime_.time().value() >= timeStart_) - && (runTime_.time().value() <= timeStart_ + duration_) - ) - { - currentValue_ = onValue_; - } - else - { - currentValue_ = offValue_; - } - - // Update the cell set if the mesh is changing - if (mesh_.changing()) - { - updateCellSet(); - } -} // ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.H b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.H index f258bc1f7fce14d91ea23891c74604ceb19dd041..15bccc582f3a620bc5fa40e6334b828cf6b61968 100644 --- a/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.H +++ b/src/finiteVolume/cfdTools/general/fieldSources/timeActivatedExplicitSource/timeActivatedExplicitSource.H @@ -23,15 +23,20 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::timeActivatedExplicitSourceNew + Foam::timeActivatedExplicitSource Description - Creates a cell set source that is activated at a given time, and remains - active for a specified duration. The source value is either in specific - (XX/m3) or absolute (XX) units. + Base class for field sources. Provides: + - name + - references to mesh and time + - dimensions + - volume type + - startTime + - duration + - read (from <sourceName>Properties dictionary) SourceFiles - timeActivatedExplicitSourceNew.C + timeActivatedExplicitSource.C \*---------------------------------------------------------------------------*/ @@ -40,8 +45,6 @@ SourceFiles #include "IOdictionary.H" #include "autoPtr.H" -#include "topoSetSource.H" -#include "cellSet.H" #include "fvMesh.H" #include "Time.H" #include "NamedEnum.H" @@ -72,19 +75,19 @@ public: private: - // Private member functions + // Private Member Functions - //- Update the cell set that the source is acting on - void updateCellSet(); + //- Disallow default bitwise copy construct + timeActivatedExplicitSource(const timeActivatedExplicitSource&); + + //- Disallow default bitwise assignment + void operator=(const timeActivatedExplicitSource&); protected: // Protected data - //- Name of the source - word sourceName_; - //- Reference to the mesh const fvMesh& mesh_; @@ -94,6 +97,12 @@ protected: // Source properties + //- Name of the source + word name_; + + //- Active flag + Switch active_; + //- Dimensions const dimensionSet dimensions_; @@ -106,39 +115,6 @@ protected: //- Duration [s] scalar duration_; - //- Value when "on" - scalar onValue_; - - //- Value when "off" - scalar offValue_; - - //- Current source value - scalar currentValue_; - - - // Cell set - - //- Cell volumes - scalarList V_; - - //- Name of cell source (XXXToCell) - word cellSource_; - - //- Method by which the cells will be selected - autoPtr<topoSetSource> cellSelector_; - - //- Set of selected cells - cellSet selectedCellSet_; - - - // Protected Member Functions - - //- Disallow default bitwise copy construct - timeActivatedExplicitSource(const timeActivatedExplicitSource&); - - //- Disallow default bitwise assignment - void operator=(const timeActivatedExplicitSource&); - public: @@ -157,24 +133,33 @@ public: // Access - //- Return the start time - scalar timeStart() const; + //- Return the reference to the mesh + virtual const fvMesh& mesh() const; - //- Return the duration - scalar duration() const; + //- Return the reference to the time database + virtual const Time& runTime() const; + + //- Return the source name + virtual const word& name() const; + + //- Return the active flag + virtual const Switch& active() const; + + //- Return the dimensions + virtual const dimensionSet& dimensions() const; - //- Return the current value of the source - const dimensionedScalar currentValue() const; + //- Return the volume type + virtual const volumeType& volume() const; - //- Return a tmp field of the source - virtual tmp<DimensionedField<scalar, volMesh> > Su() const; + //- Return the start time + virtual scalar timeStart() const; + + //- Return the duration + virtual scalar duration() const; //- Read properties dictionary virtual bool read(); - - //- Update - virtual void update(); }; diff --git a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C index ed450ea4883c6ff4652872a4a5f7eae633e2f129..3d92d45ce7de3210f3c4d79b0f391cbefaced773 100644 --- a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C +++ b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C @@ -92,6 +92,7 @@ void Foam::setRefCell dict ) << "Unable to set reference cell for field " << field.name() << nl << " Reference point " << refPointName + << " " << refPointi << " found on " << sumHasRef << " domains (should be one)" << nl << exit(FatalIOError); } @@ -108,7 +109,7 @@ void Foam::setRefCell " bool\n" ")", dict - ) << "Unable to set reference cell for field" << field.name() + ) << "Unable to set reference cell for field " << field.name() << nl << " Please supply either " << refCellName << " or " << refPointName << nl << exit(FatalIOError); diff --git a/src/finiteVolume/cfdTools/general/include/readPISOControls.H b/src/finiteVolume/cfdTools/general/include/readPISOControls.H index 5f14c2bcae2f56ecdfa998ba1224e6b3ad438d0a..de763e00b0c4b92769dcdbcdacbeec2049ec9a44 100644 --- a/src/finiteVolume/cfdTools/general/include/readPISOControls.H +++ b/src/finiteVolume/cfdTools/general/include/readPISOControls.H @@ -13,7 +13,3 @@ int nOuterCorr = piso.lookupOrDefault<int>("nOuterCorrectors", 1); - - bool ddtPhiCorr = - piso.lookupOrDefault<Switch>("ddtPhiCorr", false); - diff --git a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C index 686120b62d77e7c79803d7e56d2dcd961a67e178..f13e344375efb3cd476a9263a643ada04fcd78a4 100644 --- a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C +++ b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C @@ -79,6 +79,8 @@ Foam::porousZone::porousZone D_("D", dimensionSet(0, -2, 0, 0, 0), tensor::zero), F_("F", dimensionSet(0, -1, 0, 0, 0), tensor::zero) { + Info<< "Creating porous zone: " << name_ << endl; + if (cellZoneID_ == -1 && !Pstream::parRun()) { FatalErrorIn diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/buoyantPressure/buoyantPressureFvPatchScalarField.C similarity index 62% rename from src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C rename to src/finiteVolume/fields/fvPatchFields/derived/buoyantPressure/buoyantPressureFvPatchScalarField.C index c31f5acc5c3888b49479e7f11b791ae28d51c25c..cafc55aa3a534df59152b79f321556edef625290 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/buoyantPressure/buoyantPressureFvPatchScalarField.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ -#include "fixedFluxBuoyantPressureFvPatchScalarField.H" +#include "buoyantPressureFvPatchScalarField.H" #include "addToRunTimeSelectionTable.H" #include "fvPatchFieldMapper.H" #include "volFields.H" @@ -36,69 +36,74 @@ namespace Foam // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -fixedFluxBuoyantPressureFvPatchScalarField:: -fixedFluxBuoyantPressureFvPatchScalarField +buoyantPressureFvPatchScalarField:: +buoyantPressureFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF ) : - fixedGradientFvPatchScalarField(p, iF) + fixedGradientFvPatchScalarField(p, iF), + rhoName_("rho") {} -fixedFluxBuoyantPressureFvPatchScalarField:: -fixedFluxBuoyantPressureFvPatchScalarField +buoyantPressureFvPatchScalarField:: +buoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& ptf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper + const dictionary& dict ) : - fixedGradientFvPatchScalarField(ptf, p, iF, mapper) -{} + fixedGradientFvPatchScalarField(p, iF), + rhoName_(dict.lookupOrDefault<word>("rho", "rho")) +{ + fvPatchField<scalar>::operator=(patchInternalField()); + gradient() = 0.0; +} -fixedFluxBuoyantPressureFvPatchScalarField:: -fixedFluxBuoyantPressureFvPatchScalarField +buoyantPressureFvPatchScalarField:: +buoyantPressureFvPatchScalarField ( + const buoyantPressureFvPatchScalarField& ptf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, - const dictionary& + const fvPatchFieldMapper& mapper ) : - fixedGradientFvPatchScalarField(p, iF) -{ - fvPatchField<scalar>::operator=(patchInternalField()); - gradient() = 0.0; -} + fixedGradientFvPatchScalarField(ptf, p, iF, mapper), + rhoName_(ptf.rhoName_) +{} -fixedFluxBuoyantPressureFvPatchScalarField:: -fixedFluxBuoyantPressureFvPatchScalarField +buoyantPressureFvPatchScalarField:: +buoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& wbppsf + const buoyantPressureFvPatchScalarField& ptf ) : - fixedGradientFvPatchScalarField(wbppsf) + fixedGradientFvPatchScalarField(ptf), + rhoName_(ptf.rhoName_) {} -fixedFluxBuoyantPressureFvPatchScalarField:: -fixedFluxBuoyantPressureFvPatchScalarField +buoyantPressureFvPatchScalarField:: +buoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& wbppsf, + const buoyantPressureFvPatchScalarField& ptf, const DimensionedField<scalar, volMesh>& iF ) : - fixedGradientFvPatchScalarField(wbppsf, iF) + fixedGradientFvPatchScalarField(ptf, iF), + rhoName_(ptf.rhoName_) {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void fixedFluxBuoyantPressureFvPatchScalarField::updateCoeffs() +void buoyantPressureFvPatchScalarField::updateCoeffs() { if (updated()) { @@ -111,17 +116,28 @@ void fixedFluxBuoyantPressureFvPatchScalarField::updateCoeffs() dimensionedVector g(environmentalProperties.lookup("g")); const fvPatchField<scalar>& rho = - patch().lookupPatchField<volScalarField, scalar>("rho"); + patch().lookupPatchField<volScalarField, scalar>(rhoName_); - gradient() = -rho.snGrad()*(g.value() & patch().Cf()); + // If the variable name is "pd" assume it is p - rho*g.h + // and set the gradient appropriately. + // Otherwise assume the variable is the static pressure. + if (dimensionedInternalField().name() == "pd") + { + gradient() = -rho.snGrad()*(g.value() & patch().Cf()); + } + else + { + gradient() = rho*(g.value() & patch().nf()); + } fixedGradientFvPatchScalarField::updateCoeffs(); } -void fixedFluxBuoyantPressureFvPatchScalarField::write(Ostream& os) const +void buoyantPressureFvPatchScalarField::write(Ostream& os) const { fixedGradientFvPatchScalarField::write(os); + os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl; writeEntry("value", os); } @@ -131,7 +147,7 @@ void fixedFluxBuoyantPressureFvPatchScalarField::write(Ostream& os) const makePatchTypeField ( fvPatchScalarField, - fixedFluxBuoyantPressureFvPatchScalarField + buoyantPressureFvPatchScalarField ); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/buoyantPressure/buoyantPressureFvPatchScalarField.H similarity index 73% rename from src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H rename to src/finiteVolume/fields/fvPatchFields/derived/buoyantPressure/buoyantPressureFvPatchScalarField.H index 3ce584bf873cef5a8a88804dd0076b82145be4c5..d698487e3650db3d1ea274cc3e649a84b6f68941 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/buoyantPressure/buoyantPressureFvPatchScalarField.H @@ -23,18 +23,21 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::fixedFluxBuoyantPressureFvPatchScalarField + Foam::buoyantPressureFvPatchScalarField Description - Foam::fixedFluxBuoyantPressureFvPatchScalarField + Set the pressure gradient boundary condition appropriately for buoyant flow. + + If the variable name is "pd" assume it is p - rho*g.h and set the gradient + appropriately. Otherwise assume the variable is the static pressure. SourceFiles - fixedFluxBuoyantPressureFvPatchScalarField.C + buoyantPressureFvPatchScalarField.C \*---------------------------------------------------------------------------*/ -#ifndef fixedFluxBuoyantPressureFvPatchScalarFields_H -#define fixedFluxBuoyantPressureFvPatchScalarFields_H +#ifndef buoyantPressureFvPatchScalarFields_H +#define buoyantPressureFvPatchScalarFields_H #include "fvPatchFields.H" #include "fixedGradientFvPatchFields.H" @@ -45,31 +48,36 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class fixedFluxBuoyantPressureFvPatch Declaration + Class buoyantPressureFvPatch Declaration \*---------------------------------------------------------------------------*/ -class fixedFluxBuoyantPressureFvPatchScalarField +class buoyantPressureFvPatchScalarField : public fixedGradientFvPatchScalarField { + // Private data + + //- Name of the density field used to calculate the buoyancy force + word rhoName_; + public: //- Runtime type information - TypeName("fixedFluxBuoyantPressure"); + TypeName("buoyantPressure"); // Constructors //- Construct from patch and internal field - fixedFluxBuoyantPressureFvPatchScalarField + buoyantPressureFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>& ); //- Construct from patch, internal field and dictionary - fixedFluxBuoyantPressureFvPatchScalarField + buoyantPressureFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>&, @@ -77,19 +85,19 @@ public: ); //- Construct by mapping given - // fixedFluxBuoyantPressureFvPatchScalarField onto a new patch - fixedFluxBuoyantPressureFvPatchScalarField + // buoyantPressureFvPatchScalarField onto a new patch + buoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField&, + const buoyantPressureFvPatchScalarField&, const fvPatch&, const DimensionedField<scalar, volMesh>&, const fvPatchFieldMapper& ); //- Construct as copy - fixedFluxBuoyantPressureFvPatchScalarField + buoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& + const buoyantPressureFvPatchScalarField& ); //- Construct and return a clone @@ -97,14 +105,14 @@ public: { return tmp<fvPatchScalarField> ( - new fixedFluxBuoyantPressureFvPatchScalarField(*this) + new buoyantPressureFvPatchScalarField(*this) ); } //- Construct as copy setting internal field reference - fixedFluxBuoyantPressureFvPatchScalarField + buoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField&, + const buoyantPressureFvPatchScalarField&, const DimensionedField<scalar, volMesh>& ); @@ -116,7 +124,7 @@ public: { return tmp<fvPatchScalarField> ( - new fixedFluxBuoyantPressureFvPatchScalarField(*this, iF) + new buoyantPressureFvPatchScalarField(*this, iF) ); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C deleted file mode 100644 index 9a75eed1688a05b8c3f308220f2033a7bb6f05d8..0000000000000000000000000000000000000000 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C +++ /dev/null @@ -1,149 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField:: -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedGradientFvPatchScalarField(p, iF) -{} - - -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField:: -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField -( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedGradientFvPatchScalarField(ptf, p, iF, mapper) -{} - - -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField:: -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& -) -: - fixedGradientFvPatchScalarField(p, iF) -{ - fvPatchField<scalar>::operator=(patchInternalField()); - gradient() = 0.0; -} - - -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField:: -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField -( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& wbppsf -) -: - fixedGradientFvPatchScalarField(wbppsf) -{} - - -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField:: -fixedFluxBoussinesqBuoyantPressureFvPatchScalarField -( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& wbppsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedGradientFvPatchScalarField(wbppsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const dictionary& environmentalProperties - = db().lookupObject<IOdictionary>("environmentalProperties"); - - dimensionedVector g(environmentalProperties.lookup("g")); - - const dictionary& transportProperties - = db().lookupObject<IOdictionary>("transportProperties"); - - dimensionedScalar beta(transportProperties.lookup("beta")); - - const fvPatchField<scalar>& T = - patch().lookupPatchField<volScalarField, scalar>("T"); - - gradient() = beta.value()*T.snGrad()*(g.value() & patch().Cf()); - - fixedGradientFvPatchScalarField::updateCoeffs(); -} - - -void fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::write -( - Ostream& os -) const -{ - fixedGradientFvPatchScalarField::write(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C index 76267d4fa6a86f2083f6720b2eb58fe255610d4d..56ee8a0753d38e9eef05c766677ca1d4eccfa64d 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C @@ -30,7 +30,6 @@ License #include "volFields.H" #include "surfaceFields.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C similarity index 54% rename from applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.C rename to src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C index 05bbdd1ba3fb75adce7642f1afd732f8c87d3c3d..dfda8caf521d7e6f3733d3e4bf640fbfd58ee22f 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/derivedFvPatchFields/solidWallTemperatureCoupled/solidWallTemperatureCoupledFvPatchScalarField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C @@ -24,43 +24,31 @@ License \*---------------------------------------------------------------------------*/ -#include "solidWallTemperatureCoupledFvPatchScalarField.H" +#include "uniformDensityHydrostaticPressureFvPatchScalarField.H" #include "addToRunTimeSelectionTable.H" #include "fvPatchFieldMapper.H" #include "volFields.H" +#include "surfaceFields.H" + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::solidWallTemperatureCoupledFvPatchScalarField:: -solidWallTemperatureCoupledFvPatchScalarField +Foam::uniformDensityHydrostaticPressureFvPatchScalarField:: +uniformDensityHydrostaticPressureFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF ) : fixedValueFvPatchScalarField(p, iF), - coupleManager_(p), - KName_("undefined-K") + rho_(0.0), + pRefValue_(0.0), + pRefPoint_(vector::zero) {} -Foam::solidWallTemperatureCoupledFvPatchScalarField:: -solidWallTemperatureCoupledFvPatchScalarField -( - const solidWallTemperatureCoupledFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchScalarField(ptf, p, iF, mapper), - coupleManager_(ptf.coupleManager_), - KName_(ptf.KName_) -{} - - -Foam::solidWallTemperatureCoupledFvPatchScalarField:: -solidWallTemperatureCoupledFvPatchScalarField +Foam::uniformDensityHydrostaticPressureFvPatchScalarField:: +uniformDensityHydrostaticPressureFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, @@ -68,8 +56,9 @@ solidWallTemperatureCoupledFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - coupleManager_(p, dict), - KName_(dict.lookup("K")) + rho_(readScalar(dict.lookup("rho"))), + pRefValue_(readScalar(dict.lookup("pRefValue"))), + pRefPoint_(dict.lookup("pRefPoint")) { if (dict.found("value")) { @@ -85,72 +74,95 @@ solidWallTemperatureCoupledFvPatchScalarField } -Foam::solidWallTemperatureCoupledFvPatchScalarField:: -solidWallTemperatureCoupledFvPatchScalarField +Foam::uniformDensityHydrostaticPressureFvPatchScalarField:: +uniformDensityHydrostaticPressureFvPatchScalarField +( + const uniformDensityHydrostaticPressureFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField<scalar, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchScalarField(ptf, p, iF, mapper), + rho_(ptf.rho_), + pRefValue_(ptf.pRefValue_), + pRefPoint_(ptf.pRefPoint_) +{} + + +Foam::uniformDensityHydrostaticPressureFvPatchScalarField:: +uniformDensityHydrostaticPressureFvPatchScalarField +( + const uniformDensityHydrostaticPressureFvPatchScalarField& ptf +) +: + fixedValueFvPatchScalarField(ptf), + rho_(ptf.rho_), + pRefValue_(ptf.pRefValue_), + pRefPoint_(ptf.pRefPoint_) +{} + + +Foam::uniformDensityHydrostaticPressureFvPatchScalarField:: +uniformDensityHydrostaticPressureFvPatchScalarField ( - const solidWallTemperatureCoupledFvPatchScalarField& wtcsf, + const uniformDensityHydrostaticPressureFvPatchScalarField& ptf, const DimensionedField<scalar, volMesh>& iF ) : - fixedValueFvPatchScalarField(wtcsf, iF), - coupleManager_(wtcsf.coupleManager_), - KName_(wtcsf.KName_) + fixedValueFvPatchScalarField(ptf, iF), + rho_(ptf.rho_), + pRefValue_(ptf.pRefValue_), + pRefPoint_(ptf.pRefPoint_) {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::solidWallTemperatureCoupledFvPatchScalarField::updateCoeffs() +void Foam::uniformDensityHydrostaticPressureFvPatchScalarField::updateCoeffs() { if (updated()) { return; } - const fvPatchField<scalar>& neighbourField = - coupleManager_.neighbourPatchField<scalar>(); + const dictionary& environmentalProperties + = db().lookupObject<IOdictionary>("environmentalProperties"); - operator==(neighbourField); + dimensionedVector g(environmentalProperties.lookup("g")); + + operator== + ( + pRefValue_ + + rho_*((g.value() & patch().Cf()) - (g.value() & pRefPoint_)) + ); fixedValueFvPatchScalarField::updateCoeffs(); } -void Foam::solidWallTemperatureCoupledFvPatchScalarField::write +void Foam::uniformDensityHydrostaticPressureFvPatchScalarField::write ( Ostream& os ) const { fvPatchScalarField::write(os); - coupleManager_.writeEntries(os); - os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; + os.writeKeyword("rho") << rho_ << token::END_STATEMENT << nl; + os.writeKeyword("pRefValue") << pRefValue_ << token::END_STATEMENT << nl; + os.writeKeyword("pRefPoint") << pRefPoint_ << token::END_STATEMENT << nl; writeEntry("value", os); } -Foam::tmp<Foam::scalarField> -Foam::solidWallTemperatureCoupledFvPatchScalarField::flux() const -{ - const fvPatchScalarField& Kw = - patch().lookupPatchField<volScalarField, scalar>(KName_); - - const fvPatchScalarField& Tw = *this; - - return Tw.snGrad()*Kw; -} - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - -makePatchTypeField -( - fvPatchScalarField, - solidWallTemperatureCoupledFvPatchScalarField -); - -} // End namespace Foam + makePatchTypeField + ( + fvPatchScalarField, + uniformDensityHydrostaticPressureFvPatchScalarField + ); +} // ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.H similarity index 53% rename from src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H rename to src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.H index 094f8805606650a1f2b087d1404dcad78fd1c680..8b129fe3ab3ac5e9bc834f38f9124ffd53742454 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.H @@ -23,23 +23,24 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + Foam::uniformDensityHydrostaticPressureFvPatchScalarField Description - Boundary condition on pressure for use with buoyant solvers employing the - Boussinesq approximation to balance the flux generated by the temperature - gradient. + Hydrostatic pressure boundary condition calculated as + + pRefValue + rho*g.(x - pRefPoint) + + where rho is provided and assumed uniform. SourceFiles - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C + uniformDensityHydrostaticPressureFvPatchScalarField.C \*---------------------------------------------------------------------------*/ -#ifndef fixedFluxBoussinesqBuoyantPressureFvPatchScalarFields_H -#define fixedFluxBoussinesqBuoyantPressureFvPatchScalarFields_H +#ifndef uniformDensityHydrostaticPressureFvPatchScalarField_H +#define uniformDensityHydrostaticPressureFvPatchScalarField_H -#include "fvPatchFields.H" -#include "fixedGradientFvPatchFields.H" +#include "fixedValueFvPatchFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,30 +48,42 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class fixedFluxBoussinesqBuoyantPressureFvPatchScalarField Declaration + Class uniformDensityHydrostaticPressureFvPatch Declaration \*---------------------------------------------------------------------------*/ -class fixedFluxBoussinesqBuoyantPressureFvPatchScalarField +class uniformDensityHydrostaticPressureFvPatchScalarField : - public fixedGradientFvPatchScalarField + public fixedValueFvPatchScalarField { + // Private data + + //- Constant density in the far-field + scalar rho_; + + //- Reference pressure + scalar pRefValue_; + + //- Reference pressure location + vector pRefPoint_; + + public: //- Runtime type information - TypeName("fixedFluxBoussinesqBuoyantPressure"); + TypeName("uniformDensityHydrostaticPressure"); // Constructors //- Construct from patch and internal field - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>& ); //- Construct from patch, internal field and dictionary - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>&, @@ -78,20 +91,19 @@ public: ); //- Construct by mapping given - // fixedFluxBoussinesqBuoyantPressureFvPatchScalarField onto a new - // patch - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + // uniformDensityHydrostaticPressureFvPatchScalarField onto a new patch + uniformDensityHydrostaticPressureFvPatchScalarField ( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&, + const uniformDensityHydrostaticPressureFvPatchScalarField&, const fvPatch&, const DimensionedField<scalar, volMesh>&, const fvPatchFieldMapper& ); //- Construct as copy - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& + const uniformDensityHydrostaticPressureFvPatchScalarField& ); //- Construct and return a clone @@ -99,14 +111,14 @@ public: { return tmp<fvPatchScalarField> ( - new fixedFluxBoussinesqBuoyantPressureFvPatchScalarField(*this) + new uniformDensityHydrostaticPressureFvPatchScalarField(*this) ); } //- Construct as copy setting internal field reference - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&, + const uniformDensityHydrostaticPressureFvPatchScalarField&, const DimensionedField<scalar, volMesh>& ); @@ -118,7 +130,7 @@ public: { return tmp<fvPatchScalarField> ( - new fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + new uniformDensityHydrostaticPressureFvPatchScalarField ( *this, iF @@ -129,8 +141,52 @@ public: // Member functions - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); + // Access + + //- Return the constant density in the far-field + scalar rho() const + { + return rho_; + } + + //- Return reference to the constant density in the far-field + // to allow adjustment + scalar& rho() + { + return rho_; + } + + //- Return the reference pressure + scalar pRefValue() const + { + return pRefValue_; + } + + //- Return reference to the reference pressure to allow adjustment + scalar& pRefValue() + { + return pRefValue_; + } + + //- Return the pressure reference location + const vector& pRefPoint() const + { + return pRefPoint_; + } + + //- Return reference to the pressure reference location + // to allow adjustment + vector& pRefPoint() + { + return pRefPoint_; + } + + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + //- Write virtual void write(Ostream&) const; diff --git a/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C b/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C index cafab73fb158e6492a6b9e908ad8265a7519399a..1df55b7e17b8be53c0c950a885143b0e9d6bec80 100644 --- a/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C +++ b/src/finiteVolume/finiteVolume/laplacianSchemes/gaussLaplacianScheme/gaussLaplacianScheme.C @@ -21,7 +21,7 @@ License You should have received a copy of the GNU General Public License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - + \*---------------------------------------------------------------------------*/ #include "gaussLaplacianScheme.H" diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGrad.H b/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGrad.H index bc170c14666a1f8a0d1533737a256d46d0d02d4e..035bb1d6dba485422291895e14000961dd692c54 100644 --- a/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGrad.H +++ b/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGrad.H @@ -39,7 +39,7 @@ SourceFiles #include "snGradScheme.H" #include "quadraticFitSnGradData.H" -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -133,7 +133,7 @@ public: centralWeight_ ); - const extendedStencil& stencil = qfd.stencil(); + const extendedCellToFaceStencil& stencil = qfd.stencil(); const List<scalarList>& f = qfd.fit(); tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > sft diff --git a/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.H b/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.H index 12d5c90f5435544be324296bb441e8af30381148..bedb0570cca700cde959041c1b6bea8a5b4de147 100644 --- a/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.H +++ b/src/finiteVolume/finiteVolume/snGradSchemes/quadraticFitSnGrad/quadraticFitSnGradData.H @@ -38,7 +38,7 @@ SourceFiles #include "MeshObject.H" #include "fvMesh.H" -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -62,7 +62,7 @@ class quadraticFitSnGradData const label minSize_; //- Extended stencil addressing - extendedStencil stencil_; + extendedCellToFaceStencil stencil_; //- For each cell in the mesh store the values which multiply the // values of the stencil to obtain the gradient for each direction @@ -107,7 +107,7 @@ public: // Member functions //- Return reference to the stencil - const extendedStencil& stencil() const + const extendedCellToFaceStencil& stencil() const { return stencil_; } diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 5ad5dca8cdd5a90e84948eb6aac18199a3130340..1e49de46837ff1613623633bc791033d46e02595 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -480,7 +480,7 @@ void Foam::fvMatrix<Type>::setReference const bool forceReference ) { - if (celli >= 0 && (psi_.needReference() || forceReference)) + if ((forceReference || psi_.needReference()) && celli >= 0) { source()[celli] += diag()[celli]*value; diag()[celli] += diag()[celli]; @@ -1301,7 +1301,11 @@ Foam::tmp<Foam::fvMatrix<Type> > Foam::correction { tmp<Foam::fvMatrix<Type> > tAcorr = A - (A & A.psi()); - if ((A.hasUpper() || A.hasLower()) && A.mesh().fluxRequired(A.psi().name())) + if + ( + (A.hasUpper() || A.hasLower()) + && A.psi().mesh().fluxRequired(A.psi().name()) + ) { tAcorr().faceFluxCorrectionPtr() = (-A.flux()).ptr(); } @@ -1321,7 +1325,11 @@ Foam::tmp<Foam::fvMatrix<Type> > Foam::correction // Note the matrix coefficients are still that of matrix A const fvMatrix<Type>& A = tAcorr(); - if ((A.hasUpper() || A.hasLower()) && A.mesh().fluxRequired(A.psi().name())) + if + ( + (A.hasUpper() || A.hasLower()) + && A.psi().mesh().fluxRequired(A.psi().name()) + ) { tAcorr().faceFluxCorrectionPtr() = (-A.flux()).ptr(); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellEdgeCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CECCellToCellStencil.C similarity index 90% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellEdgeCellStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CECCellToCellStencil.C index 034106f13abdb06dc5d6e4db73d777aed2d57177..b6d2dfa91ef4656621c6bb48611414d45e52b7ea 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellEdgeCellStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CECCellToCellStencil.C @@ -24,16 +24,13 @@ License \*---------------------------------------------------------------------------*/ -#include "cellEdgeCellStencil.H" +#include "CECCellToCellStencil.H" #include "syncTools.H" -//#include "meshTools.H" -//#include "OFstream.H" -//#include "Time.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Calculates per edge the neighbour data (= edgeCells) -void Foam::cellEdgeCellStencil::calcEdgeBoundaryData +void Foam::CECCellToCellStencil::calcEdgeBoundaryData ( const boolList& isValidBFace, const labelList& boundaryEdges, @@ -72,7 +69,7 @@ void Foam::cellEdgeCellStencil::calcEdgeBoundaryData // Calculates per cell the neighbour data (= cell or boundary in global // numbering). First element is always cell itself! -void Foam::cellEdgeCellStencil::calcCellStencil +void Foam::CECCellToCellStencil::calcCellStencil ( labelListList& globalCellCells ) const @@ -189,20 +186,12 @@ void Foam::cellEdgeCellStencil::calcCellStencil // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::cellEdgeCellStencil::cellEdgeCellStencil(const polyMesh& mesh) +Foam::CECCellToCellStencil::CECCellToCellStencil(const polyMesh& mesh) : - faceStencil(mesh) + cellToCellStencil(mesh) { // Calculate per cell the (edge) connected cells (in global numbering) - labelListList globalCellCells; - calcCellStencil(globalCellCells); - - // Add stencils of neighbouring cells to create faceStencil - labelListList faceStencil; - calcFaceStencil(globalCellCells, faceStencil); - - // Transfer to *this - transfer(faceStencil); + calcCellStencil(*this); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellEdgeCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CECCellToCellStencil.H similarity index 84% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellEdgeCellStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CECCellToCellStencil.H index 2cc8b21e33cc92d3632af49c47304bb213cde2e7..27303ffd9f448c984c28eda028cd7448beadc349 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellEdgeCellStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CECCellToCellStencil.H @@ -23,19 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::cellEdgeCellStencil + Foam::CECCellToCellStencil Description SourceFiles - cellEdgeCellStencil.C + CECCellToCellStencil.C \*---------------------------------------------------------------------------*/ -#ifndef cellEdgeCellStencil_H -#define cellEdgeCellStencil_H +#ifndef CECCellToCellStencil_H +#define CECCellToCellStencil_H -#include "faceStencil.H" +#include "cellToCellStencil.H" #include "boolList.H" #include "HashSet.H" #include "Map.H" @@ -47,12 +47,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class cellEdgeCellStencil Declaration + Class CECCellToCellStencil Declaration \*---------------------------------------------------------------------------*/ -class cellEdgeCellStencil +class CECCellToCellStencil : - public faceStencil + public cellToCellStencil { // Private Member Functions @@ -68,10 +68,10 @@ class cellEdgeCellStencil //- Disallow default bitwise copy construct - cellEdgeCellStencil(const cellEdgeCellStencil&); + CECCellToCellStencil(const CECCellToCellStencil&); //- Disallow default bitwise assignment - void operator=(const cellEdgeCellStencil&); + void operator=(const CECCellToCellStencil&); public: @@ -79,7 +79,7 @@ public: // Constructors //- Construct from all cells and boundary faces - explicit cellEdgeCellStencil(const polyMesh&); + explicit CECCellToCellStencil(const polyMesh&); }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellFaceCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CFCCellToCellStencil.C similarity index 89% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellFaceCellStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CFCCellToCellStencil.C index 263ebf0d041e85b9f2237c708d86b947b906c1db..7c718cacfd44256700210b1740abe0190da989b2 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellFaceCellStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CFCCellToCellStencil.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ -#include "cellFaceCellStencil.H" +#include "CFCCellToCellStencil.H" #include "syncTools.H" #include "SortableList.H" #include "emptyPolyPatch.H" @@ -32,7 +32,7 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Calculates per face the neighbour data (= cell or boundary face) -void Foam::cellFaceCellStencil::calcFaceBoundaryData +void Foam::CFCCellToCellStencil::calcFaceBoundaryData ( labelList& neiGlobal ) const @@ -85,7 +85,7 @@ void Foam::cellFaceCellStencil::calcFaceBoundaryData // Calculates per cell the neighbour data (= cell or boundary in global // numbering). First element is always cell itself! -void Foam::cellFaceCellStencil::calcCellStencil(labelListList& globalCellCells) +void Foam::CFCCellToCellStencil::calcCellStencil(labelListList& globalCellCells) const { const label nBnd = mesh().nFaces()-mesh().nInternalFaces(); @@ -147,20 +147,12 @@ void Foam::cellFaceCellStencil::calcCellStencil(labelListList& globalCellCells) // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::cellFaceCellStencil::cellFaceCellStencil(const polyMesh& mesh) +Foam::CFCCellToCellStencil::CFCCellToCellStencil(const polyMesh& mesh) : - faceStencil(mesh) + cellToCellStencil(mesh) { // Calculate per cell the (face) connected cells (in global numbering) - labelListList globalCellCells; - calcCellStencil(globalCellCells); - - // Add stencils of neighbouring cells to create faceStencil - labelListList faceStencil; - calcFaceStencil(globalCellCells, faceStencil); - - // Transfer to *this - transfer(faceStencil); + calcCellStencil(*this); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellFaceCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CFCCellToCellStencil.H similarity index 82% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellFaceCellStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CFCCellToCellStencil.H index 174c4b7feec5ecc5871cab0727ae972c093621f0..c524b8d3eac9e9fe8583bfa228d6ba942be5f06a 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellFaceCellStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CFCCellToCellStencil.H @@ -23,19 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::cellFaceCellStencil + Foam::CFCCellToCellStencil Description SourceFiles - cellFaceCellStencil.C + CFCCellToCellStencil.C \*---------------------------------------------------------------------------*/ -#ifndef cellFaceCellStencil_H -#define cellFaceCellStencil_H +#ifndef CFCCellToCellStencil_H +#define CFCCellToCellStencil_H -#include "faceStencil.H" +#include "cellToCellStencil.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -43,12 +43,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class cellFaceCellStencil Declaration + Class CFCCellToCellStencil Declaration \*---------------------------------------------------------------------------*/ -class cellFaceCellStencil +class CFCCellToCellStencil : - public faceStencil + public cellToCellStencil { // Private Member Functions @@ -57,17 +57,17 @@ class cellFaceCellStencil void calcCellStencil(labelListList& globalCellCells) const; //- Disallow default bitwise copy construct - cellFaceCellStencil(const cellFaceCellStencil&); + CFCCellToCellStencil(const CFCCellToCellStencil&); //- Disallow default bitwise assignment - void operator=(const cellFaceCellStencil&); + void operator=(const CFCCellToCellStencil&); public: // Constructors //- Construct from mesh - explicit cellFaceCellStencil(const polyMesh& mesh); + explicit CFCCellToCellStencil(const polyMesh& mesh); }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellPointCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CPCCellToCellStencil.C similarity index 90% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellPointCellStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CPCCellToCellStencil.C index 67b5be9a325baa700aaaaa3045798b3e0df2a1e2..af6de874b6edf459f7903b3c98c19b569c0cdc99 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellPointCellStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CPCCellToCellStencil.C @@ -24,13 +24,13 @@ License \*---------------------------------------------------------------------------*/ -#include "cellPointCellStencil.H" +#include "CPCCellToCellStencil.H" #include "syncTools.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Calculates per point the neighbour data (= pointCells) -void Foam::cellPointCellStencil::calcPointBoundaryData +void Foam::CPCCellToCellStencil::calcPointBoundaryData ( const boolList& isValidBFace, const labelList& boundaryPoints, @@ -69,7 +69,7 @@ void Foam::cellPointCellStencil::calcPointBoundaryData // Calculates per cell the neighbour data (= cell or boundary in global // numbering). First element is always cell itself! -void Foam::cellPointCellStencil::calcCellStencil +void Foam::CPCCellToCellStencil::calcCellStencil ( labelListList& globalCellCells ) const @@ -154,20 +154,13 @@ void Foam::cellPointCellStencil::calcCellStencil // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::cellPointCellStencil::cellPointCellStencil(const polyMesh& mesh) +Foam::CPCCellToCellStencil::CPCCellToCellStencil(const polyMesh& mesh) : - faceStencil(mesh) + cellToCellStencil(mesh) { // Calculate per cell the (point) connected cells (in global numbering) labelListList globalCellCells; - calcCellStencil(globalCellCells); - - // Add stencils of neighbouring cells to create faceStencil - labelListList faceStencil; - calcFaceStencil(globalCellCells, faceStencil); - - // Transfer to *this - transfer(faceStencil); + calcCellStencil(*this); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellPointCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CPCCellToCellStencil.H similarity index 84% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellPointCellStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CPCCellToCellStencil.H index 6bd318338b4ada8c23927d4b20c8f9354da3f50a..848e9044ab1c1a2fd5bb9b51ab7597714e138186 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/cellPointCellStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/CPCCellToCellStencil.H @@ -23,19 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::cellPointCellStencil + Foam::CPCCellToCellStencil Description SourceFiles - cellPointCellStencil.C + CPCCellToCellStencil.C \*---------------------------------------------------------------------------*/ -#ifndef cellPointCellStencil_H -#define cellPointCellStencil_H +#ifndef CPCCellToCellStencil_H +#define CPCCellToCellStencil_H -#include "faceStencil.H" +#include "cellToCellStencil.H" #include "boolList.H" #include "HashSet.H" #include "Map.H" @@ -46,12 +46,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class cellPointCellStencil Declaration + Class CPCCellToCellStencil Declaration \*---------------------------------------------------------------------------*/ -class cellPointCellStencil +class CPCCellToCellStencil : - public faceStencil + public cellToCellStencil { // Private Member Functions @@ -67,10 +67,10 @@ class cellPointCellStencil //- Disallow default bitwise copy construct - cellPointCellStencil(const cellPointCellStencil&); + CPCCellToCellStencil(const CPCCellToCellStencil&); //- Disallow default bitwise assignment - void operator=(const cellPointCellStencil&); + void operator=(const CPCCellToCellStencil&); public: @@ -78,7 +78,7 @@ public: // Constructors //- Construct from all cells and boundary faces - explicit cellPointCellStencil(const polyMesh&); + explicit CPCCellToCellStencil(const polyMesh&); }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/cellToCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/cellToCellStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..37af71f5e4884c97f6c11cc1aa4a3e6dfb6511a5 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/cellToCellStencil.C @@ -0,0 +1,350 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "cellToCellStencil.H" +#include "syncTools.H" +#include "SortableList.H" +#include "emptyPolyPatch.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// Merge two list and guarantee global0,global1 are first. +void Foam::cellToCellStencil::merge +( + const label global0, + const label global1, + const labelList& listA, + labelList& listB +) +{ + sort(listB); + + // See if global0, global1 already present in listB + label nGlobalInsert = 0; + + if (global0 != -1) + { + label index0 = findSortedIndex(listB, global0); + if (index0 == -1) + { + nGlobalInsert++; + } + } + + if (global1 != -1) + { + label index1 = findSortedIndex(listB, global1); + if (index1 == -1) + { + nGlobalInsert++; + } + } + + + // For all in listA see if they are present + label nInsert = 0; + + forAll(listA, i) + { + label elem = listA[i]; + + if (elem != global0 && elem != global1) + { + if (findSortedIndex(listB, elem) == -1) + { + nInsert++; + } + } + } + + // Extend B with nInsert and whether global0,global1 need to be inserted. + labelList result(listB.size() + nGlobalInsert + nInsert); + + label resultI = 0; + + // Insert global0,1 first + if (global0 != -1) + { + result[resultI++] = global0; + } + if (global1 != -1) + { + result[resultI++] = global1; + } + + + // Insert listB + forAll(listB, i) + { + label elem = listB[i]; + + if (elem != global0 && elem != global1) + { + result[resultI++] = elem; + } + } + + + // Insert listA + forAll(listA, i) + { + label elem = listA[i]; + + if (elem != global0 && elem != global1) + { + if (findSortedIndex(listB, elem) == -1) + { + result[resultI++] = elem; + } + } + } + + if (resultI != result.size()) + { + FatalErrorIn("cellToCellStencil::merge(..)") + << "problem" << abort(FatalError); + } + + listB.transfer(result); +} + + +// Merge two list and guarantee globalI is first. +void Foam::cellToCellStencil::merge +( + const label globalI, + const labelList& pGlobals, + labelList& cCells +) +{ + labelHashSet set; + forAll(cCells, i) + { + if (cCells[i] != globalI) + { + set.insert(cCells[i]); + } + } + + forAll(pGlobals, i) + { + if (pGlobals[i] != globalI) + { + set.insert(pGlobals[i]); + } + } + + cCells.setSize(set.size()+1); + label n = 0; + cCells[n++] = globalI; + + forAllConstIter(labelHashSet, set, iter) + { + cCells[n++] = iter.key(); + } +} + + +void Foam::cellToCellStencil::validBoundaryFaces(boolList& isValidBFace) const +{ + const polyBoundaryMesh& patches = mesh().boundaryMesh(); + + isValidBFace.setSize(mesh().nFaces()-mesh().nInternalFaces(), true); + + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (pp.coupled() || isA<emptyPolyPatch>(pp)) + { + label bFaceI = pp.start()-mesh().nInternalFaces(); + forAll(pp, i) + { + isValidBFace[bFaceI++] = false; + } + } + } +} + + +Foam::autoPtr<Foam::indirectPrimitivePatch> +Foam::cellToCellStencil::allCoupledFacesPatch() const +{ + const polyBoundaryMesh& patches = mesh().boundaryMesh(); + + label nCoupled = 0; + + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (pp.coupled()) + { + nCoupled += pp.size(); + } + } + labelList coupledFaces(nCoupled); + nCoupled = 0; + + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (pp.coupled()) + { + label faceI = pp.start(); + + forAll(pp, i) + { + coupledFaces[nCoupled++] = faceI++; + } + } + } + + return autoPtr<indirectPrimitivePatch> + ( + new indirectPrimitivePatch + ( + IndirectList<face> + ( + mesh().faces(), + coupledFaces + ), + mesh().points() + ) + ); +} + + +void Foam::cellToCellStencil::unionEqOp::operator() +( + labelList& x, + const labelList& y +) const +{ + if (y.size()) + { + if (x.empty()) + { + x = y; + } + else + { + labelHashSet set(x); + forAll(y, i) + { + set.insert(y[i]); + } + x = set.toc(); + } + } +} + + +void Foam::cellToCellStencil::insertFaceCells +( + const label exclude0, + const label exclude1, + const boolList& isValidBFace, + const labelList& faceLabels, + labelHashSet& globals +) const +{ + const labelList& own = mesh().faceOwner(); + const labelList& nei = mesh().faceNeighbour(); + + forAll(faceLabels, i) + { + label faceI = faceLabels[i]; + + label globalOwn = globalNumbering().toGlobal(own[faceI]); + if (globalOwn != exclude0 && globalOwn != exclude1) + { + globals.insert(globalOwn); + } + + if (mesh().isInternalFace(faceI)) + { + label globalNei = globalNumbering().toGlobal(nei[faceI]); + if (globalNei != exclude0 && globalNei != exclude1) + { + globals.insert(globalNei); + } + } + else + { + label bFaceI = faceI-mesh().nInternalFaces(); + + if (isValidBFace[bFaceI]) + { + label globalI = globalNumbering().toGlobal + ( + mesh().nCells() + + bFaceI + ); + + if (globalI != exclude0 && globalI != exclude1) + { + globals.insert(globalI); + } + } + } + } +} + + +Foam::labelList Foam::cellToCellStencil::calcFaceCells +( + const boolList& isValidBFace, + const labelList& faceLabels, + labelHashSet& globals +) const +{ + globals.clear(); + + insertFaceCells + ( + -1, + -1, + isValidBFace, + faceLabels, + globals + ); + + return globals.toc(); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::cellToCellStencil::cellToCellStencil(const polyMesh& mesh) +: + mesh_(mesh), + globalNumbering_(mesh_.nCells()+mesh_.nFaces()-mesh_.nInternalFaces()) +{} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/cellToCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/cellToCellStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..08b7b0fb2fd171d4f2ec29e36ae2f38557c6f92c --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToCell/fullStencils/cellToCellStencil.H @@ -0,0 +1,152 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::cellToCellStencil + +Description + baseclass for extended cell centred addressing. Contains per cell a + list of neighbouring cells and/or boundaryfaces in global addressing. + +SourceFiles + cellToCellStencil.C + +\*---------------------------------------------------------------------------*/ + +#ifndef cellToCellStencil_H +#define cellToCellStencil_H + +#include "globalIndex.H" +#include "boolList.H" +#include "HashSet.H" +#include "indirectPrimitivePatch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class polyMesh; + +/*---------------------------------------------------------------------------*\ + Class cellToCellStencil Declaration +\*---------------------------------------------------------------------------*/ + +class cellToCellStencil +: + public labelListList +{ + // Private data + + const polyMesh& mesh_; + + //- Global numbering for cells and boundary faces + const globalIndex globalNumbering_; + + + // Private Member Functions + + //- Disallow default bitwise assignment + void operator=(const cellToCellStencil&); + + +protected: + + //- Merge two lists. + static void merge + ( + const label, + const label, + const labelList&, + labelList& + ); + + //- Merge two lists. + static void merge(const label, const labelList&, labelList&); + + //- Valid boundary faces (not empty and not coupled) + void validBoundaryFaces(boolList& isValidBFace) const; + + //- Return patch of all coupled faces. + autoPtr<indirectPrimitivePatch> allCoupledFacesPatch() const; + + //- Combine operator for labelLists + class unionEqOp + { + public: + void operator()( labelList& x, const labelList& y ) const; + }; + + //- Collect cell neighbours of faces in global numbering + void insertFaceCells + ( + const label exclude0, + const label exclude1, + const boolList& nonEmptyFace, + const labelList& faceLabels, + labelHashSet& globals + ) const; + + //- Collect cell neighbours of faces in global numbering + labelList calcFaceCells + ( + const boolList& nonEmptyFace, + const labelList& faceLabels, + labelHashSet& globals + ) const; + + +public: + + // Constructors + + //- Construct from mesh + explicit cellToCellStencil(const polyMesh&); + + + // Member Functions + + const polyMesh& mesh() const + { + return mesh_; + } + + //- Global numbering for cells and boundary faces + const globalIndex& globalNumbering() const + { + return globalNumbering_; + } + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCECCellToFaceStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCECCellToFaceStencilObject.C new file mode 100644 index 0000000000000000000000000000000000000000..ddc33f39e2023dc12decceaabe838221a5f545d4 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCECCellToFaceStencilObject.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "centredCECCellToFaceStencilObject.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(centredCECCellToFaceStencilObject, 0); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCPCStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCECCellToFaceStencilObject.H similarity index 66% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCPCStencilObject.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCECCellToFaceStencilObject.H index 183c0808ccd69c8389a7f376f5126597746d0403..b639ee910aad8fbe5232af4bf325c15cd60eece1 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCPCStencilObject.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCECCellToFaceStencilObject.H @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::centredCPCStencilObject + Foam::centredCECCellToFaceStencilObject Description @@ -31,11 +31,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef centredCPCStencilObject_H -#define centredCPCStencilObject_H +#ifndef centredCECCellToFaceStencilObject_H +#define centredCECCellToFaceStencilObject_H -#include "extendedCentredStencil.H" -#include "cellPointCellStencil.H" +#include "extendedCentredCellToFaceStencil.H" +#include "CECCellToFaceStencil.H" #include "MeshObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,35 +44,42 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class centredCPCStencilObject Declaration + Class centredCECCellToFaceStencilObject Declaration \*---------------------------------------------------------------------------*/ -class centredCPCStencilObject +class centredCECCellToFaceStencilObject : - public MeshObject<fvMesh, centredCPCStencilObject>, - public extendedCentredStencil + public MeshObject<fvMesh, centredCECCellToFaceStencilObject>, + public extendedCentredCellToFaceStencil { public: - TypeName("centredCFCStencil"); + TypeName("centredCECCellToFaceStencil"); // Constructors //- Construct from uncompacted face stencil - explicit centredCPCStencilObject + explicit centredCECCellToFaceStencilObject ( const fvMesh& mesh ) : - MeshObject<fvMesh, centredCPCStencilObject>(mesh), - extendedCentredStencil(cellPointCellStencil(mesh)) - {} + MeshObject<fvMesh, centredCECCellToFaceStencilObject>(mesh), + extendedCentredCellToFaceStencil(CECCellToFaceStencil(mesh)) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated centred stencil " << type() + << nl << endl; + writeStencilStats(Info, stencil(), map()); + } + } // Destructor - virtual ~centredCPCStencilObject() + virtual ~centredCECCellToFaceStencilObject() {} }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCFCCellToFaceStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCFCCellToFaceStencilObject.C new file mode 100644 index 0000000000000000000000000000000000000000..675b9298700f200ff4c05aee4fbc25b8a79a864f --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCFCCellToFaceStencilObject.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "centredCFCCellToFaceStencilObject.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(centredCFCCellToFaceStencilObject, 0); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCFCCellToFaceStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCFCCellToFaceStencilObject.H new file mode 100644 index 0000000000000000000000000000000000000000..d6961220b5f13f64e0beda7dd989105a50f5069a --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCFCCellToFaceStencilObject.H @@ -0,0 +1,94 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::centredCFCCellToFaceStencilObject + +Description + +SourceFiles + +\*---------------------------------------------------------------------------*/ + +#ifndef centredCFCCellToFaceStencilObject_H +#define centredCFCCellToFaceStencilObject_H + +#include "extendedCentredCellToFaceStencil.H" +#include "CFCCellToFaceStencil.H" +#include "MeshObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class centredCFCCellToFaceStencilObject Declaration +\*---------------------------------------------------------------------------*/ + +class centredCFCCellToFaceStencilObject +: + public MeshObject<fvMesh, centredCFCCellToFaceStencilObject>, + public extendedCentredCellToFaceStencil +{ + +public: + + TypeName("centredCFCCellToFaceStencil"); + + // Constructors + + //- Construct from uncompacted face stencil + explicit centredCFCCellToFaceStencilObject + ( + const fvMesh& mesh + ) + : + MeshObject<fvMesh, centredCFCCellToFaceStencilObject>(mesh), + extendedCentredCellToFaceStencil(CFCCellToFaceStencil(mesh)) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated centred stencil " << type() + << nl << endl; + writeStencilStats(Info, stencil(), map()); + } + } + + + //- Destructor + virtual ~centredCFCCellToFaceStencilObject() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCPCCellToFaceStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCPCCellToFaceStencilObject.C new file mode 100644 index 0000000000000000000000000000000000000000..cf0fc71cf4b9c0380f3dff34ad44aebb946e87bd --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCPCCellToFaceStencilObject.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "centredCPCCellToFaceStencilObject.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(centredCPCCellToFaceStencilObject, 0); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCPCCellToFaceStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCPCCellToFaceStencilObject.H new file mode 100644 index 0000000000000000000000000000000000000000..68608f210bc9a5bea7e016ad8705d717b941201c --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredCPCCellToFaceStencilObject.H @@ -0,0 +1,95 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::centredCPCCellToFaceStencilObject + +Description + +SourceFiles + +\*---------------------------------------------------------------------------*/ + +#ifndef centredCPCCellToFaceStencilObject_H +#define centredCPCCellToFaceStencilObject_H + +#include "extendedCentredCellToFaceStencil.H" +#include "CPCCellToFaceStencil.H" +#include "MeshObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class centredCPCCellToFaceStencilObject Declaration +\*---------------------------------------------------------------------------*/ + +class centredCPCCellToFaceStencilObject +: + public MeshObject<fvMesh, centredCPCCellToFaceStencilObject>, + public extendedCentredCellToFaceStencil +{ + +public: + + TypeName("centredCFCCellToFaceStencil"); + + // Constructors + + //- Construct from uncompacted face stencil + explicit centredCPCCellToFaceStencilObject + ( + const fvMesh& mesh + ) + : + MeshObject<fvMesh, centredCPCCellToFaceStencilObject>(mesh), + extendedCentredCellToFaceStencil(CPCCellToFaceStencil(mesh)) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated centred stencil " << type() + << nl << endl; + writeStencilStats(Info, stencil(), map()); + } + } + + + // Destructor + + virtual ~centredCPCCellToFaceStencilObject() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredFECCellToFaceStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredFECCellToFaceStencilObject.C new file mode 100644 index 0000000000000000000000000000000000000000..b66c40ce059dd15edd673e75f7aba716cd2af296 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredFECCellToFaceStencilObject.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "centredFECCellToFaceStencilObject.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(centredFECCellToFaceStencilObject, 0); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredFECCellToFaceStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredFECCellToFaceStencilObject.H new file mode 100644 index 0000000000000000000000000000000000000000..3a802374f7af4de0b48af6c7d036f557e608bdcd --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/centredFECCellToFaceStencilObject.H @@ -0,0 +1,95 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::centredFECCellToFaceStencilObject + +Description + +SourceFiles + +\*---------------------------------------------------------------------------*/ + +#ifndef centredFECCellToFaceStencilObject_H +#define centredFECCellToFaceStencilObject_H + +#include "extendedCentredCellToFaceStencil.H" +#include "FECCellToFaceStencil.H" +#include "MeshObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class centredFECCellToFaceStencilObject Declaration +\*---------------------------------------------------------------------------*/ + +class centredFECCellToFaceStencilObject +: + public MeshObject<fvMesh, centredFECCellToFaceStencilObject>, + public extendedCentredCellToFaceStencil +{ + +public: + + TypeName("centredCFCCellToFaceStencil"); + + // Constructors + + //- Construct from uncompacted face stencil + explicit centredFECCellToFaceStencilObject + ( + const fvMesh& mesh + ) + : + MeshObject<fvMesh, centredFECCellToFaceStencilObject>(mesh), + extendedCentredCellToFaceStencil(FECCellToFaceStencil(mesh)) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated centred stencil " << type() + << nl << endl; + writeStencilStats(Info, stencil(), map()); + } + } + + + // Destructor + + virtual ~centredFECCellToFaceStencilObject() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/pureUpwindCFCCellToFaceStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/pureUpwindCFCCellToFaceStencilObject.C new file mode 100644 index 0000000000000000000000000000000000000000..541e7f40d0c32fd4112088232eabea1dc26da81c --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/pureUpwindCFCCellToFaceStencilObject.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "pureUpwindCFCCellToFaceStencilObject.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(pureUpwindCFCCellToFaceStencilObject, 0); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/pureUpwindCFCCellToFaceStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/pureUpwindCFCCellToFaceStencilObject.H new file mode 100644 index 0000000000000000000000000000000000000000..c3be0efe7e02c399500f46c7bfd2bdd8f9d7e442 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/pureUpwindCFCCellToFaceStencilObject.H @@ -0,0 +1,95 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::upwindCFCCellToFaceStencilObject + +Description + +SourceFiles + +\*---------------------------------------------------------------------------*/ + +#ifndef pureUpwindCFCCellToFaceStencilObject_H +#define pureUpwindCFCCellToFaceStencilObject_H + +#include "extendedUpwindCellToFaceStencil.H" +#include "CFCCellToFaceStencil.H" +#include "MeshObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class pureUpwindCFCCellToFaceStencilObject Declaration +\*---------------------------------------------------------------------------*/ + +class pureUpwindCFCCellToFaceStencilObject +: + public MeshObject<fvMesh, pureUpwindCFCCellToFaceStencilObject>, + public extendedUpwindCellToFaceStencil +{ + +public: + + TypeName("pureUpwindCFCCellToFaceStencil"); + + // Constructors + + //- Construct from uncompacted face stencil + explicit pureUpwindCFCCellToFaceStencilObject + ( + const fvMesh& mesh + ) + : + MeshObject<fvMesh, pureUpwindCFCCellToFaceStencilObject>(mesh), + extendedUpwindCellToFaceStencil(CFCCellToFaceStencil(mesh)) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated pure upwind stencil " << type() + << nl << endl; + writeStencilStats(Info, ownStencil(), ownMap()); + } + } + + + // Destructor + + virtual ~pureUpwindCFCCellToFaceStencilObject() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCECStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCECCellToFaceStencilObject.C similarity index 92% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCECStencilObject.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCECCellToFaceStencilObject.C index 6a1e250065db0ae32556e3c94172096078684183..1c5271b13248118e0ebcfd093c303b086037977a 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCECStencilObject.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCECCellToFaceStencilObject.C @@ -24,14 +24,14 @@ License \*---------------------------------------------------------------------------*/ -#include "centredCECStencilObject.H" +#include "upwindCECCellToFaceStencilObject.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(centredCECStencilObject, 0); + defineTypeNameAndDebug(upwindCECCellToFaceStencilObject, 0); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCFCStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCECCellToFaceStencilObject.H similarity index 64% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCFCStencilObject.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCECCellToFaceStencilObject.H index de8972c112e647f78712371df86a289a85816a74..d23cdacfef173d7174c306445e6415e7f50c6c0a 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCFCStencilObject.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCECCellToFaceStencilObject.H @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::upwindCFCStencilObject + Foam::upwindCECCellToFaceStencilObject Description @@ -31,11 +31,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef upwindCFCStencilObject_H -#define upwindCFCStencilObject_H +#ifndef upwindCECCellToFaceStencilObject_H +#define upwindCECCellToFaceStencilObject_H -#include "extendedUpwindStencil.H" -#include "cellFaceCellStencil.H" +#include "extendedUpwindCellToFaceStencil.H" +#include "CECCellToFaceStencil.H" #include "MeshObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,36 +44,49 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class upwindCFCStencilObject Declaration + Class upwindCECCellToFaceStencilObject Declaration \*---------------------------------------------------------------------------*/ -class upwindCFCStencilObject +class upwindCECCellToFaceStencilObject : - public MeshObject<fvMesh, upwindCFCStencilObject>, - public extendedUpwindStencil + public MeshObject<fvMesh, upwindCECCellToFaceStencilObject>, + public extendedUpwindCellToFaceStencil { public: - TypeName("upwindCFCStencil"); + TypeName("upwindCFCCellToFaceStencil"); // Constructors //- Construct from uncompacted face stencil - explicit upwindCFCStencilObject + explicit upwindCECCellToFaceStencilObject ( const fvMesh& mesh, + const bool pureUpwind, const scalar minOpposedness ) : - MeshObject<fvMesh, upwindCFCStencilObject>(mesh), - extendedUpwindStencil(cellFaceCellStencil(mesh), minOpposedness) - {} + MeshObject<fvMesh, upwindCECCellToFaceStencilObject>(mesh), + extendedUpwindCellToFaceStencil + ( + CECCellToFaceStencil(mesh), + pureUpwind, + minOpposedness + ) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated off-centred stencil " << type() + << nl << endl; + writeStencilStats(Info, ownStencil(), ownMap()); + } + } // Destructor - virtual ~upwindCFCStencilObject() + virtual ~upwindCECCellToFaceStencilObject() {} }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCPCStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCFCCellToFaceStencilObject.C similarity index 92% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCPCStencilObject.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCFCCellToFaceStencilObject.C index db5bf143ae170f945ff9c036233d0b59ab021c01..18ea2137222c8baa5fe90fe3289b051c1913cbc6 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCPCStencilObject.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCFCCellToFaceStencilObject.C @@ -24,14 +24,14 @@ License \*---------------------------------------------------------------------------*/ -#include "centredCPCStencilObject.H" +#include "upwindCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(centredCPCStencilObject, 0); + defineTypeNameAndDebug(upwindCFCCellToFaceStencilObject, 0); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCPCStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCFCCellToFaceStencilObject.H similarity index 64% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCPCStencilObject.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCFCCellToFaceStencilObject.H index b73d25820522007152aa50f32ea45028d6a93825..f543f6d8e63e426880bce2e4edda575ca3bb09dc 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCPCStencilObject.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCFCCellToFaceStencilObject.H @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::upwindCPCStencilObject + Foam::upwindCFCCellToFaceStencilObject Description @@ -31,11 +31,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef upwindCPCStencilObject_H -#define upwindCPCStencilObject_H +#ifndef upwindCFCCellToFaceStencilObject_H +#define upwindCFCCellToFaceStencilObject_H -#include "extendedUpwindStencil.H" -#include "cellPointCellStencil.H" +#include "extendedUpwindCellToFaceStencil.H" +#include "CFCCellToFaceStencil.H" #include "MeshObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,36 +44,49 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class upwindCPCStencilObject Declaration + Class upwindCFCCellToFaceStencilObject Declaration \*---------------------------------------------------------------------------*/ -class upwindCPCStencilObject +class upwindCFCCellToFaceStencilObject : - public MeshObject<fvMesh, upwindCPCStencilObject>, - public extendedUpwindStencil + public MeshObject<fvMesh, upwindCFCCellToFaceStencilObject>, + public extendedUpwindCellToFaceStencil { public: - TypeName("upwindCFCStencil"); + TypeName("upwindCFCCellToFaceStencil"); // Constructors //- Construct from uncompacted face stencil - explicit upwindCPCStencilObject + explicit upwindCFCCellToFaceStencilObject ( const fvMesh& mesh, + const bool pureUpwind, const scalar minOpposedness ) : - MeshObject<fvMesh, upwindCPCStencilObject>(mesh), - extendedUpwindStencil(cellPointCellStencil(mesh), minOpposedness) - {} + MeshObject<fvMesh, upwindCFCCellToFaceStencilObject>(mesh), + extendedUpwindCellToFaceStencil + ( + CFCCellToFaceStencil(mesh), + pureUpwind, + minOpposedness + ) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated off-centred stencil " << type() + << nl << endl; + writeStencilStats(Info, ownStencil(), ownMap()); + } + } // Destructor - virtual ~upwindCPCStencilObject() + virtual ~upwindCFCCellToFaceStencilObject() {} }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredFECStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCPCCellToFaceStencilObject.C similarity index 92% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredFECStencilObject.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCPCCellToFaceStencilObject.C index ba7351994a998a531616c9903e52753d25a7ac65..1f1e3448cafd81d77913baf8a580db2b57c1a388 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredFECStencilObject.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCPCCellToFaceStencilObject.C @@ -24,14 +24,14 @@ License \*---------------------------------------------------------------------------*/ -#include "centredFECStencilObject.H" +#include "upwindCPCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(centredFECStencilObject, 0); + defineTypeNameAndDebug(upwindCPCCellToFaceStencilObject, 0); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindFECStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCPCCellToFaceStencilObject.H similarity index 64% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindFECStencilObject.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCPCCellToFaceStencilObject.H index 478774013a0edc76f9e21f066f51c98c669bab74..b86e0b00b5bc724594945e535864a9a317a4a9ff 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindFECStencilObject.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindCPCCellToFaceStencilObject.H @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::upwindFECStencilObject + Foam::upwindCPCCellToFaceStencilObject Description @@ -31,11 +31,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef upwindFECStencilObject_H -#define upwindFECStencilObject_H +#ifndef upwindCPCCellToFaceStencilObject_H +#define upwindCPCCellToFaceStencilObject_H -#include "extendedUpwindStencil.H" -#include "faceEdgeCellStencil.H" +#include "extendedUpwindCellToFaceStencil.H" +#include "CPCCellToFaceStencil.H" #include "MeshObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,36 +44,49 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class upwindFECStencilObject Declaration + Class upwindCPCCellToFaceStencilObject Declaration \*---------------------------------------------------------------------------*/ -class upwindFECStencilObject +class upwindCPCCellToFaceStencilObject : - public MeshObject<fvMesh, upwindFECStencilObject>, - public extendedUpwindStencil + public MeshObject<fvMesh, upwindCPCCellToFaceStencilObject>, + public extendedUpwindCellToFaceStencil { public: - TypeName("upwindCFCStencil"); + TypeName("upwindCFCCellToFaceStencil"); // Constructors //- Construct from uncompacted face stencil - explicit upwindFECStencilObject + explicit upwindCPCCellToFaceStencilObject ( const fvMesh& mesh, + const bool pureUpwind, const scalar minOpposedness ) : - MeshObject<fvMesh, upwindFECStencilObject>(mesh), - extendedUpwindStencil(faceEdgeCellStencil(mesh), minOpposedness) - {} + MeshObject<fvMesh, upwindCPCCellToFaceStencilObject>(mesh), + extendedUpwindCellToFaceStencil + ( + CPCCellToFaceStencil(mesh), + pureUpwind, + minOpposedness + ) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated off-centred stencil " << type() + << nl << endl; + writeStencilStats(Info, ownStencil(), ownMap()); + } + } // Destructor - virtual ~upwindFECStencilObject() + virtual ~upwindCPCCellToFaceStencilObject() {} }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCFCStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindFECCellToFaceStencilObject.C similarity index 92% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCFCStencilObject.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindFECCellToFaceStencilObject.C index e7ebaa389bdfea701f66d8ef8876ad38d97897cc..d397daf01f8ed2c676ce7d16b5334d47ad25e59d 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCFCStencilObject.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindFECCellToFaceStencilObject.C @@ -24,14 +24,14 @@ License \*---------------------------------------------------------------------------*/ -#include "centredCFCStencilObject.H" +#include "upwindFECCellToFaceStencilObject.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - defineTypeNameAndDebug(centredCFCStencilObject, 0); + defineTypeNameAndDebug(upwindFECCellToFaceStencilObject, 0); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindFECCellToFaceStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindFECCellToFaceStencilObject.H new file mode 100644 index 0000000000000000000000000000000000000000..9bd07a1607357d52784d2dc9f949aef71efee8f2 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/MeshObjects/upwindFECCellToFaceStencilObject.H @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::upwindFECCellToFaceStencilObject + +Description + +SourceFiles + +\*---------------------------------------------------------------------------*/ + +#ifndef upwindFECCellToFaceStencilObject_H +#define upwindFECCellToFaceStencilObject_H + +#include "extendedUpwindCellToFaceStencil.H" +#include "FECCellToFaceStencil.H" +#include "MeshObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class upwindFECCellToFaceStencilObject Declaration +\*---------------------------------------------------------------------------*/ + +class upwindFECCellToFaceStencilObject +: + public MeshObject<fvMesh, upwindFECCellToFaceStencilObject>, + public extendedUpwindCellToFaceStencil +{ + +public: + + TypeName("upwindCFCCellToFaceStencil"); + + // Constructors + + //- Construct from uncompacted face stencil + explicit upwindFECCellToFaceStencilObject + ( + const fvMesh& mesh, + const bool pureUpwind, + const scalar minOpposedness + ) + : + MeshObject<fvMesh, upwindFECCellToFaceStencilObject>(mesh), + extendedUpwindCellToFaceStencil + ( + FECCellToFaceStencil(mesh), + pureUpwind, + minOpposedness + ) + { + if (extendedCellToFaceStencil::debug) + { + Info<< "Generated off-centred stencil " << type() + << nl << endl; + writeStencilStats(Info, ownStencil(), ownMap()); + } + } + + + // Destructor + + virtual ~upwindFECCellToFaceStencilObject() + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C similarity index 57% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C index 1ff00db7ba44c2350e44de2b2845f8b563d491e6..5b1cb12e342a15f38eaa1caa5f9b3da4787197c9 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.C @@ -24,184 +24,83 @@ License \*---------------------------------------------------------------------------*/ -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" #include "globalIndex.H" #include "syncTools.H" #include "SortableList.H" +/* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ + +defineTypeNameAndDebug(Foam::extendedCellToFaceStencil, 0); + + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Calculates per face a list of global cell/face indices. -void Foam::extendedStencil::calcFaceStencil +void Foam::extendedCellToFaceStencil::writeStencilStats ( - const labelListList& globalCellCells, - labelListList& faceStencil + Ostream& os, + const labelListList& stencil, + const mapDistribute& map ) { - const polyBoundaryMesh& patches = mesh_.boundaryMesh(); - const label nBnd = mesh_.nFaces()-mesh_.nInternalFaces(); - const labelList& own = mesh_.faceOwner(); - const labelList& nei = mesh_.faceNeighbour(); - + label sumSize = 0; + label nSum = 0; + label minSize = labelMax; + label maxSize = labelMin; - // Determine neighbouring global cell Cells - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - labelListList neiGlobalCellCells(nBnd); - forAll(patches, patchI) + forAll(stencil, i) { - const polyPatch& pp = patches[patchI]; + const labelList& sCells = stencil[i]; - if (pp.coupled()) + if (sCells.size() > 0) { - label faceI = pp.start(); - - forAll(pp, i) - { - neiGlobalCellCells[faceI-mesh_.nInternalFaces()] = - globalCellCells[own[faceI]]; - faceI++; - } + sumSize += sCells.size(); + nSum++; + minSize = min(minSize, sCells.size()); + maxSize = max(maxSize, sCells.size()); } } - syncTools::swapBoundaryFaceList(mesh_, neiGlobalCellCells, false); - - - - // Construct stencil in global numbering - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - faceStencil.setSize(mesh_.nFaces()); - - labelHashSet faceStencilSet; - - for (label faceI = 0; faceI < mesh_.nInternalFaces(); faceI++) + reduce(sumSize, sumOp<label>()); + reduce(nSum, sumOp<label>()); + + reduce(minSize, minOp<label>()); + reduce(maxSize, maxOp<label>()); + + os << "Stencil size :" << nl + << " average : " << scalar(sumSize)/nSum << nl + << " min : " << minSize << nl + << " max : " << maxSize << nl + << endl; + + // Sum all sent data + label nSent = 0; + label nLocal = 0; + forAll(map.subMap(), procI) { - faceStencilSet.clear(); - - const labelList& ownCCells = globalCellCells[own[faceI]]; - label globalOwn = ownCCells[0]; - // Insert cellCells - forAll(ownCCells, i) - { - faceStencilSet.insert(ownCCells[i]); - } - - const labelList& neiCCells = globalCellCells[nei[faceI]]; - label globalNei = neiCCells[0]; - // Insert cellCells - forAll(neiCCells, i) + if (procI != Pstream::myProcNo()) { - faceStencilSet.insert(neiCCells[i]); + nSent += map.subMap()[procI].size(); } - - // Guarantee owner first, neighbour second. - faceStencil[faceI].setSize(faceStencilSet.size()); - label n = 0; - faceStencil[faceI][n++] = globalOwn; - faceStencil[faceI][n++] = globalNei; - forAllConstIter(labelHashSet, faceStencilSet, iter) + else { - if (iter.key() != globalOwn && iter.key() != globalNei) - { - faceStencil[faceI][n++] = iter.key(); - } + nLocal += map.subMap()[procI].size(); } - //Pout<< "internalface:" << faceI << " toc:" << faceStencilSet.toc() - // << " faceStencil:" << faceStencil[faceI] << endl; } - forAll(patches, patchI) - { - const polyPatch& pp = patches[patchI]; - label faceI = pp.start(); - - if (pp.coupled()) - { - forAll(pp, i) - { - faceStencilSet.clear(); - - const labelList& ownCCells = globalCellCells[own[faceI]]; - label globalOwn = ownCCells[0]; - forAll(ownCCells, i) - { - faceStencilSet.insert(ownCCells[i]); - } - - // And the neighbours of the coupled cell - const labelList& neiCCells = - neiGlobalCellCells[faceI-mesh_.nInternalFaces()]; - label globalNei = neiCCells[0]; - forAll(neiCCells, i) - { - faceStencilSet.insert(neiCCells[i]); - } - // Guarantee owner first, neighbour second. - faceStencil[faceI].setSize(faceStencilSet.size()); - label n = 0; - faceStencil[faceI][n++] = globalOwn; - faceStencil[faceI][n++] = globalNei; - forAllConstIter(labelHashSet, faceStencilSet, iter) - { - if (iter.key() != globalOwn && iter.key() != globalNei) - { - faceStencil[faceI][n++] = iter.key(); - } - } - - //Pout<< "coupledface:" << faceI - // << " toc:" << faceStencilSet.toc() - // << " faceStencil:" << faceStencil[faceI] << endl; - - faceI++; - } - } - else if (!isA<emptyPolyPatch>(pp)) - { - forAll(pp, i) - { - faceStencilSet.clear(); - - const labelList& ownCCells = globalCellCells[own[faceI]]; - label globalOwn = ownCCells[0]; - forAll(ownCCells, i) - { - faceStencilSet.insert(ownCCells[i]); - } - - // Guarantee owner first, neighbour second. - faceStencil[faceI].setSize(faceStencilSet.size()); - label n = 0; - faceStencil[faceI][n++] = globalOwn; - forAllConstIter(labelHashSet, faceStencilSet, iter) - { - if (iter.key() != globalOwn) - { - faceStencil[faceI][n++] = iter.key(); - } - } - - //Pout<< "boundaryface:" << faceI - // << " toc:" << faceStencilSet.toc() - // << " faceStencil:" << faceStencil[faceI] << endl; - - faceI++; - } - } - } + os << "Local data size : " << returnReduce(nLocal, sumOp<label>()) << nl + << "Sent data size : " << returnReduce(nSent, sumOp<label>()) << nl + << endl; } -Foam::autoPtr<Foam::mapDistribute> Foam::extendedStencil::calcDistributeMap +Foam::autoPtr<Foam::mapDistribute> +Foam::extendedCellToFaceStencil::calcDistributeMap ( + const polyMesh& mesh, const globalIndex& globalNumbering, labelListList& faceStencil ) { - const label nBnd = mesh_.nFaces()-mesh_.nInternalFaces(); - - // Convert stencil to schedule // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -215,8 +114,8 @@ Foam::autoPtr<Foam::mapDistribute> Foam::extendedStencil::calcDistributeMap // these are always all needed. List<Map<label> > globalToProc(Pstream::nProcs()); { - const labelList& procPatchMap = mesh_.globalData().procPatchMap(); - const polyBoundaryMesh& patches = mesh_.boundaryMesh(); + const labelList& procPatchMap = mesh.globalData().procPatchMap(); + const polyBoundaryMesh& patches = mesh.boundaryMesh(); // Presize with (as estimate) size of patch to neighbour. forAll(procPatchMap, procI) @@ -280,12 +179,12 @@ Foam::autoPtr<Foam::mapDistribute> Foam::extendedStencil::calcDistributeMap // 2. The overall compact addressing is - // - myProcNo first + // - myProcNo data first (uncompacted) // - all other processors consecutively labelList compactStart(Pstream::nProcs()); compactStart[Pstream::myProcNo()] = 0; - label nCompact = mesh_.nCells()+nBnd; + label nCompact = globalNumbering.localSize(); forAll(compactStart, procI) { if (procI != Pstream::myProcNo()) @@ -321,7 +220,7 @@ Foam::autoPtr<Foam::mapDistribute> Foam::extendedStencil::calcDistributeMap { recvCompact[procI] = compactStart[procI] - + identity(mesh_.nCells()+nBnd); + + identity(globalNumbering.localSize()); } } labelListList sendCompact(Pstream::nProcs()); @@ -374,8 +273,9 @@ Foam::autoPtr<Foam::mapDistribute> Foam::extendedStencil::calcDistributeMap } } + // Constuct map for distribution of compact data. - return autoPtr<mapDistribute> + autoPtr<mapDistribute> mapPtr ( new mapDistribute ( @@ -385,15 +285,40 @@ Foam::autoPtr<Foam::mapDistribute> Foam::extendedStencil::calcDistributeMap true // reuse send/recv maps. ) ); + + return mapPtr; } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::extendedStencil::extendedStencil(const polyMesh& mesh) +Foam::extendedCellToFaceStencil::extendedCellToFaceStencil(const polyMesh& mesh) : mesh_(mesh) -{} +{ + // Check for transformation - not supported. + const polyBoundaryMesh& patches = mesh.boundaryMesh(); + + forAll(patches, patchI) + { + if (isA<coupledPolyPatch>(patches[patchI])) + { + const coupledPolyPatch& cpp = + refCast<const coupledPolyPatch>(patches[patchI]); + + if (!cpp.parallel() || cpp.separated()) + { + FatalErrorIn + ( + "extendedCellToFaceStencil::extendedCellToFaceStencil" + "(const polyMesh&)" + ) << "Coupled patches with transformations not supported." + << endl + << "Problematic patch " << cpp.name() << exit(FatalError); + } + } + } +} // ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H similarity index 78% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H index 6faff8f3a6c7219a69b594250d78c58476136637..bb0e92d11fc8d2dc6aa4e55758f8ff0c0c9b08f9 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencil.H @@ -23,10 +23,10 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::extendedStencil + Foam::extendedCellToFaceStencil Description - Calculates/constains the extended face stencil. + Calculates/constains the extended cell-to-face stencil. The stencil is a list of indices into either cells or boundary faces in a compact way. (element 0 is owner, 1 is neighbour). The index numbering @@ -41,13 +41,13 @@ Description - sum the weights*field. SourceFiles - extendedStencil.C - extendedStencilTemplates.C + extendedCellToFaceStencil.C + extendedCellToFaceStencilTemplates.C \*---------------------------------------------------------------------------*/ -#ifndef extendedStencil_H -#define extendedStencil_H +#ifndef extendedCellToFaceStencil_H +#define extendedCellToFaceStencil_H #include "mapDistribute.H" #include "volFields.H" @@ -61,10 +61,10 @@ namespace Foam class globalIndex; /*---------------------------------------------------------------------------*\ - Class extendedStencil Declaration + Class extendedCellToFaceStencil Declaration \*---------------------------------------------------------------------------*/ -class extendedStencil +class extendedCellToFaceStencil { protected: @@ -75,19 +75,6 @@ protected: // Protected Member Functions - //- Collect cell neighbours into extended stencil - void calcFaceStencil - ( - const labelListList& globalCellCells, - labelListList& faceStencil - ); - - //- Calculate distribute map - autoPtr<mapDistribute> calcDistributeMap - ( - const globalIndex& globalNumbering, - labelListList& faceStencil - ); private: @@ -95,22 +82,44 @@ private: // Private Member Functions //- Disallow default bitwise copy construct - extendedStencil(const extendedStencil&); + extendedCellToFaceStencil(const extendedCellToFaceStencil&); //- Disallow default bitwise assignment - void operator=(const extendedStencil&); + void operator=(const extendedCellToFaceStencil&); +protected: + + //- Write some statistics about stencil + static void writeStencilStats + ( + Ostream& os, + const labelListList& stencil, + const mapDistribute& map + ); + public: + // Declare name of the class and its debug switch + ClassName("extendedCellToFaceStencil"); + + // Constructors //- Construct from mesh - explicit extendedStencil(const polyMesh&); + explicit extendedCellToFaceStencil(const polyMesh&); // Member Functions + //- Calculate distribute map + static autoPtr<mapDistribute> calcDistributeMap + ( + const polyMesh& mesh, + const globalIndex& globalNumbering, + labelListList& faceStencil + ); + //- Use map to get the data into stencil order template<class T> static void collectData @@ -141,7 +150,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "extendedStencilTemplates.C" +# include "extendedCellToFaceStencilTemplates.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencilTemplates.C similarity index 94% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencilTemplates.C index 537b7520d867e0b434edbcc91e05f04f8f90b787..9ee125de9b52497fdf8068a1ebd0e73fa90c64fc 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilTemplates.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCellToFaceStencilTemplates.C @@ -24,12 +24,12 @@ License \*---------------------------------------------------------------------------*/ -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -void Foam::extendedStencil::collectData +void Foam::extendedCellToFaceStencil::collectData ( const mapDistribute& map, const labelListList& stencil, @@ -79,7 +79,7 @@ void Foam::extendedStencil::collectData template<class Type> Foam::tmp<Foam::GeometricField<Type, Foam::fvsPatchField, Foam::surfaceMesh> > -Foam::extendedStencil::weightedSum +Foam::extendedCellToFaceStencil::weightedSum ( const mapDistribute& map, const labelListList& stencil, @@ -101,7 +101,10 @@ Foam::extendedStencil::weightedSum ( fld.name(), mesh.time().timeName(), - mesh + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE, + false ), mesh, dimensioned<Type> diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedCentredStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCentredCellToFaceStencil.C similarity index 79% rename from src/finiteVolume/fvMesh/extendedStencil/extendedCentredStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCentredCellToFaceStencil.C index 252357a5f2e7680b718215a318b5119fb8b3cc35..acca48566fabffc3e0b4cbce3be39283fa83e786 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedCentredStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCentredCellToFaceStencil.C @@ -25,26 +25,34 @@ License \*---------------------------------------------------------------------------*/ #include "mapDistribute.H" -#include "extendedCentredStencil.H" -#include "faceStencil.H" +#include "extendedCentredCellToFaceStencil.H" +#include "cellToFaceStencil.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::extendedCentredStencil::extendedCentredStencil(const faceStencil& stencil) +Foam::extendedCentredCellToFaceStencil::extendedCentredCellToFaceStencil +( + const cellToFaceStencil& stencil +) : - extendedStencil(stencil.mesh()) + extendedCellToFaceStencil(stencil.mesh()) { stencil_ = stencil; - // Calculate distribute map (also renumbers stencil) - mapPtr_ = calcDistributeMap(stencil.globalNumbering(), stencil_); + // Calculate distribute map (also renumbers elements in stencil) + mapPtr_ = calcDistributeMap + ( + stencil.mesh(), + stencil.globalNumbering(), + stencil_ + ); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // Per face which elements of the stencil to keep. -void Foam::extendedCentredStencil::compact() +void Foam::extendedCentredCellToFaceStencil::compact() { boolList isInStencil(map().constructSize(), false); diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedCentredStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCentredCellToFaceStencil.H similarity index 79% rename from src/finiteVolume/fvMesh/extendedStencil/extendedCentredStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCentredCellToFaceStencil.H index edbf5ea48585e5739e9e5bc5436e582f1adcc378..c58e81db922cc3407bfcaaba91245977b2cf53ed 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedCentredStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedCentredCellToFaceStencil.H @@ -23,34 +23,34 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::extendedCentredStencil + Foam::extendedCentredCellToFaceStencil Description SourceFiles - extendedCentredStencil.C + extendedCentredCellToFaceStencil.C \*---------------------------------------------------------------------------*/ -#ifndef extendedCentredStencil_H -#define extendedCentredStencil_H +#ifndef extendedCentredCellToFaceStencil_H +#define extendedCentredCellToFaceStencil_H -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -class faceStencil; +class cellToFaceStencil; /*---------------------------------------------------------------------------*\ - Class extendedCentredStencil Declaration + Class extendedCentredCellToFaceStencil Declaration \*---------------------------------------------------------------------------*/ -class extendedCentredStencil +class extendedCentredCellToFaceStencil : - public extendedStencil + public extendedCellToFaceStencil { // Private data @@ -64,10 +64,13 @@ class extendedCentredStencil // Private Member Functions //- Disallow default bitwise copy construct - extendedCentredStencil(const extendedCentredStencil&); + extendedCentredCellToFaceStencil + ( + const extendedCentredCellToFaceStencil& + ); //- Disallow default bitwise assignment - void operator=(const extendedCentredStencil&); + void operator=(const extendedCentredCellToFaceStencil&); public: @@ -75,7 +78,7 @@ public: // Constructors //- Construct from uncompacted face stencil - explicit extendedCentredStencil(const faceStencil&); + explicit extendedCentredCellToFaceStencil(const cellToFaceStencil&); // Member Functions @@ -103,7 +106,13 @@ public: List<List<T> >& stencilFld ) const { - extendedStencil::collectData(map(), stencil(), fld, stencilFld); + extendedCellToFaceStencil::collectData + ( + map(), + stencil(), + fld, + stencilFld + ); } //- Sum vol field contributions to create face values @@ -114,7 +123,7 @@ public: const List<List<scalar> >& stencilWeights ) const { - return extendedStencil::weightedSum + return extendedCellToFaceStencil::weightedSum ( map(), stencil(), diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencil.C similarity index 69% rename from src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencil.C index b7fa870cf741bcfdadc683be7956f3fc4496c4f3..80e47855a8c8cd4966a80389fe7ac1ff4720238f 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencil.C @@ -24,14 +24,14 @@ License \*---------------------------------------------------------------------------*/ -#include "extendedUpwindStencil.H" -#include "faceStencil.H" +#include "extendedUpwindCellToFaceStencil.H" +#include "cellToFaceStencil.H" #include "syncTools.H" #include "SortableList.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::extendedUpwindStencil::selectOppositeFaces +void Foam::extendedUpwindCellToFaceStencil::selectOppositeFaces ( const boolList& nonEmptyFace, const scalar minOpposedness, @@ -103,7 +103,7 @@ void Foam::extendedUpwindStencil::selectOppositeFaces } -void Foam::extendedUpwindStencil::transportStencil +void Foam::extendedUpwindCellToFaceStencil::transportStencil ( const boolList& nonEmptyFace, const labelListList& faceStencil, @@ -168,8 +168,10 @@ void Foam::extendedUpwindStencil::transportStencil } if (n != transportedStencil.size()) { - FatalErrorIn("extendedUpwindStencil::transportStencil(..)") - << "problem:" << faceStencilSet + FatalErrorIn + ( + "extendedUpwindCellToFaceStencil::transportStencil(..)" + ) << "problem:" << faceStencilSet << abort(FatalError); } } @@ -188,15 +190,17 @@ void Foam::extendedUpwindStencil::transportStencil } if (n != transportedStencil.size()) { - FatalErrorIn("extendedUpwindStencil::transportStencil(..)") - << "problem:" << faceStencilSet + FatalErrorIn + ( + "extendedUpwindCellToFaceStencil::transportStencil(..)" + ) << "problem:" << faceStencilSet << abort(FatalError); } } } -void Foam::extendedUpwindStencil::transportStencils +void Foam::extendedUpwindCellToFaceStencil::transportStencils ( const labelListList& faceStencil, const scalar minOpposedness, @@ -240,6 +244,7 @@ void Foam::extendedUpwindStencil::transportStencils // Internal faces for (label faceI = 0; faceI < mesh_.nInternalFaces(); faceI++) { + // Get stencil as owner + neighbour + stencil from 'opposite' faces transportStencil ( nonEmptyFace, @@ -367,13 +372,15 @@ void Foam::extendedUpwindStencil::transportStencils // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::extendedUpwindStencil::extendedUpwindStencil +Foam::extendedUpwindCellToFaceStencil::extendedUpwindCellToFaceStencil ( - const faceStencil& stencil, + const cellToFaceStencil& stencil, + const bool pureUpwind, const scalar minOpposedness ) : - extendedStencil(stencil.mesh()) + extendedCellToFaceStencil(stencil.mesh()), + pureUpwind_(pureUpwind) { //forAll(stencil, faceI) //{ @@ -414,15 +421,145 @@ Foam::extendedUpwindStencil::extendedUpwindStencil ownMapPtr_ = calcDistributeMap ( + stencil.mesh(), stencil.globalNumbering(), ownStencil_ ); neiMapPtr_ = calcDistributeMap ( + stencil.mesh(), stencil.globalNumbering(), neiStencil_ ); + + // stencil now in compact form + if (pureUpwind_) + { + const fvMesh& mesh = dynamic_cast<const fvMesh&>(stencil.mesh()); + + List<List<point> > stencilPoints(ownStencil_.size()); + + // Owner stencil + // ~~~~~~~~~~~~~ + + collectData(ownMapPtr_(), ownStencil_, mesh.C(), stencilPoints); + + // Mask off all stencil points on wrong side of face + forAll(stencilPoints, faceI) + { + const point& fc = mesh.faceCentres()[faceI]; + const vector& fArea = mesh.faceAreas()[faceI]; + + const List<point>& points = stencilPoints[faceI]; + const labelList& stencil = ownStencil_[faceI]; + + DynamicList<label> newStencil(stencil.size()); + forAll(points, i) + { + if (((points[i]-fc) & fArea) < 0) + { + newStencil.append(stencil[i]); + } + } + if (newStencil.size() != stencil.size()) + { + ownStencil_[faceI].transfer(newStencil); + } + } + + + // Neighbour stencil + // ~~~~~~~~~~~~~~~~~ + + collectData(neiMapPtr_(), neiStencil_, mesh.C(), stencilPoints); + + // Mask off all stencil points on wrong side of face + forAll(stencilPoints, faceI) + { + const point& fc = mesh.faceCentres()[faceI]; + const vector& fArea = mesh.faceAreas()[faceI]; + + const List<point>& points = stencilPoints[faceI]; + const labelList& stencil = neiStencil_[faceI]; + + DynamicList<label> newStencil(stencil.size()); + forAll(points, i) + { + if (((points[i]-fc) & fArea) > 0) + { + newStencil.append(stencil[i]); + } + } + if (newStencil.size() != stencil.size()) + { + neiStencil_[faceI].transfer(newStencil); + } + } + + // Note: could compact schedule as well. for if cells are not needed + // across any boundary anymore. However relatively rare. + } +} + + +Foam::extendedUpwindCellToFaceStencil::extendedUpwindCellToFaceStencil +( + const cellToFaceStencil& stencil +) +: + extendedCellToFaceStencil(stencil.mesh()), + pureUpwind_(true) +{ + // Calculate stencil points with full stencil + + ownStencil_ = stencil; + + ownMapPtr_ = calcDistributeMap + ( + stencil.mesh(), + stencil.globalNumbering(), + ownStencil_ + ); + + const fvMesh& mesh = dynamic_cast<const fvMesh&>(stencil.mesh()); + + List<List<point> > stencilPoints(ownStencil_.size()); + collectData(ownMapPtr_(), ownStencil_, mesh.C(), stencilPoints); + + // Split stencil into owner and neighbour + neiStencil_.setSize(ownStencil_.size()); + + forAll(stencilPoints, faceI) + { + const point& fc = mesh.faceCentres()[faceI]; + const vector& fArea = mesh.faceAreas()[faceI]; + + const List<point>& points = stencilPoints[faceI]; + const labelList& stencil = ownStencil_[faceI]; + + DynamicList<label> newOwnStencil(stencil.size()); + DynamicList<label> newNeiStencil(stencil.size()); + forAll(points, i) + { + if (((points[i]-fc) & fArea) > 0) + { + newNeiStencil.append(stencil[i]); + } + else + { + newOwnStencil.append(stencil[i]); + } + } + if (newNeiStencil.size() > 0) + { + ownStencil_[faceI].transfer(newOwnStencil); + neiStencil_[faceI].transfer(newNeiStencil); + } + } + + // Should compact schedule. Or have both return the same schedule. + neiMapPtr_.reset(new mapDistribute(ownMapPtr_())); } diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencil.H similarity index 70% rename from src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencil.H index 174eb27a9d8d7b388a99bc085153ac9766eb210e..408d28ad8912d597814b58f4bcff273d48c0f226 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencil.H @@ -23,38 +23,50 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::extendedUpwindStencil + Foam::extendedUpwindCellToFaceStencil Description + Creates upwind stencil by shifting a centred stencil to upwind and downwind + faces and optionally removing all non-(up/down)wind faces ('pureUpwind'). + + Note: the minOpposedness parameter is to decide which upwind and + downwind faces to combine the stencils from. If myArea is the + local area and upwindArea + the area of the possible upwind candidate it will be included if + (upwindArea & myArea)/magSqr(myArea) > minOpposedness + so this includes both cosine and area. WIP. SourceFiles - extendedUpwindStencil.C - extendedUpwindStencilTemplates.C + extendedUpwindCellToFaceStencil.C + extendedUpwindCellToFaceStencilTemplates.C \*---------------------------------------------------------------------------*/ -#ifndef extendedUpwindStencil_H -#define extendedUpwindStencil_H +#ifndef extendedUpwindCellToFaceStencil_H +#define extendedUpwindCellToFaceStencil_H -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -class faceStencil; +class cellToFaceStencil; /*---------------------------------------------------------------------------*\ - Class extendedUpwindStencil Declaration + Class extendedUpwindCellToFaceStencil Declaration \*---------------------------------------------------------------------------*/ -class extendedUpwindStencil +class extendedUpwindCellToFaceStencil : - public extendedStencil + public extendedCellToFaceStencil { // Private data + //- Does stencil contain upwind points only + const bool pureUpwind_; + //- Swap map for getting neigbouring data autoPtr<mapDistribute> ownMapPtr_; autoPtr<mapDistribute> neiMapPtr_; @@ -103,26 +115,41 @@ class extendedUpwindStencil //- Disallow default bitwise copy construct - extendedUpwindStencil(const extendedUpwindStencil&); + extendedUpwindCellToFaceStencil(const extendedUpwindCellToFaceStencil&); //- Disallow default bitwise assignment - void operator=(const extendedUpwindStencil&); + void operator=(const extendedUpwindCellToFaceStencil&); public: // Constructors - //- Construct from mesh and uncompacted face stencil - extendedUpwindStencil + //- Construct from mesh and uncompacted centred face stencil. + // Transports facestencil to create owner and neighbour versions. + // pureUpwind to remove any remaining downwind cells. + extendedUpwindCellToFaceStencil ( - const faceStencil&, + const cellToFaceStencil&, + const bool pureUpwind, const scalar minOpposedness ); + //- Construct from mesh and uncompacted centred face stencil. Splits + // stencil into owner and neighbour (so always pure upwind) + extendedUpwindCellToFaceStencil + ( + const cellToFaceStencil& + ); + // Member Functions + bool pureUpwind() const + { + return pureUpwind_; + } + //- Return reference to the parallel distribution map const mapDistribute& ownMap() const { @@ -167,7 +194,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "extendedUpwindStencilTemplates.C" +# include "extendedUpwindCellToFaceStencilTemplates.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencilTemplates.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencilTemplates.C similarity index 95% rename from src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencilTemplates.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencilTemplates.C index 5482261df8ba59e1455f3a13dcbcc567cfbbfd36..ee545754fa2fa02c1fdb923a516a1c4aad76668c 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedUpwindStencilTemplates.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/extendedUpwindCellToFaceStencilTemplates.C @@ -24,13 +24,13 @@ License \*---------------------------------------------------------------------------*/ -#include "extendedStencil.H" +#include "extendedCellToFaceStencil.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> Foam::tmp<Foam::GeometricField<Type, Foam::fvsPatchField, Foam::surfaceMesh> > -Foam::extendedUpwindStencil::weightedSum +Foam::extendedUpwindCellToFaceStencil::weightedSum ( const surfaceScalarField& phi, const GeometricField<Type, fvPatchField, volMesh>& fld, @@ -54,7 +54,10 @@ Foam::extendedUpwindStencil::weightedSum ( fld.name(), mesh.time().timeName(), - mesh + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE, + false ), mesh, dimensioned<Type> diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..d7d7797da8b6d59cfbfcd47ae15b840e5d71bd6b --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.C @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CECCellToFaceStencil.H" +#include "CECCellToCellStencil.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CECCellToFaceStencil::CECCellToFaceStencil(const polyMesh& mesh) +: + cellToFaceStencil(mesh) +{ + // Calculate per cell the (edge) connected cells (in global numbering) + CECCellToCellStencil globalCellCells(mesh); + + // Add stencils of neighbouring cells to create faceStencil + labelListList faceStencil; + calcFaceStencil(globalCellCells, faceStencil); + + // Transfer to *this + transfer(faceStencil); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..640c2aa4f4746aa0a63e0805870b6d7b67b6f00a --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CECCellToFaceStencil.H @@ -0,0 +1,81 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::CECCellToFaceStencil + +Description + Combined corresponding cellToCellStencil of owner and neighbour. + +SourceFiles + CECCellToFaceStencil.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CECCellToFaceStencil_H +#define CECCellToFaceStencil_H + +#include "cellToFaceStencil.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CECCellToFaceStencil Declaration +\*---------------------------------------------------------------------------*/ + +class CECCellToFaceStencil +: + public cellToFaceStencil +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + CECCellToFaceStencil(const CECCellToFaceStencil&); + + //- Disallow default bitwise assignment + void operator=(const CECCellToFaceStencil&); + + +public: + + // Constructors + + //- Construct from all cells and boundary faces + explicit CECCellToFaceStencil(const polyMesh&); + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..9f19c90053568ae686d4b0cf15a80ebe092f6f40 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.C @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CFCCellToFaceStencil.H" +#include "CFCCellToCellStencil.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CFCCellToFaceStencil::CFCCellToFaceStencil(const polyMesh& mesh) +: + cellToFaceStencil(mesh) +{ + // Calculate per cell the (face) connected cells (in global numbering) + CFCCellToCellStencil globalCellCells(mesh); + + // Add stencils of neighbouring cells to create faceStencil + labelListList faceStencil; + calcFaceStencil(globalCellCells, faceStencil); + + // Transfer to *this + transfer(faceStencil); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..a05b1b7aa6dfcaf2425d27c68bbfa57983239347 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CFCCellToFaceStencil.H @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::CFCCellToFaceStencil + +Description + Combined corresponding cellToCellStencil of owner and neighbour. + +SourceFiles + CFCCellToFaceStencil.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CFCCellToFaceStencil_H +#define CFCCellToFaceStencil_H + +#include "cellToFaceStencil.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CFCCellToFaceStencil Declaration +\*---------------------------------------------------------------------------*/ + +class CFCCellToFaceStencil +: + public cellToFaceStencil +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + CFCCellToFaceStencil(const CFCCellToFaceStencil&); + + //- Disallow default bitwise assignment + void operator=(const CFCCellToFaceStencil&); + +public: + + // Constructors + + //- Construct from mesh + explicit CFCCellToFaceStencil(const polyMesh& mesh); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..3414af9932b2cdfc9577aa24c461839562535d00 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.C @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CPCCellToFaceStencil.H" +#include "CPCCellToCellStencil.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CPCCellToFaceStencil::CPCCellToFaceStencil(const polyMesh& mesh) +: + cellToFaceStencil(mesh) +{ + // Calculate per cell the (face) connected cells (in global numbering) + CPCCellToCellStencil globalCellCells(mesh); + + // Add stencils of neighbouring cells to create faceStencil + labelListList faceStencil; + calcFaceStencil(globalCellCells, faceStencil); + + // Transfer to *this + transfer(faceStencil); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..a82886e11145aca2883ac6846d822dca268eb0bd --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/CPCCellToFaceStencil.H @@ -0,0 +1,81 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::CPCCellToFaceStencil + +Description + Combined corresponding cellToCellStencil of owner and neighbour. + +SourceFiles + CPCCellToFaceStencil.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CPCCellToFaceStencil_H +#define CPCCellToFaceStencil_H + +#include "cellToFaceStencil.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CPCCellToFaceStencil Declaration +\*---------------------------------------------------------------------------*/ + +class CPCCellToFaceStencil +: + public cellToFaceStencil +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + CPCCellToFaceStencil(const CPCCellToFaceStencil&); + + //- Disallow default bitwise assignment + void operator=(const CPCCellToFaceStencil&); + + +public: + + // Constructors + + //- Construct from all cells and boundary faces + explicit CPCCellToFaceStencil(const polyMesh&); + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceEdgeCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.C similarity index 92% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceEdgeCellStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.C index 2d56b1b1942523b2c02acf5eb623f8f1084c6fec..2d79bd2048008b573200862d3bce53022c6f1b8d 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceEdgeCellStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ -#include "faceEdgeCellStencil.H" +#include "FECCellToFaceStencil.H" #include "syncTools.H" #include "emptyPolyPatch.H" //#include "meshTools.H" @@ -34,7 +34,7 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Calculates per edge the neighbour data (= edgeCells) -void Foam::faceEdgeCellStencil::calcEdgeBoundaryData +void Foam::FECCellToFaceStencil::calcEdgeBoundaryData ( const boolList& isValidBFace, const labelList& boundaryEdges, @@ -73,7 +73,7 @@ void Foam::faceEdgeCellStencil::calcEdgeBoundaryData // Calculates per face the edge connected data (= cell or boundary in global // numbering). -void Foam::faceEdgeCellStencil::calcFaceStencil +void Foam::FECCellToFaceStencil::calcFaceStencil ( labelListList& faceStencil ) const @@ -220,7 +220,7 @@ void Foam::faceEdgeCellStencil::calcFaceStencil { if (iter.key() == globalOwn || iter.key() == globalNei) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") + FatalErrorIn("FECCellToFaceStencil::calcFaceStencil(..)") << "problem:" << faceStencilSet << abort(FatalError); } @@ -281,8 +281,10 @@ void Foam::faceEdgeCellStencil::calcFaceStencil { if (iter.key() == globalOwn || iter.key() == globalNei) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") - << "problem:" << faceStencilSet + FatalErrorIn + ( + "FECCellToFaceStencil::calcFaceStencil(..)" + ) << "problem:" << faceStencilSet << abort(FatalError); } faceStencil[faceI][n++] = iter.key(); @@ -345,8 +347,10 @@ void Foam::faceEdgeCellStencil::calcFaceStencil { if (iter.key() == globalOwn) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") - << "problem:" << faceStencilSet + FatalErrorIn + ( + "FECCellToFaceStencil::calcFaceStencil(..)" + ) << "problem:" << faceStencilSet << abort(FatalError); } faceStencil[faceI][n++] = iter.key(); @@ -363,7 +367,7 @@ void Foam::faceEdgeCellStencil::calcFaceStencil label globalOwn = globalNumbering().toGlobal(own[faceI]); if (faceStencil[faceI][0] != globalOwn) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") + FatalErrorIn("FECCellToFaceStencil::calcFaceStencil(..)") << "problem:" << faceStencil[faceI] << " globalOwn:" << globalOwn << abort(FatalError); @@ -371,7 +375,7 @@ void Foam::faceEdgeCellStencil::calcFaceStencil label globalNei = globalNumbering().toGlobal(nei[faceI]); if (faceStencil[faceI][1] != globalNei) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") + FatalErrorIn("FECCellToFaceStencil::calcFaceStencil(..)") << "problem:" << faceStencil[faceI] << " globalNei:" << globalNei << abort(FatalError); @@ -392,7 +396,7 @@ void Foam::faceEdgeCellStencil::calcFaceStencil label globalOwn = globalNumbering().toGlobal(own[faceI]); if (faceStencil[faceI][0] != globalOwn) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") + FatalErrorIn("FECCellToFaceStencil::calcFaceStencil(..)") << "problem:" << faceStencil[faceI] << " globalOwn:" << globalOwn << abort(FatalError); @@ -400,7 +404,7 @@ void Foam::faceEdgeCellStencil::calcFaceStencil label globalNei = neiGlobalCell[faceI-mesh().nInternalFaces()]; if (faceStencil[faceI][1] != globalNei) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") + FatalErrorIn("FECCellToFaceStencil::calcFaceStencil(..)") << "problem:" << faceStencil[faceI] << " globalNei:" << globalNei << abort(FatalError); @@ -416,7 +420,7 @@ void Foam::faceEdgeCellStencil::calcFaceStencil label globalOwn = globalNumbering().toGlobal(own[faceI]); if (faceStencil[faceI][0] != globalOwn) { - FatalErrorIn("faceEdgeCellStencil::calcFaceStencil(..)") + FatalErrorIn("FECCellToFaceStencil::calcFaceStencil(..)") << "problem:" << faceStencil[faceI] << " globalOwn:" << globalOwn << abort(FatalError); @@ -429,9 +433,9 @@ void Foam::faceEdgeCellStencil::calcFaceStencil // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::faceEdgeCellStencil::faceEdgeCellStencil(const polyMesh& mesh) +Foam::FECCellToFaceStencil::FECCellToFaceStencil(const polyMesh& mesh) : - faceStencil(mesh) + cellToFaceStencil(mesh) { // Calculate per face the (edge) connected cells (in global numbering) labelListList faceStencil; diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceEdgeCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H similarity index 83% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceEdgeCellStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H index dfbb990fbce92858578e87db23071bebd1986758..6a00f702ea92cc9d19d655ad0ee19ff70e846510 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceEdgeCellStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/FECCellToFaceStencil.H @@ -23,23 +23,20 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::faceEdgeCellStencil + Foam::FECCellToFaceStencil Description All cells connected via edge to face. SourceFiles - faceEdgeCellStencil.C + FECCellToFaceStencil.C \*---------------------------------------------------------------------------*/ -#ifndef faceEdgeCellStencil_H -#define faceEdgeCellStencil_H +#ifndef FECCellToFaceStencil_H +#define FECCellToFaceStencil_H -#include "faceStencil.H" -#include "boolList.H" -#include "HashSet.H" -#include "Map.H" +#include "cellToFaceStencil.H" #include "EdgeMap.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,12 +45,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class faceEdgeCellStencil Declaration + Class FECCellToFaceStencil Declaration \*---------------------------------------------------------------------------*/ -class faceEdgeCellStencil +class FECCellToFaceStencil : - public faceStencil + public cellToFaceStencil { // Private Member Functions @@ -69,10 +66,10 @@ class faceEdgeCellStencil //- Disallow default bitwise copy construct - faceEdgeCellStencil(const faceEdgeCellStencil&); + FECCellToFaceStencil(const FECCellToFaceStencil&); //- Disallow default bitwise assignment - void operator=(const faceEdgeCellStencil&); + void operator=(const FECCellToFaceStencil&); public: @@ -80,7 +77,7 @@ public: // Constructors //- Construct from all cells and boundary faces - explicit faceEdgeCellStencil(const polyMesh&); + explicit FECCellToFaceStencil(const polyMesh&); }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceStencil.C b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/cellToFaceStencil.C similarity index 95% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceStencil.C rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/cellToFaceStencil.C index a0dac7b004f24c487911ac79cadf682b42269547..89a2cc5fecc389620dffce1f2030b53c6054cc1c 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceStencil.C +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/cellToFaceStencil.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ -#include "faceStencil.H" +#include "cellToFaceStencil.H" #include "syncTools.H" #include "SortableList.H" #include "emptyPolyPatch.H" @@ -32,7 +32,7 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Merge two list and guarantee global0,global1 are first. -void Foam::faceStencil::merge +void Foam::cellToFaceStencil::merge ( const label global0, const label global1, @@ -124,7 +124,7 @@ void Foam::faceStencil::merge if (resultI != result.size()) { - FatalErrorIn("faceStencil::merge(..)") + FatalErrorIn("cellToFaceStencil::merge(..)") << "problem" << abort(FatalError); } @@ -133,7 +133,7 @@ void Foam::faceStencil::merge // Merge two list and guarantee globalI is first. -void Foam::faceStencil::merge +void Foam::cellToFaceStencil::merge ( const label globalI, const labelList& pGlobals, @@ -168,7 +168,7 @@ void Foam::faceStencil::merge } -void Foam::faceStencil::validBoundaryFaces(boolList& isValidBFace) const +void Foam::cellToFaceStencil::validBoundaryFaces(boolList& isValidBFace) const { const polyBoundaryMesh& patches = mesh().boundaryMesh(); @@ -191,7 +191,7 @@ void Foam::faceStencil::validBoundaryFaces(boolList& isValidBFace) const Foam::autoPtr<Foam::indirectPrimitivePatch> -Foam::faceStencil::allCoupledFacesPatch() const +Foam::cellToFaceStencil::allCoupledFacesPatch() const { const polyBoundaryMesh& patches = mesh().boundaryMesh(); @@ -239,7 +239,7 @@ Foam::faceStencil::allCoupledFacesPatch() const } -void Foam::faceStencil::unionEqOp::operator() +void Foam::cellToFaceStencil::unionEqOp::operator() ( labelList& x, const labelList& y @@ -264,7 +264,7 @@ void Foam::faceStencil::unionEqOp::operator() } -void Foam::faceStencil::insertFaceCells +void Foam::cellToFaceStencil::insertFaceCells ( const label exclude0, const label exclude1, @@ -316,7 +316,7 @@ void Foam::faceStencil::insertFaceCells } -Foam::labelList Foam::faceStencil::calcFaceCells +Foam::labelList Foam::cellToFaceStencil::calcFaceCells ( const boolList& isValidBFace, const labelList& faceLabels, @@ -339,7 +339,7 @@ Foam::labelList Foam::faceStencil::calcFaceCells // Calculates per face a list of global cell/face indices. -void Foam::faceStencil::calcFaceStencil +void Foam::cellToFaceStencil::calcFaceStencil ( const labelListList& globalCellCells, labelListList& faceStencil @@ -502,7 +502,7 @@ void Foam::faceStencil::calcFaceStencil // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::faceStencil::faceStencil(const polyMesh& mesh) +Foam::cellToFaceStencil::cellToFaceStencil(const polyMesh& mesh) : mesh_(mesh), globalNumbering_(mesh_.nCells()+mesh_.nFaces()-mesh_.nInternalFaces()) diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceStencil.H b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/cellToFaceStencil.H similarity index 89% rename from src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceStencil.H rename to src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/cellToFaceStencil.H index a7e3105bc7d5177479d97f7f4adb5c7f4e05c92d..e577a857d51ee0371b6c86b8ff9fd6de3f1f41e7 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/faceStencil/faceStencil.H +++ b/src/finiteVolume/fvMesh/extendedStencil/cellToFace/fullStencils/cellToFaceStencil.H @@ -23,18 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::faceStencil + Foam::cellToFaceStencil Description - baseclass for extended face-cell addressing. + baseclass for extended cell-to-facel stencils (face values from + neighbouring cells) SourceFiles faceStencil.C \*---------------------------------------------------------------------------*/ -#ifndef faceStencil_H -#define faceStencil_H +#ifndef cellToFaceStencil_H +#define cellToFaceStencil_H #include "globalIndex.H" #include "boolList.H" @@ -49,10 +50,10 @@ namespace Foam class polyMesh; /*---------------------------------------------------------------------------*\ - Class faceStencil Declaration + Class cellToFaceStencil Declaration \*---------------------------------------------------------------------------*/ -class faceStencil +class cellToFaceStencil : public labelListList { @@ -66,10 +67,12 @@ class faceStencil // Private Member Functions + //- Disallow default bitwise copy construct + cellToFaceStencil(const cellToFaceStencil&); + //- Disallow default bitwise assignment - void operator=(const faceStencil&); + void operator=(const cellToFaceStencil&); - protected: @@ -130,7 +133,7 @@ public: // Constructors //- Construct from mesh - explicit faceStencil(const polyMesh&); + explicit cellToFaceStencil(const polyMesh&); // Member Functions diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCECStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCECStencilObject.C deleted file mode 100644 index f27e24118f6928c4dc79332be76a88d839542df7..0000000000000000000000000000000000000000 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCECStencilObject.C +++ /dev/null @@ -1,38 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "upwindCECStencilObject.H" - - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(upwindCECStencilObject, 0); -} - - -// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindFECStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindFECStencilObject.C deleted file mode 100644 index d9202eaa6de0b967e424946aef97504ff2948f16..0000000000000000000000000000000000000000 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindFECStencilObject.C +++ /dev/null @@ -1,38 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "upwindFECStencilObject.H" - - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(upwindFECStencilObject, 0); -} - - -// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/MeshObjects/centredCFCFaceToCellStencilObject.C b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/MeshObjects/centredCFCFaceToCellStencilObject.C new file mode 100644 index 0000000000000000000000000000000000000000..87d4a4a4889e1a94afb1d0c5267c822bdc9fdaa0 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/MeshObjects/centredCFCFaceToCellStencilObject.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "centredCFCFaceToCellStencilObject.H" + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(centredCFCFaceToCellStencilObject, 0); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCFCStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/MeshObjects/centredCFCFaceToCellStencilObject.H similarity index 73% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCFCStencilObject.H rename to src/finiteVolume/fvMesh/extendedStencil/faceToCell/MeshObjects/centredCFCFaceToCellStencilObject.H index 43b87a31f0587201ab3ea8460ea8c874a402e22f..4877d63a5ad64530e7f28e33a07d7957cd5af7fa 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCFCStencilObject.H +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/MeshObjects/centredCFCFaceToCellStencilObject.H @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::centredCFCStencilObject + Foam::centredCFCFaceToCellStencilObject Description @@ -31,11 +31,11 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef centredCFCStencilObject_H -#define centredCFCStencilObject_H +#ifndef centredCFCFaceToCellStencilObject_H +#define centredCFCFaceToCellStencilObject_H -#include "extendedCentredStencil.H" -#include "cellFaceCellStencil.H" +#include "extendedCentredFaceToCellStencil.H" +#include "CFCFaceToCellStencil.H" #include "MeshObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,34 +44,34 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class centredCFCStencilObject Declaration + Class centredCFCFaceToCellStencilObject Declaration \*---------------------------------------------------------------------------*/ -class centredCFCStencilObject +class centredCFCFaceToCellStencilObject : - public MeshObject<fvMesh, centredCFCStencilObject>, - public extendedCentredStencil + public MeshObject<fvMesh, centredCFCFaceToCellStencilObject>, + public extendedCentredFaceToCellStencil { public: - TypeName("centredCFCStencil"); + TypeName("centredCFCFaceToCellStencil"); // Constructors //- Construct from uncompacted face stencil - explicit centredCFCStencilObject + explicit centredCFCFaceToCellStencilObject ( const fvMesh& mesh ) : - MeshObject<fvMesh, centredCFCStencilObject>(mesh), - extendedCentredStencil(cellFaceCellStencil(mesh)) + MeshObject<fvMesh, centredCFCFaceToCellStencilObject>(mesh), + extendedCentredFaceToCellStencil(CFCFaceToCellStencil(mesh)) {} //- Destructor - virtual ~centredCFCStencilObject() + virtual ~centredCFCFaceToCellStencilObject() {} }; diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedCentredFaceToCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedCentredFaceToCellStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..d7dcc2a093d15d4f28985292d670213b16de4f71 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedCentredFaceToCellStencil.C @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "mapDistribute.H" +#include "extendedCentredFaceToCellStencil.H" +#include "faceToCellStencil.H" + +// Only for access to calcDistributeMap <- needs to be moved out +#include "extendedCellToFaceStencil.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::extendedCentredFaceToCellStencil::extendedCentredFaceToCellStencil +( + const faceToCellStencil& stencil +) +: + extendedFaceToCellStencil(stencil.mesh()) +{ + stencil_ = stencil; + + // Calculate distribute map (also renumbers elements in stencil) + mapPtr_ = extendedCellToFaceStencil::calcDistributeMap + ( + stencil.mesh(), + stencil.globalNumbering(), + stencil_ + ); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +// Per face which elements of the stencil to keep. +void Foam::extendedCentredFaceToCellStencil::compact() +{ + boolList isInStencil(map().constructSize(), false); + + forAll(stencil_, faceI) + { + const labelList& stencilCells = stencil_[faceI]; + + forAll(stencilCells, i) + { + isInStencil[stencilCells[i]] = true; + } + } + + mapPtr_().compact(isInStencil); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedCentredFaceToCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedCentredFaceToCellStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..137679f22665966346b07d624c233534066f10f4 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedCentredFaceToCellStencil.H @@ -0,0 +1,146 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::extendedCentredFaceToCellStencil + +Description + +SourceFiles + extendedCentredFaceToCellStencil.C + +\*---------------------------------------------------------------------------*/ + +#ifndef extendedCentredFaceToCellStencil_H +#define extendedCentredFaceToCellStencil_H + +#include "extendedFaceToCellStencil.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class faceToCellStencil; + +/*---------------------------------------------------------------------------*\ + Class extendedCentredFaceToCellStencil Declaration +\*---------------------------------------------------------------------------*/ + +class extendedCentredFaceToCellStencil +: + public extendedFaceToCellStencil +{ + // Private data + + //- Swap map for getting neigbouring data + autoPtr<mapDistribute> mapPtr_; + + //- Per face the stencil. + labelListList stencil_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + extendedCentredFaceToCellStencil + ( + const extendedCentredFaceToCellStencil& + ); + + //- Disallow default bitwise assignment + void operator=(const extendedCentredFaceToCellStencil&); + + +public: + + // Constructors + + //- Construct from uncompacted face stencil + explicit extendedCentredFaceToCellStencil(const faceToCellStencil&); + + + // Member Functions + + //- Return reference to the parallel distribution map + const mapDistribute& map() const + { + return mapPtr_(); + } + + //- Return reference to the stencil + const labelListList& stencil() const + { + return stencil_; + } + + //- After removing elements from the stencil adapt the schedule (map). + void compact(); + + //- Use map to get the data into stencil order + template<class T> + void collectData + ( + const GeometricField<T, fvsPatchField, surfaceMesh>& fld, + List<List<T> >& stencilFld + ) const + { + extendedFaceToCellStencil::collectData + ( + map(), + stencil(), + fld, + stencilFld + ); + } + + //- Sum surface field contributions to create cell values + template<class Type> + tmp<GeometricField<Type, fvPatchField, volMesh> > weightedSum + ( + const GeometricField<Type, fvsPatchField, surfaceMesh>& fld, + const List<List<scalar> >& stencilWeights + ) const + { + return extendedFaceToCellStencil::weightedSum + ( + map(), + stencil(), + fld, + stencilWeights + ); + } + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..4f0f5c41ad581b672bc9cd77e4a6a335d71afb27 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencil.C @@ -0,0 +1,62 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "extendedFaceToCellStencil.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::extendedFaceToCellStencil::extendedFaceToCellStencil(const polyMesh& mesh) +: + mesh_(mesh) +{ + // Check for transformation - not supported. + const polyBoundaryMesh& patches = mesh.boundaryMesh(); + + forAll(patches, patchI) + { + if (isA<coupledPolyPatch>(patches[patchI])) + { + const coupledPolyPatch& cpp = + refCast<const coupledPolyPatch>(patches[patchI]); + + if (!cpp.parallel() || cpp.separated()) + { + FatalErrorIn + ( + "extendedFaceToCellStencil::extendedFaceToCellStencil" + "(const polyMesh&)" + ) << "Coupled patches with transformations not supported." + << endl + << "Problematic patch " << cpp.name() << exit(FatalError); + } + } + } +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..5c334786c6051427ac3927f4f13788890211dce7 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencil.H @@ -0,0 +1,121 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::extendedFaceToCellStencil + +Description + Note: transformations on coupled patches not supported. Problem is the + positions of cells reachable through these patches. + +SourceFiles + extendedFaceToCellStencil.C + extendedFaceToCellStencilTemplates.C + +\*---------------------------------------------------------------------------*/ + +#ifndef extendedFaceToCellStencil_H +#define extendedFaceToCellStencil_H + +#include "mapDistribute.H" +#include "volFields.H" +#include "surfaceFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class globalIndex; + +/*---------------------------------------------------------------------------*\ + Class extendedFaceToCellStencil Declaration +\*---------------------------------------------------------------------------*/ + +class extendedFaceToCellStencil +{ +protected: + + // Protected data + + const polyMesh& mesh_; + +private: + + // Private Member Functions + + //- Disallow default bitwise copy construct + extendedFaceToCellStencil(const extendedFaceToCellStencil&); + + //- Disallow default bitwise assignment + void operator=(const extendedFaceToCellStencil&); + + +public: + + // Constructors + + //- Construct from mesh + explicit extendedFaceToCellStencil(const polyMesh&); + + + // Member Functions + + //- Use map to get the data into stencil order + template<class T> + static void collectData + ( + const mapDistribute& map, + const labelListList& stencil, + const GeometricField<T, fvsPatchField, surfaceMesh>& fld, + List<List<T> >& stencilFld + ); + + //- Sum surface field contributions to create cell values + template<class Type> + static tmp<GeometricField<Type, fvPatchField, volMesh> > weightedSum + ( + const mapDistribute& map, + const labelListList& stencil, + const GeometricField<Type, fvsPatchField, surfaceMesh>& fld, + const List<List<scalar> >& stencilWeights + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "extendedFaceToCellStencilTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencilTemplates.C b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencilTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..17210c360c8de0417611c4aacb9a4a4c1d69271c --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/extendedFaceToCellStencilTemplates.C @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "extendedFaceToCellStencil.H" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +void Foam::extendedFaceToCellStencil::collectData +( + const mapDistribute& map, + const labelListList& stencil, + const GeometricField<Type, fvsPatchField, surfaceMesh>& fld, + List<List<Type> >& stencilFld +) +{ + // 1. Construct face data in compact addressing + List<Type> compactFld(map.constructSize(), pTraits<Type>::zero); + + // Insert my internal values + forAll(fld, cellI) + { + compactFld[cellI] = fld[cellI]; + } + // Insert my boundary values + label nCompact = fld.size(); + forAll(fld.boundaryField(), patchI) + { + const fvsPatchField<Type>& pfld = fld.boundaryField()[patchI]; + + forAll(pfld, i) + { + compactFld[nCompact++] = pfld[i]; + } + } + + // Do all swapping + map.distribute(compactFld); + + // 2. Pull to stencil + stencilFld.setSize(stencil.size()); + + forAll(stencil, faceI) + { + const labelList& compactCells = stencil[faceI]; + + stencilFld[faceI].setSize(compactCells.size()); + + forAll(compactCells, i) + { + stencilFld[faceI][i] = compactFld[compactCells[i]]; + } + } +} + + +template<class Type> +Foam::tmp<Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh> > +Foam::extendedFaceToCellStencil::weightedSum +( + const mapDistribute& map, + const labelListList& stencil, + const GeometricField<Type, fvsPatchField, surfaceMesh>& fld, + const List<List<scalar> >& stencilWeights +) +{ + const fvMesh& mesh = fld.mesh(); + + // Collect internal and boundary values + List<List<Type> > stencilFld; + collectData(map, stencil, fld, stencilFld); + + tmp<GeometricField<Type, fvPatchField, volMesh> > tsfCorr + ( + new GeometricField<Type, fvPatchField, volMesh> + ( + IOobject + ( + fld.name(), + mesh.time().timeName(), + mesh + ), + mesh, + dimensioned<Type> + ( + fld.name(), + fld.dimensions(), + pTraits<Type>::zero + ) + ) + ); + GeometricField<Type, fvPatchField, volMesh>& sf = tsfCorr(); + + // cells + forAll(sf, cellI) + { + const List<Type>& stField = stencilFld[cellI]; + const List<scalar>& stWeight = stencilWeights[cellI]; + + forAll(stField, i) + { + sf[cellI] += stField[i]*stWeight[i]; + } + } + + // Boundaries values? + + return tsfCorr; +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.C b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.C new file mode 100644 index 0000000000000000000000000000000000000000..c0d2302f0b3d97443b9a296724125fb6b87452c9 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.C @@ -0,0 +1,231 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CFCFaceToCellStencil.H" +#include "syncTools.H" +#include "emptyPolyPatch.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// Calculates per face the neighbour data (= faces of cell). Leaves out the +// face itself since this is already in stencil. +void Foam::CFCFaceToCellStencil::calcFaceBoundaryData +( + labelListList& neiGlobal +) const +{ + const polyBoundaryMesh& patches = mesh().boundaryMesh(); + const label nBnd = mesh().nFaces()-mesh().nInternalFaces(); + const labelList& own = mesh().faceOwner(); + + neiGlobal.setSize(nBnd); + + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + label faceI = pp.start(); + + if (pp.coupled()) + { + // For coupled faces get the faces of the cell on the other side + forAll(pp, i) + { + const labelList& cFaces = mesh().cells()[own[faceI]]; + + labelList& globFaces = neiGlobal[faceI-mesh().nInternalFaces()]; + globFaces.setSize(cFaces.size()-1); + label globI = 0; + + forAll(cFaces, j) + { + if (cFaces[j] != faceI) + { + globFaces[globI++] = globalNumbering().toGlobal + ( + cFaces[j] + ); + } + } + faceI++; + } + } + else if (isA<emptyPolyPatch>(pp)) + { + // Do nothing. + } + else + { + // Do nothing since face itself already in stencil + } + } + syncTools::swapBoundaryFaceList(mesh(), neiGlobal, false); +} + + +// Calculates per cell the neighbour data (= cell or boundary in global +// numbering). First element is always cell itself! +void Foam::CFCFaceToCellStencil::calcCellStencil(labelListList& globalCellFaces) + const +{ + const label nBnd = mesh().nFaces()-mesh().nInternalFaces(); + const labelList& own = mesh().faceOwner(); + const labelList& nei = mesh().faceNeighbour(); + + + // Calculate faces of coupled neighbour (in global numbering) + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + labelListList neiGlobal(nBnd); + calcFaceBoundaryData(neiGlobal); + + + + // Non-empty boundary faces + boolList validBFace(mesh().nFaces()-mesh().nInternalFaces(), true); + + const polyBoundaryMesh& patches = mesh().boundaryMesh(); + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (isA<emptyPolyPatch>(pp)) + { + label bFaceI = pp.start()-mesh().nInternalFaces(); + forAll(pp, i) + { + validBFace[bFaceI++] = false; + } + } + } + + + // Determine faces of cellCells in global numbering + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + DynamicList<label> allGlobalFaces(100); + + globalCellFaces.setSize(mesh().nCells()); + forAll(globalCellFaces, cellI) + { + const cell& cFaces = mesh().cells()[cellI]; + + allGlobalFaces.clear(); + + // My faces first + forAll(cFaces, i) + { + label faceI = cFaces[i]; + + if + ( + mesh().isInternalFace(faceI) + || validBFace[faceI-mesh().nInternalFaces()] + ) + { + allGlobalFaces.append(globalNumbering().toGlobal(faceI)); + } + } + + // faces of neighbouring cells second + forAll(cFaces, i) + { + label faceI = cFaces[i]; + + if (mesh().isInternalFace(faceI)) + { + label nbrCellI = own[faceI]; + if (nbrCellI == cellI) + { + nbrCellI = nei[faceI]; + } + const cell& nbrFaces = mesh().cells()[nbrCellI]; + + forAll(nbrFaces, j) + { + label nbrFaceI = nbrFaces[j]; + + if + ( + mesh().isInternalFace(nbrFaceI) + || validBFace[nbrFaceI-mesh().nInternalFaces()] + ) + { + label nbrGlobalI = globalNumbering().toGlobal(nbrFaceI); + + // Check if already there. Note:should use hashset? + if (findIndex(allGlobalFaces, nbrGlobalI) == -1) + { + allGlobalFaces.append(nbrGlobalI); + } + } + } + } + else + { + const labelList& nbrGlobalFaces = + neiGlobal[faceI-mesh().nInternalFaces()]; + + forAll(nbrGlobalFaces, j) + { + label nbrGlobalI = nbrGlobalFaces[j]; + + // Check if already there. Note:should use hashset? + if (findIndex(allGlobalFaces, nbrGlobalI) == -1) + { + allGlobalFaces.append(nbrGlobalI); + } + } + } + } + + globalCellFaces[cellI] = allGlobalFaces; + //Pout<< "** cell:" << cellI + // << " at:" << mesh().cellCentres()[cellI] + // << endl; + //const labelList& globalFaces = globalCellFaces[cellI]; + //forAll(globalFaces, i) + //{ + // label faceI = globalNumbering().toLocal(globalFaces[i]); + // Pout<< " face:" << faceI + // << " at:" << mesh().faceCentres()[faceI] + // << endl; + //} + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CFCFaceToCellStencil::CFCFaceToCellStencil(const polyMesh& mesh) +: + faceToCellStencil(mesh) +{ + // Calculate per cell the (face) connected cells (in global numbering) + calcCellStencil(*this); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCECStencilObject.H b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H similarity index 70% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCECStencilObject.H rename to src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H index 29ece11951ce7d41458b6a43bdc67dd4f4bb7482..2bbf9376f438047e47ece65c6e1a9c6f5a091173 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredCECStencilObject.H +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/CFCFaceToCellStencil.H @@ -23,20 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::centredCECStencilObject + Foam::CFCFaceToCellStencil Description SourceFiles + CFCFaceToCellStencil.C \*---------------------------------------------------------------------------*/ -#ifndef centredCECStencilObject_H -#define centredCECStencilObject_H +#ifndef CFCFaceToCellStencil_H +#define CFCFaceToCellStencil_H -#include "extendedCentredStencil.H" -#include "cellEdgeCellStencil.H" -#include "MeshObject.H" +#include "faceToCellStencil.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,36 +43,31 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class centredCECStencilObject Declaration + Class CFCFaceToCellStencil Declaration \*---------------------------------------------------------------------------*/ -class centredCECStencilObject +class CFCFaceToCellStencil : - public MeshObject<fvMesh, centredCECStencilObject>, - public extendedCentredStencil + public faceToCellStencil { + // Private Member Functions -public: + void calcFaceBoundaryData(labelListList& neiGlobal) const; - TypeName("centredCECStencil"); + void calcCellStencil(labelListList& globalCellFaces) const; - // Constructors + //- Disallow default bitwise copy construct + CFCFaceToCellStencil(const CFCFaceToCellStencil&); - //- Construct from uncompacted face stencil - explicit centredCECStencilObject - ( - const fvMesh& mesh - ) - : - MeshObject<fvMesh, centredCECStencilObject>(mesh), - extendedCentredStencil(cellEdgeCellStencil(mesh)) - {} + //- Disallow default bitwise assignment + void operator=(const CFCFaceToCellStencil&); +public: - // Destructor + // Constructors - virtual ~centredCECStencilObject() - {} + //- Construct from mesh + explicit CFCFaceToCellStencil(const polyMesh& mesh); }; diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionIO.C b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/faceToCellStencil.C similarity index 84% rename from src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionIO.C rename to src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/faceToCellStencil.C index 65743800e84b540ee59895c3c4458f8783fff082..7e871cc7fa282e3e1af3a53bbd479d375488940e 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionIO.C +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/faceToCellStencil.C @@ -24,12 +24,18 @@ License \*---------------------------------------------------------------------------*/ -#include "distribution.H" -#include "IOstreams.H" +#include "faceToCellStencil.H" +#include "polyMesh.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// construct from Istream +Foam::faceToCellStencil::faceToCellStencil(const polyMesh& mesh) +: + mesh_(mesh), + globalNumbering_(mesh_.nFaces()) +{} // ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/faceToCellStencil.H b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/faceToCellStencil.H new file mode 100644 index 0000000000000000000000000000000000000000..84df1ea789de5a6e54e47414d65fe4c0f588c5a0 --- /dev/null +++ b/src/finiteVolume/fvMesh/extendedStencil/faceToCell/fullStencils/faceToCellStencil.H @@ -0,0 +1,108 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::faceToCellStencil + +Description + baseclass for extended cell centred addressing. Contains per cell a + list of neighbouring faces in global addressing. + +SourceFiles + faceToCellStencil.C + +\*---------------------------------------------------------------------------*/ + +#ifndef faceToCellStencil_H +#define faceToCellStencil_H + +#include "globalIndex.H" +#include "boolList.H" +#include "HashSet.H" +#include "indirectPrimitivePatch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class polyMesh; + +/*---------------------------------------------------------------------------*\ + Class faceToCellStencil Declaration +\*---------------------------------------------------------------------------*/ + +class faceToCellStencil +: + public labelListList +{ + // Private data + + const polyMesh& mesh_; + + //- Global numbering for faces + const globalIndex globalNumbering_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + faceToCellStencil(const faceToCellStencil&); + + //- Disallow default bitwise assignment + void operator=(const faceToCellStencil&); + +public: + + // Constructors + + //- Construct from mesh + explicit faceToCellStencil(const polyMesh&); + + + // Member Functions + + const polyMesh& mesh() const + { + return mesh_; + } + + //- Global numbering for faces + const globalIndex& globalNumbering() const + { + return globalNumbering_; + } + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/fvMesh.C b/src/finiteVolume/fvMesh/fvMesh.C index aebecfefe9e22cf44914f8ff7b5a196a6b8f8207..5dd07f3a921b2732973b88d6993c543b61ff6863 100644 --- a/src/finiteVolume/fvMesh/fvMesh.C +++ b/src/finiteVolume/fvMesh/fvMesh.C @@ -44,17 +44,22 @@ License #include "leastSquaresVectors.H" #include "CentredFitData.H" #include "linearFitPolynomial.H" +#include "quadraticFitPolynomial.H" #include "quadraticLinearFitPolynomial.H" +//#include "quadraticFitSnGradData.H" #include "skewCorrectionVectors.H" -#include "centredCECStencilObject.H" -#include "centredCFCStencilObject.H" -#include "centredCPCStencilObject.H" -#include "centredFECStencilObject.H" -#include "upwindCECStencilObject.H" -#include "upwindCFCStencilObject.H" -#include "upwindCPCStencilObject.H" -#include "upwindFECStencilObject.H" + +#include "centredCECCellToFaceStencilObject.H" +#include "centredCFCCellToFaceStencilObject.H" +#include "centredCPCCellToFaceStencilObject.H" +#include "centredFECCellToFaceStencilObject.H" +#include "upwindCECCellToFaceStencilObject.H" +#include "upwindCFCCellToFaceStencilObject.H" +#include "upwindCPCCellToFaceStencilObject.H" +#include "upwindFECCellToFaceStencilObject.H" + +#include "centredCFCFaceToCellStencilObject.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -89,11 +94,12 @@ void Foam::fvMesh::clearGeom() // Things geometry dependent that are not updated. volPointInterpolation::Delete(*this); extendedLeastSquaresVectors::Delete(*this); - extendedLeastSquaresVectors::Delete(*this); leastSquaresVectors::Delete(*this); CentredFitData<linearFitPolynomial>::Delete(*this); + CentredFitData<quadraticFitPolynomial>::Delete(*this); CentredFitData<quadraticLinearFitPolynomial>::Delete(*this); skewCorrectionVectors::Delete(*this); + //quadraticFitSnGradData::Delete(*this); } @@ -105,20 +111,24 @@ void Foam::fvMesh::clearAddressing() volPointInterpolation::Delete(*this); extendedLeastSquaresVectors::Delete(*this); - extendedLeastSquaresVectors::Delete(*this); leastSquaresVectors::Delete(*this); CentredFitData<linearFitPolynomial>::Delete(*this); + CentredFitData<quadraticFitPolynomial>::Delete(*this); CentredFitData<quadraticLinearFitPolynomial>::Delete(*this); skewCorrectionVectors::Delete(*this); - - centredCECStencilObject::Delete(*this); - centredCFCStencilObject::Delete(*this); - centredCPCStencilObject::Delete(*this); - centredFECStencilObject::Delete(*this); - upwindCECStencilObject::Delete(*this); - upwindCFCStencilObject::Delete(*this); - upwindCPCStencilObject::Delete(*this); - upwindFECStencilObject::Delete(*this); + //quadraticFitSnGradData::Delete(*this); + + centredCECCellToFaceStencilObject::Delete(*this); + centredCFCCellToFaceStencilObject::Delete(*this); + centredCPCCellToFaceStencilObject::Delete(*this); + centredFECCellToFaceStencilObject::Delete(*this); + // Is this geometry related - cells distorting to upwind direction? + upwindCECCellToFaceStencilObject::Delete(*this); + upwindCFCCellToFaceStencilObject::Delete(*this); + upwindCPCCellToFaceStencilObject::Delete(*this); + upwindFECCellToFaceStencilObject::Delete(*this); + + centredCFCFaceToCellStencilObject::Delete(*this); } @@ -592,8 +602,10 @@ Foam::tmp<Foam::scalarField> Foam::fvMesh::movePoints(const pointField& p) MeshObjectMovePoints<extendedLeastSquaresVectors>(*this); MeshObjectMovePoints<leastSquaresVectors>(*this); MeshObjectMovePoints<CentredFitData<linearFitPolynomial> >(*this); + MeshObjectMovePoints<CentredFitData<quadraticFitPolynomial> >(*this); MeshObjectMovePoints<CentredFitData<quadraticLinearFitPolynomial> >(*this); MeshObjectMovePoints<skewCorrectionVectors>(*this); + //MeshObjectMovePoints<quadraticFitSnGradData>(*this); return tsweptVols; } diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C index 6666d347f0c43ae9efd5f832e9823807611c06bf..65ef6826fa8c097d8d88fa628f9810866cfdd448 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.C @@ -164,12 +164,12 @@ void Foam::cellPointWeight::findTetrahedron } } - WarningIn - ( - "cellPointWeight::findTetrahedron" - "(const polyMesh&, const vector&, const label, const label)" - ) << "Tetrahedron search failed; using closest tet values to point " - << nl << " cell: " << cellIndex << endl; + if (debug) + { + Pout<< "cellPointWeight::findTetrahedron" << nl + << " Tetrahedron search failed; using closest tet values to " + << "point " << nl << " cell: " << cellIndex << nl << endl; + } const labelList& facePointsClose = mesh.faces()[cellFaces[faceClose]]; faceVertices_[0] = facePointsClose[0]; @@ -284,13 +284,12 @@ void Foam::cellPointWeight::findTriangle pointI++; } - WarningIn - ( - "Foam::cellPointWeight::findTriangle" - "(const polyMesh&, const vector&, const label)" - ) << "Triangle search failed; using closest triangle to " - << "point" << nl - << " cell face: " << faceIndex << endl; + if (debug) + { + Pout<< "Foam::cellPointWeight::findTriangle" + << "Triangle search failed; using closest triangle to point" << nl + << " cell face: " << faceIndex << nl << endl; + } // Indices of the cell vertices making up the triangle faceVertices_[0] = facePoints[0]; diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.H index 767c90380932cf443ef50223649fcf251a86582f..937e277b61a3ceef0169e218bcbb18285281d979 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/cellPointWeight/cellPointWeight.H @@ -51,7 +51,9 @@ class polyMesh; class cellPointWeight { - // Private data +protected: + + // Protected data //- Cell index const label cellIndex_; @@ -63,7 +65,7 @@ class cellPointWeight FixedList<label, 3> faceVertices_; - // Private Member Functions + // Protected Member Functions void findTetrahedron ( diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H index 9388a85fc889214c1cb5685b3d15de4c17eacf0e..bbe76871ba730bcf70c86c057c5394a3644dd773 100644 --- a/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPoint/interpolationCellPoint.H @@ -42,7 +42,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class interpolationCellPoint Declaration + Class interpolationCellPoint Declaration \*---------------------------------------------------------------------------*/ template<class Type> @@ -50,7 +50,9 @@ class interpolationCellPoint : public interpolation<Type> { - // Private data +protected: + + // Protected data //- Interpolated volfield const GeometricField<Type, pointPatchField, pointMesh> psip_; @@ -79,7 +81,7 @@ public: //- Interpolate field to the given point in the given cell inline Type interpolate ( - const vector& position, + const vector& position, const label nCell, const label facei = -1 ) const; diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.C new file mode 100644 index 0000000000000000000000000000000000000000..f33af9e7e335104d78d03f9e1ed31b1f6a511b38 --- /dev/null +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.C @@ -0,0 +1,72 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "cellPointWeightWallModified.H" +#include "wallPolyPatch.H" +#include "polyMesh.H" +#include "polyBoundaryMesh.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::cellPointWeightWallModified::cellPointWeightWallModified +( + const polyMesh& mesh, + const vector& position, + const label cellIndex, + const label faceIndex +) +: + cellPointWeight(mesh, position, cellIndex, faceIndex) +{ + if (faceIndex < 0) + { + findTetrahedron(mesh, position, cellIndex); + } + else + { + const polyBoundaryMesh& bm = mesh.boundaryMesh(); + label patchI = bm.whichPatch(faceIndex); + if (patchI != -1) + { + if (isA<wallPolyPatch>(bm[patchI])) + { + // Apply cell centre value wall faces + weights_[0] = 0.0; + weights_[1] = 0.0; + weights_[2] = 0.0; + weights_[3] = 1.0; + } + } + else + { + // Interpolate + findTriangle(mesh, position, faceIndex); + } + } +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredFECStencilObject.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.H similarity index 70% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredFECStencilObject.H rename to src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.H index 8ce7efcacac1c0658d64907b9214dedb3ceecc10..e7903a7338b9e4cc1bfcb1ba2eeba55a632bd505 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/centredFECStencilObject.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.H @@ -23,57 +23,48 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::centredFECStencilObject + Foam::cellPointWeightWallModified Description + Foam::cellPointWeightWallModified SourceFiles + cellPointWeightWallModified.C \*---------------------------------------------------------------------------*/ -#ifndef centredFECStencilObject_H -#define centredFECStencilObject_H +#ifndef cellPointWeightWallModified_H +#define cellPointWeightWallModified_H -#include "extendedCentredStencil.H" -#include "faceEdgeCellStencil.H" -#include "MeshObject.H" +#include "cellPointWeight.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +class polyMesh; + /*---------------------------------------------------------------------------*\ - Class centredFECStencilObject Declaration + Class cellPointWeightWallModified Declaration \*---------------------------------------------------------------------------*/ -class centredFECStencilObject +class cellPointWeightWallModified : - public MeshObject<fvMesh, centredFECStencilObject>, - public extendedCentredStencil + public cellPointWeight { - public: - TypeName("centredCFCStencil"); - // Constructors - //- Construct from uncompacted face stencil - explicit centredFECStencilObject + //- Construct from components + cellPointWeightWallModified ( - const fvMesh& mesh - ) - : - MeshObject<fvMesh, centredFECStencilObject>(mesh), - extendedCentredStencil(faceEdgeCellStencil(mesh)) - {} - - - // Destructor - - virtual ~centredFECStencilObject() - {} + const polyMesh& mesh, + const vector& position, + const label nCell, + const label facei = -1 + ); }; diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C similarity index 81% rename from applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.C rename to src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C index e81c24ca6a3cda74c841511a8519496ddcdf1638..762aeef1cbcb6ab247aa45c9b79dc0a162b5bd6c 100644 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.C +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.C @@ -24,26 +24,18 @@ License \*---------------------------------------------------------------------------*/ -#include "molConfig.H" +#include "interpolationCellPointWallModified.H" // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // -Foam::molConfig::molConfig +template<class Type> +Foam::interpolationCellPointWallModified<Type>:: +interpolationCellPointWallModified ( - IOdictionary& molConfigDescription, - const polyMesh& mesh + const GeometricField<Type, fvPatchField, volMesh>& psi ) : - molConfigDescription_(molConfigDescription), - mesh_(mesh) -{ - createMolecules(); -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::molConfig::~molConfig() + interpolationCellPoint<Type>(psi) {} diff --git a/src/lagrangian/basic/lagrangianField/LagrangianField.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H similarity index 58% rename from src/lagrangian/basic/lagrangianField/LagrangianField.H rename to src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H index a760413448ce35c35f4ef11cf78d3c2357476d55..a54fc8fb7a0fbbf2f360b6afa63973c59070cc36 100644 --- a/src/lagrangian/basic/lagrangianField/LagrangianField.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModified.H @@ -23,21 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::LagrangianField + Foam::interpolationCellPoint Description - -SourceFiles - LagrangianFieldI.H - LagrangianField.C - LagrangianFieldIO.C + Same as interpolationCellPoint, but if interpolating a wall face, uses + cell centre value instead \*---------------------------------------------------------------------------*/ -#ifndef LagrangianField_H -#define LagrangianField_H +#ifndef interpolationCellPointWallModified_H +#define interpolationCellPointWallModified_H -#include "DimensionedField.H" +#include "interpolationCellPoint.H" +#include "cellPointWeightWallModified.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,83 +43,41 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class LagrangianField Declaration + Class interpolationCellPoint Declaration \*---------------------------------------------------------------------------*/ -template<class Type, class Cloud> -class LagrangianField +template<class Type> +class interpolationCellPointWallModified : - public DimensionedField<Type> + public interpolationCellPoint<Type> { - // Private data - - //- Reference to lagrangian cloud this field is part of - const Cloud& cloud_; - - public: //- Runtime type information - TypeName("LagrangianField"); + TypeName("cellPointWallModified"); // Constructors //- Construct from components - LagrangianField + interpolationCellPointWallModified ( - const IOobject& ioObject, - const Cloud& cloud, - const dimensions& dims, - const Field<Type> field + const GeometricField<Type, fvPatchField, volMesh>& psi ); - //- Construct from IOobject - LagrangianField - ( - const IOobject& ioObject, - const Cloud& cloud - ); - - //- Construct from Cloud data - LagrangianField(const Cloud& cloud, const int typeFieldIndex); - - //- Construct as copy - LagrangianField(const LagrangianField<Type>&); - - - // Destructor - - ~LagrangianField(); - // Member Functions - // Access - - //- Map field back into Cloud - void map(Cloud& cloud, const int typeFieldIndex); - - - // Check + //- Interpolate field for the given cellPointWeight + inline Type interpolate(const cellPointWeightWallModified& cpw) const; - // Edit - - // Write - - - // Member Operators - - void operator=(const LagrangianField&); - - - // Friend Functions - - // Friend Operators - - // IOstream Operators - - friend Ostream& operator<<(Ostream&, const LagrangianField&); + //- Interpolate field to the given point in the given cell + inline Type interpolate + ( + const vector& position, + const label nCell, + const label facei = -1 + ) const; }; @@ -131,7 +87,13 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "LagrangianFieldI.H" +#include "interpolationCellPointWallModifiedI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "interpolationCellPointWallModified.C" +#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModelI.H b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModifiedI.H similarity index 62% rename from src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModelI.H rename to src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModifiedI.H index cec949f5cb7529fd686cc8137a8931cd4c1b08db..4318ce899419eb46638114dab77a876f111de0cd 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModelI.H +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/interpolationCellPointWallModifiedI.H @@ -24,39 +24,45 @@ License \*---------------------------------------------------------------------------*/ -#include "zeroGradientFvPatchFields.H" - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -inline Foam::tmp<Foam::volScalarField> Foam::chemistryModel::RR +template<class Type> +inline Type Foam::interpolationCellPointWallModified<Type>::interpolate +( + const cellPointWeightWallModified& cpw +) const +{ + const FixedList<scalar, 4>& weights = cpw.weights(); + const FixedList<label, 3>& faceVertices = cpw.faceVertices(); + + Type t = this->psip_[faceVertices[0]]*weights[0]; + t += this->psip_[faceVertices[1]]*weights[1]; + t += this->psip_[faceVertices[2]]*weights[2]; + t += this->psi_[cpw.cell()]*weights[3]; + + return t; +} + + +template<class Type> +inline Type Foam::interpolationCellPointWallModified<Type>::interpolate ( - const label i + const vector& position, + const label celli, + const label facei ) const { - tmp<volScalarField> tRR - ( - new volScalarField + return + interpolate ( - IOobject + cellPointWeightWallModified ( - "RR(" + Y_[i].name() + ')', - rho_.time().timeName(), - rho_.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - rho_.mesh(), - dimensionedScalar("zero", dimensionSet(1, -3, -1, 0, 0), 0.0), - zeroGradientFvPatchScalarField::typeName - ) - ); - - if (chemistry_) - { - tRR().internalField() = RR_[i]; - tRR().correctBoundaryConditions(); - } - return tRR; + this->pMesh_, + position, + celli, + facei + ) + ); } diff --git a/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/makeInterpolationCellPointWallModified.C b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/makeInterpolationCellPointWallModified.C new file mode 100644 index 0000000000000000000000000000000000000000..c2e691f545b49453d136313d3d43554f175e97bb --- /dev/null +++ b/src/finiteVolume/interpolation/interpolation/interpolationCellPointWallModified/makeInterpolationCellPointWallModified.C @@ -0,0 +1,36 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "interpolationCellPointWallModified.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeInterpolation(interpolationCellPointWallModified); +} + +// ************************************************************************* // diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C index 2b7bf7be3c567a0b1523a0f7c927885111205210..fb9611e9c8aa06f8f70c56ccd847232b34b72ef5 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.C @@ -29,7 +29,7 @@ License #include "volFields.H" #include "SVD.H" #include "syncTools.H" -#include "extendedCentredStencil.H" +#include "extendedCentredCellToFaceStencil.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -37,14 +37,19 @@ template<class Polynomial> Foam::CentredFitData<Polynomial>::CentredFitData ( const fvMesh& mesh, - const extendedCentredStencil& stencil, + const extendedCentredCellToFaceStencil& stencil, const scalar linearLimitFactor, const scalar centralWeight ) : - FitData<CentredFitData<Polynomial>, extendedCentredStencil, Polynomial> + FitData + < + CentredFitData<Polynomial>, + extendedCentredCellToFaceStencil, + Polynomial + > ( - mesh, stencil, linearLimitFactor, centralWeight + mesh, stencil, true, linearLimitFactor, centralWeight ), coeffs_(mesh.nFaces()) { @@ -83,8 +88,12 @@ void Foam::CentredFitData<Polynomial>::calcFit() for(label facei = 0; facei < mesh.nInternalFaces(); facei++) { - FitData<CentredFitData<Polynomial>, extendedCentredStencil, Polynomial>:: - calcFit(coeffs_[facei], stencilPoints[facei], w[facei], facei); + FitData + < + CentredFitData<Polynomial>, + extendedCentredCellToFaceStencil, + Polynomial + >::calcFit(coeffs_[facei], stencilPoints[facei], w[facei], facei); } const surfaceScalarField::GeometricBoundaryField& bw = w.boundaryField(); @@ -101,7 +110,9 @@ void Foam::CentredFitData<Polynomial>::calcFit() { FitData < - CentredFitData<Polynomial>, extendedCentredStencil, Polynomial + CentredFitData<Polynomial>, + extendedCentredCellToFaceStencil, + Polynomial >::calcFit(coeffs_[facei], stencilPoints[facei], pw[i], facei); facei++; } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.H index 3be61503c376ec25406836b73f9b611ab33cf42b..476d8aed1779fcfe23df729c122a83e216469c1d 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitData.H @@ -43,7 +43,7 @@ SourceFiles namespace Foam { -class extendedCentredStencil; +class extendedCentredCellToFaceStencil; /*---------------------------------------------------------------------------*\ Class CentredFitData Declaration @@ -52,7 +52,7 @@ class extendedCentredStencil; template<class Polynomial> class CentredFitData : - public FitData<CentredFitData<Polynomial>, extendedCentredStencil, Polynomial> + public FitData<CentredFitData<Polynomial>, extendedCentredCellToFaceStencil, Polynomial> { // Private data @@ -79,7 +79,7 @@ public: CentredFitData ( const fvMesh& mesh, - const extendedCentredStencil& stencil, + const extendedCentredCellToFaceStencil& stencil, const scalar linearLimitFactor, const scalar centralWeight ); diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitScheme.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitScheme.H index 10cea46e3b37199c71dda657e95e396664c65081..7e981024c01013dd755d35c58dc165f6382ab463 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitScheme.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/CentredFitScheme/CentredFitScheme.H @@ -119,7 +119,7 @@ public: { const fvMesh& mesh = this->mesh(); - const extendedCentredStencil& stencil = Stencil::New + const extendedCentredCellToFaceStencil& stencil = Stencil::New ( mesh ); diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C index 18585bc645d1db5b13784960fd315f3e8165d824..dcea0902668d1444f3d93af5c37550f45a8245bf 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.C @@ -28,22 +28,22 @@ License #include "surfaceFields.H" #include "volFields.H" #include "SVD.H" -#include "syncTools.H" -#include "extendedStencil.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -template<class Form, class extendedStencil, class Polynomial> -Foam::FitData<Form, extendedStencil, Polynomial>::FitData +template<class Form, class ExtendedStencil, class Polynomial> +Foam::FitData<Form, ExtendedStencil, Polynomial>::FitData ( const fvMesh& mesh, - const extendedStencil& stencil, + const ExtendedStencil& stencil, + const bool linearCorrection, const scalar linearLimitFactor, const scalar centralWeight ) : MeshObject<fvMesh, Form>(mesh), stencil_(stencil), + linearCorrection_(linearCorrection), linearLimitFactor_(linearLimitFactor), centralWeight_(centralWeight), # ifdef SPHERICAL_GEOMETRY @@ -145,7 +145,10 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // Setup the point weights scalarList wts(C.size(), scalar(1)); wts[0] = centralWeight_; - wts[1] = centralWeight_; + if (linearCorrection_) + { + wts[1] = centralWeight_; + } // Reference point point p0 = this->mesh().faceCentres()[facei]; @@ -191,6 +194,13 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit ); } + // Additional weighting for constant and linear terms + for(label i = 0; i < B.n(); i++) + { + B[i][0] *= wts[0]; + B[i][1] *= wts[0]; + } + // Set the fit label stencilSize = C.size(); coeffsi.setSize(stencilSize); @@ -205,7 +215,7 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit for(label i=0; i<stencilSize; i++) { - coeffsi[i] = wts[i]*svd.VSinvUt()[0][i]; + coeffsi[i] = wts[0]*wts[i]*svd.VSinvUt()[0][i]; if (mag(coeffsi[i]) > maxCoeff) { maxCoeff = mag(coeffsi[i]); @@ -213,10 +223,20 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit } } - goodFit = - (mag(coeffsi[0] - wLin) < linearLimitFactor_*wLin) - && (mag(coeffsi[1] - (1 - wLin)) < linearLimitFactor_*(1 - wLin)) - && maxCoeffi <= 1; + if (linearCorrection_) + { + goodFit = + (mag(coeffsi[0] - wLin) < linearLimitFactor_*wLin) + && (mag(coeffsi[1] - (1 - wLin)) < linearLimitFactor_*(1 - wLin)) + && maxCoeffi <= 1; + } + else + { + // Upwind: weight on face is 1. + goodFit = + (mag(coeffsi[0] - 1.0) < linearLimitFactor_*1.0) + && maxCoeffi <= 1; + } // if (goodFit && iIt > 0) // { @@ -229,7 +249,8 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // << " sing vals " << svd.S() << endl; // } - if (!goodFit) // (not good fit so increase weight in the centre) + if (!goodFit) // (not good fit so increase weight in the centre and weight + // for constant and linear terms) { // if (iIt == 7) // { @@ -237,26 +258,46 @@ void Foam::FitData<FitDataType, ExtendedStencil, Polynomial>::calcFit // ( // "FitData<Polynomial>::calcFit" // "(const List<point>& C, const label facei" - // ) << "Cannot fit face " << facei + // ) << "Cannot fit face " << facei << " iteration " << iIt + // << " with sum of weights " << sum(coeffsi) << nl + // << " Weights " << coeffsi << nl + // << " Linear weights " << wLin << " " << 1 - wLin << nl // << " sing vals " << svd.S() << endl; // } wts[0] *= 10; - wts[1] *= 10; + if (linearCorrection_) + { + wts[1] *= 10; + } for(label j = 0; j < B.m(); j++) { B[0][j] *= 10; B[1][j] *= 10; } + + for(label i = 0; i < B.n(); i++) + { + B[i][0] *= 10; + B[i][1] *= 10; + } } } if (goodFit) { - // Remove the uncorrected linear ocefficients - coeffsi[0] -= wLin; - coeffsi[1] -= 1 - wLin; + if (linearCorrection_) + { + // Remove the uncorrected linear coefficients + coeffsi[0] -= wLin; + coeffsi[1] -= 1 - wLin; + } + else + { + // Remove the uncorrected upwind coefficients + coeffsi[0] -= 1.0; + } } else { diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.H index b151a7520414268d270a2ad46f48b32fcdfcc76e..cb7bd9ceae5197bfc15cf7cbf7b6c49d03701755 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/FitData/FitData.H @@ -26,7 +26,11 @@ Class Foam::FitData Description - Data for the upwinded and centred polynomial fit interpolation schemes + Data for the upwinded and centred polynomial fit interpolation schemes. + The linearCorrection_ determines whether the fit is for a corrected + linear scheme (first two coefficients are corrections for owner and + neighbour) or a pure upwind scheme (first coefficient is correction for + owner ; weight on face taken as 1). SourceFiles FitData.C @@ -58,7 +62,11 @@ class FitData //- The stencil the fit is based on const ExtendedStencil& stencil_; - //- Factor the fit is allowed to deviate from linear. + //- Is scheme correction on linear (true) or on upwind (false) + const bool linearCorrection_; + + //- Factor the fit is allowed to deviate from the base scheme + // (linear or pure upwind) // This limits the amount of high-order correction and increases // stability on bad meshes const scalar linearLimitFactor_; @@ -84,11 +92,6 @@ class FitData const label faci ); - //- Calculate the fit for the all the mesh faces - // and set the coefficients - // virtual void calcFit(); - - public: //TypeName("FitData"); @@ -101,6 +104,7 @@ public: ( const fvMesh& mesh, const ExtendedStencil& stencil, + const bool linearCorrection, const scalar linearLimitFactor, const scalar centralWeight ); @@ -119,12 +123,18 @@ public: return stencil_; } + bool linearCorrection() const + { + return linearCorrection_; + } + //- Calculate the fit for the specified face and set the coefficients void calcFit ( scalarList& coeffsi, // coefficients to be set const List<point>&, // Stencil points - const scalar wLin, // Linear weight + const scalar wLin, // Weight for linear approximation (weights + // nearest neighbours) const label faci // Current face index ); @@ -132,7 +142,7 @@ public: virtual void calcFit() = 0; - //- Delete the data when the mesh moves not implemented + //- Recalculate weights (but not stencil) when the mesh moves bool movePoints(); }; diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/PureUpwindFitScheme/PureUpwindFitScheme.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/PureUpwindFitScheme/PureUpwindFitScheme.H new file mode 100644 index 0000000000000000000000000000000000000000..6b0b792f9a2bd766d432b7bcbb8d788f2e073dfa --- /dev/null +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/PureUpwindFitScheme/PureUpwindFitScheme.H @@ -0,0 +1,186 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::PureUpwindFitScheme + +Description + Upwind biased fit surface interpolation scheme that applies an explicit + correction to upwind. + +\*---------------------------------------------------------------------------*/ + +#ifndef PureUpwindFitScheme_H +#define PureUpwindFitScheme_H + +#include "UpwindFitData.H" +#include "upwind.H" +#include "Switch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class PureUpwindFitScheme Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type, class Polynomial, class Stencil> +class PureUpwindFitScheme +: + public upwind<Type> +{ + // Private Data + + //- Factor the fit is allowed to deviate from linear. + // This limits the amount of high-order correction and increases + // stability on bad meshes + const scalar linearLimitFactor_; + + //- Weights for central stencil + const scalar centralWeight_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + PureUpwindFitScheme(const PureUpwindFitScheme&); + + //- Disallow default bitwise assignment + void operator=(const PureUpwindFitScheme&); + + +public: + + //- Runtime type information + TypeName("PureUpwindFitScheme"); + + + // Constructors + + //- Construct from mesh and Istream + // The name of the flux field is read from the Istream and looked-up + // from the mesh objectRegistry + PureUpwindFitScheme(const fvMesh& mesh, Istream& is) + : + upwind<Type> + ( + mesh, + mesh.lookupObject<surfaceScalarField>(word(is)) + ), + linearLimitFactor_(readScalar(is)), + centralWeight_(1000) + {} + + + //- Construct from mesh, faceFlux and Istream + PureUpwindFitScheme + ( + const fvMesh& mesh, + const surfaceScalarField& faceFlux, + Istream& is + ) + : + upwind<Type>(mesh, faceFlux), + linearLimitFactor_(readScalar(is)), + centralWeight_(1000) + {} + + + // Member Functions + + //- Return true if this scheme uses an explicit correction + virtual bool corrected() const + { + return true; + } + + //- Return the explicit correction to the face-interpolate + virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > + correction + ( + const GeometricField<Type, fvPatchField, volMesh>& vf + ) const + { + const fvMesh& mesh = this->mesh(); + + // Use the owner/neighbour splitting constructor + const extendedUpwindCellToFaceStencil& stencil = Stencil::New(mesh); + + const UpwindFitData<Polynomial>& ufd = + UpwindFitData<Polynomial>::New + ( + mesh, + stencil, + false, //offset to upwind + linearLimitFactor_, + centralWeight_ + ); + + const List<scalarList>& fo = ufd.owncoeffs(); + const List<scalarList>& fn = ufd.neicoeffs(); + + return stencil.weightedSum(this->faceFlux_, vf, fo, fn); + } +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Add the patch constructor functions to the hash tables + +#define makePureUpwindFitSurfaceInterpolationTypeScheme(SS, POLYNOMIAL, STENCIL, TYPE) \ + \ +typedef PureUpwindFitScheme<TYPE, POLYNOMIAL, STENCIL> \ + PureUpwindFitScheme##TYPE##POLYNOMIAL##STENCIL##_; \ +defineTemplateTypeNameAndDebugWithName \ + (PureUpwindFitScheme##TYPE##POLYNOMIAL##STENCIL##_, #SS, 0); \ + \ +surfaceInterpolationScheme<TYPE>::addMeshConstructorToTable \ +<PureUpwindFitScheme<TYPE, POLYNOMIAL, STENCIL> > \ + add##SS##STENCIL##TYPE##MeshConstructorToTable_; \ + \ +surfaceInterpolationScheme<TYPE>::addMeshFluxConstructorToTable \ +<PureUpwindFitScheme<TYPE, POLYNOMIAL, STENCIL> > \ + add##SS##STENCIL##TYPE##MeshFluxConstructorToTable_; + +#define makePureUpwindFitSurfaceInterpolationScheme(SS, POLYNOMIAL, STENCIL) \ + \ +makePureUpwindFitSurfaceInterpolationTypeScheme(SS,POLYNOMIAL,STENCIL,scalar) \ +makePureUpwindFitSurfaceInterpolationTypeScheme(SS,POLYNOMIAL,STENCIL,vector) \ +makePureUpwindFitSurfaceInterpolationTypeScheme(SS,POLYNOMIAL,STENCIL,sphericalTensor) \ +makePureUpwindFitSurfaceInterpolationTypeScheme(SS,POLYNOMIAL,STENCIL,symmTensor) \ +makePureUpwindFitSurfaceInterpolationTypeScheme(SS,POLYNOMIAL,STENCIL,tensor) + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C index 6f0ea20e1b1063e70ccaf04568ca6b4181d3e5cf..cd7a206ba50048779468aaf50a9b350e0c4a910a 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.C @@ -29,7 +29,7 @@ License #include "volFields.H" #include "SVD.H" #include "syncTools.H" -#include "extendedUpwindStencil.H" +#include "extendedUpwindCellToFaceStencil.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -37,14 +37,20 @@ template<class Polynomial> Foam::UpwindFitData<Polynomial>::UpwindFitData ( const fvMesh& mesh, - const extendedUpwindStencil& stencil, + const extendedUpwindCellToFaceStencil& stencil, + const bool linearCorrection, const scalar linearLimitFactor, const scalar centralWeight ) : - FitData<UpwindFitData<Polynomial>, extendedUpwindStencil, Polynomial> + FitData + < + UpwindFitData<Polynomial>, + extendedUpwindCellToFaceStencil, + Polynomial + > ( - mesh, stencil, linearLimitFactor, centralWeight + mesh, stencil, linearCorrection, linearLimitFactor, centralWeight ), owncoeffs_(mesh.nFaces()), neicoeffs_(mesh.nFaces()) @@ -72,40 +78,103 @@ void Foam::UpwindFitData<Polynomial>::calcFit() { const fvMesh& mesh = this->mesh(); + const surfaceScalarField& w = mesh.surfaceInterpolation::weights(); + const surfaceScalarField::GeometricBoundaryField& bw = w.boundaryField(); + + // Owner stencil weights + // ~~~~~~~~~~~~~~~~~~~~~ + // Get the cell/face centres in stencil order. - // Upwind face stencils no good for triangles or tets. - // Need bigger stencils - List<List<point> > ownStencilPoints(mesh.nFaces()); + List<List<point> > stencilPoints(mesh.nFaces()); this->stencil().collectData ( this->stencil().ownMap(), this->stencil().ownStencil(), mesh.C(), - ownStencilPoints + stencilPoints ); - List<List<point> > neiStencilPoints(mesh.nFaces()); + + // find the fit coefficients for every owner + + //Pout<< "-- Owner --" << endl; + for(label facei = 0; facei < mesh.nInternalFaces(); facei++) + { + FitData + < + UpwindFitData<Polynomial>, + extendedUpwindCellToFaceStencil, + Polynomial + >::calcFit(owncoeffs_[facei], stencilPoints[facei], w[facei], facei); + + //Pout<< " facei:" << facei + // << " at:" << mesh.faceCentres()[facei] << endl; + //forAll(owncoeffs_[facei], i) + //{ + // Pout<< " point:" << stencilPoints[facei][i] + // << "\tweight:" << owncoeffs_[facei][i] + // << endl; + //} + } + + forAll(bw, patchi) + { + const fvsPatchScalarField& pw = bw[patchi]; + + if (pw.coupled()) + { + label facei = pw.patch().patch().start(); + + forAll(pw, i) + { + FitData + < + UpwindFitData<Polynomial>, + extendedUpwindCellToFaceStencil, + Polynomial + >::calcFit + ( + owncoeffs_[facei], stencilPoints[facei], pw[i], facei + ); + facei++; + } + } + } + + + // Neighbour stencil weights + // ~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Note:reuse stencilPoints since is major storage this->stencil().collectData ( this->stencil().neiMap(), this->stencil().neiStencil(), mesh.C(), - neiStencilPoints + stencilPoints ); - // find the fit coefficients for every owner and neighbour of ever face - - const surfaceScalarField& w = mesh.surfaceInterpolation::weights(); + // find the fit coefficients for every neighbour + //Pout<< "-- Neighbour --" << endl; for(label facei = 0; facei < mesh.nInternalFaces(); facei++) { - FitData<UpwindFitData<Polynomial>, extendedUpwindStencil, Polynomial>:: - calcFit(owncoeffs_[facei], ownStencilPoints[facei], w[facei], facei); - FitData<UpwindFitData<Polynomial>, extendedUpwindStencil, Polynomial>:: - calcFit(neicoeffs_[facei], neiStencilPoints[facei], w[facei], facei); + FitData + < + UpwindFitData<Polynomial>, + extendedUpwindCellToFaceStencil, + Polynomial + >::calcFit(neicoeffs_[facei], stencilPoints[facei], w[facei], facei); + + //Pout<< " facei:" << facei + // << " at:" << mesh.faceCentres()[facei] << endl; + //forAll(neicoeffs_[facei], i) + //{ + // Pout<< " point:" << stencilPoints[facei][i] + // << "\tweight:" << neicoeffs_[facei][i] + // << endl; + //} } - const surfaceScalarField::GeometricBoundaryField& bw = w.boundaryField(); - forAll(bw, patchi) { const fvsPatchScalarField& pw = bw[patchi]; @@ -118,17 +187,12 @@ void Foam::UpwindFitData<Polynomial>::calcFit() { FitData < - UpwindFitData<Polynomial>, extendedUpwindStencil, Polynomial - >::calcFit - ( - owncoeffs_[facei], ownStencilPoints[facei], pw[i], facei - ); - FitData - < - UpwindFitData<Polynomial>, extendedUpwindStencil, Polynomial + UpwindFitData<Polynomial>, + extendedUpwindCellToFaceStencil, + Polynomial >::calcFit ( - neicoeffs_[facei], neiStencilPoints[facei], pw[i], facei + neicoeffs_[facei], stencilPoints[facei], pw[i], facei ); facei++; } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.H index de0636c4d393a6f21e1bc3f39e18c890434bf951..a62a3002c3242d6d6bbccf67a61bf6caf89d71b8 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitData.H @@ -27,7 +27,9 @@ Class Description Data for the quadratic fit correction interpolation scheme to be used with - upwind biased stencil + upwind biased stencil. + - linearCorrection = true : fit calculated for corrected linear scheme + - linearCorrection = false : fit calculated for corrected upwind scheme SourceFiles UpwindFitData.C @@ -44,7 +46,7 @@ SourceFiles namespace Foam { -class extendedUpwindStencil; +class extendedUpwindCellToFaceStencil; /*---------------------------------------------------------------------------*\ Class UpwindFitData Declaration @@ -53,7 +55,12 @@ class extendedUpwindStencil; template<class Polynomial> class UpwindFitData : - public FitData<UpwindFitData<Polynomial>, extendedUpwindStencil, Polynomial> + public FitData + < + UpwindFitData<Polynomial>, + extendedUpwindCellToFaceStencil, + Polynomial + > { // Private data @@ -84,7 +91,8 @@ public: UpwindFitData ( const fvMesh& mesh, - const extendedUpwindStencil& stencil, + const extendedUpwindCellToFaceStencil& stencil, + const bool linearCorrection, const scalar linearLimitFactor, const scalar centralWeight ); diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitScheme.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitScheme.H index 30444aafa4bb8e11ca10eb21e3911bab51457fb7..46fe3fe1ba08aa66c7fbd4c95ae2af94cbd9fe5c 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitScheme.H +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/UpwindFitScheme/UpwindFitScheme.H @@ -126,9 +126,10 @@ public: { const fvMesh& mesh = this->mesh(); - const extendedUpwindStencil& stencil = Stencil::New + const extendedUpwindCellToFaceStencil& stencil = Stencil::New ( mesh, + false, //pureUpwind scalar(0.5) ); @@ -137,6 +138,7 @@ public: ( mesh, stencil, + true, //calculate as offset to linear linearLimitFactor_, centralWeight_ ); diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/biLinearFit/biLinearFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/biLinearFit/biLinearFit.C index 0ff394ff82a14c68ebba0a74bb271c76ae1d6cbb..b80d70f065b92a17fc2d44ded85177ded497efef 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/biLinearFit/biLinearFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/biLinearFit/biLinearFit.C @@ -26,7 +26,7 @@ License #include "CentredFitScheme.H" #include "biLinearFitPolynomial.H" -#include "centredCFCStencilObject.H" +#include "centredCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( biLinearFit, biLinearFitPolynomial, - centredCFCStencilObject + centredCFCCellToFaceStencilObject ); } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/cubicUpwindFit/cubicUpwindFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/cubicUpwindFit/cubicUpwindFit.C index 02b3a332f00659186a0172f2f326efb5e9f77832..7d588649ebaa8bef927ee3b86da860612ca4001c 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/cubicUpwindFit/cubicUpwindFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/cubicUpwindFit/cubicUpwindFit.C @@ -26,7 +26,7 @@ License #include "UpwindFitScheme.H" #include "cubicUpwindFitPolynomial.H" -#include "upwindCFCStencilObject.H" +#include "upwindCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( cubicUpwindFit, cubicUpwindFitPolynomial, - upwindCFCStencilObject + upwindCFCCellToFaceStencilObject ); } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearFit/linearFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearFit/linearFit.C index 6362a7b7ae0b83de0c43640f37a21332bc298675..71a64fd14061b7dd21c4ffad31fc1af501b511e3 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearFit/linearFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearFit/linearFit.C @@ -26,7 +26,7 @@ License #include "CentredFitScheme.H" #include "linearFitPolynomial.H" -#include "centredCFCStencilObject.H" +#include "centredCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( linearFit, linearFitPolynomial, - centredCFCStencilObject + centredCFCCellToFaceStencilObject ); } diff --git a/applications/test/ptrList/ptrListTest.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearPureUpwindFit/linearPureUpwindFit.C similarity index 77% rename from applications/test/ptrList/ptrListTest.C rename to src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearPureUpwindFit/linearPureUpwindFit.C index 7b2f6722bcc637a1c63d4ae42834a8075062f077..28aa8e7434b919bb8089e6d56431ee35b948a167 100644 --- a/applications/test/ptrList/ptrListTest.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/linearPureUpwindFit/linearPureUpwindFit.C @@ -24,37 +24,26 @@ License \*---------------------------------------------------------------------------*/ -#include "PtrList.H" -#include "scalar.H" - -using namespace Foam; +#include "PureUpwindFitScheme.H" +#include "linearFitPolynomial.H" +#include "pureUpwindCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Main program: -int main(int argc, char *argv[]) +namespace Foam { - PtrList<scalar> list(10); - - forAll(list, i) - { - list.set(i, new scalar(i)); - } - - for + defineTemplateTypeNameAndDebug ( - PtrList<scalar>::iterator iter = list.begin(); - iter != list.end(); - ++iter - ) - { - Info<< *iter << endl; - } + UpwindFitData<linearFitPolynomial>, + 0 + ); - Info<< list << endl; - - return 0; + makePureUpwindFitSurfaceInterpolationScheme + ( + linearPureUpwindFit, + linearFitPolynomial, + pureUpwindCFCCellToFaceStencilObject + ); } - // ************************************************************************* // diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.C index 7d84fd4887d9d5724767645a43c6eb9c6ddd3869..296de91b76375027aa638c9d5d3132d5fcb1980e 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticFit/quadraticFit.C @@ -26,7 +26,7 @@ License #include "CentredFitScheme.H" #include "quadraticFitPolynomial.H" -#include "centredCFCStencilObject.H" +#include "centredCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( quadraticFit, quadraticFitPolynomial, - centredCFCStencilObject + centredCFCCellToFaceStencilObject ); } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearFit/quadraticLinearFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearFit/quadraticLinearFit.C index 8660cae93ad9df8dc05872a1f401d476b256a111..8c0911f4add5784b5991fcd9341794f6e8f842e5 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearFit/quadraticLinearFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearFit/quadraticLinearFit.C @@ -26,7 +26,7 @@ License #include "CentredFitScheme.H" #include "quadraticLinearFitPolynomial.H" -#include "centredCFCStencilObject.H" +#include "centredCFCCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( quadraticLinearFit, quadraticLinearFitPolynomial, - centredCFCStencilObject + centredCFCCellToFaceStencilObject ); } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearPureUpwindFit/quadraticLinearPureUpwindFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearPureUpwindFit/quadraticLinearPureUpwindFit.C new file mode 100644 index 0000000000000000000000000000000000000000..513de347d75624f42be5b7ec6785d5e2246b4250 --- /dev/null +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearPureUpwindFit/quadraticLinearPureUpwindFit.C @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "PureUpwindFitScheme.H" +#include "quadraticLinearUpwindFitPolynomial.H" +#include "upwindCFCCellToFaceStencilObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Use stencil with three upwind cells: + // upwindCFCCellToFaceStencilObject + pureUpwind + makePureUpwindFitSurfaceInterpolationScheme + ( + quadraticLinearPureUpwindFit, + quadraticLinearUpwindFitPolynomial, + upwindCFCCellToFaceStencilObject + ); +} + +// ************************************************************************* // diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearUpwindFit/quadraticLinearUpwindFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearUpwindFit/quadraticLinearUpwindFit.C index ca0da7d9da0d322c13daec461006f8917e36c81d..d89107ab71e3fec4f73dbe8f0717cb4c65336e31 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearUpwindFit/quadraticLinearUpwindFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticLinearUpwindFit/quadraticLinearUpwindFit.C @@ -26,7 +26,7 @@ License #include "UpwindFitScheme.H" #include "quadraticLinearUpwindFitPolynomial.H" -#include "upwindCFCStencilObject.H" +#include "upwindFECCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( quadraticLinearUpwindFit, quadraticLinearUpwindFitPolynomial, - upwindCFCStencilObject + upwindFECCellToFaceStencilObject ); } diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticUpwindFit/quadraticUpwindFit.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticUpwindFit/quadraticUpwindFit.C index e0e003906e603e2bc071679d5a68c0a1661a18a4..88ccc2971b887431b049c0261f95f8658a0a8a7b 100644 --- a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticUpwindFit/quadraticUpwindFit.C +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/quadraticUpwindFit/quadraticUpwindFit.C @@ -26,7 +26,7 @@ License #include "UpwindFitScheme.H" #include "quadraticUpwindFitPolynomial.H" -#include "upwindFECStencilObject.H" +#include "upwindFECCellToFaceStencilObject.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -42,7 +42,7 @@ namespace Foam ( quadraticUpwindFit, quadraticUpwindFitPolynomial, - upwindFECStencilObject + upwindFECCellToFaceStencilObject ); } diff --git a/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options b/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options index bc278a29cb245bdfa2021b8ed4ee7ebf0eb3d0da..26c2b8abfbc8e6badc58d08bd78c6c53e49a1438 100644 --- a/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options +++ b/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options @@ -1,7 +1,7 @@ ParMGridGen = $(WM_THIRD_PARTY_DIR)/ParMGridGen-1.0 TYPE_REAL= -#if defined(SP) +#if defined(WM_SP) TYPE_REAL=-DTYPE_REAL #endif diff --git a/src/fvMotionSolver/Make/files b/src/fvMotionSolver/Make/files index 41f31c0ecc79dd3972e667e08041002a0e9099ae..f229ae322ef04b4bf61dd4bb0eb336fed3764e48 100644 --- a/src/fvMotionSolver/Make/files +++ b/src/fvMotionSolver/Make/files @@ -30,5 +30,6 @@ pointPatchFields/derived/angularOscillatingVelocity/angularOscillatingVelocityPo pointPatchFields/derived/oscillatingDisplacement/oscillatingDisplacementPointPatchVectorField.C pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C +pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C LIB = $(FOAM_LIBBIN)/libfvMotionSolvers diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C new file mode 100644 index 0000000000000000000000000000000000000000..bbafb189faa97eba4faea0aa5e69ad1d163e70fd --- /dev/null +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C @@ -0,0 +1,514 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "surfaceDisplacementPointPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" +#include "Time.H" +#include "transformField.H" +#include "fvMesh.H" +#include "displacementLaplacianFvMotionSolver.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* +NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3>:: +names[] = +{ + "nearest", + "pointNormal", + "fixedNormal" +}; + +const NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3> + surfaceDisplacementPointPatchVectorField::projectModeNames_; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void surfaceDisplacementPointPatchVectorField::calcProjection +( + vectorField& displacement +) const +{ + const polyMesh& mesh = patch().boundaryMesh().mesh()(); + const pointField& localPoints = patch().localPoints(); + const labelList& meshPoints = patch().meshPoints(); + + //const scalar deltaT = mesh.time().deltaT().value(); + + // Construct large enough vector in direction of projectDir so + // we're guaranteed to hit something. + + //- Per point projection vector: + const scalar projectLen = mag(mesh.bounds().max()-mesh.bounds().min()); + + // For case of fixed projection vector: + vector projectVec; + if (projectMode_ == FIXEDNORMAL) + { + vector n = projectDir_/mag(projectDir_); + projectVec = projectLen*n; + } + + + // Get fixed points (bit of a hack) + const pointZone* zonePtr = NULL; + + if (frozenPointsZone_.size() > 0) + { + const pointZoneMesh& pZones = mesh.pointZones(); + + zonePtr = &pZones[pZones.findZoneID(frozenPointsZone_)]; + + Pout<< "surfaceDisplacementPointPatchVectorField : Fixing all " + << zonePtr->size() << " points in pointZone " << zonePtr->name() + << endl; + } + + // Get the starting locations from the motionSolver + const pointField& points0 = mesh.lookupObject<displacementFvMotionSolver> + ( + "dynamicMeshDict" + ).points0(); + + + pointField start(meshPoints.size()); + forAll(start, i) + { + start[i] = points0[meshPoints[i]] + displacement[i]; + } + + label nNotProjected = 0; + + if (projectMode_ == NEAREST) + { + List<pointIndexHit> nearest; + labelList hitSurfaces; + surfaces().findNearest + ( + start, + scalarField(start.size(), sqr(projectLen)), + hitSurfaces, + nearest + ); + + forAll(nearest, i) + { + if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) + { + // Fixed point. Reset to point0 location. + displacement[i] = points0[meshPoints[i]] - localPoints[i]; + } + else if (nearest[i].hit()) + { + displacement[i] = + nearest[i].hitPoint() + - points0[meshPoints[i]]; + } + else + { + nNotProjected++; + + if (debug) + { + Pout<< " point:" << meshPoints[i] + << " coord:" << localPoints[i] + << " did not find any surface within " << projectLen + << endl; + } + } + } + } + else + { + // Do tests on all points. Combine later on. + + // 1. Check if already on surface + List<pointIndexHit> nearest; + { + labelList nearestSurface; + surfaces().findNearest + ( + start, + scalarField(start.size(), sqr(SMALL)), + nearestSurface, + nearest + ); + } + + // 2. intersection. (combined later on with information from nearest + // above) + vectorField projectVecs(start.size(), projectVec); + + if (projectMode_ == POINTNORMAL) + { + projectVecs = projectLen*patch().pointNormals(); + } + + // Knock out any wedge component + scalarField offset(start.size(), 0.0); + if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) + { + forAll(offset, i) + { + offset[i] = start[i][wedgePlane_]; + start[i][wedgePlane_] = 0; + projectVecs[i][wedgePlane_] = 0; + } + } + + List<pointIndexHit> rightHit; + { + labelList rightSurf; + surfaces().findAnyIntersection + ( + start, + start+projectVecs, + rightSurf, + rightHit + ); + } + + List<pointIndexHit> leftHit; + { + labelList leftSurf; + surfaces().findAnyIntersection + ( + start, + start-projectVecs, + leftSurf, + leftHit + ); + } + + // 3. Choose either -fixed, nearest, right, left. + forAll(displacement, i) + { + if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) + { + // Fixed point. Reset to point0 location. + displacement[i] = points0[meshPoints[i]] - localPoints[i]; + } + else if (nearest[i].hit()) + { + // Found nearest. + displacement[i] = + nearest[i].hitPoint() + - points0[meshPoints[i]]; + } + else + { + pointIndexHit interPt; + + if (rightHit[i].hit()) + { + if (leftHit[i].hit()) + { + if + ( + magSqr(rightHit[i].hitPoint()-start[i]) + < magSqr(leftHit[i].hitPoint()-start[i]) + ) + { + interPt = rightHit[i]; + } + else + { + interPt = leftHit[i]; + } + } + else + { + interPt = rightHit[i]; + } + } + else + { + if (leftHit[i].hit()) + { + interPt = leftHit[i]; + } + } + + + if (interPt.hit()) + { + if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) + { + interPt.rawPoint()[wedgePlane_] += offset[i]; + } + displacement[i] = interPt.rawPoint()-points0[meshPoints[i]]; + } + else + { + nNotProjected++; + + if (debug) + { + Pout<< " point:" << meshPoints[i] + << " coord:" << localPoints[i] + << " did not find any intersection between" + << " ray from " << start[i]-projectVecs[i] + << " to " << start[i]+projectVecs[i] << endl; + } + } + } + } + } + + reduce(nNotProjected, sumOp<label>()); + + if (nNotProjected > 0) + { + Info<< "surfaceDisplacement :" + << " on patch " << patch().name() + << " did not project " << nNotProjected + << " out of " << returnReduce(localPoints.size(), sumOp<label>()) + << " points." << endl; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF +) +: + fixedValuePointPatchVectorField(p, iF), + velocity_(vector::zero), + projectMode_(NEAREST), + projectDir_(vector::zero), + wedgePlane_(-1) +{} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF, + const dictionary& dict +) +: + fixedValuePointPatchVectorField(p, iF, dict), + velocity_(dict.lookup("velocity")), + surfacesDict_(dict.subDict("geometry")), + projectMode_(projectModeNames_.read(dict.lookup("projectMode"))), + projectDir_(dict.lookup("projectDirection")), + wedgePlane_(readLabel(dict.lookup("wedgePlane"))), + frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null)) +{ + if (velocity_.x() < 0 || velocity_.y() < 0 || velocity_.z() < 0) + { + FatalErrorIn + ( + "surfaceDisplacementPointPatchVectorField::\n" + "surfaceDisplacementPointPatchVectorField\n" + "(\n" + " const pointPatch& p,\n" + " const DimensionedField<vector, pointMesh>& iF,\n" + " const dictionary& dict\n" + ")\n" + ) << "All components of velocity have to be positive : " + << velocity_ << nl + << "Set velocity components to a great value if no clipping" + << " necessary." << exit(FatalError); + } +} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const surfaceDisplacementPointPatchVectorField& ppf, + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF, + const pointPatchFieldMapper& mapper +) +: + fixedValuePointPatchVectorField(ppf, p, iF, mapper), + velocity_(ppf.velocity_), + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) +{} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const surfaceDisplacementPointPatchVectorField& ppf +) +: + fixedValuePointPatchVectorField(ppf), + velocity_(ppf.velocity_), + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) +{} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const surfaceDisplacementPointPatchVectorField& ppf, + const DimensionedField<vector, pointMesh>& iF +) +: + fixedValuePointPatchVectorField(ppf, iF), + velocity_(ppf.velocity_), + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const searchableSurfaces& +surfaceDisplacementPointPatchVectorField::surfaces() const +{ + if (surfacesPtr_.empty()) + { + surfacesPtr_.reset + ( + new searchableSurfaces + ( + IOobject + ( + "abc", // dummy name + db().time().constant(), // directory + "triSurface", // instance + db().time(), // registry + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + surfacesDict_ + ) + ); + } + return surfacesPtr_(); +} + + +void surfaceDisplacementPointPatchVectorField::updateCoeffs() +{ + if (this->updated()) + { + return; + } + + const polyMesh& mesh = patch().boundaryMesh().mesh()(); + + vectorField currentDisplacement = this->patchInternalField(); + + // Calculate intersections with surface w.r.t points0. + vectorField displacement(currentDisplacement); + calcProjection(displacement); + + // offset wrt current displacement + vectorField offset = displacement-currentDisplacement; + + // Clip offset to maximum displacement possible: velocity*timestep + + const scalar deltaT = mesh.time().deltaT().value(); + const vector clipVelocity = velocity_*deltaT; + + forAll(displacement, i) + { + vector& d = offset[i]; + + for (direction cmpt = 0; cmpt < vector::nComponents; cmpt++) + { + if (d[cmpt] < 0) + { + d[cmpt] = max(d[cmpt], -clipVelocity[cmpt]); + } + else + { + d[cmpt] = min(d[cmpt], clipVelocity[cmpt]); + } + } + } + + this->operator==(currentDisplacement+offset); + + fixedValuePointPatchVectorField::updateCoeffs(); +} + + +void surfaceDisplacementPointPatchVectorField::write(Ostream& os) const +{ + fixedValuePointPatchVectorField::write(os); + os.writeKeyword("velocity") << velocity_ + << token::END_STATEMENT << nl; + os.writeKeyword("geometry") << surfacesDict_ + << token::END_STATEMENT << nl; + os.writeKeyword("projectMode") << projectModeNames_[projectMode_] + << token::END_STATEMENT << nl; + os.writeKeyword("projectDirection") << projectDir_ + << token::END_STATEMENT << nl; + os.writeKeyword("wedgePlane") << wedgePlane_ + << token::END_STATEMENT << nl; + if (frozenPointsZone_ != word::null) + { + os.writeKeyword("frozenPointsZone") << frozenPointsZone_ + << token::END_STATEMENT << nl; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePointPatchTypeField +( + fixedValuePointPatchVectorField, + surfaceDisplacementPointPatchVectorField +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.H b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.H new file mode 100644 index 0000000000000000000000000000000000000000..7b3ecd7c2ff4437b825b1b17238ce0ba2cc6c10f --- /dev/null +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.H @@ -0,0 +1,223 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + surfaceDisplacementPointPatchVectorField + +Description + Displacement fixed by projection onto triSurface. + Use in a displacement fvMotionSolver + as a bc on the pointDisplacement field. + + Calculates the projection onto the surface according + to the projectMode + - NEAREST : nearest + - POINTNORMAL : intersection with point normal + - FIXEDNORMAL : intersection with fixed vector + + This displacement is then clipped with the specified velocity * deltaT. + + Optionally (intersection only) removes a component ("wedgePlane") to + stay in 2D. + + Needs: + - geometry : dictionary with searchableSurfaces. (usually + triSurfaceMeshes in constant/triSurface) + - projectMode : see above + - projectDirection : if projectMode = fixedNormal + - wedgePlane : -1 or component to knock out of intersection normal + - frozenPointsZone : empty or name of pointZone containing points + that do not move + +SourceFiles + surfaceDisplacementPointPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef surfaceDisplacementPointPatchVectorField_H +#define surfaceDisplacementPointPatchVectorField_H + +#include "pointPatchFields.H" +#include "fixedValuePointPatchFields.H" +#include "searchableSurfaces.H" +#include "Switch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class surfaceDisplacementPointPatchVectorField Declaration +\*---------------------------------------------------------------------------*/ + +class surfaceDisplacementPointPatchVectorField +: + public fixedValuePointPatchVectorField +{ + +public: + + // Public data types + + enum projectMode + { + NEAREST, + POINTNORMAL, + FIXEDNORMAL + }; + +private: + + // Private data + + //- project mode names + static const NamedEnum<projectMode, 3> projectModeNames_; + + //- Maximum velocity + const vector velocity_; + + //- names of surfaces + const dictionary surfacesDict_; + + //- How to project/project onto surface + const projectMode projectMode_; + + //- direction to project + const vector projectDir_; + + //- plane for 2D wedge case or -1. + const label wedgePlane_; + + //- pointZone with frozen points + const word frozenPointsZone_; + + //- Demand driven: surface to project + mutable autoPtr<searchableSurfaces> surfacesPtr_; + + + // Private Member Functions + + //- Calculate displacement (w.r.t. points0()) to project onto surface + void calcProjection(vectorField& displacement) const; + + + //- Disallow default bitwise assignment + void operator=(const surfaceDisplacementPointPatchVectorField&); + +public: + + //- Runtime type information + TypeName("surfaceDisplacement"); + + + // Constructors + + //- Construct from patch and internal field + surfaceDisplacementPointPatchVectorField + ( + const pointPatch&, + const DimensionedField<vector, pointMesh>& + ); + + //- Construct from patch, internal field and dictionary + surfaceDisplacementPointPatchVectorField + ( + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const dictionary& + ); + + //- Construct by mapping given patchField<vector> onto a new patch + surfaceDisplacementPointPatchVectorField + ( + const surfaceDisplacementPointPatchVectorField&, + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const pointPatchFieldMapper& + ); + + //- Construct as copy + surfaceDisplacementPointPatchVectorField + ( + const surfaceDisplacementPointPatchVectorField& + ); + + //- Construct and return a clone + virtual autoPtr<pointPatchVectorField> clone() const + { + return autoPtr<pointPatchVectorField> + ( + new surfaceDisplacementPointPatchVectorField + ( + *this + ) + ); + } + + //- Construct as copy setting internal field reference + surfaceDisplacementPointPatchVectorField + ( + const surfaceDisplacementPointPatchVectorField&, + const DimensionedField<vector, pointMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual autoPtr<pointPatchVectorField> clone + ( + const DimensionedField<vector, pointMesh>& iF + ) const + { + return autoPtr<pointPatchVectorField> + ( + new surfaceDisplacementPointPatchVectorField + ( + *this, + iF + ) + ); + } + + // Member Functions + + //- Surface to follow. Demand loads surfaceNames. + const searchableSurfaces& surfaces() const; + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C index 8c310481d7c5ae20dfda44ff7e402437cf2f4b7a..8f37cd91abadbe0bc26a3f7a49985a961902721c 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C @@ -40,7 +40,7 @@ namespace Foam template<> const char* -NamedEnum<surfaceSlipDisplacementPointPatchVectorField::followMode, 3>:: +NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3>:: names[] = { "nearest", @@ -48,8 +48,8 @@ names[] = "fixedNormal" }; -const NamedEnum<surfaceSlipDisplacementPointPatchVectorField::followMode, 3> - surfaceSlipDisplacementPointPatchVectorField::followModeNames_; +const NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3> + surfaceSlipDisplacementPointPatchVectorField::projectModeNames_; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -95,12 +95,10 @@ void surfaceSlipDisplacementPointPatchVectorField::calcProjection } // Get the starting locations from the motionSolver - const displacementFvMotionSolver& motionSolver = - mesh.lookupObject<displacementFvMotionSolver> - ( - "dynamicMeshDict" - ); - const pointField& points0 = motionSolver.points0(); + const pointField& points0 = mesh.lookupObject<displacementFvMotionSolver> + ( + "dynamicMeshDict" + ).points0(); pointField start(meshPoints.size()); @@ -326,7 +324,7 @@ surfaceSlipDisplacementPointPatchVectorField : pointPatchVectorField(p, iF, dict), surfacesDict_(dict.subDict("geometry")), - projectMode_(followModeNames_.read(dict.lookup("followMode"))), + projectMode_(projectModeNames_.read(dict.lookup("projectMode"))), projectDir_(dict.lookup("projectDirection")), wedgePlane_(readLabel(dict.lookup("wedgePlane"))), frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null)) @@ -343,11 +341,11 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(p, iF), - surfacesDict_(ppf.surfacesDict()), - projectMode_(ppf.projectMode()), - projectDir_(ppf.projectDir()), - wedgePlane_(ppf.wedgePlane()), - frozenPointsZone_(ppf.frozenPointsZone()) + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) {} @@ -358,11 +356,11 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(ppf), - surfacesDict_(ppf.surfacesDict()), - projectMode_(ppf.projectMode()), - projectDir_(ppf.projectDir()), - wedgePlane_(ppf.wedgePlane()), - frozenPointsZone_(ppf.frozenPointsZone()) + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) {} @@ -374,11 +372,11 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(ppf, iF), - surfacesDict_(ppf.surfacesDict()), - projectMode_(ppf.projectMode()), - projectDir_(ppf.projectDir()), - wedgePlane_(ppf.wedgePlane()), - frozenPointsZone_(ppf.frozenPointsZone()) + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) {} @@ -435,7 +433,7 @@ void surfaceSlipDisplacementPointPatchVectorField::write(Ostream& os) const pointPatchVectorField::write(os); os.writeKeyword("geometry") << surfacesDict_ << token::END_STATEMENT << nl; - os.writeKeyword("followMode") << followModeNames_[projectMode_] + os.writeKeyword("projectMode") << projectModeNames_[projectMode_] << token::END_STATEMENT << nl; os.writeKeyword("projectDirection") << projectDir_ << token::END_STATEMENT << nl; diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H index 9edb42ac0d8764334c014267bbdbb327bb808596..2b2b89819fd98faeefb5ad658c75813273fa59e2 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H @@ -26,8 +26,10 @@ Class Foam::surfaceSlipDisplacementPointPatchVectorField Description - Displacement follows a triSurface. Use in a displacement fvMotionSolver. - Following is either + Displacement follows a triSurface. Use in a displacement fvMotionSolver + as a bc on the pointDisplacement field. + Following is done by calculating the projection onto the surface according + to the projectMode - NEAREST : nearest - POINTNORMAL : intersection with point normal - FIXEDNORMAL : intersection with fixed vector @@ -36,9 +38,10 @@ Description stay in 2D. Needs: - - projectSurfaces : names of triSurfaceMeshes (in constant/triSurface) - - followMode : see above - - projectDirection : if followMode = fixedNormal + - geometry : dictionary with searchableSurfaces. (usually + triSurfaceMeshes in constant/triSurface) + - projectMode : see above + - projectDirection : if projectMode = fixedNormal - wedgePlane : -1 or component to knock out of intersection normal - frozenPointsZone : empty or name of pointZone containing points that do not move @@ -72,7 +75,7 @@ public: // Public data types - enum followMode + enum projectMode { NEAREST, POINTNORMAL, @@ -83,14 +86,14 @@ private: // Private data - //- follow mode names - static const NamedEnum<followMode, 3> followModeNames_; + //- project mode names + static const NamedEnum<projectMode, 3> projectModeNames_; //- names of surfaces const dictionary surfacesDict_; - //- How to follow/project onto surface - const followMode projectMode_; + //- How to project/project onto surface + const projectMode projectMode_; //- direction to project const vector projectDir_; @@ -101,13 +104,13 @@ private: //- pointZone with frozen points const word frozenPointsZone_; - //- Demand driven: surface to follow + //- Demand driven: surface to project mutable autoPtr<searchableSurfaces> surfacesPtr_; // Private Member Functions - //- Calculate displacement to project onto surface + //- Calculate displacement (w.r.t. points0()) to project onto surface void calcProjection(vectorField& displacement) const; //- Disallow default bitwise assignment @@ -189,40 +192,9 @@ public: // Member Functions - //- Surfaces to follow - const dictionary& surfacesDict() const - { - return surfacesDict_; - } - //- Surface to follow. Demand loads surfaceNames. const searchableSurfaces& surfaces() const; - //- Mode of projection/following - followMode projectMode() const - { - return projectMode_; - } - - //- Direction to project back onto surface - const vector& projectDir() const - { - return projectDir_; - } - - //- Normal of wedgeplane (0, 1, 2) or -1. Note: should be obtained - // from twoDPointCorrector. - label wedgePlane() const - { - return wedgePlane_; - } - - //- Zone containing frozen points - const word& frozenPointsZone() const - { - return frozenPointsZone_; - } - //- Update the patch field virtual void evaluate ( diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake index fea6fce12eba69648412f36c4a6130a52037f001..92993c516ff3740ae22dd506cb43316d2f77ef19 100755 --- a/src/lagrangian/Allwmake +++ b/src/lagrangian/Allwmake @@ -7,6 +7,7 @@ wmake libso solidParticle wmake libso intermediate wmake libso dieselSpray wmake libso dsmc +wmake libso coalCombustion molecularDynamics/Allwmake diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index e18e0e3b533e0722e82246da6b594b6955229892..e3e0b4f63f5e2576150a1eea6fe3c1c69251f8ec 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -30,6 +30,7 @@ License #include "PstreamCombineReduceOps.H" #include "mapPolyMesh.H" #include "Time.H" +#include "OFstream.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -41,16 +42,12 @@ Foam::Cloud<ParticleType>::Cloud ) : cloud(pMesh), - IDLList<ParticleType>(particles), + IDLList<ParticleType>(), polyMesh_(pMesh), - allFaces_(pMesh.faces()), - points_(pMesh.points()), - cellFaces_(pMesh.cells()), - allFaceCentres_(pMesh.faceCentres()), - owner_(pMesh.faceOwner()), - neighbour_(pMesh.faceNeighbour()), - meshInfo_(polyMesh_) -{} + particleCount_(0) +{ + IDLList<ParticleType>::operator=(particles); +} template<class ParticleType> @@ -62,20 +59,31 @@ Foam::Cloud<ParticleType>::Cloud ) : cloud(pMesh, cloudName), - IDLList<ParticleType>(particles), + IDLList<ParticleType>(), polyMesh_(pMesh), - allFaces_(pMesh.faces()), - points_(pMesh.points()), - cellFaces_(pMesh.cells()), - allFaceCentres_(pMesh.faceCentres()), - owner_(pMesh.faceOwner()), - neighbour_(pMesh.faceNeighbour()), - meshInfo_(polyMesh_) -{} + particleCount_(0) +{ + IDLList<ParticleType>::operator=(particles); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class ParticleType> +Foam::label Foam::Cloud<ParticleType>::getNewParticleID() const +{ + label id = particleCount_++; + + if (id == labelMax) + { + WarningIn("Cloud<ParticleType>::getNewParticleID() const") + << "Particle counter has overflowed. This might cause problems" + << " when reconstructing particle tracks." << endl; + } + return id; +} + + template<class ParticleType> void Foam::Cloud<ParticleType>::addParticle(ParticleType* pPtr) { @@ -322,6 +330,25 @@ void Foam::Cloud<ParticleType>::autoMap(const mapPolyMesh& mapper) } +template<class ParticleType> +void Foam::Cloud<ParticleType>::writePositions() const +{ + OFstream pObj + ( + this->db().time().path()/this->name() + "_positions.obj" + ); + + forAllConstIter(typename Cloud<ParticleType>, *this, pIter) + { + const ParticleType& p = pIter(); + pObj<< "v " << p.position().x() << " " << p.position().y() << " " + << p.position().z() << nl; + } + + pObj.flush(); +} + + // * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * // #include "CloudIO.C" diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H index 684ceb979e34419053fc8b3eb51b4f3eabf8f91a..626042e68ac7e1a537daf4229b4fbc650964f802 100644 --- a/src/lagrangian/basic/Cloud/Cloud.H +++ b/src/lagrangian/basic/Cloud/Cloud.H @@ -39,17 +39,20 @@ SourceFiles #include "cloud.H" #include "IDLList.H" #include "IOField.H" - -#include "polyMeshInfo.H" +#include "polyMesh.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +// Forward declaration of functions template<class ParticleType> class Cloud; +template<class ParticleType> +class IOPosition; + template<class ParticleType> Ostream& operator<< ( @@ -68,19 +71,15 @@ class Cloud public cloud, public IDLList<ParticleType> { - // Private data const polyMesh& polyMesh_; - const faceList& allFaces_; - const vectorField& points_; - const cellList& cellFaces_; - const vectorField& allFaceCentres_; - const unallocLabelList& owner_; - const unallocLabelList& neighbour_; - //- Mesh information object - const polyMeshInfo meshInfo_; + //- Overall count of particles ever created. Never decreases. + mutable label particleCount_; + + //- Temporary storage for addressing. Used in findFaces. + mutable DynamicList<label> labels_; // Private member functions @@ -93,6 +92,8 @@ public: template<class ParticleT> friend class Particle; + template<class ParticleT> + friend class IOPosition; typedef ParticleType particleType; @@ -173,54 +174,54 @@ public: return polyMesh_.boundaryMesh()[patchi].whichFace(facei); } - //- Return reference to the mesh information object - const polyMeshInfo& meshInfo() const - { - return meshInfo_; - } - label size() const { return IDLList<ParticleType>::size(); }; - const const_iterator begin() const - { - return IDLList<ParticleType>::begin(); - }; - const const_iterator cbegin() const - { - return IDLList<ParticleType>::cbegin(); - }; + // Iterators - const const_iterator end() const - { - return IDLList<ParticleType>::end(); - }; + const const_iterator begin() const + { + return IDLList<ParticleType>::begin(); + }; - const const_iterator cend() const - { - return IDLList<ParticleType>::cend(); - }; + const const_iterator cbegin() const + { + return IDLList<ParticleType>::cbegin(); + }; - iterator begin() - { - return IDLList<ParticleType>::begin(); - }; + const const_iterator end() const + { + return IDLList<ParticleType>::end(); + }; - iterator end() - { - return IDLList<ParticleType>::end(); - }; + const const_iterator cend() const + { + return IDLList<ParticleType>::cend(); + }; + + iterator begin() + { + return IDLList<ParticleType>::begin(); + }; + + iterator end() + { + return IDLList<ParticleType>::end(); + }; + + + // Edit void clear() { return IDLList<ParticleType>::clear(); }; - - // Edit + //- Get unique particle creation id + label getNewParticleID() const; //- Transfer particle to cloud void addParticle(ParticleType* pPtr); @@ -255,13 +256,15 @@ public: const IOField<DataType>& data ) const; - //- Read the field data for the cloud of particles - void readFields(); + //- Read the field data for the cloud of particles. Dummy at + // this level. + virtual void readFields(); // Write - //- Write the field data for the cloud of particles + //- Write the field data for the cloud of particles Dummy at + // this level. virtual void writeFields() const; //- Write using given format, version and compression. @@ -273,6 +276,9 @@ public: IOstream::compressionType cmp ) const; + //- Write positions to <cloudName>_positions.obj file + void writePositions() const; + // Ostream Operator diff --git a/src/lagrangian/basic/Cloud/CloudIO.C b/src/lagrangian/basic/Cloud/CloudIO.C index 9b58c12ea52a35cd01305547b74f69c4af502b3f..c1e4b30f808a9f8015f07e57bf3eb1ceaaa61b7d 100644 --- a/src/lagrangian/basic/Cloud/CloudIO.C +++ b/src/lagrangian/basic/Cloud/CloudIO.C @@ -67,13 +67,7 @@ Foam::Cloud<ParticleType>::Cloud : cloud(pMesh), polyMesh_(pMesh), - allFaces_(pMesh.faces()), - points_(pMesh.points()), - cellFaces_(pMesh.cells()), - allFaceCentres_(pMesh.faceCentres()), - owner_(pMesh.faceOwner()), - neighbour_(pMesh.faceNeighbour()), - meshInfo_(polyMesh_) + particleCount_(0) { initCloud(checkClass); } @@ -89,13 +83,7 @@ Foam::Cloud<ParticleType>::Cloud : cloud(pMesh, cloudName), polyMesh_(pMesh), - allFaces_(pMesh.faces()), - points_(pMesh.points()), - cellFaces_(pMesh.cells()), - allFaceCentres_(pMesh.faceCentres()), - owner_(pMesh.faceOwner()), - neighbour_(pMesh.faceNeighbour()), - meshInfo_(polyMesh_) + particleCount_(0) { initCloud(checkClass); } diff --git a/src/lagrangian/basic/IOPosition/IOPosition.C b/src/lagrangian/basic/IOPosition/IOPosition.C index 7865a12105f0bd3923a2b3fa85fdb6f139b4c041..5f12742d8c214df4cf8937a4486375e62512fe29 100644 --- a/src/lagrangian/basic/IOPosition/IOPosition.C +++ b/src/lagrangian/basic/IOPosition/IOPosition.C @@ -22,12 +22,74 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "IOPosition.H" +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class ParticleType> +Foam::word Foam::IOPosition<ParticleType>::particlePropertiesName +( + "particleProperties" +); + + +// * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * * // + +template<class ParticleType> +void Foam::IOPosition<ParticleType>::readParticleProperties() +{ + IOobject propsDictHeader + ( + particlePropertiesName, + cloud_.db().time().timeName(), + "uniform"/cloud::prefix/cloud_.name(), + cloud_.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ); + + if (propsDictHeader.headerOk()) + { + const IOdictionary propsDict(propsDictHeader); + + word procName("processor" + Foam::name(Pstream::myProcNo())); + if (propsDict.found(procName)) + { + propsDict.subDict(procName).lookup("particleCount") + >> cloud_.particleCount_; + } + } +} + + +template<class ParticleType> +void Foam::IOPosition<ParticleType>::writeParticleProperties() const +{ + IOdictionary propsDict + ( + IOobject + ( + particlePropertiesName, + cloud_.db().time().timeName(), + "uniform"/cloud::prefix/cloud_.name(), + cloud_.db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ) + ); + + word procName("processor" + Foam::name(Pstream::myProcNo())); + propsDict.add(procName, dictionary()); + propsDict.subDict(procName).add("particleCount", cloud_.particleCount_); + + propsDict.regIOobject::write(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ParticleType> @@ -70,11 +132,20 @@ bool Foam::IOPosition<ParticleType>::write() const template<class ParticleType> bool Foam::IOPosition<ParticleType>::writeData(Ostream& os) const { + // Write global cloud data + writeParticleProperties(); + os<< cloud_.size() << nl << token::BEGIN_LIST << nl; forAllConstIter(typename Cloud<ParticleType>, cloud_, iter) { - os<< static_cast<const Particle<ParticleType>&>(iter()) << nl; + // Prevent writing additional fields + static_cast<const Particle<ParticleType>&>(iter()).write + ( + os, + false + ); + os << nl; } os<< token::END_LIST << endl; @@ -90,6 +161,9 @@ void Foam::IOPosition<ParticleType>::readData bool checkClass ) { + // Read global cloud data. Resets count on cloud. + readParticleProperties(); + Istream& is = readStream(checkClass ? typeName : ""); token firstToken(is); @@ -103,6 +177,7 @@ void Foam::IOPosition<ParticleType>::readData for (label i=0; i<s; i++) { + // Do not read any fields, position only c.append(new ParticleType(c, is, false)); } @@ -133,6 +208,7 @@ void Foam::IOPosition<ParticleType>::readData ) { is.putBack(lastToken); + // Do not read any fields, position only c.append(new ParticleType(c, is, false)); is >> lastToken; } diff --git a/src/lagrangian/basic/IOPosition/IOPosition.H b/src/lagrangian/basic/IOPosition/IOPosition.H index 5123644385f28bb942c01c5a2de8f30d43f41116..982416fdc8ff8bddc998e745fb920523cdda6735 100644 --- a/src/lagrangian/basic/IOPosition/IOPosition.H +++ b/src/lagrangian/basic/IOPosition/IOPosition.H @@ -26,7 +26,7 @@ Class Foam::IOPosition Description - Helper IO class to write particle positions + Helper IO class to read and write particle positions SourceFiles IOPosition.C @@ -59,34 +59,42 @@ class IOPosition const Cloud<ParticleType>& cloud_; + // Private member functions + + //- Read particle properties dictionary + void readParticleProperties(); + + //- Write particle properties dictionary + void writeParticleProperties() const; + + public: - //- Runtime type name information - virtual const word& type() const - { - return cloud_.type(); - } + // Static data + + //- Runtime type name information. Use cloud type. + virtual const word& type() const + { + return cloud_.type(); + } + + //- Name of particle properties dictionary + static word particlePropertiesName; + // Constructors //- Construct from cloud - IOPosition - ( - const Cloud<ParticleType>& - ); + IOPosition(const Cloud<ParticleType>&); // Member functions - void readData - ( - Cloud<ParticleType>& c, - bool checkClass - ); + virtual void readData(Cloud<ParticleType>& c, bool checkClass); - bool write() const; + virtual bool write() const; - bool writeData(Ostream& os) const; + virtual bool writeData(Ostream& os) const; }; diff --git a/src/lagrangian/basic/Make/files b/src/lagrangian/basic/Make/files index 629d47f47474d5fb80694d454f6936706ad6980a..969b966f1a12385a48c57405a7d8a5861a0759eb 100644 --- a/src/lagrangian/basic/Make/files +++ b/src/lagrangian/basic/Make/files @@ -6,6 +6,4 @@ indexedParticle = indexedParticle $(passiveParticle)/passiveParticleCloud.C $(indexedParticle)/indexedParticleCloud.C -polyMeshInfo/polyMeshInfo.C - LIB = $(FOAM_LIBBIN)/liblagrangian diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index 6c8cbe4aa106f7181d0f93a84a8e6c5c5cd2996c..4838da0ad1d1dc6bd56ee90ca0e79fdb8f24e86b 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -36,16 +36,17 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class ParticleType> -Foam::labelList Foam::Particle<ParticleType>::findFaces +void Foam::Particle<ParticleType>::findFaces ( - const vector& position + const vector& position, + DynamicList<label>& faceList ) const { const polyMesh& mesh = cloud_.polyMesh_; const labelList& faces = mesh.cells()[celli_]; const vector& C = mesh.cellCentres()[celli_]; - labelList faceList(0); + faceList.clear(); forAll(faces, i) { label facei = faces[i]; @@ -53,29 +54,26 @@ Foam::labelList Foam::Particle<ParticleType>::findFaces if ((lam > 0) && (lam < 1.0)) { - label n = faceList.size(); - faceList.setSize(n+1); - faceList[n] = facei; + faceList.append(facei); } } - - return faceList; } template<class ParticleType> -Foam::labelList Foam::Particle<ParticleType>::findFaces +void Foam::Particle<ParticleType>::findFaces ( const vector& position, const label celli, - const scalar stepFraction + const scalar stepFraction, + DynamicList<label>& faceList ) const { - const polyMesh& mesh = cloud_.polyMesh_; + const polyMesh& mesh = cloud_.pMesh(); const labelList& faces = mesh.cells()[celli]; const vector& C = mesh.cellCentres()[celli]; - labelList faceList(0); + faceList.clear(); forAll(faces, i) { label facei = faces[i]; @@ -83,13 +81,9 @@ Foam::labelList Foam::Particle<ParticleType>::findFaces if ((lam > 0) && (lam < 1.0)) { - label n = faceList.size(); - faceList.setSize(n+1); - faceList[n] = facei; + faceList.append(facei); } } - - return faceList; } @@ -182,7 +176,22 @@ Foam::Particle<ParticleType>::Particle position_(position), celli_(celli), facei_(-1), - stepFraction_(0.0) + stepFraction_(0.0), + origProc_(Pstream::myProcNo()), + origId_(cloud_.getNewParticleID()) +{} + + +template<class ParticleType> +Foam::Particle<ParticleType>::Particle(const Particle<ParticleType>& p) +: + cloud_(p.cloud_), + position_(p.position_), + celli_(p.celli_), + facei_(p.facei_), + stepFraction_(p.stepFraction_), + origProc_(p.origProc_), + origId_(p.origId_) {} @@ -226,7 +235,8 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace { const polyMesh& mesh = cloud_.polyMesh_; - labelList faces = findFaces(endPosition); + DynamicList<label>& faces = cloud_.labels_; + findFaces(endPosition, faces); facei_ = -1; scalar trackFraction = 0.0; @@ -297,13 +307,13 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace // change cell if (internalFace) // Internal face { - if (celli_ == cloud_.owner_[facei_]) + if (celli_ == mesh.faceOwner()[facei_]) { - celli_ = cloud_.neighbour_[facei_]; + celli_ = mesh.faceNeighbour()[facei_]; } - else if (celli_ == cloud_.neighbour_[facei_]) + else if (celli_ == mesh.faceNeighbour()[facei_]) { - celli_ = cloud_.owner_[facei_]; + celli_ = mesh.faceOwner()[facei_]; } else { @@ -328,56 +338,47 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace label patchi = patch(facei_); const polyPatch& patch = mesh.boundaryMesh()[patchi]; - if (isA<wedgePolyPatch>(patch)) - { - p.hitWedgePatch - ( - static_cast<const wedgePolyPatch&>(patch), td - ); - } - else if (isA<symmetryPolyPatch>(patch)) - { - p.hitSymmetryPatch - ( - static_cast<const symmetryPolyPatch&>(patch), td - ); - } - else if (isA<cyclicPolyPatch>(patch)) + if (!p.hitPatch(patch, td, patchi)) { - p.hitCyclicPatch - ( - static_cast<const cyclicPolyPatch&>(patch), td - ); - } - else if (isA<processorPolyPatch>(patch)) - { - p.hitProcessorPatch - ( - static_cast<const processorPolyPatch&>(patch), td - ); - } - else if (isA<wallPolyPatch>(patch)) - { - p.hitWallPatch - ( - static_cast<const wallPolyPatch&>(patch), td - ); - } - else if (isA<polyPatch>(patch)) - { - p.hitPatch - ( - static_cast<const polyPatch&>(patch), td - ); - } - else - { - FatalErrorIn - ( - "Particle::trackToFace" - "(const vector& endPosition, scalar& trackFraction)" - )<< "patch type " << patch.type() << " not suported" << nl - << abort(FatalError); + if (isA<wedgePolyPatch>(patch)) + { + p.hitWedgePatch + ( + static_cast<const wedgePolyPatch&>(patch), td + ); + } + else if (isA<symmetryPolyPatch>(patch)) + { + p.hitSymmetryPatch + ( + static_cast<const symmetryPolyPatch&>(patch), td + ); + } + else if (isA<cyclicPolyPatch>(patch)) + { + p.hitCyclicPatch + ( + static_cast<const cyclicPolyPatch&>(patch), td + ); + } + else if (isA<processorPolyPatch>(patch)) + { + p.hitProcessorPatch + ( + static_cast<const processorPolyPatch&>(patch), td + ); + } + else if (isA<wallPolyPatch>(patch)) + { + p.hitWallPatch + ( + static_cast<const wallPolyPatch&>(patch), td + ); + } + else + { + p.hitPatch(patch, td); + } } } } @@ -423,6 +424,19 @@ void Foam::Particle<ParticleType>::transformProperties(const vector&) {} +template<class ParticleType> +template<class TrackData> +bool Foam::Particle<ParticleType>::hitPatch +( + const polyPatch&, + TrackData&, + const label +) +{ + return false; +} + + template<class ParticleType> template<class TrackData> void Foam::Particle<ParticleType>::hitWedgePatch diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H index 75a0b041744af33b9de9b805a8c46cabb4031e29..a1077a604e45d7fcf2e2947eb9fa0ca3a34e1297 100644 --- a/src/lagrangian/basic/Particle/Particle.H +++ b/src/lagrangian/basic/Particle/Particle.H @@ -98,10 +98,7 @@ public: // Constructors - inline trackData - ( - Cloud<ParticleType>& cloud - ); + inline trackData(Cloud<ParticleType>& cloud); // Member functions @@ -130,6 +127,12 @@ protected: //- Fraction of time-step completed scalar stepFraction_; + //- Originating processor id + label origProc_; + + //- Local particle id on originating processor + label origId_; + // Private member functions @@ -154,23 +157,35 @@ protected: const label facei ) const; - //- Return the faces between position and cell centre - labelList findFaces + //- Find the faces between position and cell centre + void findFaces ( - const vector& position + const vector& position, + DynamicList<label>& faceList ) const; - //- Return the faces between position and cell centre - labelList findFaces + //- Find the faces between position and cell centre + void findFaces ( const vector& position, const label celli, - const scalar stepFraction + const scalar stepFraction, + DynamicList<label>& faceList ) const; // Patch interactions + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + template<class TrackData> + bool hitPatch + ( + const polyPatch&, + TrackData& td, + const label patchI + ); + //- Overridable function to handle the particle hitting a wedgePatch template<class TrackData> void hitWedgePatch @@ -256,8 +271,13 @@ public: friend class Cloud<ParticleType>; - //- Runtime type information - TypeName("Particle"); + // Static data members + + //- Runtime type information + TypeName("Particle"); + + //- String representation of properties + static string propHeader; // Constructors @@ -278,14 +298,24 @@ public: bool readFields = true ); + //- Construct as a copy + Particle(const Particle& p); + + //- Construct a clone + autoPtr<ParticleType> clone() const + { + return autoPtr<Particle>(new Particle(*this)); + } + + //- Factory class to read-construct particles used for // parallel transfer class iNew { - // Private data - const Cloud<ParticleType>& cloud_; + //- Reference to the cloud + const Cloud<ParticleType>& cloud_; public: @@ -297,15 +327,22 @@ public: autoPtr<ParticleType> operator()(Istream& is) const { - return autoPtr<ParticleType>(new ParticleType(cloud_, is)); + return autoPtr<ParticleType> + ( + new ParticleType + ( + cloud_, + is, + true + ) + ); } }; //- Destructor - - virtual ~Particle() - {} + virtual ~Particle() + {} // Member Functions @@ -344,6 +381,9 @@ public: //- Return the impact model to be used, soft or hard (default). inline bool softImpact() const; + //- Return the particle current time + inline scalar currentTime() const; + // Check @@ -370,6 +410,12 @@ public: //- Return the fraction of time-step completed inline scalar stepFraction() const; + //- Return the originating processor id + inline label origProc() const; + + //- Return the particle id on originating processor + inline label origId() const; + // Track @@ -413,12 +459,14 @@ public: // I-O + //- Read the fields associated with the owner cloud + static void readFields(Cloud<ParticleType>& c); + //- Write the fields associated with the owner cloud - static void writeFields - ( - const Cloud<ParticleType>& c - ); + static void writeFields(const Cloud<ParticleType>& c); + //- Write the particle data + void write(Ostream& os, bool writeFields) const; // Ostream Operator diff --git a/src/lagrangian/basic/Particle/ParticleI.H b/src/lagrangian/basic/Particle/ParticleI.H index 075d96705d876aee11d5156dc242313fe139022f..65ac64e5251c25a460e79eb70ae5aeadc3d523bb 100644 --- a/src/lagrangian/basic/Particle/ParticleI.H +++ b/src/lagrangian/basic/Particle/ParticleI.H @@ -26,15 +26,10 @@ License #include "polyMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class ParticleType> -inline scalar Particle<ParticleType>::lambda +inline Foam::scalar Foam::Particle<ParticleType>::lambda ( const vector& from, const vector& to, @@ -182,7 +177,7 @@ inline scalar Particle<ParticleType>::lambda template<class ParticleType> -inline scalar Particle<ParticleType>::lambda +inline Foam::scalar Foam::Particle<ParticleType>::lambda ( const vector& from, const vector& to, @@ -234,23 +229,25 @@ inline scalar Particle<ParticleType>::lambda template<class ParticleType> -inline bool Particle<ParticleType>::inCell() const +inline bool Foam::Particle<ParticleType>::inCell() const { - labelList faces = findFaces(position_); + DynamicList<label>& faces = cloud_.labels_; + findFaces(position_, faces); return (!faces.size()); } template<class ParticleType> -inline bool Particle<ParticleType>::inCell +inline bool Foam::Particle<ParticleType>::inCell ( const vector& position, const label celli, const scalar stepFraction ) const { - labelList faces = findFaces(position, celli, stepFraction); + DynamicList<label>& faces = cloud_.labels_; + findFaces(position, celli, stepFraction, faces); return (!faces.size()); } @@ -259,7 +256,7 @@ inline bool Particle<ParticleType>::inCell // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ParticleType> -inline Particle<ParticleType>::trackData::trackData +inline Foam::Particle<ParticleType>::trackData::trackData ( Cloud<ParticleType>& cloud ) @@ -267,8 +264,10 @@ inline Particle<ParticleType>::trackData::trackData cloud_(cloud) {} + template<class ParticleType> -inline Cloud<ParticleType>& Particle<ParticleType>::trackData::cloud() +inline Foam::Cloud<ParticleType>& +Foam::Particle<ParticleType>::trackData::cloud() { return cloud_; } @@ -277,83 +276,108 @@ inline Cloud<ParticleType>& Particle<ParticleType>::trackData::cloud() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ParticleType> -inline const Cloud<ParticleType>& Particle<ParticleType>::cloud() const +inline const Foam::Cloud<ParticleType>& +Foam::Particle<ParticleType>::cloud() const { return cloud_; } template<class ParticleType> -inline const vector& Particle<ParticleType>::position() const +inline const Foam::vector& Foam::Particle<ParticleType>::position() const { return position_; } template<class ParticleType> -inline vector& Particle<ParticleType>::position() +inline Foam::vector& Foam::Particle<ParticleType>::position() { return position_; } template<class ParticleType> -inline label Particle<ParticleType>::cell() const +inline Foam::label Foam::Particle<ParticleType>::cell() const { return celli_; } + template<class ParticleType> -inline label& Particle<ParticleType>::cell() +inline Foam::label& Foam::Particle<ParticleType>::cell() { return celli_; } template<class ParticleType> -inline label Particle<ParticleType>::face() const +inline Foam::label Foam::Particle<ParticleType>::face() const { return facei_; } template<class ParticleType> -inline bool Particle<ParticleType>::onBoundary() const +inline bool Foam::Particle<ParticleType>::onBoundary() const { return facei_ != -1 && facei_ >= cloud_.pMesh().nInternalFaces(); } template<class ParticleType> -inline scalar& Particle<ParticleType>::stepFraction() +inline Foam::scalar& Foam::Particle<ParticleType>::stepFraction() { return stepFraction_; } template<class ParticleType> -inline scalar Particle<ParticleType>::stepFraction() const +inline Foam::scalar Foam::Particle<ParticleType>::stepFraction() const { return stepFraction_; } template<class ParticleType> -inline bool Particle<ParticleType>::softImpact() const +inline Foam::label Foam::Particle<ParticleType>::origProc() const +{ + return origProc_; +} + + +template<class ParticleType> +inline Foam::label Foam::Particle<ParticleType>::origId() const +{ + return origId_; +} + + +template<class ParticleType> +inline bool Foam::Particle<ParticleType>::softImpact() const { return false; } template<class ParticleType> -inline label Particle<ParticleType>::patch(const label facei) const +inline Foam::scalar Foam::Particle<ParticleType>::currentTime() const +{ + return + cloud_.pMesh().time().value() + + stepFraction_*cloud_.pMesh().time().deltaT().value(); +} + + +template<class ParticleType> +inline Foam::label Foam::Particle<ParticleType>::patch(const label facei) const { return cloud_.facePatch(facei); } template<class ParticleType> -inline label Particle<ParticleType>::patchFace +inline Foam::label Foam::Particle<ParticleType>::patchFace ( const label patchi, const label facei @@ -364,21 +388,18 @@ inline label Particle<ParticleType>::patchFace template<class ParticleType> -inline scalar Particle<ParticleType>::wallImpactDistance(const vector&) const +inline Foam::scalar +Foam::Particle<ParticleType>::wallImpactDistance(const vector&) const { return 0.0; } template<class ParticleType> -inline label Particle<ParticleType>::faceInterpolation() const +inline Foam::label Foam::Particle<ParticleType>::faceInterpolation() const { return facei_; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/lagrangian/basic/Particle/ParticleIO.C b/src/lagrangian/basic/Particle/ParticleIO.C index 7be84f9d1449e3721369caf4413e436f809992a4..980d93f79a93fdb9dbd4c779c1d07d31817f4c84 100644 --- a/src/lagrangian/basic/Particle/ParticleIO.C +++ b/src/lagrangian/basic/Particle/ParticleIO.C @@ -28,9 +28,14 @@ License #include "IOstreams.H" #include "IOPosition.H" +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class ParticleType> +Foam::string Foam::Particle<ParticleType>::propHeader = + "(Px Py Pz) cellI origProc origId"; + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from Istream template<class ParticleType> Foam::Particle<ParticleType>::Particle ( @@ -41,21 +46,53 @@ Foam::Particle<ParticleType>::Particle : cloud_(cloud), facei_(-1), - stepFraction_(0.0) + stepFraction_(0.0), + origProc_(Pstream::myProcNo()), + origId_(-1) { + + // readFields : read additional data. Should be consistent with writeFields. + if (is.format() == IOstream::ASCII) { is >> position_ >> celli_; + if (readFields) + { + is >> origProc_ >> origId_; + } + else + { + origId_ = cloud_.getNewParticleID(); + } } else { - // In binary read both celli_ and facei_, needed for parallel transfer - is.read - ( - reinterpret_cast<char*>(&position_), - sizeof(position_) + sizeof(celli_) - + sizeof(facei_) + sizeof(stepFraction_) - ); + // In binary read all particle data - needed for parallel transfer + if (readFields) + { + is.read + ( + reinterpret_cast<char*>(&position_), + sizeof(position_) + + sizeof(celli_) + + sizeof(facei_) + + sizeof(stepFraction_) + + sizeof(origProc_) + + sizeof(origId_) + ); + } + else + { + is.read + ( + reinterpret_cast<char*>(&position_), + sizeof(position_) + + sizeof(celli_) + + sizeof(facei_) + + sizeof(stepFraction_) + ); + origId_ = cloud_.getNewParticleID(); + } } if (celli_ == -1) @@ -68,6 +105,39 @@ Foam::Particle<ParticleType>::Particle } +template<class ParticleType> +void Foam::Particle<ParticleType>::readFields +( + Cloud<ParticleType>& c +) +{ + if (!c.size()) + { + return; + } + + IOobject procIO(c.fieldIOobject("origProcId", IOobject::MUST_READ)); + + if (procIO.headerOk()) + { + IOField<label> origProcId(procIO); + c.checkFieldIOobject(c, origProcId); + IOField<label> origId(c.fieldIOobject("origId", IOobject::MUST_READ)); + c.checkFieldIOobject(c, origId); + + label i = 0; + forAllIter(typename Cloud<ParticleType>, c, iter) + { + ParticleType& p = iter(); + + p.origProc_ = origProcId[i]; + p.origId_ = origId[i]; + i++; + } + } +} + + template<class ParticleType> void Foam::Particle<ParticleType>::writeFields ( @@ -77,30 +147,91 @@ void Foam::Particle<ParticleType>::writeFields // Write the cloud position file IOPosition<ParticleType> ioP(c); ioP.write(); + + label np = c.size(); + + IOField<label> origProc + ( + c.fieldIOobject + ( + "origProcId", + IOobject::NO_READ + ), + np + ); + IOField<label> origId(c.fieldIOobject("origId", IOobject::NO_READ), np); + + label i = 0; + forAllConstIter(typename Cloud<ParticleType>, c, iter) + { + origProc[i] = iter().origProc_; + origId[i] = iter().origId_; + i++; + } + + origProc.write(); + origId.write(); } template<class ParticleType> -Foam::Ostream& Foam::operator<<(Ostream& os, const Particle<ParticleType>& p) +void Foam::Particle<ParticleType>::write(Ostream& os, bool writeFields) const { if (os.format() == IOstream::ASCII) { - os << p.position_ - << token::SPACE << p.celli_; + if (writeFields) + { + // Write the additional entries + os << position_ + << token::SPACE << celli_ + << token::SPACE << origProc_ + << token::SPACE << origId_; + } + else + { + os << position_ + << token::SPACE << celli_; + } } else { // In binary write both celli_ and facei_, needed for parallel transfer - os.write - ( - reinterpret_cast<const char*>(&p.position_), - sizeof(p.position_) + sizeof(p.celli_) - + sizeof(p.facei_) + sizeof(p.stepFraction_) - ); + if (writeFields) + { + os.write + ( + reinterpret_cast<const char*>(&position_), + sizeof(position_) + + sizeof(celli_) + + sizeof(facei_) + + sizeof(stepFraction_) + + sizeof(origProc_) + + sizeof(origId_) + ); + } + else + { + os.write + ( + reinterpret_cast<const char*>(&position_), + sizeof(position_) + + sizeof(celli_) + + sizeof(facei_) + + sizeof(stepFraction_) + ); + } } // Check state of Ostream - os.check("Ostream& operator<<(Ostream&, const Particle<ParticleType>&)"); + os.check("Particle<ParticleType>::write(Ostream& os, bool) const"); +} + + +template<class ParticleType> +Foam::Ostream& Foam::operator<<(Ostream& os, const Particle<ParticleType>& p) +{ + // Write all data + p.write(os, true); return os; } diff --git a/src/lagrangian/basic/indexedParticle/indexedParticle.H b/src/lagrangian/basic/indexedParticle/indexedParticle.H index 3774bb93d86cc23d0022e838fefe66cb0fed3a80..7023f0ba6d43604b9d6b5341eb9d0d32d16fe643 100644 --- a/src/lagrangian/basic/indexedParticle/indexedParticle.H +++ b/src/lagrangian/basic/indexedParticle/indexedParticle.H @@ -84,7 +84,13 @@ public: bool readFields = true ) : - Particle<indexedParticle>(c, is) + Particle<indexedParticle>(c, is, readFields) + {} + + //- Construct as a copy + indexedParticle(const indexedParticle& p) + : + Particle<indexedParticle>(p) {} //- Construct and return a clone diff --git a/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C b/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C index 52cf785b91b831cfe227ac0883dd9af1e37ea3f7..a9ebc140ecb4f971f097363723e52053e3fdac93 100644 --- a/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C +++ b/src/lagrangian/basic/indexedParticle/indexedParticleCloud.C @@ -22,12 +22,9 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ -#include "indexedParticle.H" -#include "Cloud.H" +#include "indexedParticleCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -43,4 +40,25 @@ defineTemplateTypeNameAndDebug(Cloud<indexedParticle>, 0); } // End namespace Foam +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::indexedParticleCloud::indexedParticleCloud +( + const polyMesh& mesh, + const word& cloudName +) +: + Cloud<indexedParticle>(mesh, cloudName, false) +{ + indexedParticle::readFields(*this); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::indexedParticleCloud::writeFields() const +{ + indexedParticle::writeFields(*this); +} + // ************************************************************************* // diff --git a/src/lagrangian/basic/indexedParticle/indexedParticleCloud.H b/src/lagrangian/basic/indexedParticle/indexedParticleCloud.H new file mode 100644 index 0000000000000000000000000000000000000000..65033e0a9dad0ec24b37f1f83f8e299457ab3694 --- /dev/null +++ b/src/lagrangian/basic/indexedParticle/indexedParticleCloud.H @@ -0,0 +1,91 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::indexedParticleCloud + +Description + A Cloud of particles carrying an additional index. + +SourceFiles + indexedParticleCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef indexedParticleCloud_H +#define indexedParticleCloud_H + +#include "Cloud.H" +#include "indexedParticle.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class indexedParticleCloud Declaration +\*---------------------------------------------------------------------------*/ + +class indexedParticleCloud +: + public Cloud<indexedParticle> +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + indexedParticleCloud(const indexedParticleCloud&); + + //- Disallow default bitwise assignment + void operator=(const indexedParticleCloud&); + + +public: + + // Constructors + + //- Construct given mesh + indexedParticleCloud + ( + const polyMesh&, + const word& cloudName = "defaultCloud" + ); + + + // Member Functions + + //- Write fields + virtual void writeFields() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/basic/passiveParticle/passiveParticle.H b/src/lagrangian/basic/passiveParticle/passiveParticle.H index 4e81e077ac442b6fc899ad556bbddf29a975b1f3..c8d912ac76b77f85ffb71ea5f2405552dbb492c5 100644 --- a/src/lagrangian/basic/passiveParticle/passiveParticle.H +++ b/src/lagrangian/basic/passiveParticle/passiveParticle.H @@ -28,9 +28,6 @@ Class Description SourceFiles - passiveParticleI.H - passiveParticle.C - passiveParticleIO.C \*---------------------------------------------------------------------------*/ @@ -47,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class passiveParticle Declaration + Class passiveParticle Declaration \*---------------------------------------------------------------------------*/ class passiveParticle @@ -78,7 +75,13 @@ public: bool readFields = true ) : - Particle<passiveParticle>(c, is) + Particle<passiveParticle>(c, is, readFields) + {} + + //- Construct as copy + passiveParticle(const passiveParticle& p) + : + Particle<passiveParticle>(p) {} //- Construct and return a clone diff --git a/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C b/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C index 71af5dd82be298565291adce4639aabdce09ef0c..18844ffcea9d845c8cbd16c9642ed3a5fd310a15 100644 --- a/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C +++ b/src/lagrangian/basic/passiveParticle/passiveParticleCloud.C @@ -22,12 +22,9 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ -#include "passiveParticle.H" -#include "Cloud.H" +#include "passiveParticleCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -39,8 +36,34 @@ namespace Foam defineParticleTypeNameAndDebug(passiveParticle, 0); defineTemplateTypeNameAndDebug(Cloud<passiveParticle>, 0); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +}; + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::passiveParticleCloud::passiveParticleCloud +( + const polyMesh& mesh, + const word& cloudName +) +: + Cloud<passiveParticle>(mesh, cloudName, false) +{ + readFields(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::passiveParticleCloud::readFields() +{ + passiveParticle::readFields(*this); +} + + +void Foam::passiveParticleCloud::writeFields() const +{ + passiveParticle::writeFields(*this); +} -} // End namespace Foam // ************************************************************************* // diff --git a/src/lagrangian/basic/passiveParticle/passiveParticleCloud.H b/src/lagrangian/basic/passiveParticle/passiveParticleCloud.H new file mode 100644 index 0000000000000000000000000000000000000000..b8faac8f439c9bd4754b2c7d5c8189dba7f70268 --- /dev/null +++ b/src/lagrangian/basic/passiveParticle/passiveParticleCloud.H @@ -0,0 +1,94 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::passiveParticleCloud + +Description + A Cloud of passive particles + +SourceFiles + passiveParticleCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef passiveParticleCloud_H +#define passiveParticleCloud_H + +#include "Cloud.H" +#include "passiveParticle.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class passiveParticleCloud Declaration +\*---------------------------------------------------------------------------*/ + +class passiveParticleCloud +: + public Cloud<passiveParticle> +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + passiveParticleCloud(const passiveParticleCloud&); + + //- Disallow default bitwise assignment + void operator=(const passiveParticleCloud&); + + +public: + + // Constructors + + //- Construct given mesh + passiveParticleCloud + ( + const polyMesh&, + const word& cloudName = "defaultCloud" + ); + + + // Member Functions + + //- Read fields + virtual void readFields(); + + //- Write fields + virtual void writeFields() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.C b/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.C deleted file mode 100644 index 16b347ccbe3b0415344c6d426cef63b2feb563df..0000000000000000000000000000000000000000 --- a/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.C +++ /dev/null @@ -1,325 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "polyMeshInfo.H" -#include "wedgePolyPatch.H" -#include "symmetryPolyPatch.H" -#include "emptyPolyPatch.H" -#include "mathematicalConstants.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(polyMeshInfo, 0); -} - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Foam::polyMeshInfo::setCentrePoint() -{ - boundBox bounds = mesh_.bounds(); - - centrePoint_ = 0.5*(bounds.max() + bounds.min()); -} - - -void Foam::polyMeshInfo::setEmptyComponent(const vector& dir) -{ - for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) - { - if (dir[cmpt] > 1.0e-6) - { - emptyComponent_ = cmpt; - } - } -} - - -void Foam::polyMeshInfo::queryWedge() -{ - label patchId[4]; - - bool symmPlaneExists = false; - - forAll(mesh_.boundaryMesh(), patchi) - { - const polyPatch& patch = mesh_.boundaryMesh()[patchi]; - if (isA<wedgePolyPatch>(patch)) - { - if (patch.size()) - { - nWedge_++; - if (nWedge_ > 4) - { - break; - } - patchId[nWedge_-1] = patchi; - } - } - else if (isA<symmetryPolyPatch>(patch)) - { - symmPlaneExists = true; - } - } - - if (nWedge_ != 0 && nWedge_ != 2 && nWedge_ != 4) - { - FatalErrorIn("void polyMeshInfo::queryWedge() const") - << "Number of wedge patches " << nWedge_ << " is incorrect, " - "should be 0, 2 or 4" - << exit(FatalError); - } - else - { - if (symmPlaneExists) - { - wedgeAngle_ = mathematicalConstant::pi; - } - else - { - if (nWedge_) - { - if (nWedge_ > 2) - { - WarningIn("void polyMeshInfo::queryWedge() const") - << "Only configured for cases with 2 wedges. " - << "Lagrangian calculations may result in errors" - << endl; - } - // Get the vector normal to wedge patch1 - const wedgePolyPatch& patch1 = refCast<const wedgePolyPatch> - (mesh_.boundaryMesh()[patchId[0]]); - vector n1 = patch1.patchNormal(); - - // Get the vector normal to wedge patch2 - const wedgePolyPatch& patch2 = refCast<const wedgePolyPatch> - (mesh_.boundaryMesh()[patchId[1]]); - vector n2 = patch2.patchNormal(); - - // Calculate the angle swept between the patches - const scalar arcCos = (n1 & n2)/mag(n1); - wedgeAngle_ = mathematicalConstant::pi - acos(arcCos); - - // Get the centre normal - centreNormal_ = patch1.centreNormal(); - - // Get the wedge axis - wedgeAxis_ = patch1.axis(); - } - } - } -} - - -void Foam::polyMeshInfo::queryDirections() -{ - vector dirVec = vector::zero; - - forAll(mesh_.boundaryMesh(), patchi) - { - if (isA<emptyPolyPatch>(mesh_.boundaryMesh()[patchi])) - { - if (mesh_.boundaryMesh()[patchi].size()) - { - nEmpty_++; - dirVec += - sum(cmptMag(mesh_.boundaryMesh()[patchi].faceAreas())); - } - } - } - - - for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) - { - directions_[cmpt] = 1; - } - - if (nEmpty_) - { - reduce(dirVec, sumOp<vector>()); - - dirVec /= mag(dirVec); - - for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) - { - if (dirVec[cmpt] > 1.0e-6) - { - directions_[cmpt] = -1; - emptyComponent_ = cmpt; - } - else - { - directions_[cmpt] = 1; - } - } - - // Set the patch normal - centreNormal_ = dirVec; - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::polyMeshInfo::polyMeshInfo -( - const polyMesh& mesh -) -: - mesh_(mesh), - nGeometricD_(0), - nSolutionD_(0), - centreNormal_(vector::zero), - emptyComponent_(0), - centrePoint_(vector::zero), - nEmpty_(0), - nWedge_(0), - wedgeAxis_(vector::zero), - wedgeAngle_(0) -{ - setCentrePoint(); - - queryWedge(); - - queryDirections(); - - nSolutionD_ = cmptSum(directions_ + Vector<label>::one)/2; - - nGeometricD_ = nSolutionD_ - nWedge_/2; - - if (nGeometricD_ == 2) - { - setEmptyComponent(centreNormal_); - } -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::polyMeshInfo::~polyMeshInfo() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::label Foam::polyMeshInfo::nGeometricD() const -{ - return nGeometricD_; -} - - -Foam::label Foam::polyMeshInfo::nSolutionD() const -{ - return nSolutionD_; -} - - -bool Foam::polyMeshInfo::caseIs2dWedge() const -{ - return (nWedge_ > 0); -} - - -bool Foam::polyMeshInfo::caseIs2dSlab() const -{ - return (nEmpty_ > 0); -} - - -bool Foam::polyMeshInfo::caseIs2d() const -{ - return (nGeometricD_ == 2); -} - - -bool Foam::polyMeshInfo::caseIs3d() const -{ - return (nGeometricD_ == 3); -} - - -Foam::vector Foam::polyMeshInfo::wedgeAxis() const -{ - if (nWedge_) - { - return wedgeAxis_; - } - else - { - WarningIn("Foam::polyMeshInfo::wedgeAxis()") - << "wedgeAxis() requested, but case is not of wedge type. " - << "Returning zero vector" << endl; - return vector::zero; - } -} - - -Foam::scalar Foam::polyMeshInfo::wedgeAngle() const -{ - if (nWedge_) - { - return wedgeAngle_; - } - else - { - WarningIn("Foam::polyMeshInfo::wedgeAngle()") - << "wedgeAngle() requested, but case is not of wedge type. " - << "Returning zero" << endl; - return 0.0; - } -} - - -Foam::vector Foam::polyMeshInfo::centreNormal() const -{ - if (nGeometricD_ == 2) - { - return centreNormal_; - } - else - { - WarningIn("Foam::polyMeshInfo::centreNormal()") - << "centreNormal() requested, but case is not 2-D. " - << "Returning zero vector" << endl; - return vector::zero; - } -} - - -Foam::label Foam::polyMeshInfo::emptyComponent() const -{ - return emptyComponent_; -} - - -Foam::vector Foam::polyMeshInfo::centrePoint() const -{ - return centrePoint_; -} - - -// ************************************************************************* // diff --git a/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H b/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H deleted file mode 100644 index c047afac1845c381d1c569981e511baf47be4d35..0000000000000000000000000000000000000000 --- a/src/lagrangian/basic/polyMeshInfo/polyMeshInfo.H +++ /dev/null @@ -1,176 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - Foam::polyMeshInfo - -Description - - -SourceFiles - polyMeshInfo.C - -\*---------------------------------------------------------------------------*/ - -#ifndef polyMeshInfo_H -#define polyMeshInfo_H - -#include "polyMesh.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class polyMeshInfo Declaration -\*---------------------------------------------------------------------------*/ - -class polyMeshInfo -{ - - // Private data - - //- Reference to the mesh - const polyMesh& mesh_; - - //- Vector of valid directions in mesh - // defined according to the presence of empty patches - mutable Vector<label> directions_; - - //- Number of number of valid geoemtric dimensions in the mesh - label nGeometricD_; - - //- Number of number of valid solution dimensions in the mesh - // For wedge cases this includes the circumferential direction - // in case of swirl - label nSolutionD_; - - //- Plane normal to the wedge patches, or between empty patches - // for slab 2-D cases - vector centreNormal_; - - //- Empty/unused component for 2-D cases - label emptyComponent_; - - //- Geometric centre point - vector centrePoint_; - - //- Number of empty patches - label nEmpty_; - - //- Number of wedge patches - label nWedge_; - - //- Axis of wedge - vector wedgeAxis_; - - //- Angle of wedge - scalar wedgeAngle_; - - - // Private member functions - - //- Set the value of the mesh centre point - void setCentrePoint(); - - //- Determine wedge information - void queryWedge(); - - //- Determine mesh directions - void queryDirections(); - - -public: - - //- Runtime type information - TypeName("polyMeshInfo"); - - // Constructors - - //- Construct from components - polyMeshInfo - ( - const polyMesh& mesh - ); - - - // Destructors - - virtual ~polyMeshInfo(); - - - // Member functions - - //- Access - - //- Return the number of valid geoemtric dimensions in the mesh - label nGeometricD() const; - - //- Return the number of valid solution dimensions in the mesh - label nSolutionD() const; - - //- Flag to indicate whether case is a 2-D wedge - bool caseIs2dWedge() const; - - //- Flag to indicate whether case is a 2-D slab - bool caseIs2dSlab() const; - - //- Flag to indicate whether case is 2-D - bool caseIs2d() const; - - //- Flag to indicate whether case is 3-D - bool caseIs3d() const; - - //- Return axis of wedge - vector wedgeAxis() const; - - //- Return angle of wedge - scalar wedgeAngle() const; - - //- Return the centre normal - vector centreNormal() const; - - //- Return empty component - label emptyComponent() const; - - //- Return centre point - vector centrePoint() const; - - //- Set the empty component direction based on normal vector dir - void setEmptyComponent(const vector& dir); - -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // - diff --git a/src/lagrangian/coalCombustion/CoalCloud/CoalCloud.C b/src/lagrangian/coalCombustion/CoalCloud/CoalCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..0f274d70bf338b8e8a45ac0ee056b439b294be16 --- /dev/null +++ b/src/lagrangian/coalCombustion/CoalCloud/CoalCloud.C @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CoalCloud.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::CoalCloud<ThermoType>::CoalCloud +( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const dimensionedVector& g, + basicThermo& thermo +) +: + ReactingMultiphaseCloud<CoalParcel<ThermoType> > + ( + cloudName, + rho, + U, + g, + thermo + ) +{ + CoalParcel<ThermoType>::readFields(*this); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::CoalCloud<ThermoType>::~CoalCloud() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class ThermoType> +void Foam::CoalCloud<ThermoType>::writeFields() const +{ + CoalParcel<ThermoType>::writeFields(*this); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H b/src/lagrangian/coalCombustion/CoalCloud/CoalCloud.H similarity index 73% rename from src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H rename to src/lagrangian/coalCombustion/CoalCloud/CoalCloud.H index e95a8674326135f073f87c7c05969b35cb16827c..8516508d8b317ea68a462d4bc3832fd05e0a5b43 100644 --- a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.H +++ b/src/lagrangian/coalCombustion/CoalCloud/CoalCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,20 +23,20 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::basicReactingCloud + CoalCloud Description SourceFiles - basicReactingCloud.C + CoalCloud.C \*---------------------------------------------------------------------------*/ -#ifndef basicReactingCloud_H -#define basicReactingCloud_H +#ifndef CoalCloud_H +#define CoalCloud_H -#include "ReactingCloud.H" -#include "basicReactingParcel.H" +#include "ReactingMultiphaseCloud.H" +#include "CoalParcel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,52 +44,50 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class basicReactingCloud Declaration + Class CoalCloud Declaration \*---------------------------------------------------------------------------*/ -class basicReactingCloud +template<class ThermoType> +class CoalCloud : - public ReactingCloud<basicReactingParcel> + public ReactingMultiphaseCloud<CoalParcel<ThermoType> > { - // Private Member Functions //- Disallow default bitwise copy construct - basicReactingCloud(const basicReactingCloud&); + CoalCloud(const CoalCloud&); //- Disallow default bitwise assignment - void operator=(const basicReactingCloud&); + void operator=(const CoalCloud&); public: - //- Runtime type information - TypeName("basicReactingCloud"); + //-Runtime type information + TypeName("CoalCloud"); // Constructors //- Construct given carrier gas fields - basicReactingCloud + CoalCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, - hCombustionThermo& thermo, - PtrList<specieReactingProperties>& gases + basicThermo& thermo ); //- Destructor - - ~basicReactingCloud(); + ~CoalCloud(); // Member Functions //- Write fields - void writeFields() const; + virtual void writeFields() const; }; @@ -99,6 +97,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository + #include "CoalCloud.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/CoalCloud/defineCoalCloud.C b/src/lagrangian/coalCombustion/CoalCloud/defineCoalCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..cc0fa34f49fd096cc4b831c19fdaaec8fab3abde --- /dev/null +++ b/src/lagrangian/coalCombustion/CoalCloud/defineCoalCloud.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "createReactingCloudTypes.H" +#include "CoalCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + createReactingCloudType(CoalCloud); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C b/src/lagrangian/coalCombustion/CoalParcel/CoalParcel.C similarity index 66% rename from src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C rename to src/lagrangian/coalCombustion/CoalParcel/CoalParcel.C index 31176eb5a40b515424e6055772b1a09d7d4bf8ac..ef3448186a61717ac365df1033601c42427dde6c 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.C +++ b/src/lagrangian/coalCombustion/CoalParcel/CoalParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,68 +24,75 @@ License \*---------------------------------------------------------------------------*/ -#include "basicReactingParcel.H" +#include "CoalParcel.H" -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(basicReactingParcel, 0); - defineParticleTypeNameAndDebug(basicReactingParcel, 0); - defineParcelTypeNameAndDebug(basicReactingParcel, 0); -}; +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class ThermoType> +Foam::CoalParcel<ThermoType>::CoalParcel +( + ReactingMultiphaseCloud<CoalParcel<ThermoType> >& owner, + const vector& position, + const label cellI +) +: + ReactingMultiphaseParcel<CoalParcel<ThermoType> >(owner, position, cellI) +{} -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::basicReactingParcel::basicReactingParcel +template<class ThermoType> +Foam::CoalParcel<ThermoType>::CoalParcel ( - ReactingCloud<basicReactingParcel>& owner, - const label typeId, + ReactingMultiphaseCloud<CoalParcel<ThermoType> >& owner, const vector& position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, + const scalarField& YMixture0, const scalarField& YGas0, const scalarField& YLiquid0, const scalarField& YSolid0, - const scalarField& YMixture0, - const constantProperties& constProps + const typename + ReactingMultiphaseParcel<CoalParcel<ThermoType> >:: + constantProperties& constProps ) : - ReactingParcel<basicReactingParcel> + ReactingMultiphaseParcel<CoalParcel<ThermoType> > ( owner, - typeId, position, - celli, + cellI, + typeId, + nParticle0, d0, U0, - nParticle0, + YMixture0, YGas0, YLiquid0, YSolid0, - YMixture0, constProps ) {} -Foam::basicReactingParcel::basicReactingParcel +template<class ThermoType> +Foam::CoalParcel<ThermoType>::CoalParcel ( - const Cloud<basicReactingParcel>& cloud, + const Cloud<CoalParcel<ThermoType> >& cloud, Istream& is, bool readFields ) : - ReactingParcel<basicReactingParcel>(cloud, is, readFields) + ReactingMultiphaseParcel<CoalParcel<ThermoType> >(cloud, is, readFields) {} // * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // -Foam::basicReactingParcel::~basicReactingParcel() +template<class ThermoType> +Foam::CoalParcel<ThermoType>::~CoalParcel() {} diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H b/src/lagrangian/coalCombustion/CoalParcel/CoalParcel.H similarity index 61% rename from src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H rename to src/lagrangian/coalCombustion/CoalParcel/CoalParcel.H index d4e9b93437a1a3cf5f00a5f90137362a44b88d81..f313a16501e71aea51a8418db090d7ba91e75f92 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/basicReactingParcel.H +++ b/src/lagrangian/coalCombustion/CoalParcel/CoalParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,92 +23,107 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::basicReactingParcel + CoalParcel Description SourceFiles - basicReactingParcel.C - basicReactingParcelIO.C + CoalParcel.C + CoalParcelIO.C \*---------------------------------------------------------------------------*/ -#ifndef basicReactingParcel_H -#define basicReactingParcel_H +#ifndef CoalParcel_H +#define CoalParcel_H -#include "ReactingParcel.H" +#include "ReactingMultiphaseParcel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +// Forward declaration of classes +template<class ThermoType> +class CoalParcel; + /*---------------------------------------------------------------------------*\ - Class basicReactingParcel Declaration + Class CoalParcel Declaration \*---------------------------------------------------------------------------*/ -class basicReactingParcel +template<class ThermoType> +class CoalParcel : - public ReactingParcel<basicReactingParcel> + public ReactingMultiphaseParcel<CoalParcel<ThermoType> > { - public: - //- Run-time type information - TypeName("basicReactingParcel"); + //- The type of thermodynamics this parcel was instantiated for + typedef ThermoType thermoType; + + // Run-time type information + TypeName("CoalParcel"); // Constructors + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + CoalParcel + ( + ReactingMultiphaseCloud<CoalParcel>& owner, + const vector& position, + const label cellI + ); + //- Construct from components - basicReactingParcel + CoalParcel ( - ReactingCloud<basicReactingParcel>& owner, - const label typeId, + ReactingMultiphaseCloud<CoalParcel>& owner, const vector& position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, + const scalarField& YMixture0, const scalarField& YGas0, const scalarField& YLiquid0, const scalarField& YSolid0, - const scalarField& YMixture0, - const constantProperties& constProps + const typename + ReactingMultiphaseParcel<CoalParcel>:: + constantProperties& constProps ); //- Construct from Istream - basicReactingParcel + CoalParcel ( - const Cloud<basicReactingParcel>& c, + const Cloud<CoalParcel>& c, Istream& is, bool readFields = true ); //- Construct and return a clone - autoPtr<basicReactingParcel> clone() const + autoPtr<CoalParcel> clone() const { - return autoPtr<basicReactingParcel> - (new basicReactingParcel(*this)); + return autoPtr<CoalParcel>(new CoalParcel(*this)); } - // Destructors - - virtual ~basicReactingParcel(); + //- Destructor + virtual ~CoalParcel(); }; -template<> -inline bool contiguous<basicReactingParcel>() -{ - return false; // Now have scalar lists/fields (mass fractions) -} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace Foam +#ifdef NoRepository + #include "CoalParcel.C" +#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/coalCombustion/CoalParcel/defineCoalParcel.C b/src/lagrangian/coalCombustion/CoalParcel/defineCoalParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..204568acb15df7d4533112aa6bd08345d022823f --- /dev/null +++ b/src/lagrangian/coalCombustion/CoalParcel/defineCoalParcel.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "createCoalParcelTypes.H" +#include "CoalParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + createCoalParcelType(CoalParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/CoalParcel/makeCoalParcelSubmodels.C b/src/lagrangian/coalCombustion/CoalParcel/makeCoalParcelSubmodels.C new file mode 100644 index 0000000000000000000000000000000000000000..1f6787228821a18226b28111b721621691bc6bb6 --- /dev/null +++ b/src/lagrangian/coalCombustion/CoalParcel/makeCoalParcelSubmodels.C @@ -0,0 +1,71 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CoalParcel.H" + +// Kinematic +#include "makeReactingParcelDispersionModels.H" +#include "makeReactingParcelDragModels.H" +#include "makeReactingMultiphaseParcelInjectionModels.H" // MP variant +#include "makeReactingParcelPatchInteractionModels.H" +#include "makeReactingParcelPostProcessingModels.H" + +// Thermodynamic +#include "makeReactingParcelHeatTransferModels.H" + +// Reacting +#include "makeReactingMultiphaseParcelCompositionModels.H" // MP variant +#include "makeReactingParcelPhaseChangeModels.H" + +// Reacting multiphase +#include "makeReactingMultiphaseParcelDevolatilisationModels.H" +#include "makeCoalParcelSurfaceReactionModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Kinematic sub-models + makeReactingDispersionModels(CoalParcel); + makeReactingDragModels(CoalParcel); + makeReactingMultiphaseInjectionModels(CoalParcel); + makeReactingPatchInteractionModels(CoalParcel); + makeReactingPostProcessingModels(CoalParcel); + + // Thermo sub-models + makeReactingHeatTransferModels(CoalParcel); + + // Reacting sub-models + makeReactingMultiphaseCompositionModels(CoalParcel); + makeReactingPhaseChangeModels(CoalParcel); + + // Reacting multiphase sub-models + makeReactingMultiphaseDevolatilisationModels(CoalParcel); + makeCoalSurfaceReactionModels(CoalParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/Make/files b/src/lagrangian/coalCombustion/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..2c7aac61ab97d66fe76fab863c8186c643d3beba --- /dev/null +++ b/src/lagrangian/coalCombustion/Make/files @@ -0,0 +1,8 @@ +/* Coal cloud */ +CoalCloud/defineCoalCloud.C + +/* Coal parcel and sub-models */ +CoalParcel/defineCoalParcel.C +CoalParcel/makeCoalParcelSubmodels.C + +LIB = $(FOAM_LIBBIN)/libcoalCombustion diff --git a/src/lagrangian/coalCombustion/Make/options b/src/lagrangian/coalCombustion/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..965409487a3c83e2651e6cd1facbc8f479f68228 --- /dev/null +++ b/src/lagrangian/coalCombustion/Make/options @@ -0,0 +1,35 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/pdfs/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solids/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidMixture/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude + +LIB_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -llagrangian \ + -llagrangianIntermediate \ + -lpdf \ + -lspecie \ + -lbasicThermophysicalModels \ + -lliquids \ + -lliquidMixture \ + -lsolids \ + -lsolidMixture \ + -lreactionThermophysicalModels \ + -lcompressibleRASModels \ + -lcompressibleLESModels diff --git a/src/lagrangian/coalCombustion/include/createCoalParcelTypes.H b/src/lagrangian/coalCombustion/include/createCoalParcelTypes.H new file mode 100644 index 0000000000000000000000000000000000000000..7d7f95da36a1d0f7a0db56b22d6ac36e53d70aa1 --- /dev/null +++ b/src/lagrangian/coalCombustion/include/createCoalParcelTypes.H @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef createCoalParcelTypes_H +#define createCoalParcelTypes_H + +#include "makeParcelIOList.H" +#include "thermoPhysicsTypes.H" +#include "CoalCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define createCoalParcelType(ParcelType) \ + \ + createCoalParcelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + createCoalParcelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + createCoalParcelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define createCoalParcelThermoType(ParcelType, ThermoType) \ + \ + typedef ParcelType<ThermoType> ParcelType##ThermoType; \ + \ + makeParcelIOList(ParcelType##ThermoType); \ + \ + defineTemplateTypeNameAndDebug(ParcelType##ThermoType, 0); \ + defineTemplateTypeNameAndDebug(Particle<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(Cloud<ParcelType##ThermoType>, 0); \ + \ + defineParcelTypeNameAndDebug(KinematicParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug \ + ( \ + KinematicParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineParcelTypeNameAndDebug(ThermoParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(ThermoParcel<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ReactingParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(ReactingParcel<ParcelType##ThermoType>, 0);\ + defineParcelTypeNameAndDebug \ + ( \ + ReactingMultiphaseParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineTemplateTypeNameAndDebug \ + ( \ + ReactingMultiphaseParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineParcelTypeNameAndDebug(CoalParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(CoalParcel<ParcelType##ThermoType>, 0); \ + \ + defineParcelTypeNameAndDebug(KinematicCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ThermoCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ReactingCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug \ + ( \ + ReactingMultiphaseCloud<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineParcelTypeNameAndDebug(CoalCloud<ParcelType##ThermoType>, 0); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/include/makeCoalParcelSurfaceReactionModels.H b/src/lagrangian/coalCombustion/include/makeCoalParcelSurfaceReactionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..0a8e17481aa2b0ff4599ef411157dd734ee89ba2 --- /dev/null +++ b/src/lagrangian/coalCombustion/include/makeCoalParcelSurfaceReactionModels.H @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeCoalParcelSurfaceReactionModels_H +#define makeCoalParcelSurfaceReactionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ReactingMultiphaseCloud.H" + +#include "NoSurfaceReaction.H" +#include "COxidationDiffusionLimitedRate.H" +#include "COxidationKineticDiffusionLimitedRate.H" +#include "COxidationMurphyShaddix.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeCoalSurfaceReactionModels(ParcelType) \ + \ + makeCoalSurfaceReactionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeCoalSurfaceReactionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeCoalSurfaceReactionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeCoalSurfaceReactionModelThermoType(ParcelType, ThermoType) \ + \ + makeSurfaceReactionModel \ + ( \ + ReactingMultiphaseCloud<ParcelType<ThermoType> > \ + ); \ + \ + makeSurfaceReactionModelThermoType \ + ( \ + NoSurfaceReaction, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeSurfaceReactionModelThermoType \ + ( \ + COxidationDiffusionLimitedRate, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeSurfaceReactionModelThermoType \ + ( \ + COxidationKineticDiffusionLimitedRate, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeSurfaceReactionModelThermoType \ + ( \ + COxidationMurphyShaddix, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C new file mode 100644 index 0000000000000000000000000000000000000000..2e252fbf596518b276d552225c0fc55353f48cc1 --- /dev/null +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.C @@ -0,0 +1,150 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "COxidationDiffusionLimitedRate.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::COxidationDiffusionLimitedRate<CloudType>::COxidationDiffusionLimitedRate +( + const dictionary& dict, + CloudType& owner +) +: + SurfaceReactionModel<CloudType>(dict, owner, typeName), + Sb_(dimensionedScalar(this->coeffDict().lookup("Sb")).value()), + D_(dimensionedScalar(this->coeffDict().lookup("D")).value()), + CsLocalId_(-1), + O2GlobalId_(owner.composition().globalCarrierId("O2")), + CO2GlobalId_(owner.composition().globalCarrierId("CO2")), + WC_(0.0), + WO2_(0.0), + HcCO2_(0.0) +{ + // Determine Cs ids + label idSolid = owner.composition().idSolid(); + CsLocalId_ = owner.composition().localId(idSolid, "C"); + + // Set local copies of thermo properties + WO2_ = owner.mcCarrierThermo().speciesData()[O2GlobalId_].W(); + scalar WCO2 = owner.mcCarrierThermo().speciesData()[CO2GlobalId_].W(); + WC_ = WCO2 - WO2_; + HcCO2_ = owner.mcCarrierThermo().speciesData()[CO2GlobalId_].Hc(); + + if (Sb_ < 0) + { + FatalErrorIn + ( + "COxidationDiffusionLimitedRate<CloudType>" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Stoichiometry of reaction, Sb, must be greater than zero" << nl + << exit(FatalError); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::COxidationDiffusionLimitedRate<CloudType>:: +~COxidationDiffusionLimitedRate() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::COxidationDiffusionLimitedRate<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::COxidationDiffusionLimitedRate<CloudType>::calculate +( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar Tc, + const scalar pc, + const scalar rhoc, + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier +) const +{ + // Fraction of remaining combustible material + const label idSolid = CloudType::parcelType::SLD; + const scalar fComb = YMixture[idSolid]*YSolid[CsLocalId_]; + + // Surface combustion active combustible fraction is consumed + if (fComb < SMALL) + { + return 0.0; + } + + // Local mass fraction of O2 in the carrier phase + const scalar YO2 = this->owner().mcCarrierThermo().Y(O2GlobalId_)[cellI]; + + // Change in C mass [kg] + scalar dmC = + 4.0*mathematicalConstant::pi*d*D_*YO2*Tc*rhoc/(Sb_*(T + Tc))*dt; + + // Limit mass transfer by availability of C + dmC = min(mass*fComb, dmC); + + // Change in O2 mass [kg] + const scalar dmO2 = dmC/WC_*Sb_*WO2_; + + // Mass of newly created CO2 [kg] + const scalar dmCO2 = dmC + dmO2; + + // Update local particle C mass + dMassSolid[CsLocalId_] += dmC; + + // Update carrier O2 and CO2 mass + dMassSRCarrier[O2GlobalId_] -= dmO2; + dMassSRCarrier[CO2GlobalId_] += dmCO2; + + // Heat of reaction [J] + return -HcCO2_*dmCO2; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.H b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.H new file mode 100644 index 0000000000000000000000000000000000000000..9ab6a5c0f940450b350f8100b6217c387ecc5afe --- /dev/null +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationDiffusionLimitedRate/COxidationDiffusionLimitedRate.H @@ -0,0 +1,157 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + COxidationDiffusionLimitedRate + +Description + Diffusion limited rate surface reaction model for coal parcels. Limited to: + + C(s) + Sb*O2 -> CO2 + + where Sb is the stoichiometry of the reaction + +\*---------------------------------------------------------------------------*/ + +#ifndef COxidationDiffusionLimitedRate_H +#define COxidationDiffusionLimitedRate_H + +#include "SurfaceReactionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Forward class declarations +template<class CloudType> +class COxidationDiffusionLimitedRate; + +namespace Foam +{ +/*---------------------------------------------------------------------------*\ + Class COxidationDiffusionLimitedRate Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class COxidationDiffusionLimitedRate +: + public SurfaceReactionModel<CloudType> +{ + // Private data + + // Model constants + + //- Stoichiometry of reaction + const scalar Sb_; + + //- Diffusion coefficient of oxidants [m2/s] + const scalar D_; + + + // Addressing + + //- Cs positions in global/local lists + label CsLocalId_; + + //- O2 position in global list + label O2GlobalId_; + + //- CO2 positions in global list + label CO2GlobalId_; + + + // Local copies of thermo properties + + //- Molecular weight of C [kg/kmol] + scalar WC_; + + //- Molecular weight of O2 [kg/kmol] + scalar WO2_; + + //- Chemical enthalpy of CO2 [J/kg] + scalar HcCO2_; + + +public: + + //- Runtime type information + TypeName("COxidationDiffusionLimitedRate"); + + + // Constructors + + //- Construct from dictionary + COxidationDiffusionLimitedRate + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~COxidationDiffusionLimitedRate(); + + + // Member Functions + + //- Flag to indicate whether model activates surface reaction model + virtual bool active() const; + + //- Update surface reactions + virtual scalar calculate + ( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar Tc, + const scalar pc, + const scalar rhoc, + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "COxidationDiffusionLimitedRate.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C new file mode 100644 index 0000000000000000000000000000000000000000..682bac3ec67c9bd4eb4634daa0e7315ea9d24140 --- /dev/null +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C @@ -0,0 +1,166 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "COxidationKineticDiffusionLimitedRate.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::COxidationKineticDiffusionLimitedRate<CloudType>:: +COxidationKineticDiffusionLimitedRate +( + const dictionary& dict, + CloudType& owner +) +: + SurfaceReactionModel<CloudType> + ( + dict, + owner, + typeName + ), + Sb_(dimensionedScalar(this->coeffDict().lookup("Sb")).value()), + C1_(dimensionedScalar(this->coeffDict().lookup("C1")).value()), + C2_(dimensionedScalar(this->coeffDict().lookup("C2")).value()), + E_(dimensionedScalar(this->coeffDict().lookup("E")).value()), + CsLocalId_(-1), + O2GlobalId_(owner.composition().globalCarrierId("O2")), + CO2GlobalId_(owner.composition().globalCarrierId("CO2")), + WC_(0.0), + WO2_(0.0), + HcCO2_(0.0) +{ + // Determine Cs ids + label idSolid = owner.composition().idSolid(); + CsLocalId_ = owner.composition().localId(idSolid, "C"); + + // Set local copies of thermo properties + WO2_ = owner.mcCarrierThermo().speciesData()[O2GlobalId_].W(); + scalar WCO2 = owner.mcCarrierThermo().speciesData()[CO2GlobalId_].W(); + WC_ = WCO2 - WO2_; + HcCO2_ = owner.mcCarrierThermo().speciesData()[CO2GlobalId_].Hc(); + + if (Sb_ < 0) + { + FatalErrorIn + ( + "COxidationKineticDiffusionLimitedRate" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Stoichiometry of reaction, Sb, must be greater than zero" << nl + << exit(FatalError); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::COxidationKineticDiffusionLimitedRate<CloudType>:: +~COxidationKineticDiffusionLimitedRate() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::COxidationKineticDiffusionLimitedRate<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::COxidationKineticDiffusionLimitedRate<CloudType>::calculate +( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar Tc, + const scalar pc, + const scalar rhoc, + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier +) const +{ + // Fraction of remaining combustible material + const label idSolid = CloudType::parcelType::SLD; + const scalar fComb = YMixture[idSolid]*YSolid[CsLocalId_]; + + // Surface combustion active combustible fraction is consumed + if (fComb < SMALL) + { + return 0.0; + } + + // Local mass fraction of O2 in the carrier phase + const scalar YO2 = this->owner().mcCarrierThermo().Y(O2GlobalId_)[cellI]; + + // Diffusion rate coefficient + const scalar D0 = C1_/d*pow(0.5*(T + Tc), 0.75); + + // Kinetic rate + const scalar Rk = C2_*exp(-E_/(specie::RR*Tc)); + + // Particle surface area + const scalar Ap = mathematicalConstant::pi*sqr(d); + + // Change in C mass [kg] + scalar dmC = Ap*rhoc*specie::RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk); + + // Limit mass transfer by availability of C + dmC = min(mass*fComb, dmC); + + // Change in O2 mass [kg] + const scalar dmO2 = dmC/WC_*Sb_*WO2_; + + // Mass of newly created CO2 [kg] + const scalar dmCO2 = dmC + dmO2; + + // Update local particle C mass + dMassSolid[CsLocalId_] += dmC; + + // Update carrier O2 and CO2 mass + dMassSRCarrier[O2GlobalId_] -= dmO2; + dMassSRCarrier[CO2GlobalId_] += dmCO2; + + // Heat of reaction [J] + return -HcCO2_*dmCO2; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.H b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.H new file mode 100644 index 0000000000000000000000000000000000000000..6500b24c4ffd82f89501bbaf350e433ceb79ac1f --- /dev/null +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.H @@ -0,0 +1,165 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + COxidationKineticDiffusionLimitedRate + +Description + Kinetic/diffusion limited rate surface reaction model for coal parcels. + Limited to: + + C(s) + Sb*O2 -> CO2 + + where Sb is the stoichiometry of the reaction + +\*---------------------------------------------------------------------------*/ + +#ifndef COxidationKineticDiffusionLimitedRate_H +#define COxidationKineticDiffusionLimitedRate_H + +#include "SurfaceReactionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward class declarations +template<class CloudType> +class COxidationKineticDiffusionLimitedRate; + +/*---------------------------------------------------------------------------*\ + Class COxidationKineticDiffusionLimitedRate Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class COxidationKineticDiffusionLimitedRate +: + public SurfaceReactionModel<CloudType> +{ + // Private data + + // Model constants + + //- Stoichiometry of reaction + const scalar Sb_; + + //- Mass diffusion limited rate constant, C1 + const scalar C1_; + + //- Kinetics limited rate pre-exponential constant, C2 + const scalar C2_; + + //- Kinetics limited rate activation energy + const scalar E_; + + + // Addressing + + //- Cs positions in global/local lists + label CsLocalId_; + + //- O2 position in global list + label O2GlobalId_; + + //- CO2 positions in global list + label CO2GlobalId_; + + + // Local copies of thermo properties + + //- Molecular weight of C [kg/kmol] + scalar WC_; + + //- Molecular weight of O2 [kg/kmol] + scalar WO2_; + + //- Chemical enthalpy of CO2 [J/kg] + scalar HcCO2_; + + +public: + + //- Runtime type information + TypeName("COxidationKineticDiffusionLimitedRate"); + + + // Constructors + + //- Construct from dictionary + COxidationKineticDiffusionLimitedRate + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~COxidationKineticDiffusionLimitedRate(); + + + // Member Functions + + //- Flag to indicate whether model activates surface reaction model + virtual bool active() const; + + //- Update surface reactions + virtual scalar calculate + ( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar Tc, + const scalar pc, + const scalar rhoc, + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "COxidationKineticDiffusionLimitedRate.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.C new file mode 100644 index 0000000000000000000000000000000000000000..e2a1c68700d84c7f2ad2470881d5ee946ee9d127 --- /dev/null +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.C @@ -0,0 +1,223 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "COxidationMurphyShaddix.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::COxidationMurphyShaddix<CloudType>::maxIters_ = 1000; + +template<class CloudType> +Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::tolerance_ = 1e-06; + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::COxidationMurphyShaddix<CloudType>::COxidationMurphyShaddix +( + const dictionary& dict, + CloudType& owner +) +: + SurfaceReactionModel<CloudType> + ( + dict, + owner, + typeName + ), + D0_(dimensionedScalar(this->coeffDict().lookup("D0")).value()), + rho0_(dimensionedScalar(this->coeffDict().lookup("rho0")).value()), + T0_(dimensionedScalar(this->coeffDict().lookup("T0")).value()), + Dn_(dimensionedScalar(this->coeffDict().lookup("Dn")).value()), + A_(dimensionedScalar(this->coeffDict().lookup("A")).value()), + E_(dimensionedScalar(this->coeffDict().lookup("E")).value()), + n_(dimensionedScalar(this->coeffDict().lookup("n")).value()), + WVol_(dimensionedScalar(this->coeffDict().lookup("WVol")).value()), + CsLocalId_(-1), + O2GlobalId_(owner.composition().globalCarrierId("O2")), + CO2GlobalId_(owner.composition().globalCarrierId("CO2")), + WC_(0.0), + WO2_(0.0) +{ + // Determine Cs ids + label idSolid = owner.composition().idSolid(); + CsLocalId_ = owner.composition().localId(idSolid, "C"); + + // Set local copies of thermo properties + WO2_ = owner.mcCarrierThermo().speciesData()[O2GlobalId_].W(); + scalar WCO2 = owner.mcCarrierThermo().speciesData()[CO2GlobalId_].W(); + WC_ = WCO2 - WO2_; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::COxidationMurphyShaddix<CloudType>::~COxidationMurphyShaddix() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::COxidationMurphyShaddix<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate +( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar Tc, + const scalar pc, + const scalar rhoc, + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier +) const +{ + // Fraction of remaining combustible material + const label idSolid = CloudType::parcelType::SLD; + const scalar fComb = YMixture[idSolid]*YSolid[CsLocalId_]; + + // Surface combustion until combustible fraction is consumed + if (fComb < SMALL) + { + return 0.0; + } + + // Cell carrier phase O2 species density [kg/m^3] + const scalar rhoO2 = + rhoc*this->owner().mcCarrierThermo().Y(O2GlobalId_)[cellI]; + + if (rhoO2 < SMALL) + { + return 0.0; + } + + // Particle surface area [m^2] + const scalar Ap = mathematicalConstant::pi*sqr(d); + + // Calculate diffision constant at continuous phase temperature + // and density [m^2/s] + const scalar D = D0_*(rho0_/rhoc)*pow(Tc/T0_, Dn_); + + // Far field partial pressure O2 [Pa] + const scalar ppO2 = rhoO2/WO2_*specie::RR*Tc; + + // Molar emission rate of volatiles per unit surface area + const scalar qVol = sum(dMassVolatile)/(WVol_*Ap); + + // Total molar concentration of the carrier phase [kmol/m^3] + const scalar C = pc/(specie::RR*Tc); + + if (debug) + { + Pout<< "mass = " << mass << nl + << "fComb = " << fComb << nl + << "Ap = " << Ap << nl + << "dt = " << dt << nl + << "C = " << C << nl + << endl; + } + + // Molar reaction rate per unit surface area [kmol/(m^2.s)] + scalar qCsOld = 0; + scalar qCs = 1; + + const scalar qCsLim = mass*fComb/(WC_*Ap*dt); + + if (debug) + { + Pout << "qCsLim = " << qCsLim << endl; + } + + label iter = 0; + while ((mag(qCs - qCsOld)/qCs > tolerance_) && (iter <= maxIters_)) + { + qCsOld = qCs; + const scalar PO2Surface = ppO2*exp(-(qCs + qVol)*d/(2*C*D)); + qCs = A_*exp(-E_/(specie::RR*T))*pow(PO2Surface, n_); + qCs = (100.0*qCs + iter*qCsOld)/(100.0 + iter); + qCs = min(qCs, qCsLim); + + if (debug) + { + Pout<< "iter = " << iter + << ", qCsOld = " << qCsOld + << ", qCs = " << qCs + << nl << endl; + } + + iter++; + } + + if (iter > maxIters_) + { + WarningIn + ( + "scalar Foam::COxidationMurphyShaddix<CloudType>::calculate(...)" + ) << "iter limit reached (" << maxIters_ << ")" << nl << endl; + } + + // Calculate the number of molar units reacted + scalar dOmega = qCs*Ap*dt; + + // Add to carrier phase mass transfer + dMassSRCarrier[O2GlobalId_] += -dOmega*WO2_; + dMassSRCarrier[CO2GlobalId_] += dOmega*(WC_ + WO2_); + + // Add to particle mass transfer + dMassSolid[CsLocalId_] += dOmega*WC_; + + const scalar HC = + this->owner().composition().solids().properties()[CsLocalId_].Hf() + + this->owner().composition().solids().properties()[CsLocalId_].cp()*T; + const scalar HCO2 = + this->owner().mcCarrierThermo().speciesData()[CO2GlobalId_].H(T); + const scalar HO2 = + this->owner().mcCarrierThermo().speciesData()[O2GlobalId_].H(T); + + // Heat of reaction + return dOmega*(WC_*HC + WO2_*HO2 - (WC_ + WO2_)*HCO2); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.H b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.H new file mode 100644 index 0000000000000000000000000000000000000000..7864fc63372bc1b34489e9bdedc49b6d402dd54a --- /dev/null +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.H @@ -0,0 +1,178 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + COxidationMurphyShaddix + +Description + Limited to C(s) + O2 -> CO2 + +\*---------------------------------------------------------------------------*/ + +#ifndef COxidationMurphyShaddix_H +#define COxidationMurphyShaddix_H + +#include "SurfaceReactionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward class declarations +template<class CloudType> +class COxidationMurphyShaddix; + +/*---------------------------------------------------------------------------*\ + Class COxidationMurphyShaddix Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class COxidationMurphyShaddix +: + public SurfaceReactionModel<CloudType> +{ + // Private data + + // Model constants + + //- Reference diffusion constant + const scalar D0_; + + //- Reference density for reference diffusion constant + const scalar rho0_; + + //- Reference temperature for reference diffusion constant + const scalar T0_; + + //- Exponent for diffusion equation + const scalar Dn_; + + //- Kinetic rate coefficient + const scalar A_; + + //- Kinetic rate activation energy + const scalar E_; + + //- Reaction order + const scalar n_; + + //- Effective molecular weight of gaseous volatiles + const scalar WVol_; + + + // Static constants + + //- Maximum number of iterations + static label maxIters_; + + //- Tolerance used in inner iterations + static scalar tolerance_; + + + // Addressing + + //- Cs positions in global/local lists + label CsLocalId_; + + //- O2 position in global list + label O2GlobalId_; + + //- CO2 positions in global list + label CO2GlobalId_; + + + // Local copies of thermo properties + + //- Molecular weight of C [kg/kmol] + scalar WC_; + + //- Molecular weight of O2 [kg/kmol] + scalar WO2_; + + +public: + + //- Runtime type information + TypeName("COxidationMurphyShaddix"); + + + // Constructors + + //- Construct from dictionary + COxidationMurphyShaddix + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~COxidationMurphyShaddix(); + + + // Member Functions + + //- Flag to indicate whether model activates surface reaction model + virtual bool active() const; + + //- Update surface reactions + virtual scalar calculate + ( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar Tc, + const scalar pc, + const scalar rhoc, + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "COxidationMurphyShaddix.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/dieselSpray/Make/options b/src/lagrangian/dieselSpray/Make/options index d0817503ce4ed16a0798dbe5c0654e91f6df3420..454c4f15bfae582e59a09888022a83a0261b2475 100644 --- a/src/lagrangian/dieselSpray/Make/options +++ b/src/lagrangian/dieselSpray/Make/options @@ -11,7 +11,7 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/pdfs/lnInclude LIB_LIBS = \ diff --git a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C index 7f7b7a6119d6846393c77009dd7946afa2f97f29..2d9fa9bf7c0bae992d97bb7d131d43c9bd712f54 100644 --- a/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C +++ b/src/lagrangian/dieselSpray/injector/swirlInjector/swirlInjector.C @@ -30,24 +30,22 @@ License #include "mathematicalConstants.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + namespace Foam { - -defineTypeNameAndDebug(swirlInjector, 0); - -addToRunTimeSelectionTable -( - injectorType, - swirlInjector, - dictionary -); + defineTypeNameAndDebug(swirlInjector, 0); + + addToRunTimeSelectionTable + ( + injectorType, + swirlInjector, + dictionary + ); } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components Foam::swirlInjector::swirlInjector ( const Foam::Time& t, @@ -66,40 +64,56 @@ Foam::swirlInjector::swirlInjector X_(propsDict_.lookup("X")), massFlowRateProfile_(propsDict_.lookup("massFlowRateProfile")), injectionPressureProfile_(propsDict_.lookup("injectionPressureProfile")), - velocityProfile_(injectionPressureProfile_), - CdProfile_(injectionPressureProfile_), - TProfile_(injectionPressureProfile_), + velocityProfile_(massFlowRateProfile_), + CdProfile_(massFlowRateProfile_), + TProfile_(massFlowRateProfile_), averageParcelMass_(mass_/nParcels_), pressureIndependentVelocity_(false) { // convert CA to real time forAll(massFlowRateProfile_, i) { - massFlowRateProfile_[i][0] = t.userTimeToTime(massFlowRateProfile_[i][0]); + massFlowRateProfile_[i][0] = + t.userTimeToTime(massFlowRateProfile_[i][0]); } forAll(injectionPressureProfile_, i) { - injectionPressureProfile_[i][0] = t.userTimeToTime(injectionPressureProfile_[i][0]); + injectionPressureProfile_[i][0] = + t.userTimeToTime(injectionPressureProfile_[i][0]); } // check if time entries match if (mag(massFlowRateProfile_[0][0]-injectionPressureProfile_[0][0]) > SMALL) { - FatalError << "swirlInjector::swirlInjector(const time& t, const dictionary dict) " << endl - << " start-times do not match for injectionPressureProfile and massFlowRateProfile." + FatalErrorIn + ( + "swirlInjector::swirlInjector(const time& t, const dictionary dict)" + ) << "Start-times do not match for " + "injectionPressureProfile and massFlowRateProfile." << abort(FatalError); } // check if time entries match - if (mag(massFlowRateProfile_[massFlowRateProfile_.size()-1][0]-injectionPressureProfile_[injectionPressureProfile_.size()-1][0]) > SMALL) + if + ( + mag + ( + massFlowRateProfile_[massFlowRateProfile_.size() - 1][0] + - injectionPressureProfile_[injectionPressureProfile_.size() - 1][0] + ) > SMALL + ) { - FatalError << "swirlInjector::swirlInjector(const time& t, const dictionary dict) " << endl - << " end-times do not match for injectionPressureProfile and massFlowRateProfile." + FatalErrorIn + ( + "swirlInjector::swirlInjector(const time& t, const dictionary dict)" + ) << "End-times do not match for " + "injectionPressureProfile and massFlowRateProfile." << abort(FatalError); } scalar integratedMFR = integrateTable(massFlowRateProfile_); - scalar integratedPressure = integrateTable(injectionPressureProfile_)/(teoi()-tsoi()); + scalar integratedPressure = + integrateTable(injectionPressureProfile_)/(teoi()-tsoi()); forAll(massFlowRateProfile_, i) { @@ -118,12 +132,13 @@ Foam::swirlInjector::swirlInjector forAll(injectionPressureProfile_, i) { // correct the pressureProfile to match the injection pressure - injectionPressureProfile_[i][1] *= injectionPressure_/integratedPressure; + injectionPressureProfile_[i][1] *= + injectionPressure_/integratedPressure; } // Normalize the direction vector direction_ /= mag(direction_); - + setTangentialVectors(); // check molar fractions @@ -135,17 +150,19 @@ Foam::swirlInjector::swirlInjector if (mag(Xsum - 1.0) > SMALL) { - Info << "Warning!!!\n swirlInjector::swirlInjector(const time& t, Istream& is)" - << "X does not add up to 1.0, correcting molar fractions." - << endl; + WarningIn + ( + "swirlInjector::swirlInjector(const time& t, const dictionary dict)" + ) << "X does not add up to 1.0, correcting molar fractions." << endl; + forAll(X_, i) { X_[i] /= Xsum; } } - } + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::swirlInjector::~swirlInjector() @@ -170,10 +187,8 @@ void Foam::swirlInjector::setTangentialVectors() tangentialInjectionVector1_ = tangent/magV; tangentialInjectionVector2_ = direction_ ^ tangentialInjectionVector1_; - } - Foam::label Foam::swirlInjector::nParcelsToInject ( const scalar time0, @@ -183,7 +198,7 @@ Foam::label Foam::swirlInjector::nParcelsToInject scalar mInj = mass_*(fractionOfInjection(time1)-fractionOfInjection(time0)); label nParcels = label(mInj/averageParcelMass_ + 0.49); - + return nParcels; } @@ -223,7 +238,7 @@ Foam::vector Foam::swirlInjector::position scalar iAngle = 2.0*mathematicalConstant::pi*rndGen.scalar01(); return - ( + ( position_ + iRadius * ( @@ -231,7 +246,7 @@ Foam::vector Foam::swirlInjector::position + tangentialInjectionVector2_*sin(iAngle) ) ); - + } return position_; @@ -266,7 +281,7 @@ Foam::scalar Foam::swirlInjector::mass { scalar mInj = mass_*(fractionOfInjection(time1)-fractionOfInjection(time0)); - // correct mass if calculation is 2D + // correct mass if calculation is 2D if (twoD) { mInj *= 0.5*angleOfWedge/mathematicalConstant::pi; @@ -280,7 +295,8 @@ Foam::scalar Foam::swirlInjector::mass() const return mass_; } -Foam::List<Foam::swirlInjector::pair> Foam::swirlInjector::massFlowRateProfile() const +Foam::List<Foam::swirlInjector::pair> +Foam::swirlInjector::massFlowRateProfile() const { return massFlowRateProfile_; } @@ -290,7 +306,8 @@ Foam::scalar Foam::swirlInjector::massFlowRate(const scalar time) const return getTableValue(massFlowRateProfile_, time); } -Foam::List<Foam::swirlInjector::pair> Foam::swirlInjector::injectionPressureProfile() const +Foam::List<Foam::swirlInjector::pair> +Foam::swirlInjector::injectionPressureProfile() const { return injectionPressureProfile_; } @@ -300,7 +317,8 @@ Foam::scalar Foam::swirlInjector::injectionPressure(const scalar time) const return getTableValue(injectionPressureProfile_, time); } -Foam::List<Foam::swirlInjector::pair> Foam::swirlInjector::velocityProfile() const +Foam::List<Foam::swirlInjector::pair> +Foam::swirlInjector::velocityProfile() const { return velocityProfile_; } @@ -309,7 +327,7 @@ Foam::scalar Foam::swirlInjector::velocity(const scalar time) const { return getTableValue(velocityProfile_, time); } - + Foam::List<Foam::swirlInjector::pair> Foam::swirlInjector::CdProfile() const { return CdProfile_; @@ -350,7 +368,6 @@ Foam::scalar Foam::swirlInjector::fractionOfInjection(const scalar time) const return integrateTable(massFlowRateProfile_, time)/mass_; } - Foam::scalar Foam::swirlInjector::injectedMass ( const scalar t @@ -372,7 +389,11 @@ void Foam::swirlInjector::correctProfiles forAll(velocityProfile_, i) { - scalar Pinj = getTableValue(injectionPressureProfile_, massFlowRateProfile_[i][0]); + scalar Pinj = getTableValue + ( + injectionPressureProfile_, + massFlowRateProfile_[i][0] + ); scalar mfr = massFlowRateProfile_[i][1]/(rho*A); scalar v = sqrt(2.0*(Pinj - referencePressure)/rho); velocityProfile_[i][1] = v; @@ -390,4 +411,5 @@ Foam::vector Foam::swirlInjector::tan2(const label n) const return tangentialInjectionVector2_; } + // ************************************************************************* // diff --git a/src/lagrangian/dieselSpray/parcel/parcel.C b/src/lagrangian/dieselSpray/parcel/parcel.C index 1af26992010a1e8d1cf4ab5a780eacddde5237a3..0dd861683bbf95e89686d661f4c719ab665c0703 100644 --- a/src/lagrangian/dieselSpray/parcel/parcel.C +++ b/src/lagrangian/dieselSpray/parcel/parcel.C @@ -34,15 +34,14 @@ License #include "wallPolyPatch.H" #include "wedgePolyPatch.H" #include "processorPolyPatch.H" -#include "combustionMixture.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + namespace Foam { -defineParticleTypeNameAndDebug(parcel, 0); -defineTemplateTypeNameAndDebug(Cloud<parcel>, 0); + defineParticleTypeNameAndDebug(parcel, 0); + defineTemplateTypeNameAndDebug(Cloud<parcel>, 0); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -696,6 +695,4 @@ void Foam::parcel::transformProperties(const vector&) {} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/dieselSpray/parcel/parcelIO.C b/src/lagrangian/dieselSpray/parcel/parcelIO.C index d84f2bb195c27b41588df1a99a4a7c27a72a431a..4ae7bbc90ad6befee259df34c77ff20ef41ee403 100644 --- a/src/lagrangian/dieselSpray/parcel/parcelIO.C +++ b/src/lagrangian/dieselSpray/parcel/parcelIO.C @@ -36,7 +36,7 @@ Foam::parcel::parcel bool readFields ) : - Particle<parcel>(cloud, is), + Particle<parcel>(cloud, is, readFields), liquidComponents_ ( diff --git a/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C b/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C index 058ae4252e91ccdb091ed40eddb1dc665adeb3f6..131e9f885f9877a9ba771d4650ffec322aaed6e5 100644 --- a/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C +++ b/src/lagrangian/dieselSpray/parcel/setRelaxationTimes.C @@ -30,7 +30,7 @@ License #include "dragModel.H" #include "evaporationModel.H" #include "heatTransferModel.H" -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -93,7 +93,7 @@ void parcel::setRelaxationTimes for(label i=0; i<Nf; i++) { label j = sDB.liquidToGasIndex()[i]; - scalar Y = sDB.composition().Y()[j][celli]; + scalar Y = sDB.composition().Y()[j][celli]; scalar Wi = sDB.gasProperties()[j].W(); Yf[i] = Y; Xf[i] = Y*W/Wi; @@ -139,14 +139,14 @@ void parcel::setRelaxationTimes scalar Prandtl = Pr(cpMixture, muf, kMixture); // calculate the characteritic times - + if(liquidCore_> 0.5) { // no drag for parcels in the liquid core.. tauMomentum = GREAT; } else - { + { tauMomentum = sDB.drag().relaxationTime ( Urel(Up), @@ -218,10 +218,10 @@ void parcel::setRelaxationTimes { scalar Nusselt = sDB.heatTransfer().Nu(Reynolds, Prandtl); - + // calculating the boiling temperature of the liquid at ambient pressure scalar tBoilingSurface = Td; - + label Niter = 0; scalar deltaT = 10.0; scalar dp0 = fuels.properties()[i].pv(pressure, tBoilingSurface) - pressure; @@ -255,16 +255,16 @@ void parcel::setRelaxationTimes } dp0 = dp; } - + scalar vapourSurfaceEnthalpy = 0.0; scalar vapourFarEnthalpy = 0.0; - + for(label k = 0; k < sDB.gasProperties().size(); k++) { vapourSurfaceEnthalpy += sDB.composition().Y()[k][celli]*sDB.gasProperties()[k].H(tBoilingSurface); vapourFarEnthalpy += sDB.composition().Y()[k][celli]*sDB.gasProperties()[k].H(temperature); } - + scalar kLiquid = fuels.properties()[i].K(pressure, 0.5*(tBoilingSurface+T())); tauBoiling[i] = sDB.evaporation().boilingTime diff --git a/src/lagrangian/dieselSpray/spray/spray.C b/src/lagrangian/dieselSpray/spray/spray.C index 1f4b1a242fc28027105b480f34d914f88886b12f..07dbcdbe7ef3665a01201daf4eb7cf31bb0bb405 100644 --- a/src/lagrangian/dieselSpray/spray/spray.C +++ b/src/lagrangian/dieselSpray/spray/spray.C @@ -36,7 +36,7 @@ License #include "injectorModel.H" #include "wallModel.H" -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" #include "symmetryPolyPatch.H" #include "wedgePolyPatch.H" @@ -56,8 +56,8 @@ Foam::spray::spray const volScalarField& rho, const volScalarField& p, const volScalarField& T, - const combustionMixture& composition, - const PtrList<specieProperties>& gasProperties, + const basicMultiComponentMixture& composition, + const PtrList<gasThermoPhysics>& gasProperties, const dictionary&, const dictionary& environmentalProperties ) @@ -264,7 +264,7 @@ Foam::spray::spray "spray::spray(const volVectorField& U, " "const volScalarField& rho, const volScalarField& p, " "const volScalarField& T, const combustionMixture& composition," - "const PtrList<specieProperties>& gaseousFuelProperties, " + "const PtrList<gasThermoPhsyics>& gaseousFuelProperties, " "const dictionary& thermophysicalProperties, " "const dictionary& environmentalProperties)" ) << "spray::(...) only one wedgePolyPatch found. " diff --git a/src/lagrangian/dieselSpray/spray/spray.H b/src/lagrangian/dieselSpray/spray/spray.H index be9c49e67a437cf3abb729aa3d174a8c1b39e47f..044423fc752ecbfa5b353c1f687b1be392419312 100644 --- a/src/lagrangian/dieselSpray/spray/spray.H +++ b/src/lagrangian/dieselSpray/spray/spray.H @@ -38,10 +38,10 @@ Description #include "IOPtrList.H" #include "interpolation.H" #include "liquid.H" -#include "sprayThermoTypes.H" #include "autoPtr.H" #include "liquidMixture.H" #include "Random.H" +#include "thermoPhysicsTypes.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,7 +58,7 @@ class injectorModel; class heatTransferModel; class wallModel; -class combustionMixture; +class basicMultiComponentMixture; /*---------------------------------------------------------------------------*\ Class spray Declaration @@ -127,8 +127,8 @@ class spray // Composition properties - const PtrList<specieProperties>& gasProperties_; - const combustionMixture& composition_; + const PtrList<gasThermoPhysics>& gasProperties_; + const basicMultiComponentMixture& composition_; List<label> liquidToGasIndex_; List<label> gasToLiquidIndex_; @@ -192,8 +192,8 @@ public: const volScalarField& rho, const volScalarField& p, const volScalarField& T, - const combustionMixture& composition, - const PtrList<specieProperties>& gasProperties, + const basicMultiComponentMixture& composition, + const PtrList<gasThermoPhysics>& gasProperties, const dictionary& thermophysicalProperties, const dictionary& environmentalProperties ); @@ -257,8 +257,8 @@ public: inline const vector& g() const; inline const liquidMixture& fuels() const; - inline const PtrList<specieProperties>& gasProperties() const; - inline const combustionMixture& composition() const; + inline const PtrList<gasThermoPhysics>& gasProperties() const; + inline const basicMultiComponentMixture& composition() const; inline const List<label>& liquidToGasIndex() const; inline const List<label>& gasToLiquidIndex() const; @@ -345,7 +345,7 @@ public: // I/O //- Write fields - void writeFields() const; + virtual void writeFields() const; }; diff --git a/src/lagrangian/dieselSpray/spray/sprayI.H b/src/lagrangian/dieselSpray/spray/sprayI.H index 1e38a81668d0d73739cdf1226de4526c756daab4..86c063ca6f7dc5bdae3823837b0ff472918efb10 100644 --- a/src/lagrangian/dieselSpray/spray/sprayI.H +++ b/src/lagrangian/dieselSpray/spray/sprayI.H @@ -36,71 +36,85 @@ inline const Time& spray::runTime() const return runTime_; } + inline const fvMesh& spray::mesh() const { return mesh_; } + inline const volVectorField& spray::U() const { return U_; } + inline const volScalarField& spray::rho() const { return rho_; } + inline const volScalarField& spray::p() const { return p_; } + inline const volScalarField& spray::T() const { return T_; } + inline PtrList<injector>& spray::injectors() { return injectors_; } + inline const PtrList<injector>& spray::injectors() const { return injectors_; } + inline const atomizationModel& spray::atomization() const { return atomization_; } + inline const breakupModel& spray::breakup() const { return breakupModel_; } + inline const collisionModel& spray::collisions() const { return collisionModel_; } + inline const dispersionModel& spray::dispersion() const { return dispersionModel_; } + inline const dragModel& spray::drag() const { return drag_; } + inline const evaporationModel& spray::evaporation() const { return evaporation_; } + inline const heatTransferModel& spray::heatTransfer() const { return heatTransfer_; @@ -112,11 +126,13 @@ inline const injectorModel& spray::injection() const return injectorModel_; } + inline const wallModel& spray::wall() const { return wall_; } + inline tmp<volVectorField> spray::momentumSource() const { tmp<volVectorField> tsource @@ -146,6 +162,7 @@ inline tmp<volVectorField> spray::momentumSource() const return tsource; } + inline tmp<volScalarField> spray::evaporationSource(const label si) const { tmp<volScalarField> tsource @@ -179,6 +196,7 @@ inline tmp<volScalarField> spray::evaporationSource(const label si) const return tsource; } + inline tmp<volScalarField> spray::heatTransferSource() const { tmp<volScalarField> tsource @@ -209,6 +227,7 @@ inline Random& spray::rndGen() return rndGen_; } + inline label spray::subCycles() const { return subCycles_; @@ -226,81 +245,97 @@ inline const liquidMixture& spray::fuels() const return fuels_; } -inline const PtrList<specieProperties>& spray::gasProperties() const + +inline const PtrList<gasThermoPhysics>& spray::gasProperties() const { return gasProperties_; } -inline const combustionMixture& spray::composition() const + +inline const basicMultiComponentMixture& spray::composition() const { return composition_; } + inline const List<label>& spray::liquidToGasIndex() const { return liquidToGasIndex_; } + inline const List<label>& spray::gasToLiquidIndex() const { return gasToLiquidIndex_; } + inline const List<bool>& spray::isLiquidFuel() const { return isLiquidFuel_; } + inline const bool& spray::twoD() const { return twoD_; } + inline const vector& spray::axisOfSymmetry() const { return axisOfSymmetry_; } + inline const vector& spray::axisOfWedge() const { return axisOfWedge_; } + inline const vector& spray::axisOfWedgeNormal() const { return axisOfWedgeNormal_; } + inline const scalar& spray::angleOfWedge() const { return angleOfWedge_; } + inline const interpolation<vector>& spray::UInterpolator() const { return UInterpolator_; } + inline const interpolation<scalar>& spray::rhoInterpolator() const { return rhoInterpolator_; } + inline const interpolation<scalar>& spray::pInterpolator() const { return pInterpolator_; } + inline const interpolation<scalar>& spray::TInterpolator() const { return TInterpolator_; } + inline vectorField& spray::sms() { return sms_; } + inline const vectorField& spray::sms() const { return sms_; @@ -312,6 +347,7 @@ inline scalarField& spray::shs() return shs_; } + inline const scalarField& spray::shs() const { return shs_; @@ -323,16 +359,19 @@ inline PtrList<scalarField>& spray::srhos() return srhos_; } + inline const PtrList<scalarField>& spray::srhos() const { return srhos_; } + inline const scalar& spray::ambientPressure() const { return ambientPressure_; } + inline const scalar& spray::ambientTemperature() const { return ambientTemperature_; diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C index ce7cded04b869b4678527d6e6e108b340eebbfb2..742f1fe1b347be3af257e33e66af7d2b273b7f31 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C +++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/LISA/LISA.C @@ -28,7 +28,7 @@ License #include "LISA.H" #include "addToRunTimeSelectionTable.H" -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" #include "RosinRammler.H" @@ -84,7 +84,7 @@ void LISA::atomizeParcel ) const { - + const PtrList<volScalarField>& Y = spray_.composition().Y(); label Ns = Y.size(); @@ -98,7 +98,7 @@ void LISA::atomizeParcel { Winv += Y[i][cellI]/spray_.gasProperties()[i].W(); } - + scalar R = specie::RR*Winv; // ideal gas law to evaluate density @@ -113,31 +113,31 @@ void LISA::atomizeParcel scalar WeberNumber = p.We(vel, rhoAverage, sigma); scalar tau = 0.0; - scalar dL = 0.0; + scalar dL = 0.0; scalar k = 0.0; scalar muFuel = fuels.mu(pressure, p.T(), p.X()); scalar rhoFuel = fuels.rho(1.0e+5, p.T(), p.X()); scalar nuFuel = muFuel/rhoFuel; vector uDir = p.U()/mag(p.U()); - + scalar uGas = mag(vel & uDir); vector Ug = uGas*uDir; -/* +/* TL It might be the relative velocity between Liquid and Gas, but I use the - absolute velocity of the parcel as suggested by the authors + absolute velocity of the parcel as suggested by the authors */ - + // scalar U = mag(p.Urel(vel)); scalar U = mag(p.U()); - + p.ct() += deltaT; scalar Q = rhoAverage/rhoFuel; - const injectorType& it = + const injectorType& it = spray_.injectors()[label(p.injector())].properties(); if (it.nHoles() > 1) @@ -150,38 +150,38 @@ void LISA::atomizeParcel scalar pWalk = mag(p.position() - itPosition); // Updating liquid sheet tickness... that is the droplet diameter - + const vector direction = it.direction(0, spray_.runTime().value()); - + scalar h = (p.position() - itPosition) & direction; scalar d = sqrt(sqr(pWalk)-sqr(h)); - + scalar time = pWalk/mag(p.U()); - + scalar elapsedTime = spray_.runTime().value(); - + scalar massFlow = it.massFlowRate(max(0.0,elapsedTime-time)); - - scalar hSheet = massFlow/(mathematicalConstant::pi*d*rhoFuel*mag(p.U())); - + + scalar hSheet = massFlow/(mathematicalConstant::pi*d*rhoFuel*mag(p.U())); + p.d() = min(hSheet,p.d()); if(WeberNumber > 27.0/16.0) { - + scalar kPos = 0.0; scalar kNeg = Q*pow(U, 2.0)*rhoFuel/sigma; - + scalar derivativePos = sqrt ( Q*pow(U,2.0) - ); - - scalar derivativeNeg = + ); + + scalar derivativeNeg = ( - 8.0*pow(nuFuel, 2.0)*pow(kNeg, 3.0) - + Q*pow(U, 2.0)*kNeg + 8.0*pow(nuFuel, 2.0)*pow(kNeg, 3.0) + + Q*pow(U, 2.0)*kNeg - 3.0*sigma/2.0/rhoFuel*pow(kNeg, 2.0) ) / @@ -189,23 +189,23 @@ void LISA::atomizeParcel ( 4.0*pow(nuFuel, 2.0)*pow(kNeg, 4.0) + Q*pow(U, 2.0)*pow(kNeg, 2.0) - - sigma*pow(kNeg, 3.0)/rhoFuel + - sigma*pow(kNeg, 3.0)/rhoFuel ) - 4.0*nuFuel*kNeg; - scalar kOld = 0.0; + scalar kOld = 0.0; + - for(label i=0; i<40; i++) { k = kPos - (derivativePos/((derivativeNeg-derivativePos)/(kNeg-kPos))); - - scalar derivativek = + + scalar derivativek = ( - 8.0*pow(nuFuel, 2.0)*pow(k, 3.0) - + Q*pow(U, 2.0)*k + 8.0*pow(nuFuel, 2.0)*pow(k, 3.0) + + Q*pow(U, 2.0)*k - 3.0*sigma/2.0/rhoFuel*pow(k, 2.0) ) / @@ -213,10 +213,10 @@ void LISA::atomizeParcel ( 4.0*pow(nuFuel, 2.0)*pow(k, 4.0) + Q*pow(U, 2.0)*pow(k, 2.0) - - sigma*pow(k, 3.0)/rhoFuel + - sigma*pow(k, 3.0)/rhoFuel ) - - 4.0*nuFuel*k; + 4.0*nuFuel*k; if(derivativek > 0) { @@ -228,17 +228,17 @@ void LISA::atomizeParcel derivativeNeg = derivativek; kNeg = k; } - + if(mag(k-kOld)/k < 1e-4) { break; } - + kOld = k; - + } - - scalar omegaS = + + scalar omegaS = - 2.0 * nuFuel * pow(k, 2.0) + sqrt ( @@ -246,22 +246,22 @@ void LISA::atomizeParcel + Q*pow(U, 2.0)*pow(k, 2.0) - sigma*pow(k, 3.0)/rhoFuel ); - - tau = cTau_/omegaS; - + + tau = cTau_/omegaS; + dL = sqrt(8.0*p.d()/k); } else { - - k = + + k = rhoAverage*pow(U, 2.0) / 2.0*sigma; - + scalar J = pWalk*p.d()/2.0; - + tau = pow(3.0*cTau_,2.0/3.0)*cbrt(J*sigma/(sqr(Q)*pow(U,4.0)*rhoFuel)); dL = sqrt(4.0*p.d()/k); @@ -269,78 +269,78 @@ void LISA::atomizeParcel - scalar kL = + scalar kL = 1.0 / ( - dL * + dL * pow(0.5 + 1.5 * muFuel/pow((rhoFuel*sigma*dL), 0.5), 0.5) ); - scalar dD = cbrt(3.0*mathematicalConstant::pi*pow(dL, 2.0)/kL); - + scalar dD = cbrt(3.0*mathematicalConstant::pi*pow(dL, 2.0)/kL); + scalar lisaExp = 0.27; scalar ambientPressure = 1.0e+5; - + scalar pRatio = spray_.ambientPressure()/ambientPressure; - + dD = dD*pow(pRatio,lisaExp); // modifications to take account of the flash boiling on primary breakUp scalar pExp = 0.135; - + scalar chi = 0.0; - - label Nf = fuels.components().size(); + + label Nf = fuels.components().size(); scalar Td = p.T(); - + for(label i = 0; i < Nf ; i++) { - + if(fuels.properties()[i].pv(spray_.ambientPressure(), Td) >= 0.999*spray_.ambientPressure()) { // The fuel is boiling..... -// Calculation of the boiling temperature - +// Calculation of the boiling temperature + scalar tBoilingSurface = Td; - + label Niter = 200; - + for(label k=0; k< Niter ; k++) { scalar pBoil = fuels.properties()[i].pv(pressure, tBoilingSurface); - + if(pBoil > pressure) { - tBoilingSurface = tBoilingSurface - (Td-temperature)/Niter; + tBoilingSurface = tBoilingSurface - (Td-temperature)/Niter; } else { break; } } - + scalar hl = fuels.properties()[i].hl(spray_.ambientPressure(), tBoilingSurface); scalar iTp = fuels.properties()[i].h(spray_.ambientPressure(), Td) - spray_.ambientPressure()/fuels.properties()[i].rho(spray_.ambientPressure(), Td); scalar iTb = fuels.properties()[i].h(spray_.ambientPressure(), tBoilingSurface) - spray_.ambientPressure()/fuels.properties()[i].rho(spray_.ambientPressure(), tBoilingSurface); - + chi += p.X()[i]*(iTp-iTb)/hl; - + } - } - + } + // bounding chi - + chi = max(chi, 0.0); chi = min(chi, 1.0); - + // modifing dD to take account of flash boiling - + dD = dD*(1.0 - chi*pow(pRatio, -pExp)); - + scalar lBU = Cl_ * mag(p.U())*tau; if(pWalk > lBU) @@ -349,7 +349,7 @@ void LISA::atomizeParcel p.liquidCore() = 0.0; // calculate the new diameter with a Rosin Rammler distribution - + scalar minValue = min(p.d(),dD/10.0); scalar maxValue = dD; @@ -357,30 +357,30 @@ void LISA::atomizeParcel if(maxValue - minValue < SMALL) { minValue = p.d()/10.0; - } - + } + scalar range = maxValue - minValue; - + scalar y = 0; scalar x = 0; bool success = false; - + while(!success) { - + x = minValue + range*rndGen_.scalar01(); y = rndGen_.scalar01(); scalar p = 0.0; - + scalar nExp = 1; - + scalar xx = pow(x/dD, nExp); p = xx*exp(-xx); - if (y<p) + if (y<p) { success = true; } @@ -388,13 +388,13 @@ void LISA::atomizeParcel } // New droplet diameter - + p.d() = x; p.ct() = 0.0; - - } - - + + } + + } diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C index db1372ca5892b0faecc54c84ff67cfb7e41c5dc2..c6fd3e3056ac912b893ac4e2b46d5b265e69005e 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C +++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/blobsSheetAtomization/blobsSheetAtomization.C @@ -28,7 +28,7 @@ License #include "blobsSheetAtomization.H" #include "addToRunTimeSelectionTable.H" -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" #include "RosinRammler.H" diff --git a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/noAtomization/noAtomization.C b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/noAtomization/noAtomization.C index 0e590604d90de4e7577559f14b2b9945ead69125..65300cb6f20f16fb11d94ff2c30c21f819ea676e 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/noAtomization/noAtomization.C +++ b/src/lagrangian/dieselSpray/spraySubModels/atomizationModel/noAtomization/noAtomization.C @@ -28,7 +28,7 @@ License #include "noAtomization.H" #include "addToRunTimeSelectionTable.H" -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/reitzDiwakar/reitzDiwakar.C b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/reitzDiwakar/reitzDiwakar.C index 9a77c1c7bae400ce7cfa97018dd54e2cde5b5a7a..bfe3c4045e1b11417b19f23940f3f7c928efdbdd 100644 --- a/src/lagrangian/dieselSpray/spraySubModels/breakupModel/reitzDiwakar/reitzDiwakar.C +++ b/src/lagrangian/dieselSpray/spraySubModels/breakupModel/reitzDiwakar/reitzDiwakar.C @@ -28,7 +28,7 @@ License #include "reitzDiwakar.H" #include "addToRunTimeSelectionTable.H" -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C2 b/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C2 deleted file mode 100755 index 7a209cc8e3e58d33ada2384e483b52e7826beeae..0000000000000000000000000000000000000000 --- a/src/lagrangian/dieselSpray/spraySubModels/wallModel/reflectParcel/reflectParcel.C2 +++ /dev/null @@ -1,211 +0,0 @@ -// The FOAM Project // File: reflectParcel.C -/* -------------------------------------------------------------------------------- - ========= | Class Implementation - \\ / | - \\ / | Name: reflectParcel - \\ / | Family: wallModel - \\/ | - F ield | FOAM version: 2.3 - O peration | - A and | Copyright (C) 1991-2009 OpenCFD Ltd. - M anipulation | All Rights Reserved. -------------------------------------------------------------------------------- -DESCRIPTION - -AUTHOR - Henry G Weller. - -------------------------------------------------------------------------------- -*/ - -#include "reflectParcel.H" -#include "addToRunTimeSelectionTable.H" -#include "wallPolyPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(reflectParcel, 0); - -addToRunTimeSelectionTable -( - wallModel, - reflectParcel, - dictionary -); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct from components -reflectParcel::reflectParcel -( - const dictionary& dict, - const fvMesh& mesh, - spray& sm -) -: - wallModel(dict, mesh, sm), - coeffsDict_(dict.subDict(typeName + "Coeffs")), - elasticity_(readScalar(coeffsDict_.lookup("elasticity"))) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -reflectParcel::~reflectParcel() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -// Return 'keepParcel' -bool reflectParcel::wallTreatment -( - parcel& p -) const -{ - label patchi = p.patch(); - label facei = p.patchFace(patchi); - - const polyMesh& mesh = spray_.mesh(); - - if (typeid(mesh_.boundaryMesh()[patchi]) == typeid(wallPolyPatch)) - { - // wallNormal defined to point outwards of domain - vector Sf = mesh_.Sf().boundaryField()[patchi][facei]; - Sf /= mag(Sf); - - // adjust velocity when wall is moving - if (!mesh.moving()) - { - scalar Un = p.U() & Sf; - - if (Un > 0) - { - p.U() -= (1.0 + elasticity_)*Un*Sf; - } - - } - else - { - label facep = p.face(); - - scalar dt = spray_.runTime().deltaT().value(); - scalar fraction = p.t0()/dt; - const vectorField& oldPoints = mesh.oldPoints(); - const vector& Cf1 = mesh.faceCentres()[facep]; - - vector Cf0 = mesh.faces()[facep].centre(oldPoints); - vector Cf = Cf0 + fraction*(Cf1 - Cf0); - vector Sf0 = mesh.faces()[facep].normal(oldPoints); - Sf0 /= mag(Sf0); - - scalar magSfDiff = mag(Sf - Sf0); - - if (magSfDiff > SMALL) - { - bool pureRotation = false; - - if (pureRotation) - { - // rotation - - // find center of rotation - vector omega = Sf0 ^ Sf; - scalar magOmega = mag(omega); - omega /= magOmega+SMALL; - vector n0 = omega ^ Sf0; - scalar lam = ((Cf1 - Cf0) & Sf)/(n0 & Sf); - vector r0 = Cf0 + lam*n0; - - scalar phiVel = ::asin(magOmega)/dt; - - vector pos = p.position() - r0; - vector v = phiVel*(omega ^ pos); - - vector Sfp = Sf0 + fraction*(Sf - Sf0); - //vector Sfp = Sf; - - vector Ur = p.U() - v; - scalar Urn = Ur & Sfp; - /* - scalar dd = (p.position() - r0) & Sfp; - Info << "Urn = " << Urn - << ", dd = " << dd - << ", pos = " << p.position() - << ", Sfp = " << Sfp - << ", omega = " << omega - << ", r0 = " << r0 - << endl; - */ - if (Urn > 0.0) - { - p.U() -= (1.0 + elasticity_)*Urn*Sfp; - } - } - else - { - vector Sfp = Sf0 + fraction*(Sf - Sf0); - //vector Sfp = Sf; - vector omega = Sf0 ^ Sf; - scalar magOmega = mag(omega); - omega /= magOmega+SMALL; - - scalar phiVel = ::asin(magOmega)/dt; - - scalar dist = (p.position() - Cf) & Sfp; - vector pos = p.position() - dist*Sfp; - vector vrot = phiVel*(omega ^ (pos - Cf)); - vector vtrans = (Cf1 - Cf0)/dt; - vector v = vtrans + vrot; - - scalar Un = ((p.U() - v) & Sfp); - - if (Un > 0.0) - { - p.U() -= (1.0 + elasticity_)*Un*Sfp; - } - } - } - else - { - // translation - - vector v = (Cf1 - Cf0)/dt; - vector Ur = p.U() - v; - scalar Urn = Ur & Sf; - - if (Urn > 0.0) - { - Ur -= (1.0 + elasticity_)*Urn*Sf; - p.U() = Ur + v; - } - - - } - } - - } - else - { - FatalError - << "bool reflectParcel::wallTreatment(parcel& parcel) const " - << " parcel has hit a boundary " - << mesh_.boundary()[patchi].type() - << " which not yet has been implemented." - << abort(FatalError); - } - return true; -} - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C index 53177e9afebcc5a263917230543768ee48c5ebe1..23aa3dc47823a780110e71326cdab70b9cb066db 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,9 +34,6 @@ License template<class ParcelType> Foam::scalar Foam::DsmcCloud<ParcelType>::kb = 1.380650277e-23; -template<class ParcelType> -Foam::scalar Foam::DsmcCloud<ParcelType>::Tref = 273; - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -302,7 +299,7 @@ void Foam::DsmcCloud<ParcelType>::collisions() // Temporary storage for subCells List<DynamicList<label> > subCells(8); - scalar deltaT = mesh_.time().deltaT().value(); + scalar deltaT = cachedDeltaT(); label collisionCandidates = 0; @@ -527,20 +524,20 @@ void Foam::DsmcCloud<ParcelType>::addNewParcel template<class ParcelType> Foam::DsmcCloud<ParcelType>::DsmcCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& T, const volVectorField& U ) : - Cloud<ParcelType>(T.mesh(), cloudType, false), + Cloud<ParcelType>(T.mesh(), cloudName, false), DsmcBaseCloud(), - cloudType_(cloudType), + cloudName_(cloudName), mesh_(T.mesh()), particleProperties_ ( IOobject ( - cloudType + "Properties", + cloudName + "Properties", mesh_.time().constant(), mesh_, IOobject::MUST_READ, @@ -639,19 +636,19 @@ Foam::DsmcCloud<ParcelType>::DsmcCloud template<class ParcelType> Foam::DsmcCloud<ParcelType>::DsmcCloud ( - const word& cloudType, + const word& cloudName, const fvMesh& mesh ) : - Cloud<ParcelType>(mesh, cloudType, false), + Cloud<ParcelType>(mesh, cloudName, false), DsmcBaseCloud(), - cloudType_(cloudType), + cloudName_(cloudName), mesh_(mesh), particleProperties_ ( IOobject ( - cloudType + "Properties", + cloudName + "Properties", mesh_.time().constant(), mesh_, IOobject::MUST_READ, @@ -781,6 +778,9 @@ Foam::DsmcCloud<ParcelType>::~DsmcCloud() template<class ParcelType> void Foam::DsmcCloud<ParcelType>::evolve() { + // cache the value of deltaT for this timestep + storeDeltaT(); + typename ParcelType::trackData td(*this); // Reset the surface data collection fields diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H index 20bed1ee7b14429c66fcc90b2dcb52023ff73241..76b1dd7e79046022dd7869178c84dbc612211abf 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -76,7 +76,7 @@ class DsmcCloud //- Cloud type - used to set the name of the parcel properties // dictionary by appending "Properties" - const word cloudType_; + const word cloudName_; //- References to the mesh and time databases const fvMesh& mesh_; @@ -116,6 +116,10 @@ class DsmcCloud //- Random number generator Random rndGen_; + //- In-cloud cache of deltaT, lookup in submodels and parcel is + // expensive + scalar cachedDeltaT_; + // References to the macroscopic fields @@ -172,16 +176,13 @@ public: //- Boltzmann constant static scalar kb; - //- Reference temperature for all models - static scalar Tref; - // Constructors //- Construct given name and mesh, will read Parcels from file DsmcCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& T, const volVectorField& U ); @@ -189,7 +190,7 @@ public: //- Construct given name and mesh. Used to initialise. DsmcCloud ( - const word& cloudType, + const word& cloudName, const fvMesh& mesh ); @@ -205,7 +206,7 @@ public: // References to the mesh and databases //- Return the cloud type - inline const word& cloudType() const; + inline const word& cloudName() const; //- Return refernce to the mesh inline const fvMesh& mesh() const; @@ -246,6 +247,12 @@ public: //- Return refernce to the random object inline Random& rndGen(); + //- Store (cache) the current value of deltaT + inline void storeDeltaT(); + + //- Return the cached value of deltaT + inline scalar cachedDeltaT() const; + // References to the surface data collection fields diff --git a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H index d39de4954faa1a062ab15da0d878e736d542b42e..3529702fdd6b5591a6c588a0890b0a417dbcae2d 100644 --- a/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H +++ b/src/lagrangian/dsmc/clouds/Templates/DsmcCloud/DsmcCloudI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,9 +27,9 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ParcelType> -inline const Foam::word& Foam::DsmcCloud<ParcelType>::cloudType() const +inline const Foam::word& Foam::DsmcCloud<ParcelType>::cloudName() const { - return cloudType_; + return cloudName_; } @@ -120,6 +120,20 @@ inline Foam::Random& Foam::DsmcCloud<ParcelType>::rndGen() } +template<class ParcelType> +inline void Foam::DsmcCloud<ParcelType>::storeDeltaT() +{ + cachedDeltaT_ = mesh().time().deltaT().value(); +} + + +template<class ParcelType> +inline Foam::scalar Foam::DsmcCloud<ParcelType>::cachedDeltaT() const +{ + return cachedDeltaT_; +} + + template<class ParcelType> inline const Foam::volScalarField& Foam::DsmcCloud<ParcelType>::q() const { diff --git a/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.C b/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.C index 1e0c395ca19f24709a1c3c43b4c0c802969dc846..55554eee39c76bb8e301c55e549651318cd09790 100644 --- a/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.C +++ b/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.H b/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.H index df49f8e148bc2dfaa47924eff697821b59dbb8cf..b409f3612edffc0534a1d8d8d07b090559b81ec4 100644 --- a/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.H +++ b/src/lagrangian/dsmc/clouds/baseClasses/DsmcBaseCloud/DsmcBaseCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C b/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C index 000ffcd53efb82dc4454009b3a28dc9c715cf124..425e47a70581d9c062d591209e8dc066ddd7b6ca 100644 --- a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C +++ b/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,12 +38,12 @@ namespace Foam Foam::dsmcCloud::dsmcCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& T, const volVectorField& U ) : - DsmcCloud<dsmcParcel>(cloudType, T, U) + DsmcCloud<dsmcParcel>(cloudName, T, U) { dsmcParcel::readFields(*this); } @@ -51,11 +51,11 @@ Foam::dsmcCloud::dsmcCloud Foam::dsmcCloud::dsmcCloud ( - const word& cloudType, + const word& cloudName, const fvMesh& mesh ) : - DsmcCloud<dsmcParcel>(cloudType, mesh) + DsmcCloud<dsmcParcel>(cloudName, mesh) {} diff --git a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H b/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H index 2f88bbaad563dbb99fef716f22256416ae98bc15..ad63aca9fcaef68e5278f5e02d7563120220a079 100644 --- a/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H +++ b/src/lagrangian/dsmc/clouds/derived/dsmcCloud/dsmcCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,7 +72,7 @@ public: //- Construct from components dsmcCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& T, const volVectorField& U ); @@ -80,7 +80,7 @@ public: //- Construct from name and mesh, used to initialise. dsmcCloud ( - const word& cloudType, + const word& cloudName, const fvMesh& mesh ); @@ -91,7 +91,7 @@ public: // Member functions //- Write fields - void writeFields() const; + virtual void writeFields() const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C index f9c135718947fab6e8637c6ca0b24221864f2630..c52d92d20fef43858cfdd7075883003e6a043b76 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,7 +44,7 @@ bool Foam::DsmcParcel<ParcelType>::move const polyMesh& mesh = td.cloud().pMesh(); const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); - const scalar deltaT = mesh.time().deltaT().value(); + const scalar deltaT = td.cloud().cachedDeltaT(); scalar tEnd = (1.0 - p.stepFraction())*deltaT; const scalar dtMax = tEnd; @@ -61,15 +61,9 @@ bool Foam::DsmcParcel<ParcelType>::move if (p.onBoundary() && td.keepParticle) { - if (p.face() > -1) + if (isType<processorPolyPatch>(pbMesh[p.patch(p.face())])) { - if - ( - isType<processorPolyPatch>(pbMesh[p.patch(p.face())]) - ) - { - td.switchProcessor = true; - } + td.switchProcessor = true; } } } @@ -78,6 +72,19 @@ bool Foam::DsmcParcel<ParcelType>::move } +template<class ParcelType> +template<class TrackData> +bool Foam::DsmcParcel<ParcelType>::hitPatch +( + const polyPatch&, + TrackData& td, + const label patchI +) +{ + return false; +} + + template<class ParcelType> template<class TrackData> void Foam::DsmcParcel<ParcelType>::hitProcessorPatch @@ -138,7 +145,7 @@ void Foam::DsmcParcel<ParcelType>::hitWallPatch const scalar fA = mag(wpp.faceAreas()[wppLocalFace]); - const scalar deltaT = td.cloud().mesh().time().deltaT().value(); + const scalar deltaT = td.cloud().cachedDeltaT(); scalar deltaQ = td.cloud().nParticle()*(preIE - postIE)/(deltaT*fA); diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H index bbc2fd1539b2fa4f5a267c2b942fe3373ebe635b..af8e350e7fd8ec756ba9957eb74c4f00b9152157 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -239,6 +239,16 @@ public: // Patch interactions + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + template<class TrackData> + bool hitPatch + ( + const polyPatch&, + TrackData& td, + const label patchI + ); + //- Overridable function to handle the particle hitting a // processorPatch template<class TrackData> diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelI.H b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelI.H index ff86419186fee680205fe2b70e0d0d2a6c705e61..239571ceaef99cb46f15003212de45ba09cbeb88 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelI.H +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelIO.C b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelIO.C index b8bc688c09640bfd462f754fc87175a46334c9ff..6677591009bd879cf23747f964a81a9e8dcb7911 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelIO.C +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcelIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/defineDsmcParcel.C b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/defineDsmcParcel.C index d3b71359da80c68830d37927e499e44441758ae7..d5691241363954d6b766123bd81548356c51d763 100644 --- a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/defineDsmcParcel.C +++ b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/defineDsmcParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.C b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.C index 8f52fcdabf62a8dbd9e7cba06295a3ea41cbbfba..e09afe9a5dcb14d5fb48f307e84a261f0798dc96 100644 --- a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.C +++ b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.H b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.H index 24d9c9ada4f4654f8911c151e78b806d782807eb..f2676c5ed9c7aa5b3abf25fcb3fc6bea09b88fab 100644 --- a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.H +++ b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/dsmcParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelBinaryCollisionModels.C b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelBinaryCollisionModels.C index de2444687b785586345a50d8eaf922bd63073b10..487cedad29b3d1d7314e1c7a5517b1089a6860bd 100644 --- a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelBinaryCollisionModels.C +++ b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelBinaryCollisionModels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelInflowBoundaryModels.C b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelInflowBoundaryModels.C index c3ee121ff02fedac07f42ff28e5169fe4a7b9f33..ef9191104500f41013e774b0f9b2caf7f4103d11 100644 --- a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelInflowBoundaryModels.C +++ b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelInflowBoundaryModels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelWallInteractionModels.C b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelWallInteractionModels.C index 874c787d6a75c4be73c84b26c0032938d7f4b802..f15d0bdadd6090c6a39f4403abb97d69015ce91e 100644 --- a/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelWallInteractionModels.C +++ b/src/lagrangian/dsmc/parcels/derived/dsmcParcel/makeDsmcParcelWallInteractionModels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.C b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.C index 0118014f9c62b6ecec5a2d93bef0b9425db04cc9..cdd10231225037881f87a90d62f79bb2fce9e350 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.C +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H index 771115c98428b86253f8d4920b9ad577067b7bd5..0dc8f02ea7d73f24da679049d2a3172e442e2c0d 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -152,26 +152,26 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeBinaryCollisionModel(CloudType) \ +#define makeBinaryCollisionModel(CloudType) \ \ defineNamedTemplateTypeNameAndDebug \ ( \ - BinaryCollisionModel<CloudType>, \ + BinaryCollisionModel<CloudType>, \ 0 \ ); \ \ defineTemplateRunTimeSelectionTable \ ( \ - BinaryCollisionModel<CloudType>, \ + BinaryCollisionModel<CloudType>, \ dictionary \ ); -#define makeBinaryCollisionModelType(SS, CloudType, ParcelType) \ +#define makeBinaryCollisionModelType(SS, CloudType, ParcelType) \ \ defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ \ - BinaryCollisionModel<CloudType<ParcelType> >:: \ + BinaryCollisionModel<CloudType<ParcelType> >:: \ adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ add##SS##CloudType##ParcelType##ConstructorToTable_; diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/NewBinaryCollisionModel.C b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/NewBinaryCollisionModel.C index 8878164cdbf1425fcf9838a369ca9b855fcb60d4..12c74f6697e7044396331aec3a95bc9326594ee4 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/NewBinaryCollisionModel.C +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/NewBinaryCollisionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.C b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.C index b6deaf1f0064cb65ed6c3e3b7d93cee12587b624..69af3a855b3f2f60a81d80b1441a4028e7ac079b 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.C +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -97,6 +97,7 @@ Foam::LarsenBorgnakkeVariableHardSphere<CloudType>::LarsenBorgnakkeVariableHardS ) : BinaryCollisionModel<CloudType>(dict, cloud, typeName), + Tref_(readScalar(this->coeffDict().lookup("Tref"))), relaxationCollisionNumber_ ( readScalar(this->coeffDict().lookup("relaxationCollisionNumber")) @@ -156,7 +157,7 @@ Foam::scalar Foam::LarsenBorgnakkeVariableHardSphere<CloudType>::sigmaTcR // calculating cross section = pi*dPQ^2, where dPQ is from Bird, eq. 4.79 scalar sigmaTPQ = mathematicalConstant::pi*dPQ*dPQ - *pow(2.0*CloudType::kb*CloudType::Tref/(mR*cR*cR), omegaPQ - 0.5) + *pow(2.0*CloudType::kb*Tref_/(mR*cR*cR), omegaPQ - 0.5) /exp(Foam::lgamma(2.5 - omegaPQ)); return sigmaTPQ*cR; diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.H b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.H index c95d70f24c1f4ad0cfa394728258594664c3f89a..0b95c9fb4e0966b64afae0fbaeeaf03db662416a 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.H +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/LarsenBorgnakkeVariableHardSphere/LarsenBorgnakkeVariableHardSphere.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -50,6 +50,9 @@ class LarsenBorgnakkeVariableHardSphere { // Private data + //- Reference temperature + const scalar Tref_; + //- Relaxation collision number const scalar relaxationCollisionNumber_; diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.C b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.C index de47f1550dc9c66018d5fc3a4e3d60da8f64c0c2..29b389a65ae197b866edb2019069e3667be96c07 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.C +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,8 @@ Foam::VariableHardSphere<CloudType>::VariableHardSphere CloudType& cloud ) : - BinaryCollisionModel<CloudType>(dict, cloud, typeName) + BinaryCollisionModel<CloudType>(dict, cloud, typeName), + Tref_(readScalar(this->coeffDict().lookup("Tref"))) {} @@ -90,7 +91,7 @@ Foam::scalar Foam::VariableHardSphere<CloudType>::sigmaTcR // calculating cross section = pi*dPQ^2, where dPQ is from Bird, eq. 4.79 scalar sigmaTPQ = mathematicalConstant::pi*dPQ*dPQ - *pow(2.0*CloudType::kb*CloudType::Tref/(mR*cR*cR), omegaPQ - 0.5) + *pow(2.0*CloudType::kb*Tref_/(mR*cR*cR), omegaPQ - 0.5) /exp(Foam::lgamma(2.5 - omegaPQ)); return sigmaTPQ*cR; diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.H b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.H index a1dbdb9a270c0e7c8dcb3021601fc88355e035c2..ee58d08d6a3295ca42b75714bb3e4e73577c081c 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.H +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/VariableHardSphere/VariableHardSphere.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,6 +47,12 @@ class VariableHardSphere : public BinaryCollisionModel<CloudType> { + // Private data + + //- Reference temperature + const scalar Tref_; + + public: //- Runtime type information diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C index 9d791a1ed3421049f77fd6d4fa6fcc4cf29be9c8..0f0e135e4c9ab1042852cd547c000c9a00c2ae3c 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -126,7 +126,7 @@ void Foam::FreeStream<CloudType>::inflow() const polyMesh& mesh(cloud.mesh()); - const scalar deltaT = mesh.time().deltaT().value(); + const scalar deltaT = cloud.cachedDeltaT(); Random& rndGen(cloud.rndGen()); @@ -162,6 +162,13 @@ void Foam::FreeStream<CloudType>::inflow() scalar mass = cloud.constProps(typeId).mass(); + if (min(boundaryT[patchI]) < SMALL) + { + FatalErrorIn ("Foam::FreeStream<CloudType>::inflow()") + << "Zero boundary temperature detected, check boundaryT condition." << nl + << nl << abort(FatalError); + } + scalarField mostProbableSpeed ( cloud.maxwellianMostProbableSpeed diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.H b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.H index 03c2fe2abb72fe657ef9905162585099c445693d..5ecf6ed33c4bc3dc24786c5c2465aa63d5e789df 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.H +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/FreeStream/FreeStream.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.C b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.C index 8e99e3f43f8191a69c57f9855d702d607dcf50d5..bcbc21d4103668c8a71ebd30c7a546703d324a28 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.C +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.H b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.H index 6b01a82f40f1233dadbf1ad27434e0659c540a84..a86f857946e56252cb70693a54db3befb7cf95b5 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.H +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/InflowBoundaryModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/NewInflowBoundaryModel.C b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/NewInflowBoundaryModel.C index 3abc5b29368d1af2c13fb65f30775d57ecfc461c..bc1005bdaf58e60923fdfdf7a95f9a79c895b279 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/NewInflowBoundaryModel.C +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/InflowBoundaryModel/NewInflowBoundaryModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.C b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.C index d04db500daa1fa762ada76543d72bb045a606da0..9711ab5a3ced1d7fa8c3f8c485748bb1c3186512 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.C +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.H b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.H index e3f46622e93c87519220169803ba5cdbd6c509ac..747d5595efeb20b619f77a49cf30e83075e9f283 100644 --- a/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.H +++ b/src/lagrangian/dsmc/submodels/InflowBoundaryModel/NoInflow/NoInflow.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.C b/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.C index c2c12ce5ca7d835941c812b6920a09ddc694355f..e7213561c0d2a2f2dacd103daeee8a74676c7aaf 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.C +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.H b/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.H index 2b71beaba006c224e5c41dea13a6a79aa6b68dcc..8978723bacd5a345a79844e8cbe0ed228f8349a2 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.H +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/MaxwellianThermal/MaxwellianThermal.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.C b/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.C index 4de5507bf00f07b9df5d646cefb4f889e029d265..1fb5ab3208404f235f264a54035c27263edac463 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.C +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.H b/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.H index d2208bd3503d29b6ca40a4805718a9f655882134..c1d6d50e33da8af9054cd01f08b39451afa846ce 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.H +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/SpecularReflection/SpecularReflection.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C b/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C index 85652f2379327af4db6aa9c9a6e8e3bcff873dfc..97197cd669ec6316ab43c8f1b10d927a68cd0025 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.C b/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.C index 060d5dd76d9c59f1a2c4e896550c0fb1ee88f1df..a0874d9913d1660333c1cfb2fffa599084e3877f 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.C +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.H b/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.H index 582bf2b1065ce26ec0113398357fed1a75d92a69..e9c7ffd33f001d555b9567a198554091745f683b 100644 --- a/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.H +++ b/src/lagrangian/dsmc/submodels/WallInteractionModel/WallInteractionModel/WallInteractionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H index 51c4aa5614cf70ccba558c2c5463f89ba4786963..aefef71c0bdf7f13809926b4f6ae595b6816372a 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H +++ b/src/lagrangian/intermediate/IntegrationScheme/Analytical/Analytical.H @@ -49,7 +49,6 @@ class Analytical : public IntegrationScheme<Type> { - public: //- Runtime type information @@ -59,16 +58,11 @@ public: // Constructors //- Construct from components - Analytical - ( - const word& phiName, - const dictionary& dict - ); + Analytical(const word& phiName, const dictionary& dict); //- Destructor - - virtual ~Analytical(); + virtual ~Analytical(); // Member Functions diff --git a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H index 1062351c4c072c312fe30b8b891f28d58ab72267..279a80d8a79f23490a5b87744f093f2e84f35b6c 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H +++ b/src/lagrangian/intermediate/IntegrationScheme/Euler/Euler.H @@ -49,7 +49,6 @@ class Euler : public IntegrationScheme<Type> { - public: //- Runtime type information @@ -59,16 +58,11 @@ public: // Constructors //- Construct from components - Euler - ( - const word& phiName, - const dictionary& dict - ); + Euler(const word& phiName, const dictionary& dict); //- Destructor - - virtual ~Euler(); + virtual ~Euler(); // Member Functions diff --git a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H index 1ecc8c593419b580bbf69b96a996b21c89bed68d..78b1dec715c074426e6363ad323c3597cee63bb8 100644 --- a/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H +++ b/src/lagrangian/intermediate/IntegrationScheme/IntegrationScheme/IntegrationScheme.H @@ -110,6 +110,7 @@ public: private: + // Private data //- Name of the Integration variable @@ -152,11 +153,7 @@ public: // Constructors //- Construct from components - IntegrationScheme - ( - const word& phiName, - const dictionary& dict - ); + IntegrationScheme(const word& phiName, const dictionary& dict); // Selectors @@ -170,8 +167,7 @@ public: //- Destructor - - virtual ~IntegrationScheme(); + virtual ~IntegrationScheme(); // Member Functions diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files index ab3933d123056df6031137fba97cb49f07253b93..791138314619b734da0035075f4bdf801ffd71a4 100644 --- a/src/lagrangian/intermediate/Make/files +++ b/src/lagrangian/intermediate/Make/files @@ -1,55 +1,79 @@ +PARCELS=parcels +BASEPARCELS=$(PARCELS)/baseClasses +DERIVEDPARCELS=$(PARCELS)/derived + +CLOUDS=clouds +BASECLOUDS=$(CLOUDS)/baseClasses +DERIVEDCLOUDS=$(CLOUDS)/derived + + /* Parcels */ -parcels/derived/basicKinematicParcel/basicKinematicParcel.C -parcels/derived/basicThermoParcel/basicThermoParcel.C -parcels/derived/basicReactingParcel/basicReactingParcel.C +$(BASEPARCELS)/reactingParcel/reactingParcel.C + /* Cloud base classes */ -clouds/baseClasses/kinematicCloud/kinematicCloud.C -clouds/baseClasses/thermoCloud/thermoCloud.C -clouds/baseClasses/reactingCloud/reactingCloud.C +$(BASECLOUDS)/kinematicCloud/kinematicCloud.C +$(BASECLOUDS)/thermoCloud/thermoCloud.C +$(BASECLOUDS)/reactingCloud/reactingCloud.C +$(BASECLOUDS)/reactingMultiphaseCloud/reactingMultiphaseCloud.C + + +/* Cloud container/injection mechanisms */ +$(DERIVEDCLOUDS)/basicKinematicCloud/basicKinematicCloud.C +$(DERIVEDCLOUDS)/basicThermoCloud/basicThermoCloud.C +$(DERIVEDCLOUDS)/BasicReactingCloud/defineBasicReactingCloud.C +$(DERIVEDCLOUDS)/BasicReactingMultiphaseCloud/defineBasicReactingMultiphaseCloud.C -/* Injection mechanisms */ -clouds/derived/basicKinematicCloud/basicKinematicCloud.C -clouds/derived/basicThermoCloud/basicThermoCloud.C -clouds/derived/basicReactingCloud/basicReactingCloud.C /* kinematic parcel sub-models */ -parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C -parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C -parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C -parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C -parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C -parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C +KINEMATICPARCEL=$(DERIVEDPARCELS)/basicKinematicParcel +$(KINEMATICPARCEL)/basicKinematicParcel.C +$(KINEMATICPARCEL)/defineBasicKinematicParcel.C +$(KINEMATICPARCEL)/makeBasicKinematicParcelSubmodels.C + /* thermo parcel sub-models */ -parcels/derived/basicThermoParcel/defineBasicThermoParcel.C -parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C -parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C -parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C -parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C -parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C +THERMOPARCEL=$(DERIVEDPARCELS)/basicThermoParcel +$(THERMOPARCEL)/basicThermoParcel.C +$(THERMOPARCEL)/defineBasicThermoParcel.C +$(THERMOPARCEL)/makeBasicThermoParcelSubmodels.C + /* reacting parcel sub-models */ -parcels/derived/basicReactingParcel/defineBasicReactingParcel.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C -parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C +REACTINGPARCEL=$(DERIVEDPARCELS)/BasicReactingParcel +$(REACTINGPARCEL)/defineBasicReactingParcel.C +$(REACTINGPARCEL)/makeBasicReactingParcelSubmodels.C + + +/* reacting multiphase parcel sub-models */ +REACTINGMPPARCEL=$(DERIVEDPARCELS)/BasicReactingMultiphaseParcel +$(REACTINGMPPARCEL)/defineBasicReactingMultiphaseParcel.C +$(REACTINGMPPARCEL)/makeBasicReactingMultiphaseParcelSubmodels.C + /* bolt-on models */ submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.C + +/* data entries */ +submodels/IO/DataEntry/makeDataEntries.C +submodels/IO/DataEntry/polynomial/polynomial.C +submodels/IO/DataEntry/polynomial/polynomialIO.C + + /* integration schemes */ IntegrationScheme/makeIntegrationSchemes.C -/* Data entries */ -submodels/IO/DataEntry/makeDataEntries.C +/* particle forces */ +particleForces/particleForces.C + + +/* phase properties */ +phaseProperties/phaseProperties/phaseProperties.C +phaseProperties/phaseProperties/phasePropertiesIO.C +phaseProperties/phasePropertiesList/phasePropertiesList.C LIB = $(FOAM_LIBBIN)/liblagrangianIntermediate diff --git a/src/lagrangian/intermediate/Make/options b/src/lagrangian/intermediate/Make/options index 4304ffde9f967b3b3faac828a98e9a891e623b8b..f3525972826a471984552d2ea2df7172861bafd1 100644 --- a/src/lagrangian/intermediate/Make/options +++ b/src/lagrangian/intermediate/Make/options @@ -1,5 +1,6 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/pdfs/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ @@ -8,7 +9,7 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solids/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solidMixture/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ @@ -17,6 +18,8 @@ EXE_INC = \ -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude LIB_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ -llagrangian \ -lpdf \ -lliquids \ @@ -25,7 +28,6 @@ LIB_LIBS = \ -lsolidMixture \ -lspecie \ -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lfiniteVolume + -lcompressibleLESModels diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 8a8723a5395610c4c3129b40538912abde99a244..e473102c1a9084fd87e0794aa55d843c80604432 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -25,67 +25,35 @@ License \*---------------------------------------------------------------------------*/ #include "KinematicCloud.H" -#include "DispersionModel.H" -#include "DragModel.H" -#include "InjectionModel.H" -#include "WallInteractionModel.H" #include "IntegrationScheme.H" #include "interpolation.H" - -// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // - -template<class ParcelType> -void Foam::KinematicCloud<ParcelType>::addNewParcel -( - const vector& position, - const label cellId, - const scalar d, - const vector& U, - const scalar nParticles, - const scalar lagrangianDt -) -{ - ParcelType* pPtr = new ParcelType - ( - *this, - parcelTypeId_, - position, - cellId, - d, - U, - nParticles, - constProps_ - ); - - scalar continuousDt = this->db().time().deltaT().value(); - pPtr->stepFraction() = (continuousDt - lagrangianDt)/continuousDt; - - addParticle(pPtr); -} - +#include "DispersionModel.H" +#include "DragModel.H" +#include "InjectionModel.H" +#include "PatchInteractionModel.H" +#include "PostProcessingModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ParcelType> Foam::KinematicCloud<ParcelType>::KinematicCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const volScalarField& mu, const dimensionedVector& g ) : - Cloud<ParcelType>(rho.mesh(), cloudType, false), + Cloud<ParcelType>(rho.mesh(), cloudName, false), kinematicCloud(), - cloudType_(cloudType), mesh_(rho.mesh()), particleProperties_ ( IOobject ( - cloudType + "Properties", + cloudName + "Properties", rho.mesh().time().constant(), rho.mesh(), IOobject::MUST_READ, @@ -95,11 +63,16 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud constProps_(particleProperties_), parcelTypeId_(readLabel(particleProperties_.lookup("parcelTypeId"))), coupled_(particleProperties_.lookup("coupled")), + cellValueSourceCorrection_ + ( + particleProperties_.lookup("cellValueSourceCorrection") + ), rndGen_(label(0)), rho_(rho), U_(U), mu_(mu), g_(g), + forces_(mesh_, particleProperties_, g_.value()), interpolationSchemes_(particleProperties_.subDict("interpolationSchemes")), dispersionModel_ ( @@ -125,14 +98,22 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud *this ) ), - wallInteractionModel_ + patchInteractionModel_ ( - WallInteractionModel<KinematicCloud<ParcelType> >::New + PatchInteractionModel<KinematicCloud<ParcelType> >::New ( particleProperties_, *this ) ), + postProcessingModel_ + ( + PostProcessingModel<KinematicCloud<ParcelType> >::New + ( + this->particleProperties_, + *this + ) + ), UIntegrator_ ( vectorIntegrationScheme::New @@ -153,21 +134,7 @@ Foam::KinematicCloud<ParcelType>::KinematicCloud false ), mesh_, - dimensionedVector("zero", dimensionSet(1, 1, -1, 0, 0), vector::zero) - ), - UCoeff_ - ( - IOobject - ( - this->name() + "UCoeff", - this->db().time().timeName(), - this->db(), - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh_, - dimensionedScalar("zero", dimensionSet(1, 0, -1, 0, 0), 0.0) + dimensionedVector("zero", dimMass*dimVelocity, vector::zero) ) {} @@ -181,17 +148,59 @@ Foam::KinematicCloud<ParcelType>::~KinematicCloud() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class ParcelType> +void Foam::KinematicCloud<ParcelType>::checkParcelProperties +( + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed +) +{ + if (!fullyDescribed) + { + parcel.rho() = constProps_.rho0(); + } + + scalar carrierDt = this->db().time().deltaT().value(); + parcel.stepFraction() = (carrierDt - lagrangianDt)/carrierDt; +} + + template<class ParcelType> void Foam::KinematicCloud<ParcelType>::resetSourceTerms() { UTrans_.field() = vector::zero; - UCoeff_.field() = 0.0; +} + + +template<class ParcelType> +void Foam::KinematicCloud<ParcelType>::preEvolve() +{ + this->dispersion().cacheFields(true); + forces_.cacheFields(true); +} + + +template<class ParcelType> +void Foam::KinematicCloud<ParcelType>::postEvolve() +{ + if (debug) + { + this->writePositions(); + } + + this->dispersion().cacheFields(false); + forces_.cacheFields(false); + + this->postProcessing().post(); } template<class ParcelType> void Foam::KinematicCloud<ParcelType>::evolve() { + preEvolve(); + autoPtr<interpolation<scalar> > rhoInterpolator = interpolation<scalar>::New ( @@ -225,26 +234,23 @@ void Foam::KinematicCloud<ParcelType>::evolve() this->injection().inject(td); - if (debug) - { - this->dumpParticlePositions(); - } - if (coupled_) { resetSourceTerms(); } Cloud<ParcelType>::move(td); + + postEvolve(); } template<class ParcelType> void Foam::KinematicCloud<ParcelType>::info() const { - Info<< "Cloud name: " << this->name() << nl + Info<< "Cloud: " << this->name() << nl << " Parcels added during this run = " - << returnReduce(this->injection().nParcelsAddedTotal(), sumOp<label>()) + << returnReduce(this->injection().parcelsAddedTotal(), sumOp<label>()) << nl << " Mass introduced during this run = " << returnReduce(this->injection().massInjected(), sumOp<scalar>()) @@ -252,29 +258,7 @@ void Foam::KinematicCloud<ParcelType>::info() const << " Current number of parcels = " << returnReduce(this->size(), sumOp<label>()) << nl << " Current mass in system = " - << returnReduce(massInSystem(), sumOp<scalar>()) << nl - << endl; -} - - -template<class ParcelType> -void Foam::KinematicCloud<ParcelType>::dumpParticlePositions() const -{ - OFstream pObj - ( - this->db().time().path()/"parcelPositions_" - + this->name() + "_" - + name(this->injection().nInjections()) + ".obj" - ); - - forAllConstIter(typename KinematicCloud<ParcelType>, *this, iter) - { - const ParcelType& p = iter(); - pObj<< "v " << p.position().x() << " " << p.position().y() << " " - << p.position().z() << nl; - } - - pObj.flush(); + << returnReduce(massInSystem(), sumOp<scalar>()) << nl; } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index d606b38c3dac1c1cea73a96f3e3a29d34cc85222..ee2b3bafe2c2329048734b33fcd99d6154316a83 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -51,7 +51,7 @@ SourceFiles #include "fvMesh.H" #include "volFields.H" #include "fvMatrices.H" -#include "fvm.H" +#include "particleForces.H" #include "IntegrationSchemesFwd.H" @@ -72,7 +72,10 @@ template<class CloudType> class InjectionModel; template<class CloudType> -class WallInteractionModel; +class PostProcessingModel; + +template<class CloudType> +class PatchInteractionModel; /*---------------------------------------------------------------------------*\ Class KinematicCloud Declaration @@ -84,14 +87,18 @@ class KinematicCloud public Cloud<ParcelType>, public kinematicCloud { + // Private Member Functions + + //- Disallow default bitwise copy construct + KinematicCloud(const KinematicCloud&); + + //- Disallow default bitwise assignment + void operator=(const KinematicCloud&); -private: - // Private data +protected: - //- Cloud type - used to set the name of the parcel properties - // dictionary by appending "Properties" - const word cloudType_; + // Protected data //- References to the mesh and time databases const fvMesh& mesh_; @@ -108,7 +115,11 @@ private: //- Flag to indicate whether parcels are coupled to the carrier phase // i.e. whether or not to generate source terms for carrier phase - Switch coupled_; + const Switch coupled_; + + //- Flag to correct cell values with latest transfer information + // during the lagrangian timestep + const Switch cellValueSourceCorrection_; //- Random number generator - used by some injection routines Random rndGen_; @@ -132,6 +143,9 @@ private: const dimensionedVector& g_; + //- Optional particle forces + particleForces forces_; + //- Interpolation schemes dictionary dictionary interpolationSchemes_; @@ -149,9 +163,13 @@ private: autoPtr<InjectionModel<KinematicCloud<ParcelType> > > injectionModel_; - //- Wall interaction model - autoPtr<WallInteractionModel<KinematicCloud<ParcelType> > > - wallInteractionModel_; + //- Patch interaction model + autoPtr<PatchInteractionModel<KinematicCloud<ParcelType> > > + patchInteractionModel_; + + //- Post-processing model + autoPtr<PostProcessingModel<KinematicCloud<ParcelType> > > + postProcessingModel_; // Reference to the particle integration schemes @@ -165,17 +183,14 @@ private: //- Momentum DimensionedField<vector, volMesh> UTrans_; - //- Coefficient for carrier phase U equation - DimensionedField<scalar, volMesh> UCoeff_; + // Cloud evolution functions - // Private Member Functions + //- Pre-evolve + void preEvolve(); - //- Disallow default bitwise copy construct - KinematicCloud(const KinematicCloud&); - - //- Disallow default bitwise assignment - void operator=(const KinematicCloud&); + //- Post-evolve + void postEvolve(); public: @@ -185,7 +200,7 @@ public: //- Construct given carrier gas fields KinematicCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const volScalarField& mu, @@ -197,15 +212,16 @@ public: virtual ~KinematicCloud(); + //- Type of parcel the cloud was instantiated for + typedef ParcelType parcelType; + + // Member Functions // Access // References to the mesh and databases - //- Return the cloud type - inline const word& cloudType() const; - //- Return the parcel type id inline label parcelTypeId() const; @@ -215,9 +231,17 @@ public: //- Return particle properties dictionary inline const IOdictionary& particleProperties() const; + //- Return the constant properties + inline const typename ParcelType::constantProperties& + constProps() const; + + //- Return coupled flag inline const Switch coupled() const; + //- Return cell value correction flag + inline const Switch cellValueSourceCorrection() const; + //- Return refernce to the random object inline Random& rndGen(); @@ -240,6 +264,10 @@ public: inline const dimensionedVector& g() const; + //- Optional particle forces + inline const particleForces& forces() const; + + // Interpolations //- Return reference to the interpolation dictionary @@ -248,27 +276,33 @@ public: // Sub-models - //- Return reference to dispersion model + //- Return const-access to the dispersion model inline const DispersionModel<KinematicCloud<ParcelType> >& dispersion() const; + //- Return reference to the dispersion model inline DispersionModel<KinematicCloud<ParcelType> >& dispersion(); - //- Return reference to drag model + //- Return const-access to the drag model inline const DragModel<KinematicCloud<ParcelType> >& drag() const; - //- Return reference to injection model + //- Return const access to the injection model inline const InjectionModel<KinematicCloud<ParcelType> >& injection() const; + //- Return reference to the injection model inline InjectionModel<KinematicCloud<ParcelType> >& injection(); - //- Return reference to wall interaction model - inline const WallInteractionModel<KinematicCloud<ParcelType> >& - wallInteraction() const; + //- Return const-access to the patch interaction model + inline const PatchInteractionModel<KinematicCloud<ParcelType> >& + patchInteraction() const; + + //- Return reference to post-processing model + inline PostProcessingModel<KinematicCloud<ParcelType> >& + postProcessing(); // Integration schemes @@ -284,14 +318,8 @@ public: //- Return reference to momentum source inline DimensionedField<vector, volMesh>& UTrans(); - //- Coefficient for carrier phase U equation - inline DimensionedField<scalar, volMesh>& UCoeff(); - //- Return tmp momentum source term - fully explicit - inline tmp<DimensionedField<vector, volMesh> > SU1() const; - - //- Return tmp momentum source term - semi-implicit - inline tmp<fvVectorMatrix> SU2(volVectorField& U) const; + inline tmp<DimensionedField<vector, volMesh> > SU() const; // Check @@ -305,9 +333,6 @@ public: //- Print cloud information void info() const; - //- Dump particle positions to .obj file - void dumpParticlePositions() const; - // Fields @@ -319,18 +344,19 @@ public: // Note: for particles belonging to this cloud only inline const tmp<volScalarField> alpha() const; + //- Return the particle effective density field + // Note: for particles belonging to this cloud only + inline const tmp<volScalarField> rhoEff() const; + // Cloud evolution functions - //- Add new parcel - void addNewParcel + //- Check parcel properties + void checkParcelProperties ( - const vector& position, - const label cellId, - const scalar d, - const vector& U, - const scalar nParticles, - const scalar lagrangianDt + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed ); //- Reset the spray source terms diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index 2b8cca12d1657de733eb7ebb1e99b50fe8a59e8c..1f48632d152a1952201bcd5479dab0f36f4421cf 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -24,14 +24,9 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template<class ParcelType> -inline const Foam::word& Foam::KinematicCloud<ParcelType>::cloudType() const -{ - return cloudType_; -} +#include "fvmSup.H" +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ParcelType> inline Foam::label Foam::KinematicCloud<ParcelType>::parcelTypeId() const @@ -55,6 +50,14 @@ Foam::KinematicCloud<ParcelType>::particleProperties() const } +template<class ParcelType> +inline const typename ParcelType::constantProperties& +Foam::KinematicCloud<ParcelType>::constProps() const +{ + return constProps_; +} + + template<class ParcelType> inline const Foam::Switch Foam::KinematicCloud<ParcelType>::coupled() const { @@ -62,6 +65,14 @@ inline const Foam::Switch Foam::KinematicCloud<ParcelType>::coupled() const } +template <class ParcelType> +inline const Foam::Switch +Foam::KinematicCloud<ParcelType>::cellValueSourceCorrection() const +{ + return cellValueSourceCorrection_; +} + + template<class ParcelType> inline const Foam::volScalarField& Foam::KinematicCloud<ParcelType>::rho() const @@ -91,6 +102,15 @@ Foam::KinematicCloud<ParcelType>::g() const return g_; } + +template<class ParcelType> +inline const Foam::particleForces& +Foam::KinematicCloud<ParcelType>::forces() const +{ + return forces_; +} + + template<class ParcelType> inline const Foam::dictionary& Foam::KinematicCloud<ParcelType>::interpolationSchemes() const @@ -131,6 +151,14 @@ Foam::KinematicCloud<ParcelType>::injection() const } +template<class ParcelType> +inline const Foam::PatchInteractionModel<Foam::KinematicCloud<ParcelType> >& +Foam::KinematicCloud<ParcelType>::patchInteraction() const +{ + return patchInteractionModel_; +} + + template<class ParcelType> inline Foam::InjectionModel<Foam::KinematicCloud<ParcelType> >& Foam::KinematicCloud<ParcelType>::injection() @@ -140,10 +168,10 @@ Foam::KinematicCloud<ParcelType>::injection() template<class ParcelType> -inline const Foam::WallInteractionModel<Foam::KinematicCloud<ParcelType> >& -Foam::KinematicCloud<ParcelType>::wallInteraction() const +inline Foam::PostProcessingModel<Foam::KinematicCloud<ParcelType> >& +Foam::KinematicCloud<ParcelType>::postProcessing() { - return wallInteractionModel_; + return postProcessingModel_(); } @@ -184,25 +212,17 @@ Foam::KinematicCloud<ParcelType>::UTrans() } -template<class ParcelType> -inline Foam::DimensionedField<Foam::scalar, Foam::volMesh>& -Foam::KinematicCloud<ParcelType>::UCoeff() -{ - return UCoeff_; -} - - template<class ParcelType> inline Foam::tmp<Foam::DimensionedField<Foam::vector, Foam::volMesh> > -Foam::KinematicCloud<ParcelType>::SU1() const +Foam::KinematicCloud<ParcelType>::SU() const { - tmp<DimensionedField<vector, volMesh> > tSU1 + tmp<DimensionedField<vector, volMesh> > tSU ( new DimensionedField<vector, volMesh> ( IOobject ( - this->name() + "SU1", + this->name() + "SU", this->db().time().timeName(), this->mesh(), IOobject::NO_READ, @@ -212,34 +232,16 @@ Foam::KinematicCloud<ParcelType>::SU1() const dimensionedVector ( "zero", - dimensionSet(1, -2, -2, 0, 0), + dimDensity*dimVelocity/dimTime, vector::zero ) ) ); - vectorField& SU1 = tSU1().field(); - SU1 = UTrans_/(mesh_.V()*this->db().time().deltaT()); - - return tSU1; -} - + vectorField& SU = tSU().field(); + SU = UTrans_/(mesh_.V()*this->db().time().deltaT()); -template<class ParcelType> -inline Foam::tmp<Foam::fvVectorMatrix> -Foam::KinematicCloud<ParcelType>::SU2(volVectorField& U) const -{ - if (debug) - { - Info<< "UTrans min/max = " - << min(UTrans_) << ", " << max(UTrans_) << endl; - Info<< "UCoeff min/max = " - << min(UCoeff_) << ", " << max(UCoeff_) << endl; - } - - return UTrans_/(mesh_.V()*this->db().time().deltaT()) - - fvm::Sp(UCoeff_/mesh_.V(), U) - + UCoeff_/mesh_.V()*U; + return tSU; } @@ -261,7 +263,7 @@ Foam::KinematicCloud<ParcelType>::theta() const false ), mesh_, - dimensionedScalar("zero", dimensionSet(0, 0, 0, 0, 0), 0.0) + dimensionedScalar("zero", dimless, 0.0) ) ); @@ -274,7 +276,7 @@ Foam::KinematicCloud<ParcelType>::theta() const theta[cellI] += p.nParticle()*p.volume(); } - theta /= mesh().cellVolumes(); + theta /= mesh().V(); return ttheta; } @@ -298,7 +300,7 @@ Foam::KinematicCloud<ParcelType>::alpha() const false ), mesh_, - dimensionedScalar("zero", dimensionSet(0, 0, 0, 0, 0), 0.0) + dimensionedScalar("zero", dimless, 0.0) ) ); @@ -311,10 +313,47 @@ Foam::KinematicCloud<ParcelType>::alpha() const alpha[cellI] += p.nParticle()*p.mass(); } - alpha /= (mesh().cellVolumes()*rho_); + alpha /= (mesh().V()*rho_); return talpha; } +template<class ParcelType> +inline const Foam::tmp<Foam::volScalarField> +Foam::KinematicCloud<ParcelType>::rhoEff() const +{ + tmp<volScalarField> trhoEff + ( + new volScalarField + ( + IOobject + ( + this->name() + "RhoEff", + this->db().time().timeName(), + this->db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + mesh_, + dimensionedScalar("zero", dimDensity, 0.0) + ) + ); + + scalarField& rhoEff = trhoEff().internalField(); + forAllConstIter(typename KinematicCloud<ParcelType>, *this, iter) + { + const ParcelType& p = iter(); + const label cellI = p.cell(); + + rhoEff[cellI] += p.nParticle()*p.mass(); + } + + rhoEff /= mesh().V(); + + return trhoEff; +} + + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C index b574435cb83ac7714386f3ae9ff0da4377b19698..1e58d2876cc52a74661e11277a2b933524e1d475 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -25,43 +25,36 @@ License \*---------------------------------------------------------------------------*/ #include "ReactingCloud.H" + #include "CompositionModel.H" -#include "MassTransferModel.H" -#include "SurfaceReactionModel.H" +#include "PhaseChangeModel.H" // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // template<class ParcelType> -void Foam::ReactingCloud<ParcelType>::addNewParcel +void Foam::ReactingCloud<ParcelType>::checkSuppliedComposition ( - const vector& position, - const label cellId, - const scalar d, - const vector& U, - const scalar nParticles, - const scalar lagrangianDt + const scalarField& YSupplied, + const scalarField& Y, + const word& YName ) { - ParcelType* pPtr = new ParcelType - ( - *this, - this->parcelTypeId(), - position, - cellId, - d, - U, - nParticles, - composition().YGas0(), - composition().YLiquid0(), - composition().YSolid0(), - composition().YMixture0(), - constProps_ - ); - - scalar continuousDt = this->db().time().deltaT().value(); - pPtr->stepFraction() = (continuousDt - lagrangianDt)/continuousDt; - - addParticle(pPtr); + if (YSupplied.size() != Y.size()) + { + FatalErrorIn + ( + "ReactingCloud<ParcelType>::checkSuppliedComposition" + "(" + "const scalarField&, " + "const scalarField&, " + "const word&" + ")" + ) << YName << " supplied, but size is not compatible with " + << "parcel composition: " << nl << " " + << YName << "(" << YSupplied.size() << ") vs required composition " + << YName << "(" << Y.size() << ")" << nl + << abort(FatalError); + } } @@ -70,44 +63,38 @@ void Foam::ReactingCloud<ParcelType>::addNewParcel template<class ParcelType> Foam::ReactingCloud<ParcelType>::ReactingCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, - hCombustionThermo& thermo, - PtrList<specieReactingProperties>& gases + basicThermo& thermo ) : - ThermoCloud<ParcelType>(cloudType, rho, U, g, thermo), + ThermoCloud<ParcelType>(cloudName, rho, U, g, thermo), reactingCloud(), constProps_(this->particleProperties()), - carrierThermo_(thermo), - gases_(gases), - compositionModel_ + mcCarrierThermo_ ( - CompositionModel<ReactingCloud<ParcelType> >::New - ( - this->particleProperties(), - *this - ) + dynamic_cast<multiComponentMixture<thermoType>&>(thermo) ), - massTransferModel_ + compositionModel_ ( - MassTransferModel<ReactingCloud<ParcelType> >::New + CompositionModel<ReactingCloud<ParcelType> >::New ( this->particleProperties(), *this ) ), - surfaceReactionModel_ + phaseChangeModel_ ( - SurfaceReactionModel<ReactingCloud<ParcelType> >::New + PhaseChangeModel<ReactingCloud<ParcelType> >::New ( this->particleProperties(), *this ) ), - rhoTrans_(thermo.composition().Y().size()) + rhoTrans_(mcCarrierThermo_.species().size()), + dMassPhaseChange_(0.0) { // Set storage for mass source fields and initialise to zero forAll(rhoTrans_, i) @@ -119,12 +106,12 @@ Foam::ReactingCloud<ParcelType>::ReactingCloud ( IOobject ( - this->name() + "rhoTrans" + Foam::name(i), - this->db().time().timeName(), - this->db(), - IOobject::NO_READ, - IOobject::NO_WRITE, - false + this->name() + "rhoTrans_" + mcCarrierThermo_.species()[i], + this->db().time().timeName(), + this->db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false ), this->mesh(), dimensionedScalar("zero", dimMass, 0.0) @@ -143,6 +130,40 @@ Foam::ReactingCloud<ParcelType>::~ReactingCloud() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::checkParcelProperties +( + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed +) +{ + ThermoCloud<ParcelType>::checkParcelProperties + ( + parcel, + lagrangianDt, + fullyDescribed + ); + + if (!fullyDescribed) + { + parcel.Y() = composition().YMixture0(); + } + else + { + checkSuppliedComposition + ( + parcel.Y(), + composition().YMixture0(), + "YMixture" + ); + } + + // derived information - store initial mass + parcel.mass0() = parcel.mass(); +} + + template<class ParcelType> void Foam::ReactingCloud<ParcelType>::resetSourceTerms() { @@ -154,44 +175,60 @@ void Foam::ReactingCloud<ParcelType>::resetSourceTerms() } +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::preEvolve() +{ + ThermoCloud<ParcelType>::preEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::postEvolve() +{ + ThermoCloud<ParcelType>::postEvolve(); +} + + template<class ParcelType> void Foam::ReactingCloud<ParcelType>::evolve() { - const volScalarField& T = carrierThermo_.T(); - const volScalarField cp = carrierThermo_.Cp(); - const volScalarField& p = carrierThermo_.p(); + preEvolve(); + + const volScalarField& T = this->carrierThermo().T(); + const volScalarField cp = this->carrierThermo().Cp(); + const volScalarField& p = this->carrierThermo().p(); - autoPtr<interpolation<scalar> > rhoInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > rhoInterp = interpolation<scalar>::New ( this->interpolationSchemes(), this->rho() ); - autoPtr<interpolation<vector> > UInterpolator = interpolation<vector>::New + autoPtr<interpolation<vector> > UInterp = interpolation<vector>::New ( this->interpolationSchemes(), this->U() ); - autoPtr<interpolation<scalar> > muInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > muInterp = interpolation<scalar>::New ( this->interpolationSchemes(), this->mu() ); - autoPtr<interpolation<scalar> > TInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > TInterp = interpolation<scalar>::New ( this->interpolationSchemes(), T ); - autoPtr<interpolation<scalar> > cpInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > cpInterp = interpolation<scalar>::New ( this->interpolationSchemes(), cp ); - autoPtr<interpolation<scalar> > pInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > pInterp = interpolation<scalar>::New ( this->interpolationSchemes(), p @@ -201,28 +238,42 @@ void Foam::ReactingCloud<ParcelType>::evolve() ( *this, constProps_, - rhoInterpolator(), - UInterpolator(), - muInterpolator(), - TInterpolator(), - cpInterpolator(), - pInterpolator(), + rhoInterp(), + UInterp(), + muInterp(), + TInterp(), + cpInterp(), + pInterp(), this->g().value() ); this->injection().inject(td); - if (debug) - { - this->dumpParticlePositions(); - } - if (this->coupled()) { resetSourceTerms(); } Cloud<ParcelType>::move(td); + + postEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::info() const +{ + ThermoCloud<ParcelType>::info(); + + Info<< " Mass transfer phase change = " + << returnReduce(dMassPhaseChange_, sumOp<scalar>()) << nl; +} + + +template<class ParcelType> +void Foam::ReactingCloud<ParcelType>::addToMassPhaseChange(const scalar dMass) +{ + dMassPhaseChange_ += dMass; } diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H index 0e3f97320a882e0c2c0f19b6ce7eb33ef3edfcca..74b75ea4162ed61c921b4a3eaf329ed0349fe3f3 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.H @@ -26,9 +26,11 @@ Class Foam::ReactingCloud Description - Templated base class for reactive cloud - - Adds to kinematic cloud - - Heat transfer + Templated base class for reacting cloud + + - Adds to thermodynamic cloud + - Variable composition (single phase) + - Phase change SourceFiles ReactingCloudI.H @@ -39,13 +41,9 @@ SourceFiles #ifndef ReactingCloud_H #define ReactingCloud_H -#include "autoPtr.H" -#include "hCombustionThermo.H" - #include "ThermoCloud.H" #include "reactingCloud.H" - -#include "ReactingCloudThermoTypes.H" +#include "multiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,13 +56,10 @@ template<class CloudType> class CompositionModel; template<class CloudType> -class MassTransferModel; - -template<class CloudType> -class SurfaceReactionModel; +class PhaseChangeModel; /*---------------------------------------------------------------------------*\ - Class ReactingCloud Declaration + Class ReactingCloud Declaration \*---------------------------------------------------------------------------*/ template<class ParcelType> @@ -73,17 +68,33 @@ class ReactingCloud public ThermoCloud<ParcelType>, public reactingCloud { +public: - // Private data + //- Type of thermodynamics the cloud was instantiated for + typedef typename ParcelType::thermoType thermoType; + + +private: + + // Private Member Functions + + //- Disallow default bitwise copy construct + ReactingCloud(const ReactingCloud&); + + //- Disallow default bitwise assignment + void operator=(const ReactingCloud&); + + +protected: + + // Protected data //- Parcel constant properties typename ParcelType::constantProperties constProps_; - //- Thermodynamics package (combustion) - hCombustionThermo& carrierThermo_; + //- Multi-component carrier phase thermo + multiComponentMixture<thermoType>& mcCarrierThermo_; - //- Gas phase properties - PtrList<specieReactingProperties>& gases_; // References to the cloud sub-models @@ -91,13 +102,10 @@ class ReactingCloud autoPtr<CompositionModel<ReactingCloud<ParcelType> > > compositionModel_; - //- Mass transfer model - autoPtr<MassTransferModel<ReactingCloud<ParcelType> > > - massTransferModel_; + //- Reacting phase change model + autoPtr<PhaseChangeModel<ReactingCloud<ParcelType> > > + phaseChangeModel_; - //- Surface reaction model - autoPtr<SurfaceReactionModel<ReactingCloud<ParcelType> > > - surfaceReactionModel_; // Sources @@ -105,52 +113,71 @@ class ReactingCloud PtrList<DimensionedField<scalar, volMesh> > rhoTrans_; - // Private Member Functions + // Check - //- Disallow default bitwise copy construct - ReactingCloud(const ReactingCloud&); + //- Total mass transferred to continuous phase via phase change + scalar dMassPhaseChange_; - //- Disallow default bitwise assignment - void operator=(const ReactingCloud&); + // Protected Member Functions -public: + // New parcel helper functions + + //- Check that size of a composition field is valid + void checkSuppliedComposition + ( + const scalarField& YSupplied, + const scalarField& Y, + const word& YName + ); + + + // Cloud evolution functions - //- Runtime type information -// TypeName("ReactingCloud"); + //- Pre-evolve + void preEvolve(); + //- Post-evolve + void postEvolve(); + + +public: // Constructors //- Construct given carrier gas fields ReactingCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, - hCombustionThermo& thermo, - PtrList<specieReactingProperties>& gases + basicThermo& thermo ); - // Destructor + //- Destructor + virtual ~ReactingCloud(); - virtual ~ReactingCloud(); + + //- Type of parcel the cloud was instantiated for + typedef ParcelType parcelType; // Member Functions // Access - //- Return const access to carrier phase thermo package - inline const hCombustionThermo& carrierThermo() const; + //- Return the constant properties + inline const typename ParcelType::constantProperties& + constProps() const; - //- Return access to carrier phase thermo package - inline hCombustionThermo& carrierThermo(); + //- Return const access to multi-component carrier phase thermo + inline const multiComponentMixture<thermoType>& + mcCarrierThermo() const; - //- Gas phase properties - inline const PtrList<specieReactingProperties>& gases() const; + //- Return access to multi-component carrier phase thermo + inline multiComponentMixture<thermoType>& mcCarrierThermo(); // Sub-models @@ -159,13 +186,9 @@ public: inline const CompositionModel<ReactingCloud<ParcelType> >& composition() const; - //- Return reference to mass transfer model - inline const MassTransferModel<ReactingCloud<ParcelType> >& - massTransfer() const; - - //- Return reference to surface reaction model - inline const SurfaceReactionModel<ReactingCloud<ParcelType> >& - surfaceReaction() const; + //- Return reference to reacting phase change model + inline const PhaseChangeModel<ReactingCloud<ParcelType> >& + phaseChange() const; // Sources @@ -180,28 +203,32 @@ public: inline PtrList<DimensionedField<scalar, volMesh> >& rhoTrans(); - //- Return tmp mass source for field i - // Fully explicit + //- Return tmp mass source for field i - fully explicit inline tmp<DimensionedField<scalar, volMesh> > - Srho1(const label i) const; + Srho(const label i) const; //- Return tmp total mass source for carrier phase - // Fully explicit - inline tmp<DimensionedField<scalar, volMesh> > - Srho1() const; + // - fully explicit + inline tmp<DimensionedField<scalar, volMesh> > Srho() const; + + + // Check + + //- Print cloud information + void info() const; + + //- Add to cumulative phase change mass transfer + void addToMassPhaseChange(const scalar dMass); // Cloud evolution functions - //- Add new parcel - void addNewParcel + //- Check parcel properties + void checkParcelProperties ( - const vector& position, - const label cellId, - const scalar d, - const vector& U, - const scalar nParticles, - const scalar lagrangianDt + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed ); //- Reset the spray source terms diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H index 016d40d5c0d1f34064ff2e01f0240f6333f77b5e..b59686482706c47710e3041ad8b4f85e13b693c4 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudI.H @@ -27,26 +27,26 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ParcelType> -inline const Foam::hCombustionThermo& -Foam::ReactingCloud<ParcelType>::carrierThermo() const +inline const typename ParcelType::constantProperties& +Foam::ReactingCloud<ParcelType>::constProps() const { - return carrierThermo_; + return constProps_; } template<class ParcelType> -inline Foam::hCombustionThermo& -Foam::ReactingCloud<ParcelType>::carrierThermo() +inline const Foam::multiComponentMixture<typename ParcelType::thermoType>& +Foam::ReactingCloud<ParcelType>::mcCarrierThermo() const { - return carrierThermo_; + return mcCarrierThermo_; } template<class ParcelType> -inline const Foam::PtrList<Foam::specieReactingProperties>& -Foam::ReactingCloud<ParcelType>::gases() const +inline Foam::multiComponentMixture<typename ParcelType::thermoType>& +Foam::ReactingCloud<ParcelType>::mcCarrierThermo() { - return gases_; + return mcCarrierThermo_; } @@ -59,18 +59,10 @@ Foam::ReactingCloud<ParcelType>::composition() const template<class ParcelType> -inline const Foam::MassTransferModel<Foam::ReactingCloud<ParcelType> >& -Foam::ReactingCloud<ParcelType>::massTransfer() const +inline const Foam::PhaseChangeModel<Foam::ReactingCloud<ParcelType> >& +Foam::ReactingCloud<ParcelType>::phaseChange() const { - return massTransferModel_; -} - - -template<class ParcelType> -inline const Foam::SurfaceReactionModel<Foam::ReactingCloud<ParcelType> >& -Foam::ReactingCloud<ParcelType>::surfaceReaction() const -{ - return surfaceReactionModel_; + return phaseChangeModel_; } @@ -92,7 +84,7 @@ Foam::ReactingCloud<ParcelType>::rhoTrans() template<class ParcelType> inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > -Foam::ReactingCloud<ParcelType>::Srho1(const label i) const +Foam::ReactingCloud<ParcelType>::Srho(const label i) const { return rhoTrans_[i]/(this->db().time().deltaT()*this->mesh().V()); } @@ -100,7 +92,7 @@ Foam::ReactingCloud<ParcelType>::Srho1(const label i) const template<class ParcelType> inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > -Foam::ReactingCloud<ParcelType>::Srho1() const +Foam::ReactingCloud<ParcelType>::Srho() const { tmp<DimensionedField<scalar, volMesh> > trhoTrans ( @@ -129,4 +121,5 @@ Foam::ReactingCloud<ParcelType>::Srho1() const return trhoTrans/(this->db().time().deltaT()*this->mesh().V()); } + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..5e7dee64bcf6f593cde895c9e3f5d34220c269c7 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C @@ -0,0 +1,248 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ReactingMultiphaseCloud.H" + +#include "DevolatilisationModel.H" +#include "SurfaceReactionModel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ParcelType> +Foam::ReactingMultiphaseCloud<ParcelType>::ReactingMultiphaseCloud +( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const dimensionedVector& g, + basicThermo& thermo +) +: + ReactingCloud<ParcelType>(cloudName, rho, U, g, thermo), + reactingMultiphaseCloud(), + constProps_(this->particleProperties()), + devolatilisationModel_ + ( + DevolatilisationModel<ReactingMultiphaseCloud<ParcelType> >::New + ( + this->particleProperties(), + *this + ) + ), + surfaceReactionModel_ + ( + SurfaceReactionModel<ReactingMultiphaseCloud<ParcelType> >::New + ( + this->particleProperties(), + *this + ) + ), + dMassDevolatilisation_(0.0) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class ParcelType> +Foam::ReactingMultiphaseCloud<ParcelType>::~ReactingMultiphaseCloud() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::checkParcelProperties +( + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed +) +{ + ReactingCloud<ParcelType>::checkParcelProperties + ( + parcel, + lagrangianDt, + fullyDescribed + ); + + label idGas = this->composition().idGas(); + label idLiquid = this->composition().idLiquid(); + label idSolid = this->composition().idSolid(); + + if (!fullyDescribed) + { + parcel.YGas() = this->composition().Y0(idGas); + parcel.YLiquid() = this->composition().Y0(idLiquid); + parcel.YSolid() = this->composition().Y0(idSolid); + } + else + { + this->checkSuppliedComposition + ( + parcel.YGas(), + this->composition().Y0(idGas), + "YGas" + ); + this->checkSuppliedComposition + ( + parcel.YLiquid(), + this->composition().Y0(idLiquid), + "YLiquid" + ); + this->checkSuppliedComposition + ( + parcel.YSolid(), + this->composition().Y0(idSolid), + "YSolid" + ); + } +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::resetSourceTerms() +{ + ReactingCloud<ParcelType>::resetSourceTerms(); +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::preEvolve() +{ + ReactingCloud<ParcelType>::preEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::postEvolve() +{ + ReactingCloud<ParcelType>::postEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::evolve() +{ + preEvolve(); + + const volScalarField& T = this->carrierThermo().T(); + const volScalarField cp = this->carrierThermo().Cp(); + const volScalarField& p = this->carrierThermo().p(); + + autoPtr<interpolation<scalar> > rhoInterp = interpolation<scalar>::New + ( + this->interpolationSchemes(), + this->rho() + ); + + autoPtr<interpolation<vector> > UInterp = interpolation<vector>::New + ( + this->interpolationSchemes(), + this->U() + ); + + autoPtr<interpolation<scalar> > muInterp = interpolation<scalar>::New + ( + this->interpolationSchemes(), + this->mu() + ); + + autoPtr<interpolation<scalar> > TInterp = interpolation<scalar>::New + ( + this->interpolationSchemes(), + T + ); + + autoPtr<interpolation<scalar> > cpInterp = interpolation<scalar>::New + ( + this->interpolationSchemes(), + cp + ); + + autoPtr<interpolation<scalar> > pInterp = interpolation<scalar>::New + ( + this->interpolationSchemes(), + p + ); + + typename ParcelType::trackData td + ( + *this, + constProps_, + rhoInterp(), + UInterp(), + muInterp(), + TInterp(), + cpInterp(), + pInterp(), + this->g().value() + ); + + this->injection().inject(td); + + if (this->coupled()) + { + resetSourceTerms(); + } + + Cloud<ParcelType>::move(td); + + postEvolve(); +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::info() const +{ + ReactingCloud<ParcelType>::info(); + Info<< " Mass transfer devolatilisation = " + << returnReduce(dMassDevolatilisation_, sumOp<scalar>()) << nl; + Info<< " Mass transfer surface reaction = " + << returnReduce(dMassSurfaceReaction_, sumOp<scalar>()) << nl; +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::addToMassDevolatilisation +( + const scalar dMass +) +{ + dMassDevolatilisation_ += dMass; +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseCloud<ParcelType>::addToMassSurfaceReaction +( + const scalar dMass +) +{ + dMassSurfaceReaction_ += dMass; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H new file mode 100644 index 0000000000000000000000000000000000000000..b073308407451d7655177fa454a2e770a5c19565 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.H @@ -0,0 +1,223 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::ReactingMultiphaseCloud + +Description + Templated base class for multiphase reacting cloud + + - Adds to reacting cloud + - multiphase composition + - devolatilisatsion + - surface reactions + +SourceFiles + ReactingMultiphaseCloudI.H + ReactingMultiphaseCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ReactingMultiphaseCloud_H +#define ReactingMultiphaseCloud_H + +#include "ReactingCloud.H" +#include "reactingMultiphaseCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes + +template<class CloudType> +class DevolatilisationModel; + +template<class CloudType> +class SurfaceReactionModel; + +/*---------------------------------------------------------------------------*\ + Class ReactingMultiphaseCloud Declaration +\*---------------------------------------------------------------------------*/ + +template<class ParcelType> +class ReactingMultiphaseCloud +: + public ReactingCloud<ParcelType>, + public reactingMultiphaseCloud +{ + // Private member functions + + //- Disallow default bitwise copy construct + ReactingMultiphaseCloud(const ReactingMultiphaseCloud&); + + //- Disallow default bitwise assignment + void operator=(const ReactingMultiphaseCloud&); + + +protected: + + // Protected data + + //- Parcel constant properties + typename ParcelType::constantProperties constProps_; + + + // References to the cloud sub-models + + //- Devolatilisation model + autoPtr + < + DevolatilisationModel<ReactingMultiphaseCloud<ParcelType> > + > + devolatilisationModel_; + + //- Surface reaction model + autoPtr + < + SurfaceReactionModel<ReactingMultiphaseCloud<ParcelType> > + > + surfaceReactionModel_; + + + // Check + + //- Total mass transferred to continuous phase via devolatilisation + scalar dMassDevolatilisation_; + + //- Total mass transferred to continuous phase via surface + // reactions + scalar dMassSurfaceReaction_; + + + // Protected member functions + + // Cloud evolution functions + + //- Pre-evolve + void preEvolve(); + + //- Post-evolve + void postEvolve(); + + +public: + + // Constructors + + //- Construct given carrier gas fields + ReactingMultiphaseCloud + ( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const dimensionedVector& g, + basicThermo& thermo + ); + + + //- Destructor + virtual ~ReactingMultiphaseCloud(); + + + //- Type of parcel the cloud was instantiated for + typedef ParcelType parcelType; + + + // Member Functions + + // Access + + //- Return the constant properties + inline const typename ParcelType::constantProperties& + constProps() const; + + + // Sub-models + + //- Return reference to devolatilisation model + inline const DevolatilisationModel + < + ReactingMultiphaseCloud<ParcelType> + >& + devolatilisation() const; + + //- Return reference to reacting surface reaction model + inline const SurfaceReactionModel + < + ReactingMultiphaseCloud<ParcelType> + >& + surfaceReaction() const; + + + // Check + + //- Print cloud information + void info() const; + + //- Add to cumulative volatilisation mass transfer + void addToMassDevolatilisation(const scalar dMass); + + //- Add to cumulative surface reaction transfer + void addToMassSurfaceReaction(const scalar dMass); + + + // Cloud evolution functions + + //- Check parcel properties + void checkParcelProperties + ( + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed + ); + + //- Reset the spray source terms + void resetSourceTerms(); + + //- Evolve the spray (inject, move) + void evolve(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "ReactingMultiphaseCloudI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "ReactingMultiphaseCloud.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H new file mode 100644 index 0000000000000000000000000000000000000000..ac0b0291501e909bcb086e6a3c835b30dee3643f --- /dev/null +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloudI.H @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class ParcelType> +inline const typename ParcelType::constantProperties& +Foam::ReactingMultiphaseCloud<ParcelType>::constProps() const +{ + return constProps_; +} + + +template<class ParcelType> +inline const Foam::DevolatilisationModel +< + Foam::ReactingMultiphaseCloud<ParcelType> +>& +Foam::ReactingMultiphaseCloud<ParcelType>::devolatilisation() const +{ + return devolatilisationModel_; +} + + +template<class ParcelType> +inline const Foam::SurfaceReactionModel +< + Foam::ReactingMultiphaseCloud<ParcelType> +>& +Foam::ReactingMultiphaseCloud<ParcelType>::surfaceReaction() const +{ + return surfaceReactionModel_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index 8a284024ff6ef97e8a25ea348066e40bd6b889ec..0585629246ec074406f04a9d4a11c6ce077deb8c 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -25,49 +25,17 @@ License \*---------------------------------------------------------------------------*/ #include "ThermoCloud.H" -#include "HeatTransferModel.H" - #include "interpolationCellPoint.H" #include "ThermoParcel.H" -// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // - -template<class ParcelType> -void Foam::ThermoCloud<ParcelType>::addNewParcel -( - const vector& position, - const label cellId, - const scalar d, - const vector& U, - const scalar nParticles, - const scalar lagrangianDt -) -{ - ParcelType* pPtr = new ParcelType - ( - *this, - this->parcelTypeId(), - position, - cellId, - d, - U, - nParticles, - constProps_ - ); - - scalar continuousDt = this->db().time().deltaT().value(); - pPtr->stepFraction() = (continuousDt - lagrangianDt)/continuousDt; - - addParticle(pPtr); -} - +#include "HeatTransferModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ParcelType> Foam::ThermoCloud<ParcelType>::ThermoCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, @@ -76,7 +44,7 @@ Foam::ThermoCloud<ParcelType>::ThermoCloud : KinematicCloud<ParcelType> ( - cloudType, + cloudName, rho, U, thermo.mu(), @@ -102,11 +70,11 @@ Foam::ThermoCloud<ParcelType>::ThermoCloud ) ), radiation_(this->particleProperties().lookup("radiation")), - hTrans_ + hsTrans_ ( IOobject ( - this->name() + "hTrans", + this->name() + "hsTrans", this->db().time().timeName(), this->db(), IOobject::NO_READ, @@ -116,11 +84,11 @@ Foam::ThermoCloud<ParcelType>::ThermoCloud this->mesh(), dimensionedScalar("zero", dimensionSet(1, 2, -2, 0, 0), 0.0) ), - hCoeff_ + hcTrans_ ( IOobject ( - this->name() + "hCoeff", + this->name() + "hcTrans", this->db().time().timeName(), this->db(), IOobject::NO_READ, @@ -128,7 +96,7 @@ Foam::ThermoCloud<ParcelType>::ThermoCloud false ), this->mesh(), - dimensionedScalar("zero", dimensionSet(1, 2, -3, -1, 0), 0.0) + dimensionedScalar("zero", dimensionSet(1, 2, -2, 0, 0), 0.0) ) {} @@ -142,46 +110,85 @@ Foam::ThermoCloud<ParcelType>::~ThermoCloud() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class ParcelType> +void Foam::ThermoCloud<ParcelType>::checkParcelProperties +( + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed +) +{ + KinematicCloud<ParcelType>::checkParcelProperties + ( + parcel, + lagrangianDt, + fullyDescribed + ); + + if (!fullyDescribed) + { + parcel.T() = constProps_.T0(); + parcel.cp() = constProps_.cp0(); + } +} + + template<class ParcelType> void Foam::ThermoCloud<ParcelType>::resetSourceTerms() { KinematicCloud<ParcelType>::resetSourceTerms(); - hTrans_.field() = 0.0; - hCoeff_.field() = 0.0; + hsTrans_.field() = 0.0; + hcTrans_.field() = 0.0; +} + + +template<class ParcelType> +void Foam::ThermoCloud<ParcelType>::preEvolve() +{ + KinematicCloud<ParcelType>::preEvolve(); +} + + +template<class ParcelType> +void Foam::ThermoCloud<ParcelType>::postEvolve() +{ + KinematicCloud<ParcelType>::postEvolve(); } template<class ParcelType> void Foam::ThermoCloud<ParcelType>::evolve() { + preEvolve(); + const volScalarField& T = carrierThermo_.T(); const volScalarField cp = carrierThermo_.Cp(); - autoPtr<interpolation<scalar> > rhoInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > rhoInterp = interpolation<scalar>::New ( this->interpolationSchemes(), this->rho() ); - autoPtr<interpolation<vector> > UInterpolator = interpolation<vector>::New + autoPtr<interpolation<vector> > UInterp = interpolation<vector>::New ( this->interpolationSchemes(), this->U() ); - autoPtr<interpolation<scalar> > muInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > muInterp = interpolation<scalar>::New ( this->interpolationSchemes(), this->mu() ); - autoPtr<interpolation<scalar> > TInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > TInterp = interpolation<scalar>::New ( this->interpolationSchemes(), T ); - autoPtr<interpolation<scalar> > cpInterpolator = interpolation<scalar>::New + autoPtr<interpolation<scalar> > cpInterp = interpolation<scalar>::New ( this->interpolationSchemes(), cp @@ -191,27 +198,31 @@ void Foam::ThermoCloud<ParcelType>::evolve() ( *this, constProps_, - rhoInterpolator(), - UInterpolator(), - muInterpolator(), - TInterpolator(), - cpInterpolator(), + rhoInterp(), + UInterp(), + muInterp(), + TInterp(), + cpInterp(), this->g().value() ); this->injection().inject(td); - if (debug) - { - this->dumpParticlePositions(); - } - if (this->coupled()) { resetSourceTerms(); } Cloud<ParcelType>::move(td); + + postEvolve(); +} + + +template<class ParcelType> +void Foam::ThermoCloud<ParcelType>::info() const +{ + KinematicCloud<ParcelType>::info(); } diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H index 84603dd4ff257b173d330450dc99bcf9a5a348e7..151b0764117334be96ac1df2b4eb8376d0724349 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.H @@ -27,6 +27,7 @@ Class Description Templated base class for thermodynamic cloud + - Adds to kinematic cloud - Heat transfer @@ -39,12 +40,9 @@ SourceFiles #ifndef ThermoCloud_H #define ThermoCloud_H -#include "autoPtr.H" -#include "hCombustionThermo.H" - #include "KinematicCloud.H" #include "thermoCloud.H" - +#include "basicThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -66,8 +64,18 @@ class ThermoCloud public KinematicCloud<ParcelType>, public thermoCloud { + // Private Member Functions + + //- Disallow default bitwise copy construct + ThermoCloud(const ThermoCloud&); - // Private data + //- Disallow default bitwise assignment + void operator=(const ThermoCloud&); + + +protected: + + // Protected data //- Thermo parcel constant properties typename ParcelType::constantProperties constProps_; @@ -100,34 +108,35 @@ class ThermoCloud // Sources - //- Enthalpy transfer - DimensionedField<scalar, volMesh> hTrans_; + //- Sensible enthalpy transfer + DimensionedField<scalar, volMesh> hsTrans_; - //- Coefficient for carrier phase h equation - DimensionedField<scalar, volMesh> hCoeff_; + //- Chemical enthalpy transfer + // - If solving for total enthalpy, the carrier phase enthalpy will + // receive the full enthalpy of reaction via creation of reaction + // products + DimensionedField<scalar, volMesh> hcTrans_; - // Private Member Functions + // Protected member functions - //- Disallow default bitwise copy construct - ThermoCloud(const ThermoCloud&); - - //- Disallow default bitwise assignment - void operator=(const ThermoCloud&); + // Cloud evolution functions + //- Pre-evolve + void preEvolve(); -public: + //- Post-evolve + void postEvolve(); - //- Runtime type information -// TypeName("ThermoCloud"); +public: // Constructors //- Construct given carrier gas fields ThermoCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, @@ -135,15 +144,22 @@ public: ); - // Destructor + //- Destructor + virtual ~ThermoCloud(); - virtual ~ThermoCloud(); + + //- Type of parcel the cloud was instantiated for + typedef ParcelType parcelType; // Member Functions // Access + //- Return the constant properties + inline const typename ParcelType::constantProperties& + constProps() const; + //- Return const access to thermo package inline const basicThermo& carrierThermo() const; @@ -174,17 +190,20 @@ public: // Enthalpy - //- Return reference to enthalpy source - inline DimensionedField<scalar, volMesh>& hTrans(); + //- Return reference to sensible enthalpy source + inline DimensionedField<scalar, volMesh>& hsTrans(); + + //- Return tmp total sensible enthalpy source term + inline tmp<DimensionedField<scalar, volMesh> > Shs() const; - //- Coefficient for carrier phase h equation - inline DimensionedField<scalar, volMesh>& hCoeff(); + //- Return reference to chemical enthalpy source + inline DimensionedField<scalar, volMesh>& hcTrans(); - //- return tmp enthalpy source term - fully explicit - inline tmp<DimensionedField<scalar, volMesh> > Sh1() const; + //- Return tmp chemical enthalpy source term + inline tmp<DimensionedField<scalar, volMesh> > Shc() const; - //- Return tmp enthalpy source term - semi-implicit - inline tmp<fvScalarMatrix> Sh2(volScalarField& h) const; + //- Return tmp total enthalpy source term + inline tmp<DimensionedField<scalar, volMesh> > Sh() const; // Radiation - overrides thermoCloud virtual abstract members @@ -199,17 +218,20 @@ public: inline tmp<volScalarField> sigmap() const; + // Check + + //- Print cloud information + void info() const; + + // Cloud evolution functions - //- Add new parcel - void addNewParcel + //- Check parcel properties + void checkParcelProperties ( - const vector& position, - const label cellId, - const scalar d, - const vector& U, - const scalar nParticles, - const scalar lagrangianDt + ParcelType& parcel, + const scalar lagrangianDt, + const bool fullyDescribed ); //- Reset the spray source terms diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H index 94f12b85a2cb350d75b792a366b9b6077e4658ef..ee38bfd4533d18b89b1c5f7dac6188deb4fb01c7 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloudI.H @@ -28,6 +28,14 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class ParcelType> +inline const typename ParcelType::constantProperties& +Foam::ThermoCloud<ParcelType>::constProps() const +{ + return constProps_; +} + + template<class ParcelType> inline const Foam::basicThermo& Foam::ThermoCloud<ParcelType>::carrierThermo() const @@ -69,31 +77,65 @@ inline bool Foam::ThermoCloud<ParcelType>::radiation() const template<class ParcelType> inline Foam::DimensionedField<Foam::scalar, Foam::volMesh>& -Foam::ThermoCloud<ParcelType>::hTrans() +Foam::ThermoCloud<ParcelType>::hsTrans() +{ + return hsTrans_; +} + + +template<class ParcelType> +inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > +Foam::ThermoCloud<ParcelType>::Shs() const { - return hTrans_; + tmp<DimensionedField<scalar, volMesh> > tShs + ( + new DimensionedField<scalar, volMesh> + ( + IOobject + ( + this->name() + "Shs", + this->db().time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::AUTO_WRITE, + false + ), + this->mesh(), + dimensionedScalar + ( + "zero", + dimMass/dimLength/pow3(dimTime), + 0.0 + ) + ) + ); + + scalarField& Shs = tShs().field(); + Shs = hsTrans_/(this->mesh().V()*this->db().time().deltaT()); + + return tShs; } template<class ParcelType> inline Foam::DimensionedField<Foam::scalar, Foam::volMesh>& -Foam::ThermoCloud<ParcelType>::hCoeff() +Foam::ThermoCloud<ParcelType>::hcTrans() { - return hCoeff_; + return hcTrans_; } template<class ParcelType> inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > -Foam::ThermoCloud<ParcelType>::Sh1() const +Foam::ThermoCloud<ParcelType>::Shc() const { - tmp<DimensionedField<scalar, volMesh> > tSh1 + tmp<DimensionedField<scalar, volMesh> > tShc ( new DimensionedField<scalar, volMesh> ( IOobject ( - this->name() + "Sh1", + this->name() + "Shc", this->db().time().timeName(), this->mesh(), IOobject::NO_READ, @@ -110,30 +152,44 @@ Foam::ThermoCloud<ParcelType>::Sh1() const ) ); - scalarField& Sh1 = tSh1().field(); - Sh1 = hTrans_/(this->mesh().V()*this->db().time().deltaT()); + scalarField& Shc = tShc().field(); + Shc = hcTrans_/(this->mesh().V()*this->db().time().deltaT()); - return tSh1; + return tShc; } template<class ParcelType> -inline Foam::tmp<Foam::fvScalarMatrix> -Foam::ThermoCloud<ParcelType>::Sh2(volScalarField& h) const +inline Foam::tmp<Foam::DimensionedField<Foam::scalar, Foam::volMesh> > +Foam::ThermoCloud<ParcelType>::Sh() const { - const volScalarField cp = carrierThermo_.Cp(); + tmp<DimensionedField<scalar, volMesh> > tSh + ( + new DimensionedField<scalar, volMesh> + ( + IOobject + ( + this->name() + "Sh", + this->db().time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::AUTO_WRITE, + false + ), + this->mesh(), + dimensionedScalar + ( + "zero", + dimMass/dimLength/pow3(dimTime), + 0.0 + ) + ) + ); - if (debug) - { - Info<< "hTrans min/max = " - << min(hTrans_) << ", " << max(hTrans_) << endl; - Info<< "hCoeff min/max = " - << min(hCoeff_) << ", " << max(hCoeff_) << endl; - } + scalarField& Sh = tSh().field(); + Sh = (hsTrans_ + hcTrans_)/(this->mesh().V()*this->db().time().deltaT()); - return hTrans_/(this->mesh().V()*this->db().time().deltaT()) - - fvm::Sp(hCoeff_/(cp*this->mesh().V()), h) - + hCoeff_/(cp*this->mesh().V())*h; + return tSh; } diff --git a/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H b/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H index 68f3a9dfdf275bdd4ce0bb8c8c81b54043e8fa09..37ab0548157a1178a8d427f2ebd035abb2c2ea0e 100644 --- a/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H @@ -29,13 +29,14 @@ Description Virtual abstract base class for templated KinematicCloud SourceFiles + kinematicCloud.H \*---------------------------------------------------------------------------*/ #ifndef kinematicCloud_H #define kinematicCloud_H -#include "volFields.H" +#include "typeInfo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,7 +49,6 @@ namespace Foam class kinematicCloud { - // Private Member Functions //- Disallow default bitwise copy construct @@ -69,14 +69,8 @@ public: kinematicCloud(); - // Destructors - - virtual ~kinematicCloud(); - - - // Member Functions - - // Access + //- Destructor + virtual ~kinematicCloud(); }; diff --git a/src/lagrangian/intermediate/clouds/baseClasses/reactingCloud/reactingCloud.H b/src/lagrangian/intermediate/clouds/baseClasses/reactingCloud/reactingCloud.H index be585991ed6e147b70c76cbb11632400cf1eee1e..aef3eeba66c2eafebfbf2e76f6529f2586a79594 100644 --- a/src/lagrangian/intermediate/clouds/baseClasses/reactingCloud/reactingCloud.H +++ b/src/lagrangian/intermediate/clouds/baseClasses/reactingCloud/reactingCloud.H @@ -29,13 +29,14 @@ Description Virtual abstract base class for templated ReactingCloud SourceFiles + reactingCloud.C \*---------------------------------------------------------------------------*/ #ifndef reactingCloud_H #define reactingCloud_H -#include "volFields.H" +#include "typeInfo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,7 +49,6 @@ namespace Foam class reactingCloud { - // Private Member Functions //- Disallow default bitwise copy construct @@ -69,14 +69,8 @@ public: reactingCloud(); - // Destructors - - virtual ~reactingCloud(); - - - // Member Functions - - // Access + //- Destructor + virtual ~reactingCloud(); }; diff --git a/src/lagrangian/intermediate/clouds/baseClasses/reactingMultiphaseCloud/reactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/baseClasses/reactingMultiphaseCloud/reactingMultiphaseCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..2fbe3815c949047e11488f75992d8fdf6b078289 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/baseClasses/reactingMultiphaseCloud/reactingMultiphaseCloud.C @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "reactingMultiphaseCloud.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(reactingMultiphaseCloud, 0); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::reactingMultiphaseCloud::reactingMultiphaseCloud() +{} + + +// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // + +Foam::reactingMultiphaseCloud::~reactingMultiphaseCloud() +{} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/baseClasses/reactingMultiphaseCloud/reactingMultiphaseCloud.H b/src/lagrangian/intermediate/clouds/baseClasses/reactingMultiphaseCloud/reactingMultiphaseCloud.H new file mode 100644 index 0000000000000000000000000000000000000000..4cbe6f69177f1d826467a7629606e027d40b5db2 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/baseClasses/reactingMultiphaseCloud/reactingMultiphaseCloud.H @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::reactingMultiphaseCloud + +Description + Virtual abstract base class for templated reactingMultiphaseCloud + +SourceFiles + reactingMultiphaseCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef reactingMultiphaseCloud_H +#define reactingMultiphaseCloud_H + +#include "typeInfo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class reactingMultiphaseCloud Declaration +\*---------------------------------------------------------------------------*/ + +class reactingMultiphaseCloud +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + reactingMultiphaseCloud(const reactingMultiphaseCloud&); + + //- Disallow default bitwise assignment + void operator=(const reactingMultiphaseCloud&); + + +public: + + //- Runtime type information + TypeName("reactingMultiphaseCloud"); + + // Constructors + + //- Null constructor + reactingMultiphaseCloud(); + + + //- Destructor + virtual ~reactingMultiphaseCloud(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/baseClasses/thermoCloud/thermoCloud.H b/src/lagrangian/intermediate/clouds/baseClasses/thermoCloud/thermoCloud.H index bcab4df9fabd35b6d503456f73874e5e5ab2cd19..9eff9c62ee4a3d3d45c57668ef50fb8400229e43 100644 --- a/src/lagrangian/intermediate/clouds/baseClasses/thermoCloud/thermoCloud.H +++ b/src/lagrangian/intermediate/clouds/baseClasses/thermoCloud/thermoCloud.H @@ -29,6 +29,7 @@ Description Virtual abstract base class for templated ThermoCloud SourceFiles + thermoCloud.C \*---------------------------------------------------------------------------*/ @@ -48,7 +49,6 @@ namespace Foam class thermoCloud { - // Private Member Functions //- Disallow default bitwise copy construct @@ -69,9 +69,8 @@ public: thermoCloud(); - // Destructors - - virtual ~thermoCloud(); + //- Destructor + virtual ~thermoCloud(); // Member Functions diff --git a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C b/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/BasicReactingCloud.C similarity index 73% rename from src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C rename to src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/BasicReactingCloud.C index 6cd0e4d4fe453044c8d9e6366ba5410d681728f7..e59ca18ecf7dcf98670722534fc12059f9cd6665 100644 --- a/src/lagrangian/intermediate/clouds/derived/basicReactingCloud/basicReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/BasicReactingCloud.C @@ -24,53 +24,46 @@ License \*---------------------------------------------------------------------------*/ -#include "basicReactingCloud.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(basicReactingCloud, 0); -}; - +#include "BasicReactingCloud.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::basicReactingCloud::basicReactingCloud +template<class ThermoType> +Foam::BasicReactingCloud<ThermoType>::BasicReactingCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, - hCombustionThermo& thermo, - PtrList<specieReactingProperties>& gases + basicThermo& thermo ) : - ReactingCloud<basicReactingParcel> + ReactingCloud<BasicReactingParcel<ThermoType> > ( - cloudType, + cloudName, rho, U, g, - thermo, - gases + thermo ) { - basicReactingParcel::readFields(*this); + BasicReactingParcel<ThermoType>::readFields(*this); } // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::basicReactingCloud::~basicReactingCloud() +template<class ThermoType> +Foam::BasicReactingCloud<ThermoType>::~BasicReactingCloud() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::basicReactingCloud::writeFields() const +template<class ThermoType> +void Foam::BasicReactingCloud<ThermoType>::writeFields() const { - basicReactingParcel::writeFields(*this); + BasicReactingParcel<ThermoType>::writeFields(*this); } diff --git a/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/BasicReactingCloud.H b/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/BasicReactingCloud.H new file mode 100644 index 0000000000000000000000000000000000000000..0dea7344a6656abfd275f4001a81ed05c5a3c8b0 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/BasicReactingCloud.H @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::BasicReactingCloud + +Description + Reacting cloud templated on the type of carrier phase thermodynamics + +SourceFiles + BasicReactingCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef BasicReactingCloud_H +#define BasicReactingCloud_H + +#include "ReactingCloud.H" +#include "BasicReactingParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +template<class ThermoType> +class BasicReactingCloud; + +/*---------------------------------------------------------------------------*\ + Class BasicReactingCloud Declaration +\*---------------------------------------------------------------------------*/ + +template<class ThermoType> +class BasicReactingCloud +: + public ReactingCloud<BasicReactingParcel<ThermoType> > +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + BasicReactingCloud(const BasicReactingCloud&); + + //- Disallow default bitwise assignment + void operator=(const BasicReactingCloud&); + + +public: + + //- Runtime type information + TypeName("BasicReactingCloud"); + + + // Constructors + + //- Construct given carrier gas fields + BasicReactingCloud + ( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const dimensionedVector& g, + basicThermo& thermo + ); + + + //- Destructor + ~BasicReactingCloud(); + + + // Member Functions + + //- Write fields + virtual void writeFields() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "BasicReactingCloud.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/defineBasicReactingCloud.C b/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/defineBasicReactingCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..ca5b9e809062d6fac2137e44c146fe5c59beea21 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/derived/BasicReactingCloud/defineBasicReactingCloud.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "createReactingCloudTypes.H" +#include "BasicReactingCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + createReactingCloudType(BasicReactingCloud); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/BasicReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/BasicReactingMultiphaseCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..6f08db20167346b0b1fc41e9c669661c38d39861 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/BasicReactingMultiphaseCloud.C @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "BasicReactingMultiphaseCloud.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::BasicReactingMultiphaseCloud<ThermoType>::BasicReactingMultiphaseCloud +( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const dimensionedVector& g, + basicThermo& thermo +) +: + ReactingMultiphaseCloud<BasicReactingMultiphaseParcel<ThermoType> > + ( + cloudName, + rho, + U, + g, + thermo + ) +{ + BasicReactingMultiphaseParcel<ThermoType>::readFields(*this); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::BasicReactingMultiphaseCloud<ThermoType>::~BasicReactingMultiphaseCloud() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class ThermoType> +void Foam::BasicReactingMultiphaseCloud<ThermoType>::writeFields() const +{ + BasicReactingMultiphaseParcel<ThermoType>::writeFields(*this); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/BasicReactingMultiphaseCloud.H b/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/BasicReactingMultiphaseCloud.H new file mode 100644 index 0000000000000000000000000000000000000000..11b6fb237873433fd102c1976eb19746246bfa82 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/BasicReactingMultiphaseCloud.H @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::BasicReactingMultiphaseCloud + +Description + Reacting multiphase cloud templated on the type of carrier phase thermodynamics + +SourceFiles + BasicReactingMultiphaseCloud.C + +\*---------------------------------------------------------------------------*/ + +#ifndef BasicReactingMultiphaseCloud_H +#define BasicReactingMultiphaseCloud_H + +#include "ReactingMultiphaseCloud.H" +#include "BasicReactingMultiphaseParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +template<class ThermoType> +class BasicReactingMultiphaseCloud; + +/*---------------------------------------------------------------------------*\ + Class BasicReactingMultiphaseCloud Declaration +\*---------------------------------------------------------------------------*/ + +template<class ThermoType> +class BasicReactingMultiphaseCloud +: + public ReactingMultiphaseCloud<BasicReactingMultiphaseParcel<ThermoType> > +{ + // Private Member Functions + + //- Disallow default bitwise copy construct + BasicReactingMultiphaseCloud(const BasicReactingMultiphaseCloud&); + + //- Disallow default bitwise assignment + void operator=(const BasicReactingMultiphaseCloud&); + + +public: + + //- Runtime type information + TypeName("BasicReactingMultiphaseCloud"); + + + // Constructors + + //- Construct given carrier gas fields + BasicReactingMultiphaseCloud + ( + const word& cloudName, + const volScalarField& rho, + const volVectorField& U, + const dimensionedVector& g, + basicThermo& thermo + ); + + + //- Destructor + ~BasicReactingMultiphaseCloud(); + + + // Member Functions + + //- Write fields + virtual void writeFields() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "BasicReactingMultiphaseCloud.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/defineBasicReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/defineBasicReactingMultiphaseCloud.C new file mode 100644 index 0000000000000000000000000000000000000000..d23115997d07bccb9ef83af7ff595635db9c634a --- /dev/null +++ b/src/lagrangian/intermediate/clouds/derived/BasicReactingMultiphaseCloud/defineBasicReactingMultiphaseCloud.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "createReactingCloudTypes.H" +#include "BasicReactingMultiphaseCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + createReactingCloudType(BasicReactingMultiphaseCloud); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C index 4e52274f8e029298574e7da9b1606a821743e754..15ab7afdfcdf1673493fab546a2e0787aa86ab3f 100644 --- a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.C @@ -38,14 +38,14 @@ namespace Foam Foam::basicKinematicCloud::basicKinematicCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const volScalarField& mu, const dimensionedVector& g ) : - KinematicCloud<basicKinematicParcel>(cloudType, rho, U, mu, g) + KinematicCloud<basicKinematicParcel>(cloudName, rho, U, mu, g) { basicKinematicParcel::readFields(*this); } @@ -64,4 +64,5 @@ void Foam::basicKinematicCloud::writeFields() const basicKinematicParcel::writeFields(*this); } + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H index d8a4ebc81c75eb317fa4d10a0e743711149a429a..9b2c6003d318c1c413a986aed963c4ee6946ea4c 100644 --- a/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/derived/basicKinematicCloud/basicKinematicCloud.H @@ -52,7 +52,6 @@ class basicKinematicCloud : public KinematicCloud<basicKinematicParcel> { - // Private member functions //- Disallow default bitwise copy construct @@ -73,7 +72,7 @@ public: //- Construct from components basicKinematicCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const volScalarField& mu, @@ -82,14 +81,13 @@ public: //- Destructor - - ~basicKinematicCloud(); + ~basicKinematicCloud(); // Member functions //- Write fields - void writeFields() const; + virtual void writeFields() const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C index 9d73a6533c91bc03c94cffec4dc767097feb565d..fc7ee7dc26eb80fbf66a701b839b8ef13a36fd25 100644 --- a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.C @@ -38,14 +38,14 @@ namespace Foam Foam::basicThermoCloud::basicThermoCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, basicThermo& thermo ) : - ThermoCloud<basicThermoParcel>(cloudType, rho, U, g, thermo) + ThermoCloud<basicThermoParcel>(cloudName, rho, U, g, thermo) { basicThermoParcel::readFields(*this); } diff --git a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H index c3002c13546ccb4f7c83bb837570c712214da06b..cbe3695d5d42f44aea195f5e4c1e67978ffe030b 100644 --- a/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H +++ b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H @@ -26,6 +26,7 @@ Class Foam::basicThermoCloud Description + Cloud class to introduce thermodynamic parcels SourceFiles basicThermoCloud.C @@ -51,7 +52,6 @@ class basicThermoCloud : public ThermoCloud<basicThermoParcel> { - // Private Member Functions //- Disallow default bitwise copy construct @@ -75,7 +75,7 @@ public: //- Construct given carrier gas fields basicThermoCloud ( - const word& cloudType, + const word& cloudName, const volScalarField& rho, const volVectorField& U, const dimensionedVector& g, @@ -84,14 +84,13 @@ public: //- Destructor - - ~basicThermoCloud(); + ~basicThermoCloud(); // Member Functions //- Write fields - void writeFields() const; + virtual void writeFields() const; }; diff --git a/src/lagrangian/intermediate/clouds/include/createReactingCloudTypes.H b/src/lagrangian/intermediate/clouds/include/createReactingCloudTypes.H new file mode 100644 index 0000000000000000000000000000000000000000..14f439e28524df4fe17cb0269b9409207e003082 --- /dev/null +++ b/src/lagrangian/intermediate/clouds/include/createReactingCloudTypes.H @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef createReactingCloudTypes_H +#define createReactingCloudTypes_H + +#include "thermoPhysicsTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define createReactingCloudType(CloudType) \ + \ + createReactingCloudThermoType(CloudType, constGasThermoPhysics); \ + createReactingCloudThermoType(CloudType, gasThermoPhysics); \ + createReactingCloudThermoType(CloudType, icoPoly8ThermoPhysics); + + +#define createReactingCloudThermoType(CloudType, ThermoType) \ + \ + defineTemplateTypeNameAndDebug(CloudType<ThermoType>, 0); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 3cbb291f575d4eff84b567600e805972c51bc6b9..cf4dc68acb02f7bf0059016e305ce0516e0aa971 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -31,22 +31,39 @@ License template<class ParcelType> template<class TrackData> -void Foam::KinematicParcel<ParcelType>::updateCellQuantities +void Foam::KinematicParcel<ParcelType>::setCellValues ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - rhoc_ = td.rhoInterp().interpolate(this->position(), celli); - Uc_ = td.UInterp().interpolate(this->position(), celli); - muc_ = td.muInterp().interpolate(this->position(), celli); + rhoc_ = td.rhoInterp().interpolate(this->position(), cellI); + if (rhoc_ < td.constProps().rhoMin()) + { + WarningIn + ( + "void Foam::KinematicParcel<ParcelType>::setCellValues" + "(" + "TrackData&, " + "const scalar, " + "const label" + ")" + ) << "Limiting observed density in cell " << cellI << " to " + << td.constProps().rhoMin() << nl << endl; + + rhoc_ = td.constProps().rhoMin(); + } + + Uc_ = td.UInterp().interpolate(this->position(), cellI); + + muc_ = td.muInterp().interpolate(this->position(), cellI); // Apply dispersion components to carrier phase velocity Uc_ = td.cloud().dispersion().update ( dt, - celli, + cellI, U_, Uc_, UTurb_, @@ -57,153 +74,142 @@ void Foam::KinematicParcel<ParcelType>::updateCellQuantities template<class ParcelType> template<class TrackData> -void Foam::KinematicParcel<ParcelType>::calcCoupled +void Foam::KinematicParcel<ParcelType>::cellValueSourceCorrection ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Define local properties at beginning of timestep - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// const scalar mass0 = mass(); -// const vector U0 = U_; - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise transfer terms - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - - // Momentum transfer from the particle to the carrier phase - vector dUTrans = vector::zero; - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate velocity - update U - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar Cud = 0.0; - const vector U1 = calcVelocity(td, dt, Cud, dUTrans); - - - // ~~~~~~~~~~~~~~~~~~~~~~~ - // Accumulate source terms - // ~~~~~~~~~~~~~~~~~~~~~~~ - - // Update momentum transfer - td.cloud().UTrans()[celli] += nParticle_*dUTrans; - - // Accumulate coefficient to be applied in carrier phase momentum coupling - td.cloud().UCoeff()[celli] += nParticle_*mass()*Cud; - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Set new particle properties - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - this->U() = U1; + Uc_ += td.cloud().UTrans()[cellI]/massCell(cellI); } template<class ParcelType> template<class TrackData> -void Foam::KinematicParcel<ParcelType>::calcUncoupled +void Foam::KinematicParcel<ParcelType>::calc ( TrackData& td, const scalar dt, - const label + const label cellI ) { - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise transfer terms - // ~~~~~~~~~~~~~~~~~~~~~~~~~ + // Define local properties at beginning of time step + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const scalar np0 = nParticle_; + const scalar d0 = d_; + const vector U0 = U_; + const scalar rho0 = rho_; + const scalar mass0 = mass(); + + + // Explicit momentum source for particle + vector Su = vector::zero; // Momentum transfer from the particle to the carrier phase vector dUTrans = vector::zero; - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate velocity - update U - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar Cud = 0.0; - this->U() = calcVelocity(td, dt, Cud, dUTrans); + // Motion + // ~~~~~~ + + // Calculate new particle velocity + vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans); + + + // Accumulate carrier phase source terms + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (td.cloud().coupled()) + { + // Update momentum transfer + td.cloud().UTrans()[cellI] += np0*dUTrans; + } + + + // Set new particle properties + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + U_ = U1; } template<class ParcelType> template<class TrackData> -Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity +const Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity ( TrackData& td, const scalar dt, - scalar& Cud, + const label cellI, + const scalar d, + const vector& U, + const scalar rho, + const scalar mass, + const vector& Su, vector& dUTrans -) +) const { - // Correct carrier phase velocity for 2-D slab cases - const polyMeshInfo& meshInfo = td.cloud().meshInfo(); - if (meshInfo.caseIs2dSlab()) - { - Uc_.component(meshInfo.emptyComponent()) = 0.0; - } + const polyMesh& mesh = this->cloud().pMesh(); + + // Momentum transfer coefficient + const scalar utc = + td.cloud().drag().utc(U - Uc_, d, rhoc_, muc_) + ROOTVSMALL; - // Return linearised term from drag model - Cud = td.cloud().drag().Cu(U_ - Uc_, d_, rhoc_, rho_, muc_); + // Momentum source due to particle forces + const vector FCoupled = + mass*td.cloud().forces().calcCoupled(cellI, dt, rhoc_, rho, Uc_, U); + const vector FNonCoupled = + mass*td.cloud().forces().calcNonCoupled(cellI, dt, rhoc_, rho, Uc_, U); - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Set new particle velocity - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // New particle velocity + //~~~~~~~~~~~~~~~~~~~~~~ // Update velocity - treat as 3-D - const vector ap = Uc_ + (1 - rhoc_/rho_)/(Cud + VSMALL)*td.g(); - const scalar bp = Cud; + const scalar As = this->areaS(d); + const vector ap = Uc_ + (FCoupled + FNonCoupled + Su)/(utc*As); + const scalar bp = 6.0*utc/(rho*d); - vector Unew = td.cloud().UIntegrator().integrate(U_, dt, ap, bp).value(); + IntegrationScheme<vector>::integrationResult Ures = + td.cloud().UIntegrator().integrate(U, dt, ap, bp); -// Info<< "U_, Unew = " << U_ << ", " << Unew << endl; + vector Unew = Ures.value(); - // Calculate the momentum transfer to the continuous phase - // - do not include gravity impulse - dUTrans = -mass()*(Unew - U_ - dt*td.g()); + dUTrans += dt*(utc*As*(Ures.average() - Uc_) - FCoupled); - // Make corrections for 2-D cases - if (meshInfo.caseIs2d()) - { - if (meshInfo.caseIs2dSlab()) - { - // Remove the slab normal parcel velocity component - Unew.component(meshInfo.emptyComponent()) = 0.0; - dUTrans.component(meshInfo.emptyComponent()) = 0.0; - - // Snap parcels to central plane - this->position().component(meshInfo.emptyComponent()) = - meshInfo.centrePoint().component(meshInfo.emptyComponent()); - } - else if (meshInfo.caseIs2dWedge()) - { - // Snap parcels to central plane - this->position().component(meshInfo.emptyComponent()) = 0.0; - } - else - { - FatalErrorIn("void Foam::KinematicParcel::calcVelocity") - << "Could not determine 2-D case geometry" << nl - << abort(FatalError); - } - } + // Apply correction to velocity and dUTrans for reduced-D cases + meshTools::constrainDirection(mesh, mesh.solutionD(), Unew); + meshTools::constrainDirection(mesh, mesh.solutionD(), dUTrans); return Unew; } +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::KinematicParcel<ParcelType>::KinematicParcel +( + const KinematicParcel<ParcelType>& p +) +: + Particle<ParcelType>(p), + typeId_(p.typeId_), + nParticle_(p.nParticle_), + d_(p.d_), + U_(p.U_), + rho_(p.rho_), + tTurb_(p.tTurb_), + UTurb_(p.UTurb_), + rhoc_(p.rhoc_), + Uc_(p.Uc_), + muc_(p.muc_) +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ParcelType> template<class TrackData> -bool Foam::KinematicParcel<ParcelType>::move -( - TrackData& td -) +bool Foam::KinematicParcel<ParcelType>::move(TrackData& td) { ParcelType& p = static_cast<ParcelType&>(*this); @@ -219,46 +225,40 @@ bool Foam::KinematicParcel<ParcelType>::move while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL) { + // Apply correction to position for reduced-D cases + meshTools::constrainToMeshCentre(mesh, p.position()); + // Set the Lagrangian time-step scalar dt = min(dtMax, tEnd); - // Remember which cell the Parcel is in - // since this will change if a face is hit - label celli = p.cell(); + // Remember which cell the Parcel is in since this will change if a + // face is hit + label cellI = p.cell(); dt *= p.trackToFace(p.position() + dt*U_, td); tEnd -= dt; p.stepFraction() = 1.0 - tEnd/deltaT; - // Update cell based properties - p.updateCellQuantities(td, dt, celli); - // Avoid problems with extremely small timesteps if (dt > ROOTVSMALL) { - if (td.cloud().coupled()) - { - p.calcCoupled(td, dt, celli); - } - else + // Update cell based properties + p.setCellValues(td, dt, cellI); + + if (td.cloud().cellValueSourceCorrection()) { - p.calcUncoupled(td, dt, celli); + p.cellValueSourceCorrection(td, dt, cellI); } + + p.calc(td, dt, cellI); } if (p.onBoundary() && td.keepParticle) { - if (p.face() > -1) + if (isType<processorPolyPatch>(pbMesh[p.patch(p.face())])) { - if - ( - isType<processorPolyPatch> - (pbMesh[p.patch(p.face())]) - ) - { - td.switchProcessor = true; - } + td.switchProcessor = true; } } } @@ -267,6 +267,34 @@ bool Foam::KinematicParcel<ParcelType>::move } +template<class ParcelType> +template<class TrackData> +bool Foam::KinematicParcel<ParcelType>::hitPatch +( + const polyPatch& pp, + TrackData& td, + const label patchI +) +{ + ParcelType& p = static_cast<ParcelType&>(*this); + td.cloud().postProcessing().postPatch(p, patchI); + + return td.cloud().patchInteraction().correct(pp, this->face(), U_); +} + + +template<class ParcelType> +bool Foam::KinematicParcel<ParcelType>::hitPatch +( + const polyPatch& pp, + int& td, + const label patchI +) +{ + return false; +} + + template<class ParcelType> template<class TrackData> void Foam::KinematicParcel<ParcelType>::hitProcessorPatch @@ -296,7 +324,7 @@ void Foam::KinematicParcel<ParcelType>::hitWallPatch TrackData& td ) { - td.cloud().wallInteraction().correct(wpp, this->face(), U_); + // Wall interactions handled by generic hitPatch function } @@ -322,19 +350,12 @@ void Foam::KinematicParcel<ParcelType>::hitPatch template<class ParcelType> -void Foam::KinematicParcel<ParcelType>::hitPatch -( - const polyPatch&, - int& -) +void Foam::KinematicParcel<ParcelType>::hitPatch(const polyPatch&, int&) {} template<class ParcelType> -void Foam::KinematicParcel<ParcelType>::transformProperties -( - const tensor& T -) +void Foam::KinematicParcel<ParcelType>::transformProperties(const tensor& T) { Particle<ParcelType>::transformProperties(T); U_ = transform(T, U_); @@ -351,7 +372,7 @@ void Foam::KinematicParcel<ParcelType>::transformProperties } -// * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * // +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "KinematicParcelIO.C" diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index 34c66a89334f6231c81f00d7e0937ba05ac33bbc..049ab26bac5569c8f4bf98716ef9309ff10b5f9d 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -31,7 +31,7 @@ Description Sub-models include: - drag - - break-up + - turbulent dispersion - wall interactions SourceFiles @@ -79,15 +79,19 @@ class KinematicParcel : public Particle<ParcelType> { - public: //- Class to hold kinematic particle constant properties class constantProperties { - // Private data + //- Constant properties dictionary + const dictionary dict_; + + //- Minimum density [kg/m3] + const scalar rhoMin_; + //- Particle density [kg/m3] (constant) const scalar rho0_; @@ -98,10 +102,16 @@ public: public: //- Constructor - constantProperties(const dictionary& dict); + constantProperties(const dictionary& parentDict); // Member functions + //- Return const access to the constant properties dictionary + inline const dictionary& dict() const; + + //- Return const access to the minimum density + inline scalar rhoMin() const; + //- Return const access to the particle density inline scalar rho0() const; @@ -115,7 +125,6 @@ public: : public Particle<ParcelType>::trackData { - // Private data //- Reference to the cloud containing this particle @@ -183,22 +192,22 @@ public: protected: - // Protected member data + // Protected data // Parcel properties //- Parcel type id label typeId_; + //- Number of particles in Parcel + scalar nParticle_; + //- Diameter [m] scalar d_; //- Velocity of Parcel [m/s] vector U_; - //- Number of particles in Parcel - scalar nParticle_; - //- Density [kg/m3] scalar rho_; @@ -211,13 +220,13 @@ protected: // Cell-based quantities - // - Density [kg/m3] + //- Density [kg/m3] scalar rhoc_; - // - Velocity [m/s] + //- Velocity [m/s] vector Uc_; - // - Viscosity [Pa.s] + //- Viscosity [Pa.s] scalar muc_; @@ -225,35 +234,55 @@ protected: //- Calculate new particle velocity template<class TrackData> - vector calcVelocity + const vector calcVelocity ( TrackData& td, - const scalar dt, - scalar& Cud, - vector& dUTrans - ); + const scalar dt, // timestep + const label cellI, // owner cell + const scalar d, // diameter + const vector& U, // velocity + const scalar rho, // density + const scalar mass, // mass + const vector& Su, // explicit particle momentum source + vector& dUTrans // momentum transfer to carrier + ) const; public: - //- Runtime type information - TypeName("KinematicParcel"); + // Static data members + + //- String representation of properties + static string propHeader; + + //- Runtime type information + TypeName("KinematicParcel"); + friend class Cloud<ParcelType>; // Constructors + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + inline KinematicParcel + ( + KinematicCloud<ParcelType>& owner, + const vector& position, + const label cellI + ); + //- Construct from components inline KinematicParcel ( KinematicCloud<ParcelType>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ); @@ -265,10 +294,13 @@ public: bool readFields = true ); + //- Construct as a copy + KinematicParcel(const KinematicParcel& p); + //- Construct and return a clone - autoPtr<ParcelType> clone() const + autoPtr<KinematicParcel> clone() const { - return autoPtr<ParcelType>(new KinematicParcel<ParcelType>(*this)); + return autoPtr<KinematicParcel>(new KinematicParcel(*this)); } @@ -276,21 +308,18 @@ public: // Access - //- Return type id + //- Return const access to type id inline label typeId() const; + //- Return const access to number of particles + inline scalar nParticle() const; + //- Return const access to diameter inline scalar d() const; //- Return const access to velocity inline const vector& U() const; - //- Return const access to relative velocity - inline const vector& Ur() const; - - //- Return const access to number of particles - inline scalar nParticle() const; - //- Return const access to density inline scalar rho() const; @@ -300,25 +329,21 @@ public: //- Return const access to turbulent velocity fluctuation inline const vector& UTurb() const; - //- The nearest distance to a wall that - // the particle can be in the n direction - inline scalar wallImpactDistance(const vector& n) const; - // Edit + //- Return access to type id + inline label typeId(); + + //- Return access to number of particles + inline scalar& nParticle(); + //- Return access to diameter inline scalar& d(); //- Return access to velocity inline vector& U(); - //- Return access to relative velocity - inline vector& Ur(); - - //- Return access to number of particles - inline scalar& nParticle(); - //- Return access to density inline scalar& rho(); @@ -331,50 +356,66 @@ public: // Helper functions + //- The nearest distance to a wall that + // the particle can be in the n direction + inline scalar wallImpactDistance(const vector& n) const; + //- Return the index of the face to be used in the interpolation // routine inline label faceInterpolation() const; - //- Particle volume - inline scalar volume() const; + //- Cell owner mass + inline scalar massCell(const label cellI) const; //- Particle mass inline scalar mass() const; + //- Particle volume + inline scalar volume() const; + + //- Particle volume for a given diameter + inline scalar volume(const scalar d) const; + //- Particle projected area inline scalar areaP() const; + //- Projected area for given diameter + inline scalar areaP(const scalar d) const; + //- Particle surface area inline scalar areaS() const; + //- Surface area for given diameter + inline scalar areaS(const scalar d) const; + // Main calculation loop - //- Update cell based quantities + //- Set cell values template<class TrackData> - void updateCellQuantities + void setCellValues ( TrackData& td, const scalar dt, - const label celli + const label cellI ); - //- Coupled calculation with the continuous phase + //- Correct cell values using latest transfer information template<class TrackData> - void calcCoupled + void cellValueSourceCorrection ( TrackData& td, const scalar dt, - const label celli + const label cellI ); - //- Uncoupled calculation with the continuous phase + //- Update parcel properties over the time interval template<class TrackData> - void calcUncoupled + void calc ( TrackData& td, const scalar dt, - const label + const label cellI ); @@ -387,6 +428,27 @@ public: // Patch interactions + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + template<class TrackData> + bool hitPatch + ( + const polyPatch& p, + TrackData& td, + const label patchI + ); + + + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions without trackData + bool hitPatch + ( + const polyPatch& p, + int& td, + const label patchI + ); + + //- Overridable function to handle the particle hitting a // processorPatch template<class TrackData> @@ -447,8 +509,10 @@ public: // I-O + //- Read static void readFields(KinematicCloud<ParcelType>& c); + //- Write static void writeFields(const KinematicCloud<ParcelType>& c); diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H index 4b4ec3cce77c1a9adafb941257312962c2a96301..e0d927153780af56e42ac11af2db03636bd583b0 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H @@ -29,11 +29,16 @@ License template <class ParcelType> inline Foam::KinematicParcel<ParcelType>::constantProperties::constantProperties ( - const dictionary& dict + const dictionary& parentDict ) : - rho0_(dimensionedScalar(dict.lookup("rho0")).value()), - minParticleMass_(dimensionedScalar(dict.lookup("minParticleMass")).value()) + dict_(parentDict.subDict("constantProperties")), + rhoMin_(dimensionedScalar(dict_.lookup("rhoMin")).value()), + rho0_(dimensionedScalar(dict_.lookup("rho0")).value()), + minParticleMass_ + ( + dimensionedScalar(dict_.lookup("minParticleMass")).value() + ) {} @@ -62,20 +67,42 @@ template <class ParcelType> inline Foam::KinematicParcel<ParcelType>::KinematicParcel ( KinematicCloud<ParcelType>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI +) +: + Particle<ParcelType>(owner, position, cellI), + typeId_(owner.parcelTypeId()), + nParticle_(0), + d_(0.0), + U_(vector::zero), + rho_(0.0), + tTurb_(0.0), + UTurb_(vector::zero), + rhoc_(0.0), + Uc_(vector::zero), + muc_(0.0) +{} + + +template <class ParcelType> +inline Foam::KinematicParcel<ParcelType>::KinematicParcel +( + KinematicCloud<ParcelType>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ) : - Particle<ParcelType>(owner, position, celli), + Particle<ParcelType>(owner, position, cellI), typeId_(typeId), + nParticle_(nParticle0), d_(d0), U_(U0), - nParticle_(nParticle0), rho_(constProps.rho0()), tTurb_(0.0), UTurb_(vector::zero), @@ -87,6 +114,22 @@ inline Foam::KinematicParcel<ParcelType>::KinematicParcel // * * * * * * * * * constantProperties Member Functions * * * * * * * * * * // +template <class ParcelType> +inline const Foam::dictionary& +Foam::KinematicParcel<ParcelType>::constantProperties::dict() const +{ + return dict_; +} + + +template <class ParcelType> +inline Foam::scalar +Foam::KinematicParcel<ParcelType>::constantProperties::rhoMin() const +{ + return rhoMin_; +} + + template <class ParcelType> inline Foam::scalar Foam::KinematicParcel<ParcelType>::constantProperties::rho0() const @@ -163,62 +206,51 @@ inline Foam::label Foam::KinematicParcel<ParcelType>::typeId() const template <class ParcelType> -inline Foam::scalar Foam::KinematicParcel<ParcelType>::d() const +inline Foam::scalar Foam::KinematicParcel<ParcelType>::nParticle() const { - return d_; + return nParticle_; } template <class ParcelType> -inline Foam::scalar& Foam::KinematicParcel<ParcelType>::d() +inline Foam::scalar Foam::KinematicParcel<ParcelType>::d() const { return d_; } template <class ParcelType> -inline Foam::scalar Foam::KinematicParcel<ParcelType>::wallImpactDistance -( - const vector& -) const +inline const Foam::vector& Foam::KinematicParcel<ParcelType>::U() const { - return 0.5*d_; + return U_; } template <class ParcelType> -inline Foam::label Foam::KinematicParcel<ParcelType>::faceInterpolation() const +inline Foam::scalar Foam::KinematicParcel<ParcelType>::rho() const { - // Use volume-based interpolation if dealing with external faces - if (this->cloud().internalFace(this->face())) - { - return this->face(); - } - else - { - return -1; - } + return rho_; } template <class ParcelType> -inline const Foam::vector& Foam::KinematicParcel<ParcelType>::U() const +inline Foam::scalar Foam::KinematicParcel<ParcelType>::tTurb() const { - return U_; + return tTurb_; } template <class ParcelType> -inline Foam::vector& Foam::KinematicParcel<ParcelType>::U() +inline const Foam::vector& Foam::KinematicParcel<ParcelType>::UTurb() const { - return U_; + return UTurb_; } template <class ParcelType> -inline Foam::scalar Foam::KinematicParcel<ParcelType>::nParticle() const +inline Foam::label Foam::KinematicParcel<ParcelType>::typeId() { - return nParticle_; + return typeId_; } @@ -230,23 +262,23 @@ inline Foam::scalar& Foam::KinematicParcel<ParcelType>::nParticle() template <class ParcelType> -inline Foam::scalar Foam::KinematicParcel<ParcelType>::rho() const +inline Foam::scalar& Foam::KinematicParcel<ParcelType>::d() { - return rho_; + return d_; } template <class ParcelType> -inline Foam::scalar& Foam::KinematicParcel<ParcelType>::rho() +inline Foam::vector& Foam::KinematicParcel<ParcelType>::U() { - return rho_; + return U_; } template <class ParcelType> -inline Foam::scalar Foam::KinematicParcel<ParcelType>::tTurb() const +inline Foam::scalar& Foam::KinematicParcel<ParcelType>::rho() { - return tTurb_; + return rho_; } @@ -258,23 +290,44 @@ inline Foam::scalar& Foam::KinematicParcel<ParcelType>::tTurb() template <class ParcelType> -inline const Foam::vector& Foam::KinematicParcel<ParcelType>::UTurb() const +inline Foam::vector& Foam::KinematicParcel<ParcelType>::UTurb() { return UTurb_; } template <class ParcelType> -inline Foam::vector& Foam::KinematicParcel<ParcelType>::UTurb() +inline Foam::scalar Foam::KinematicParcel<ParcelType>::wallImpactDistance +( + const vector& +) const { - return UTurb_; + return 0.5*d_; } template <class ParcelType> -inline Foam::scalar Foam::KinematicParcel<ParcelType>::volume() const +inline Foam::label Foam::KinematicParcel<ParcelType>::faceInterpolation() const { - return mathematicalConstant::pi/6.0*pow3(d_); + // Use volume-based interpolation if dealing with external faces + if (this->cloud().internalFace(this->face())) + { + return this->face(); + } + else + { + return -1; + } +} + + +template <class ParcelType> +inline Foam::scalar Foam::KinematicParcel<ParcelType>::massCell +( + const label cellI +) const +{ + return rhoc_*this->cloud().pMesh().cellVolumes()[cellI]; } @@ -285,17 +338,48 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::mass() const } +template <class ParcelType> +inline Foam::scalar Foam::KinematicParcel<ParcelType>::volume() const +{ + return volume(d_); +} + + +template <class ParcelType> +inline Foam::scalar +Foam::KinematicParcel<ParcelType>::volume(const scalar d) const +{ + return mathematicalConstant::pi/6.0*pow3(d); +} + + template <class ParcelType> inline Foam::scalar Foam::KinematicParcel<ParcelType>::areaP() const { - return 0.25*areaS(); + return areaP(d_); +} + + +template <class ParcelType> +inline Foam::scalar +Foam::KinematicParcel<ParcelType>::areaP(const scalar d) const +{ + return 0.25*areaS(d); } template <class ParcelType> inline Foam::scalar Foam::KinematicParcel<ParcelType>::areaS() const { - return mathematicalConstant::pi*d_*d_; + return areaS(d_); +} + + +template <class ParcelType> +inline Foam::scalar +Foam::KinematicParcel<ParcelType>::areaS(const scalar d) const +{ + return mathematicalConstant::pi*d*d; } diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C index 36535ab6a09a5621656db29f1be3cc68a8626873..c69199cfb7ce7887bc0ae6212057b8ac6ed3974e 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C @@ -29,6 +29,20 @@ License #include "IOField.H" #include "Cloud.H" +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::string Foam::KinematicParcel<ParcelType>::propHeader = + Particle<ParcelType>::propHeader + + " typeId" + + " nParticle" + + " d" + + " (Ux Uy Uz)" + + " rho" + + " tTurb" + + " UTurb"; + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template <class ParcelType> @@ -41,9 +55,9 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel : Particle<ParcelType>(cloud, is, readFields), typeId_(0), + nParticle_(0.0), d_(0.0), U_(vector::zero), - nParticle_(0.0), rho_(0.0), tTurb_(0.0), UTurb_(vector::zero), @@ -56,9 +70,9 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel if (is.format() == IOstream::ASCII) { typeId_ = readLabel(is); + nParticle_ = readScalar(is); d_ = readScalar(is); is >> U_; - nParticle_ = readScalar(is); rho_ = readScalar(is); tTurb_ = readScalar(is); is >> UTurb_; @@ -69,9 +83,9 @@ Foam::KinematicParcel<ParcelType>::KinematicParcel ( reinterpret_cast<char*>(&typeId_), sizeof(typeId_) + + sizeof(nParticle_) + sizeof(d_) + sizeof(U_) - + sizeof(nParticle_) + sizeof(rho_) + sizeof(tTurb_) + sizeof(UTurb_) @@ -102,15 +116,16 @@ void Foam::KinematicParcel<ParcelType>::readFields IOField<label> typeId(c.fieldIOobject("typeId", IOobject::MUST_READ)); c.checkFieldIOobject(c, typeId); + IOField<scalar> + nParticle(c.fieldIOobject("nParticle", IOobject::MUST_READ)); + c.checkFieldIOobject(c, nParticle); + IOField<scalar> d(c.fieldIOobject("d", IOobject::MUST_READ)); c.checkFieldIOobject(c, d); IOField<vector> U(c.fieldIOobject("U", IOobject::MUST_READ)); c.checkFieldIOobject(c, U); - IOField<scalar> nParticle(c.fieldIOobject("nParticle", IOobject::MUST_READ)); - c.checkFieldIOobject(c, nParticle); - IOField<scalar> rho(c.fieldIOobject("rho", IOobject::MUST_READ)); c.checkFieldIOobject(c, rho); @@ -126,9 +141,9 @@ void Foam::KinematicParcel<ParcelType>::readFields ParcelType& p = iter(); p.typeId_ = typeId[i]; + p.nParticle_ = nParticle[i]; p.d_ = d[i]; p.U_ = U[i]; - p.nParticle_ = nParticle[i]; p.rho_ = rho[i]; p.tTurb_ = tTurb[i]; p.UTurb_ = UTurb[i]; @@ -148,13 +163,13 @@ void Foam::KinematicParcel<ParcelType>::writeFields label np = c.size(); IOField<label> typeId(c.fieldIOobject("typeId", IOobject::NO_READ), np); - IOField<scalar> d(c.fieldIOobject("d", IOobject::NO_READ), np); - IOField<vector> U(c.fieldIOobject("U", IOobject::NO_READ), np); IOField<scalar> nParticle ( c.fieldIOobject("nParticle", IOobject::NO_READ), np ); + IOField<scalar> d(c.fieldIOobject("d", IOobject::NO_READ), np); + IOField<vector> U(c.fieldIOobject("U", IOobject::NO_READ), np); IOField<scalar> rho(c.fieldIOobject("rho", IOobject::NO_READ), np); IOField<scalar> tTurb(c.fieldIOobject("tTurb", IOobject::NO_READ), np); IOField<vector> UTurb(c.fieldIOobject("UTurb", IOobject::NO_READ), np); @@ -165,9 +180,9 @@ void Foam::KinematicParcel<ParcelType>::writeFields const KinematicParcel<ParcelType>& p = iter(); typeId[i] = p.typeId(); + nParticle[i] = p.nParticle(); d[i] = p.d(); U[i] = p.U(); - nParticle[i] = p.nParticle(); rho[i] = p.rho(); tTurb[i] = p.tTurb(); UTurb[i] = p.UTurb(); @@ -175,9 +190,9 @@ void Foam::KinematicParcel<ParcelType>::writeFields } typeId.write(); + nParticle.write(); d.write(); U.write(); - nParticle.write(); rho.write(); tTurb.write(); UTurb.write(); @@ -195,25 +210,25 @@ Foam::Ostream& Foam::operator<< { if (os.format() == IOstream::ASCII) { - os << static_cast<const Particle<ParcelType>& >(p) + os << static_cast<const Particle<ParcelType>&>(p) << token::SPACE << p.typeId() + << token::SPACE << p.nParticle() << token::SPACE << p.d() << token::SPACE << p.U() - << token::SPACE << p.nParticle() << token::SPACE << p.rho() << token::SPACE << p.tTurb() << token::SPACE << p.UTurb(); } else { - os << static_cast<const Particle<ParcelType>& >(p); + os << static_cast<const Particle<ParcelType>&>(p); os.write ( reinterpret_cast<const char*>(&p.typeId_), sizeof(p.typeId()) + + sizeof(p.nParticle()) + sizeof(p.d()) + sizeof(p.U()) - + sizeof(p.nParticle()) + sizeof(p.rho()) + sizeof(p.tTurb()) + sizeof(p.UTurb()) diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..682cad335ad2c0c9ad36aa89c11f5799adfc47dc --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -0,0 +1,588 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ReactingMultiphaseParcel.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class ParcelType> +const Foam::label Foam::ReactingMultiphaseParcel<ParcelType>::GAS(0); + +template<class ParcelType> +const Foam::label Foam::ReactingMultiphaseParcel<ParcelType>::LIQ(1); + +template<class ParcelType> +const Foam::label Foam::ReactingMultiphaseParcel<ParcelType>::SLD(2); + + +// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // + +template<class ParcelType> +template<class TrackData> +Foam::scalar Foam::ReactingMultiphaseParcel<ParcelType>::cpEff +( + TrackData& td, + const scalar p, + const scalar T, + const label idG, + const label idL, + const label idS +) const +{ + return + this->Y_[GAS]*td.cloud().composition().cp(idG, YGas_, p, T) + + this->Y_[LIQ]*td.cloud().composition().cp(idL, YLiquid_, p, T) + + this->Y_[SLD]*td.cloud().composition().cp(idS, YSolid_, p, T); +} + + +template<class ParcelType> +template<class TrackData> +Foam::scalar Foam::ReactingMultiphaseParcel<ParcelType>::HEff +( + TrackData& td, + const scalar p, + const scalar T, + const label idG, + const label idL, + const label idS +) const +{ + return + this->Y_[GAS]*td.cloud().composition().H(idG, YGas_, p, T) + + this->Y_[LIQ]*td.cloud().composition().H(idL, YLiquid_, p, T) + + this->Y_[SLD]*td.cloud().composition().H(idS, YSolid_, p, T); +} + + +template<class ParcelType> +template<class TrackData> +Foam::scalar Foam::ReactingMultiphaseParcel<ParcelType>::LEff +( + TrackData& td, + const scalar p, + const scalar T, + const label idG, + const label idL, + const label idS +) const +{ + return + this->Y_[GAS]*td.cloud().composition().L(idG, YGas_, p, T) + + this->Y_[LIQ]*td.cloud().composition().L(idL, YLiquid_, p, T) + + this->Y_[SLD]*td.cloud().composition().L(idS, YSolid_, p, T); +} + + +template<class ParcelType> +Foam::scalar Foam::ReactingMultiphaseParcel<ParcelType>::updateMassFractions +( + const scalar mass0, + const scalarField& dMassGas, + const scalarField& dMassLiquid, + const scalarField& dMassSolid +) +{ + scalarField& YMix = this->Y_; + + scalar massGas = + this->updateMassFraction(mass0*YMix[GAS], dMassGas, YGas_); + scalar massLiquid = + this->updateMassFraction(mass0*YMix[LIQ], dMassLiquid, YLiquid_); + scalar massSolid = + this->updateMassFraction(mass0*YMix[SLD], dMassSolid, YSolid_); + + scalar massNew = max(massGas + massLiquid + massSolid, ROOTVSMALL); + + YMix[GAS] = massGas/massNew; + YMix[LIQ] = massLiquid/massNew; + YMix[SLD] = 1.0 - YMix[GAS] - YMix[LIQ]; + + return massNew; +} + + +// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // + +template<class ParcelType> +template<class TrackData> +void Foam::ReactingMultiphaseParcel<ParcelType>::setCellValues +( + TrackData& td, + const scalar dt, + const label cellI +) +{ + ReactingParcel<ParcelType>::setCellValues(td, dt, cellI); +} + + +template<class ParcelType> +template<class TrackData> +void Foam::ReactingMultiphaseParcel<ParcelType>::cellValueSourceCorrection +( + TrackData& td, + const scalar dt, + const label cellI +) +{ + scalar massCell = this->massCell(cellI); + + scalar addedMass = 0.0; + forAll(td.cloud().rhoTrans(), i) + { + addedMass += td.cloud().rhoTrans(i)[cellI]; + } + + this->rhoc_ += addedMass/td.cloud().pMesh().cellVolumes()[cellI]; + + scalar massCellNew = massCell + addedMass; + this->Uc_ += td.cloud().UTrans()[cellI]/massCellNew; + + scalar cpEff = 0; + if (addedMass > ROOTVSMALL) + { + forAll(td.cloud().rhoTrans(), i) + { + scalar Y = td.cloud().rhoTrans(i)[cellI]/addedMass; + cpEff += + Y*td.cloud().mcCarrierThermo().speciesData()[i].Cp(this->Tc_); + } + } + const scalar cpc = td.cpInterp().psi()[cellI]; + this->cpc_ = (massCell*cpc + addedMass*cpEff)/massCellNew; + + this->Tc_ += td.cloud().hsTrans()[cellI]/(this->cpc_*massCellNew); +} + + +template<class ParcelType> +template<class TrackData> +void Foam::ReactingMultiphaseParcel<ParcelType>::calc +( + TrackData& td, + const scalar dt, + const label cellI +) +{ + // Define local properties at beginning of timestep + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const scalar np0 = this->nParticle_; + const scalar d0 = this->d_; + const vector& U0 = this->U_; + const scalar rho0 = this->rho_; + const scalar T0 = this->T_; + const scalar cp0 = this->cp_; + const scalar mass0 = this->mass(); + + const scalar pc = this->pc_; + + const scalarField& YMix = this->Y_; + const label idG = td.cloud().composition().idGas(); + const label idL = td.cloud().composition().idLiquid(); + const label idS = td.cloud().composition().idSolid(); + + // Explicit momentum source for particle + vector Su = vector::zero; + + // Momentum transfer from the particle to the carrier phase + vector dUTrans = vector::zero; + + // Explicit enthalpy source for particle + scalar Sh = 0.0; + + // Sensible enthalpy transfer from the particle to the carrier phase + scalar dhsTrans = 0.0; + + + // Devolatilisation + // ~~~~~~~~~~~~~~~~ + + // Mass transfer due to devolatilisation + scalarField dMassDV(YGas_.size(), 0.0); + + // Calc mass and enthalpy transfer due to devolatilisation + calcDevolatilisation + ( + td, + dt, + T0, + mass0, + this->mass0_, + idG, + YMix[GAS], + YGas_, + canCombust_, + dMassDV, + Sh, + dhsTrans + ); + + + // Surface reactions + // ~~~~~~~~~~~~~~~~~ + + // Change in carrier phase composition due to surface reactions + scalarField dMassSRGas(YGas_.size(), 0.0); + scalarField dMassSRLiquid(YLiquid_.size(), 0.0); + scalarField dMassSRSolid(YSolid_.size(), 0.0); + scalarField + dMassSRCarrier + ( + td.cloud().mcCarrierThermo().species().size(), + 0.0 + ); + + // Clac mass and enthalpy transfer due to surface reactions + calcSurfaceReactions + ( + td, + dt, + cellI, + d0, + T0, + mass0, + canCombust_, + dMassDV, // assuming d(mass) due to phase change is non-volatile + YMix, + YGas_, + YLiquid_, + YSolid_, + dMassSRGas, + dMassSRLiquid, + dMassSRSolid, + dMassSRCarrier, + Sh, + dhsTrans + ); + + + // Phase change in liquid phase + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Mass transfer due to phase change + scalarField dMassPC(YLiquid_.size(), 0.0); + + // Calc mass and enthalpy transfer due to phase change + calcPhaseChange + ( + td, + dt, + cellI, + d0, + T0, + U0, + mass0, + idL, + YMix[LIQ], + YLiquid_, + dMassPC, + Sh, + dhsTrans + ); + + + // Update component mass fractions + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + scalarField dMassGas = dMassDV + dMassSRGas; + scalarField dMassLiquid = dMassPC + dMassSRLiquid; + scalarField dMassSolid = dMassSRSolid; + + scalar mass1 = + updateMassFractions(mass0, dMassGas, dMassLiquid, dMassSolid); + + + // Heat transfer + // ~~~~~~~~~~~~~ + + // Calculate new particle temperature + scalar T1 = + calcHeatTransfer(td, dt, cellI, d0, U0, rho0, T0, cp0, Sh, dhsTrans); + + + // Motion + // ~~~~~~ + + // Calculate new particle velocity + vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans); + + dUTrans += 0.5*(mass0 - mass1)*(U0 + U1); + + + // Accumulate carrier phase source terms + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + if (td.cloud().coupled()) + { + // Transfer mass lost from particle to carrier mass source + forAll(YGas_, i) + { + label gid = td.cloud().composition().localToGlobalCarrierId(GAS, i); + td.cloud().rhoTrans(gid)[cellI] += np0*dMassGas[i]; + td.cloud().hcTrans()[cellI] += + np0 + *dMassGas[i] + *td.cloud().mcCarrierThermo().speciesData()[gid].H(T0); + } + forAll(YLiquid_, i) + { + label gid = td.cloud().composition().localToGlobalCarrierId(LIQ, i); + td.cloud().rhoTrans(gid)[cellI] += np0*dMassLiquid[i]; + td.cloud().hcTrans()[cellI] += + np0 + *dMassLiquid[i] + *td.cloud().mcCarrierThermo().speciesData()[gid].H(T0); + } +/* + // No mapping between solid components and carrier phase + forAll(YSolid_, i) + { + label gid = td.cloud().composition().localToGlobalCarrierId(SLD, i); + td.cloud().rhoTrans(gid)[cellI] += np0*dMassSolid[i]; + td.cloud().hcTrans()[cellI] += + np0 + *dMassSolid[i] + *td.cloud().mcCarrierThermo().speciesData()[gid].H(T0); + } +*/ + forAll(dMassSRCarrier, i) + { + td.cloud().rhoTrans(i)[cellI] += np0*dMassSRCarrier[i]; + td.cloud().hcTrans()[cellI] += + np0 + *dMassSRCarrier[i] + *td.cloud().mcCarrierThermo().speciesData()[i].H(T0); + } + + // Update momentum transfer + td.cloud().UTrans()[cellI] += np0*dUTrans; + + // Update sensible enthalpy transfer + td.cloud().hsTrans()[cellI] += np0*dhsTrans; + } + + + // Remove the particle when mass falls below minimum threshold + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + if (mass1 < td.constProps().minParticleMass()) + { + td.keepParticle = false; + + if (td.cloud().coupled()) + { + // Absorb parcel into carrier phase + forAll(YGas_, i) + { + label gid = + td.cloud().composition().localToGlobalCarrierId(GAS, i); + td.cloud().rhoTrans(gid)[cellI] += np0*mass1*YMix[GAS]*YGas_[i]; + } + forAll(YLiquid_, i) + { + label gid = + td.cloud().composition().localToGlobalCarrierId(LIQ, i); + td.cloud().rhoTrans(gid)[cellI] += + np0*mass1*YMix[LIQ]*YLiquid_[i]; + } +/* + // No mapping between solid components and carrier phase + forAll(YSolid_, i) + { + label gid = + td.cloud().composition().localToGlobalCarrierId(SLD, i); + td.cloud().rhoTrans(gid)[cellI] += + np0*mass1*YMix[SLD]*YSolid_[i]; + } +*/ + td.cloud().UTrans()[cellI] += np0*mass1*U1; + td.cloud().hsTrans()[cellI] += + np0*mass1*HEff(td, pc, T1, idG, idL, idS); + } + } + + + // Set new particle properties + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + else + { + this->cp_ = cpEff(td, pc, T1, idG, idL, idS); + this->T_ = T1; + this->U_ = U1; + + // Update particle density or diameter + if (td.constProps().constantVolume()) + { + this->rho_ = mass1/this->volume(); + } + else + { + this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi); + } + } +} + + +template<class ParcelType> +template<class TrackData> +void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation +( + TrackData& td, + const scalar dt, + const scalar T, + const scalar mass, + const scalar mass0, + const label idVolatile, + const scalar YVolatileTot, + const scalarField& YVolatile, + bool& canCombust, + scalarField& dMassDV, + scalar& Sh, + scalar& dhsTrans +) const +{ + // Check that model is active, and that the parcel temperature is + // within necessary limits for devolatilisation to occur + if + ( + !td.cloud().devolatilisation().active() + || T < td.constProps().Tvap() + ) + { + return; + } + + // Total mass of volatiles evolved + const scalar dMassTot = td.cloud().devolatilisation().calculate + ( + dt, + mass0, + mass, + T, + td.cloud().composition().YMixture0()[idVolatile], + YVolatileTot, + canCombust + ); + + // Volatile mass transfer - equal components of each volatile specie + dMassDV = YVolatile*dMassTot; + + td.cloud().addToMassDevolatilisation(this->nParticle_*dMassTot); + + Sh -= dMassTot*td.constProps().LDevol()/dt; +} + + +template<class ParcelType> +template<class TrackData> +void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions +( + TrackData& td, + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar mass, + const bool canCombust, + const scalarField& dMassVolatile, + const scalarField& YMix, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + scalarField& dMassSRGas, + scalarField& dMassSRLiquid, + scalarField& dMassSRSolid, + scalarField& dMassSRCarrier, + scalar& Sh, + scalar& dhsTrans +) const +{ + // Check that model is active + if (!td.cloud().surfaceReaction().active() || !canCombust) + { + return; + } + + // Update surface reactions + const scalar hReaction = td.cloud().surfaceReaction().calculate + ( + dt, + cellI, + d, + T, + this->Tc_, + this->pc_, + this->rhoc_, + mass, + YGas, + YLiquid, + YSolid, + YMix, + dMassVolatile, + dMassSRGas, + dMassSRLiquid, + dMassSRSolid, + dMassSRCarrier + ); + + td.cloud().addToMassSurfaceReaction + ( + this->nParticle_ + *(sum(dMassSRGas) + sum(dMassSRLiquid) + sum(dMassSRSolid)) + ); + + const scalar xsi = min(T/5000.0, 1.0); + const scalar hRetentionCoeffMod = + (1.0 - xsi*xsi)*td.constProps().hRetentionCoeff(); + + Sh += hRetentionCoeffMod *hReaction/dt; + + dhsTrans += (1.0 - hRetentionCoeffMod)*hReaction; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel +( + const ReactingMultiphaseParcel<ParcelType>& p +) +: + ReactingParcel<ParcelType>(p), + YGas_(p.YGas_), + YLiquid_(p.YLiquid_), + YSolid_(p.YSolid_) +{} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +#include "ReactingMultiphaseParcelIO.C" + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H new file mode 100644 index 0000000000000000000000000000000000000000..e4e311ed90c37ac860a52be6c7a3332ef5c11913 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H @@ -0,0 +1,434 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::ReactingMultiphaseParcel + +Description + Multiphase variant of the reacting parcel class with one/two-way coupling + with the continuous phase. + +SourceFiles + ReactingMultiphaseParcelI.H + ReactingMultiphaseParcel.C + ReactingMultiphaseParcelIO.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ReactingMultiphaseParcel_H +#define ReactingMultiphaseParcel_H + +#include "ReactingParcel.H" +#include "ReactingMultiphaseCloud.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +template<class ParcelType> +class ReactingMultiphaseParcel; + +template<class ParcelType> +Ostream& operator<< +( + Ostream&, + const ReactingMultiphaseParcel<ParcelType>& +); + +/*---------------------------------------------------------------------------*\ + Class ReactingMultiphaseParcel Declaration +\*---------------------------------------------------------------------------*/ + +template<class ParcelType> +class ReactingMultiphaseParcel +: + public ReactingParcel<ParcelType> +{ +public: + + // IDs of phases in ReacingParcel phase list (Y) + + static const label GAS; + static const label LIQ; + static const label SLD; + + + //- Class to hold reacting multiphase particle constant properties + class constantProperties + : + public ReactingParcel<ParcelType>::constantProperties + { + // Private data + + //- Latent heat of devolatilisation [J/kg] + const scalar LDevol_; + + //- Fraction of enthalpy retained by parcel due to surface + // reactions + scalar hRetentionCoeff_; + + + public: + + //- Constructor + constantProperties(const dictionary& parentDict); + + // Access + + //- Return const access to the latent heat of devolatilisation + inline scalar LDevol() const; + + //- Return const access to the fraction of enthalpy retained by + // parcel due to surface reactions + inline scalar hRetentionCoeff() const; + }; + + + //- Class used to pass reacting tracking data to the trackToFace function + class trackData + : + public ReactingParcel<ParcelType>::trackData + { + // Private data + + //- Reference to the cloud containing this particle + ReactingMultiphaseCloud<ParcelType>& cloud_; + + //- Particle constant properties + const constantProperties& constProps_; + + + public: + + // Constructors + + //- Construct from components + inline trackData + ( + ReactingMultiphaseCloud<ParcelType>& cloud, + const constantProperties& constProps, + const interpolation<scalar>& rhoInterp, + const interpolation<vector>& UInterp, + const interpolation<scalar>& muInterp, + const interpolation<scalar>& TInterp, + const interpolation<scalar>& CpInterp, + const interpolation<scalar>& pInterp, + const vector& g + ); + + + // Member functions + + //- Return access to the owner cloud + inline ReactingMultiphaseCloud<ParcelType>& cloud(); + + //- Return const access to the constant properties + inline const constantProperties& constProps() const; + }; + + +private: + + // Private member functions + + //- Return the mixture effective specific heat capacity + template<class TrackData> + scalar cpEff + ( + TrackData& td, + const scalar p, + const scalar T, + const label idG, + const label idL, + const label idS + ) const; + + //- Return the mixture effective enthalpy + template<class TrackData> + scalar HEff + ( + TrackData& td, + const scalar p, + const scalar T, + const label idG, + const label idL, + const label idS + ) const; + + //- Return the mixture effective latent heat + template<class TrackData> + scalar LEff + ( + TrackData& td, + const scalar p, + const scalar T, + const label idG, + const label idL, + const label idS + ) const; + + //- Update the mass fractions (Y, YGas, YLiquid, YSolid) + scalar updateMassFractions + ( + const scalar mass0, + const scalarField& dMassGas, + const scalarField& dMassLiquid, + const scalarField& dMassSolid + ); + + +protected: + + // Protected data + + // Parcel properties + + //- Mass fractions of gases [] + scalarField YGas_; + + //- Mass fractions of liquids [] + scalarField YLiquid_; + + //- Mass fractions of solids [] + scalarField YSolid_; + + //- Flag to say that the particle is allowed to combust + // Only true after volatile content falls below threshold value + bool canCombust_; + + + // Protected member functions + + //- Calculate Devolatilisation + template<class TrackData> + void calcDevolatilisation + ( + TrackData& td, + const scalar dt, // timestep + const scalar T, // temperature + const scalar mass, // mass + const scalar mass0, // mass (initial on injection) + const label idVolatile, // id of volatile phase + const scalar YVolatileTot, // total volatile mass fraction + const scalarField& YVolatile, // volatile component mass fractions + bool& canCombust, // 'can combust' flag + scalarField& dMassDV, // mass transfer - local to particle + scalar& Sh, // explicit particle enthalpy source + scalar& dhsTrans // sensible enthalpy transfer to carrier + ) const; + + //- Calculate surface reactions + template<class TrackData> + void calcSurfaceReactions + ( + TrackData& td, + const scalar dt, // timestep + const label cellI, // owner cell + const scalar d, // diameter + const scalar T, // temperature + const scalar mass, // mass + const bool canCombust, // 'can combust' flag + const scalarField& dMassVolatile, // mass transfer of volatiles + const scalarField& YMix, // mixture mass fractions + const scalarField& YGas, // gas-phase mass fractions + const scalarField& YLiquid,// liquid-phase mass fractions + const scalarField& YSolid, // solid-phase mass fractions + scalarField& dMassSRGas, // gas-phase mass transfer - local + scalarField& dMassSRLiquid,// liquid-phase mass transfer - local + scalarField& dMassSRSolid, // solid-phase mass transfer - local + scalarField& dMassSRCarrier, // carrier phase mass transfer + scalar& Sh, // explicit particle enthalpy source + scalar& dhsTrans // sensible enthalpy transfer to carrier + ) const; + + +public: + + // Static data members + + //- String representation of properties + static string propHeader; + + //- Runtime type information + TypeName("ReactingMultiphaseParcel"); + + + friend class Cloud<ParcelType>; + + + // Constructors + + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + inline ReactingMultiphaseParcel + ( + ReactingMultiphaseCloud<ParcelType>& owner, + const vector& position, + const label cellI + ); + + + //- Construct from components + inline ReactingMultiphaseParcel + ( + ReactingMultiphaseCloud<ParcelType>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const vector& U0, + const scalarField& Y0, + const scalarField& YGas0, + const scalarField& YLiquid0, + const scalarField& YSolid0, + const constantProperties& constProps + ); + + //- Construct from Istream + ReactingMultiphaseParcel + ( + const Cloud<ParcelType>& c, + Istream& is, + bool readFields = true + ); + + //- Construct as a copy + ReactingMultiphaseParcel(const ReactingMultiphaseParcel& p); + + //- Construct and return a clone + autoPtr<ReactingMultiphaseParcel> clone() const + { + return + autoPtr<ReactingMultiphaseParcel> + ( + new ReactingMultiphaseParcel(*this) + ); + } + + + // Member Functions + + // Access + + //- Return const access to mass fractions of gases + inline const scalarField& YGas() const; + + //- Return const access to mass fractions of liquids + inline const scalarField& YLiquid() const; + + //- Return const access to mass fractions of solids + inline const scalarField& YSolid() const; + + //- Return const access to the canCombust flag + inline bool canCombust() const; + + + // Edit + + //- Return access to mass fractions of gases + inline scalarField& YGas(); + + //- Return access to mass fractions of liquids + inline scalarField& YLiquid(); + + //- Return access to mass fractions of solids + inline scalarField& YSolid(); + + //- Return access to the canCombust flag + inline bool& canCombust(); + + + // Main calculation loop + + //- Set cell values + template<class TrackData> + void setCellValues + ( + TrackData& td, + const scalar dt, + const label cellI + ); + + //- Correct cell values using latest transfer information + template<class TrackData> + void cellValueSourceCorrection + ( + TrackData& td, + const scalar dt, + const label cellI + ); + + //- Update parcel properties over the time interval + template<class TrackData> + void calc + ( + TrackData& td, + const scalar dt, + const label cellI + ); + + + // I-O + + //- Read + static void readFields(ReactingMultiphaseCloud<ParcelType>& c); + + //- Write + static void writeFields + ( + const ReactingMultiphaseCloud<ParcelType>& c + ); + + + // Ostream Operator + + friend Ostream& operator<< <ParcelType> + ( + Ostream&, + const ReactingMultiphaseParcel<ParcelType>& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "ReactingMultiphaseParcelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "ReactingMultiphaseParcel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H new file mode 100644 index 0000000000000000000000000000000000000000..c512c5572847966c507b83edbf13a14d2502efb0 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H @@ -0,0 +1,238 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ParcelType> +inline Foam::ReactingMultiphaseParcel<ParcelType>::constantProperties:: +constantProperties +( + const dictionary& parentDict +) +: + ReactingParcel<ParcelType>::constantProperties(parentDict), + LDevol_(dimensionedScalar(this->dict().lookup("LDevol")).value()), + hRetentionCoeff_ + ( + dimensionedScalar(this->dict().lookup("hRetentionCoeff")).value() + ) +{ + if ((hRetentionCoeff_ < 0) || (hRetentionCoeff_ > 1)) + { + FatalErrorIn + ( + "ReactingMultiphaseParcel<ParcelType>::constantProperties::" + "constantProperties" + ) << "hRetentionCoeff must be in the range 0 to 1" << nl + << exit(FatalError) << endl; + } + + hRetentionCoeff_ = max(1e-06, hRetentionCoeff_); +} + + +template<class ParcelType> +inline Foam::ReactingMultiphaseParcel<ParcelType>::trackData::trackData +( + ReactingMultiphaseCloud<ParcelType>& cloud, + const constantProperties& constProps, + const interpolation<scalar>& rhoInterp, + const interpolation<vector>& UInterp, + const interpolation<scalar>& muInterp, + const interpolation<scalar>& TInterp, + const interpolation<scalar>& CpInterp, + const interpolation<scalar>& pInterp, + const vector& g +) +: + ReactingParcel<ParcelType>::trackData + ( + cloud, + constProps, + rhoInterp, + UInterp, + muInterp, + TInterp, + CpInterp, + pInterp, + g + ), + cloud_(cloud), + constProps_(constProps) +{} + + +template <class ParcelType> +inline Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel +( + ReactingMultiphaseCloud<ParcelType>& owner, + const vector& position, + const label cellI +) +: + ReactingParcel<ParcelType>(owner, position, cellI), + YGas_(0), + YLiquid_(0), + YSolid_(0), + canCombust_(false) +{} + + +template<class ParcelType> +inline Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel +( + ReactingMultiphaseCloud<ParcelType>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const vector& U0, + const scalarField& Y0, + const scalarField& YGas0, + const scalarField& YLiquid0, + const scalarField& YSolid0, + const constantProperties& constProps +) +: + ReactingParcel<ParcelType> + ( + owner, + position, + cellI, + typeId, + nParticle0, + d0, + U0, + Y0, + constProps + ), + YGas_(YGas0), + YLiquid_(YLiquid0), + YSolid_(YSolid0), + canCombust_(false) +{} + + +// * * * * * * * * * constantProperties Member Functions * * * * * * * * * * // + +template<class ParcelType> +inline Foam::scalar +Foam::ReactingMultiphaseParcel<ParcelType>::constantProperties::LDevol() const +{ + return LDevol_; +} + + +template<class ParcelType> +inline Foam::scalar +Foam::ReactingMultiphaseParcel<ParcelType>::constantProperties:: +hRetentionCoeff() const +{ + return hRetentionCoeff_; +} + + +// * * * * * * * * * * * trackData Member Functions * * * * * * * * * * * * // + +template<class ParcelType> +inline Foam::ReactingMultiphaseCloud<ParcelType>& +Foam::ReactingMultiphaseParcel<ParcelType>::trackData::cloud() +{ + return cloud_; +} + + +template<class ParcelType> +inline const typename Foam::ReactingMultiphaseParcel<ParcelType>:: +constantProperties& +Foam::ReactingMultiphaseParcel<ParcelType>::trackData::constProps() const +{ + return constProps_; +} + + +// * * * * * * * * * * ThermoParcel Member Functions * * * * * * * * * * * * // + +template<class ParcelType> +inline const Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>:: +YGas() const +{ + return YGas_; +} + + +template<class ParcelType> +inline const Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>:: +YLiquid() const +{ + return YLiquid_; +} + + +template<class ParcelType> +inline const Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>:: +YSolid() const +{ + return YSolid_; +} + + +template<class ParcelType> +inline bool Foam::ReactingMultiphaseParcel<ParcelType>::canCombust() const +{ + return canCombust_; +} + + +template<class ParcelType> +inline Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>::YGas() +{ + return YGas_; +} + + +template<class ParcelType> +inline Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>::YLiquid() +{ + return YLiquid_; +} + + +template<class ParcelType> +inline Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>::YSolid() +{ + return YSolid_; +} + + +template<class ParcelType> +inline bool& Foam::ReactingMultiphaseParcel<ParcelType>::canCombust() +{ + return canCombust_; +} + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C new file mode 100644 index 0000000000000000000000000000000000000000..512f21e9530950563d4d71e0cfb89e1f54215000 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C @@ -0,0 +1,314 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ReactingMultiphaseParcel.H" +#include "IOstreams.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::string Foam::ReactingMultiphaseParcel<ParcelType>::propHeader = + ReactingParcel<ParcelType>::propHeader + + " nGas(Y1..YN)" + + " nLiquid(Y1..YN)" + + " nSolid(Y1..YN)"; + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ParcelType> +Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel +( + const Cloud<ParcelType>& cloud, + Istream& is, + bool readFields +) +: + ReactingParcel<ParcelType>(cloud, is, readFields), + YGas_(0), + YLiquid_(0), + YSolid_(0), + canCombust_(false) +{ + if (readFields) + { + const ReactingMultiphaseCloud<ParcelType>& cR = + dynamic_cast<const ReactingMultiphaseCloud<ParcelType>&>(cloud); + + const label idGas = cR.composition().idGas(); + const label nGas = cR.composition().componentNames(idGas).size(); + const label idLiquid = cR.composition().idLiquid(); + const label nLiquid = cR.composition().componentNames(idLiquid).size(); + const label idSolid = cR.composition().idGas(); + const label nSolid = cR.composition().componentNames(idSolid).size(); + + YGas_.setSize(nGas); + YLiquid_.setSize(nLiquid); + YSolid_.setSize(nSolid); + + is >> YGas_ >> YLiquid_ >> YSolid_; + + // scale the mass fractions + const scalarField& YMix = this->Y_; + YGas_ /= YMix[GAS] + ROOTVSMALL; + YLiquid_ /= YMix[LIQ] + ROOTVSMALL; + YSolid_ /= YMix[SLD] + ROOTVSMALL; + } + + // Check state of Istream + is.check + ( + "ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel" + "(" + "const Cloud<ParcelType>&, " + "Istream&, " + "bool" + ")" + ); +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseParcel<ParcelType>::readFields +( + ReactingMultiphaseCloud<ParcelType>& c +) +{ + if (!c.size()) + { + return; + } + + ReactingParcel<ParcelType>::readFields(c); + + // Get names and sizes for each Y... + const label idGas = c.composition().idGas(); + const wordList& gasNames = c.composition().componentNames(idGas); + const label idLiquid = c.composition().idLiquid(); + const wordList& liquidNames = c.composition().componentNames(idLiquid); + const label idSolid = c.composition().idSolid(); + const wordList& solidNames = c.composition().componentNames(idSolid); + const wordList& stateLabels = c.composition().stateLabels(); + + // Set storage for each Y... for each parcel + forAllIter(typename Cloud<ParcelType>, c, iter) + { + ReactingMultiphaseParcel<ParcelType>& p = iter(); + p.YGas_.setSize(gasNames.size(), 0.0); + p.YLiquid_.setSize(liquidNames.size(), 0.0); + p.YSolid_.setSize(solidNames.size(), 0.0); + } + + // Populate YGas for each parcel + forAll(gasNames, j) + { + IOField<scalar> YGas + ( + c.fieldIOobject + ( + "Y" + gasNames[j] + stateLabels[idGas], + IOobject::MUST_READ + ) + ); + + label i = 0; + forAllIter(typename Cloud<ParcelType>, c, iter) + { + ReactingMultiphaseParcel<ParcelType>& p = iter(); + p.YGas_[j] = YGas[i++]/(p.Y()[GAS] + ROOTVSMALL); + } + } + // Populate YLiquid for each parcel + forAll(liquidNames, j) + { + IOField<scalar> YLiquid + ( + c.fieldIOobject + ( + "Y" + liquidNames[j] + stateLabels[idLiquid], + IOobject::MUST_READ + ) + ); + + label i = 0; + forAllIter(typename Cloud<ParcelType>, c, iter) + { + ReactingMultiphaseParcel<ParcelType>& p = iter(); + p.YLiquid_[j] = YLiquid[i++]/(p.Y()[LIQ] + ROOTVSMALL); + } + } + // Populate YSolid for each parcel + forAll(solidNames, j) + { + IOField<scalar> YSolid + ( + c.fieldIOobject + ( + "Y" + solidNames[j] + stateLabels[idSolid], + IOobject::MUST_READ + ) + ); + + label i = 0; + forAllIter(typename Cloud<ParcelType>, c, iter) + { + ReactingMultiphaseParcel<ParcelType>& p = iter(); + p.YSolid_[j] = YSolid[i++]/(p.Y()[SLD] + ROOTVSMALL); + } + } +} + + +template<class ParcelType> +void Foam::ReactingMultiphaseParcel<ParcelType>::writeFields +( + const ReactingMultiphaseCloud<ParcelType>& c +) +{ + ReactingParcel<ParcelType>::writeFields(c); + + label np = c.size(); + + // Write the composition fractions + if (np > 0) + { + const wordList& stateLabels = c.composition().stateLabels(); + + const label idGas = c.composition().idGas(); + const wordList& gasNames = c.composition().componentNames(idGas); + forAll(gasNames, j) + { + IOField<scalar> YGas + ( + c.fieldIOobject + ( + "Y" + gasNames[j] + stateLabels[idGas], + IOobject::NO_READ + ), + np + ); + + label i = 0; + forAllConstIter(typename Cloud<ParcelType>, c, iter) + { + const ReactingMultiphaseParcel<ParcelType>& p0 = iter(); + YGas[i++] = p0.YGas()[j]*p0.Y()[GAS]; + } + + YGas.write(); + } + + const label idLiquid = c.composition().idLiquid(); + const wordList& liquidNames = c.composition().componentNames(idLiquid); + forAll(liquidNames, j) + { + IOField<scalar> YLiquid + ( + c.fieldIOobject + ( + "Y" + liquidNames[j] + stateLabels[idLiquid], + IOobject::NO_READ + ), + np + ); + + label i = 0; + forAllConstIter(typename Cloud<ParcelType>, c, iter) + { + const ReactingMultiphaseParcel<ParcelType>& p0 = iter(); + YLiquid[i++] = p0.YLiquid()[j]*p0.Y()[LIQ]; + } + + YLiquid.write(); + } + + const label idSolid = c.composition().idSolid(); + const wordList& solidNames = c.composition().componentNames(idSolid); + forAll(solidNames, j) + { + IOField<scalar> YSolid + ( + c.fieldIOobject + ( + "Y" + solidNames[j] + stateLabels[idSolid], + IOobject::NO_READ + ), + np + ); + + label i = 0; + forAllConstIter(typename Cloud<ParcelType>, c, iter) + { + const ReactingMultiphaseParcel<ParcelType>& p0 = iter(); + YSolid[i++] = p0.YSolid()[j]*p0.Y()[SLD]; + } + + YSolid.write(); + } + } +} + + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<class ParcelType> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const ReactingMultiphaseParcel<ParcelType>& p +) +{ + scalarField YGasLoc = p.YGas()*p.Y()[0]; + scalarField YLiquidLoc = p.YLiquid()*p.Y()[1]; + scalarField YSolidLoc = p.YSolid()*p.Y()[2]; + if (os.format() == IOstream::ASCII) + { + os << static_cast<const ReactingParcel<ParcelType>&>(p) + << token::SPACE << YGasLoc + << token::SPACE << YLiquidLoc + << token::SPACE << YSolidLoc; + } + else + { + os << static_cast<const ReactingParcel<ParcelType>&>(p); + os << YGasLoc << YLiquidLoc << YSolidLoc; + } + + // Check state of Ostream + os.check + ( + "Ostream& operator<<" + "(" + "Ostream&, " + "const ReactingMultiphaseParcel<ParcelType>&" + ")" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C index 394b3ce38e017ef3d2cc6487708f17760d2b9493..b1733762e5994e12e9574d6d03c0dc552180fd2f 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C @@ -30,271 +30,225 @@ License template<class ParcelType> template<class TrackData> -void Foam::ReactingParcel<ParcelType>::updateCellQuantities +void Foam::ReactingParcel<ParcelType>::setCellValues ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - ThermoParcel<ParcelType>::updateCellQuantities(td, dt, celli); + ThermoParcel<ParcelType>::setCellValues(td, dt, cellI); - pc_ = td.pInterp().interpolate(this->position(), celli); + pc_ = td.pInterp().interpolate(this->position(), cellI); + if (pc_ < td.constProps().pMin()) + { + WarningIn + ( + "void Foam::ReactingParcel<ParcelType>::setCellValues" + "(" + "TrackData&, " + "const scalar, " + "const label" + ")" + ) << "Limiting observed pressure in cell " << cellI << " to " + << td.constProps().pMin() << nl << endl; + + pc_ = td.constProps().pMin(); + } } template<class ParcelType> template<class TrackData> -void Foam::ReactingParcel<ParcelType>::calcCoupled +void Foam::ReactingParcel<ParcelType>::cellValueSourceCorrection ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Define local properties at beginning of timestep - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - const vector U0 = this->U_; - const scalar mass0 = this->mass(); - const scalar cp0 = this->cp_; - const scalar np0 = this->nParticle_; - const scalar T0 = this->T_; - - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise transfer terms - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - - // Momentum transfer from the particle to the carrier phase - vector dUTrans = vector::zero; - - // Enthalpy transfer from the particle to the carrier phase - scalar dhTrans = 0.0; - - // Mass transfer from particle to carrier phase - // - components exist in particle already - scalarList dMassMT(td.cloud().gases().size(), 0.0); - - // Mass transfer due to surface reactions from particle to carrier phase - // - components do not necessarily exist in particle already - scalarList dMassSR(td.cloud().gases().size(), 0.0); - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate velocity - update U - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar Cud = 0.0; - const vector U1 = calcVelocity(td, dt, Cud, dUTrans); - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate heat transfer - update T - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar htc = 0.0; - scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans); - - - // ~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate mass transfer - // ~~~~~~~~~~~~~~~~~~~~~~~ - calcMassTransfer(td, dt, T0, T1, dMassMT); - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate surface reactions - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - // Initialise enthalpy retention to zero - scalar dhRet = 0.0; - - calcSurfaceReactions(td, dt, celli, T0, T1, dMassMT, dMassSR, dhRet); - - // New total mass - const scalar mass1 = mass0 - sum(dMassMT) - sum(dMassSR); - - // Correct particle temperature to account for latent heat of - // devolatilisation - T1 -= - td.constProps().Ldevol() - *sum(dMassMT) - /(0.5*(mass0 + mass1)*cp0); - - // Add retained enthalpy from surface reaction to particle and remove - // from gas - T1 += dhRet/(0.5*(mass0 + mass1)*cp0); - dhTrans -= dhRet; + scalar massCell = this->massCell(cellI); - // Correct dhTrans to account for enthalpy of evolved volatiles - dhTrans += - sum(dMassMT) - *td.cloud().composition().HGas(YGas_, 0.5*(T0 + T1)); - - // Correct dhTrans to account for enthalpy of consumed solids - dhTrans += - sum(dMassSR) - *td.cloud().composition().HSolid(YSolid_, 0.5*(T0 + T1)); + scalar addedMass = 0.0; + forAll(td.cloud().rhoTrans(), i) + { + addedMass += td.cloud().rhoTrans(i)[cellI]; + } + this->rhoc_ += addedMass/td.cloud().pMesh().cellVolumes()[cellI]; - // ~~~~~~~~~~~~~~~~~~~~~~~ - // Accumulate source terms - // ~~~~~~~~~~~~~~~~~~~~~~~ + scalar massCellNew = massCell + addedMass; + this->Uc_ += td.cloud().UTrans()[cellI]/massCellNew; - // Transfer mass lost from particle to carrier mass source - forAll(dMassMT, i) + scalar cpEff = 0; + if (addedMass > ROOTVSMALL) { - td.cloud().rhoTrans(i)[celli] += np0*(dMassMT[i] + dMassSR[i]); + forAll(td.cloud().rhoTrans(), i) + { + scalar Y = td.cloud().rhoTrans(i)[cellI]/addedMass; + cpEff += + Y*td.cloud().mcCarrierThermo().speciesData()[i].Cp(this->Tc_); + } } + const scalar cpc = td.cpInterp().psi()[cellI]; + this->cpc_ = (massCell*cpc + addedMass*cpEff)/massCellNew; - // Update momentum transfer - td.cloud().UTrans()[celli] += np0*dUTrans; - - // Accumulate coefficient to be applied in carrier phase momentum coupling - td.cloud().UCoeff()[celli] += np0*mass0*Cud; - - // Update enthalpy transfer - // - enthalpy of lost solids already accounted for - td.cloud().hTrans()[celli] += np0*dhTrans; + this->Tc_ += td.cloud().hsTrans()[cellI]/(this->cpc_*massCellNew); +} - // Accumulate coefficient to be applied in carrier phase enthalpy coupling - td.cloud().hCoeff()[celli] += np0*htc*this->areaS(); +template<class ParcelType> +Foam::scalar Foam::ReactingParcel<ParcelType>::updateMassFraction +( + const scalar mass0, + const scalarField& dMass, + scalarField& Y +) const +{ + scalar mass1 = mass0 - sum(dMass); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Remove the particle when mass falls below minimum threshold - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - if (mass1 < td.constProps().minParticleMass()) + // only update the mass fractions if the new particle mass is finite + if (mass1 > ROOTVSMALL) { - td.keepParticle = false; - - // Absorb particle(s) into carrier phase - forAll(dMassMT, i) + forAll(Y, i) { - td.cloud().rhoTrans(i)[celli] += np0*dMassMT[i]; + Y[i] = (Y[i]*mass0 - dMass[i])/mass1; } - td.cloud().hTrans()[celli] += - np0*mass1 - *( - YMixture_[0]*td.cloud().composition().HGas(YGas_, T1) - + YMixture_[2]*td.cloud().composition().HSolid(YSolid_, T1) - ); - td.cloud().UTrans()[celli] += np0*mass1*U1; } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Set new particle properties - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - else - { - this->U_ = U1; - this->T_ = T1; - this->cp_ = - YMixture_[0]*td.cloud().composition().cpGas(YGas_, T1) - + YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, T1) - + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_); - // Update particle density or diameter - if (td.constProps().constantVolume()) - { - this->rho_ = mass1/this->volume(); - } - else - { - this->d_ = cbrt(mass1/this->rho_*6.0/mathematicalConstant::pi); - } - } + return mass1; } template<class ParcelType> template<class TrackData> -void Foam::ReactingParcel<ParcelType>::calcUncoupled +void Foam::ReactingParcel<ParcelType>::calc ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Define local properties at beginning of timestep - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Define local properties at beginning of time step + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const scalar np0 = this->nParticle_; + const scalar d0 = this->d_; + const vector& U0 = this->U_; + const scalar rho0 = this->rho_; const scalar T0 = this->T_; - const scalar mass0 = this->mass(); const scalar cp0 = this->cp_; + const scalar mass0 = this->mass(); - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise transfer terms - // ~~~~~~~~~~~~~~~~~~~~~~~~~ + // Explicit momentum source for particle + vector Su = vector::zero; // Momentum transfer from the particle to the carrier phase vector dUTrans = vector::zero; - // Enthalpy transfer from the particle to the carrier phase - scalar dhTrans = 0.0; + // Explicit enthalpy source for particle + scalar Sh = 0.0; - // Mass transfer from particle to carrier phase - // - components exist in particle already - scalarList dMassMT(td.cloud().gases().size(), 0.0); + // Sensible enthalpy transfer from the particle to the carrier phase + scalar dhsTrans = 0.0; - // Mass transfer due to surface reactions from particle to carrier phase - // - components do not necessarily exist in particle already - scalarList dMassSR(td.cloud().gases().size(), 0.0); + // Phase change + // ~~~~~~~~~~~~ - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate velocity - update U - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar Cud = 0.0; - const vector U1 = calcVelocity(td, dt, Cud, dUTrans); + // Mass transfer due to phase change + scalarField dMassPC(Y_.size(), 0.0); + // Calc mass and enthalpy transfer due to phase change + calcPhaseChange + ( + td, + dt, + cellI, + d0, + T0, + U0, + mass0, + 0, + 1.0, + Y_, + dMassPC, + Sh, + dhsTrans + ); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate heat transfer - update T - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar htc = 0.0; - scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans); + // Update particle component mass and mass fractions + scalar mass1 = updateMassFraction(mass0, dMassPC, Y_); - // ~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate mass transfer - // ~~~~~~~~~~~~~~~~~~~~~~~ - calcMassTransfer(td, dt, T0, T1, dMassMT); + // Heat transfer + // ~~~~~~~~~~~~~ + // Calculate new particle temperature + scalar T1 = + calcHeatTransfer(td, dt, cellI, d0, U0, rho0, T0, cp0, Sh, dhsTrans); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate surface reactions - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise enthalpy retention to zero - scalar dhRet = 0.0; + // Motion + // ~~~~~~ - calcSurfaceReactions(td, dt, celli, T0, T1, dMassMT, dMassSR, dhRet); + // Calculate new particle velocity + vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans); - // New total mass - const scalar mass1 = mass0 - sum(dMassMT) - sum(dMassSR); + dUTrans += 0.5*(mass0 - mass1)*(U0 + U1); - // New specific heat capacity - const scalar cp1 = - YMixture_[0]*td.cloud().composition().cpGas(YGas_, T1) - + YMixture_[1]*td.cloud().composition().cpLiquid(YLiquid_, pc_, T1) - + YMixture_[2]*td.cloud().composition().cpSolid(YSolid_); + // Accumulate carrier phase source terms + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (td.cloud().coupled()) + { + // Transfer mass lost from particle to carrier mass source + forAll(dMassPC, i) + { + label gid = td.cloud().composition().localToGlobalCarrierId(0, i); + td.cloud().rhoTrans(gid)[cellI] += np0*dMassPC[i]; + td.cloud().hcTrans()[cellI] += + np0 + *dMassPC[i] + *td.cloud().mcCarrierThermo().speciesData()[gid].H(T0); + } + + // Update momentum transfer + td.cloud().UTrans()[cellI] += np0*dUTrans; + + // Update sensible enthalpy transfer + td.cloud().hsTrans()[cellI] += np0*dhsTrans; + } - // Add retained enthalpy to particle - T1 += dhRet/(mass0*0.5*(cp0 + cp1)); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Remove the particle when mass falls below minimum threshold // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (mass1 < td.constProps().minParticleMass()) { td.keepParticle = false; + + if (td.cloud().coupled()) + { + // Absorb parcel into carrier phase + forAll(Y_, i) + { + label gid = + td.cloud().composition().localToGlobalCarrierId(0, i); + td.cloud().rhoTrans(gid)[cellI] += np0*mass1*Y_[i]; + } + td.cloud().UTrans()[cellI] += np0*mass1*U1; + td.cloud().hcTrans()[cellI] += + np0*mass1*td.cloud().composition().H(0, Y_, pc_, T1); + } } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Set new particle properties // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else { - this->U_ = U1; + this->cp_ = td.cloud().composition().cp(0, Y_, pc_, T1); this->T_ = T1; - this->cp_ = cp1; + this->U_ = U1; // Update particle density or diameter if (td.constProps().constantVolume()) @@ -311,112 +265,87 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled template<class ParcelType> template<class TrackData> -void Foam::ReactingParcel<ParcelType>::calcMassTransfer +void Foam::ReactingParcel<ParcelType>::calcPhaseChange ( TrackData& td, const scalar dt, - const scalar T0, - const scalar T1, - scalarList& dMassMT + const label cellI, + const scalar d, + const scalar T, + const vector& U, + const scalar mass, + const label idPhase, + const scalar YPhase, + const scalarField& YComponents, + scalarField& dMassPC, + scalar& Sh, + scalar& dhsTrans ) { - if (td.cloud().composition().YMixture0()[1]>SMALL) - { - notImplemented - ( - "void Foam::ReactingParcel<ParcelType>::" - "calcMassTransfer(...): no treatment currently " - "available for particles containing liquid species" - ) - } - - // Check that model is active, and that the parcel temperature is - // within necessary limits for mass transfer to occur if ( - !td.cloud().massTransfer().active() - || this->T_<td.constProps().Tvap() - || this->T_<td.constProps().Tbp() + !td.cloud().phaseChange().active() + || T < td.constProps().Tvap() + || YPhase < SMALL ) { return; } - // Determine mass to add to carrier phase - const scalar mass = this->mass(); - const scalar dMassTot = td.cloud().massTransfer().calculate + // Calculate mass transfer due to phase change + td.cloud().phaseChange().calculate ( dt, - mass0_, - mass, - td.cloud().composition().YMixture0(), - YMixture_, - T0, - canCombust_ + cellI, + d, + T, + pc_, + this->Tc_, + this->muc_/(this->rhoc_ + ROOTVSMALL), + U - this->Uc_, + dMassPC ); - // Update (total) mass fractions - YMixture_[0] = (YMixture_[0]*mass - dMassTot)/(mass - dMassTot); - YMixture_[1] = YMixture_[1]*mass/(mass - dMassTot); - YMixture_[2] = 1.0 - YMixture_[0] - YMixture_[1]; + // Limit phase change mass by availability of each specie + dMassPC = min(mass*YPhase*YComponents, dMassPC); + + scalar dMassTot = sum(dMassPC); - // Add to cummulative mass transfer - forAll (YGas_, i) + // Add to cumulative phase change mass + td.cloud().addToMassPhaseChange(this->nParticle_*dMassTot); + + // Enthalphy transfer to carrier phase + label id; + forAll(YComponents, i) { - label id = td.cloud().composition().gasGlobalIds()[i]; + id = td.cloud().composition().localToGlobalCarrierId(idPhase, i); + const scalar hv = td.cloud().mcCarrierThermo().speciesData()[id].H(T); + + id = td.cloud().composition().globalIds(idPhase)[i]; + const scalar hl = + td.cloud().composition().liquids().properties()[id].h(pc_, T); - // Mass transfer - scalar volatileMass = YGas_[i]*dMassTot; - dMassMT[id] += volatileMass; + Sh += dMassPC[i]*(hl - hv)/dt; } } -template<class ParcelType> -template<class TrackData> -void Foam::ReactingParcel<ParcelType>::calcSurfaceReactions +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::ReactingParcel<ParcelType>::ReactingParcel ( - TrackData& td, - const scalar dt, - const label celli, - const scalar T0, - const scalar T1, - const scalarList& dMassMT, - scalarList& dMassSR, - scalar& dhRet + const ReactingParcel<ParcelType>& p ) -{ - // Check that model is active - if (!td.cloud().surfaceReaction().active() || !canCombust_) - { - return; - } - - // Update mass transfer(s) - // - Also updates Y()'s - td.cloud().surfaceReaction().calculate - ( - dt, - celli, - this->d_, - T0, - T1, - this->Tc_, - pc_, - this->rhoc_, - this->mass(), - dMassMT, - YGas_, - YLiquid_, - YSolid_, - YMixture_, - dMassSR, - dhRet - ); -} +: + ThermoParcel<ParcelType>(p), + mass0_(p.mass0_), + Y_(p.Y_), + pc_(p.pc_) +{} -// * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * // +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "ReactingParcelIO.C" diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H index 2a29e35ac53c9c87646c88e4bb1ea5d8998efe35..8e351f96f098362f9532da369751e16ced11bcbe 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H @@ -26,9 +26,8 @@ Class Foam::ReactingParcel Description - Reactinf parcel class with one/two-way coupling with the continuous - phase. Includes thermo parcel sub-models, plus: - - combustion + Reacting parcel class with one/two-way coupling with the continuous + phase. SourceFiles ReactingParcelI.H @@ -47,6 +46,7 @@ SourceFiles #include "ThermoParcel.H" #include "ReactingCloud.H" +#include "reactingParcel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -70,9 +70,9 @@ Ostream& operator<< template<class ParcelType> class ReactingParcel : + public reactingParcel, public ThermoParcel<ParcelType> { - public: //- Class to hold reacting particle constant properties @@ -80,40 +80,33 @@ public: : public ThermoParcel<ParcelType>::constantProperties { - // Private data - //- Vapourisation temperature [K] - const scalar Tvap_; - - //- Boiling point [K] - const scalar Tbp_; - - //- Latent heat of devolatilisation [J/kg] - const scalar Ldevol_; + //- Minimum pressure [Pa] + const scalar pMin_; //- Constant volume flag - e.g. during mass transfer Switch constantVolume_; + //- Vaporisation temperature [K] + const scalar Tvap_; + public: //- Constructor - constantProperties(const dictionary& dict); + constantProperties(const dictionary& parentDict); // Access - //- Return const access to the vapourisation temperature - inline scalar Tvap() const; - - //- Return const access to the boiling point - inline scalar Tbp() const; - - //- Return const access to the latent heat of devolatilisation - inline scalar Ldevol() const; + //- Return const access to the minimum pressure + inline scalar pMin() const; //- Return const access to the constant volume flag inline Switch constantVolume() const; + + //- Return const access to the vaporisation temperature + inline scalar Tvap() const; }; @@ -162,7 +155,7 @@ public: //- Return const access to the constant properties inline const constantProperties& constProps() const; - //- Return conat access to the interpolator for continuous + //- Return const access to the interpolator for continuous // phase pressure field inline const interpolation<scalar>& pInterp() const; }; @@ -178,20 +171,7 @@ protected: scalar mass0_; //- Mass fractions of mixture [] - scalarField YMixture_; - - //- Mass fractions of gases [] - scalarField YGas_; - - //- Mass fractions of liquids [] - scalarField YLiquid_; - - //- Mass fractions of solids [] - scalarField YSolid_; - - //- Flag to say that the particle is allowed to combust - // Only true after volatile content falls below threshold value - bool canCombust_; + scalarField Y_; // Cell-based quantities @@ -202,56 +182,70 @@ protected: // Protected member functions - //- Calculate mass transfer + //- Calculate Phase change template<class TrackData> - void calcMassTransfer + void calcPhaseChange ( TrackData& td, - const scalar dt, - const scalar T0, - const scalar T1, - scalarList& dMassMT + const scalar dt, // timestep + const label cellI, // owner cell + const scalar d, // diameter + const scalar T, // temperature + const vector& U, // velocity + const scalar mass, // mass + const label idPhase, // id of phase involved in phase change + const scalar YPhase, // total mass fraction + const scalarField& YComponents, // component mass fractions + scalarField& dMassPC, // mass transfer - local to particle + scalar& Sh, // explicit particle enthalpy source + scalar& dhsTrans // sensible enthalpy transfer to carrier ); - //- Calculate surface reactions - template<class TrackData> - void calcSurfaceReactions + //- Update mass fraction + scalar updateMassFraction ( - TrackData& td, - const scalar dt, - const label celli, - const scalar T0, - const scalar T1, - const scalarList& dMassMT, - scalarList& dMassSR, - scalar& dhRet - ); + const scalar mass0, + const scalarField& dMass, + scalarField& Y + ) const; public: - //- Runtime type information - TypeName("ReactingParcel"); + // Static data members + + //- String representation of properties + static string propHeader; + + //- Runtime type information + TypeName("ReactingParcel"); + friend class Cloud<ParcelType>; // Constructors + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + inline ReactingParcel + ( + ReactingCloud<ParcelType>& owner, + const vector& position, + const label cellI + ); + //- Construct from components inline ReactingParcel ( ReactingCloud<ParcelType>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, - const scalarField& YGas0, - const scalarField& YLiquid0, - const scalarField& YSolid0, - const scalarField& YMixture0, + const scalarField& Y0, const constantProperties& constProps ); @@ -263,10 +257,13 @@ public: bool readFields = true ); + //- Construct as a copy + ReactingParcel(const ReactingParcel& p); + //- Construct and return a clone - autoPtr<ParcelType> clone() const + autoPtr<ReactingParcel> clone() const { - return autoPtr<ParcelType>(new ReactingParcel<ParcelType>(*this)); + return autoPtr<ReactingParcel>(new ReactingParcel(*this)); } @@ -274,74 +271,61 @@ public: // Access - //- Return const access to mass fractions of gases - inline const scalarField& YGas() const; - - //- Return const access to mass fractions of liquids - inline const scalarField& YLiquid() const; - - //- Return const access to mass fractions of solids - inline const scalarField& YSolid() const; - - //- Return const access to mass fractions of mixture - inline const scalarField& YMixture() const; - //- Return const access to initial mass inline scalar mass0() const; + //- Return const access to mass fractions of mixture + inline const scalarField& Y() const; - // Edit - - //- Return access to mass fractions of gases - inline scalarField& YGas(); - - //- Return access to mass fractions of liquids - inline scalarField& YLiquid(); + //- Return the owner cell pressure + inline scalar pc() const; - //- Return access to mass fractions of solids - inline scalarField& YSolid(); - //- Return access to mass fractions of mixture - inline scalarField& YMixture(); + // Edit //- Return access to initial mass inline scalar& mass0(); + //- Return access to mass fractions of mixture + inline scalarField& Y(); + // Main calculation loop - //- Update cell based quantities + //- Set cell values template<class TrackData> - void updateCellQuantities + void setCellValues ( TrackData& td, const scalar dt, - const label celli + const label cellI ); - //- Coupled calculation with the continuous phase + //- Correct cell values using latest transfer information template<class TrackData> - void calcCoupled + void cellValueSourceCorrection ( TrackData& td, const scalar dt, - const label celli + const label cellI ); - //- Uncoupled calculation with the continuous phase + //- Update parcel properties over the time interval template<class TrackData> - void calcUncoupled + void calc ( TrackData& td, const scalar dt, - const label + const label cellI ); // I-O + //- Read static void readFields(ReactingCloud<ParcelType>& c); + //- Write static void writeFields(const ReactingCloud<ParcelType>& c); @@ -374,4 +358,3 @@ public: #endif // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H index d4db4722d673bdcc400ea9b36784a2d277288c0d..5c2b3c7b2d4b0fb885052120a4eec448831e01d7 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelI.H @@ -29,14 +29,13 @@ License template<class ParcelType> inline Foam::ReactingParcel<ParcelType>::constantProperties::constantProperties ( - const dictionary& dict + const dictionary& parentDict ) : - ThermoParcel<ParcelType>::constantProperties(dict), - Tvap_(dimensionedScalar(dict.lookup("Tvap")).value()), - Tbp_(dimensionedScalar(dict.lookup("Tbp")).value()), - Ldevol_(dimensionedScalar(dict.lookup("Ldevol")).value()), - constantVolume_(dict.lookup("constantVolume")) + ThermoParcel<ParcelType>::constantProperties(parentDict), + pMin_(dimensionedScalar(this->dict().lookup("pMin")).value()), + constantVolume_(this->dict().lookup("constantVolume")), + Tvap_(dimensionedScalar(this->dict().lookup("Tvap")).value()) {} @@ -75,35 +74,44 @@ template<class ParcelType> inline Foam::ReactingParcel<ParcelType>::ReactingParcel ( ReactingCloud<ParcelType>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI +) +: + ThermoParcel<ParcelType>(owner, position, cellI), + mass0_(0.0), + Y_(0), + pc_(0.0) +{} + + +template<class ParcelType> +inline Foam::ReactingParcel<ParcelType>::ReactingParcel +( + ReactingCloud<ParcelType>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, - const scalarField& YGas0, - const scalarField& YLiquid0, - const scalarField& YSolid0, - const scalarField& YMixture0, + const scalarField& Y0, const constantProperties& constProps ) : ThermoParcel<ParcelType> ( owner, - typeId, position, - celli, + cellI, + typeId, + nParticle0, d0, U0, - nParticle0, constProps ), mass0_(0.0), - YMixture_(YMixture0), - YGas_(YGas0), - YLiquid_(YLiquid0), - YSolid_(YSolid0), + Y_(Y0), pc_(0.0) { // Set initial parcel mass @@ -115,33 +123,25 @@ inline Foam::ReactingParcel<ParcelType>::ReactingParcel template<class ParcelType> inline Foam::scalar -Foam::ReactingParcel<ParcelType>::constantProperties::Tvap() const +Foam::ReactingParcel<ParcelType>::constantProperties::pMin() const { - return Tvap_; + return pMin_; } template<class ParcelType> -inline Foam::scalar -Foam::ReactingParcel<ParcelType>::constantProperties::Tbp() const +inline Foam::Switch +Foam::ReactingParcel<ParcelType>::constantProperties::constantVolume() const { - return Tbp_; + return constantVolume_; } template<class ParcelType> inline Foam::scalar -Foam::ReactingParcel<ParcelType>::constantProperties::Ldevol() const -{ - return Ldevol_; -} - - -template<class ParcelType> -inline Foam::Switch -Foam::ReactingParcel<ParcelType>::constantProperties::constantVolume() const +Foam::ReactingParcel<ParcelType>::constantProperties::Tvap() const { - return constantVolume_; + return Tvap_; } @@ -174,72 +174,37 @@ Foam::ReactingParcel<ParcelType>::trackData::pInterp() const // * * * * * * * * * * ThermoParcel Member Functions * * * * * * * * * * * * // template<class ParcelType> -inline const Foam::scalarField& Foam::ReactingParcel<ParcelType>::YGas() const -{ - return YGas_; -} - - -template<class ParcelType> -inline Foam::scalarField& Foam::ReactingParcel<ParcelType>::YGas() -{ - return YGas_; -} - - -template<class ParcelType> -inline const Foam::scalarField& Foam::ReactingParcel<ParcelType>::YLiquid() const -{ - return YLiquid_; -} - - -template<class ParcelType> -inline Foam::scalarField& Foam::ReactingParcel<ParcelType>::YLiquid() -{ - return YLiquid_; -} - - -template<class ParcelType> -inline const Foam::scalarField& Foam::ReactingParcel<ParcelType>::YSolid() const -{ - return YSolid_; -} - - -template<class ParcelType> -inline Foam::scalarField& Foam::ReactingParcel<ParcelType>::YSolid() +inline Foam::scalar Foam::ReactingParcel<ParcelType>::mass0() const { - return YSolid_; + return mass0_; } template<class ParcelType> -inline const Foam::scalarField& Foam::ReactingParcel<ParcelType>::YMixture() const +inline const Foam::scalarField& Foam::ReactingParcel<ParcelType>::Y() const { - return YMixture_; + return Y_; } template<class ParcelType> -inline Foam::scalarField& Foam::ReactingParcel<ParcelType>::YMixture() +inline Foam::scalar Foam::ReactingParcel<ParcelType>::pc() const { - return YMixture_; + return pc_; } template<class ParcelType> -inline Foam::scalar Foam::ReactingParcel<ParcelType>::mass0() const +inline Foam::scalar& Foam::ReactingParcel<ParcelType>::mass0() { return mass0_; } template<class ParcelType> -inline Foam::scalar& Foam::ReactingParcel<ParcelType>::mass0() +inline Foam::scalarField& Foam::ReactingParcel<ParcelType>::Y() { - return mass0_; + return Y_; } diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C index fb9a9142736a0870a43cb5ac661f893b4432e18d..b72d2af25a20f7525bd461f8aa1b24f07e4bf8b7 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcelIO.C @@ -27,6 +27,15 @@ License #include "ReactingParcel.H" #include "IOstreams.H" +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::string Foam::ReactingParcel<ParcelType>::propHeader = + ThermoParcel<ParcelType>::propHeader + + " mass0" + + " nPhases(Y1..YN)"; + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ParcelType> @@ -39,33 +48,20 @@ Foam::ReactingParcel<ParcelType>::ReactingParcel : ThermoParcel<ParcelType>(cloud, is, readFields), mass0_(0.0), - YMixture_(0), - YGas_(0), - YLiquid_(0), - YSolid_(0), + Y_(0), pc_(0.0) { if (readFields) { const ReactingCloud<ParcelType>& cR = - dynamic_cast<const ReactingCloud<ParcelType>& >(cloud); + dynamic_cast<const ReactingCloud<ParcelType>&>(cloud); - const label nMixture = cR.composition().compositionNames().size(); - const label nGas = cR.composition().gasNames().size(); - const label nLiquid = cR.composition().liquidNames().size(); - const label nSolid = cR.composition().solidNames().size(); - - YMixture_.setSize(nMixture); - YGas_.setSize(nGas); - YLiquid_.setSize(nLiquid); - YSolid_.setSize(nSolid); + const label nMixture = cR.composition().phaseTypes().size(); + Y_.setSize(nMixture); if (is.format() == IOstream::ASCII) { - is >> mass0_ >> YMixture_ >> YGas_ >> YLiquid_ >> YSolid_; - YGas_ /= YMixture_[0] + VSMALL; - YLiquid_ /= YMixture_[1] + VSMALL; - YSolid_ /= YMixture_[2] + VSMALL; + is >> mass0_ >> Y_; } else { @@ -74,10 +70,7 @@ Foam::ReactingParcel<ParcelType>::ReactingParcel reinterpret_cast<char*>(&mass0_), + sizeof(mass0_) ); - is >> YMixture_ >> YGas_ >> YLiquid_ >> YSolid_; - YGas_ /= YMixture_[0] + VSMALL; - YLiquid_ /= YMixture_[1] + VSMALL; - YSolid_ /= YMixture_[2] + VSMALL; + is >> Y_; } } @@ -85,7 +78,11 @@ Foam::ReactingParcel<ParcelType>::ReactingParcel is.check ( "ReactingParcel<ParcelType>::ReactingParcel" - "(const Cloud<ParcelType>&, Istream&, bool)" + "(" + "const Cloud<ParcelType>&, " + "Istream&, " + "bool" + ")" ); } @@ -114,83 +111,39 @@ void Foam::ReactingParcel<ParcelType>::readFields } // Get names and sizes for each Y... - const wordList compositionNames = c.composition().compositionNames(); - const wordList gasNames = c.composition().gasNames(); - const wordList liquidNames = c.composition().liquidNames(); - const wordList solidNames = c.composition().solidNames(); - const label nComposition = compositionNames.size(); - const label nGas = gasNames.size(); - const label nLiquid = liquidNames.size(); - const label nSolid = solidNames.size(); - - // Set storage for each Y... for each parcel - forAllIter(typename Cloud<ParcelType>, c, iter) + const wordList& phaseTypes = c.composition().phaseTypes(); + const label nPhases = phaseTypes.size(); + wordList stateLabels(nPhases, ""); + if (c.composition().nPhase() == 1) { - ReactingParcel<ParcelType>& p = iter(); - p.YMixture_.setSize(nComposition, 0.0); - p.YGas_.setSize(nGas, 0.0); - p.YLiquid_.setSize(nLiquid, 0.0); - p.YSolid_.setSize(nSolid, 0.0); + stateLabels = c.composition().stateLabels(); } - // Populate YMixture for each parcel - forAll(compositionNames, j) - { - IOField<scalar> YMixture - ( - c.fieldIOobject("Y" + compositionNames[j], IOobject::MUST_READ) - ); - label i = 0; - forAllIter(typename Cloud<ParcelType>, c, iter) - { - ReactingParcel<ParcelType>& p = iter(); - p.YMixture_[j] = YMixture[i++]; - } - } - // Populate YGas for each parcel - forAll(gasNames, j) + // Set storage for each Y... for each parcel + forAllIter(typename Cloud<ParcelType>, c, iter) { - IOField<scalar> YGas - ( - c.fieldIOobject("Y" + gasNames[j], IOobject::MUST_READ) - ); - - label i = 0; - forAllIter(typename Cloud<ParcelType>, c, iter) - { - ReactingParcel<ParcelType>& p = iter(); - p.YGas_[j] = YGas[i++]/p.YMixture_[0]; - } + ReactingParcel<ParcelType>& p = iter(); + p.Y_.setSize(nPhases, 0.0); } - // Populate YLiquid for each parcel - forAll(liquidNames, j) - { - IOField<scalar> YLiquid - ( - c.fieldIOobject("Y" + liquidNames[j], IOobject::MUST_READ) - ); - label i = 0; - forAllIter(typename Cloud<ParcelType>, c, iter) - { - ReactingParcel<ParcelType>& p = iter(); - p.YLiquid_[j] = YLiquid[i++]/p.YMixture_[1]; - } - } - // Populate YSolid for each parcel - forAll(solidNames, j) + // Populate Y for each parcel + forAll(phaseTypes, j) { - IOField<scalar> YSolid + IOField<scalar> Y ( - c.fieldIOobject("Y" + solidNames[j], IOobject::MUST_READ) + c.fieldIOobject + ( + "Y" + phaseTypes[j] + stateLabels[j], + IOobject::MUST_READ + ) ); label i = 0; forAllIter(typename Cloud<ParcelType>, c, iter) { ReactingParcel<ParcelType>& p = iter(); - p.YSolid_[j] = YSolid[i++]/p.YMixture_[2]; + p.Y_[j] = Y[i++]; } } } @@ -204,82 +157,37 @@ void Foam::ReactingParcel<ParcelType>::writeFields { ThermoParcel<ParcelType>::writeFields(c); - label np = c.size(); - - IOField<scalar> mass0(c.fieldIOobject("mass0", IOobject::NO_READ), np); + const label np = c.size(); - label i = 0; - forAllConstIter(typename Cloud<ParcelType>, c, iter) - { - const ReactingParcel<ParcelType>& p = iter(); - mass0[i++] = p.mass0_; - } - - mass0.write(); - - // Write the composition fractions if (np > 0) { - const wordList compositionNames = c.composition().compositionNames(); - forAll(compositionNames, j) - { - IOField<scalar> YMixture - ( - c.fieldIOobject("Y" + compositionNames[j], IOobject::NO_READ), - np - ); - - label i = 0; - forAllConstIter(typename Cloud<ParcelType>, c, iter) - { - const ReactingParcel<ParcelType>& p0 = iter(); - YMixture[i++] = p0.YMixture()[j]; - } + IOField<scalar> mass0(c.fieldIOobject("mass0", IOobject::NO_READ), np); - YMixture.write(); - } - const wordList& gasNames = c.composition().gasNames(); - forAll(gasNames, j) + label i = 0; + forAllConstIter(typename Cloud<ParcelType>, c, iter) { - IOField<scalar> YGas - ( - c.fieldIOobject("Y" + gasNames[j], IOobject::NO_READ), - np - ); - - label i = 0; - forAllConstIter(typename Cloud<ParcelType>, c, iter) - { - const ReactingParcel<ParcelType>& p0 = iter(); - YGas[i++] = p0.YGas()[j]*p0.YMixture()[0]; - } - - YGas.write(); + const ReactingParcel<ParcelType>& p = iter(); + mass0[i++] = p.mass0_; } - const wordList& liquidNames = c.composition().liquidNames(); - forAll(liquidNames, j) - { - IOField<scalar> YLiquid - ( - c.fieldIOobject("Y" + liquidNames[j], IOobject::NO_READ), - np - ); + mass0.write(); - label i = 0; - forAllConstIter(typename Cloud<ParcelType>, c, iter) - { - const ReactingParcel<ParcelType>& p0 = iter(); - YLiquid[i++] = p0.YLiquid()[j]*p0.YMixture()[1]; - } - - YLiquid.write(); + // Write the composition fractions + const wordList& phaseTypes = c.composition().phaseTypes(); + wordList stateLabels(phaseTypes.size(), ""); + if (c.composition().nPhase() == 1) + { + stateLabels = c.composition().stateLabels(); } - const wordList& solidNames = c.composition().solidNames(); - forAll(solidNames, j) + + forAll(phaseTypes, j) { - IOField<scalar> YSolid + IOField<scalar> Y ( - c.fieldIOobject("Y" + solidNames[j], IOobject::NO_READ), + c.fieldIOobject + ( + "Y" + phaseTypes[j] + stateLabels[j], + IOobject::NO_READ + ), np ); @@ -287,10 +195,10 @@ void Foam::ReactingParcel<ParcelType>::writeFields forAllConstIter(typename Cloud<ParcelType>, c, iter) { const ReactingParcel<ParcelType>& p0 = iter(); - YSolid[i++] = p0.YSolid()[j]*p0.YMixture()[2]; + Y[i++] = p0.Y()[j]; } - YSolid.write(); + Y.write(); } } } @@ -305,27 +213,21 @@ Foam::Ostream& Foam::operator<< const ReactingParcel<ParcelType>& p ) { - scalarField YGasLoc = p.YGas()*p.YMixture()[0]; - scalarField YLiquidLoc = p.YLiquid()*p.YMixture()[1]; - scalarField YSolidLoc = p.YSolid()*p.YMixture()[2]; if (os.format() == IOstream::ASCII) { - os << static_cast<const ThermoParcel<ParcelType>& >(p) + os << static_cast<const ThermoParcel<ParcelType>&>(p) << token::SPACE << p.mass0() - << token::SPACE << p.YMixture() - << token::SPACE << YGasLoc - << token::SPACE << YLiquidLoc - << token::SPACE << YSolidLoc; + << token::SPACE << p.Y(); } else { - os << static_cast<const ThermoParcel<ParcelType>& >(p); + os << static_cast<const ThermoParcel<ParcelType>&>(p); os.write ( reinterpret_cast<const char*>(&p.mass0_), sizeof(p.mass0()) ); - os << p.YMixture() << YGasLoc << YLiquidLoc << YSolidLoc; + os << p.Y(); } // Check state of Ostream diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C index 16854519d04f47a6eba987ed11d12cf6162006fc..6449b95dbacdf47a075589230aeb425d026f4bb1 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C @@ -30,121 +30,114 @@ License template<class ParcelType> template<class TrackData> -void Foam::ThermoParcel<ParcelType>::updateCellQuantities +void Foam::ThermoParcel<ParcelType>::setCellValues ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - KinematicParcel<ParcelType>::updateCellQuantities(td, dt, celli); + KinematicParcel<ParcelType>::setCellValues(td, dt, cellI); - Tc_ = td.TInterp().interpolate(this->position(), celli); - cpc_ = td.cpInterp().interpolate(this->position(), celli); + cpc_ = td.cpInterp().interpolate(this->position(), cellI); + + Tc_ = td.TInterp().interpolate(this->position(), cellI); + + if (Tc_ < td.constProps().TMin()) + { + WarningIn + ( + "void Foam::ThermoParcel<ParcelType>::setCellValues" + "(" + "TrackData&, " + "const scalar, " + "const label" + ")" + ) << "Limiting observed temperature in cell " << cellI << " to " + << td.constProps().TMin() << nl << endl; + + Tc_ = td.constProps().TMin(); + } } template<class ParcelType> template<class TrackData> -void Foam::ThermoParcel<ParcelType>::calcCoupled +void Foam::ThermoParcel<ParcelType>::cellValueSourceCorrection ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Define local properties at beginning of timestep - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - const vector U0 = this->U_; - const scalar mass0 = this->mass(); - const scalar np0 = this->nParticle_; -// const scalar T0 = T_; -// const scalar cp0 = cp_; - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise transfer terms - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - - // Momentum transfer from the particle to the carrier phase - vector dUTrans = vector::zero; - - // Enthalpy transfer from the particle to the carrier phase - scalar dhTrans = 0.0; - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate velocity - update U - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar Cud = 0.0; - const vector U1 = calcVelocity(td, dt, Cud, dUTrans); + this->Uc_ += td.cloud().UTrans()[cellI]/this->massCell(cellI); - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate heat transfer - update T - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar htc = 0.0; - const scalar T1 = calcHeatTransfer(td, dt, celli, htc, dhTrans); - - - // ~~~~~~~~~~~~~~~~~~~~~~~ - // Accumulate source terms - // ~~~~~~~~~~~~~~~~~~~~~~~ - - // Update momentum transfer - td.cloud().UTrans()[celli] += np0*dUTrans; - - // Accumulate coefficient to be applied in carrier phase momentum coupling - td.cloud().UCoeff()[celli] += np0*mass0*Cud; - - // Update enthalpy transfer - td.cloud().hTrans()[celli] += np0*dhTrans; - - // Accumulate coefficient to be applied in carrier phase enthalpy coupling - td.cloud().hCoeff()[celli] += np0*htc*this->areaS(); - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Set new particle properties - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - this->U() = U1; - this->T() = T1; + scalar cpMean = td.cpInterp().psi()[cellI]; + Tc_ += td.cloud().hsTrans()[cellI]/(cpMean*this->massCell(cellI)); } template<class ParcelType> template<class TrackData> -void Foam::ThermoParcel<ParcelType>::calcUncoupled +void Foam::ThermoParcel<ParcelType>::calc ( TrackData& td, const scalar dt, - const label celli + const label cellI ) { - // ~~~~~~~~~~~~~~~~~~~~~~~~~ - // Initialise transfer terms - // ~~~~~~~~~~~~~~~~~~~~~~~~~ + // Define local properties at beginning of time step + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const scalar np0 = this->nParticle_; + const scalar d0 = this->d_; + const vector U0 = this->U_; + const scalar rho0 = this->rho_; + const scalar T0 = this->T_; + const scalar cp0 = this->cp_; + const scalar mass0 = this->mass(); + + // Explicit momentum source for particle + vector Su = vector::zero; // Momentum transfer from the particle to the carrier phase vector dUTrans = vector::zero; - // Enthalpy transfer from the particle to the carrier phase - scalar dhTrans = 0.0; + // Explicit enthalpy source for particle + scalar Sh = 0.0; + + // Sensible enthalpy transfer from the particle to the carrier phase + scalar dhsTrans = 0.0; + + // Heat transfer + // ~~~~~~~~~~~~~ + + // Calculate new particle velocity + scalar T1 = + calcHeatTransfer(td, dt, cellI, d0, U0, rho0, T0, cp0, Sh, dhsTrans); + + + // Motion + // ~~~~~~ + // Calculate new particle velocity + vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans); - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate velocity - update U - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar Cud = 0.0; - this->U_ = calcVelocity(td, dt, Cud, dUTrans); + // Accumulate carrier phase source terms + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (td.cloud().coupled()) + { + // Update momentum transfer + td.cloud().UTrans()[cellI] += np0*dUTrans; + + // Update sensible enthalpy transfer + td.cloud().hsTrans()[cellI] += np0*dhsTrans; + } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Calculate heat transfer - update T - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - scalar htc = 0.0; - T_ = calcHeatTransfer(td, dt, celli, htc, dhTrans); + // Set new particle properties + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + this->U_ = U1; + T_ = T1; } @@ -154,69 +147,93 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer ( TrackData& td, const scalar dt, - const label celli, - scalar& htc, - scalar& dhTrans + const label cellI, + const scalar d, + const vector& U, + const scalar rho, + const scalar T, + const scalar cp, + const scalar Sh, + scalar& dhsTrans ) { if (!td.cloud().heatTransfer().active()) { - htc = 0.0; - dhTrans = 0.0; - return T_; + return T; } // Calc heat transfer coefficient - htc = td.cloud().heatTransfer().h + scalar htc = td.cloud().heatTransfer().h ( - this->d_, - this->U_ - this->Uc_, + d, + U - this->Uc_, this->rhoc_, - this->rho_, + rho, cpc_, - cp_, + cp, this->muc_ ); - // Determine ap and bp coefficients - scalar ap = Tc_; - scalar bp = htc; - if (td.cloud().radiation()) + const scalar As = this->areaS(d); + + if (mag(htc) < ROOTVSMALL && !td.cloud().radiation()) { - // Carrier phase incident radiation field - // - The G field is not interpolated to the parcel position - // Instead, the cell centre value is applied directly - const scalarField& G = td.cloud().mesh().objectRegistry - ::lookupObject<volScalarField>("G"); + return T + dt*Sh/(this->volume(d)*rho*cp); + } + + scalar ap; + scalar bp; - // Helper variables + if (td.cloud().radiation()) + { + const scalarField& G = + td.cloud().mesh().objectRegistry::lookupObject<volScalarField>("G"); const scalar sigma = radiation::sigmaSB.value(); const scalar epsilon = td.constProps().epsilon0(); - const scalar epsilonSigmaT3 = epsilon*sigma*pow3(T_); - ap = (htc*Tc_ + 0.25*epsilon*G[celli])/(htc + epsilonSigmaT3); - bp += epsilonSigmaT3; - } - bp *= 6.0/(this->rho_*this->d_*cp_); + ap = + (Sh/As + htc*Tc_ + epsilon*G[cellI]/4.0) + /(htc + epsilon*sigma*pow3(T)); - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Set new particle temperature - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + bp = + 6.0 + *(Sh/As + htc*(Tc_ - T) + epsilon*(G[cellI]/4.0 - sigma*pow4(T))) + /(rho*d*cp*(ap - T)); + } + else + { + ap = Tc_ + Sh/As/htc; + bp = 6.0*(Sh/As + htc*(Tc_ - T))/(rho*d*cp*(ap - T)); + } // Integrate to find the new parcel temperature IntegrationScheme<scalar>::integrationResult Tres = - td.cloud().TIntegrator().integrate(T_, dt, ap, bp); + td.cloud().TIntegrator().integrate(T, dt, ap, bp); - // Using average parcel temperature for enthalpy transfer calculation - dhTrans = dt*this->areaS()*htc*(Tres.average() - Tc_); + dhsTrans += dt*htc*As*(Tres.average() - Tc_); return Tres.value(); } -// * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::ThermoParcel<ParcelType>::ThermoParcel +( + const ThermoParcel<ParcelType>& p +) +: + KinematicParcel<ParcelType>(p), + T_(p.T_), + cp_(p.cp_), + Tc_(p.Tc_), + cpc_(p.cpc_) +{} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "ThermoParcelIO.C" // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H index 9d54beba256a5a8318db89ecb291b41384f75b0a..c11fecd11dc9166cfe5f1753686cf6bcd6030132 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.H @@ -72,7 +72,6 @@ class ThermoParcel : public KinematicParcel<ParcelType> { - public: //- Class to hold thermo particle constant properties @@ -86,6 +85,9 @@ public: //- Particle initial temperature [K] const scalar T0_; + //- Minimum temperature [K] + const scalar TMin_; + //- Particle specific heat capacity [J/(kg.K)] const scalar cp0_; @@ -99,24 +101,28 @@ public: public: // Constructors - constantProperties(const dictionary& dict); + constantProperties(const dictionary& parentDict); // Member functions // Access - //- Return const access to particle initial temperature [K] + //- Return const access to the particle initial temperature [K] inline scalar T0() const; - //- Return const access to particle specific heat capacity + //- Return const access to minimum temperature [K] + inline scalar TMin() const; + + //- Return const access to the particle specific heat capacity // [J/(kg.K)] inline scalar cp0() const; - //- Return const access to Particle emissivity [] (radiation) + //- Return const access to the particle emissivity [] + // Active for radiation only inline scalar epsilon0() const; - //- Return const access to Particle scattering factor [] - // (radiation) + //- Return const access to the particle scattering factor [] + // Active for radiation only inline scalar f0() const; }; @@ -140,7 +146,7 @@ public: //- Temperature field interpolator const interpolation<scalar>& TInterp_; - //- Scpecific heat capacity field interpolator + //- Specific heat capacity field interpolator const interpolation<scalar>& cpInterp_; @@ -170,11 +176,11 @@ public: //- Return const access to the owner cloud inline const constantProperties& constProps() const; - //- Return conat access to the interpolator for continuous + //- Return const access to the interpolator for continuous // phase temperature field inline const interpolation<scalar>& TInterp() const; - //- Return conat access to the interpolator for continuous + //- Return const access to the interpolator for continuous // phase specific heat capacity field inline const interpolation<scalar>& cpInterp() const; }; @@ -209,33 +215,53 @@ protected: scalar calcHeatTransfer ( TrackData& td, - const scalar dt, - const label celli, - scalar& htc, - scalar& dhTrans + const scalar dt, // timestep + const label cellI, // owner cell + const scalar d, // diameter + const vector& U, // velocity + const scalar rho, // density + const scalar T, // temperature + const scalar cp, // specific heat capacity + const scalar Sh, // explicit particle enthalpy source + scalar& dhsTrans // sensible enthalpy transfer to carrier ); public: - //- Runtime type information - TypeName("ThermoParcel"); + // Static data members + + //- String representation of properties + static string propHeader; + + //- Runtime type information + TypeName("ThermoParcel"); + friend class Cloud<ParcelType>; // Constructors + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + inline ThermoParcel + ( + ThermoCloud<ParcelType>& owner, + const vector& position, + const label cellI + ); + //- Construct from components inline ThermoParcel ( ThermoCloud<ParcelType>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ); @@ -247,10 +273,13 @@ public: bool readFields = true ); + //- Construct as a copy + ThermoParcel(const ThermoParcel& p); + //- Construct and return a clone - autoPtr<ParcelType> clone() const + autoPtr<ThermoParcel> clone() const { - return autoPtr<ParcelType>(new ThermoParcel<ParcelType>(*this)); + return autoPtr<ThermoParcel>(new ThermoParcel(*this)); } @@ -276,38 +305,40 @@ public: // Main calculation loop - //- Update cell based quantities + //- Set cell values template<class TrackData> - void updateCellQuantities + void setCellValues ( TrackData& td, const scalar dt, - const label celli + const label cellI ); - //- Coupled calculation with the continuous phase + //- Correct cell values using latest transfer information template<class TrackData> - void calcCoupled + void cellValueSourceCorrection ( TrackData& td, const scalar dt, - const label celli + const label cellI ); - //- Uncoupled calculation with the continuous phase + //- Update parcel properties over the time interval template<class TrackData> - void calcUncoupled + void calc ( TrackData& td, const scalar dt, - const label + const label cellI ); // I-O + //- Read static void readFields(ThermoCloud<ParcelType>& c); + //- Write static void writeFields(const ThermoCloud<ParcelType>& c); @@ -340,4 +371,3 @@ public: #endif // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H index f1f6e1d8fdec3dcc61cc2fd734e7ab3d17235df7..8ce0cb56915196a30a7348af7582c64161d17523 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelI.H @@ -29,14 +29,15 @@ License template<class ParcelType> inline Foam::ThermoParcel<ParcelType>::constantProperties::constantProperties ( - const dictionary& dict + const dictionary& parentDict ) : - KinematicParcel<ParcelType>::constantProperties(dict), - T0_(dimensionedScalar(dict.lookup("T0")).value()), - cp0_(dimensionedScalar(dict.lookup("cp0")).value()), - epsilon0_(dimensionedScalar(dict.lookup("epsilon0")).value()), - f0_(dimensionedScalar(dict.lookup("f0")).value()) + KinematicParcel<ParcelType>::constantProperties(parentDict), + T0_(dimensionedScalar(this->dict().lookup("T0")).value()), + TMin_(dimensionedScalar(this->dict().lookup("TMin")).value()), + cp0_(dimensionedScalar(this->dict().lookup("cp0")).value()), + epsilon0_(dimensionedScalar(this->dict().lookup("epsilon0")).value()), + f0_(dimensionedScalar(this->dict().lookup("f0")).value()) {} @@ -73,24 +74,40 @@ template<class ParcelType> inline Foam::ThermoParcel<ParcelType>::ThermoParcel ( ThermoCloud<ParcelType>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI +) +: + KinematicParcel<ParcelType>(owner, position, cellI), + T_(0.0), + cp_(0.0), + Tc_(0.0), + cpc_(0.0) +{} + + +template<class ParcelType> +inline Foam::ThermoParcel<ParcelType>::ThermoParcel +( + ThermoCloud<ParcelType>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ) : KinematicParcel<ParcelType> ( owner, - typeId, position, - celli, + cellI, + typeId, + nParticle0, d0, U0, - nParticle0, constProps ), T_(constProps.T0()), @@ -110,6 +127,14 @@ Foam::ThermoParcel<ParcelType>::constantProperties::T0() const } +template <class ParcelType> +inline Foam::scalar +Foam::ThermoParcel<ParcelType>::constantProperties::TMin() const +{ + return TMin_; +} + + template <class ParcelType> inline Foam::scalar Foam::ThermoParcel<ParcelType>::constantProperties::cp0() const @@ -178,16 +203,16 @@ inline Foam::scalar Foam::ThermoParcel<ParcelType>::T() const template<class ParcelType> -inline Foam::scalar& Foam::ThermoParcel<ParcelType>::T() +inline Foam::scalar Foam::ThermoParcel<ParcelType>::cp() const { - return T_; + return cp_; } template<class ParcelType> -inline Foam::scalar Foam::ThermoParcel<ParcelType>::cp() const +inline Foam::scalar& Foam::ThermoParcel<ParcelType>::T() { - return cp_; + return T_; } diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C index 08433679bb205ef7c9044d9e75c7a9aa5a2825cc..827b2f36f41ec7f94068c8f6a7213800d2fa26bb 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcelIO.C @@ -27,6 +27,15 @@ License #include "ThermoParcel.H" #include "IOstreams.H" +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template <class ParcelType> +Foam::string Foam::ThermoParcel<ParcelType>::propHeader = + KinematicParcel<ParcelType>::propHeader + + " T" + + " cp"; + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ParcelType> @@ -140,13 +149,13 @@ Foam::Ostream& Foam::operator<< { if (os.format() == IOstream::ASCII) { - os << static_cast<const KinematicParcel<ParcelType>& >(p) + os << static_cast<const KinematicParcel<ParcelType>&>(p) << token::SPACE << p.T() << token::SPACE << p.cp(); } else { - os << static_cast<const KinematicParcel<ParcelType>& >(p); + os << static_cast<const KinematicParcel<ParcelType>&>(p); os.write ( reinterpret_cast<const char*>(&p.T_), diff --git a/src/lagrangian/intermediate/parcels/baseClasses/reactingParcel/reactingParcel.C b/src/lagrangian/intermediate/parcels/baseClasses/reactingParcel/reactingParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..2974454658e5349c0ec4ddd1a354a85b30334db8 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/baseClasses/reactingParcel/reactingParcel.C @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "reactingParcel.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(reactingParcel, 0); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::reactingParcel::reactingParcel() +{} + + +// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // + +Foam::reactingParcel::~reactingParcel() +{} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/baseClasses/reactingParcel/reactingParcel.H b/src/lagrangian/intermediate/parcels/baseClasses/reactingParcel/reactingParcel.H new file mode 100644 index 0000000000000000000000000000000000000000..e78b15347d4483d63cba2e7ef0b24a6f4727a3cc --- /dev/null +++ b/src/lagrangian/intermediate/parcels/baseClasses/reactingParcel/reactingParcel.H @@ -0,0 +1,81 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::basicReactingParcel + +Description + Base class for reacting parcel - simply used to set the contiguous flag + +SourceFiles + reactingParcel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef reactingParcel_H +#define reactingParcel_H + +#include "typeInfo.H" +#include "contiguous.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class reactingParcel Declaration +\*---------------------------------------------------------------------------*/ + +class reactingParcel +{ +public: + + //- Run-time type information + TypeName("reactingParcel"); + + //- Construct null + reactingParcel(); + + //- Destructor + virtual ~reactingParcel(); +}; + + +template<> +inline bool contiguous<reactingParcel>() +{ + return false; // Derived classes include scalar lists/fields +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/BasicReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/BasicReactingMultiphaseParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..2189d8d8be909c0a6c852955b82a9af5839e9576 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/BasicReactingMultiphaseParcel.C @@ -0,0 +1,120 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "BasicReactingMultiphaseParcel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::BasicReactingMultiphaseParcel<ThermoType>::BasicReactingMultiphaseParcel +( + ReactingMultiphaseCloud<BasicReactingMultiphaseParcel<ThermoType> >& owner, + const vector& position, + const label cellI +) +: + ReactingMultiphaseParcel<BasicReactingMultiphaseParcel<ThermoType> > + ( + owner, + position, + cellI + ) +{} + + +template<class ThermoType> +Foam::BasicReactingMultiphaseParcel<ThermoType>::BasicReactingMultiphaseParcel +( + ReactingMultiphaseCloud<BasicReactingMultiphaseParcel<ThermoType> >& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const vector& U0, + const scalarField& YGas0, + const scalarField& YLiquid0, + const scalarField& YSolid0, + const scalarField& Y0, + const typename + ReactingMultiphaseParcel<BasicReactingMultiphaseParcel>:: + constantProperties& constProps +) +: + ReactingMultiphaseParcel<BasicReactingMultiphaseParcel<ThermoType> > + ( + owner, + position, + cellI, + typeId, + nParticle0, + d0, + U0, + YGas0, + YLiquid0, + YSolid0, + Y0, + constProps + ) +{} + + +template<class ThermoType> +Foam::BasicReactingMultiphaseParcel<ThermoType>::BasicReactingMultiphaseParcel +( + const Cloud<BasicReactingMultiphaseParcel<ThermoType> >& cloud, + Istream& is, + bool readFields +) +: + ReactingMultiphaseParcel<BasicReactingMultiphaseParcel<ThermoType> > + ( + cloud, + is, + readFields + ) +{} + + +template<class ThermoType> +Foam::BasicReactingMultiphaseParcel<ThermoType>::BasicReactingMultiphaseParcel +( + const BasicReactingMultiphaseParcel<ThermoType>& p +) +: + ReactingMultiphaseParcel<BasicReactingMultiphaseParcel<ThermoType> >(p) +{} + + +// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::BasicReactingMultiphaseParcel<ThermoType>:: +~BasicReactingMultiphaseParcel() +{} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/BasicReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/BasicReactingMultiphaseParcel.H new file mode 100644 index 0000000000000000000000000000000000000000..f216f8f54780b9b87ac2d928dd9ab4e2f9fbf4c9 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/BasicReactingMultiphaseParcel.H @@ -0,0 +1,141 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::BasicReactingMultiphaseParcel + +Description + + +SourceFiles + BasicReactingMultiphaseParcel.C + BasicReactingMultiphaseParcelIO.C + +\*---------------------------------------------------------------------------*/ + +#ifndef BasicReactingMultiphaseParcel_H +#define BasicReactingMultiphaseParcel_H + +#include "ReactingMultiphaseParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +namespace Foam +{ + +// Forward declaration of classes +template<class ThermoType> +class BasicReactingMultiphaseParcel; + +/*---------------------------------------------------------------------------*\ + Class BasicReactingMultiphaseParcel Declaration +\*---------------------------------------------------------------------------*/ + +template<class ThermoType> +class BasicReactingMultiphaseParcel +: + public ReactingMultiphaseParcel<BasicReactingMultiphaseParcel<ThermoType> > +{ + +public: + + //- The type of thermodynamics this parcel was instantiated for + typedef ThermoType thermoType; + + //- Run-time type information + TypeName("BasicReactingMultiphaseParcel"); + + // Constructors + + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + BasicReactingMultiphaseParcel + ( + ReactingMultiphaseCloud<BasicReactingMultiphaseParcel>& owner, + const vector& position, + const label cellI + ); + + //- Construct from components + BasicReactingMultiphaseParcel + ( + ReactingMultiphaseCloud<BasicReactingMultiphaseParcel>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const vector& U0, + const scalarField& YGas0, + const scalarField& YLiquid0, + const scalarField& YSolid0, + const scalarField& Y0, + const typename + ReactingMultiphaseParcel<BasicReactingMultiphaseParcel>:: + constantProperties& constProps + ); + + //- Construct from Istream + BasicReactingMultiphaseParcel + ( + const Cloud<BasicReactingMultiphaseParcel>& c, + Istream& is, + bool readFields = true + ); + + //- Construct as a copy + BasicReactingMultiphaseParcel(const BasicReactingMultiphaseParcel& p); + + //- Construct and return a clone + autoPtr<BasicReactingMultiphaseParcel> clone() const + { + return + autoPtr<BasicReactingMultiphaseParcel> + ( + new BasicReactingMultiphaseParcel(*this) + ); + } + + + //- Destructor + virtual ~BasicReactingMultiphaseParcel(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "BasicReactingMultiphaseParcel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/defineBasicReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/defineBasicReactingMultiphaseParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..d73d63e9dd6d1a3dae186c26aa94faaf94767624 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/defineBasicReactingMultiphaseParcel.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "createReactingMultiphaseParcelTypes.H" +#include "BasicReactingMultiphaseParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + createReactingMultiphaseParcelType(BasicReactingMultiphaseParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C new file mode 100644 index 0000000000000000000000000000000000000000..08c87530c37f60cfc1736f1894152080b6870a85 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C @@ -0,0 +1,77 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "BasicReactingMultiphaseParcel.H" + +// Kinematic +#include "makeReactingParcelDispersionModels.H" +#include "makeReactingParcelDragModels.H" +#include "makeReactingMultiphaseParcelInjectionModels.H" // MP variant +#include "makeReactingParcelPatchInteractionModels.H" +#include "makeReactingParcelPostProcessingModels.H" + +// Thermodynamic +#include "makeReactingParcelHeatTransferModels.H" + +// Reacting +#include "makeReactingMultiphaseParcelCompositionModels.H" // MP variant +#include "makeReactingParcelPhaseChangeModels.H" + +// Reacting multiphase +#include "makeReactingMultiphaseParcelDevolatilisationModels.H" +#include "makeReactingMultiphaseParcelSurfaceReactionModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Kinematic sub-models + makeReactingDispersionModels(BasicReactingMultiphaseParcel); + makeReactingDragModels(BasicReactingMultiphaseParcel); + makeReactingMultiphaseInjectionModels(BasicReactingMultiphaseParcel); + makeReactingPatchInteractionModels(BasicReactingMultiphaseParcel); + makeReactingPostProcessingModels(BasicReactingMultiphaseParcel); + + // Thermo sub-models + makeReactingHeatTransferModels(BasicReactingMultiphaseParcel); + + // Reacting sub-models + makeReactingMultiphaseCompositionModels(BasicReactingMultiphaseParcel); + makeReactingPhaseChangeModels(BasicReactingMultiphaseParcel); + + // Reacting multiphase sub-models + makeReactingMultiphaseDevolatilisationModels + ( + BasicReactingMultiphaseParcel + ); + makeReactingMultiphaseSurfaceReactionModels + ( + BasicReactingMultiphaseParcel + ); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/BasicReactingParcel.C b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/BasicReactingParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..d2b00fdf73f3b6aef58d7d53fbe37a79f4f16f51 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/BasicReactingParcel.C @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "BasicReactingParcel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::BasicReactingParcel<ThermoType>::BasicReactingParcel +( + ReactingCloud<BasicReactingParcel<ThermoType> >& owner, + const vector& position, + const label cellI +) +: + ReactingParcel<BasicReactingParcel<ThermoType> >(owner, position, cellI) +{} + + +template<class ThermoType> +Foam::BasicReactingParcel<ThermoType>::BasicReactingParcel +( + ReactingCloud<BasicReactingParcel<ThermoType> >& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const vector& U0, + const scalarField& Y0, + const typename ReactingParcel<BasicReactingParcel<ThermoType> >:: + constantProperties& constProps +) +: + ReactingParcel<BasicReactingParcel<ThermoType> > + ( + owner, + position, + cellI, + typeId, + nParticle0, + d0, + U0, + Y0, + constProps + ) +{} + + +template<class ThermoType> +Foam::BasicReactingParcel<ThermoType>::BasicReactingParcel +( + const Cloud<BasicReactingParcel<ThermoType> >& cloud, + Istream& is, + bool readFields +) +: + ReactingParcel<BasicReactingParcel<ThermoType> >(cloud, is, readFields) +{} + + +template<class ThermoType> +Foam::BasicReactingParcel<ThermoType>::BasicReactingParcel +( + const BasicReactingParcel<ThermoType>& p +) +: + ReactingParcel<BasicReactingParcel>(p) +{} + + +// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // + +template<class ThermoType> +Foam::BasicReactingParcel<ThermoType>::~BasicReactingParcel() +{} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/BasicReactingParcel.H b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/BasicReactingParcel.H new file mode 100644 index 0000000000000000000000000000000000000000..b8b44eb237e4e2973a1abdbabab0fd943a61fbf7 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/BasicReactingParcel.H @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::BasicReactingParcel + +Description + + +SourceFiles + BasicReactingParcel.C + BasicReactingParcelIO.C + +\*---------------------------------------------------------------------------*/ + +#ifndef BasicReactingParcel_H +#define BasicReactingParcel_H + +#include "ReactingParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +template<class ThermoType> +class BasicReactingParcel; + +/*---------------------------------------------------------------------------*\ + Class BasicReactingParcel Declaration +\*---------------------------------------------------------------------------*/ + +template<class ThermoType> +class BasicReactingParcel +: + public ReactingParcel<BasicReactingParcel<ThermoType> > +{ + +public: + + //- The type of thermodynamics this parcel was instantiated for + typedef ThermoType thermoType; + + //- Run-time type information + TypeName("BasicReactingParcel"); + + // Constructors + + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + BasicReactingParcel + ( + ReactingCloud<BasicReactingParcel>& owner, + const vector& position, + const label cellI + ); + + //- Construct from components + BasicReactingParcel + ( + ReactingCloud<BasicReactingParcel>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, + const scalar d0, + const vector& U0, + const scalarField& Y0, + const typename ReactingParcel<BasicReactingParcel>:: + constantProperties& constProps + ); + + //- Construct from Istream + BasicReactingParcel + ( + const Cloud<BasicReactingParcel>& c, + Istream& is, + bool readFields = true + ); + + //- Construct as a copy + BasicReactingParcel(const BasicReactingParcel& p); + + //- Construct and return a clone + autoPtr<BasicReactingParcel> clone() const + { + return + autoPtr<BasicReactingParcel> + ( + new BasicReactingParcel(*this) + ); + } + + + //- Destructor + virtual ~BasicReactingParcel(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository + #include "BasicReactingParcel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/defineBasicReactingParcel.C b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/defineBasicReactingParcel.C new file mode 100644 index 0000000000000000000000000000000000000000..2c2e78630d691b2d398b09cbb32587da5e617e3d --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/defineBasicReactingParcel.C @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "createReactingParcelTypes.H" +#include "BasicReactingParcel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + createReactingParcelType(BasicReactingParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/makeBasicReactingParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/makeBasicReactingParcelSubmodels.C new file mode 100644 index 0000000000000000000000000000000000000000..a05fd96a37ccedb7d6d77d03705ab66ec50fa611 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/BasicReactingParcel/makeBasicReactingParcelSubmodels.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "BasicReactingParcel.H" + +// Kinematic +#include "makeReactingParcelDispersionModels.H" +#include "makeReactingParcelDragModels.H" +#include "makeReactingParcelInjectionModels.H" +#include "makeReactingParcelPatchInteractionModels.H" +#include "makeReactingParcelPostProcessingModels.H" + +// Thermodynamic +#include "makeReactingParcelHeatTransferModels.H" + +// Reacting +#include "makeReactingParcelCompositionModels.H" +#include "makeReactingParcelPhaseChangeModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Kinematic sub-models + makeReactingDispersionModels(BasicReactingParcel); + makeReactingDragModels(BasicReactingParcel); + makeReactingInjectionModels(BasicReactingParcel); + makeReactingPatchInteractionModels(BasicReactingParcel); + makeReactingPostProcessingModels(BasicReactingParcel); + + // Thermo sub-models + makeReactingHeatTransferModels(BasicReactingParcel); + + // Reacting sub-models + makeReactingCompositionModels(BasicReactingParcel); + makeReactingPhaseChangeModels(BasicReactingParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C index 244f49ad9078c278a8497ce893490c988dde43f7..e7f883dcfdacd0c275f2bb7b7f8c942c1957e980 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.C @@ -41,24 +41,35 @@ namespace Foam Foam::basicKinematicParcel::basicKinematicParcel ( KinematicCloud<basicKinematicParcel>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI +) +: + KinematicParcel<basicKinematicParcel>(owner, position, cellI) +{} + + +Foam::basicKinematicParcel::basicKinematicParcel +( + KinematicCloud<basicKinematicParcel>& owner, + const vector& position, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ) : KinematicParcel<basicKinematicParcel> ( owner, - typeId, position, - celli, + cellI, + typeId, + nParticle0, d0, U0, - nParticle0, constProps ) {} @@ -75,6 +86,15 @@ Foam::basicKinematicParcel::basicKinematicParcel {} +Foam::basicKinematicParcel::basicKinematicParcel +( + const basicKinematicParcel& p +) +: + KinematicParcel<basicKinematicParcel>(p) +{} + + // * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // Foam::basicKinematicParcel::~basicKinematicParcel() diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H index decc0b57e83b1d66ab9bf4074a6c718e5b74dc7a..18b43cbbadc5baa621870b145d8c22b32b8f050e 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/basicKinematicParcel.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class basicKinematicParcel Declaration + Class basicKinematicParcel Declaration \*---------------------------------------------------------------------------*/ class basicKinematicParcel @@ -60,16 +60,25 @@ public: // Constructors + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + basicKinematicParcel + ( + KinematicCloud<basicKinematicParcel>& owner, + const vector& position, + const label cellI + ); + //- Construct from components basicKinematicParcel ( KinematicCloud<basicKinematicParcel>& owner, - const label typeId, const vector& position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector& U0, - const scalar nParticle0, const constantProperties& constProps ); @@ -81,17 +90,22 @@ public: bool readFields = true ); + //- Construct as a copy + basicKinematicParcel(const basicKinematicParcel& p); + //- Construct and return a clone autoPtr<basicKinematicParcel> clone() const { - return autoPtr<basicKinematicParcel> - (new basicKinematicParcel(*this)); + return + autoPtr<basicKinematicParcel> + ( + new basicKinematicParcel(*this) + ); } //- Destructor - - virtual ~basicKinematicParcel(); + virtual ~basicKinematicParcel(); }; diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C index 82698ce0dfd1682ec94fecd6ef5447c1adcb6891..e7c1b578da4973a572b62987e48346ca2427152c 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/defineBasicKinematicParcel.C @@ -26,15 +26,17 @@ License #include "basicKinematicParcel.H" #include "KinematicCloud.H" +#include "makeParcelIOList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -// defineTemplateTypeNameAndDebug(IOPosition<basicKinematicParcel>, 0); - defineTemplateTypeNameAndDebug(Cloud<basicKinematicParcel>, 0); defineParcelTypeNameAndDebug(KinematicCloud<basicKinematicParcel>, 0); -// defineTemplateTypeNameAndDebug(KinematicCloud<basicKinematicParcel>, 0); + + makeParcelIOList(basicKinematicParcel); }; diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C deleted file mode 100644 index 07a256da8bbc42e672f342a4335f8231de3489e4..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDispersionModels.C +++ /dev/null @@ -1,65 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicKinematicParcel.H" -#include "KinematicCloud.H" -#include "NoDispersion.H" -#include "GradientDispersionRAS.H" -#include "StochasticDispersionRAS.H" - -namespace Foam -{ - makeDispersionModel(KinematicCloud<basicKinematicParcel>); - - defineNamedTemplateTypeNameAndDebug - ( - DispersionRASModel<KinematicCloud<basicKinematicParcel> >, - 0 - ); - - // Add instances of dispersion model to the table - makeDispersionModelType - ( - NoDispersion, - KinematicCloud, - basicKinematicParcel - ); - makeDispersionModelType - ( - GradientDispersionRAS, - KinematicCloud, - basicKinematicParcel - ); - makeDispersionModelType - ( - StochasticDispersionRAS, - KinematicCloud, - basicKinematicParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C deleted file mode 100644 index b21de1c4489572d4faca52563464af57d31be0b5..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelDragModels.C +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicKinematicParcel.H" -#include "KinematicCloud.H" -#include "NoDrag.H" -#include "SphereDrag.H" - -namespace Foam -{ - makeDragModel(KinematicCloud<basicKinematicParcel>); - - // Add instances of drag model to the table - makeDragModelType(NoDrag, KinematicCloud, basicKinematicParcel); - makeDragModelType(SphereDrag, KinematicCloud, basicKinematicParcel); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C deleted file mode 100644 index 1ae2a21d5fe6be7e469867785c88c4c16378a352..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelHeatTransferModels.C +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicKinematicParcel.H" -#include "KinematicCloud.H" -#include "NoHeatTransfer.H" - -namespace Foam -{ - makeHeatTransferModel(KinematicCloud<basicKinematicParcel>); - - // Add instances of heat transfer model to the table - makeHeatTransferModelType - ( - NoHeatTransfer, - KinematicCloud, - basicKinematicParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C deleted file mode 100644 index 4d3668bbe4fa3b64652c18f5ff00c53e669b8c3b..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelInjectionModels.C +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicKinematicParcel.H" -#include "KinematicCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" -#include "ConeInjection.H" - -namespace Foam -{ - makeInjectionModel(KinematicCloud<basicKinematicParcel>); - - // Add instances of injection model to the table - makeInjectionModelType - ( - NoInjection, - KinematicCloud, - basicKinematicParcel - ); - makeInjectionModelType - ( - ManualInjection, - KinematicCloud, - basicKinematicParcel - ); - makeInjectionModelType - ( - ConeInjection, - KinematicCloud, - basicKinematicParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C new file mode 100644 index 0000000000000000000000000000000000000000..6aaa63f9c0614e9b462fba14bb5a96923051ce39 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "basicKinematicParcel.H" + +// Kinematic +#include "makeParcelDispersionModels.H" +#include "makeParcelDragModels.H" +#include "makeParcelInjectionModels.H" +#include "makeParcelPatchInteractionModels.H" +#include "makeParcelPostProcessingModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Kinematic sub-models + makeParcelDispersionModels(basicKinematicParcel); + makeParcelDragModels(basicKinematicParcel); + makeParcelInjectionModels(basicKinematicParcel); + makeParcelPatchInteractionModels(basicKinematicParcel); + makeParcelPostProcessingModels(basicKinematicParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C deleted file mode 100644 index 3ec099a4cfc72865838630b384a0cca6ab5c00ef..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelWallInteractionModels.C +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicKinematicParcel.H" -#include "KinematicCloud.H" -#include "Rebound.H" -#include "StandardWallInteraction.H" - -namespace Foam -{ - makeWallInteractionModel(KinematicCloud<basicKinematicParcel>); - - // Add instances of wall interaction model to the table - makeWallInteractionModelType - ( - Rebound, - KinematicCloud, - basicKinematicParcel - ); - makeWallInteractionModelType - ( - StandardWallInteraction, - KinematicCloud, - basicKinematicParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/defineBasicReactingParcel.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/defineBasicReactingParcel.C deleted file mode 100644 index 5c45881ccf773ea0a287385acc024160d90dcacf..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/defineBasicReactingParcel.C +++ /dev/null @@ -1,53 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "ReactingCloud.H" - -namespace Foam -{ - defineTemplateTypeNameAndDebug(Cloud<basicReactingParcel>, 0); - - defineParcelTypeNameAndDebug(KinematicParcel<basicReactingParcel>, 0); -// defineTemplateTypeNameAndDebug(KinematicParcel<basicReactingParcel>, 0); - defineParcelTypeNameAndDebug(ThermoParcel<basicReactingParcel>, 0); - defineTemplateTypeNameAndDebug(ThermoParcel<basicReactingParcel>, 0); - defineParcelTypeNameAndDebug(ReactingParcel<basicReactingParcel>, 0); - defineTemplateTypeNameAndDebug(ReactingParcel<basicReactingParcel>, 0); - - defineParcelTypeNameAndDebug(KinematicCloud<basicReactingParcel>, 0); -// defineTemplateTypeNameAndDebug(KinematicCloud<basicReactingParcel>, 0); - - defineParcelTypeNameAndDebug(ThermoCloud<basicReactingParcel>, 0); -// defineTemplateTypeNameAndDebug(ThermoCloud<basicReactingParcel>, 0); - - defineParcelTypeNameAndDebug(ReactingCloud<basicReactingParcel>, 0); -// defineTemplateTypeNameAndDebug(ReactingCloud<basicReactingParcel>, 0); - -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C deleted file mode 100644 index f5cdead7272e68d6ca0d4405a44dbda704c46583..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelCompositionModels.C +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "ReactingCloud.H" -#include "SingleMixtureFraction.H" - -namespace Foam -{ - makeCompositionModel(ReactingCloud<basicReactingParcel>); - - // Add instances of composition model to the table - makeCompositionModelType - ( - SingleMixtureFraction, - ReactingCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C deleted file mode 100644 index 79e2149a6a9d8f72e3b117977aff6c198bff5db8..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDispersionModels.C +++ /dev/null @@ -1,65 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "KinematicCloud.H" -#include "NoDispersion.H" -#include "GradientDispersionRAS.H" -#include "StochasticDispersionRAS.H" - -namespace Foam -{ - makeDispersionModel(KinematicCloud<basicReactingParcel>); - - defineNamedTemplateTypeNameAndDebug - ( - DispersionRASModel<KinematicCloud<basicReactingParcel> >, - 0 - ); - - // Add instances of dispersion model to the table - makeDispersionModelType - ( - NoDispersion, - KinematicCloud, - basicReactingParcel - ); - makeDispersionModelType - ( - GradientDispersionRAS, - KinematicCloud, - basicReactingParcel - ); - makeDispersionModelType - ( - StochasticDispersionRAS, - KinematicCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C deleted file mode 100644 index 69943e76c37d818ce11dd2bfca308f4022e39215..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelDragModels.C +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "KinematicCloud.H" -#include "NoDrag.H" -#include "SphereDrag.H" - -namespace Foam -{ - makeDragModel(KinematicCloud<basicReactingParcel>); - - // Add instances of drag model to the table - makeDragModelType(NoDrag, KinematicCloud, basicReactingParcel); - makeDragModelType(SphereDrag, KinematicCloud, basicReactingParcel); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C deleted file mode 100644 index 73bf380c82cd1618bf3dbd9b19661018cdbf4f65..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelHeatTransferModels.C +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "ThermoCloud.H" -#include "NoHeatTransfer.H" -#include "RanzMarshall.H" - -namespace Foam -{ - makeHeatTransferModel(ThermoCloud<basicReactingParcel>); - - // Add instances of heat transfer model to the table - makeHeatTransferModelType - ( - NoHeatTransfer, - ThermoCloud, - basicReactingParcel - ); - makeHeatTransferModelType - ( - RanzMarshall, - ThermoCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C deleted file mode 100644 index ed9f2bd6bed545df27462044b009421ae45bf126..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelInjectionModels.C +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "ReactingCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" -#include "ConeInjection.H" - -namespace Foam -{ - makeInjectionModel(KinematicCloud<basicReactingParcel>); - - // Add instances of injection model to the table - makeInjectionModelType - ( - NoInjection, - KinematicCloud, - basicReactingParcel - ); - makeInjectionModelType - ( - ManualInjection, - KinematicCloud, - basicReactingParcel - ); - makeInjectionModelType - ( - ConeInjection, - KinematicCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C deleted file mode 100644 index 28cc3039980c3cdc498312f85505b7837998dcc8..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelMassTransferModels.C +++ /dev/null @@ -1,59 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "ThermoCloud.H" -#include "NoMassTransfer.H" -#include "ConstantRateDevolatilisation.H" -#include "SingleKineticRateDevolatilisation.H" - -namespace Foam -{ - makeMassTransferModel(ReactingCloud<basicReactingParcel>); - - // Add instances of mass transfer model to the table - makeMassTransferModelType - ( - NoMassTransfer, - ReactingCloud, - basicReactingParcel - ); - makeMassTransferModelType - ( - ConstantRateDevolatilisation, - ReactingCloud, - basicReactingParcel - ); - makeMassTransferModelType - ( - SingleKineticRateDevolatilisation, - ReactingCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C deleted file mode 100644 index e242d7e2fa89f35351dbaacc40655871247f2421..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSurfaceReactionModels.C +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "ReactingCloud.H" -#include "NoSurfaceReaction.H" - -namespace Foam -{ - makeSurfaceReactionModel(ReactingCloud<basicReactingParcel>); - - // Add instances of surface reaction model to the table - makeSurfaceReactionModelType - ( - NoSurfaceReaction, - ReactingCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C deleted file mode 100644 index 6cc346e8d98ac4d55f8ad0f743e8c36832ebb6c3..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelWallInteractionModels.C +++ /dev/null @@ -1,53 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicReactingParcel.H" -#include "KinematicCloud.H" -#include "Rebound.H" -#include "StandardWallInteraction.H" - -namespace Foam -{ - makeWallInteractionModel(KinematicCloud<basicReactingParcel>); -// makeWallInteractionModel(ReactingCloud<basicReactingParcel>); - - // Add instances of wall interaction model to the table - makeWallInteractionModelType - ( - Rebound, - KinematicCloud, - basicReactingParcel - ); - makeWallInteractionModelType - ( - StandardWallInteraction, - KinematicCloud, - basicReactingParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C index edbeef83b38b4b005527b2a0d99dbab9be1f1c36..7f2524cbd282cfb8d9543c069d22b07db8add93b 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.C @@ -41,24 +41,35 @@ namespace Foam Foam::basicThermoParcel::basicThermoParcel ( ThermoCloud<basicThermoParcel>& owner, - const label typeId, const vector position, - const label celli, + const label cellI +) +: + ThermoParcel<basicThermoParcel>(owner, position, cellI) +{} + + +Foam::basicThermoParcel::basicThermoParcel +( + ThermoCloud<basicThermoParcel>& owner, + const vector position, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector U0, - const scalar nParticle0, const constantProperties& constProps ) : ThermoParcel<basicThermoParcel> ( owner, - typeId, position, - celli, + cellI, + typeId, + nParticle0, d0, U0, - nParticle0, constProps ) {} @@ -75,6 +86,15 @@ Foam::basicThermoParcel::basicThermoParcel {} +Foam::basicThermoParcel::basicThermoParcel +( + const basicThermoParcel& p +) +: + ThermoParcel<basicThermoParcel>(p) +{} + + // * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * // Foam::basicThermoParcel::~basicThermoParcel() diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H index 0eb00002df4dccecfd3292642d1fa69f2b08955e..974c36e23a96f51bb57d3009fea0a1951fbf331e 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class basicThermoParcel Declaration + Class basicThermoParcel Declaration \*---------------------------------------------------------------------------*/ class basicThermoParcel @@ -59,16 +59,25 @@ public: // Constructors + //- Construct from owner, position, and cloud owner + // Other properties initialised as null + basicThermoParcel + ( + ThermoCloud<basicThermoParcel>& owner, + const vector position, + const label cellI + ); + //- Construct from components basicThermoParcel ( ThermoCloud<basicThermoParcel>& owner, - const label typeId, const vector position, - const label celli, + const label cellI, + const label typeId, + const scalar nParticle0, const scalar d0, const vector U0, - const scalar nParticle0, const constantProperties& constProps ); @@ -80,16 +89,22 @@ public: bool readFields = true ); + //- Construct as a copy + basicThermoParcel(const basicThermoParcel& p); + //- Construct and return a clone autoPtr<basicThermoParcel> clone() const { - return autoPtr<basicThermoParcel>(new basicThermoParcel(*this)); + return + autoPtr<basicThermoParcel> + ( + new basicThermoParcel(*this) + ); } - // Destructors - - virtual ~basicThermoParcel(); + //- Destructor + virtual ~basicThermoParcel(); }; diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C index ba76c4675628d835618cb695e419defbe6103cf8..2e67f54e815ab2e3e296126edae8ccd005471e2c 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,21 +26,23 @@ License #include "basicThermoParcel.H" #include "ThermoCloud.H" +#include "makeParcelIOList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { defineTemplateTypeNameAndDebug(Cloud<basicThermoParcel>, 0); defineParcelTypeNameAndDebug(KinematicParcel<basicThermoParcel>, 0); -// defineTemplateTypeNameAndDebug(KinematicParcel<basicThermoParcel>, 0); defineParcelTypeNameAndDebug(ThermoParcel<basicThermoParcel>, 0); defineTemplateTypeNameAndDebug(ThermoParcel<basicThermoParcel>, 0); defineParcelTypeNameAndDebug(KinematicCloud<basicThermoParcel>, 0); -// defineTemplateTypeNameAndDebug(KinematicCloud<basicThermoParcel>, 0); defineParcelTypeNameAndDebug(ThermoCloud<basicThermoParcel>, 0); -// defineTemplateTypeNameAndDebug(ThermoCloud<basicThermoParcel>, 0); + + makeParcelIOList(basicThermoParcel); }; diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C deleted file mode 100644 index f1ab424f9bab6113a373e34b735d8f3a13ebbaa8..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDispersionModels.C +++ /dev/null @@ -1,65 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicThermoParcel.H" -#include "KinematicCloud.H" -#include "NoDispersion.H" -#include "GradientDispersionRAS.H" -#include "StochasticDispersionRAS.H" - -namespace Foam -{ - makeDispersionModel(KinematicCloud<basicThermoParcel>); - - defineNamedTemplateTypeNameAndDebug - ( - DispersionRASModel<KinematicCloud<basicThermoParcel> >, - 0 - ); - - // Add instances of dispersion model to the table - makeDispersionModelType - ( - NoDispersion, - KinematicCloud, - basicThermoParcel - ); - makeDispersionModelType - ( - GradientDispersionRAS, - KinematicCloud, - basicThermoParcel - ); - makeDispersionModelType - ( - StochasticDispersionRAS, - KinematicCloud, - basicThermoParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C deleted file mode 100644 index b477000cf52757a84ae0a148128eaf60800e4bff..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelDragModels.C +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicThermoParcel.H" -#include "KinematicCloud.H" -#include "NoDrag.H" -#include "SphereDrag.H" - -namespace Foam -{ - makeDragModel(KinematicCloud<basicThermoParcel>); - - // Add instances of drag model to the table - makeDragModelType(NoDrag, KinematicCloud, basicThermoParcel); - makeDragModelType(SphereDrag, KinematicCloud, basicThermoParcel); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C deleted file mode 100644 index d8a3c67c97560553618be1ecb21cef4c8636fa22..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelHeatTransferModels.C +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicThermoParcel.H" -#include "ThermoCloud.H" -#include "NoHeatTransfer.H" -#include "RanzMarshall.H" - -namespace Foam -{ - makeHeatTransferModel(ThermoCloud<basicThermoParcel>); - - // Add instances of heat transfer model to the table - makeHeatTransferModelType(NoHeatTransfer, ThermoCloud, basicThermoParcel); - makeHeatTransferModelType(RanzMarshall, ThermoCloud, basicThermoParcel); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C deleted file mode 100644 index cb51b8685257ca1a7860fd0d30e7e421d21fd5e8..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelInjectionModels.C +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicThermoParcel.H" -#include "ThermoCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" -#include "ConeInjection.H" - -namespace Foam -{ - makeInjectionModel(KinematicCloud<basicThermoParcel>); - - // Add instances of injection model to the table - makeInjectionModelType(NoInjection, KinematicCloud, basicThermoParcel); - - makeInjectionModelType(ManualInjection, KinematicCloud, basicThermoParcel); - - makeInjectionModelType(ConeInjection, KinematicCloud, basicThermoParcel); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelSubmodels.C new file mode 100644 index 0000000000000000000000000000000000000000..044d8db68ed797c97f9b181bdec78326a1ee9656 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelSubmodels.C @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "basicThermoParcel.H" + +// Kinematic +#include "makeParcelDispersionModels.H" +#include "makeParcelDragModels.H" +#include "makeParcelInjectionModels.H" +#include "makeParcelPatchInteractionModels.H" +#include "makeParcelPostProcessingModels.H" + +// Thermodynamic +#include "makeParcelHeatTransferModels.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + // Kinematic sub-models + makeParcelDispersionModels(basicThermoParcel); + makeParcelDragModels(basicThermoParcel); + makeParcelInjectionModels(basicThermoParcel); + makeParcelPatchInteractionModels(basicThermoParcel); + makeParcelPostProcessingModels(basicThermoParcel); + + // Thermo sub-models + makeParcelHeatTransferModels(basicThermoParcel); +}; + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C deleted file mode 100644 index 03402510f6925d545dbbded33781f55c63d2bf14..0000000000000000000000000000000000000000 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelWallInteractionModels.C +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -\*---------------------------------------------------------------------------*/ - -#include "basicThermoParcel.H" -#include "KinematicCloud.H" -#include "Rebound.H" -#include "StandardWallInteraction.H" - -namespace Foam -{ - makeWallInteractionModel(KinematicCloud<basicThermoParcel>); - - // Add instances of wall interaction model to the table - makeWallInteractionModelType - ( - Rebound, - KinematicCloud, - basicThermoParcel - ); - makeWallInteractionModelType - ( - StandardWallInteraction, - KinematicCloud, - basicThermoParcel - ); -}; - - -// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/createReactingMultiphaseParcelTypes.H b/src/lagrangian/intermediate/parcels/include/createReactingMultiphaseParcelTypes.H new file mode 100644 index 0000000000000000000000000000000000000000..de8d5a04caa4633e833f33b58f7d564b2043a030 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/createReactingMultiphaseParcelTypes.H @@ -0,0 +1,99 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef createReactingMultiphaseParcelTypes_H +#define createReactingMultiphaseParcelTypes_H + +#include "makeParcelIOList.H" +#include "thermoPhysicsTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define createReactingMultiphaseParcelType(ParcelType) \ + \ + createReactingMultiphaseParcelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + createReactingMultiphaseParcelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + createReactingMultiphaseParcelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define createReactingMultiphaseParcelThermoType(ParcelType, ThermoType) \ + \ + typedef ParcelType<ThermoType> ParcelType##ThermoType; \ + \ + makeParcelIOList(ParcelType##ThermoType); \ + \ + defineTemplateTypeNameAndDebug(ParcelType##ThermoType, 0); \ + defineTemplateTypeNameAndDebug(Particle<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(Cloud<ParcelType##ThermoType>, 0); \ + \ + defineParcelTypeNameAndDebug(KinematicParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug \ + ( \ + KinematicParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineParcelTypeNameAndDebug(ThermoParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(ThermoParcel<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ReactingParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(ReactingParcel<ParcelType##ThermoType>, 0);\ + defineParcelTypeNameAndDebug \ + ( \ + ReactingMultiphaseParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineTemplateTypeNameAndDebug \ + ( \ + ReactingMultiphaseParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + \ + defineParcelTypeNameAndDebug(KinematicCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ThermoCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ReactingCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug \ + ( \ + ReactingMultiphaseCloud<ParcelType##ThermoType>, \ + 0 \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/createReactingParcelTypes.H b/src/lagrangian/intermediate/parcels/include/createReactingParcelTypes.H new file mode 100644 index 0000000000000000000000000000000000000000..bea3f8a9dcd16fffeab554456c2b94ca27ba9013 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/createReactingParcelTypes.H @@ -0,0 +1,72 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef createReactingParcelTypes_H +#define createReactingParcelTypes_H + +#include "makeParcelIOList.H" +#include "thermoPhysicsTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define createReactingParcelType(ParcelType) \ + \ + createReactingParcelThermoType(ParcelType, constGasThermoPhysics); \ + createReactingParcelThermoType(ParcelType, gasThermoPhysics); \ + createReactingParcelThermoType(ParcelType, icoPoly8ThermoPhysics); + + +#define createReactingParcelThermoType(ParcelType, ThermoType) \ + \ + typedef ParcelType<ThermoType> ParcelType##ThermoType; \ + \ + makeParcelIOList(ParcelType##ThermoType); \ + \ + defineTemplateTypeNameAndDebug(ParcelType##ThermoType, 0); \ + defineTemplateTypeNameAndDebug(Particle<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(Cloud<ParcelType##ThermoType>, 0); \ + \ + defineParcelTypeNameAndDebug(KinematicParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug \ + ( \ + KinematicParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineParcelTypeNameAndDebug(ThermoParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(ThermoParcel<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ReactingParcel<ParcelType##ThermoType>, 0); \ + defineTemplateTypeNameAndDebug(ReactingParcel<ParcelType##ThermoType>, 0);\ + \ + defineParcelTypeNameAndDebug(KinematicCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ThermoCloud<ParcelType##ThermoType>, 0); \ + defineParcelTypeNameAndDebug(ReactingCloud<ParcelType##ThermoType>, 0); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/createTrackedReactingParcelTypes.H b/src/lagrangian/intermediate/parcels/include/createTrackedReactingParcelTypes.H new file mode 100644 index 0000000000000000000000000000000000000000..95e46e3d6fed33aea291f3b0313ad727b8cff119 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/createTrackedReactingParcelTypes.H @@ -0,0 +1,75 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef createTrackedReactingParcelTypes_H +#define createTrackedReactingParcelTypes_H + +#include "createReactingParcelTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define createTrackedReactingParcelType(ParcelType) \ + \ + createTrackedReactingParcelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + createTrackedReactingParcelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + createTrackedReactingParcelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define createTrackedReactingParcelThermoType(ParcelType, ThermoType) \ + \ + createReactingParcelThermoType(ParcelType, ThermoType); \ + \ + typedef ParcelType<ThermoType> ParcelType##ThermoType; \ + \ + defineParcelTypeNameAndDebug \ + ( \ + TrackedReactingParcel<ParcelType##ThermoType>, \ + 0 \ + ); \ + defineTemplateTypeNameAndDebug \ + ( \ + TrackedReactingParcel<ParcelType##ThermoType>, \ + 0 \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelDispersionModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelDispersionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..4763688f5205dd39241b779c1ad47738c12318c8 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelDispersionModels.H @@ -0,0 +1,74 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelDispersionModels_h +#define makeParcelDispersionModels_h + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "KinematicCloud.H" + +#include "NoDispersion.H" +#include "GradientDispersionRAS.H" +#include "StochasticDispersionRAS.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelDispersionModels(ParcelType) \ + \ + makeDispersionModel(KinematicCloud<ParcelType>); \ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + DispersionRASModel<KinematicCloud<ParcelType> >, \ + 0 \ + ); \ + \ + makeDispersionModelType \ + ( \ + NoDispersion, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeDispersionModelType \ + ( \ + GradientDispersionRAS, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeDispersionModelType \ + ( \ + StochasticDispersionRAS, \ + KinematicCloud, \ + ParcelType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelDragModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelDragModels.H new file mode 100644 index 0000000000000000000000000000000000000000..0d47aaf2393bd880b63e3cdbeafb4fdfa12e952a --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelDragModels.H @@ -0,0 +1,51 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelDragModels_H +#define makeParcelDragModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "KinematicCloud.H" + +#include "NoDrag.H" +#include "SphereDrag.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelDragModels(ParcelType) \ + \ + makeDragModel(KinematicCloud<ParcelType>); \ + \ + makeDragModelType(NoDrag, KinematicCloud, ParcelType); \ + makeDragModelType(SphereDrag, KinematicCloud, ParcelType); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelHeatTransferModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelHeatTransferModels.H new file mode 100644 index 0000000000000000000000000000000000000000..a2ce1942020b529d3ec1c651296ae8bc53ebeead --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelHeatTransferModels.H @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelHeatTransferModels_H +#define makeParcelHeatTransferModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "ThermoCloud.H" + +#include "NoHeatTransfer.H" +#include "RanzMarshall.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelHeatTransferModels(ParcelType) \ + \ + makeHeatTransferModel(ThermoCloud<ParcelType>); \ + \ + makeHeatTransferModelType \ + ( \ + NoHeatTransfer, \ + ThermoCloud, \ + ParcelType \ + ); \ + makeHeatTransferModelType \ + ( \ + RanzMarshall, \ + ThermoCloud, \ + ParcelType \ + ); \ + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..c247249f9d252f20f41c3ab38e5115f6736d2dfd --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelInjectionModels.H @@ -0,0 +1,96 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelInjectionModels_H +#define makeParcelInjectionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "KinematicCloud.H" + +#include "ConeInjection.H" +#include "ConeInjectionMP.H" +#include "FieldActivatedInjection.H" +#include "KinematicLookupTableInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" +#include "PatchInjection.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelInjectionModels(ParcelType) \ + \ + makeInjectionModel(KinematicCloud<ParcelType>); \ + \ + makeInjectionModelType \ + ( \ + ConeInjection, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeInjectionModelType \ + ( \ + ConeInjectionMP, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeInjectionModelType \ + ( \ + FieldActivatedInjection, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeInjectionModelType \ + ( \ + KinematicLookupTableInjection, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeInjectionModelType \ + ( \ + ManualInjection, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeInjectionModelType \ + ( \ + NoInjection, \ + KinematicCloud, \ + ParcelType \ + ); \ + makeInjectionModelType \ + ( \ + PatchInjection, \ + KinematicCloud, \ + ParcelType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelPatchInteractionModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelPatchInteractionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..f3141b67d3eb99584852a8830c2fb3968ae7c51b --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelPatchInteractionModels.H @@ -0,0 +1,68 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelPatchInteractionModels_H +#define makeParcelPatchInteractionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "KinematicCloud.H" + +#include "LocalInteraction.H" +#include "Rebound.H" +#include "StandardWallInteraction.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelPatchInteractionModels(ParcelType) \ + \ + makePatchInteractionModel(KinematicCloud<ParcelType>); \ + \ + makePatchInteractionModelType \ + ( \ + LocalInteraction, \ + KinematicCloud, \ + ParcelType \ + ); \ + makePatchInteractionModelType \ + ( \ + Rebound, \ + KinematicCloud, \ + ParcelType \ + ); \ + makePatchInteractionModelType \ + ( \ + StandardWallInteraction, \ + KinematicCloud, \ + ParcelType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelPostProcessingModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelPostProcessingModels.H new file mode 100644 index 0000000000000000000000000000000000000000..51aa8e2a53c07127d0b6ba4e902ca29cda84eae4 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelPostProcessingModels.H @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelPostProcessingModels_H +#define makeParcelPostProcessingModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "KinematicCloud.H" + +#include "NoPostProcessing.H" +#include "PatchPostProcessing.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelPostProcessingModels(ParcelType) \ + \ + makePostProcessingModel(KinematicCloud<ParcelType>); \ + \ + makePostProcessingModelType \ + ( \ + NoPostProcessing, \ + KinematicCloud, \ + ParcelType \ + ); \ + makePostProcessingModelType \ + ( \ + PatchPostProcessing, \ + KinematicCloud, \ + ParcelType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelCompositionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelCompositionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..4f703d49676c80b883930a4cdf3286b4bf069715 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelCompositionModels.H @@ -0,0 +1,75 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingMultiphaseParcelCompositionModels_H +#define makeReactingMultiphaseParcelCompositionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ReactingCloud.H" + +#include "SingleMixtureFraction.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingMultiphaseCompositionModels(ParcelType) \ + \ + makeReactingMultiphaseCompositionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeReactingMultiphaseCompositionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeReactingMultiphaseCompositionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingMultiphaseCompositionModelThermoType(ParcelType, ThermoType)\ + \ + makeCompositionModel(ReactingCloud<ParcelType<ThermoType> >); \ + \ + makeCompositionModelThermoType \ + ( \ + SingleMixtureFraction, \ + ReactingCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelDevolatilisationModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelDevolatilisationModels.H new file mode 100644 index 0000000000000000000000000000000000000000..d293222c5b516b20003677f424f10cbb723603bd --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelDevolatilisationModels.H @@ -0,0 +1,94 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingMultiphaseParcelDevolatilisationModels_H +#define makeReactingMultiphaseParcelDevolatilisationModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ReactingMultiphaseCloud.H" + +#include "ConstantRateDevolatilisation.H" +#include "NoDevolatilisation.H" +#include "SingleKineticRateDevolatilisation.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingMultiphaseDevolatilisationModels(ParcelType) \ + \ + makeReactingMultiphaseDevolatilisationModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeReactingMultiphaseDevolatilisationModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeReactingMultiphaseDevolatilisationModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingMultiphaseDevolatilisationModelThermoType(ParcelType, ThermoType)\ + \ + makeDevolatilisationModel \ + ( \ + ReactingMultiphaseCloud<ParcelType<ThermoType> > \ + ); \ + \ + makeDevolatilisationModelThermoType \ + ( \ + ConstantRateDevolatilisation, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeDevolatilisationModelThermoType \ + ( \ + NoDevolatilisation, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeDevolatilisationModelThermoType \ + ( \ + SingleKineticRateDevolatilisation, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelInjectionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelInjectionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..e93dce23757777bd0975f7d2c337225d3034b820 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelInjectionModels.H @@ -0,0 +1,117 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingMultiphaseParcelInjectionModels_H +#define makeReactingMultiphaseParcelInjectionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "KinematicCloud.H" + +#include "ConeInjection.H" +#include "ConeInjectionMP.H" +#include "FieldActivatedInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" +#include "PatchInjection.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingMultiphaseInjectionModels(ParcelType) \ + \ + makeReactingMultiphaseInjectionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + \ + makeReactingMultiphaseInjectionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + \ + makeReactingMultiphaseInjectionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingMultiphaseInjectionModelThermoType(ParcelType, ThermoType)\ + \ + makeInjectionModel(KinematicCloud<ParcelType<ThermoType> >); \ + \ + makeInjectionModelThermoType \ + ( \ + ConeInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + ConeInjectionMP, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + FieldActivatedInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + ManualInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + NoInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + PatchInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelSurfaceReactionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelSurfaceReactionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..47bbdcefb3d02d4525423438a549de8b2c668969 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelSurfaceReactionModels.H @@ -0,0 +1,78 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingMultiphaseParcelSurfaceReactionModels_H +#define makeReactingMultiphaseParcelSurfaceReactionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ReactingMultiphaseCloud.H" + +#include "NoSurfaceReaction.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingMultiphaseSurfaceReactionModels(ParcelType) \ + \ + makeReactingMultiphaseSurfaceReactionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeReactingMultiphaseSurfaceReactionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeReactingMultiphaseSurfaceReactionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingMultiphaseSurfaceReactionModelThermoType(ParcelType, ThermoType)\ + \ + makeSurfaceReactionModel \ + ( \ + ReactingMultiphaseCloud<ParcelType<ThermoType> > \ + ); \ + \ + makeSurfaceReactionModelThermoType \ + ( \ + NoSurfaceReaction, \ + ReactingMultiphaseCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelCompositionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelCompositionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..d20439fccb8d6cc970a06e4a28fd9a180ab1e022 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelCompositionModels.H @@ -0,0 +1,75 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelCompositionModels_H +#define makeReactingParcelCompositionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ReactingCloud.H" + +#include "SinglePhaseMixture.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingCompositionModels(ParcelType) \ + \ + makeReactingCompositionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeReactingCompositionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeReactingCompositionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingCompositionModelThermoType(ParcelType, ThermoType) \ + \ + makeCompositionModel(ReactingCloud<ParcelType<ThermoType> >); \ + \ + makeCompositionModelThermoType \ + ( \ + SinglePhaseMixture, \ + ReactingCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelDispersionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelDispersionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..394cb9c2499dcd6fcd802b995d9ffe5a141c8753 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelDispersionModels.H @@ -0,0 +1,99 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelDispersionModels_H +#define makeReactingParcelDispersionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "KinematicCloud.H" + +#include "NoDispersion.H" +#include "GradientDispersionRAS.H" +#include "StochasticDispersionRAS.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingDispersionModels(ParcelType) \ + \ + makeReactingDispersionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + \ + makeReactingDispersionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + \ + makeReactingDispersionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingDispersionModelThermoType(ParcelType, ThermoType) \ + \ + makeDispersionModel(KinematicCloud<ParcelType<ThermoType> >); \ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + DispersionRASModel<KinematicCloud<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + makeDispersionModelThermoType \ + ( \ + NoDispersion, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeDispersionModelThermoType \ + ( \ + GradientDispersionRAS, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeDispersionModelThermoType \ + ( \ + StochasticDispersionRAS, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelDragModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelDragModels.H new file mode 100644 index 0000000000000000000000000000000000000000..a41d440ddce190334336a3e3ec843b80ebbb36be --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelDragModels.H @@ -0,0 +1,83 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelDragModels_H +#define makeReactingParcelDragModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "KinematicCloud.H" + +#include "NoDrag.H" +#include "SphereDrag.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingDragModels(ParcelType) \ + \ + makeReactingDragModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeReactingDragModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeReactingDragModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingDragModelThermoType(ParcelType, ThermoType) \ + \ + makeDragModel(KinematicCloud<ParcelType<ThermoType> >); \ + \ + makeDragModelThermoType \ + ( \ + NoDrag, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeDragModelThermoType \ + ( \ + SphereDrag, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelHeatTransferModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelHeatTransferModels.H new file mode 100644 index 0000000000000000000000000000000000000000..0bfe7af9a8a6e3222cead0703e94ae700e5ba107 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelHeatTransferModels.H @@ -0,0 +1,83 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelHeatTransferModels_H +#define makeReactingParcelHeatTransferModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ThermoCloud.H" + +#include "NoHeatTransfer.H" +#include "RanzMarshall.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingHeatTransferModels(ParcelType) \ + \ + makeReactingHeatTransferModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + makeReactingHeatTransferModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + makeReactingHeatTransferModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingHeatTransferModelThermoType(ParcelType, ThermoType) \ + \ + makeHeatTransferModel(ThermoCloud<ParcelType<ThermoType> >); \ + \ + makeHeatTransferModelThermoType \ + ( \ + NoHeatTransfer, \ + ThermoCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeHeatTransferModelThermoType \ + ( \ + RanzMarshall, \ + ThermoCloud, \ + ParcelType, \ + ThermoType \ + ); \ + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelInjectionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelInjectionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..41ca35fcf513a58fee6717c7a7dd11acd1784553 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelInjectionModels.H @@ -0,0 +1,125 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelInjectionModels_H +#define makeReactingParcelInjectionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "KinematicCloud.H" + +#include "ConeInjection.H" +#include "ConeInjectionMP.H" +#include "FieldActivatedInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" +#include "PatchInjection.H" +#include "ReactingLookupTableInjection.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingInjectionModels(ParcelType) \ + \ + makeReactingInjectionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + \ + makeReactingInjectionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + \ + makeReactingInjectionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingInjectionModelThermoType(ParcelType, ThermoType) \ + \ + makeInjectionModel(KinematicCloud<ParcelType<ThermoType> >); \ + \ + makeInjectionModelThermoType \ + ( \ + ConeInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + ConeInjectionMP, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + FieldActivatedInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + ManualInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + NoInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + PatchInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makeInjectionModelThermoType \ + ( \ + ReactingLookupTableInjection, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelPatchInteractionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelPatchInteractionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..c25a4202f0c59171e25f57e6c2e5b03ddeee5c4f --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelPatchInteractionModels.H @@ -0,0 +1,93 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelPatchInteractionModels_H +#define makeReactingParcelPatchInteractionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "KinematicCloud.H" + +#include "LocalInteraction.H" +#include "Rebound.H" +#include "StandardWallInteraction.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingPatchInteractionModels(ParcelType) \ + \ + makeReactingPatchInteractionModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + \ + makeReactingPatchInteractionModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + \ + makeReactingPatchInteractionModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingPatchInteractionModelThermoType(ParcelType, ThermoType) \ + \ + makePatchInteractionModel(KinematicCloud<ParcelType<ThermoType> >); \ + \ + makePatchInteractionModelThermoType \ + ( \ + LocalInteraction, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makePatchInteractionModelThermoType \ + ( \ + Rebound, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makePatchInteractionModelThermoType \ + ( \ + StandardWallInteraction, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelPhaseChangeModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelPhaseChangeModels.H new file mode 100644 index 0000000000000000000000000000000000000000..57a067198eef490da220569e5544684aa4c3abc4 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelPhaseChangeModels.H @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelPhaseChangeModels_H +#define makeReactingParcelPhaseChangeModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "ReactingCloud.H" + +#include "NoPhaseChange.H" +#include "LiquidEvaporation.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingPhaseChangeModels(ParcelType) \ + \ + makeReactingPhaseChangeModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + \ + makeReactingPhaseChangeModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + \ + makeReactingPhaseChangeModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingPhaseChangeModelThermoType(ParcelType, ThermoType) \ + \ + makePhaseChangeModel(ReactingCloud<ParcelType<ThermoType> >); \ + \ + makePhaseChangeModelThermoType \ + ( \ + NoPhaseChange, \ + ReactingCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makePhaseChangeModelThermoType \ + ( \ + LiquidEvaporation, \ + ReactingCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelPostProcessingModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelPostProcessingModels.H new file mode 100644 index 0000000000000000000000000000000000000000..ae7f226e362e15f7132ff7b02d7954025856bd84 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelPostProcessingModels.H @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingParcelPostProcessingModels_H +#define makeReactingParcelPostProcessingModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "thermoPhysicsTypes.H" +#include "KinematicCloud.H" + +#include "NoPostProcessing.H" +#include "PatchPostProcessing.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingPostProcessingModels(ParcelType) \ + \ + makeReactingPostProcessingModelThermoType \ + ( \ + ParcelType, \ + constGasThermoPhysics \ + ); \ + \ + makeReactingPostProcessingModelThermoType \ + ( \ + ParcelType, \ + gasThermoPhysics \ + ); \ + \ + makeReactingPostProcessingModelThermoType \ + ( \ + ParcelType, \ + icoPoly8ThermoPhysics \ + ); + + +#define makeReactingPostProcessingModelThermoType(ParcelType, ThermoType) \ + \ + makePostProcessingModel(KinematicCloud<ParcelType<ThermoType> >); \ + \ + makePostProcessingModelThermoType \ + ( \ + NoPostProcessing, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); \ + makePostProcessingModelThermoType \ + ( \ + PatchPostProcessing, \ + KinematicCloud, \ + ParcelType, \ + ThermoType \ + ); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/particleForces/particleForces.C b/src/lagrangian/intermediate/particleForces/particleForces.C new file mode 100644 index 0000000000000000000000000000000000000000..5320566c84382e91f744263062c1e2c7b493dd3f --- /dev/null +++ b/src/lagrangian/intermediate/particleForces/particleForces.C @@ -0,0 +1,191 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "particleForces.H" +#include "fvMesh.H" +#include "volFields.H" +#include "fvcGrad.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::particleForces::particleForces +( + const fvMesh& mesh, + const dictionary& dict, + const vector& g +) +: + mesh_(mesh), + dict_(dict.subDict("particleForces")), + g_(g), + gradUPtr_(NULL), + gravity_(dict_.lookup("gravity")), + virtualMass_(dict_.lookup("virtualMass")), + Cvm_(0.0), + pressureGradient_(dict_.lookup("pressureGradient")), + UName_(dict_.lookupOrDefault<word>("U", "U")) +{ + if (virtualMass_) + { + dict_.lookup("Cvm") >> Cvm_; + } +} + + +Foam::particleForces::particleForces(const particleForces& f) +: + mesh_(f.mesh_), + dict_(f.dict_), + g_(f.g_), + gradUPtr_(f.gradUPtr_), + gravity_(f.gravity_), + virtualMass_(f.virtualMass_), + Cvm_(f.Cvm_), + pressureGradient_(f.pressureGradient_), + UName_(f.UName_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::particleForces::~particleForces() +{ + cacheFields(false); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const Foam::dictionary& Foam::particleForces::dict() const +{ + return dict_; +} + + +const Foam::vector& Foam::particleForces::g() const +{ + return g_; +} + + +Foam::Switch Foam::particleForces::gravity() const +{ + return gravity_; +} + + +Foam::Switch Foam::particleForces::virtualMass() const +{ + return virtualMass_; +} + + +Foam::Switch Foam::particleForces::pressureGradient() const +{ + return pressureGradient_; +} + + +const Foam::word& Foam::particleForces::UName() const +{ + return UName_; +} + + +void Foam::particleForces::cacheFields(const bool store) +{ + if (store && pressureGradient_) + { + const volVectorField U = mesh_.lookupObject<volVectorField>(UName_); + gradUPtr_ = fvc::grad(U).ptr(); + } + else + { + if (gradUPtr_) + { + delete gradUPtr_; + } + } +} + + +Foam::vector Foam::particleForces::calcCoupled +( + const label cellI, + const scalar dt, + const scalar rhoc, + const scalar rho, + const vector& Uc, + const vector& U +) const +{ + vector Ftot = vector::zero; + + // Virtual mass force + if (virtualMass_) + { + notImplemented + ( + "Foam::particleForces::calcCoupled(...) - virtual mass force" + ); +// Ftot += Cvm_*rhoc/rho*d(Uc - U)/dt; + } + + // Pressure gradient force + if (pressureGradient_) + { + const volTensorField& gradU = *gradUPtr_; + Ftot += rhoc/rho*(U & gradU[cellI]); + } + + return Ftot; +} + + +Foam::vector Foam::particleForces::calcNonCoupled +( + const label cellI, + const scalar dt, + const scalar rhoc, + const scalar rho, + const vector& Uc, + const vector& U +) const +{ + vector Ftot = vector::zero; + + // Gravity force + if (gravity_) + { + Ftot += g_*(1.0 - rhoc/rho); + } + + return Ftot; +} + + +// ************************************************************************* // + diff --git a/src/lagrangian/intermediate/particleForces/particleForces.H b/src/lagrangian/intermediate/particleForces/particleForces.H new file mode 100644 index 0000000000000000000000000000000000000000..fbe88a6dc832e7fd545a1a673aaf2dce90178a23 --- /dev/null +++ b/src/lagrangian/intermediate/particleForces/particleForces.H @@ -0,0 +1,177 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::particleForces + +Description + Particle forces + +SourceFiles + particleForces.C + +\*---------------------------------------------------------------------------*/ + +#ifndef particleForces_H +#define particleForces_H + +#include "dictionary.H" +#include "Switch.H" +#include "vector.H" +#include "volFieldsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward class declarations +class fvMesh; + +/*---------------------------------------------------------------------------*\ + Class particleForces Declaration +\*---------------------------------------------------------------------------*/ + +class particleForces +{ + // Private data + + //- Reference to the mesh database + const fvMesh& mesh_; + + //- The particleForces dictionary + const dictionary& dict_; + + //- Gravity + const vector g_; + + //- Velocity gradient field + const volTensorField* gradUPtr_; + + + // Forces to include in particle motion evaluation + + //- Gravity + Switch gravity_; + + //- Virtual mass + Switch virtualMass_; + + //- Virtual mass force coefficient + scalar Cvm_; + + //- Pressure gradient + Switch pressureGradient_; + + + // Additional info + + //- Name of velucity field - default = "U" + const word UName_; + + +public: + + // Constructors + + //- Construct from mesh, dictionary and gravity + particleForces + ( + const fvMesh& mesh, + const dictionary& dict, + const vector& g + ); + + //- Construct copy + particleForces(const particleForces& f); + + + //- Destructor + ~particleForces(); + + + // Member Functions + + // Access + + //- Return the particleForces dictionary + const dictionary& dict() const; + + //- Return the gravity vector + const vector& g() const; + + //- Return gravity force activate switch + Switch gravity() const; + + //- Return virtual mass force activate switch + Switch virtualMass() const; + + //- Return virtual mass force coefficient + Switch Cvm() const; + + //- Return pressure gradient force activate switch + Switch pressureGradient() const; + + //- Return name of velocity field + const word& UName() const; + + + // Evaluation + + //- Cache carrier fields + void cacheFields(const bool store); + + //- Calculate action/reaction forces between carrier and particles + vector calcCoupled + ( + const label cellI, + const scalar dt, + const scalar rhoc, + const scalar rho, + const vector& Uc, + const vector& U + ) const; + + //- Calculate external forces applied to the particles + vector calcNonCoupled + ( + const label cellI, + const scalar dt, + const scalar rhoc, + const scalar rho, + const vector& Uc, + const vector& U + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/phaseProperties/phaseProperties/phaseProperties.C b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phaseProperties.C new file mode 100644 index 0000000000000000000000000000000000000000..5f04d57d30689b22b5ea80684aed369fc1c1d12b --- /dev/null +++ b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phaseProperties.C @@ -0,0 +1,360 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "phaseProperties.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* Foam::NamedEnum<Foam::phaseProperties::phaseType, 4>::names[] = +{ + "gas", + "liquid", + "solid", + "unknown" +}; + + +const Foam::NamedEnum<Foam::phaseProperties::phaseType, 4> + Foam::phaseProperties::phaseTypeNames_; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::phaseProperties::setGlobalIds(const wordList& globalNames) +{ + forAll(names_, i) + { + forAll(globalNames, j) + { + if (globalNames[j] == names_[i]) + { + globalIds_[i] = j; + break; + } + } + if (globalIds_[i] == -1) + { + FatalErrorIn + ( + "void Foam::phaseProperties::setGlobalIds(const wordList&)" + ) << "Could not find specie " << names_[i] + << " in species list" << nl + << "Available species are: " << nl << globalNames << nl + << exit(FatalError); + } + } +} + + +void Foam::phaseProperties::setGlobalCarrierIds +( + const wordList& carrierNames +) +{ + globalCarrierIds_ = -1; + + forAll(names_, i) + { + forAll (carrierNames, j) + { + if (carrierNames[j] == names_[i]) + { + globalCarrierIds_[i] = j; + break; + } + } + if (globalCarrierIds_[i] == -1) + { + FatalErrorIn + ( + "void Foam::phaseProperties::setGlobalCarrierIds" + "(" + "const wordList&" + ")" + ) << "Could not find carrier specie " << names_[i] + << " in species list" << nl + << "Available species are: " << nl << carrierNames << nl + << exit(FatalError); + } + } +} + + +void Foam::phaseProperties::checkTotalMassFraction() const +{ + scalar total = 0.0; + forAll(Y_, cmptI) + { + total += Y_[cmptI]; + } + + if (Y_.size() != 0 && mag(total - 1.0) > SMALL) + { + FatalErrorIn + ( + "void Foam::phaseProperties::checkTotalMassFraction() const" + ) << "Component fractions must total to unity for phase " + << phaseTypeNames_[phase_] << nl + << "Components: " << nl << names_ << nl << exit(FatalError); + } +} + + +Foam::word Foam::phaseProperties::phaseToStateLabel(const phaseType pt) const +{ + word state = "(unknown)"; + switch (pt) + { + case GAS: + { + state = "(g)"; + break; + } + case LIQUID: + { + state = "(l)"; + break; + } + case SOLID: + { + state = "(s)"; + break; + } + default: + { + FatalErrorIn + ( + "Foam::phaseProperties::phaseToStateLabel(phaseType pt)" + ) << "Invalid phase: " << phaseTypeNames_[pt] << nl + << " phase must be gas, liquid or solid" << nl + << exit(FatalError); + } + } + + return state; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::phaseProperties::phaseProperties() +: + phase_(UNKNOWN), + stateLabel_("(unknown)"), + names_(0), + Y_(0), + globalIds_(0), + globalCarrierIds_(0) +{} + + +Foam::phaseProperties::phaseProperties(const phaseProperties& pp) +: + phase_(pp.phase_), + stateLabel_(pp.stateLabel_), + names_(pp.names_), + Y_(pp.Y_), + globalIds_(pp.globalIds_), + globalCarrierIds_(pp.globalCarrierIds_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::phaseProperties::~phaseProperties() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::phaseProperties::initialiseGlobalIds +( + const wordList& gasNames, + const wordList& liquidNames, + const wordList& solidNames +) +{ + // determine the addressing to map between components listed in the phase + // with those given in the (main) thermo properties + switch (phase_) + { + case GAS: + { + setGlobalIds(gasNames); + forAll(globalCarrierIds_, i) + { + globalCarrierIds_[i] = globalIds_[i]; + } + break; + } + case LIQUID: + { + setGlobalIds(liquidNames); + setGlobalCarrierIds(gasNames); + break; + } + case SOLID: + { + setGlobalIds(solidNames); + WarningIn + ( + "phaseProperties::initialiseGlobalIds(...)" + ) << "Assuming no mapping between solid and carrier species" + << endl; +// setGlobalCarrierIds(gasNames); + break; + } + default: + { + FatalErrorIn + ( + "Foam::phaseProperties::setGlobalIds" + "(" + "const PtrList<volScalarField>&, " + "const wordList&, " + "const wordList&" + ")" + ) << "Invalid phase: " << phaseTypeNames_[phase_] << nl + << " phase must be gas, liquid or solid" << nl + << exit(FatalError); + } + } +} + + +Foam::phaseProperties::phaseType Foam::phaseProperties::phase() const +{ + return phase_; +} + + +const Foam::word& Foam::phaseProperties::stateLabel() const +{ + return stateLabel_; +} + + +Foam::word Foam::phaseProperties::phaseTypeName() const +{ + return phaseTypeNames_[phase_]; +} + + +const Foam::List<Foam::word>& Foam::phaseProperties::names() const +{ + return names_; +} + + +const Foam::word& Foam::phaseProperties::name(const label cmptI) const +{ + if (cmptI >= names_.size()) + { + FatalErrorIn + ( + "const Foam::word& Foam::phaseProperties::name" + "(" + "const label" + ") const" + ) << "Requested component " << cmptI << "out of range" << nl + << "Available phase components:" << nl << names_ << nl + << exit(FatalError); + } + + return names_[cmptI]; +} + + +const Foam::scalarField& Foam::phaseProperties::Y() const +{ + return Y_; +} + + +Foam::scalar& Foam::phaseProperties::Y(const label cmptI) +{ + if (cmptI >= Y_.size()) + { + FatalErrorIn + ( + "const Foam::scalar& Foam::phaseProperties::Y" + "(" + "const label" + ") const" + ) << "Requested component " << cmptI << "out of range" << nl + << "Available phase components:" << nl << names_ << nl + << exit(FatalError); + } + + return Y_[cmptI]; +} + + +Foam::label Foam::phaseProperties::globalId(const word& cmptName) const +{ + label id = this->id(cmptName); + + if (id < 0) + { + return id; + } + else + { + return globalIds_[id]; + } + +} + + +const Foam::labelList& Foam::phaseProperties::globalIds() const +{ + return globalIds_; +} + + +const Foam::labelList& Foam::phaseProperties::globalCarrierIds() const +{ + return globalCarrierIds_; +} + + +Foam::label Foam::phaseProperties::id(const word& cmptName) const +{ + forAll(names_, cmptI) + { + if (names_[cmptI] == cmptName) + { + return cmptI; + } + } + + return -1; +} + + +// ************************************************************************* // + diff --git a/src/lagrangian/intermediate/phaseProperties/phaseProperties/phaseProperties.H b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phaseProperties.H new file mode 100644 index 0000000000000000000000000000000000000000..eaa44b6afb59d4c0b90d2fd84c62738f739d1b16 --- /dev/null +++ b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phaseProperties.H @@ -0,0 +1,194 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::phaseProperties + +Description + Helper class to manage multi-component phase properties + +SourceFiles + phaseProperties.C + phasePropertiesIO.C + +\*---------------------------------------------------------------------------*/ + +#ifndef phaseProperties_H +#define phaseProperties_H + +#include "NamedEnum.H" +#include "Tuple2.H" +#include "PtrList.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class phaseProperties Declaration +\*---------------------------------------------------------------------------*/ + +class phaseProperties +{ +public: + + // Public data + + //- Phase type enumeration + enum phaseType + { + GAS, + LIQUID, + SOLID, + UNKNOWN + }; + + //- Corresponding word representations for phase type enumerations + static const NamedEnum<phaseType, 4> phaseTypeNames_; + + +private: + + // Private data + + //- Phase type + phaseType phase_; + + //- State label (s), (l), (g) etc. + word stateLabel_; + + //- List of component names + List<word> names_; + + //- List of component mass fractions + scalarField Y_; + + //- Global ids + labelList globalIds_; + + //- Map to carrier global id + labelList globalCarrierIds_; + + + // Private member functions + + //- Set global ids + void setGlobalIds(const wordList& globalNames); + + //- Set global carrier ids - attempts to map component names to global + // carrier species + void setGlobalCarrierIds(const wordList& carrierNames); + + //- Check the total mass fraction + void checkTotalMassFraction() const; + + //- Set the state label + word phaseToStateLabel(const phaseType pt) const; + + +public: + + // Constructors + + //- Null constructor + phaseProperties(); + + //- Construct from Istream + phaseProperties(Istream&); + + //- Construct as copy + phaseProperties(const phaseProperties&); + + + //- Destructor + ~phaseProperties(); + + + // Public member functions + + //- Initialise the global ids + void initialiseGlobalIds + ( + const wordList& gasNames, + const wordList& liquidNames, + const wordList& solidNames + ); + + + // Access + + //- Return const access to the phase type + phaseType phase() const; + + //- Return const access to the phase state label + const word& stateLabel() const; + + //- Return word representation of the phase type + word phaseTypeName() const; + + //- Return the list of component names + const List<word>& names() const; + + //- Return const access to a component name + const word& name(const label cmptI) const; + + //- Return const access to all component mass fractions + const scalarField& Y() const; + + //- Return non-const access to a component mass fraction + scalar& Y(const label cmptI); + + //- Return const access to the global ids + const labelList& globalIds() const; + + //- Return const access to the map to the carrier global ids + const labelList& globalCarrierIds() const; + + //- Return the global id of a component in the local list by name + // Returns -1 if not found + label globalId(const word& cmptName) const; + + //- Return the id of a component in the local list by name + // Returns -1 if not found + label id(const word& cmptName) const; + + + // IOstream Operators + + friend Istream& operator>>(Istream&, phaseProperties&); + friend Ostream& operator<<(Ostream&, const phaseProperties&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C new file mode 100644 index 0000000000000000000000000000000000000000..f738cf2683683f5a8aaded5500f7b511772db846 --- /dev/null +++ b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C @@ -0,0 +1,134 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "phaseProperties.H" +#include "dictionaryEntry.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::phaseProperties::phaseProperties(Istream& is) +: + phase_(UNKNOWN), + stateLabel_("(unknown)"), + names_(0), + Y_(0), + globalIds_(0), + globalCarrierIds_(0) +{ + is.check("Foam::phaseProperties::phaseProperties(Istream& is)"); + + dictionaryEntry phaseInfo(dictionary::null, is); + + phase_ = phaseTypeNames_[phaseInfo.keyword()]; + stateLabel_ = phaseToStateLabel(phase_); + + if (phaseInfo.size() > 0) + { + label nComponents = phaseInfo.size(); + names_.setSize(nComponents, "unknownSpecie"); + Y_.setSize(nComponents, 0.0); + globalIds_.setSize(nComponents, -1); + globalCarrierIds_.setSize(nComponents, -1); + + label cmptI = 0; + forAllConstIter(IDLList<entry>, phaseInfo, iter) + { + names_[cmptI] = iter().keyword(); + Y_[cmptI] = readScalar(phaseInfo.lookup(names_[cmptI])); + cmptI++; + } + + checkTotalMassFraction(); + } +} + + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +Foam::Istream& Foam::operator>>(Istream& is, phaseProperties& pp) +{ + is.check + ( + "Foam::Istream& Foam::operator>>(Istream&, phaseProperties&)" + ); + + dictionaryEntry phaseInfo(dictionary::null, is); + + pp.phase_ = pp.phaseTypeNames_[phaseInfo.keyword()]; + pp.stateLabel_ = pp.phaseToStateLabel(pp.phase_); + + if (phaseInfo.size() > 0) + { + label nComponents = phaseInfo.size(); + + pp.names_.setSize(nComponents, "unknownSpecie"); + pp.Y_.setSize(nComponents, 0.0); + pp.globalIds_.setSize(nComponents, -1); + pp.globalCarrierIds_.setSize(nComponents, -1); + + label cmptI = 0; + forAllConstIter(IDLList<entry>, phaseInfo, iter) + { + pp.names_[cmptI] = iter().keyword(); + pp.Y_[cmptI] = readScalar(phaseInfo.lookup(pp.names_[cmptI])); + cmptI++; + } + + pp.checkTotalMassFraction(); + } + + return is; +} + + +Foam::Ostream& Foam::operator<<(Ostream& os, const phaseProperties& pp) +{ + os.check + ( + "Foam::Ostream& Foam::operator<<(Ostream&, const phaseProperties&)" + ); + + os << pp.phaseTypeNames_[pp.phase_] << nl << token::BEGIN_BLOCK << nl + << incrIndent; + + forAll(pp.names_, cmptI) + { + os.writeKeyword(pp.names_[cmptI]) << pp.Y_[cmptI] + << token::END_STATEMENT << nl; + } + + os << decrIndent << token::END_BLOCK << nl; + + os.check + ( + "Foam::Ostream& Foam::operator<<(Ostream&, const phaseProperties&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/phaseProperties/phasePropertiesList/phasePropertiesList.C b/src/lagrangian/intermediate/phaseProperties/phasePropertiesList/phasePropertiesList.C new file mode 100644 index 0000000000000000000000000000000000000000..2d3f7ce7add1aec039013e7006d4b2618e2bd82c --- /dev/null +++ b/src/lagrangian/intermediate/phaseProperties/phasePropertiesList/phasePropertiesList.C @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "phasePropertiesList.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::phasePropertiesList::phasePropertiesList +( + Istream& is, + const wordList& gasNames, + const wordList& liquidNames, + const wordList& solidNames +) +: + props_(is), + phaseTypeNames_(), + stateLabels_() +{ + forAll(props_, i) + { + props_[i].initialiseGlobalIds(gasNames, liquidNames, solidNames); + } + + phaseTypeNames_.setSize(props_.size()); + stateLabels_.setSize(props_.size()); + forAll(props_, i) + { + phaseTypeNames_[i] = props_[i].phaseTypeName(); + stateLabels_[i] = props_[i].stateLabel(); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::phasePropertiesList::~phasePropertiesList() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const Foam::List<Foam::phaseProperties>& +Foam::phasePropertiesList::props() const +{ + return props_; +} + + +const Foam::wordList& Foam::phasePropertiesList::phaseTypes() const +{ + return phaseTypeNames_; +} + + +const Foam::wordList& Foam::phasePropertiesList::stateLabels() const +{ + return stateLabels_; +} + + +Foam::label Foam::phasePropertiesList::size() const +{ + return props_.size(); +} + + +const Foam::phaseProperties& +Foam::phasePropertiesList::operator[](const label phaseI) const +{ + return props_[phaseI]; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/phaseProperties/phasePropertiesList/phasePropertiesList.H b/src/lagrangian/intermediate/phaseProperties/phasePropertiesList/phasePropertiesList.H new file mode 100644 index 0000000000000000000000000000000000000000..50f6c62ebd65cc2a3d99b6b8333aec61da49f1ac --- /dev/null +++ b/src/lagrangian/intermediate/phaseProperties/phasePropertiesList/phasePropertiesList.H @@ -0,0 +1,110 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::phasePropertiesList + +Description + Simple container for a list of phase properties + +SourceFiles + phasePropertiesList.C + +\*---------------------------------------------------------------------------*/ + +#ifndef phasePropertiesList_H +#define phasePropertiesList_H + +#include "Istream.H" +#include "volFields.H" +#include "wordList.H" +#include "phaseProperties.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class phasePropertiesList Declaration +\*---------------------------------------------------------------------------*/ + +class phasePropertiesList +{ + // Private data + + //- List of phase properties + List<phaseProperties> props_; + + //- List of word representation of phase types + wordList phaseTypeNames_; + + //- List of state labels + wordList stateLabels_; + + +public: + + //- Constructor + phasePropertiesList + ( + Istream& is, + const wordList& gasNames, + const wordList& liquidNames, + const wordList& solidNames + ); + + //- Destructor + ~phasePropertiesList(); + + + // Public member functions + + //- Return the list of phase properties + const List<phaseProperties>& props() const; + + //- Return the list of word representation of phase types + const wordList& phaseTypes() const; + + //- Return the list of state labels + const wordList& stateLabels() const; + + //- Return the size (number of phases) + label size() const; + + + // Member operators + + const phaseProperties& operator[](const label) const; +}; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C index a2df7792aa1191751936b7fcd9a747bc0f9bdb12..658fca8e7eead3ee241151f170693cbca06d1559 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.C @@ -29,38 +29,34 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class Type> -Foam::Constant<Type>::Constant -( - const word& entryName, - const dictionary& dict -) +Foam::Constant<Type>::Constant(const word& entryName, Istream& is) : - DataEntry<Type>(typeName, entryName, dict), - value_(this->dict_.lookup("value")) + DataEntry<Type>(entryName), + value_(is) +{} + + +template<class Type> +Foam::Constant<Type>::Constant(const Constant<Type>& cnst) +: + DataEntry<Type>(cnst), + value_(cnst.value_) {} template<> -Foam::Constant<Foam::label>::Constant -( - const word& entryName, - const dictionary& dict -) +Foam::Constant<Foam::label>::Constant(const word& entryName, Istream& is) : - DataEntry<label>(typeName, entryName, dict), - value_(readLabel(this->dict_.lookup("value"))) + DataEntry<label>(entryName), + value_(readLabel(is)) {} template<> -Foam::Constant<Foam::scalar>::Constant -( - const word& entryName, - const dictionary& dict -) +Foam::Constant<Foam::scalar>::Constant(const word& entryName, Istream& is) : - DataEntry<scalar>(typeName, entryName, dict), - value_(readScalar(this->dict_.lookup("value"))) + DataEntry<scalar>(entryName), + value_(readScalar(is)) {} @@ -87,4 +83,9 @@ Type Foam::Constant<Type>::integrate(const scalar x1, const scalar x2) const } +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +#include "ConstantIO.C" + + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H index add02c11991b00c502c0b24a55d846cdd60d97ad..ff82343c1ed6f2371bee3f0494d4158c8ab65844 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/Constant.H @@ -28,12 +28,9 @@ Class Description Templated basic entry that holds a constant value. + Usage - for entry <entryName> having the value <value>: @verbatim - entry Constant - entryCoeffs - { - value 100.0; // Constant value - } + <entryName> constant <value> @endverbatim SourceFiles @@ -51,6 +48,16 @@ SourceFiles namespace Foam { +template<class Type> +class Constant; + +template<class Type> +Ostream& operator<< +( + Ostream&, + const Constant<Type>& +); + /*---------------------------------------------------------------------------*\ Class Constant Declaration \*---------------------------------------------------------------------------*/ @@ -62,14 +69,12 @@ class Constant { // Private data + //- Constant value Type value_; // Private Member Functions - //- Disallow default bitwise copy construct - Constant(const Constant<Type>&); - //- Disallow default bitwise assignment void operator=(const Constant<Type>&); @@ -77,22 +82,20 @@ class Constant public: // Runtime type information - TypeName("Constant"); + TypeName("constant"); // Constructors - //- Construct from dictionary - Constant - ( - const word& entryName, - const dictionary& dict - ); + //- Construct from entry name and Istream + Constant(const word& entryName, Istream& is); + //- Copy constructor + Constant(const Constant<Type>& cnst); - //- Destructor - ~Constant(); + //- Destructor + virtual ~Constant(); // Member Functions @@ -102,16 +105,24 @@ public: //- Integrate between two values Type integrate(const scalar x1, const scalar x2) const; + + + //- Ostream Operator + friend Ostream& operator<< <Type> + ( + Ostream&, + const Constant<Type>& + ); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<> -Constant<label>::Constant(const word& entryName, const dictionary& dict); +Constant<label>::Constant(const word& entryName, Istream& is); template<> -Constant<scalar>::Constant(const word& entryName, const dictionary& dict); +Constant<scalar>::Constant(const word& entryName, Istream& is); } // End namespace Foam diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/ConstantIO.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/ConstantIO.C new file mode 100644 index 0000000000000000000000000000000000000000..93e92a25880691cff4e488623c170a8374786270 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Constant/ConstantIO.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<class Type> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const Constant<Type>& cnst +) +{ + if (os.format() == IOstream::ASCII) + { + os << static_cast<const DataEntry<Type>& >(cnst) + << token::SPACE << cnst.value_; + } + else + { + os << static_cast<const DataEntry<Type>& >(cnst); + os.write + ( + reinterpret_cast<const char*>(&cnst.value_), + sizeof(cnst.value_) + ); + } + + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const Constant<Type>&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C index f6a99c2758aa144bfa4678769fc78905457d9b49..b107a35010cd38888518dd66f2040ebeb88f02c3 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.C @@ -29,15 +29,16 @@ License // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // template<class Type> -Foam::DataEntry<Type>::DataEntry -( - const word& typeName, - const word& entryName, - const dictionary& dict -) +Foam::DataEntry<Type>::DataEntry(const word& entryName) : - dict_(dict.subDict(entryName + "Coeffs")), - entry_(entryName) + name_(entryName) +{} + + +template<class Type> +Foam::DataEntry<Type>::DataEntry(const DataEntry<Type>& de) +: + name_(de.name_) {} @@ -51,10 +52,15 @@ Foam::DataEntry<Type>::~DataEntry() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class Type> -const Foam::dictionary& Foam::DataEntry<Type>::dict() const +const Foam::word& Foam::DataEntry<Type>::name() const { - return dict_; + return name_; } +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +#include "DataEntryIO.C" + + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H index 2aeb5b0c7e1ce81fde2415ffed5599483e0eb2f9..b3a670433d98ea05c809781ab9c13b4b4507d640 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntry.H @@ -26,6 +26,10 @@ Class Foam::DataEntry Description + Top level data entry class for use in dictionaries. Provides a mechanism + to specify a variable as a certain type, e.g. constant or table, and + provide functions to return the (interpolated) value, and integral between + limits. SourceFiles DataEntry.C @@ -43,8 +47,18 @@ SourceFiles namespace Foam { +template<class Type> +class DataEntry; + +template<class Type> +Ostream& operator<< +( + Ostream&, + const DataEntry<Type>& +); + /*---------------------------------------------------------------------------*\ - Class DataEntry Declaration + Class DataEntry Declaration \*---------------------------------------------------------------------------*/ template<class Type> @@ -52,9 +66,6 @@ class DataEntry { // Private Member Functions - //- Disallow default bitwise copy construct - DataEntry(const DataEntry<Type>&); - //- Disallow default bitwise assignment void operator=(const DataEntry<Type>&); @@ -63,11 +74,8 @@ protected: // Protected data - //- Coefficients dictionary - const dictionary dict_; - //- Name of entry - const word entry_; + const word name_; public: @@ -83,42 +91,39 @@ public: dictionary, ( const word& entryName, - const dictionary& dict + Istream& is ), - (entryName, dict) + (entryName, is) ); // Constructor - //- Construct from type name and dictionary - DataEntry - ( - const word& TypeName, - const word& entryName, - const dictionary& dict - ); + //- Construct from entry name + DataEntry(const word& entryName); + + //- Copy constructor + DataEntry(const DataEntry<Type>& de); //- Selector - static autoPtr<DataEntry<Type> > New - ( - const word& entryName, - const dictionary& dict - ); + static autoPtr<DataEntry<Type> > New + ( + const word& entryName, + const dictionary& dict + ); //- Destructor - - virtual ~DataEntry(); + virtual ~DataEntry(); // Member Functions // Access - //- Return the dictionary - const dictionary& dict() const; + //- Return the name of the entry + const word& name() const; // Evaluation @@ -128,6 +133,14 @@ public: //- Integrate between two (scalar) values virtual Type integrate(const scalar x1, const scalar x2) const = 0; + + + //- Ostream Operator + friend Ostream& operator<< <Type> + ( + Ostream&, + const DataEntry<Type>& + ); }; diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntryIO.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntryIO.C new file mode 100644 index 0000000000000000000000000000000000000000..7afa2ef2015d03bbc769771940119e54871ebe8c --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/DataEntryIO.C @@ -0,0 +1,48 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<class Type> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const DataEntry<Type>& +) +{ + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const DataEntry<Type>&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C index ac8f7c68609981128f4308e0744b47ea4626c643..3bed47c540e80671de9a0062f47fae0438ea362e 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/DataEntry/NewDataEntry.C @@ -35,27 +35,24 @@ Foam::autoPtr<Foam::DataEntry<Type> > Foam::DataEntry<Type>::New const dictionary& dict ) { - word DataEntryType(dict.lookup(entryName)); + Istream& is(dict.lookup(entryName)); - // Info<< "Selecting DataEntry " << DataEntryType << endl; + word DataEntryType(is); typename dictionaryConstructorTable::iterator cstrIter = dictionaryConstructorTablePtr_->find(DataEntryType); if (cstrIter == dictionaryConstructorTablePtr_->end()) { - FatalErrorIn - ( - "DataEntry<Type>::New(const dictionary&" - ) << "Unknown DataEntry type " - << DataEntryType << " for " << entryName - << ", constructor not in hash table" << nl << nl - << " Valid DataEntry types are :" << nl + FatalErrorIn("DataEntry<Type>::New(Istream&)") + << "Unknown DataEntry type " << DataEntryType << " for DataEntry " + << entryName << ". Constructor not in hash table" << nl << nl + << " Valid DataEntry types are:" << nl << dictionaryConstructorTablePtr_->toc() << nl << exit(FatalError); } - return autoPtr<DataEntry<Type> >(cstrIter()(entryName, dict)); + return autoPtr<DataEntry<Type> >(cstrIter()(entryName, is)); } diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C index f7d5dff6ca2ba2cbfcf2624081a247d75a457212..98abaf6e67e533db1dfe4d19b0656ba548d9d333 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.C @@ -29,30 +29,28 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class Type> -Foam::Table<Type>::Table -( - const word& entryName, - const dictionary& dict -) +Foam::Table<Type>::Table(const word& entryName, Istream& is) : - DataEntry<Type>(typeName, entryName, dict), - table_(this->dict_.lookup("table")) + DataEntry<Type>(entryName), + table_(is) { if (!table_.size()) { - FatalErrorIn - ( - "Foam::Table<Type>::Table" - "(" - "const word& entryName," - "const dictionary& dict" - ")" - ) << "Table is invalid (empty)" << nl - << exit(FatalError); + FatalErrorIn("Foam::Table<Type>::Table(const Istream&)") + << "Table for entry " << this->name_ << " is invalid (empty)" + << nl << exit(FatalError); } } +template<class Type> +Foam::Table<Type>::Table(const Table<Type>& tbl) +: + DataEntry<Type>(tbl), + table_(tbl.table_) +{} + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class Type> @@ -142,4 +140,9 @@ Type Foam::Table<Type>::integrate(const scalar x1, const scalar x2) const } +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +#include "TableIO.C" + + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H index c336840567fd43e4c1777266205304f375c83e22..2bd1152bf4ce27ff37630c54c4083d4bb3a38953 100644 --- a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/Table.H @@ -28,18 +28,14 @@ Class Description Templated table container data entry. Items are stored in a list of Tuple2's. First column is always stored as scalar entries. Data is read - in the form, e.g. for (scalar, vector): + in the form, e.g. for an entry <entryName> that is (scalar, vector): @verbatim - entry Table - entryCoeffs - { - table - ( - 0.0 (1 2 3) - 1.0 (4 5 6) - ) - } + <entryName> table + ( + 0.0 (1 2 3) + 1.0 (4 5 6) + ); @endverbatim SourceFiles @@ -58,6 +54,16 @@ SourceFiles namespace Foam { +template<class Type> +class Table; + +template<class Type> +Ostream& operator<< +( + Ostream&, + const Table<Type>& +); + /*---------------------------------------------------------------------------*\ Class Table Declaration \*---------------------------------------------------------------------------*/ @@ -69,38 +75,33 @@ class Table { // Private data - //- Table data - List<Tuple2<scalar, Type> > table_; + //- Table data + List<Tuple2<scalar, Type> > table_; // Private Member Functions - //- Disallow default bitwise copy construct - Table(const Table<Type>&); - //- Disallow default bitwise assignment void operator=(const Table<Type>&); public: - // Runtime type information - TypeName("Table"); + //- Runtime type information + TypeName("table"); // Constructors - //- Construct from dictionary - Table - ( - const word& entryName, - const dictionary& dict - ); + //- Construct from entry name and Istream + Table(const word& entryName, Istream& is); + //- Copy constructor + Table(const Table<Type>& tbl); - //- Destructor - ~Table(); + //- Destructor + virtual ~Table(); // Member Functions @@ -110,6 +111,14 @@ public: //- Integrate between two (scalar) values Type integrate(const scalar x1, const scalar x2) const; + + + //- Ostream Operator + friend Ostream& operator<< <Type> + ( + Ostream&, + const Constant<Type>& + ); }; diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/TableIO.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/TableIO.C new file mode 100644 index 0000000000000000000000000000000000000000..dda24c362aa97abe5f4bb38ec0f72747711a6758 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/Table/TableIO.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<class Type> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const Table<Type>& tbl +) +{ + if (os.format() == IOstream::ASCII) + { + os << static_cast<const DataEntry<Type>& >(tbl) + << token::SPACE << tbl.table_; + } + else + { + os << static_cast<const DataEntry<Type>& >(tbl); + os.write + ( + reinterpret_cast<const char*>(&tbl.table_), + sizeof(tbl.table_) + ); + } + + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const Table<Type>&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.C new file mode 100644 index 0000000000000000000000000000000000000000..276d54146be209caa8c656b964e388547940330e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.C @@ -0,0 +1,97 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "polynomial.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(polynomial, 0); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::polynomial::polynomial(const word& entryName, Istream& is) +: + DataEntry<scalar>(entryName), + coeffs_(is) +{ + if (!coeffs_.size()) + { + FatalErrorIn("Foam::polynomial::polynomial(const word&, Istream&)") + << "polynomial coefficients for entry " << this->name_ + << " is invalid (empty)" << nl << exit(FatalError); + } +} + + +Foam::polynomial::polynomial(const polynomial& poly) +: + DataEntry<scalar>(poly), + coeffs_(poly.coeffs_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::polynomial::~polynomial() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::scalar Foam::polynomial::value(const scalar x) const +{ + scalar y = 0.0; + forAll(coeffs_, i) + { + y += coeffs_[i].first()*pow(x, coeffs_[i].second()); + } + + return y; +} + + +Foam::scalar Foam::polynomial::integrate(const scalar x1, const scalar x2) const +{ + scalar intx = 0.0; + + forAll(coeffs_, i) + { + intx += + coeffs_[i].first()/(coeffs_[i].second() + 1) + *( + pow(x2, coeffs_[i].second() + 1) + - pow(x1, coeffs_[i].second() + 1) + ); + } + + return intx; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H new file mode 100644 index 0000000000000000000000000000000000000000..6d3cd51f65fddea75f11082b43297873f6113c27 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomial.H @@ -0,0 +1,132 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::polynomial + +Description + Polynomial container data entry for scalars. Items are stored in a list of + Tuple2's. Data is input in the form, e.g. for an entry <entryName> that + describes y = x^2 + 2x^3 + + @verbatim + <entryName> polynomial + ( + (1 2) + (2 3) + ); + @endverbatim + +SourceFiles + polynomial.C + +\*---------------------------------------------------------------------------*/ + +#ifndef polynomial_H +#define polynomial_H + +#include "DataEntry.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class polynomial; + +// Forward declaration of friend functions +Ostream& operator<< +( + Ostream&, + const polynomial& +); + +/*---------------------------------------------------------------------------*\ + Class polynomial Declaration +\*---------------------------------------------------------------------------*/ + +class polynomial +: + public DataEntry<scalar> +{ + // Private data + + //- Polynomial coefficients - list of prefactor, exponent + List<Tuple2<scalar, scalar> > coeffs_; + + + // Private Member Functions + + //- Disallow default bitwise assignment + void operator=(const polynomial&); + + +public: + + //- Runtime type information + TypeName("polynomial"); + + + // Constructors + + //- Construct from entry name and Istream + polynomial(const word& entryName, Istream& is); + + //- Copy constructor + polynomial(const polynomial& poly); + + + //- Destructor + virtual ~polynomial(); + + + // Member Functions + + //- Return polynomial value + scalar value(const scalar x) const; + + //- Integrate between two (scalar) values + scalar integrate(const scalar x1, const scalar x2) const; + + + //- Ostream Operator + friend Ostream& operator<< + ( + Ostream&, + const polynomial& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomialIO.C b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomialIO.C new file mode 100644 index 0000000000000000000000000000000000000000..05c34b645fc696abd1a6ed7c82e27683a9175508 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/DataEntry/polynomial/polynomialIO.C @@ -0,0 +1,62 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "polynomial.H" + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const polynomial& poly +) +{ + if (os.format() == IOstream::ASCII) + { + os << static_cast<const DataEntry<scalar>& >(poly) + << token::SPACE << poly.coeffs_; + } + else + { + os << static_cast<const DataEntry<scalar>& >(poly); + os.write + ( + reinterpret_cast<const char*>(&poly.coeffs_), + sizeof(poly.coeffs_) + ); + } + + // Check state of Ostream + os.check + ( + "Ostream& operator<<(Ostream&, const polynomial&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/IO/IOList/makeParcelIOList.H b/src/lagrangian/intermediate/submodels/IO/IOList/makeParcelIOList.H new file mode 100644 index 0000000000000000000000000000000000000000..fb463a8289e69b43508b45e5c9e4d9a35e9d3729 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/IO/IOList/makeParcelIOList.H @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + Macros for defining parcel IOLists + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelIOList_H +#define makeParcelIOList_H + +#include "IOPtrList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelIOList(ParcelType) \ + \ + typedef IOPtrList<ParcelType> IOPtrList##ParcelType; \ + \ + defineTemplateTypeNameAndDebugWithName \ + ( \ + IOPtrList##ParcelType, \ + "IOPtrList<"#ParcelType">", \ + 0 \ + ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // + diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C index d583a551c1729a89c0864e66f562ad8b16d32b51..dc89a44b9d7752fc1eff83570c90185e40b2e995 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.C @@ -22,14 +22,20 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "DispersionModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class CloudType> +Foam::DispersionModel<CloudType>::DispersionModel(CloudType& owner) +: + dict_(dictionary::null), + owner_(owner) +{} + + template<class CloudType> Foam::DispersionModel<CloudType>::DispersionModel ( diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H index d2c4da4c302cece2958fc1114b86c2a93dbdc4ca..8587eacccadd6df46244adbdda9403627d604417 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/DispersionModel.H @@ -42,7 +42,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class DispersionModel Declaration + Class DispersionModel Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -54,7 +54,7 @@ class DispersionModel //- Cloud dictionary const dictionary& dict_; - // Reference to the owner cloud class + //- Reference to the owner cloud class CloudType& owner_; @@ -81,6 +81,9 @@ public: // Constructors + //- Construct null from owner + DispersionModel(CloudType& owner); + //- Construct from components DispersionModel ( @@ -89,18 +92,16 @@ public: ); - // Destructor - - virtual ~DispersionModel(); + //- Destructor + virtual ~DispersionModel(); - // Selector - - static autoPtr<DispersionModel<CloudType> > New - ( - const dictionary& dict, - CloudType& owner - ); + //- Selector + static autoPtr<DispersionModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); // Access @@ -120,6 +121,9 @@ public: //- Flag to indicate whether model activates injection model virtual bool active() const = 0; + //- Cache carrier fields + virtual void cacheFields(const bool store) = 0; + //- Update (disperse particles) virtual vector update ( @@ -159,6 +163,20 @@ public: add##SS##CloudType##ParcelType##ConstructorToTable_; +#define makeDispersionModelThermoType(SS, CloudType, ParcelType, ThermoType) \ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + DispersionModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/NewDispersionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/NewDispersionModel.C index 4db4d79194320d0f7d3788f2fc96c9a8c5309e6e..09717b8e86401a504900962c0863d57d82521d8b 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/NewDispersionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionModel/NewDispersionModel.C @@ -38,10 +38,7 @@ Foam::DispersionModel<CloudType>::New CloudType& owner ) { - word DispersionModelType - ( - dict.lookup("DispersionModel") - ); + word DispersionModelType(dict.lookup("DispersionModel")); Info<< "Selecting DispersionModel " << DispersionModelType << endl; @@ -53,11 +50,14 @@ Foam::DispersionModel<CloudType>::New FatalErrorIn ( "DispersionModel<CloudType>::New" - "(const dictionary&, CloudType&)" + "(" + "const dictionary&, " + "CloudType&" + ")" ) << "Unknown DispersionModelType type " << DispersionModelType << ", constructor not in hash table" << nl << nl - << " Valid DispersionModel types are :" << nl + << " Valid DispersionModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C index 4e834244453dd2403aae07d6793562107d1b1ab1..3689acf8f4783b985f7e77f8ef37adf591d3f99d 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "DispersionRASModel.H" @@ -44,7 +42,11 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel ( "RASProperties" ) - ) + ), + kPtr_(NULL), + ownK_(false), + epsilonPtr_(NULL), + ownEpsilon_(false) {} @@ -52,7 +54,56 @@ Foam::DispersionRASModel<CloudType>::DispersionRASModel template<class CloudType> Foam::DispersionRASModel<CloudType>::~DispersionRASModel() -{} +{ + cacheFields(false); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +void Foam::DispersionRASModel<CloudType>::cacheFields(const bool store) +{ + if (store) + { + tmp<volScalarField> tk = this->turbulence().k(); + if (tk.isTmp()) + { + kPtr_ = tk.ptr(); + ownK_ = true; + } + else + { + kPtr_ = tk.operator->(); + ownK_ = false; + } + + tmp<volScalarField> tepsilon = this->turbulence().epsilon(); + if (tepsilon.isTmp()) + { + epsilonPtr_ = tepsilon.ptr(); + ownEpsilon_ = true; + } + else + { + epsilonPtr_ = tepsilon.operator->(); + ownEpsilon_ = false; + } + } + else + { + if (ownK_ && kPtr_) + { + delete kPtr_; + ownK_ = false; + } + if (ownEpsilon_ && epsilonPtr_) + { + delete epsilonPtr_; + ownEpsilon_ = false; + } + } +} // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H index 1628f23c9b1846b296d668eed3416e8823f492a1..f95ab368854df24e0dca1a23b12a99d66f23d1d4 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.H @@ -50,12 +50,27 @@ class DispersionRASModel : public DispersionModel<CloudType> { +protected: - // Private data + // Protected data //- Reference to the compressible turbulence model const compressible::RASModel& turbulence_; + // Locally cached turbulence fields + + //- Turbulence k + const volScalarField* kPtr_; + + //- Take ownership of the k field + bool ownK_; + + //- Turbulence epsilon + const volScalarField* epsilonPtr_; + + //- Take ownership of the epsilon field + bool ownEpsilon_; + public: @@ -73,13 +88,15 @@ public: ); - // Destructor - - virtual ~DispersionRASModel(); + //- Destructor + virtual ~DispersionRASModel(); // Member Functions + //- Cache carrier fields + virtual void cacheFields(const bool store); + //- Return const access to the turbulence model const compressible::RASModel& turbulence() const { diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C index e15ee595e06b5503fa4fc16cf58b7fb2d91a8902..7877af745e61c6f51b427b1e9ae39963773414f3 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "GradientDispersionRAS.H" @@ -37,7 +35,8 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS CloudType& owner ) : - DispersionRASModel<CloudType>(dict, owner) + DispersionRASModel<CloudType>(dict, owner), + gradkPtr_(NULL) {} @@ -45,7 +44,9 @@ Foam::GradientDispersionRAS<CloudType>::GradientDispersionRAS template<class CloudType> Foam::GradientDispersionRAS<CloudType>::~GradientDispersionRAS() -{} +{ + cacheFields(false); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -57,6 +58,25 @@ bool Foam::GradientDispersionRAS<CloudType>::active() const } +template<class CloudType> +void Foam::GradientDispersionRAS<CloudType>::cacheFields(const bool store) +{ + DispersionRASModel<CloudType>::cacheFields(store); + + if (store) + { + gradkPtr_ = fvc::grad(*this->kPtr_).ptr(); + } + else + { + if (gradkPtr_) + { + delete gradkPtr_; + } + } +} + + template<class CloudType> Foam::vector Foam::GradientDispersionRAS<CloudType>::update ( @@ -70,9 +90,9 @@ Foam::vector Foam::GradientDispersionRAS<CloudType>::update { const scalar cps = 0.16432; - const volScalarField& k = this->turbulence().k(); - const volScalarField& epsilon = this->turbulence().epsilon(); - const volVectorField gradk = fvc::grad(k); + const volScalarField& k = *this->kPtr_; + const volScalarField& epsilon = *this->epsilonPtr_; + const volVectorField& gradk = *this->gradkPtr_; const scalar UrelMag = mag(U - Uc - UTurb); @@ -111,7 +131,7 @@ Foam::vector Foam::GradientDispersionRAS<CloudType>::update // away from the axis of symmetry // This creates a 'hole' in the spray and to // prevent this we let x1 be both negative/positive - if (this->owner().meshInfo().caseIs2d()) + if (this->owner().mesh().nSolutionD() == 2) { fac *= x1; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H index 150bbeb1272fb2477982d438476ceb13686155ce..18391f4eead858e2aa42ba7e55a22f4d634b803a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.H @@ -51,6 +51,13 @@ class GradientDispersionRAS : public DispersionRASModel<CloudType> { +protected: + + // Locally cached turbulence fields + + //- Gradient of k + const volVectorField* gradkPtr_; + public: @@ -68,9 +75,8 @@ public: ); - // Destructor - - ~GradientDispersionRAS(); + //- Destructor + virtual ~GradientDispersionRAS(); // Member Functions @@ -78,8 +84,11 @@ public: //- Flag to indicate whether model activates injection model bool active() const; + //- Cache carrier fields + virtual void cacheFields(const bool store); + //- Update (disperse particles) - vector update + virtual vector update ( const scalar dt, const label celli, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C index c239a281ba9162442a7987a88cfb90956661634a..a1927dfcd48e1e9e14fafeaf163c290a9cb34031 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "NoDispersion.H" @@ -33,11 +31,11 @@ Description template<class CloudType> Foam::NoDispersion<CloudType>::NoDispersion ( - const dictionary& dict, + const dictionary&, CloudType& owner ) : - DispersionModel<CloudType>(dict, owner) + DispersionModel<CloudType>(owner) {} @@ -57,15 +55,22 @@ bool Foam::NoDispersion<CloudType>::active() const } +template<class CloudType> +void Foam::NoDispersion<CloudType>::cacheFields(const bool) +{ +// do nothing +} + + template<class CloudType> Foam::vector Foam::NoDispersion<CloudType>::update ( - const scalar dt, - const label celli, - const vector& U, + const scalar, + const label, + const vector&, const vector& Uc, - vector& UTurb, - scalar& tTurb + vector&, + scalar& ) { // Do nothing diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H index 52632c3a835dde0074da8d310474c04ee6d57f82..93482c49ae9a164ff617f13d2ed27ae04c50536a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/NoDispersion/NoDispersion.H @@ -26,7 +26,7 @@ Class Foam::NoDispersion Description - No turbulent dispersion of the parcels + Place holder for 'none' option \*---------------------------------------------------------------------------*/ @@ -41,7 +41,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class NoDispersion Declaration + Class NoDispersion Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -49,11 +49,10 @@ class NoDispersion : public DispersionModel<CloudType> { - public: //- Runtime type information - TypeName("NoDispersion"); + TypeName("none"); // Constructors @@ -66,18 +65,20 @@ public: ); - // Destructor - - ~NoDispersion(); + //- Destructor + virtual ~NoDispersion(); // Member Functions //- Flag to indicate whether model activates injection model - bool active() const; + virtual bool active() const; + + //- Cache carrier fields + virtual void cacheFields(const bool store); //- Update (disperse particles) - vector update + virtual vector update ( const scalar dt, const label celli, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C index 6887244a98a82f13c19222c4af5371402a6fa620..ffd3fd974a0fb98b3fe17b20ef5ed70810d1f343 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "StochasticDispersionRAS.H" @@ -70,8 +68,8 @@ Foam::vector Foam::StochasticDispersionRAS<CloudType>::update { const scalar cps = 0.16432; - const volScalarField& k = this->turbulence().k(); - const volScalarField& epsilon = this->turbulence().epsilon(); + const volScalarField& k = *this->kPtr_; + const volScalarField& epsilon = *this->epsilonPtr_; const scalar UrelMag = mag(U - Uc - UTurb); @@ -95,7 +93,8 @@ Foam::vector Foam::StochasticDispersionRAS<CloudType>::update dir /= mag(dir) + SMALL; // Numerical Recipes... Ch. 7. Random Numbers... - scalar x1, x2; + scalar x1 = 0.0; + scalar x2 = 0.0; scalar rsq = 10.0; while ((rsq > 1.0) || (rsq == 0.0)) { diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H index 596fa1d1eb60afe12040290b40ff8156e08da762..17c70b7814c9b3da80c891b091b82f2c25e31d5a 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/StochasticDispersionRAS/StochasticDispersionRAS.H @@ -51,7 +51,6 @@ class StochasticDispersionRAS : public DispersionRASModel<CloudType> { - public: //- Runtime type information @@ -68,18 +67,17 @@ public: ); - // Destructor - - ~StochasticDispersionRAS(); + //- Destructor + virtual ~StochasticDispersionRAS(); // Member Functions //- Flag to indicate whether model activates injection model - bool active() const; + virtual bool active() const; //- Update (disperse particles) - vector update + virtual vector update ( const scalar dt, const label celli, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.C index 7494f397e693d2efc0dfd29aa4ee0c51bee2da5b..ae4e2a20629b5a917668e0787509f05f0bec7549 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.C @@ -34,7 +34,8 @@ Foam::DragModel<CloudType>::DragModel const dictionary& dict, CloudType& owner ) -: dict_(dict), +: + dict_(dict), owner_(owner) {} @@ -63,22 +64,21 @@ const Foam::dictionary& Foam::DragModel<CloudType>::dict() const template<class CloudType> -Foam::scalar Foam::DragModel<CloudType>::Cu +Foam::scalar Foam::DragModel<CloudType>::utc ( const vector& Ur, const scalar d, const scalar rhoc, - const scalar rhop, const scalar mu ) const { const scalar magUr = mag(Ur); - const scalar Re = rhoc*magUr*d/(mu + SMALL); + const scalar Re = rhoc*magUr*d/(mu + ROOTVSMALL); - const scalar cd = Cd(Re); + const scalar Cd = this->Cd(Re); - return 3.0*cd*rhoc*magUr/(4.0*d*rhop); + return Cd*rhoc*magUr/8.0; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H index 31b4ac56f0e770d968f3a44dc46b953efae2439e..4b4d6c4dd83b46efae005017e1759445e3705326 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/DragModel.H @@ -25,7 +25,6 @@ License Class Foam::DragModel - Description Templated drag model class @@ -54,13 +53,12 @@ namespace Foam template<class CloudType> class DragModel { - // Private data //- The cloud dictionary const dictionary& dict_; - // reference to the owner cloud class + //- Reference to the owner cloud class CloudType& owner_; @@ -93,18 +91,16 @@ public: ); - // Destructor - - virtual ~DragModel(); - + //- Destructor + virtual ~DragModel(); - // Selector - static autoPtr<DragModel<CloudType> > New - ( - const dictionary& dict, - CloudType& cloud - ); + //- Selector + static autoPtr<DragModel<CloudType> > New + ( + const dictionary& dict, + CloudType& cloud + ); // Access @@ -124,14 +120,13 @@ public: //- Return drag coefficient virtual scalar Cd(const scalar Re) const = 0; - //- Return linearised coefficient for velocity equation - // Drag force per unit particle mass = Cu(U - Up) - scalar Cu + //- Return momentum transfer coefficient + // Drag force per unit particle surface area = utc(U - Up) + scalar utc ( const vector& Ur, const scalar d, const scalar rhoc, - const scalar rhop, const scalar mu ) const; }; @@ -159,6 +154,20 @@ public: add##SS##CloudType##ParcelType##ConstructorToTable_; +#define makeDragModelThermoType(SS, CloudType, ParcelType, ThermoType) \ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + DragModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/NewDragModel.C b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/NewDragModel.C index 3cee2ec548d9992e5b31de7ef6b458e2c59c33b8..6e1e80d3cda7a76abc961b277ca09e87f3d09664 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/NewDragModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/DragModel/NewDragModel.C @@ -35,10 +35,7 @@ Foam::autoPtr<Foam::DragModel<CloudType> > Foam::DragModel<CloudType>::New CloudType& owner ) { - word DragModelType - ( - dict.lookup("DragModel") - ); + word DragModelType(dict.lookup("DragModel")); Info<< "Selecting DragModel " << DragModelType << endl; @@ -50,12 +47,14 @@ Foam::autoPtr<Foam::DragModel<CloudType> > Foam::DragModel<CloudType>::New FatalErrorIn ( "DragModel<CloudType>::New" - "(const dictionary&, CloudType&)" - ) - << "Unknown DragModelType type " + "(" + "const dictionary&," + "CloudType&" + ")" + ) << "Unknown DragModelType type " << DragModelType << ", constructor not in hash table" << nl << nl - << " Valid DragModel types are :" << nl + << " Valid DragModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.C b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.C index 31ce20689c9bd17195b71eeeeef1d6e8b8c28c0b..2d1586c9cbf058eedbeddc9bb9cd928342c063a6 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.C @@ -29,11 +29,7 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template <class CloudType> -Foam::NoDrag<CloudType>::NoDrag -( - const dictionary& dict, - CloudType& owner -) +Foam::NoDrag<CloudType>::NoDrag(const dictionary& dict, CloudType& owner) : DragModel<CloudType>(dict, owner) {} @@ -56,10 +52,7 @@ bool Foam::NoDrag<CloudType>::active() const template<class CloudType> -Foam::scalar Foam::NoDrag<CloudType>::Cd -( - const scalar -) const +Foam::scalar Foam::NoDrag<CloudType>::Cd(const scalar) const { return 0.0; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H index c6033677c7c2d68286f22283d980ec14c8eee393..b017f50270ad14935a7fb070d2439dd57f2c4bd1 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/NoDrag/NoDrag.H @@ -26,7 +26,7 @@ Class Foam::NoDrag Description - Dummy drag model for 'no drag' + Dummy drag model for 'none' \*---------------------------------------------------------------------------*/ @@ -48,11 +48,10 @@ class NoDrag : public DragModel<CloudType> { - public: //- Runtime type information - TypeName("NoDrag"); + TypeName("none"); // Constructors @@ -60,14 +59,13 @@ public: //- Construct from dictionary NoDrag ( - const dictionary& dict, - CloudType& owner + const dictionary&, + CloudType& ); - // Destructor - - ~NoDrag(); + //- Destructor + virtual ~NoDrag(); // Member Functions diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.C b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.C index c53541038362cc54c68e78406a1c6955180ec97a..e5c76c54169d262176373d1a42d778c709b630e5 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.C @@ -56,10 +56,7 @@ bool Foam::SphereDrag<CloudType>::active() const template <class CloudType> -Foam::scalar Foam::SphereDrag<CloudType>::Cd -( - const scalar Re -) const +Foam::scalar Foam::SphereDrag<CloudType>::Cd(const scalar Re) const { scalar Cd; if (Re < SMALL) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H index 31e8ae1d725354b23afbcca947971f504f1bc9f8..8e3afaf8aeb86a8acc18954f96f427fa4570d677 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/DragModel/SphereDrag/SphereDrag.H @@ -48,7 +48,6 @@ class SphereDrag : public DragModel<CloudType> { - public: //- Runtime type information @@ -65,9 +64,8 @@ public: ); - // Destructor - - ~SphereDrag(); + //- Destructor + virtual ~SphereDrag(); // Member Functions diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C index a1cc13f345d8d36b4238e539b93c16902553a2bc..b7dd300b45857b920c986b79e63726db8020f478 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C @@ -30,7 +30,7 @@ License // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class CloudType> -Foam::label Foam::ConeInjection<CloudType>::nParcelsToInject +Foam::label Foam::ConeInjection<CloudType>::parcelsToInject ( const scalar time0, const scalar time1 @@ -77,6 +77,7 @@ Foam::ConeInjection<CloudType>::ConeInjection InjectionModel<CloudType>(dict, owner, typeName), duration_(readScalar(this->coeffDict().lookup("duration"))), position_(this->coeffDict().lookup("position")), + injectorCell_(-1), direction_(this->coeffDict().lookup("direction")), parcelsPerSecond_ ( @@ -145,6 +146,9 @@ Foam::ConeInjection<CloudType>::ConeInjection // Set total volume to inject this->volumeTotal_ = volumeFlowRate_().integrate(0.0, duration_); + + // Set/cache the injector cell + this->findCellAtPosition(injectorCell_, position_); } @@ -172,47 +176,30 @@ Foam::scalar Foam::ConeInjection<CloudType>::timeEnd() const template<class CloudType> -Foam::vector Foam::ConeInjection<CloudType>::position +void Foam::ConeInjection<CloudType>::setPositionAndCell ( + const label, const label, const scalar, - const polyMeshInfo& meshInfo + vector& position, + label& cellOwner ) { - vector pos = position_; - if (meshInfo.caseIs2d()) - { - if (meshInfo.caseIs2dWedge()) - { - pos.component(meshInfo.emptyComponent()) = 0.0; - } - else if (meshInfo.caseIs2dSlab()) - { - pos.component(meshInfo.emptyComponent()) = - meshInfo.centrePoint().component(meshInfo.emptyComponent()); - } - else - { - FatalErrorIn - ( - "Foam::vector Foam::ConeInjection<CloudType>::position" - ) << "Could not determine 2-D case geometry" << nl - << abort(FatalError); - } - } - - return pos; + position = position_; + cellOwner = injectorCell_; } template<class CloudType> -Foam::vector Foam::ConeInjection<CloudType>::velocity +void Foam::ConeInjection<CloudType>::setProperties ( + const label parcelI, const label, const scalar time, - const polyMeshInfo& meshInfo + typename CloudType::parcelType& parcel ) { + // set particle velocity const scalar deg2Rad = mathematicalConstant::pi/180.0; scalar t = time - this->SOI_; @@ -229,27 +216,26 @@ Foam::vector Foam::ConeInjection<CloudType>::velocity vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta)); vector dirVec = dcorr*direction_; dirVec += normal; + dirVec /= mag(dirVec); - // Remove empty component of velocity for slab cases - if (meshInfo.caseIs2dSlab()) - { - dirVec.component(meshInfo.emptyComponent()) = 0.0; - } + parcel.U() = Umag_().value(t)*dirVec; + + // set particle diameter + parcel.d() = parcelPDF_().sample(); +} - dirVec /= mag(dirVec); - return Umag_().value(t)*dirVec; +template<class CloudType> +bool Foam::ConeInjection<CloudType>::fullyDescribed() const +{ + return false; } template<class CloudType> -Foam::scalar Foam::ConeInjection<CloudType>::d0 -( - const label, - const scalar -) const +bool Foam::ConeInjection<CloudType>::validInjection(const label) { - return parcelPDF_().sample(); + return true; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H index d4f01a4b68eaca241b9b371ca66979807fb27bdf..5e6498e3d4cd31d614420da63b3225d47a9724bb 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H @@ -53,6 +53,8 @@ SourceFiles namespace Foam { +// Forward declaration of classes + template<class Type> class DataEntry; @@ -65,17 +67,16 @@ class ConeInjection : public InjectionModel<CloudType> { - // Private data - //- Coefficients dictionary - dictionary coeffDict_; - //- Injection duration [s] const scalar duration_; //- Injector position [m] - const vector position_; + vector position_; + + //- Cell containing injector position [] + label injectorCell_; //- Injector direction [] vector direction_; @@ -112,14 +113,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step - label nParcelsToInject + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject ( const scalar time0, const scalar time1 ) const; - //- Number of parcels to introduce over the time step + //- Number of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar time0, @@ -143,9 +144,8 @@ public: ); - // Destructor - - ~ConeInjection(); + //- Destructor + virtual ~ConeInjection(); // Member Functions @@ -159,28 +159,31 @@ public: // Injection geometry - //- Return the injection position - vector position + //- Set the injection position and owner cell + virtual void setPositionAndCell ( - const label iParcel, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + vector& position, + label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + //- Set the parcel properties + virtual void setProperties ( - const label, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + typename CloudType::parcelType& parcel ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label, - const scalar - ) const; + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C new file mode 100644 index 0000000000000000000000000000000000000000..8d1b57f2317001594da9a904742f28524bb93c6e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.C @@ -0,0 +1,289 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ConeInjectionMP.H" +#include "DataEntry.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::ConeInjectionMP<CloudType>::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + const scalar targetVolume = volumeFlowRate_().integrate(0, time1); + + const label targetParcels = + parcelsPerInjector_*targetVolume/this->volumeTotal_; + + const label nToInject = targetParcels - nInjected_; + + nInjected_ += nToInject; + + return positions_.size()*nToInject; + } + else + { + return 0; + } +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjectionMP<CloudType>::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return volumeFlowRate_().integrate(time0, time1); + } + else + { + return 0.0; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ConeInjectionMP<CloudType>::ConeInjectionMP +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner, typeName), + positionsFile_(this->coeffDict().lookup("positionsFile")), + positions_ + ( + IOobject + ( + positionsFile_, + owner.db().time().constant(), + owner.mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ), + injectorCells_(positions_.size()), + axesFile_(this->coeffDict().lookup("axesFile")), + axes_ + ( + IOobject + ( + axesFile_, + owner.db().time().constant(), + owner.mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ), + duration_(readScalar(this->coeffDict().lookup("duration"))), + parcelsPerInjector_ + ( + readScalar(this->coeffDict().lookup("parcelsPerInjector")) + ), + volumeFlowRate_ + ( + DataEntry<scalar>::New + ( + "volumeFlowRate", + this->coeffDict() + ) + ), + Umag_ + ( + DataEntry<scalar>::New + ( + "Umag", + this->coeffDict() + ) + ), + thetaInner_ + ( + DataEntry<scalar>::New + ( + "thetaInner", + this->coeffDict() + ) + ), + thetaOuter_ + ( + DataEntry<scalar>::New + ( + "thetaOuter", + this->coeffDict() + ) + ), + parcelPDF_ + ( + pdf::New + ( + this->coeffDict().subDict("parcelPDF"), + owner.rndGen() + ) + ), + nInjected_(this->parcelsAddedTotal()), + tanVec1_(positions_.size()), + tanVec2_(positions_.size()) +{ + // Normalise direction vector and determine direction vectors + // tangential to direction + forAll(axes_, i) + { + axes_[i] /= mag(axes_[i]); + + vector tangent = vector::zero; + scalar magTangent = 0.0; + + while (magTangent < SMALL) + { + vector v = this->owner().rndGen().vector01(); + + tangent = v - (v & axes_[i])*axes_[i]; + magTangent = mag(tangent); + } + + tanVec1_[i] = tangent/magTangent; + tanVec2_[i] = axes_[i]^tanVec1_[i]; + } + + // Set total volume to inject + this->volumeTotal_ = volumeFlowRate_().integrate(0.0, duration_); + + // Set/cache the injector cells + forAll(positions_, i) + { + this->findCellAtPosition + ( + injectorCells_[i], + positions_[i] + ); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ConeInjectionMP<CloudType>::~ConeInjectionMP() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::ConeInjectionMP<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::ConeInjectionMP<CloudType>::timeEnd() const +{ + return this->SOI_ + duration_; +} + + +template<class CloudType> +void Foam::ConeInjectionMP<CloudType>::setPositionAndCell +( + const label parcelI, + const label, + const scalar, + vector& position, + label& cellOwner +) +{ + const label i = parcelI%positions_.size(); + + position = positions_[i]; + cellOwner = injectorCells_[i]; +} + + +template<class CloudType> +void Foam::ConeInjectionMP<CloudType>::setProperties +( + const label parcelI, + const label, + const scalar time, + typename CloudType::parcelType& parcel +) +{ + // set particle velocity + const label i = parcelI%positions_.size(); + + const scalar deg2Rad = mathematicalConstant::pi/180.0; + + scalar t = time - this->SOI_; + scalar ti = thetaInner_().value(t); + scalar to = thetaOuter_().value(t); + scalar coneAngle = this->owner().rndGen().scalar01()*(to - ti) + ti; + + coneAngle *= deg2Rad; + scalar alpha = sin(coneAngle); + scalar dcorr = cos(coneAngle); + scalar beta = + 2.0*mathematicalConstant::pi*this->owner().rndGen().scalar01(); + + vector normal = alpha*(tanVec1_[i]*cos(beta) + tanVec2_[i]*sin(beta)); + vector dirVec = dcorr*axes_[i]; + dirVec += normal; + + dirVec /= mag(dirVec); + + parcel.U() = Umag_().value(t)*dirVec; + + // set particle diameter + parcel.d() = parcelPDF_().sample(); +} + + +template<class CloudType> +bool Foam::ConeInjectionMP<CloudType>::fullyDescribed() const +{ + return false; +} + + +template<class CloudType> +bool Foam::ConeInjectionMP<CloudType>::validInjection(const label) +{ + return true; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H new file mode 100644 index 0000000000000000000000000000000000000000..238d0463ef959f4a346eee1b57cf802abaa91ed9 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjectionMP/ConeInjectionMP.H @@ -0,0 +1,214 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::ConeInjectionMP + +Description + Cone injection multi-point + + - User specifies + - time of start of injection + - injector positions + - directions (along injection axes) + - parcel flow rate + - parcel velocities + - inner and outer cone angles + - Parcel diameters obtained by PDF model + +SourceFiles + ConeInjectionMP.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ConeInjectionMP_H +#define ConeInjectionMP_H + +#include "InjectionModel.H" +#include "pdf.H" +#include "vectorList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes + +template<class Type> +class DataEntry; + +/*---------------------------------------------------------------------------*\ + Class ConeInjectionMP Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class ConeInjectionMP +: + public InjectionModel<CloudType> +{ + // Private data + + //- Name of file containing positions data + const word positionsFile_; + + //- Field of injector positions + vectorIOField positions_; + + //- Field of cell labels corresoponding to injector positions + labelList injectorCells_; + + //- Name of file containing axes data + const word axesFile_; + + //- Field of injector positions + vectorIOField axes_; + + //- Injection duration [s] + const scalar duration_; + + //- Number of parcels to introduce per injector + const label parcelsPerInjector_; + + //- Volume flow rate of parcels to introduce relative to SOI [m^3] + const autoPtr<DataEntry<scalar> > volumeFlowRate_; + + //- Parcel velocity magnitude relative to SOI [m/s] + const autoPtr<DataEntry<scalar> > Umag_; + + //- Inner cone angle relative to SOI [deg] + const autoPtr<DataEntry<scalar> > thetaInner_; + + //- Outer cone angle relative to SOI [deg] + const autoPtr<DataEntry<scalar> > thetaOuter_; + + //- Parcel size PDF model + const autoPtr<pdf> parcelPDF_; + + //- Number of parcels per injector already injected + mutable label nInjected_; + + + // Tangential vectors to the direction vector + + //- First tangential vector + vectorList tanVec1_; + + //- Second tangential vector + vectorList tanVec2_; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Number of parcels to introduce over the time step + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("ConeInjectionMP"); + + + // Constructors + + //- Construct from dictionary + ConeInjectionMP + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~ConeInjectionMP(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + virtual void setPositionAndCell + ( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner + ); + + //- Set the parcel properties + virtual void setProperties + ( + const label parcelI, + const label nParcels, + const scalar time, + typename CloudType::parcelType& parcel + ); + + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "ConeInjectionMP.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C new file mode 100644 index 0000000000000000000000000000000000000000..8429ca7ca6543c88b80066ec1bfde05d61063e82 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.C @@ -0,0 +1,230 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "FieldActivatedInjection.H" +#include "volFields.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::FieldActivatedInjection<CloudType>::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if (sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size()) + { + return positions_.size(); + } + else + { + return 0; + } +} + + +template<class CloudType> +Foam::scalar Foam::FieldActivatedInjection<CloudType>::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + if (sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size()) + { + return this->volumeTotal_/nParcelsPerInjector_; + } + else + { + return 0; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::FieldActivatedInjection<CloudType>::FieldActivatedInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner, typeName), + factor_(readScalar(this->coeffDict().lookup("factor"))), + referenceField_ + ( + owner.db().objectRegistry::lookupObject<volScalarField> + ( + this->coeffDict().lookup("referenceField") + ) + ), + thresholdField_ + ( + owner.db().objectRegistry::lookupObject<volScalarField> + ( + this->coeffDict().lookup("thresholdField") + ) + ), + positionsFile_(this->coeffDict().lookup("positionsFile")), + positions_ + ( + IOobject + ( + positionsFile_, + owner.db().time().constant(), + owner.mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ), + injectorCells_(positions_.size()), + nParcelsPerInjector_ + ( + readLabel(this->coeffDict().lookup("parcelsPerInjector")) + ), + nParcelsInjected_(positions_.size(), 0), + U0_(this->coeffDict().lookup("U0")), + diameters_(positions_.size()), + parcelPDF_ + ( + pdf::New + ( + this->coeffDict().subDict("parcelPDF"), + owner.rndGen() + ) + ) +{ + // Construct parcel diameters - one per injector cell + forAll(diameters_, i) + { + diameters_[i] = parcelPDF_->sample(); + } + + // Determine total volume of particles to inject + this->volumeTotal_ = + nParcelsPerInjector_ + *sum(pow3(diameters_)) + *mathematicalConstant::pi/6.0; + + // Set/cache the injector cells + forAll(positions_, i) + { + this->findCellAtPosition + ( + injectorCells_[i], + positions_[i] + ); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::FieldActivatedInjection<CloudType>::~FieldActivatedInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::FieldActivatedInjection<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::FieldActivatedInjection<CloudType>::timeEnd() const +{ + return GREAT; +} + + +template<class CloudType> +void Foam::FieldActivatedInjection<CloudType>::setPositionAndCell +( + const label parcelI, + const label, + const scalar, + vector& position, + label& cellOwner +) +{ + position = positions_[parcelI]; + cellOwner = injectorCells_[parcelI]; +} + + +template<class CloudType> +void Foam::FieldActivatedInjection<CloudType>::setProperties +( + const label parcelI, + const label, + const scalar, + typename CloudType::parcelType& parcel +) +{ + // set particle velocity + parcel.U() = U0_; + + // set particle diameter + parcel.d() = diameters_[parcelI]; +} + + +template<class CloudType> +bool Foam::FieldActivatedInjection<CloudType>::fullyDescribed() const +{ + return false; +} + + +template<class CloudType> +bool Foam::FieldActivatedInjection<CloudType>::validInjection +( + const label parcelI +) +{ + const label cellI = injectorCells_[parcelI]; + + if + ( + nParcelsInjected_[parcelI] < nParcelsPerInjector_ + && factor_*referenceField_[cellI] > thresholdField_[cellI] + ) + { + nParcelsInjected_[parcelI]++; + return true; + } + + return false; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H new file mode 100644 index 0000000000000000000000000000000000000000..c2f1e3cef43a0e7e1e81685fce1c7ce317c0c5f4 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H @@ -0,0 +1,204 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::FieldActivatedInjection + +Description + Injection at specified positions, with the conditions: + + - for injection to be allowed + + factor*referenceField[cellI] >= thresholdField[cellI] + + where: + - referenceField is the field used to supply the look-up values + - thresholdField supplies the values beyond which the injection is + permitted + + - limited to a user-supllied number of injections per injector location + +SourceFiles + FieldActivatedInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef FieldActivatedInjection_H +#define FieldActivatedInjection_H + +#include "InjectionModel.H" +#include "pdf.H" +#include "volFieldsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class FieldActivatedInjection Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class FieldActivatedInjection +: + public InjectionModel<CloudType> +{ + // Private data + + // Model parameters + + //- Factor to apply to reference field + const scalar factor_; + + //- Reference field + const volScalarField& referenceField_; + + //- Threshold field + const volScalarField& thresholdField_; + + + // Injector properties + + //- Name of file containing positions data + const word positionsFile_; + + //- Field of injector (x,y,z) positions + vectorIOField positions_; + + //- Field of cell labels corresponding to injector positions + labelList injectorCells_; + + //- Number of parcels per injector + const label nParcelsPerInjector_; + + //- Field of number of parcels injected for each injector + labelList nParcelsInjected_; + + + // Parcel properties + + //- Initial parcel velocity + const vector U0_; + + //- Field of parcel diameters + scalarList diameters_; + + //- Parcel size PDF model + const autoPtr<pdf> parcelPDF_; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Volume of parcels to introduce over the time step relative to SOI + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("FieldActivatedInjection"); + + + // Constructors + + //- Construct from dictionary + FieldActivatedInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + // Destructor + virtual ~FieldActivatedInjection(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + virtual void setPositionAndCell + ( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner + ); + + //- Set the parcel properties + virtual void setProperties + ( + const label parcelI, + const label nParcels, + const scalar time, + typename CloudType::parcelType& parcel + ); + + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "FieldActivatedInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 3ef7e2a8734745b170547b09e7096139c0f3bfc0..7c63f1c26247550d6bc388c3a6a229b513bbde9d 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -26,54 +26,109 @@ License #include "InjectionModel.H" #include "mathematicalConstants.H" +#include "meshTools.H" // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // +template<class CloudType> +void Foam::InjectionModel<CloudType>::readProps() +{ + IOobject propsDictHeader + ( + "injectionProperties", + owner_.db().time().timeName(), + "uniform"/cloud::prefix/owner_.name(), + owner_.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE, + false + ); + + if (propsDictHeader.headerOk()) + { + const IOdictionary propsDict(propsDictHeader); + + propsDict.readIfPresent("massInjected", massInjected_); + propsDict.readIfPresent("nInjections", nInjections_); + propsDict.readIfPresent("parcelsAddedTotal", parcelsAddedTotal_); + propsDict.readIfPresent("timeStep0", timeStep0_); + } +} + + +template<class CloudType> +void Foam::InjectionModel<CloudType>::writeProps() +{ + if (owner_.db().time().outputTime()) + { + IOdictionary propsDict + ( + IOobject + ( + "injectionProperties", + owner_.db().time().timeName(), + "uniform"/cloud::prefix/owner_.name(), + owner_.db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ) + ); + + propsDict.add("massInjected", massInjected_); + propsDict.add("nInjections", nInjections_); + propsDict.add("parcelsAddedTotal", parcelsAddedTotal_); + propsDict.add("timeStep0", timeStep0_); + + propsDict.regIOobject::write(); + } +} + + template<class CloudType> void Foam::InjectionModel<CloudType>::prepareForNextTimeStep ( - const scalar time0, - const scalar time1, - label& nParcels, - scalar& volume + const scalar time, + label& newParcels, + scalar& newVolume ) { // Initialise values - nParcels = 0; - volume = 0.0; + newParcels = 0; + newVolume = 0.0; // Return if not started injection event - if (time1 < SOI_) + if (time < SOI_) { - timeStep0_ = time1; + timeStep0_ = time; return; } // Make times relative to SOI scalar t0 = timeStep0_ - SOI_; - scalar t1 = time1 - SOI_; + scalar t1 = time - SOI_; // Number of parcels to inject - nParcels = nParcelsToInject(t0, t1); + newParcels = parcelsToInject(t0, t1); // Volume of parcels to inject - volume = volumeToInject(t0, t1); + newVolume = volumeToInject(t0, t1); // Hold previous time if no parcels, but non-zero volume fraction - if ((nParcels == 0) && (volume > 0.0)) + if ((newParcels == 0) && (newVolume > 0.0)) { // hold value of timeStep0_ } else { // advance value of timeStep0_ - timeStep0_ = time1; + timeStep0_ = time; } } template<class CloudType> -void Foam::InjectionModel<CloudType>::findInjectorCellAndPosition +void Foam::InjectionModel<CloudType>::findCellAtPosition ( label& cellI, vector& position @@ -88,7 +143,7 @@ void Foam::InjectionModel<CloudType>::findInjectorCellAndPosition if (cellI >= 0) { const vector& C = owner_.mesh().C()[cellI]; - position += 1.0e-6*(C - position); + position += SMALL*(C - position); foundCell = owner_.mesh().pointInCell(position, cellI); } @@ -103,7 +158,7 @@ void Foam::InjectionModel<CloudType>::findInjectorCellAndPosition if (cellI >= 0) { const vector& C = owner_.mesh().C()[cellI]; - position += 1.0e-6*(C - position); + position += SMALL*(C - position); foundCell = owner_.mesh().pointInCell(position, cellI); } @@ -114,8 +169,11 @@ void Foam::InjectionModel<CloudType>::findInjectorCellAndPosition { FatalErrorIn ( - "InjectionModel<CloudType>::setInjectorCellAndPosition" - "(label&, vector&)" + "Foam::InjectionModel<CloudType>::findCellAtPosition" + "(" + "label&, " + "vector&" + ")" )<< "Cannot find parcel injection cell. " << "Parcel position = " << p0 << nl << abort(FatalError); @@ -126,11 +184,11 @@ void Foam::InjectionModel<CloudType>::findInjectorCellAndPosition template<class CloudType> Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles ( - const label nParcels, - const scalar diameter, + const label parcels, + const scalar volume, const scalar volumeFraction, - const scalar rho, - const scalar volume + const scalar diameter, + const scalar rho ) { scalar nP = 0.0; @@ -138,7 +196,7 @@ Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles { case pbMass: { - nP = volumeFraction*massTotal_/nParcels + nP = volumeFraction*massTotal_/parcels /(rho*mathematicalConstant::pi/6.0*pow3(diameter)); break; } @@ -152,9 +210,15 @@ Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles nP = 0.0; FatalErrorIn ( - "void Foam::InjectionModel<CloudType>::setNumberOfParticles" - "(const label, const scalar, const scalar, const scalar, " - "const scalar)" + "Foam::scalar " + "Foam::InjectionModel<CloudType>::setNumberOfParticles" + "(" + " const label, " + " const scalar, " + " const scalar, " + " const scalar, " + " const scalar" + ")" )<< "Unknown parcelBasis type" << nl << exit(FatalError); } @@ -165,31 +229,52 @@ Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles template<class CloudType> -void Foam::InjectionModel<CloudType>::postInjectCheck() +void Foam::InjectionModel<CloudType>::postInjectCheck(const label parcelsAdded) { - if (nParcelsAdded_ > 0) + if (parcelsAdded > 0) { - Pout<< "\n--> Cloud: " << owner_.name() << nl - << " Added " << nParcelsAdded_ - << " new parcels" << nl << endl; + Pout<< nl + << "--> Cloud: " << owner_.name() << nl + << " Added " << parcelsAdded + << " new parcels" << nl << endl; } // Increment total number of parcels added - nParcelsAddedTotal_ += nParcelsAdded_; - - // Reset parcel counters - nParcelsAdded_ = 0; + parcelsAddedTotal_ += parcelsAdded; // Update time for start of next injection time0_ = owner_.db().time().value(); // Increment number of injections nInjections_++; + + // Write current state to properties file + writeProps(); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class CloudType> +Foam::InjectionModel<CloudType>::InjectionModel(CloudType& owner) +: + dict_(dictionary::null), + owner_(owner), + coeffDict_(dictionary::null), + SOI_(0.0), + volumeTotal_(0.0), + massTotal_(0.0), + massInjected_(0.0), + nInjections_(0), + parcelsAddedTotal_(0), + parcelBasis_(pbNumber), + time0_(0.0), + timeStep0_(0.0) +{ + readProps(); +} + + template<class CloudType> Foam::InjectionModel<CloudType>::InjectionModel ( @@ -197,7 +282,8 @@ Foam::InjectionModel<CloudType>::InjectionModel CloudType& owner, const word& type ) -: dict_(dict), +: + dict_(dict), owner_(owner), coeffDict_(dict.subDict(type + "Coeffs")), SOI_(readScalar(coeffDict_.lookup("SOI"))), @@ -205,18 +291,23 @@ Foam::InjectionModel<CloudType>::InjectionModel massTotal_(dimensionedScalar(coeffDict_.lookup("massTotal")).value()), massInjected_(0.0), nInjections_(0), - nParcelsAdded_(0), - nParcelsAddedTotal_(0), - parcelBasisType_(coeffDict_.lookup("parcelBasisType")), + parcelsAddedTotal_(0), parcelBasis_(pbNumber), time0_(owner.db().time().value()), timeStep0_(0.0) { - if (parcelBasisType_ == "mass") + // Provide some info + // - also serves to initialise mesh dimensions - needed for parallel runs + // due to lazy evaluation of valid mesh dimensions + Info<< " Constructing " << owner.mesh().nGeometricD() << "-D injection" + << endl; + + word parcelBasisType = coeffDict_.lookup("parcelBasisType"); + if (parcelBasisType == "mass") { parcelBasis_ = pbMass; } - else if (parcelBasisType_ == "number") + else if (parcelBasisType == "number") { parcelBasis_ = pbNumber; } @@ -225,10 +316,16 @@ Foam::InjectionModel<CloudType>::InjectionModel FatalErrorIn ( "Foam::InjectionModel<CloudType>::InjectionModel" - "(const dictionary&, CloudType&, const word&)" + "(" + "const dictionary&, " + "CloudType&, " + "const word&" + ")" )<< "parcelBasisType must be either 'number' or 'mass'" << nl << exit(FatalError); } + + readProps(); } @@ -245,78 +342,97 @@ template<class CloudType> template<class TrackData> void Foam::InjectionModel<CloudType>::inject(TrackData& td) { + if (!active()) + { + return; + } + const scalar time = owner_.db().time().value(); - const scalar continuousDt = owner_.db().time().deltaT().value(); + const scalar carrierDt = owner_.db().time().deltaT().value(); + const polyMesh& mesh = owner_.mesh(); // Prepare for next time step - nParcelsAdded_ = 0; - label nParcels = 0; - scalar volume = 0.0; - prepareForNextTimeStep(time0_, time, nParcels, volume); + label newParcels = 0; + scalar newVolume = 0.0; + prepareForNextTimeStep(time, newParcels, newVolume); // Return if no parcels are required - if (nParcels == 0) + if (newParcels == 0) { - postInjectCheck(); + postInjectCheck(0); return; } - // Particle density given by constant properties - const scalar rho = td.constProps().rho0(); - // Volume fraction to introduce during this timestep - const scalar volFraction = volumeFraction(volume); + const scalar volFraction = volumeFraction(newVolume); // Duration of injection period during this timestep - const scalar deltaT = min - ( - continuousDt, - min(time - SOI_, timeEnd() - time0_) - ); + const scalar deltaT = + max(0.0, min(carrierDt, min(time - SOI_, timeEnd() - time0_))); // Pad injection time if injection starts during this timestep const scalar padTime = max(0.0, SOI_ - time0_); - // Introduce new parcels linearly with time - for (label iParcel=0; iParcel<nParcels; iParcel++) + // Introduce new parcels linearly across carrier phase timestep + label parcelsAdded = 0; + for (label parcelI=0; parcelI<newParcels; parcelI++) { - // Calculate the pseudo time of injection for parcel 'iParcel' - scalar timeInj = time0_ + padTime + deltaT*iParcel/nParcels; - - // Determine injected parcel properties - vector pos = position(iParcel, timeInj, owner_.meshInfo()); - - // Diameter of parcels - scalar d = d0(iParcel, timeInj); - - // Number of particles per parcel - scalar nP = setNumberOfParticles - ( - nParcels, - d, - volFraction, - rho, - volume - ); - - // Velocity of parcels - vector U = velocity(iParcel, timeInj, owner_.meshInfo()); - - // Determine the injection cell - label cellI = -1; - findInjectorCellAndPosition(cellI, pos); - - if (cellI >= 0) + if (validInjection(parcelI)) { - scalar dt = time - timeInj; - td.cloud().addNewParcel(pos, cellI, d, U, nP, dt); - - massInjected_ += nP*rho*mathematicalConstant::pi*pow3(d)/6.0; - nParcelsAdded_++; + // Calculate the pseudo time of injection for parcel 'parcelI' + scalar timeInj = time0_ + padTime + deltaT*parcelI/newParcels; + + // Determine the injection position and owner cell + label cellI = -1; + vector pos = vector::zero; + setPositionAndCell(parcelI, newParcels, timeInj, pos, cellI); + + if (cellI > -1) + { + // Lagrangian timestep + scalar dt = time - timeInj; + + // Apply corrections to position for 2-D cases + meshTools::constrainToMeshCentre(mesh, pos); + + // Create a new parcel + parcelType* pPtr = new parcelType(td.cloud(), pos, cellI); + + // Assign new parcel properties in injection model + setProperties(parcelI, newParcels, timeInj, *pPtr); + + // Check new parcel properties + td.cloud().checkParcelProperties(*pPtr, dt, fullyDescribed()); + + // Apply correction to velocity for 2-D cases + meshTools::constrainDirection + ( + mesh, + mesh.solutionD(), + pPtr->U() + ); + + // Number of particles per parcel + pPtr->nParticle() = + setNumberOfParticles + ( + newParcels, + newVolume, + volFraction, + pPtr->d(), + pPtr->rho() + ); + + // Add the new parcel + td.cloud().addParticle(pPtr); + + massInjected_ += pPtr->nParticle()*pPtr->mass(); + parcelsAdded++; + } } } - postInjectCheck(); + postInjectCheck(parcelsAdded); } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index 791631fb9934586d9116d3efb54e16aead841fc2..ad42a27030e37baee82f64915a558b2ce0392753 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -25,9 +25,20 @@ License Class Foam::InjectionModel - Description - Templated injection model class + Templated injection model class. + + The injection model nominally describes the parcel: + - position + - diameter + - velocity + In this case, the fullyDescribed() flag should be set to 0 (false). When + the parcel is then added to the cloud, the remaining properties are + populated using values supplied in the constant properties. + + If, however, all of a parcel's properties are described in the model, the + fullDescribed() flag should be set to 1 (true). + SourceFiles InjectionModel.C @@ -54,7 +65,6 @@ namespace Foam template<class CloudType> class InjectionModel { - public: // Enumerations @@ -75,17 +85,29 @@ private: //- The cloud dictionary const dictionary& dict_; - // Reference to the owner cloud class + //- Reference to the owner cloud class CloudType& owner_; //- The coefficients dictionary const dictionary coeffDict_; + // Private member functions + + //- Read injector properties from previous run (if applicable) + void readProps(); + + //- Write injector properties + void writeProps(); + + protected: // Protected data + //- Convenience typedef for parcel type + typedef typename CloudType::parcelType parcelType; + // Global injection properties //- Start of injection [s] @@ -107,22 +129,14 @@ protected: //- Number of injections counter label nInjections_; - //- Running counter of parcels added during each injection - label nParcelsAdded_; - //- Running counter of total number of parcels added - label nParcelsAddedTotal_; + label parcelsAddedTotal_; // Injection properties per Lagrangian time step - // Parcel basis - - //- Parcel basis name - const word parcelBasisType_; - - //- Parcel basis enumeration - parcelBasis parcelBasis_; + //- Parcel basis enumeration + parcelBasis parcelBasis_; //- Continuous phase time at start of injection time step [s] scalar time0_; @@ -133,50 +147,49 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step - virtual label nParcelsToInject + //- Number of parcels to introduce over the time step relative to SOI + virtual label parcelsToInject ( const scalar time0, const scalar time1 ) const = 0; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI virtual scalar volumeToInject ( const scalar time0, const scalar time1 ) const = 0; + //- Additional flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI) = 0; //- Determine properties for next time step/injection interval - void prepareForNextTimeStep + virtual void prepareForNextTimeStep ( - const scalar time0, - const scalar time1, - label& nParcels, - scalar& volume + const scalar time, + label& newParcels, + scalar& newVolume ); - //- Find the cell that contains the injector position - // Will modify position slightly towards the owner cell centroid - virtual void findInjectorCellAndPosition - ( - label& cellI, - vector& position - ); + //- Find the cell that contains the supplied position + // Will modify position slightly towards the owner cell centroid to + // ensure that it lies in a cell and not edge/face + virtual void findCellAtPosition(label& cellI, vector& position); //- Set number of particles to inject given parcel properties - scalar setNumberOfParticles + virtual scalar setNumberOfParticles ( - const label nParcels, - const scalar diameter, + const label parcels, + const scalar volume, const scalar volumeFraction, - const scalar rho, - const scalar volume + const scalar diameter, + const scalar rho ); //- Post injection checks - void postInjectCheck(); + virtual void postInjectCheck(const label parcelsAdded); public: @@ -200,6 +213,9 @@ public: // Constructors + //- Construct null from owner + InjectionModel(CloudType& owner); + //- Construct from dictionary InjectionModel ( @@ -253,7 +269,7 @@ public: //- Return mass of particles to introduce inline scalar massTotal() const; - //- Return mass of particles injected (cummulative) + //- Return mass of particles injected (cumulative) inline scalar massInjected() const; //- Return the end-of-injection time @@ -265,7 +281,7 @@ public: inline label nInjections() const; //- Return the total number parcels added - inline label nParcelsAddedTotal() const; + inline label parcelsAddedTotal() const; // Per-injection event functions @@ -280,35 +296,30 @@ public: // Injection geometry - //- Return the injection position - virtual vector position + //- Set the injection position and owner cell + virtual void setPositionAndCell ( - const label iParcel, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + vector& position, + label& cellOwner ) = 0; - //- Return the velocity of the parcel to introduce at a time - virtual vector velocity + //- Set the parcel properties + virtual void setProperties ( - const label iParcel, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + typename CloudType::parcelType& parcel ) = 0; - //- Return the diameter of the parcel to introduce at a time - virtual scalar d0 - ( - const label iParcel, - const scalar time - ) const = 0; + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const = 0; }; -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "InjectionModelI.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam @@ -331,6 +342,25 @@ public: add##SS##CloudType##ParcelType##ConstructorToTable_; +#define makeInjectionModelThermoType(SS, CloudType, ParcelType, ThermoType) \ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + InjectionModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "InjectionModelI.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelI.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelI.H index f02d05b902c664a032856b0b29b67ec48d7a0f09..80a142816c826fa03984fee7c502c063280a84c5 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelI.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModelI.H @@ -90,9 +90,9 @@ Foam::label Foam::InjectionModel<CloudType>::nInjections() const template<class CloudType> -Foam::label Foam::InjectionModel<CloudType>::nParcelsAddedTotal() const +Foam::label Foam::InjectionModel<CloudType>::parcelsAddedTotal() const { - return nParcelsAddedTotal_; + return parcelsAddedTotal_; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/NewInjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/NewInjectionModel.C index 3501e367aadbe48867cae7724d53b5abf1ac8b1c..c0926272c622c105007d025ecb4e025c8f906c39 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/NewInjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/NewInjectionModel.C @@ -36,10 +36,7 @@ Foam::InjectionModel<CloudType>::New CloudType& owner ) { - word InjectionModelType - ( - dict.lookup("InjectionModel") - ); + word InjectionModelType(dict.lookup("InjectionModel")); Info<< "Selecting InjectionModel " << InjectionModelType << endl; @@ -51,11 +48,14 @@ Foam::InjectionModel<CloudType>::New FatalErrorIn ( "InjectionModel<CloudType>::New" - "(const dictionary&, CloudType&)" + "(" + "const dictionary&, " + "CloudType&" + ")" ) << "Unknown InjectionModelType type " << InjectionModelType << ", constructor not in hash table" << nl << nl - << " Valid InjectionModel types are :" << nl + << " Valid InjectionModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C new file mode 100644 index 0000000000000000000000000000000000000000..5fd976e0160d5ba25a548b86730e38b007085d3b --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.C @@ -0,0 +1,241 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "KinematicLookupTableInjection.H" +#include "scalarIOList.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::KinematicLookupTableInjection<CloudType>::INPUT_FILE_COLS = 9; + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::KinematicLookupTableInjection<CloudType>::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return round(injectorCells_.size()*(time1 - time0)*nParcelsPerSecond_); + } + else + { + return 0; + } +} + + +template<class CloudType> +Foam::scalar Foam::KinematicLookupTableInjection<CloudType>::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + scalar volume = 0.0; + if ((time0 >= 0.0) && (time0 < duration_)) + { + forAll(mDot_, injectorI) + { + volume += mDot_[injectorI]/rho_[injectorI]*(time1 - time0); + } + } + + return volume; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::KinematicLookupTableInjection<CloudType>::KinematicLookupTableInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner, typeName), + inputFileName_(this->coeffDict().lookup("inputFile")), + duration_(readScalar(this->coeffDict().lookup("duration"))), + nParcelsPerSecond_ + ( + readScalar(this->coeffDict().lookup("parcelsPerSecond")) + ), + x_(0), + U_(0), + d_(0), + rho_(0), + mDot_(0), + injectorCells_(0) +{ + scalarListIOList injectorData + ( + IOobject + ( + inputFileName_, + owner.db().time().constant(), + owner.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + x_.setSize(injectorData.size()); + U_.setSize(injectorData.size()); + d_.setSize(injectorData.size()); + rho_.setSize(injectorData.size()); + mDot_.setSize(injectorData.size()); + + // Populate lists + forAll(injectorData, injectorI) + { + if (injectorData[injectorI].size() != INPUT_FILE_COLS) + { + FatalErrorIn + ( + "KinematicLookupTableInjection" + "(" + "const dictionary&," + "CloudType& owner" + ")" + ) << "Incorrect number of entries in injector specification " + << "- found " << injectorData[injectorI].size() + << ", expected " << INPUT_FILE_COLS << ":" << nl + << " x0 x1 x2 u0 u1 u2 d rho mDot " << nl + << exit(FatalError); + } + x_[injectorI].component(0) = injectorData[injectorI][0]; + x_[injectorI].component(1) = injectorData[injectorI][1]; + x_[injectorI].component(2) = injectorData[injectorI][2]; + U_[injectorI].component(0) = injectorData[injectorI][3]; + U_[injectorI].component(1) = injectorData[injectorI][4]; + U_[injectorI].component(2) = injectorData[injectorI][5]; + d_[injectorI] = injectorData[injectorI][6]; + rho_[injectorI] = injectorData[injectorI][7]; + mDot_[injectorI] = injectorData[injectorI][8]; + } + + // Set/cache the injector cells + injectorCells_.setSize(injectorData.size()); + forAll(x_, injectorI) + { + this->findCellAtPosition(injectorCells_[injectorI], x_[injectorI]); + } + + // Determine volume of particles to inject + this->volumeTotal_ = 0.0; + forAll(mDot_, injectorI) + { + this->volumeTotal_ += mDot_[injectorI]/rho_[injectorI]; + } + this->volumeTotal_ *= duration_; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::KinematicLookupTableInjection<CloudType>::~KinematicLookupTableInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::KinematicLookupTableInjection<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::KinematicLookupTableInjection<CloudType>::timeEnd() const +{ + return this->SOI_ + duration_; +} + + +template<class CloudType> +void Foam::KinematicLookupTableInjection<CloudType>::setPositionAndCell +( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + position = x_[injectorI]; + cellOwner = injectorCells_[injectorI]; +} + + +template<class CloudType> +void Foam::KinematicLookupTableInjection<CloudType>::setProperties +( + const label parcelI, + const label nParcels, + const scalar, + typename CloudType::parcelType& parcel +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + // set particle velocity + parcel.U() = U_[injectorI]; + + // set particle diameter + parcel.d() = d_[injectorI]; + + // set particle density + parcel.rho() = rho_[injectorI]; +} + + +template<class CloudType> +bool Foam::KinematicLookupTableInjection<CloudType>::fullyDescribed() const +{ + return true; +} + + +template<class CloudType> +bool Foam::KinematicLookupTableInjection<CloudType>::validInjection +( + const label +) +{ + return true; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H new file mode 100644 index 0000000000000000000000000000000000000000..e076f0ea5821c417eb3be8aa0859f5d2e016d59a --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/KinematicLookupTableInjection/KinematicLookupTableInjection.H @@ -0,0 +1,193 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::KinematicLookupTableInjection + +Description + Particle injection sources read from look-up table. Each row corresponds to + an injection site. + + ( + (x y z u v w d rho mDot) + ); + + where: + x, y, z = global cartesian co-ordinates [m] + u, v, w = global cartesian velocity components [m/s] + d = diameter [m] + rho = density [kg/m3] + mDot = mass flow rate [kg/m3] + +SourceFiles + KinematicLookupTableInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef KinematicLookupTableInjection_H +#define KinematicLookupTableInjection_H + +#include "InjectionModel.H" +#include "pdf.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class KinematicLookupTableInjection Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class KinematicLookupTableInjection +: + public InjectionModel<CloudType> +{ + // Private data + + //- Name of file containing injector/parcel data + const word inputFileName_; + + //- Injection duration - common to all injection sources + const scalar duration_; + + //- Number of parcels per injector - common to all injection sources + const label nParcelsPerSecond_; + + //- List of parcel position per injector / [m] + List<point> x_; + + //- List of parcel velocity per injector / [m] + List<vector> U_; + + //- List of parcel diameter per injector / [m] + List<scalar> d_; + + //- List of parcel fluid density pre injector / [kg/m3] + List<scalar> rho_; + + //- List of parcel injection mass flow per injector / [kg/s] + List<scalar> mDot_; + + //- List of injector cells per injector + List<label> injectorCells_; + + //- Number of columns expected in input file + static label INPUT_FILE_COLS; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Volume of parcels to introduce over the time step relative to SOI + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("KinematicLookupTableInjection"); + + + // Constructors + + //- Construct from dictionary + KinematicLookupTableInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~KinematicLookupTableInjection(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + virtual void setPositionAndCell + ( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner + ); + + //- Set the parcel properties + virtual void setProperties + ( + const label parcelI, + const label nParcels, + const scalar time, + typename CloudType::parcelType& parcel + ); + + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "KinematicLookupTableInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C index c201b5fc4f39d4b95f55169e38bc304fa6257015..dab3cf6f13a61c9c6c669789158c590607dbff06 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C @@ -29,7 +29,7 @@ License // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class CloudType> -Foam::label Foam::ManualInjection<CloudType>::nParcelsToInject +Foam::label Foam::ManualInjection<CloudType>::parcelsToInject ( const scalar time0, const scalar time1 @@ -105,8 +105,7 @@ Foam::ManualInjection<CloudType>::ManualInjection } // Determine volume of particles to inject - this->volumeTotal_ = sum(pow(diameters_, 3)) - *mathematicalConstant::pi/6.0; + this->volumeTotal_ = sum(pow3(diameters_))*mathematicalConstant::pi/6.0; } @@ -130,71 +129,53 @@ template<class CloudType> Foam::scalar Foam::ManualInjection<CloudType>::timeEnd() const { // Not used - return 0.0; + return this->SOI_; } template<class CloudType> -Foam::vector Foam::ManualInjection<CloudType>::position +void Foam::ManualInjection<CloudType>::setPositionAndCell ( - const label iParcel, - const scalar time, - const polyMeshInfo& meshInfo + const label parcelI, + const label, + const scalar, + vector& position, + label& cellOwner ) { - vector pos = positions_[iParcel]; - if (meshInfo.caseIs2d()) - { - if (meshInfo.caseIs2dWedge()) - { - pos.component(meshInfo.emptyComponent()) = 0.0; - } - else if (meshInfo.caseIs2dSlab()) - { - pos.component(meshInfo.emptyComponent()) = - meshInfo.centrePoint().component(meshInfo.emptyComponent()); - } - else - { - FatalErrorIn - ( - "Foam::vector Foam::ManualInjection<CloudType>::position" - ) << "Could not determine 2-D case geometry" << nl - << abort(FatalError); - } - } - - return pos; + position = positions_[parcelI]; + this->findCellAtPosition(cellOwner, position); } template<class CloudType> -Foam::vector Foam::ManualInjection<CloudType>::velocity +void Foam::ManualInjection<CloudType>::setProperties ( + const label parcelI, const label, const scalar, - const polyMeshInfo& meshInfo + typename CloudType::parcelType& parcel ) { - vector vel = U0_; - if (meshInfo.caseIs2dSlab()) - { - vel.component(meshInfo.emptyComponent()) = - meshInfo.centrePoint().component(meshInfo.emptyComponent()); - } + // set particle velocity + parcel.U() = U0_; - return vel; + // set particle diameter + parcel.d() = diameters_[parcelI]; } template<class CloudType> -Foam::scalar Foam::ManualInjection<CloudType>::d0 -( - const label iParcel, - const scalar -) const +bool Foam::ManualInjection<CloudType>::fullyDescribed() const { - return diameters_[iParcel]; + return false; +} + + +template<class CloudType> +bool Foam::ManualInjection<CloudType>::validInjection(const label) +{ + return true; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H index 6393924177576713d559c8388d0ab79a3446d339..b04fee48b58ce72104de017c4ff5660f89bc5bc5 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H @@ -33,19 +33,15 @@ Description - Parcel positions in file @c positionsFile - Initial parcel velocity - Parcel diameters obtained by PDF model - - All parcels introduced at the start of the calculation - -Note - Not suitable for 2-D slab/wedge simulations unless the @c positionsFile - describes 2-D data. + - All parcels introduced at SOI SourceFiles ManualInjection.C \*---------------------------------------------------------------------------*/ -#ifndef manualInjection_H -#define manualInjection_H +#ifndef ManualInjection_H +#define ManualInjection_H #include "InjectionModel.H" #include "pdf.H" @@ -64,12 +60,8 @@ class ManualInjection : public InjectionModel<CloudType> { - // Private data - //- Coefficients dictionary - dictionary coeffDict_; - //- Name of file containing positions data const word positionsFile_; @@ -77,7 +69,7 @@ class ManualInjection vectorIOField positions_; //- Field of parcel diameters - scalarField diameters_; + scalarList diameters_; //- Initial parcel velocity const vector U0_; @@ -93,14 +85,14 @@ protected: // Protected member functions - //- Number of parcels to introduce over the time step - label nParcelsToInject + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject ( const scalar time0, const scalar time1 ) const; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar time0, @@ -124,9 +116,8 @@ public: ); - // Destructor - - ~ManualInjection(); + //- Destructor + virtual ~ManualInjection(); // Member Functions @@ -140,28 +131,31 @@ public: // Injection geometry - //- Return the injection position - vector position + //- Set the injection position and owner cell + virtual void setPositionAndCell ( - const label iParcel, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + vector& position, + label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + //- Set the parcel properties + virtual void setProperties ( - const label, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + typename CloudType::parcelType& parcel ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label, - const scalar - ) const; + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C index d5530ba71d0307393ff8c40fc054790a001b19b4..9e8019e5373a21f031105bb8a98b598a8df80cbe 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.C @@ -30,7 +30,7 @@ License // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template<class CloudType> -Foam::label Foam::NoInjection<CloudType>::nParcelsToInject +Foam::label Foam::NoInjection<CloudType>::parcelsToInject ( const scalar, const scalar @@ -56,11 +56,11 @@ Foam::scalar Foam::NoInjection<CloudType>::volumeToInject template<class CloudType> Foam::NoInjection<CloudType>::NoInjection ( - const dictionary& dict, + const dictionary&, CloudType& owner ) : - InjectionModel<CloudType>(dict, owner, typeName) + InjectionModel<CloudType>(owner) {} @@ -88,37 +88,45 @@ Foam::scalar Foam::NoInjection<CloudType>::timeEnd() const template<class CloudType> -Foam::vector Foam::NoInjection<CloudType>::position +void Foam::NoInjection<CloudType>::setPositionAndCell ( + const label, const label, const scalar, - const polyMeshInfo& + vector&, + label& ) -{ - return vector::zero; -} +{} template<class CloudType> -Foam::vector Foam::NoInjection<CloudType>::velocity +void Foam::NoInjection<CloudType>::setProperties ( + const label, const label, const scalar, - const polyMeshInfo& + typename CloudType::parcelType& parcel ) { - return vector::zero; + // set particle velocity + parcel.U() = vector::zero; + + // set particle diameter + parcel.d() = 0.0; } template<class CloudType> -Foam::scalar Foam::NoInjection<CloudType>::d0 -( - const label, - const scalar -) const +bool Foam::NoInjection<CloudType>::fullyDescribed() const { - return 0.0; + return false; +} + + +template<class CloudType> +bool Foam::NoInjection<CloudType>::validInjection(const label) +{ + return false; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H index 99f37cea4a4b5e89a7758a1b776c16c82b4387ee..935dca80e177a9ea1a3940579a4d263d92f2c7c1 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/NoInjection/NoInjection.H @@ -26,15 +26,15 @@ Class Foam::NoInjection Description - Place holder for 'no injection' option + Place holder for 'none' option SourceFiles NoInjection.C \*---------------------------------------------------------------------------*/ -#ifndef noInjection_H -#define noInjection_H +#ifndef NoInjection_H +#define NoInjection_H #include "InjectionModel.H" @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class NoInjection Declaration + Class NoInjection Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -52,19 +52,18 @@ class NoInjection : public InjectionModel<CloudType> { - protected: // Protected member functions - //- Number of parcels to introduce over the time step - label nParcelsToInject + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject ( const scalar, const scalar ) const; - //- Volume of parcels to introduce over the time step + //- Volume of parcels to introduce over the time step relative to SOI scalar volumeToInject ( const scalar, @@ -75,7 +74,7 @@ protected: public: //- Runtime type information - TypeName("NoInjection"); + TypeName("none"); // Constructors @@ -83,14 +82,13 @@ public: //- Construct from components NoInjection ( - const dictionary& dict, - CloudType& owner + const dictionary&, + CloudType& ); - // Destructor - - ~NoInjection(); + //- Destructor + virtual ~NoInjection(); // Member Functions @@ -104,28 +102,30 @@ public: // Injection geometry - //- Return the injection position - vector position + //- Set the injection position and owner cell + virtual void setPositionAndCell ( - const label iParcel, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + vector& position, + label& cellOwner ); - //- Return the velocity of the parcel to introduce at a time - vector velocity + virtual void setProperties ( - const label, + const label parcelI, + const label nParcels, const scalar time, - const polyMeshInfo& meshInfo + typename CloudType::parcelType& parcel ); - //- Return the diameter of the parcel to introduce at a time - scalar d0 - ( - const label, - const scalar - ) const; + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C new file mode 100644 index 0000000000000000000000000000000000000000..b79a8a1af1052c65079478035175df424ae2e24b --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C @@ -0,0 +1,206 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "PatchInjection.H" +#include "DataEntry.H" +#include "pdf.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::PatchInjection<CloudType>::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return round(fraction_*(time1 - time0)*parcelsPerSecond_); + } + else + { + return 0; + } +} + + +template<class CloudType> +Foam::scalar Foam::PatchInjection<CloudType>::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return fraction_*volumeFlowRate_().integrate(time0, time1); + } + else + { + return 0.0; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::PatchInjection<CloudType>::PatchInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner, typeName), + patchName_(this->coeffDict().lookup("patchName")), + duration_(readScalar(this->coeffDict().lookup("duration"))), + parcelsPerSecond_ + ( + readScalar(this->coeffDict().lookup("parcelsPerSecond")) + ), + U0_(this->coeffDict().lookup("U0")), + volumeFlowRate_ + ( + DataEntry<scalar>::New + ( + "volumeFlowRate", + this->coeffDict() + ) + ), + parcelPDF_ + ( + pdf::New + ( + this->coeffDict().subDict("parcelPDF"), + owner.rndGen() + ) + ), + cellOwners_(), + fraction_(1.0) +{ + label patchId = owner.mesh().boundaryMesh().findPatchID(patchName_); + + if (patchId < 0) + { + FatalErrorIn + ( + "PatchInjection<CloudType>::PatchInjection" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Requested patch " << patchName_ << " not found" << nl + << "Available patches are: " << owner.mesh().boundaryMesh().names() + << nl << exit(FatalError); + } + + const polyPatch& patch = owner.mesh().boundaryMesh()[patchId]; + + cellOwners_ = patch.faceCells(); + + label patchSize = cellOwners_.size(); + label totalPatchSize = patchSize; + reduce(totalPatchSize, sumOp<scalar>()); + fraction_ = patchSize/totalPatchSize; + + // Set total volume to inject + this->volumeTotal_ = fraction_*volumeFlowRate_().integrate(0.0, duration_); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::PatchInjection<CloudType>::~PatchInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::PatchInjection<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::PatchInjection<CloudType>::timeEnd() const +{ + return this->SOI_ + duration_; +} + + +template<class CloudType> +void Foam::PatchInjection<CloudType>::setPositionAndCell +( + const label, + const label, + const scalar, + vector& position, + label& cellOwner +) +{ + label cellI = this->owner().rndGen().integer(0, cellOwners_.size() - 1); + + cellOwner = cellOwners_[cellI]; + position = this->owner().mesh().C()[cellOwner]; +} + + +template<class CloudType> +void Foam::PatchInjection<CloudType>::setProperties +( + const label, + const label, + const scalar, + typename CloudType::parcelType& parcel +) +{ + // set particle velocity + parcel.U() = U0_; + + // set particle diameter + parcel.d() = parcelPDF_->sample(); +} + + +template<class CloudType> +bool Foam::PatchInjection<CloudType>::fullyDescribed() const +{ + return false; +} + + +template<class CloudType> +bool Foam::PatchInjection<CloudType>::validInjection(const label) +{ + return true; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H new file mode 100644 index 0000000000000000000000000000000000000000..05117ce3be46f62a559ec7977d708cd35d5cd796 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H @@ -0,0 +1,187 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::PatchInjection + +Description + Patch injection + + - User specifies + - Total mass to inject + - Name of patch + - Injection duration + - Initial parcel velocity + - Injection volume flow rate + - Parcel diameters obtained by PDF model + - Parcels injected at cell centres adjacent to patch + +SourceFiles + PatchInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef PatchInjection_H +#define PatchInjection_H + +#include "InjectionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +template<class Type> +class DataEntry; + +class pdf; + +/*---------------------------------------------------------------------------*\ + Class PatchInjection Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class PatchInjection +: + public InjectionModel<CloudType> +{ + // Private data + + //- Name of patch + const word patchName_; + + //- Injection duration [s] + const scalar duration_; + + //- Number of parcels to introduce per second [] + const label parcelsPerSecond_; + + //- Initial parcel velocity [m/s] + const vector U0_; + + //- Volume flow rate of parcels to introduce relative to SOI [m^3/s] + const autoPtr<DataEntry<scalar> > volumeFlowRate_; + + //- Parcel size PDF model + const autoPtr<pdf> parcelPDF_; + + //- Cell owners + labelList cellOwners_; + + //- Fraction of injection controlled by this processor + scalar fraction_; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Volume of parcels to introduce over the time step relative to SOI + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("PatchInjection"); + + + // Constructors + + //- Construct from dictionary + PatchInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~PatchInjection(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + virtual void setPositionAndCell + ( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner + ); + + virtual void setProperties + ( + const label parcelI, + const label nParcels, + const scalar time, + typename CloudType::parcelType& parcel + ); + + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "PatchInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C new file mode 100644 index 0000000000000000000000000000000000000000..ffe1f09631471a82d42072887224ffc5d5313dbf --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.C @@ -0,0 +1,149 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "LocalInteraction.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template <class CloudType> +Foam::label Foam::LocalInteraction<CloudType>::applyToPatch +( + const label globalPatchI +) const +{ + forAll(patchIds_, patchI) + { + if (patchIds_[patchI] == globalPatchI) + { + return patchI; + } + } + + return -1; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class CloudType> +Foam::LocalInteraction<CloudType>::LocalInteraction +( + const dictionary& dict, + CloudType& cloud +) +: + PatchInteractionModel<CloudType>(dict, cloud, typeName), + patchData_(this->coeffDict().lookup("patches")), + patchIds_(patchData_.size()) +{ + const polyMesh& mesh = cloud.mesh(); + const polyBoundaryMesh& bMesh = mesh.boundaryMesh(); + + forAll(patchData_, patchI) + { + const word& patchName = patchData_[patchI].patchName(); + patchIds_[patchI] = bMesh.findPatchID(patchName); + if (patchIds_[patchI] < 0) + { + FatalErrorIn("LocalInteraction(const dictionary&, CloudType&)") + << "Patch " << patchName << " not found. Available patches " + << "are: " << bMesh.names() << exit(FatalError); + } + } + + // check that all walls are specified + DynamicList<word> badWalls; + forAll(bMesh, patchI) + { + if + ( + isA<wallPolyPatch>(bMesh[patchI]) + && applyToPatch(bMesh[patchI].index()) < 0 + ) + { + badWalls.append(bMesh[patchI].name()); + } + } + + if (badWalls.size() > 0) + { + FatalErrorIn("LocalInteraction(const dictionary&, CloudType&)") + << "All wall patches must be specified when employing local patch " + << "interaction. Please specify data for patches:" << nl + << badWalls << nl << exit(FatalError); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template <class CloudType> +Foam::LocalInteraction<CloudType>::~LocalInteraction() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::LocalInteraction<CloudType>::active() const +{ + return true; +} + + +template <class CloudType> +bool Foam::LocalInteraction<CloudType>::correct +( + const polyPatch& pp, + const label faceId, + vector& U +) const +{ + label patchI = applyToPatch(pp.index()); + + if (patchI >= 0) + { + vector nw = pp.faceAreas()[pp.whichFace(faceId)]; + nw /= mag(nw); + + scalar Un = U & nw; + vector Ut = U - Un*nw; + + if (Un > 0) + { + U -= (1.0 + patchData_[patchI].e())*Un*nw; + } + + U -= patchData_[patchI].mu()*Ut; + + return true; + } + + return false; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H new file mode 100644 index 0000000000000000000000000000000000000000..49d36e9c6d82eab8c15e1aeef2d5b0ed6fa58446 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/LocalInteraction/LocalInteraction.H @@ -0,0 +1,186 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::LocalInteraction + +Description + Patch interaction specified on a patch-by-patch basis + +\*---------------------------------------------------------------------------*/ + +#ifndef LocalInteraction_H +#define LocalInteraction_H + +#include "PatchInteractionModel.H" +#include "dictionaryEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +/*---------------------------------------------------------------------------*\ + Class LocalInteraction Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class LocalInteraction +: + public PatchInteractionModel<CloudType> +{ + class patchInteractionData + { + // Private data + + //- Patch name + word patchName_; + + //- Elasticity coefficient + scalar e_; + + //- Restitution coefficient + scalar mu_; + + + public: + + //- Construct null + patchInteractionData() + : + patchName_("unknownPatch"), + e_(0.0), + mu_(0.0) + {} + + //- Construct from dictionary + patchInteractionData(const dictionary& dict); + + // Member functions + + // Access + + //- Return const access to the patch name + const word& patchName() const + { + return patchName_; + } + + //- Return const access to the elasticity coefficient + scalar e() const + { + return e_; + } + + //- Return const access to the restitution coefficient + scalar mu() const + { + return mu_; + } + + + // I-O + + //- Istream operator + friend Istream& operator>>(Istream& is, patchInteractionData& pid) + { + is.check + ( + "Istream& operator>>" + "(Istream&, patchInteractionData&)" + ); + + const dictionaryEntry entry(dictionary::null, is); + + pid.patchName_ = entry.keyword(); + entry.lookup("e") >> pid.e_; + entry.lookup("mu") >> pid.mu_; + + return is; + } + }; + + + // Private data + + //- List of participating patches + const List<patchInteractionData> patchData_; + + //- List of participating patch ids + List<label> patchIds_; + + + // Private member functions + + //- Returns local patchI if patch is in patchIds_ list + label applyToPatch(const label globalPatchI) const; + + + +public: + + //- Runtime type information + TypeName("LocalInteraction"); + + + // Constructors + + //- Construct from dictionary + LocalInteraction(const dictionary& dict, CloudType& cloud); + + + //- Destructor + virtual ~LocalInteraction(); + + + // Member Functions + + //- Flag to indicate whether model activates patch interaction model + virtual bool active() const; + + //- Apply velocity correction + // Returns true if particle remains in same cell + virtual bool correct + ( + const polyPatch& pp, + const label faceId, + vector& U + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "LocalInteraction.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/NewPatchInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/NewPatchInteractionModel.C new file mode 100644 index 0000000000000000000000000000000000000000..83740bb684d1e0dea8fdf4a8acc637fc5854170a --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/NewPatchInteractionModel.C @@ -0,0 +1,67 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "PatchInteractionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::autoPtr<Foam::PatchInteractionModel<CloudType> > +Foam::PatchInteractionModel<CloudType>::New +( + const dictionary& dict, + CloudType& owner +) +{ + word PatchInteractionModelType(dict.lookup("PatchInteractionModel")); + + Info<< "Selecting PatchInteractionModel " << PatchInteractionModelType + << endl; + + typename dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(PatchInteractionModelType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalErrorIn + ( + "PatchInteractionModel<CloudType>::New" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown PatchInteractionModelType type " + << PatchInteractionModelType + << ", constructor not in hash table" << nl << nl + << " Valid PatchInteractionModel types are:" << nl + << dictionaryConstructorTablePtr_->toc() << exit(FatalError); + } + + return autoPtr<PatchInteractionModel<CloudType> >(cstrIter()(dict, owner)); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C similarity index 80% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.C rename to src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C index a99831988fd391c2fefbf679451469818a31d0a2..117e6005c8c98cd61f275cd512c8e8ac281070a4 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,18 +24,19 @@ License \*---------------------------------------------------------------------------*/ -#include "WallInteractionModel.H" +#include "PatchInteractionModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class CloudType> -Foam::WallInteractionModel<CloudType>::WallInteractionModel +Foam::PatchInteractionModel<CloudType>::PatchInteractionModel ( const dictionary& dict, CloudType& owner, const word& type ) -: dict_(dict), +: + dict_(dict), owner_(owner), coeffDict_(dict.subDict(type + "Coeffs")) {} @@ -44,7 +45,7 @@ Foam::WallInteractionModel<CloudType>::WallInteractionModel // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class CloudType> -Foam::WallInteractionModel<CloudType>::~WallInteractionModel() +Foam::PatchInteractionModel<CloudType>::~PatchInteractionModel() {} @@ -52,14 +53,14 @@ Foam::WallInteractionModel<CloudType>::~WallInteractionModel() template<class CloudType> const CloudType& -Foam::WallInteractionModel<CloudType>::owner() const +Foam::PatchInteractionModel<CloudType>::owner() const { return owner_; } template<class CloudType> -const Foam::dictionary& Foam::WallInteractionModel<CloudType>::dict() const +const Foam::dictionary& Foam::PatchInteractionModel<CloudType>::dict() const { return dict_; } @@ -67,7 +68,7 @@ const Foam::dictionary& Foam::WallInteractionModel<CloudType>::dict() const template<class CloudType> const Foam::dictionary& -Foam::WallInteractionModel<CloudType>::coeffDict() const +Foam::PatchInteractionModel<CloudType>::coeffDict() const { return coeffDict_; } @@ -75,7 +76,7 @@ Foam::WallInteractionModel<CloudType>::coeffDict() const // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "NewWallInteractionModel.C" +#include "NewPatchInteractionModel.C" // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H similarity index 63% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H rename to src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H index d99034245c511f867e9380a78f13ca3e38e4d332..986d30d3a1c20d513a170fe4d03096351f8fa790 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/WallInteractionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,20 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::WallInteractionModel - + Foam::PatchInteractionModel Description - Templated wall interaction model class + Templated patch interaction model class SourceFiles - WallInteractionModel.C - NewWallInteractionModel.C + PatchInteractionModel.C + NewPatchInteractionModel.C \*---------------------------------------------------------------------------*/ -#ifndef WallInteractionModel_H -#define WallInteractionModel_H +#ifndef PatchInteractionModel_H +#define PatchInteractionModel_H #include "IOdictionary.H" #include "autoPtr.H" @@ -48,19 +47,18 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class WallInteractionModel Declaration + Class PatchInteractionModel Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> -class WallInteractionModel +class PatchInteractionModel { - // Private data //- The cloud dictionary const dictionary& dict_; - // reference to the owner cloud class + //- Reference to the owner cloud class CloudType& owner_; //- The coefficients dictionary @@ -70,13 +68,13 @@ class WallInteractionModel public: //- Runtime type information - TypeName("WallInteractionModel"); + TypeName("PatchInteractionModel"); //- Declare runtime constructor selection table declareRunTimeSelectionTable ( autoPtr, - WallInteractionModel, + PatchInteractionModel, dictionary, ( const dictionary& dict, @@ -89,7 +87,7 @@ public: // Constructors //- Construct from components - WallInteractionModel + PatchInteractionModel ( const dictionary& dict, CloudType& owner, @@ -97,18 +95,16 @@ public: ); - // Destructor - - virtual ~WallInteractionModel(); - + //- Destructor + virtual ~PatchInteractionModel(); - // Selector - static autoPtr<WallInteractionModel<CloudType> > New - ( - const dictionary& dict, - CloudType& owner - ); + //- Selector + static autoPtr<PatchInteractionModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); // Access @@ -125,13 +121,14 @@ public: // Member Functions - //- Flag to indicate whether model activates heat transfer model + //- Flag to indicate whether model activates patch interaction model virtual bool active() const = 0; - //- Apply wall correction - virtual void correct + //- Apply velocity correction + // Returns true if particle remains in same cell + virtual bool correct ( - const wallPolyPatch& wpp, + const polyPatch& pp, const label faceId, vector& U ) const = 0; @@ -144,30 +141,44 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeWallInteractionModel(CloudType) \ +#define makePatchInteractionModel(CloudType) \ \ - defineNamedTemplateTypeNameAndDebug(WallInteractionModel<CloudType>, 0); \ + defineNamedTemplateTypeNameAndDebug(PatchInteractionModel<CloudType>, 0); \ \ defineTemplateRunTimeSelectionTable \ ( \ - WallInteractionModel<CloudType>, \ + PatchInteractionModel<CloudType>, \ dictionary \ ); -#define makeWallInteractionModelType(SS, CloudType, ParcelType) \ +#define makePatchInteractionModelType(SS, CloudType, ParcelType) \ \ defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ \ - WallInteractionModel<CloudType<ParcelType> >:: \ + PatchInteractionModel<CloudType<ParcelType> >:: \ adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ add##SS##CloudType##ParcelType##ConstructorToTable_; +#define makePatchInteractionModelThermoType(SS, CloudType, ParcelType, ThermoType)\ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + PatchInteractionModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "WallInteractionModel.C" +# include "PatchInteractionModel.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/Rebound/Rebound.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/Rebound/Rebound.C similarity index 88% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/Rebound/Rebound.C rename to src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/Rebound/Rebound.C index 7210f71e8af6c4d751d10db50f49e8cbd808cbf9..e5cfdd3540105e38d9f32f211a131923642faadb 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/Rebound/Rebound.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/Rebound/Rebound.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Foam::Rebound<CloudType>::Rebound CloudType& cloud ) : - WallInteractionModel<CloudType>(dict, cloud, typeName), + PatchInteractionModel<CloudType>(dict, cloud, typeName), UFactor_(readScalar(this->coeffDict().lookup("UFactor"))) {} @@ -57,14 +57,14 @@ bool Foam::Rebound<CloudType>::active() const template<class CloudType> -void Foam::Rebound<CloudType>::correct +bool Foam::Rebound<CloudType>::correct ( - const wallPolyPatch& wpp, + const polyPatch& pp, const label faceId, vector& U ) const { - vector nw = wpp.faceAreas()[wpp.whichFace(faceId)]; + vector nw = pp.faceAreas()[pp.whichFace(faceId)]; nw /= mag(nw); scalar Un = U & nw; @@ -77,6 +77,7 @@ void Foam::Rebound<CloudType>::correct U -= Ut; + return true; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/Rebound/Rebound.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/Rebound/Rebound.H similarity index 80% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/Rebound/Rebound.H rename to src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/Rebound/Rebound.H index 6181840a97a332579c7390176540832a1ac80184..7e3126996f92760256966da6945c608d127832bf 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/Rebound/Rebound.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/Rebound/Rebound.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,14 +26,14 @@ Class Foam::Rebound Description - Simple rebound wall interaction model + Simple rebound patch interaction model \*---------------------------------------------------------------------------*/ #ifndef Rebound_H #define Rebound_H -#include "WallInteractionModel.H" +#include "PatchInteractionModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -46,7 +46,7 @@ namespace Foam template<class CloudType> class Rebound : - public WallInteractionModel<CloudType> + public PatchInteractionModel<CloudType> { // Private data @@ -64,27 +64,23 @@ public: // Constructors //- Construct from dictionary - Rebound - ( - const dictionary& dict, - CloudType& cloud - ); - + Rebound(const dictionary& dict, CloudType& cloud); - // Destructor - ~Rebound(); + //- Destructor + virtual ~Rebound(); // Member Functions - //- Flag to indicate whether model activates heat transfer model - bool active() const; + //- Flag to indicate whether model activates patch interaction model + virtual bool active() const; - //- Apply wall correction - virtual void correct + //- Apply velocity correction + // Returns true if particle remains in same cell + virtual bool correct ( - const wallPolyPatch& wpp, + const polyPatch& pp, const label faceId, vector& U ) const; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/StandardWallInteraction/StandardWallInteraction.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C similarity index 80% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/StandardWallInteraction/StandardWallInteraction.C rename to src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C index 0c09c4be378e9f5de7ce012c112489ef162d038b..f87c0dd08b927c739ee6b9ca9592f98a8df8dbda 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/StandardWallInteraction/StandardWallInteraction.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -#include "error.H" - #include "StandardWallInteraction.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -37,7 +35,7 @@ Foam::StandardWallInteraction<CloudType>::StandardWallInteraction CloudType& cloud ) : - WallInteractionModel<CloudType>(dict, cloud, typeName), + PatchInteractionModel<CloudType>(dict, cloud, typeName), e_(dimensionedScalar(this->coeffDict().lookup("e")).value()), mu_(dimensionedScalar(this->coeffDict().lookup("mu")).value()) {} @@ -60,25 +58,32 @@ bool Foam::StandardWallInteraction<CloudType>::active() const template <class CloudType> -void Foam::StandardWallInteraction<CloudType>::correct +bool Foam::StandardWallInteraction<CloudType>::correct ( - const wallPolyPatch& wpp, + const polyPatch& pp, const label faceId, vector& U ) const { - vector nw = wpp.faceAreas()[wpp.whichFace(faceId)]; - nw /= mag(nw); + if (isA<wallPolyPatch>(pp)) + { + vector nw = pp.faceAreas()[pp.whichFace(faceId)]; + nw /= mag(nw); - scalar Un = U & nw; - vector Ut = U - Un*nw; + scalar Un = U & nw; + vector Ut = U - Un*nw; - if (Un > 0) - { - U -= (1.0 + e_)*Un*nw; + if (Un > 0) + { + U -= (1.0 + e_)*Un*nw; + } + + U -= mu_*Ut; + + return true; } - U -= mu_*Ut; + return false; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/StandardWallInteraction/StandardWallInteraction.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H similarity index 81% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/StandardWallInteraction/StandardWallInteraction.H rename to src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H index 30e99d2f3e447ee30fee34eb01b91595730ca105..3e2175e4698cbbf05c5a9a7175469ae12403a4ee 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/StandardWallInteraction/StandardWallInteraction.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/StandardWallInteraction/StandardWallInteraction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ Description #ifndef StandardWallInteraction_H #define StandardWallInteraction_H -#include "WallInteractionModel.H" +#include "PatchInteractionModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -46,15 +46,14 @@ namespace Foam template<class CloudType> class StandardWallInteraction : - public WallInteractionModel<CloudType> + public PatchInteractionModel<CloudType> { - // Private data //- Elasticity const scalar e_; - //-Restitution coefficient + //- Restitution coefficient const scalar mu_; @@ -67,27 +66,23 @@ public: // Constructors //- Construct from dictionary - StandardWallInteraction - ( - const dictionary& dict, - CloudType& cloud - ); - + StandardWallInteraction(const dictionary& dict, CloudType& cloud); - // Destructor - ~StandardWallInteraction(); + //- Destructor + virtual ~StandardWallInteraction(); // Member Functions - //- Flag to indicate whether model activates heat transfer model - bool active() const; + //- Flag to indicate whether model activates patch interaction model + virtual bool active() const; - //- Apply wall correction - virtual void correct + //- Apply velocity correction + // Returns true if particle remains in same cell + virtual bool correct ( - const wallPolyPatch& wpp, + const polyPatch& pp, const label faceId, vector& U ) const; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/NoPostProcessing/NoPostProcessing.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/NoPostProcessing/NoPostProcessing.C new file mode 100644 index 0000000000000000000000000000000000000000..b1842b858a17fbd1122ef59e12e7c0400aacfda7 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/NoPostProcessing/NoPostProcessing.C @@ -0,0 +1,78 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "NoPostProcessing.H" + +// * * * * * * * * * * * * * protected Member Functions * * * * * * * * * * // + +template<class CloudType> +void Foam::NoPostProcessing<CloudType>::write() +{ +// do nothing +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::NoPostProcessing<CloudType>::NoPostProcessing +( + const dictionary&, + CloudType& owner +) +: + PostProcessingModel<CloudType>(owner) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::NoPostProcessing<CloudType>::~NoPostProcessing() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::NoPostProcessing<CloudType>::active() const +{ + return false; +} + + +template<class CloudType> +void Foam::NoPostProcessing<CloudType>::postPatch +( + const typename CloudType::parcelType&, + const label +) +{ +// do nothing +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/NoPostProcessing/NoPostProcessing.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/NoPostProcessing/NoPostProcessing.H new file mode 100644 index 0000000000000000000000000000000000000000..6328cc67212de074cc002511bc41612c3f820554 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/NoPostProcessing/NoPostProcessing.H @@ -0,0 +1,109 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::NoPostProcessing + +Description + Place holder for 'none' option + +SourceFiles + NoPostProcessing.C + +\*---------------------------------------------------------------------------*/ + +#ifndef NoPostProcessing_H +#define NoPostProcessing_H + +#include "PostProcessingModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class NoPostProcessing Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class NoPostProcessing +: + public PostProcessingModel<CloudType> +{ +protected: + + // Protected member functions + + //- Write post-processing info + void write(); + + +public: + + //- Runtime type information + TypeName("none"); + + + // Constructors + + //- Construct from components + NoPostProcessing(const dictionary&, CloudType&); + + + //- Destructor + virtual ~NoPostProcessing(); + + + // Member Functions + + // Evaluation + + //- Flag to indicate whether model activates post-processing model + virtual bool active() const; + + //- Gather post-processing info on patch + virtual void postPatch + ( + const typename CloudType::parcelType& p, + const label patchI + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "NoPostProcessing.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C new file mode 100644 index 0000000000000000000000000000000000000000..a1e56a0fe06c6fa9ff81f6c5e5aa1f1c5f5e8991 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.C @@ -0,0 +1,157 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "PatchPostProcessing.H" +#include "IOPtrList.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template <class CloudType> +Foam::label Foam::PatchPostProcessing<CloudType>::applyToPatch +( + const label globalPatchI +) const +{ + forAll(patchIds_, patchI) + { + if (patchIds_[patchI] == globalPatchI) + { + return patchI; + } + } + + return -1; +} + + +// * * * * * * * * * * * * * protected Member Functions * * * * * * * * * * // + +template<class CloudType> +void Foam::PatchPostProcessing<CloudType>::write() +{ + forAll(patchData_, patchI) + { + IOPtrList<parcelType> postObject + ( + IOobject + ( + patchNames_[patchI] + ".post", + this->owner().time().timeName(), + "postProcessing", + this->owner(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + patchData_[patchI].size() + ); + + forAll(postObject, ptrI) + { + postObject.set(ptrI, patchData_[patchI][ptrI].ptr()); + } + + postObject.note() = parcelType::propHeader; + + postObject.writeObject + ( + IOstream::ASCII, + IOstream::currentVersion, + mesh_.time().writeCompression() + ); + + patchData_[patchI].clearStorage(); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::PatchPostProcessing<CloudType>::PatchPostProcessing +( + const dictionary& dict, + CloudType& owner +) +: + PostProcessingModel<CloudType>(dict, owner, typeName), + mesh_(owner.mesh()), + patchNames_(this->coeffDict().lookup("patches")), + patchData_(patchNames_.size()), + patchIds_(patchNames_.size()) +{ + forAll(patchNames_, patchI) + { + label id = mesh_.boundaryMesh().findPatchID(patchNames_[patchI]); + if (id < 0) + { + FatalErrorIn + ( + "PatchPostProcessing<CloudType>::PatchPostProcessing" + "(" + "const dictionary&, " + "CloudType& owner" + ")" + )<< "Requested patch " << patchNames_[patchI] << " not found" << nl + << "Available patches are: " << mesh_.boundaryMesh().names() << nl + << exit(FatalError); + } + patchIds_[patchI] = id; + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::PatchPostProcessing<CloudType>::~PatchPostProcessing() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::PatchPostProcessing<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +void Foam::PatchPostProcessing<CloudType>::postPatch +( + const parcelType& p, + const label patchI +) +{ + label localPatchI = applyToPatch(patchI); + if (localPatchI >= 0 && patchData_[localPatchI].size() < maxStoredParcels_) + { + patchData_[localPatchI].append(p.clone()); + } +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H new file mode 100644 index 0000000000000000000000000000000000000000..2df16c132424a414f9615e5bd3a766bbe1f0cdfd --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessing.H @@ -0,0 +1,154 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::PatchPostProcessing + +Description + Standard post-processing + +SourceFiles + PatchPostProcessing.C + +\*---------------------------------------------------------------------------*/ + +#ifndef PatchPostProcessing_H +#define PatchPostProcessing_H + +#include "PostProcessingModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class PatchPostProcessing Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class PatchPostProcessing +: + public PostProcessingModel<CloudType> +{ + // Private data + + typedef typename CloudType::parcelType parcelType; + + //- Reference to the mesh + const polyMesh& mesh_; + + //- Maximum number of parcels to store + label maxStoredParcels_; + + //- List of patch names + wordList patchNames_; + + //- List of parcel data per patch + List<DynamicList<autoPtr<parcelType> > > patchData_; + + //- Mapping from local to global patch ids + labelList patchIds_; + + + // Private member functions + + //- Returns local patchI if patch is in patchIds_ list + label applyToPatch(const label globalPatchI) const; + + +protected: + + // Protected member functions + + //- Write post-processing info + void write(); + + +public: + + //- Runtime type information + TypeName("PatchPostProcessing"); + + + // Constructors + + //- Construct from dictionary + PatchPostProcessing(const dictionary& dict, CloudType& owner); + + + //- Destructor + virtual ~PatchPostProcessing(); + + + // Member Functions + + // Access + + //- Return const access to the mesh + inline const polyMesh& mesh() const; + + //- Return maximum number of parcels to store per patch + inline label maxStoredParcels() const; + + //- Return const access to the list of patch names + inline const wordList& patchNames() const; + + //- Return const mapping from local to global patch ids + inline const labelList& patchIds() const; + + + // Evaluation + + //- Flag to indicate whether model activates post-processing model + virtual bool active() const; + + //- Gather post-processing info on patch + virtual void postPatch + ( + const parcelType& p, + const label patchI + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "PatchPostProcessingI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "PatchPostProcessing.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H new file mode 100644 index 0000000000000000000000000000000000000000..f060eabc4b9d8d9a1d7592ff0a0ff9ac37b146f4 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PatchPostProcessing/PatchPostProcessingI.H @@ -0,0 +1,56 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +const Foam::polyMesh& Foam::PatchPostProcessing<CloudType>::mesh() const +{ + return mesh_; +} + + +template<class CloudType> +Foam::label Foam::PatchPostProcessing<CloudType>::maxStoredParcels() const +{ + return maxStoredParcels_; +} + + +template<class CloudType> +const Foam::wordList& Foam::PatchPostProcessing<CloudType>::patchNames() const +{ + return patchNames_; +} + + +template<class CloudType> +const Foam::labelList& +Foam::PatchPostProcessing<CloudType>::patchIds() const +{ + return patchIds_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/NewPostProcessingModel.C similarity index 68% rename from src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C rename to src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/NewPostProcessingModel.C index ee1fd8a169e08e7c932aeaf0beaf55d53659b838..29c096b67769cefbb1626097d6f6c16b38f6ff22 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/WallInteractionModel/WallInteractionModel/NewWallInteractionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/NewPostProcessingModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,44 +24,42 @@ License \*---------------------------------------------------------------------------*/ -#include "WallInteractionModel.H" +#include "PostProcessingModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class CloudType> -Foam::autoPtr<Foam::WallInteractionModel<CloudType> > -Foam::WallInteractionModel<CloudType>::New +Foam::autoPtr<Foam::PostProcessingModel<CloudType> > +Foam::PostProcessingModel<CloudType>::New ( const dictionary& dict, CloudType& owner ) { - word WallInteractionModelType - ( - dict.lookup("WallInteractionModel") - ); + word PostProcessingModelType(dict.lookup("PostProcessingModel")); - Info<< "Selecting WallInteractionModel " << WallInteractionModelType - << endl; + Info<< "Selecting PostProcessingModel " << PostProcessingModelType << endl; typename dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(WallInteractionModelType); + dictionaryConstructorTablePtr_->find(PostProcessingModelType); if (cstrIter == dictionaryConstructorTablePtr_->end()) { FatalErrorIn ( - "WallInteractionModel<CloudType>::New" - "(const dictionary&, CloudType&)" - ) - << "Unknown WallInteractionModelType type " - << WallInteractionModelType + "PostProcessingModel<CloudType>::New" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown PostProcessingModelType type " + << PostProcessingModelType << ", constructor not in hash table" << nl << nl - << " Valid WallInteractionModel types are :" << nl + << " Valid PostProcessingModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } - return autoPtr<WallInteractionModel<CloudType> >(cstrIter()(dict, owner)); + return autoPtr<PostProcessingModel<CloudType> >(cstrIter()(dict, owner)); } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModel.C new file mode 100644 index 0000000000000000000000000000000000000000..15d429493fee8c1be0678948a7502a8216f340ea --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModel.C @@ -0,0 +1,77 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "PostProcessingModel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::PostProcessingModel<CloudType>::PostProcessingModel(CloudType& owner) +: + dict_(dictionary::null), + owner_(owner), + coeffDict_(dictionary::null) +{} + + +template<class CloudType> +Foam::PostProcessingModel<CloudType>::PostProcessingModel +( + const dictionary& dict, + CloudType& owner, + const word& type +) +: + dict_(dict), + owner_(owner), + coeffDict_(dict.subDict(type + "Coeffs")) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::PostProcessingModel<CloudType>::~PostProcessingModel() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +void Foam::PostProcessingModel<CloudType>::post() +{ + if (owner_.time().outputTime()) + { + this->write(); + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "NewPostProcessingModel.C" + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModel.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModel.H new file mode 100644 index 0000000000000000000000000000000000000000..311169aa3aa472f0659b86c1e4ed7ab9cc80e433 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModel.H @@ -0,0 +1,209 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::PostProcessingModel + +Description + Templated post-processing model class + +SourceFiles + PostProcessingModel.C + NewPostProcessingModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef PostProcessingModel_H +#define PostProcessingModel_H + +#include "IOdictionary.H" +#include "autoPtr.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class PostProcessingModel Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class PostProcessingModel +{ + // Private data + + //- The cloud dictionary + const dictionary& dict_; + + //- Reference to the owner cloud class + CloudType& owner_; + + //- The coefficients dictionary + const dictionary coeffDict_; + + +protected: + + // Protected member functions + + //- Write post-processing info + virtual void write() = 0; + + +public: + + //- Runtime type information + TypeName("PostProcessingModel"); + + //- Declare runtime constructor selection table + declareRunTimeSelectionTable + ( + autoPtr, + PostProcessingModel, + dictionary, + ( + const dictionary& dict, + CloudType& owner + ), + (dict, owner) + ); + + + // Constructors + + //- Construct null from owner + PostProcessingModel(CloudType& owner); + + //- Construct from dictionary + PostProcessingModel + ( + const dictionary& dict, + CloudType& owner, + const word& type + ); + + + //- Destructor + virtual ~PostProcessingModel(); + + + //- Selector + static autoPtr<PostProcessingModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); + + + // Member Functions + + // Access + + //- Return the owner cloud dictionary + inline const dictionary& dict() const; + + //- Return const access the owner cloud object + inline const CloudType& owner() const; + + //- Return non-const access the owner cloud object for manipulation + inline CloudType& owner(); + + //- Return the coefficients dictionary + inline const dictionary& coeffDict() const; + + + // Evaluation + + //- Main post-processing function + virtual void post(); + + //- Flag to indicate whether model activates post-processing model + virtual bool active() const = 0; + + //- Gather post-processing info on patch + virtual void postPatch + ( + const typename CloudType::parcelType& p, + const label patchI + ) = 0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makePostProcessingModel(CloudType) \ + \ + defineNamedTemplateTypeNameAndDebug(PostProcessingModel<CloudType>, 0); \ + \ + defineTemplateRunTimeSelectionTable \ + ( \ + PostProcessingModel<CloudType>, \ + dictionary \ + ); + + +#define makePostProcessingModelType(SS, CloudType, ParcelType) \ + \ + defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ + \ + PostProcessingModel<CloudType<ParcelType> >:: \ + adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ + add##SS##CloudType##ParcelType##ConstructorToTable_; + + +#define makePostProcessingModelThermoType(SS, CloudType, ParcelType, ThermoType)\ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + PostProcessingModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "PostProcessingModelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "PostProcessingModel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModelI.H b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModelI.H new file mode 100644 index 0000000000000000000000000000000000000000..0a95224da503f494be1c5de411eb787381a4da92 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/PostProcessingModel/PostProcessingModel/PostProcessingModelI.H @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +const Foam::dictionary& Foam::PostProcessingModel<CloudType>::dict() const +{ + return dict_; +} + + +template<class CloudType> +const CloudType& Foam::PostProcessingModel<CloudType>::owner() const +{ + return owner_; +} + + +template<class CloudType> +CloudType& Foam::PostProcessingModel<CloudType>::owner() +{ + return owner_; +} + + +template<class CloudType> +const Foam::dictionary& Foam::PostProcessingModel<CloudType>::coeffDict() const +{ + return coeffDict_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C index 651b04153839ef57ad3f5fe66d1ce4ad4e47c13d..6ae3dabb6fd1ab3ac3efac2f5526adee30e0f3d1 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,18 +35,18 @@ Foam::CompositionModel<CloudType>::CompositionModel CloudType& owner, const word& type ) -: dict_(dict), +: + dict_(dict), owner_(owner), coeffDict_(dict.subDict(type + "Coeffs")), - carrierThermo_(owner.carrierThermo()), - gases_(owner.gases()), + mcCarrierThermo_(owner.mcCarrierThermo()), liquids_ ( liquidMixture::New ( owner.mesh().objectRegistry::lookupObject<dictionary> ( - "thermophysicalProperties" + owner.carrierThermo().name() ) ) ), @@ -56,9 +56,16 @@ Foam::CompositionModel<CloudType>::CompositionModel ( owner.mesh().objectRegistry::lookupObject<dictionary> ( - "thermophysicalProperties" + owner.carrierThermo().name() ) ) + ), + phaseProps_ + ( + coeffDict_.lookup("phases"), + mcCarrierThermo_.species(), + liquids_().components(), + solids_().components() ) {} @@ -94,32 +101,446 @@ const Foam::dictionary& Foam::CompositionModel<CloudType>::coeffDict() const template<class CloudType> -const Foam::hCombustionThermo& -Foam::CompositionModel<CloudType>::carrierThermo() const +const Foam::multiComponentMixture<typename CloudType::thermoType>& +Foam::CompositionModel<CloudType>::mcCarrierThermo() const { - return carrierThermo_; + return mcCarrierThermo_; } template<class CloudType> -const Foam::PtrList<Foam::specieReactingProperties>& -Foam::CompositionModel<CloudType>::gases() const +const Foam::liquidMixture& Foam::CompositionModel<CloudType>::liquids() const { - return gases_; + return liquids_(); } template<class CloudType> -const Foam::liquidMixture& Foam::CompositionModel<CloudType>::liquids() const +const Foam::solidMixture& Foam::CompositionModel<CloudType>::solids() const { - return liquids_(); + return solids_(); } template<class CloudType> -const Foam::solidMixture& Foam::CompositionModel<CloudType>::solids() const +const Foam::phasePropertiesList& +Foam::CompositionModel<CloudType>::phaseProps() const { - return solids_(); + return phaseProps_; +} + + +template<class CloudType> +Foam::label Foam::CompositionModel<CloudType>::nPhase() const +{ + return phaseProps_.size(); +} + + +template<class CloudType> +const Foam::wordList& +Foam::CompositionModel<CloudType>::phaseTypes() const +{ + // if only 1 phase, return the constituent component names + if (phaseProps_.size() == 1) + { + return phaseProps_[0].names(); + } + else + { + return phaseProps_.phaseTypes(); + } +} + + +template<class CloudType> +const Foam::wordList& +Foam::CompositionModel<CloudType>::stateLabels() const +{ + return phaseProps_.stateLabels(); +} + + +template<class CloudType> +const Foam::wordList& +Foam::CompositionModel<CloudType>::componentNames(const label phaseI) const +{ + return phaseProps_[phaseI].names(); +} + + +template<class CloudType> +Foam::label Foam::CompositionModel<CloudType>::globalCarrierId +( + const word& cmptName +) const +{ + forAll(mcCarrierThermo_.species(), i) + { + if (cmptName == mcCarrierThermo_.species()[i]) + { + return i; + } + } + + FatalErrorIn + ( + "Foam::label Foam::CompositionModel<CloudType>::globalCarrierId" + "(" + "const word&" + ") const" + ) << "Unable to determine global id for requested component " + << cmptName << nl << abort(FatalError); + + return -1; +} + + +template<class CloudType> +Foam::label Foam::CompositionModel<CloudType>::globalId +( + const label phaseI, + const word& cmptName +) const +{ + label id = phaseProps_[phaseI].globalId(cmptName); + + if (id < 0) + { + FatalErrorIn + ( + "Foam::label Foam::CompositionModel<CloudType>::globalId" + "(" + "const label, " + "const word&" + ") const" + ) << "Unable to determine global id for requested component " + << cmptName << nl << abort(FatalError); + } + + return id; +} + + +template<class CloudType> +const Foam::labelList& Foam::CompositionModel<CloudType>::globalIds +( + const label phaseI +) const +{ + return phaseProps_[phaseI].globalIds(); +} + + +template<class CloudType> +Foam::label Foam::CompositionModel<CloudType>::localId +( + const label phaseI, + const word& cmptName +) const +{ + label id = phaseProps_[phaseI].id(cmptName); + + if (id < 0) + { + FatalErrorIn + ( + "Foam::label Foam::CompositionModel<CloudType>::localId" + "(" + "const label, " + "const word&" + ") const" + ) << "Unable to determine local id for component " << cmptName + << nl << abort(FatalError); + } + + return id; +} + + +template<class CloudType> +Foam::label Foam::CompositionModel<CloudType>::localToGlobalCarrierId +( + const label phaseI, + const label id +) const +{ + label gid = phaseProps_[phaseI].globalCarrierIds()[id]; + + if (gid < 0) + { + FatalErrorIn + ( + "Foam::label " + "Foam::CompositionModel<CloudType>::localToGlobalCarrierId" + "(" + "const label, " + "const label" + ") const" + ) << "Unable to determine global carrier id for phase " + << phaseI << " with local id " << id + << nl << abort(FatalError); + } + + return gid; +} + + +template<class CloudType> +const Foam::scalarField& Foam::CompositionModel<CloudType>::Y0 +( + const label phaseI +) const +{ + return phaseProps_[phaseI].Y(); +} + + +template<class CloudType> +Foam::scalarField Foam::CompositionModel<CloudType>::X +( + const label phaseI, + const scalarField& Y +) const +{ + const phaseProperties& props = phaseProps_[phaseI]; + scalarField X(Y.size(), 0.0); + scalar WInv = 0.0; + switch (props.phase()) + { + case phaseProperties::GAS: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + WInv += Y[i]/mcCarrierThermo_.speciesData()[gid].W(); + X[i] = Y[i]/mcCarrierThermo_.speciesData()[gid].W(); + } + break; + } + case phaseProperties::LIQUID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + WInv += Y[i]/this->liquids().properties()[gid].W(); + X[i] += Y[i]/this->liquids().properties()[gid].W(); + } + break; + } + default: + { + FatalErrorIn + ( + "Foam::scalarField Foam::CompositionModel<CloudType>::X" + "(" + "const label, " + "const scalarField&" + ") const" + ) << "Only possible to convert gas and liquid mass fractions" + << nl << abort(FatalError); + } + } + + return X/WInv; +} + + +template<class CloudType> +Foam::scalar Foam::CompositionModel<CloudType>::H +( + const label phaseI, + const scalarField& Y, + const scalar p, + const scalar T +) const +{ + const phaseProperties& props = phaseProps_[phaseI]; + scalar HMixture = 0.0; + switch (props.phase()) + { + case phaseProperties::GAS: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + HMixture += Y[i]*mcCarrierThermo_.speciesData()[gid].H(T); + } + break; + } + case phaseProperties::LIQUID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + HMixture += Y[i]*this->liquids().properties()[gid].h(p, T); + } + break; + } + case phaseProperties::SOLID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + HMixture += + Y[i] + *( + this->solids().properties()[gid].Hf() + + this->solids().properties()[gid].cp()*T + ); + } + break; + } + default: + { + FatalErrorIn + ( + "Foam::scalar Foam::CompositionModel<CloudType>::H" + "(" + " const label, " + " const scalarField&, " + " const scalar, " + " const scalar" + ") const" + ) << "Unknown phase enumeration" << nl << abort(FatalError); + } + } + + return HMixture; +} + + +template<class CloudType> +Foam::scalar Foam::CompositionModel<CloudType>::cp +( + const label phaseI, + const scalarField& Y, + const scalar p, + const scalar T +) const +{ + const phaseProperties& props = phaseProps_[phaseI]; + scalar cpMixture = 0.0; + switch (props.phase()) + { + case phaseProperties::GAS: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + cpMixture += Y[i]*mcCarrierThermo_.speciesData()[gid].Cp(T); + } + break; + } + case phaseProperties::LIQUID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + cpMixture += Y[i]*this->liquids().properties()[gid].cp(p, T); + } + break; + } + case phaseProperties::SOLID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + cpMixture += Y[i]*this->solids().properties()[gid].cp(); + } + break; + } + default: + { + FatalErrorIn + ( + "Foam::scalar Foam::CompositionModel<CloudType>::cp" + "(" + "const label, " + "const scalarField&, " + "const scalar, " + "const scalar" + ") const" + ) << "Unknown phase enumeration" << nl << abort(FatalError); + } + } + + return cpMixture; +} + + +template<class CloudType> +Foam::scalar Foam::CompositionModel<CloudType>::L +( + const label phaseI, + const scalarField& Y, + const scalar p, + const scalar T +) const +{ + const phaseProperties& props = phaseProps_[phaseI]; + scalar LMixture = 0.0; + switch (props.phase()) + { + case phaseProperties::GAS: + { + if (debug) + { + WarningIn + ( + "Foam::scalar Foam::CompositionModel<CloudType>::L" + "(" + "const label, " + "const scalarField&, " + "const scalar, " + "const scalar" + ") const\n" + ) << "No support for gaseous components" << endl; + } + break; + } + case phaseProperties::LIQUID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + LMixture += Y[i]*this->liquids().properties()[gid].hl(p, T); + } + break; + } + case phaseProperties::SOLID: + { + if (debug) + { + WarningIn + ( + "Foam::scalar Foam::CompositionModel<CloudType>::L" + "(" + "const label, " + "const scalarField&, " + "const scalar, " + "const scalar" + ") const\n" + ) << "No support for solid components" << endl; + } + break; + } + default: + { + FatalErrorIn + ( + "Foam::scalar Foam::CompositionModel<CloudType>::L" + "(" + "const label, " + "const scalarField&, " + "const scalar, " + "const scalar" + ") const" + ) << "Unknown phase enumeration" << nl << abort(FatalError); + } + } + + return LMixture; } diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H index eecd432a9610a3e2648029c589719654ac9b6fca..b3f0949defcc84b06f7f8c4b4b0a9ff900d1b079 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,10 +25,10 @@ License Class Foam::CompositionModel - Description Templated reacting parcel composition model class - Consists of gases (via thermo package), liquids and solids + Consists of carrier species (via thermo package), and additional liquids + and solids SourceFiles CompositionModel.C @@ -44,11 +44,13 @@ SourceFiles #include "runTimeSelectionTables.H" #include "PtrList.H" -#include "hCombustionThermo.H" +#include "multiComponentMixture.H" #include "liquidMixture.H" #include "solidMixture.H" +#include "phasePropertiesList.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -61,7 +63,6 @@ namespace Foam template<class CloudType> class CompositionModel { - // Private data //- The cloud dictionary @@ -73,18 +74,18 @@ class CompositionModel //- The coefficients dictionary const dictionary& coeffDict_; - //- Reference to the carrier phase thermo package - hCombustionThermo& carrierThermo_; - - //- Reference to the carrier phase species - const PtrList<specieReactingProperties>& gases_; + //- Reference to the multi-component carrier phase thermo + multiComponentMixture<typename CloudType::thermoType>& mcCarrierThermo_; - //- Global liquid properties data + //- Global (additional) liquid properties data autoPtr<liquidMixture> liquids_; - //- Global solid properties data + //- Global (additional) solid properties data autoPtr<solidMixture> solids_; + //- List of phase properties + phasePropertiesList phaseProps_; + public: @@ -116,18 +117,16 @@ public: ); - // Destructor - - virtual ~CompositionModel(); - + //- Destructor + virtual ~CompositionModel(); - // Selector - static autoPtr<CompositionModel<CloudType> > New - ( - const dictionary& dict, - CloudType& owner - ); + //- Selector + static autoPtr<CompositionModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); // Member Functions @@ -144,105 +143,115 @@ public: const dictionary& coeffDict() const; //- Return the carrier phase thermo package - const hCombustionThermo& carrierThermo() const; + const multiComponentMixture<typename CloudType::thermoType>& + mcCarrierThermo() const; - //- Return the gases - const PtrList<specieReactingProperties>& gases() const; - //- Return the global liquids - const liquidMixture& liquids() const; + // Composition lists - //- Return the global solids - const solidMixture& solids() const; + //- Return the global (additional) liquids + const liquidMixture& liquids() const; - //- Return the list of composition names - virtual const wordList compositionNames() const = 0; + //- Return the global (additional) solids + const solidMixture& solids() const; - //- Return the list of gas names - virtual const wordList& gasNames() const = 0; + //- Return the list of phase properties + const phasePropertiesList& phaseProps() const; - //- Return local id of gas based on gasName - virtual label gasLocalId(const word& gasName) const = 0; + //- Return the number of phases + label nPhase() const; - //- Return global id of gas based on gasName - virtual label gasGlobalId(const word& gasName) const = 0; - //- Return the list indices of gases in global thermo list - virtual const labelList& gasGlobalIds() const = 0; + // Phase properties - //- Return the list of gas mass fractions - virtual const scalarField& YGas0() const = 0; + //- Return the list of phase type names + // If only 1 phase, return the component names of that phase + const wordList& phaseTypes() const; - //- Return the list of liquid names - virtual const wordList& liquidNames() const = 0; + //- Return the list of state labels (s), (l), (g) etc. + const wordList& stateLabels() const; - //- Return local id of liquid based on liquidName - virtual label liquidLocalId(const word& liquidName) const = 0; + //- Return the list of component names for phaseI + const wordList& componentNames(const label phaseI) const; - //- Return global id of liquid based on liquidName - virtual label liquidGlobalId(const word& liquidName) const = 0; + //- Return global id of component cmptName in carrier thermo + label globalCarrierId(const word& cmptName) const; - //- Return the list indices of liquid in global thermo list - virtual const labelList& liquidGlobalIds() const = 0; + //- Return global id of component cmptName in phase phaseI + label globalId(const label phaseI, const word& cmptName) const; - //- Return the list of liquid mass fractions - virtual const scalarField& YLiquid0() const = 0; + //- Return global ids of for phase phaseI + const labelList& globalIds(const label phaseI) const; - //- Return the list of solid names - virtual const wordList& solidNames() const = 0; + //- Return local id of component cmptName in phase phaseI + label localId(const label phaseI, const word& cmptName) const; - //- Return local id of solid based on solidName - virtual label solidLocalId(const word& solidName) const = 0; + //- Return global carrier id of component given local id + label localToGlobalCarrierId + ( + const label phaseI, + const label id + ) const; - //- Return global id of solid based on solidName - virtual label solidGlobalId(const word& solidName) const = 0; + //- Return the list of phase phaseI mass fractions + const scalarField& Y0(const label phaseI) const; - //- Return the list indices of solids in global thermo list - virtual const labelList& solidGlobalIds() const = 0; + //- Return the list of phase phaseI volume fractions fractions + // based on supplied mass fractions Y + scalarField X + ( + const label phaseI, + const scalarField& Y + ) const; - //- Return the list of solid mass fractions - virtual const scalarField& YSolid0() const = 0; - //- Return the list of mixture mass fractions - virtual const scalarField& YMixture0() const = 0; + // Mixture properties - //- Return the gas constant for the gas mixture - virtual scalar RGas(const scalarField& YGas) const = 0; + //- Return the list of mixture mass fractions + // If only 1 phase, return component fractions of that phase + virtual const scalarField& YMixture0() const = 0; - //- Return enthalpy for the gas mixture [energy per unit mass] - virtual scalar HGas - ( - const scalarField& YGas, - const scalar T - ) const = 0; + // Indices of gas, liquid and solid phases in phase properties + // list - returns -1 if not applicable - //- Return enthalpy for the solid mixture [energy per unit mass] - virtual scalar HSolid - ( - const scalarField& YSolid, - const scalar T - ) const = 0; + //- Gas id + virtual label idGas() const = 0; + + //- Liquid id + virtual label idLiquid() const = 0; + + //- Solid id + virtual label idSolid() const = 0; - //- Return specific heat caparcity for the gas mixture - virtual scalar cpGas + + // Evaluation + + //- Return enthalpy for the phase phaseI + virtual scalar H ( - const scalarField& YGas, - const scalar T - ) const = 0; + const label phaseI, + const scalarField& Y, + const scalar p, + const scalar T + ) const; - //- Return specific heat caparcity for the liquid mixture - virtual scalar cpLiquid + //- Return specific heat caoacity for the phase phaseI + virtual scalar cp ( - const scalarField& YLiquid, + const label phaseI, + const scalarField& Y, const scalar p, const scalar T - ) const = 0; + ) const; - //- Return specific heat caparcity for the solid mixture - virtual scalar cpSolid + //- Return latent heat for the phase phaseI + virtual scalar L ( - const scalarField& YSolid - ) const = 0; + const label phaseI, + const scalarField& Y, + const scalar p, + const scalar T + ) const; }; @@ -267,13 +276,18 @@ public: ); -#define makeCompositionModelType(SS, CloudType, ParcelType) \ +#define makeCompositionModelThermoType(SS, CloudType, ParcelType, ThermoType) \ \ - defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ \ - CompositionModel<CloudType<ParcelType> >:: \ - adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ - add##SS##CloudType##ParcelType##ConstructorToTable_; + CompositionModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/NewCompositionModel.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/NewCompositionModel.C index 7fd051cd73a8f697f75071ba816828198a2316e8..81d338176c1566f32a42aa47b41d78a4ea4b317c 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/NewCompositionModel.C +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/NewCompositionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,34 +36,31 @@ Foam::CompositionModel<CloudType>::New CloudType& owner ) { - word ReactingCompositionModelType - ( - dict.lookup("CompositionModel") - ); + word CompositionModelType(dict.lookup("CompositionModel")); - Info<< "Selecting CompositionModel " - << ReactingCompositionModelType << endl; + Info<< "Selecting CompositionModel " << CompositionModelType << endl; typename dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(ReactingCompositionModelType); + dictionaryConstructorTablePtr_->find(CompositionModelType); if (cstrIter == dictionaryConstructorTablePtr_->end()) { FatalErrorIn ( "CompositionModel<CloudType>::New" - "(const dictionary&, CloudType&)" - ) - << "Unknown ReactingCompositionModelType type " - << ReactingCompositionModelType + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown CompositionModelType type " + << CompositionModelType << ", constructor not in hash table" << nl << nl - << " Valid CompositionModel types are :" << nl - << dictionaryConstructorTablePtr_->toc() + << " Valid CompositionModel types are:" << nl + << dictionaryConstructorTablePtr_->toc() << nl << exit(FatalError); } - return autoPtr<CompositionModel<CloudType> > - (cstrIter()(dict, owner)); + return autoPtr<CompositionModel<CloudType> >(cstrIter()(dict, owner)); } diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C index afbaef739575eb837c5bba9912c5d37ec6e2df8d..64240eab73ef0ec1e2fb75fd1126eed020d7cdba 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,356 +26,130 @@ License #include "SingleMixtureFraction.H" -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class CloudType> -Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction -( - const dictionary& dict, - CloudType& owner -) -: - CompositionModel<CloudType>(dict, owner, typeName), - - gasNames_(this->coeffDict().lookup("gasNames")), - gasGlobalIds_(gasNames_.size(), -1), - YGas0_(this->coeffDict().lookup("YGas0")), - YGasTot0_(readScalar(this->coeffDict().lookup("YGasTot0"))), - - liquidNames_(this->coeffDict().lookup("liquidNames")), - liquidGlobalIds_(liquidNames_.size(), -1), - YLiquid0_(this->coeffDict().lookup("YLiquid0")), - YLiquidTot0_(readScalar(this->coeffDict().lookup("YLiquidTot0"))), - - solidNames_(this->coeffDict().lookup("solidNames")), - solidGlobalIds_(solidNames_.size(), -1), - YSolid0_(this->coeffDict().lookup("YSolid0")), - YSolidTot0_(readScalar(this->coeffDict().lookup("YSolidTot0"))), - - YMixture0_(3) +void Foam::SingleMixtureFraction<CloudType>::constructIds() { - // Construct gasGlobalIds_ list - forAll(gasNames_, i) + forAll(this->phaseProps(), phaseI) { - forAll (this->carrierThermo().composition().Y(), j) + switch (this->phaseProps()[phaseI].phase()) { - word specieName(this->carrierThermo().composition().Y()[j].name()); - - if (specieName == gasNames_[i]) + case phaseProperties::GAS: { - gasGlobalIds_[i] = j; + idGas_ = phaseI; break; } - } - if (gasGlobalIds_[i] == -1) - { - Info<< "\nThermo package species composition comprises:" << endl; - forAll (this->carrierThermo().composition().Y(), k) - { - Info<< this->carrierThermo().composition().Y()[k].name() - << endl; - } - - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - ) << "Could not find gas species " << gasNames_[i] - << " in species list" << exit(FatalError); - } - } - - // Construct liquidGlobalIds_ list - forAll(liquidNames_, i) - { - forAll (this->liquids().components(), j) - { - word specieName(this->liquids().components()[j]); - - if (specieName == liquidNames_[i]) + case phaseProperties::LIQUID: { - liquidGlobalIds_[i] = j; + idLiquid_ = phaseI; break; } - } - if (liquidGlobalIds_[i] == -1) - { - Info<< "\nLiquid mixture species composition comprises:" << endl; - forAll (this->liquids().components(), k) - { - Info<< this->liquids().components()[k] << endl; - } - - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - ) << "Could not find liquid species " << liquidNames_[i] - << " in species list" << exit(FatalError); - } - } - - // Construct solidGlobalIds_ list - forAll(solidNames_, i) - { - forAll (this->solids().components(), j) - { - word specieName(this->solids().components()[j]); - - if (specieName == solidNames_[i]) + case phaseProperties::SOLID: { - solidGlobalIds_[i] = j; + idSolid_ = phaseI; break; } - } - if (solidGlobalIds_[i] == -1) - { - Info<< "\nSolid mixture species composition comprises:" << endl; - forAll (this->solids().components(), k) + default: { - Info<< this->solids().components()[k] << endl; + FatalErrorIn + ( + "void Foam::SingleMixtureFraction<CloudType>::" + "constructIds()" + ) << "Unknown phase enumeration" << nl << abort(FatalError); } - - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - ) << "Could not find solid species " << solidNames_[i] - << " in species list" << exit(FatalError); } } - // Set mixture fractions - YMixture0_[0] = YGasTot0_; - YMixture0_[1] = YLiquidTot0_; - YMixture0_[2] = YSolidTot0_; - - // Check that total mass fractions = 1 - - if (YGas0_.size()) + if (idGas_ < 0) { - if (mag(sum(YGas0_) - 1) > SMALL) - { - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - )<< "Mass fractions of YGas0 must sum to unity" - << exit(FatalError); - } + FatalErrorIn("Foam::SingleMixtureFraction<CloudType>::constructIds()") + << "No gas phase found in phase list:" << nl + << this->phaseTypes() << nl << endl; } - else + if (idLiquid_ < 0) { - YMixture0_[0] = 0.0; + FatalErrorIn("Foam::SingleMixtureFraction<CloudType>::constructIds()") + << "No liquid phase found in phase list:" << nl + << this->phaseTypes() << nl << endl; } - - if (YLiquid0_.size()) + if (idSolid_ < 0) { - if (mag(sum(YLiquid0_) - 1) > SMALL) - { - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - )<< "Mass fractions of YLiquid0 must sum to unity" - << exit(FatalError); - } - } - else - { - YMixture0_[1] = 0.0; - } - - if (YSolid0_.size()) - { - if (mag(sum(YSolid0_) - 1) > SMALL) - { - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - )<< "Mass fractions of YSolid0 must sum to unity" - << exit(FatalError); - } - } - else - { - YMixture0_[2] = 0.0; - } - - // Check total mixture fraction sums to 1 - if (mag(sum(YMixture0_) - 1) > SMALL) - { - FatalErrorIn - ( - "Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction" - "(const dictionary&, CloudType&)" - ) << "Mass fractions YGasTot0 + YSolidTot0 + YSolidTot0 must sum " - << "to unity" << exit(FatalError); + FatalErrorIn("Foam::SingleMixtureFraction<CloudType>::constructIds()") + << "No solid phase found in phase list:" << nl + << this->phaseTypes() << nl << endl; } } -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class CloudType> -Foam::SingleMixtureFraction<CloudType>::~SingleMixtureFraction() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +Foam::SingleMixtureFraction<CloudType>::SingleMixtureFraction +( + const dictionary& dict, + CloudType& owner +) +: + CompositionModel<CloudType>(dict, owner, typeName), -template<class CloudType> -const Foam::wordList -Foam::SingleMixtureFraction<CloudType>::compositionNames() const -{ - wordList names(3); - names[0] = "Gas"; - names[1] = "Liquid"; - names[2] = "Solid"; - return names; -} + idGas_(-1), + idLiquid_(-1), + idSolid_(-1), -template<class CloudType> -const Foam::wordList& -Foam::SingleMixtureFraction<CloudType>::gasNames() const + YMixture0_(3) { - return gasNames_; -} + constructIds(); - -template<class CloudType> -Foam::label -Foam::SingleMixtureFraction<CloudType>::gasLocalId(const word& gasName) const -{ - forAll(gasNames_, i) + if (this->phaseProps().size() != 3) { - if (gasName == gasNames_[i]) - { - return i; - } + FatalErrorIn + ( + "Foam::SingleMixtureFraction<CloudType>::" + "SingleMixtureFraction" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Incorrect numebr of phases: " << nl + << " Please specify 1 gas, 1 liquid and 1 solid" << nl + << exit(FatalError); } - WarningIn - ( - "Foam::label SingleMixtureFraction<CloudType>::" - "gasLocalId(const word& gasName) const" - )<< "Gas name " << gasName << " not found in gasNames_" - << endl; + this->coeffDict().lookup("YGasTot0") >> YMixture0_[idGas_]; + this->coeffDict().lookup("YLiquidTot0") >> YMixture0_[idLiquid_]; + this->coeffDict().lookup("YSolidTot0") >> YMixture0_[idSolid_]; - return -1; -} - - -template<class CloudType> -Foam::label -Foam::SingleMixtureFraction<CloudType>::gasGlobalId(const word& gasName) const -{ - forAll(gasNames_, i) + if (mag(sum(YMixture0_) - 1.0) > SMALL) { - if (gasName == gasNames_[i]) - { - return gasGlobalIds_[i]; - } + FatalErrorIn + ( + "Foam::SingleMixtureFraction<CloudType>::" + "SingleMixtureFraction" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Sum of phases should be 1. Phase fractions:" << nl + << YMixture0_ << nl << exit(FatalError); } - - WarningIn - ( - "Foam::label SingleMixtureFraction<CloudType>::" - "gasGlobalId(const word& gasName) const" - )<< "Gas name " << gasName << " not found in gasNames_" - << endl; - - return -1; -} - - -template<class CloudType> -const Foam::labelList& -Foam::SingleMixtureFraction<CloudType>::gasGlobalIds() const -{ - return gasGlobalIds_; -} - - -template<class CloudType> -const Foam::scalarField& -Foam::SingleMixtureFraction<CloudType>::YGas0() const -{ - return YGas0_; -} - - -template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::YGasTot0() const -{ - return YGasTot0_; } -template<class CloudType> -const Foam::wordList& -Foam::SingleMixtureFraction<CloudType>::liquidNames() const -{ - return liquidNames_; -} - - -template<class CloudType> -Foam::label Foam::SingleMixtureFraction<CloudType>::liquidLocalId -( - const word& liquidName -) const -{ - forAll(liquidNames_, i) - { - if (liquidName == liquidNames_[i]) - { - return i; - } - } - - WarningIn - ( - "Foam::label SingleMixtureFraction<CloudType>::" - "liquidLocalId(const word& liquidName) const" - )<< "Liquid name " << liquidName << " not found in liquidNames_" - << endl; - - return -1; -} - +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class CloudType> -Foam::label Foam::SingleMixtureFraction<CloudType>::liquidGlobalId -( - const word& liquidName -) const -{ - forAll(liquidNames_, i) - { - if (liquidName == liquidNames_[i]) - { - return liquidGlobalIds_[i]; - } - } +Foam::SingleMixtureFraction<CloudType>::~SingleMixtureFraction() +{} - WarningIn - ( - "Foam::label SingleMixtureFraction<CloudType>::" - "liquidGlobalId(const word& liquidName) const" - )<< "Liquid name " << liquidName << " not found in liquidNames_" - << endl; - - return -1; -} +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class CloudType> -const Foam::labelList& -Foam::SingleMixtureFraction<CloudType>::liquidGlobalIds() const +const Foam::scalarField& +Foam::SingleMixtureFraction<CloudType>::YGas0() const { - return liquidGlobalIds_; + return this->phaseProps()[idGas_].Y(); } @@ -383,81 +157,7 @@ template<class CloudType> const Foam::scalarField& Foam::SingleMixtureFraction<CloudType>::YLiquid0() const { - return YLiquid0_; -} - - -template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::YLiquidTot0() const -{ - return YLiquidTot0_; -} - - -template<class CloudType> -const Foam::wordList& -Foam::SingleMixtureFraction<CloudType>::solidNames() const -{ - return solidNames_; -} - - -template<class CloudType> -Foam::label Foam::SingleMixtureFraction<CloudType>::solidLocalId -( - const word& solidName -) const -{ - forAll(solidNames_, i) - { - if (solidName == solidNames_[i]) - { - return i; - } - } - - WarningIn - ( - "Foam::label SingleMixtureFraction<CloudType>::" - "SolididLocalId(const word& solidName) const" - )<< "Solid name " << solidName << " not found in solidNames_" - << endl; - - return -1; -} - - -template<class CloudType> -Foam::label -Foam::SingleMixtureFraction<CloudType>::solidGlobalId -( - const word& solidName -) const -{ - forAll(solidNames_, i) - { - if (solidName == solidNames_[i]) - { - return solidGlobalIds_[i]; - } - } - - WarningIn - ( - "Foam::label SingleMixtureFraction<CloudType>::" - "solidGlobalId(const word& solidName) const" - )<< "Solid name " << solidName << " not found in solidNames_" - << endl; - - return -1; -} - - -template<class CloudType> -const Foam::labelList& -Foam::SingleMixtureFraction<CloudType>::solidGlobalIds() const -{ - return solidGlobalIds_; + return this->phaseProps()[idLiquid_].Y(); } @@ -465,15 +165,7 @@ template<class CloudType> const Foam::scalarField& Foam::SingleMixtureFraction<CloudType>::YSolid0() const { - return YSolid0_; -} - - -template<class CloudType> -Foam::scalar -Foam::SingleMixtureFraction<CloudType>::YSolidTot0() const -{ - return YSolidTot0_; + return this->phaseProps()[idSolid_].Y(); } @@ -486,115 +178,23 @@ Foam::SingleMixtureFraction<CloudType>::YMixture0() const template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::RGas -( - const scalarField& YGas -) const +Foam::label Foam::SingleMixtureFraction<CloudType>::idGas() const { - scalar RGasMixture = 0.0; - forAll(YGas, i) - { - label id = gasGlobalIds_[i]; - RGasMixture += YGas[i]*this->gases()[id].R(); - } - return RGasMixture; + return idGas_; } template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::HGas -( - const scalarField& YGas, - const scalar T -) -const +Foam::label Foam::SingleMixtureFraction<CloudType>::idLiquid() const { - scalar HMixture = 0.0; - forAll(YGas, i) - { - label id = gasGlobalIds_[i]; - HMixture += YGas[i]*this->gases()[id].H(T); - } - return HMixture; + return idLiquid_; } template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::HSolid -( - const scalarField& YSolid, - const scalar T -) -const +Foam::label Foam::SingleMixtureFraction<CloudType>::idSolid() const { - scalar HMixture = 0.0; - forAll(YSolid, i) - { - label id = solidGlobalIds_[i]; - HMixture += - YSolid[i] - *( - this->solids().properties()[id].Hf() - + this->solids().properties()[id].cp()*T - ); - } - return HMixture; -} - - -template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::cpGas -( - const scalarField& YGas, - const scalar T -) -const -{ - scalar cpMixture = 0.0; - forAll(YGas, i) - { - label id = gasGlobalIds_[i]; - cpMixture += YGas[i]*this->gases()[id].Cp(T); - } - return cpMixture; -} - - -template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::cpLiquid -( - const scalarField& YLiquid, - const scalar p, - const scalar T -) -const -{ - scalar cpMixture = 0.0; - forAll(YLiquid, i) - { - label id = liquidGlobalIds_[i]; - cpMixture += YLiquid[i]*this->liquids().properties()[id].cp(p, T); - } - - return cpMixture; -} - - -template<class CloudType> -Foam::scalar Foam::SingleMixtureFraction<CloudType>::cpSolid -( - const scalarField& YSolid -) -const -{ - scalar cpMixture = 0.0; - forAll(YSolid, i) - { - label id = solidGlobalIds_[i]; - cpMixture += YSolid[i]*this->solids().properties()[id].cp(); - } - - return cpMixture; + return idSolid_; } diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H index 6808b3503b0e2a07886e8e140ffb723e9142bb15..3555f616f7433c90b261d0403f3f2656ff1582c4 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SingleMixtureFraction/SingleMixtureFraction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,10 +25,8 @@ License Class Foam::SingleMixtureFraction - Description - Templated parcel single mixture fraction class - - Each phase sums to a mass fraction of 1 + Templated parcel multi-phase, multi-component class SourceFiles SingleMixtureFraction.C @@ -54,68 +52,31 @@ class SingleMixtureFraction : public CompositionModel<CloudType> { - // Private data - //- Parcel properties - - //- List of gas names - const wordList gasNames_; - - //- Return local id of gas based on gasName - label gasLocalId(const word& gasName) const; - - //- Return global id of gas based on gasName - label gasGlobalId(const word& gasName) const; - - //- List of IDs of gases in global list - labelList gasGlobalIds_; - - //- Initial mass fractions of gases - const scalarField YGas0_; - - //- Initial total mass fractions of gases - const scalar YGasTot0_; - - //- List of liquid names - const wordList liquidNames_; + // Indices of the phases - //- Return local id of liquid based on liquidName - label liquidLocalId(const word& liquidName) const; + //- Gas + label idGas_; - //- Return global id of liquid based on liquidName - label liquidGlobalId(const word& liquidName) const; + //- Liquid + label idLiquid_; - //- List of IDs of liquids in global list - labelList liquidGlobalIds_; + //- Solid + label idSolid_; - //- Initial mass fractions of liquids - const scalarField YLiquid0_; - //- Initial total mass fractions of liquids - const scalar YLiquidTot0_; + // Mixture properties - //- List of solids species - const wordList solidNames_; - - //- Return local id of solid based on solidName - label solidLocalId(const word& solidName) const; - - //- Return global id of solid based on solidName - label solidGlobalId(const word& solidName) const; - - //- List of IDs of solids in global list - labelList solidGlobalIds_; + //- Phase component total fractions + scalarField YMixture0_; - //- Initial mass fractions of solids - const scalarField YSolid0_; - //- Initial total mass fractions of solids - const scalar YSolidTot0_; + // Private member functions - //- Initial total mass fractions of the mixture - // Index 0 = gas, 1 = liquid, 2 = solid - scalarField YMixture0_; + //- Construct the indices and check correct specification of + // 1 gas, 1 liquid and 1 solid + void constructIds(); public: @@ -127,86 +88,60 @@ public: // Constructors //- Construct from dictionary - SingleMixtureFraction - ( - const dictionary& dict, - CloudType& owner - ); - + SingleMixtureFraction(const dictionary& dict, CloudType& owner); - // Destructor - virtual ~SingleMixtureFraction(); + //- Destructor + virtual ~SingleMixtureFraction(); // Member Functions // Access - //- Return the list of composition names - const wordList compositionNames() const; - - //- Return the list of gas names - const wordList& gasNames() const; - - //- Return the list indices of gases in global thermo list - const labelList& gasGlobalIds() const; + // Gas properties - //- Return the list of gas mass fractions - const scalarField& YGas0() const; + //- Return the list of gas mass fractions + const scalarField& YGas0() const; - //- Return the total gas mass fraction - scalar YGasTot0() const; + //- Return the total gas mass fraction + scalar YGasTot0() const; - //- Return the list of liquid names - const wordList& liquidNames() const; - //- Return the list indices of liquid in global thermo list - const labelList& liquidGlobalIds() const; + // Liquid properties - //- Return the list of liquid mass fractions - const scalarField& YLiquid0() const; + //- Return the list of liquid mass fractions + const scalarField& YLiquid0() const; - //- Return the total liquid mass fraction - scalar YLiquidTot0() const; + //- Return the total liquid mass fraction + scalar YLiquidTot0() const; - //- Return the list of solid names - const wordList& solidNames() const; - //- Return the list indices of solids in global thermo list - const labelList& solidGlobalIds() const; + // Solid properties - //- Return the list of solid mass fractions - const scalarField& YSolid0() const; + //- Return the list of solid mass fractions + const scalarField& YSolid0() const; - //- Return the total solid mass fraction - scalar YSolidTot0() const; + //- Return the total solid mass fraction + scalar YSolidTot0() const; - //- Return the list of mixture mass fractions - const scalarField& YMixture0() const; - //- Return the gas constant for the gas mixture - scalar RGas(const scalarField& YGas) const; + // Mixture properties - //- Return enthalpy for the gas mixture [energy per unit mass] - scalar HGas(const scalarField& YGas, const scalar T) const; + //- Return the list of mixture mass fractions + virtual const scalarField& YMixture0() const; - //- Return enthalpy for the solid mixture [energy per unit mass] - scalar HSolid(const scalarField& YSolid, const scalar T) const; + // Indices of gas, liquid and solid phases in phase properties + // list - //- Return specific heat caparcity for the gas mixture - scalar cpGas(const scalarField& YGas, const scalar T) const; + //- Gas id + virtual label idGas() const; - //- Return specific heat caparcity for the liquid mixture - scalar cpLiquid - ( - const scalarField& YLiquid, - const scalar p, - const scalar T - ) const; + //- Liquid id + virtual label idLiquid() const; - //- Return specific heat caparcity for the solid mixture - scalar cpSolid(const scalarField& YSolid) const; + //- Solid id + virtual label idSolid() const; }; diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C new file mode 100644 index 0000000000000000000000000000000000000000..5be1ce0a495cb03f09176330c3f3ae4b03ef0466 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.C @@ -0,0 +1,173 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "SinglePhaseMixture.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class CloudType> +void Foam::SinglePhaseMixture<CloudType>::constructIds() +{ + if (this->phaseProps().size() == 0) + { + FatalErrorIn + ( + "void Foam::SinglePhaseMixture<CloudType>::constructIds()" + ) << "Phase list is empty" << nl << exit(FatalError); + } + else if (this->phaseProps().size() > 1) + { + FatalErrorIn + ( + "void Foam::SinglePhaseMixture<CloudType>::constructIds()" + ) << "Only one phase permitted" << nl << exit(FatalError); + } + + switch (this->phaseProps()[0].phase()) + { + case phaseProperties::GAS: + { + idGas_ = 0; + break; + } + case phaseProperties::LIQUID: + { + idLiquid_ = 0; + break; + } + case phaseProperties::SOLID: + { + idSolid_ = 0; + break; + } + default: + { + FatalErrorIn + ( + "void Foam::SinglePhaseMixture<CloudType>::constructIds()" + ) << "Unknown phase enumeration" << nl << abort(FatalError); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::SinglePhaseMixture<CloudType>::SinglePhaseMixture +( + const dictionary& dict, + CloudType& owner +) +: + CompositionModel<CloudType>(dict, owner, typeName), + idGas_(-1), + idLiquid_(-1), + idSolid_(-1) +{ + constructIds(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::SinglePhaseMixture<CloudType>::~SinglePhaseMixture() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +const Foam::scalarField& +Foam::SinglePhaseMixture<CloudType>::YGas0() const +{ + notImplemented + ( + "const Foam::scalarField& " + "Foam::SinglePhaseMixture<CloudType>::YGas0() const" + ); + return this->phaseProps()[0].Y(); +} + + +template<class CloudType> +const Foam::scalarField& +Foam::SinglePhaseMixture<CloudType>::YLiquid0() const +{ + notImplemented + ( + "const Foam::scalarField& " + "Foam::SinglePhaseMixture<CloudType>::YLiquid0() const" + ); + return this->phaseProps()[0].Y(); +} + + +template<class CloudType> +const Foam::scalarField& +Foam::SinglePhaseMixture<CloudType>::YSolid0() const +{ + notImplemented + ( + "const Foam::scalarField& " + "Foam::SinglePhaseMixture<CloudType>::YSolid0() const" + ); + return this->phaseProps()[0].Y(); +} + + +template<class CloudType> +const Foam::scalarField& +Foam::SinglePhaseMixture<CloudType>::YMixture0() const +{ + return this->phaseProps()[0].Y(); +} + + +template<class CloudType> +Foam::label Foam::SinglePhaseMixture<CloudType>::idGas() const +{ + return idGas_; +} + + +template<class CloudType> +Foam::label Foam::SinglePhaseMixture<CloudType>::idLiquid() const +{ + return idLiquid_; +} + + +template<class CloudType> +Foam::label Foam::SinglePhaseMixture<CloudType>::idSolid() const +{ + return idSolid_; +} + + +// ************************************************************************* // + diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H new file mode 100644 index 0000000000000000000000000000000000000000..f7fda36a90829efd6e821d9b5638f28c7add25b4 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/SinglePhaseMixture/SinglePhaseMixture.H @@ -0,0 +1,156 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::SinglePhaseMixture + +Description + Templated parcel single phase, multi-component class + +SourceFiles + SinglePhaseMixture.C + +\*---------------------------------------------------------------------------*/ + +#ifndef SinglePhaseMixture_H +#define SinglePhaseMixture_H + +#include "CompositionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class SinglePhaseMixture Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class SinglePhaseMixture +: + public CompositionModel<CloudType> +{ + // Private data + + // Indices of the phases - only 1 will be set + + //- Gas + label idGas_; + + //- Liquid + label idLiquid_; + + //- Solid + label idSolid_; + + + // Private member functions + + //- Construct the indices and check correct specification of + // 1 gas or 1 liquid or 1 solid + void constructIds(); + + +public: + + //- Runtime type information + TypeName("SinglePhaseMixture"); + + + // Constructors + + //- Construct from dictionary + SinglePhaseMixture(const dictionary& dict, CloudType& owner); + + + //- Destructor + virtual ~SinglePhaseMixture(); + + + // Member Functions + + // Access + + // Gas properties + + //- Return the list of gas mass fractions + const scalarField& YGas0() const; + + //- Return the total gas mass fraction + scalar YGasTot0() const; + + + // Liquid properties + + //- Return the list of liquid mass fractions + const scalarField& YLiquid0() const; + + //- Return the total liquid mass fraction + scalar YLiquidTot0() const; + + + // Solid properties + + //- Return the list of solid mass fractions + const scalarField& YSolid0() const; + + //- Return the total solid mass fraction + scalar YSolidTot0() const; + + + // Mixture properties + + //- Return the list of mixture mass fractions + virtual const scalarField& YMixture0() const; + + // Indices of gas, liquid and solid phases in phase properties + // list + + //- Gas id + virtual label idGas() const; + + //- Liquid id + virtual label idLiquid() const; + + //- Solid id + virtual label idSolid() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "SinglePhaseMixture.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C new file mode 100644 index 0000000000000000000000000000000000000000..2de0366b31230928c3cec60622aee9f8cf1b6699 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.C @@ -0,0 +1,270 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ReactingLookupTableInjection.H" +#include "scalarIOList.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::ReactingLookupTableInjection<CloudType>::INPUT_FILE_COLS = 12; + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::ReactingLookupTableInjection<CloudType>::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return round(injectorCells_.size()*(time1 - time0)*nParcelsPerSecond_); + } + else + { + return 0; + } +} + + +template<class CloudType> +Foam::scalar Foam::ReactingLookupTableInjection<CloudType>::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + scalar volume = 0.0; + if ((time0 >= 0.0) && (time0 < duration_)) + { + forAll(mDot_, injectorI) + { + volume += mDot_[injectorI]/rho_[injectorI]*(time1 - time0); + } + } + + return volume; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ReactingLookupTableInjection<CloudType>::ReactingLookupTableInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner, typeName), + inputFileName_(this->coeffDict().lookup("inputFile")), + duration_(readScalar(this->coeffDict().lookup("duration"))), + nParcelsPerSecond_ + ( + readScalar(this->coeffDict().lookup("parcelsPerSecond")) + ), + x_(0), + U_(0), + d_(0), + rho_(0), + mDot_(0), + T_(0), + cp_(0), + Y_(0), + injectorCells_(0) +{ + scalarListIOList injectorData + ( + IOobject + ( + inputFileName_, + owner.db().time().constant(), + owner.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + x_.setSize(injectorData.size()); + U_.setSize(injectorData.size()); + d_.setSize(injectorData.size()); + rho_.setSize(injectorData.size()); + mDot_.setSize(injectorData.size()); + T_.setSize(injectorData.size()); + cp_.setSize(injectorData.size()); + Y_.setSize(injectorData.size()); + + // Populate lists + forAll(injectorData, injectorI) + { + if (injectorData[injectorI].size() != INPUT_FILE_COLS) + { + FatalErrorIn + ( + "ReactingLookupTableInjection" + "(" + "const dictionary&," + "CloudType& owner" + ")" + ) << "Incorrect number of entries in injector specification " + << "- found " << injectorData[injectorI].size() + << ", expected a minimum of " << INPUT_FILE_COLS << ":" << nl + << " x0 x1 x2 u0 u1 u2 d rho mDot T cp Y0..YN" + << nl << exit(FatalError); + } + x_[injectorI].component(0) = injectorData[injectorI][0]; + x_[injectorI].component(1) = injectorData[injectorI][1]; + x_[injectorI].component(2) = injectorData[injectorI][2]; + U_[injectorI].component(0) = injectorData[injectorI][3]; + U_[injectorI].component(1) = injectorData[injectorI][4]; + U_[injectorI].component(2) = injectorData[injectorI][5]; + d_[injectorI] = injectorData[injectorI][6]; + rho_[injectorI] = injectorData[injectorI][7]; + mDot_[injectorI] = injectorData[injectorI][8]; + T_[injectorI] = injectorData[injectorI][9]; + cp_[injectorI] = injectorData[injectorI][10]; + + Y_[injectorI].setSize + ( + injectorData[injectorI].size() - INPUT_FILE_COLS + 1 + ); + label Yi = 0; + for + ( + label i = INPUT_FILE_COLS-1; + i < injectorData[injectorI].size(); + i++ + ) + { + Y_[injectorI][Yi++] = injectorData[injectorI][i]; + } + } + + // Set/cache the injector cells + injectorCells_.setSize(injectorData.size()); + forAll(x_, injectorI) + { + this->findCellAtPosition(injectorCells_[injectorI], x_[injectorI]); + } + + // Determine volume of particles to inject + this->volumeTotal_ = 0.0; + forAll(mDot_, injectorI) + { + this->volumeTotal_ += mDot_[injectorI]/rho_[injectorI]; + } + this->volumeTotal_ *= duration_; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ReactingLookupTableInjection<CloudType>::~ReactingLookupTableInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::ReactingLookupTableInjection<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::ReactingLookupTableInjection<CloudType>::timeEnd() const +{ + return this->SOI_ + duration_; +} + + +template<class CloudType> +void Foam::ReactingLookupTableInjection<CloudType>::setPositionAndCell +( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + position = x_[injectorI]; + cellOwner = injectorCells_[injectorI]; +} + + +template<class CloudType> +void Foam::ReactingLookupTableInjection<CloudType>::setProperties +( + const label parcelI, + const label nParcels, + const scalar, + typename CloudType::parcelType& parcel +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + // set particle velocity + parcel.U() = U_[injectorI]; + + // set particle diameter + parcel.d() = d_[injectorI]; + + // set particle density + parcel.rho() = rho_[injectorI]; + + // set particle temperature + parcel.T() = T_[injectorI]; + + // set particle specific heat capacity + parcel.cp() = cp_[injectorI]; + + // set particle component mass fractions + parcel.Y() = Y_[injectorI]; +} + + +template<class CloudType> +bool Foam::ReactingLookupTableInjection<CloudType>::fullyDescribed() const +{ + return true; +} + + +template<class CloudType> +bool Foam::ReactingLookupTableInjection<CloudType>::validInjection(const label) +{ + return true; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H new file mode 100644 index 0000000000000000000000000000000000000000..f8b6546d5ba203a9dad0b28a2463bc1a1137f790 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/InjectionModel/ReactingLookupTableInjection/ReactingLookupTableInjection.H @@ -0,0 +1,204 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::ReactingLookupTableInjection + +Description + Particle injection sources read from look-up table. Each row corresponds to + an injection site. + + ( + (x y z u v w d rho mDot T cp Y0..YN) + ); + + where: + x, y, z = global cartesian co-ordinates [m] + u, v, w = global cartesian velocity components [m/s] + d = diameter [m] + rho = density [kg/m3] + mDot = mass flow rate [kg/m3] + T = temperature [K] + cp = specific heat capacity [J/kg/K] + +SourceFiles + ReactingLookupTableInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ReactingLookupTableInjection_H +#define ReactingLookupTableInjection_H + +#include "InjectionModel.H" +#include "pdf.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class ReactingLookupTableInjection Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class ReactingLookupTableInjection +: + public InjectionModel<CloudType> +{ + // Private data + + //- Name of file containing injector/parcel data + const word inputFileName_; + + //- Injection duration - common to all injection sources + const scalar duration_; + + //- Number of parcels per injector - common to all injection sources + const label nParcelsPerSecond_; + + //- List of parcel position per injector / [m] + List<point> x_; + + //- List of parcel velocity per injector / [m] + List<vector> U_; + + //- List of parcel diameter per injector / [m] + List<scalar> d_; + + //- List of parcel fluid density pre injector / [kg/m3] + List<scalar> rho_; + + //- List of parcel injection mass flow per injector / [kg/s] + List<scalar> mDot_; + + //- List of parcel temperature flow per injector / [K] + List<scalar> T_; + + //- List of parcel specific heat capacity per injector / [J/kg/K] + List<scalar> cp_; + + //- List of parcel specie mass fractions per injector / [] + List<scalarList> Y_; + + //- List of injector cells per injector + List<label> injectorCells_; + + //- Number of columns expected in input file + static label INPUT_FILE_COLS; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Volume of parcels to introduce over the time step relative to SOI + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("ReactingLookupTableInjection"); + + + // Constructors + + //- Construct from dictionary + ReactingLookupTableInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~ReactingLookupTableInjection(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + virtual void setPositionAndCell + ( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner + ); + + //- Set the parcel properties + virtual void setProperties + ( + const label parcelI, + const label nParcels, + const scalar time, + typename CloudType::parcelType& parcel + ); + + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const; + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "ReactingLookupTableInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C new file mode 100644 index 0000000000000000000000000000000000000000..19429ba6817e94bdaab43a832c7d1494c0a99638 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C @@ -0,0 +1,198 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "LiquidEvaporation.H" +#include "specie.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::scalarField Foam::LiquidEvaporation<CloudType>::calcXc +( + const label cellI +) const +{ + scalarField Xc(this->owner().mcCarrierThermo().Y().size()); + + scalar Winv = 0.0; + forAll(Xc, i) + { + scalar Y = this->owner().mcCarrierThermo().Y()[i][cellI]; + Winv += Y/this->owner().mcCarrierThermo().speciesData()[i].W(); + Xc[i] = Y/this->owner().mcCarrierThermo().speciesData()[i].W(); + } + + return Xc/Winv; +} + + +template <class CloudType> +Foam::scalar Foam::LiquidEvaporation<CloudType>::Sh +( + const scalar Re, + const scalar Sc +) const +{ + return 2.0 + 0.6*Foam::sqrt(Re)*pow(Sc, 0.333); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class CloudType> +Foam::LiquidEvaporation<CloudType>::LiquidEvaporation +( + const dictionary& dict, + CloudType& owner +) +: + PhaseChangeModel<CloudType>(dict, owner, typeName), + liquids_ + ( + liquidMixture::New + ( + owner.mesh().objectRegistry::lookupObject<dictionary> + ( + owner.carrierThermo().name() + ) + ) + ), + activeLiquids_(this->coeffDict().lookup("activeLiquids")), + liqToCarrierMap_(activeLiquids_.size(), -1), + liqToLiqMap_(activeLiquids_.size(), -1) +{ + if (activeLiquids_.size() == 0) + { + WarningIn + ( + "Foam::LiquidEvaporation<CloudType>::LiquidEvaporation" + "(" + "const dictionary& dict, " + "CloudType& owner" + ")" + ) << "Evaporation model selected, but no active liquids defined" + << nl << endl; + } + + // Determine mapping between liquid and carrier phase species + forAll(activeLiquids_, i) + { + liqToCarrierMap_[i] = + owner.composition().globalCarrierId(activeLiquids_[i]); + } + + // Determine mapping between model active liquids and global liquids + label idLiquid = owner.composition().idLiquid(); + forAll(activeLiquids_, i) + { + liqToLiqMap_[i] = + owner.composition().localId(idLiquid, activeLiquids_[i]); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template <class CloudType> +Foam::LiquidEvaporation<CloudType>::~LiquidEvaporation() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::LiquidEvaporation<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +void Foam::LiquidEvaporation<CloudType>::calculate +( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar pc, + const scalar Tc, + const scalar nuc, + const vector& Ur, + scalarField& dMassPC +) const +{ + // construct carrier phase species volume fractions for cell, cellI + scalarField Xc = calcXc(cellI); + + // droplet surface area + scalar A = mathematicalConstant::pi*sqr(d); + + // Reynolds number + scalar Re = mag(Ur)*d/(nuc + ROOTVSMALL); + + // film temperature evaluated using the 2/3 rule + scalar Tf = (2.0*T + Tc)/3.0; + + // calculate mass transfer of each specie in liquid + forAll(activeLiquids_, i) + { + label gid = liqToCarrierMap_[i]; + label lid = liqToLiqMap_[i]; + + // vapour diffusivity at film temperature and cell pressure [m2/s] + scalar Dab = liquids_->properties()[lid].D(pc, Tf); + + // saturation pressure for species i at film temperature and cell + // pressure [pa] - carrier phase pressure assumed equal to the liquid + // vapour pressure close to the surface + // - limited to pc if pSat > pc + scalar pSat = min(liquids_->properties()[lid].pv(pc, Tf), pc); + + // Schmidt number + scalar Sc = nuc/(Dab + ROOTVSMALL); + + // Sherwood number + scalar Sh = this->Sh(Re, Sc); + + // mass transfer coefficient [m/s] + scalar kc = Sh*Dab/(d + ROOTVSMALL); + + // vapour concentration at droplet surface at film temperature [kmol/m3] + scalar Cs = pSat/(specie::RR*Tf); + + // vapour concentration in bulk gas at film temperature [kmol/m3] + scalar Cinf = Xc[gid]*pc/(specie::RR*Tf); + + // molar flux of vapour [kmol/m2/s] + scalar Ni = max(kc*(Cs - Cinf), 0.0); + + // mass transfer [kg] + dMassPC[lid] += Ni*A*liquids_->properties()[lid].W()*dt; + } +} + + +// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H similarity index 51% rename from applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.H rename to src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H index 3b0ba8fd504846ecb073c7083593eff38dec23c0..7e569736cab10d9dbb4dac3f464f9a5abbf2a22d 100644 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H @@ -23,112 +23,97 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::molConfig + Foam::LiquidEvaporation Description - -SourceFiles - molConfigI.H - molConfig.C - molConfigIO.C + Liquid evaporation model + - uses ideal gas assumption \*---------------------------------------------------------------------------*/ -#ifndef molConfig_H -#define molConfig_H - -#include "labelVector.H" -#include "scalar.H" -#include "vector.H" -#include "labelField.H" -#include "scalarField.H" -#include "vectorField.H" -#include "IOField.H" -#include "EulerCoordinateRotation.H" -#include "Random.H" +#ifndef LiquidEvaporation_H +#define LiquidEvaporation_H -#include "Time.H" -#include "IOdictionary.H" -#include "IOstreams.H" -#include "moleculeCloud.H" +#include "PhaseChangeModel.H" +#include "liquidMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - /*---------------------------------------------------------------------------*\ - Class molConfig Declaration + Class LiquidEvaporation Declaration \*---------------------------------------------------------------------------*/ -class molConfig +template<class CloudType> +class LiquidEvaporation +: + public PhaseChangeModel<CloudType> { - // Private data +protected: - const IOdictionary& molConfigDescription_; + // Protected data - const polyMesh& mesh_; + //- Global liquid properties data + autoPtr<liquidMixture> liquids_; - DynamicList<word> idList_; + //- List of active liquid names + List<word> activeLiquids_; - labelField id_; + //- Mapping between liquid and carrier species + List<label> liqToCarrierMap_; - scalarField mass_; + //- Mapping between local and global liquid species + List<label> liqToLiqMap_; - vectorField positions_; - labelField cells_; + // Protected member functions - vectorField U_; + //- Sherwood number as a function of Reynolds and Schmidt numbers + scalar Sh(const scalar Re, const scalar Sc) const; - vectorField A_; + //- Calculate the carrier phase component volume fractions at cellI + scalarField calcXc(const label cellI) const; - labelField tethered_; - vectorField tetherPositions_; - - label nMol_; +public: + //- Runtime type information + TypeName("LiquidEvaporation"); -public: // Constructors - //- Construct from IOdictionary and mesh - molConfig(IOdictionary&, const polyMesh&); - + //- Construct from dictionary + LiquidEvaporation + ( + const dictionary& dict, + CloudType& cloud + ); - // Destructor - ~molConfig(); + //- Destructor + virtual ~LiquidEvaporation(); // Member Functions - void createMolecules(); - - - // Access - - inline const List<word>& molIdList() const; - - inline const labelField& id() const; - - inline const scalarField& mass() const; - - inline const vectorField& positions() const; - - inline const labelField& cells() const; - - inline const vectorField& U() const; - - inline const vectorField& A() const; - - inline const labelField& tethered() const; - - inline const vectorField& tetherPositions() const; - - inline label nMol() const; + //- Flag to indicate whether model activates phase change model + virtual bool active() const; + + //- Update model + virtual void calculate + ( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar pc, + const scalar Tc, + const scalar nuc, + const vector& Ur, + scalarField& dMassPC + ) const; }; @@ -138,7 +123,9 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "molConfigI.H" +#ifdef NoRepository +# include "LiquidEvaporation.C" +#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C new file mode 100644 index 0000000000000000000000000000000000000000..ee3779b22ec64d22ad28d3cdf935a7fe641aece1 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "NoPhaseChange.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template <class CloudType> +Foam::NoPhaseChange<CloudType>::NoPhaseChange +( + const dictionary&, + CloudType& owner +) +: + PhaseChangeModel<CloudType>(owner) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template <class CloudType> +Foam::NoPhaseChange<CloudType>::~NoPhaseChange() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::NoPhaseChange<CloudType>::active() const +{ + return false; +} + + +template<class CloudType> +void Foam::NoPhaseChange<CloudType>::calculate +( + const scalar, + const label, + const scalar, + const scalar, + const scalar, + const scalar, + const scalar, + const vector&, + scalarField& +) const +{ + // Nothing to do... +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H new file mode 100644 index 0000000000000000000000000000000000000000..007fa73344ff48732e4dd396c97b8bb131c8e53c --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::NoPhaseChange + +Description + Dummy phase change model for 'none' + +\*---------------------------------------------------------------------------*/ + +#ifndef NoPhaseChange_H +#define NoPhaseChange_H + +#include "PhaseChangeModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +/*---------------------------------------------------------------------------*\ + Class NoPhaseChange Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class NoPhaseChange +: + public PhaseChangeModel<CloudType> +{ +public: + + //- Runtime type information + TypeName("none"); + + + // Constructors + + //- Construct from dictionary + NoPhaseChange(const dictionary&, CloudType&); + + + //- Destructor + virtual ~NoPhaseChange(); + + + // Member Functions + + //- Flag to indicate whether model activates phase change model + virtual bool active() const; + + //- Update model + virtual void calculate + ( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar pc, + const scalar Tc, + const scalar nuc, + const vector& Ur, + scalarField& dMassPC + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "NoPhaseChange.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/NewMassTransferModel.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/NewPhaseChangeModel.C similarity index 71% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/NewMassTransferModel.C rename to src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/NewPhaseChangeModel.C index 416dd02ad93dc68af4d00de19382e855a54c627e..efb611522a8ce744d28f0033029d58f309e5bbfa 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/NewMassTransferModel.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/NewPhaseChangeModel.C @@ -24,43 +24,42 @@ License \*---------------------------------------------------------------------------*/ -#include "MassTransferModel.H" +#include "PhaseChangeModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class CloudType> -Foam::autoPtr<Foam::MassTransferModel<CloudType> > -Foam::MassTransferModel<CloudType>::New +Foam::autoPtr<Foam::PhaseChangeModel<CloudType> > +Foam::PhaseChangeModel<CloudType>::New ( const dictionary& dict, CloudType& owner ) { - word MassTransferModelType - ( - dict.lookup("MassTransferModel") - ); + word PhaseChangeModelType(dict.lookup("PhaseChangeModel")); - Info<< "Selecting MassTransferModel " << MassTransferModelType << endl; + Info<< "Selecting PhaseChangeModel " << PhaseChangeModelType << endl; typename dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(MassTransferModelType); + dictionaryConstructorTablePtr_->find(PhaseChangeModelType); if (cstrIter == dictionaryConstructorTablePtr_->end()) { FatalErrorIn ( - "MassTransferModel<CloudType>::New" - "(const dictionary&, CloudType&)" - ) - << "Unknown MassTransferModelType type " - << MassTransferModelType + "PhaseChangeModel<CloudType>::New" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown PhaseChangeModelType type " + << PhaseChangeModelType << ", constructor not in hash table" << nl << nl - << " Valid MassTransferModel types are :" << nl + << " Valid PhaseChangeModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } - return autoPtr<MassTransferModel<CloudType> >(cstrIter()(dict, owner)); + return autoPtr<PhaseChangeModel<CloudType> >(cstrIter()(dict, owner)); } diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C similarity index 76% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.C rename to src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C index fc05b32540f3d783dc2bd295caa4c802e400bc31..b9fbdb2011463904670d4e98a912c75fe273d08c 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.C @@ -24,18 +24,31 @@ License \*---------------------------------------------------------------------------*/ -#include "MassTransferModel.H" +#include "PhaseChangeModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class CloudType> -Foam::MassTransferModel<CloudType>::MassTransferModel +Foam::PhaseChangeModel<CloudType>::PhaseChangeModel +( + CloudType& owner +) +: + dict_(dictionary::null), + owner_(owner), + coeffDict_(dictionary::null) +{} + + +template<class CloudType> +Foam::PhaseChangeModel<CloudType>::PhaseChangeModel ( const dictionary& dict, CloudType& owner, const word& type ) -: dict_(dict), +: + dict_(dict), owner_(owner), coeffDict_(dict.subDict(type + "Coeffs")) {} @@ -44,27 +57,27 @@ Foam::MassTransferModel<CloudType>::MassTransferModel // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template<class CloudType> -Foam::MassTransferModel<CloudType>::~MassTransferModel() +Foam::PhaseChangeModel<CloudType>::~PhaseChangeModel() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class CloudType> -const CloudType& Foam::MassTransferModel<CloudType>::owner() const +const CloudType& Foam::PhaseChangeModel<CloudType>::owner() const { return owner_; } template<class CloudType> -const Foam::dictionary& Foam::MassTransferModel<CloudType>::dict() const +const Foam::dictionary& Foam::PhaseChangeModel<CloudType>::dict() const { return dict_; } template<class CloudType> -const Foam::dictionary& Foam::MassTransferModel<CloudType>::coeffDict() const +const Foam::dictionary& Foam::PhaseChangeModel<CloudType>::coeffDict() const { return coeffDict_; } @@ -72,7 +85,7 @@ const Foam::dictionary& Foam::MassTransferModel<CloudType>::coeffDict() const // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "NewMassTransferModel.C" +#include "NewPhaseChangeModel.C" // ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H new file mode 100644 index 0000000000000000000000000000000000000000..2e0f03a3f52510fb46a661246636c0cad340bbc8 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H @@ -0,0 +1,195 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::PhaseChangeModel + +Description + Templated phase change model class + +SourceFiles + PhaseChangeModel.C + NewPhaseChangeModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef PhaseChangeModel_H +#define PhaseChangeModel_H + +#include "IOdictionary.H" +#include "autoPtr.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class PhaseChangeModel Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class PhaseChangeModel +{ +protected: + + // Protected data + + //- The cloud dictionary + const dictionary& dict_; + + //- Reference to the owner cloud class + CloudType& owner_; + + //- The coefficient dictionary + const dictionary coeffDict_; + + + // Protected member functions + + //- Sherwood number + scalar Sh() const; + + +public: + + //- Runtime type information + TypeName("PhaseChangeModel"); + + //- Declare runtime constructor selection table + declareRunTimeSelectionTable + ( + autoPtr, + PhaseChangeModel, + dictionary, + ( + const dictionary& dict, + CloudType& owner + ), + (dict, owner) + ); + + + // Constructors + + //- Construct null from owner + PhaseChangeModel(CloudType& owner); + + //- Construct from dictionary + PhaseChangeModel + ( + const dictionary& dict, + CloudType& owner, + const word& type + ); + + + //- Destructor + virtual ~PhaseChangeModel(); + + + //- Selector + static autoPtr<PhaseChangeModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); + + + // Access + + //- Return the owner cloud object + const CloudType& owner() const; + + //- Return the cloud dictionary + const dictionary& dict() const; + + //- Return the coefficient dictionary + const dictionary& coeffDict() const; + + + // Member Functions + + //- Flag to indicate whether model activates phase change model + virtual bool active() const = 0; + + //- Update model + virtual void calculate + ( + const scalar dt, + const label cellI, + const scalar d, + const scalar T, + const scalar pc, + const scalar Tc, + const scalar nuc, + const vector& Ur, + scalarField& dMassPC + ) const = 0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makePhaseChangeModel(CloudType) \ + \ + defineNamedTemplateTypeNameAndDebug(PhaseChangeModel<CloudType>, 0); \ + \ + defineTemplateRunTimeSelectionTable \ + ( \ + PhaseChangeModel<CloudType>, \ + dictionary \ + ); + + +#define makePhaseChangeModelThermoType(SS, CloudType, ParcelType, ThermoType) \ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + PhaseChangeModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "PhaseChangeModel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C similarity index 87% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C index 913fa89fc56a5ed5af668e6d3de84ec63e53b028..d8d522ff90b4909cbab192757e19ae553637d187 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Foam::ConstantRateDevolatilisation<CloudType>::ConstantRateDevolatilisation CloudType& owner ) : - MassTransferModel<CloudType>(dict, owner, typeName), + DevolatilisationModel<CloudType>(dict, owner, typeName), A0_(dimensionedScalar(this->coeffDict().lookup("A0")).value()), volatileResidualCoeff_ ( @@ -66,21 +66,21 @@ Foam::scalar Foam::ConstantRateDevolatilisation<CloudType>::calculate const scalar dt, const scalar mass0, const scalar mass, - const scalarField& YMixture0, - const scalarField& YMixture, const scalar T, + const scalar YVolatile0, + const scalar YVolatile, bool& canCombust ) const { - const scalar massVolatile0 = YMixture0[0]*mass0; - const scalar massVolatile = YMixture[0]*mass; + const scalar massVolatile0 = YVolatile0*mass0; + const scalar massVolatile = YVolatile*mass; if (massVolatile <= volatileResidualCoeff_*massVolatile0) { canCombust = true; } - // Volatile mass transfer from particle to carrier gas phase + // Volatile devolatilisation from particle to carrier gas phase const scalar dMass = min(dt*A0_*massVolatile0, massVolatile); return dMass; diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H similarity index 87% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H index 093a05b327d9a05b67abc73be9bf81717f8e7b87..b787a9b28254a4c8c09972040a276ace88e47975 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ Description #ifndef ConstantRateDevolatilisation_H #define ConstantRateDevolatilisation_H -#include "MassTransferModel.H" +#include "DevolatilisationModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,9 +47,8 @@ namespace Foam template<class CloudType> class ConstantRateDevolatilisation : - public MassTransferModel<CloudType> + public DevolatilisationModel<CloudType> { - // Private data // Model constants @@ -79,25 +78,24 @@ public: ); - // Destructor - - ~ConstantRateDevolatilisation(); + //- Destructor + virtual ~ConstantRateDevolatilisation(); // Member Functions - //- Flag to indicate whether model activates mass transfer model - bool active() const; + //- Flag to indicate whether model activates devolatilisation model + virtual bool active() const; //- Update model - scalar calculate + virtual scalar calculate ( const scalar dt, const scalar mass0, const scalar mass, - const scalarField& YMixture0, - const scalarField& YMixture, const scalar T, + const scalar YVolatile0, + const scalar YVolatile, bool& canCombust ) const; }; diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C new file mode 100644 index 0000000000000000000000000000000000000000..4239eb19958f8c70326f6aba9a7eea4fe23181ae --- /dev/null +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C @@ -0,0 +1,91 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DevolatilisationModel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::DevolatilisationModel<CloudType>::DevolatilisationModel +( + CloudType& owner +) +: + dict_(dictionary::null), + owner_(owner), + coeffDict_(dictionary::null) +{} + + +template<class CloudType> +Foam::DevolatilisationModel<CloudType>::DevolatilisationModel +( + const dictionary& dict, + CloudType& owner, + const word& type +) +: + dict_(dict), + owner_(owner), + coeffDict_(dict.subDict(type + "Coeffs")) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::DevolatilisationModel<CloudType>::~DevolatilisationModel() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class CloudType> +const CloudType& Foam::DevolatilisationModel<CloudType>::owner() const +{ + return owner_; +} + + +template<class CloudType> +const Foam::dictionary& Foam::DevolatilisationModel<CloudType>::dict() const +{ + return dict_; +} + + +template<class CloudType> +const Foam::dictionary& Foam::DevolatilisationModel<CloudType>::coeffDict() const +{ + return coeffDict_; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "NewDevolatilisationModel.C" + +// ************************************************************************* // + diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H similarity index 67% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H index 25d476e340a4c5f6396f24cedf4951f804105ec3..b7edc60275d7b403049c66a4a1157c3c01f71167 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/MassTransferModel/MassTransferModel.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,20 +23,19 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::MassTransferModel - + Foam::DevolatilisationModel Description - Templated mass transfer model class + Templated devolatilisation model class SourceFiles - MassTransferModel.C - NewMassTransferModel.C + DevolatilisationModel.C + NewDevolatilisationModel.C \*---------------------------------------------------------------------------*/ -#ifndef MassTransferModel_H -#define MassTransferModel_H +#ifndef DevolatilisationModel_H +#define DevolatilisationModel_H #include "IOdictionary.H" #include "autoPtr.H" @@ -48,13 +47,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class MassTransferModel Declaration + Class DevolatilisationModel Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> -class MassTransferModel +class DevolatilisationModel { - protected: // Protected data @@ -72,13 +70,13 @@ protected: public: //- Runtime type information - TypeName("MassTransferModel"); + TypeName("DevolatilisationModel"); //- Declare runtime constructor selection table declareRunTimeSelectionTable ( autoPtr, - MassTransferModel, + DevolatilisationModel, dictionary, ( const dictionary& dict, @@ -90,8 +88,11 @@ public: // Constructors + //- Construct null from owner + DevolatilisationModel(CloudType& owner); + //- Construct from dictionary - MassTransferModel + DevolatilisationModel ( const dictionary& dict, CloudType& owner, @@ -99,18 +100,16 @@ public: ); - // Destructor + //- Destructor + virtual ~DevolatilisationModel(); - virtual ~MassTransferModel(); - - // Selector - - static autoPtr<MassTransferModel<CloudType> > New - ( - const dictionary& dict, - CloudType& owner - ); + //- Selector + static autoPtr<DevolatilisationModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); // Access @@ -127,7 +126,7 @@ public: // Member Functions - //- Flag to indicate whether model activates mass transfer model + //- Flag to indicate whether model activates devolatilisation model virtual bool active() const = 0; //- Update model @@ -136,9 +135,9 @@ public: const scalar dt, const scalar mass0, const scalar mass, - const scalarField& YMixture0, - const scalarField& YMixture, const scalar T, + const scalar YVolatile0, + const scalar YVolatile, bool& canCombust ) const = 0; }; @@ -150,30 +149,35 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeMassTransferModel(CloudType) \ +#define makeDevolatilisationModel(CloudType) \ \ - defineNamedTemplateTypeNameAndDebug(MassTransferModel<CloudType>, 0); \ + defineNamedTemplateTypeNameAndDebug(DevolatilisationModel<CloudType>, 0); \ \ defineTemplateRunTimeSelectionTable \ ( \ - MassTransferModel<CloudType>, \ + DevolatilisationModel<CloudType>, \ dictionary \ ); -#define makeMassTransferModelType(SS, CloudType, ParcelType) \ +#define makeDevolatilisationModelThermoType(SS, CloudType, ParcelType, ThermoType)\ \ - defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ \ - MassTransferModel<CloudType<ParcelType> >:: \ - adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ - add##SS##CloudType##ParcelType##ConstructorToTable_; + DevolatilisationModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "MassTransferModel.C" +# include "DevolatilisationModel.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/NewDevolatilisationModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/NewDevolatilisationModel.C new file mode 100644 index 0000000000000000000000000000000000000000..cac0375b2816f94748edd2a0f12944a38483a51e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/NewDevolatilisationModel.C @@ -0,0 +1,67 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "DevolatilisationModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::autoPtr<Foam::DevolatilisationModel<CloudType> > +Foam::DevolatilisationModel<CloudType>::New +( + const dictionary& dict, + CloudType& owner +) +{ + word DevolatilisationModelType(dict.lookup("DevolatilisationModel")); + + Info<< "Selecting DevolatilisationModel " << DevolatilisationModelType + << endl; + + typename dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(DevolatilisationModelType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalErrorIn + ( + "DevolatilisationModel<CloudType>::New" + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown DevolatilisationModelType type " + << DevolatilisationModelType + << ", constructor not in hash table" << nl << nl + << " Valid DevolatilisationModel types are:" << nl + << dictionaryConstructorTablePtr_->toc() << exit(FatalError); + } + + return autoPtr<DevolatilisationModel<CloudType> >(cstrIter()(dict, owner)); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C similarity index 80% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C index f619c510e8298914b3cb8974ca32765ba6f6c7b5..0961826a23c089aea4dd03fe2d22f652f851cf35 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,45 +24,45 @@ License \*---------------------------------------------------------------------------*/ -#include "NoMassTransfer.H" +#include "NoDevolatilisation.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template <class CloudType> -Foam::NoMassTransfer<CloudType>::NoMassTransfer +Foam::NoDevolatilisation<CloudType>::NoDevolatilisation ( - const dictionary& dict, - CloudType& cloud + const dictionary&, + CloudType& owner ) : - MassTransferModel<CloudType>(dict, cloud, typeName) + DevolatilisationModel<CloudType>(owner) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // template <class CloudType> -Foam::NoMassTransfer<CloudType>::~NoMassTransfer() +Foam::NoDevolatilisation<CloudType>::~NoDevolatilisation() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class CloudType> -bool Foam::NoMassTransfer<CloudType>::active() const +bool Foam::NoDevolatilisation<CloudType>::active() const { return false; } template<class CloudType> -Foam::scalar Foam::NoMassTransfer<CloudType>::calculate +Foam::scalar Foam::NoDevolatilisation<CloudType>::calculate ( const scalar, const scalar, const scalar, - const scalarField&, - const scalarField&, + const scalar, + const scalar, const scalar, bool& canCombust ) const diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H similarity index 74% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H index 54f671c1201273be7792d54c8de55e15a15f9c65..687978a0a2a20af61a28e4b94fce803d669ad6f6 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/NoMassTransfer/NoMassTransfer.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/NoDevolatilisation/NoDevolatilisation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,66 +23,61 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::NoMassTransfer + Foam::NoDevolatilisation Description - Dummy mass transfer model for 'no mass transfer' + Dummy devolatilisation model for 'none' \*---------------------------------------------------------------------------*/ -#ifndef NoMassTransfer_H -#define NoMassTransfer_H +#ifndef NoDevolatilisation_H +#define NoDevolatilisation_H -#include "MassTransferModel.H" +#include "DevolatilisationModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ - Class NoMassTransfer Declaration + Class NoDevolatilisation Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> -class NoMassTransfer +class NoDevolatilisation : - public MassTransferModel<CloudType> + public DevolatilisationModel<CloudType> { public: //- Runtime type information - TypeName("NoMassTransfer"); + TypeName("none"); // Constructors //- Construct from dictionary - NoMassTransfer - ( - const dictionary& dict, - CloudType& cloud - ); - + NoDevolatilisation(const dictionary&, CloudType& owner); - // Destructor - ~NoMassTransfer(); + //- Destructor + virtual ~NoDevolatilisation(); // Member Functions - //- Flag to indicate whether model activates mass transfer model - bool active() const; + //- Flag to indicate whether model activates devolatilisation model + virtual bool active() const; //- Update model - scalar calculate + virtual scalar calculate ( const scalar, const scalar, const scalar, - const scalarField&, - const scalarField&, + const scalar, + const scalar, const scalar, bool& ) const; @@ -96,7 +91,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "NoMassTransfer.C" +# include "NoDevolatilisation.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C similarity index 85% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C index 7b92768b25e96dc93e9d91ae6e1e6e7c667d8591..6f95dd54f9482924d3d355771a0ab00172f55c9c 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,13 +29,14 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template <class CloudType> -Foam::SingleKineticRateDevolatilisation<CloudType>::SingleKineticRateDevolatilisation +Foam::SingleKineticRateDevolatilisation<CloudType>:: +SingleKineticRateDevolatilisation ( const dictionary& dict, CloudType& owner ) : - MassTransferModel<CloudType>(dict, owner, typeName), + DevolatilisationModel<CloudType>(dict, owner, typeName), A1_(dimensionedScalar(this->coeffDict().lookup("A1")).value()), E_(dimensionedScalar(this->coeffDict().lookup("E")).value()), volatileResidualCoeff_ @@ -68,14 +69,14 @@ Foam::scalar Foam::SingleKineticRateDevolatilisation<CloudType>::calculate const scalar dt, const scalar mass0, const scalar mass, - const scalarField& YMixture0, - const scalarField& YMixture, const scalar T, + const scalar YVolatile0, + const scalar YVolatile, bool& canCombust ) const { - const scalar massVolatile0 = YMixture0[0]*mass; - const scalar massVolatile = YMixture[0]*mass; + const scalar massVolatile0 = YVolatile0*mass; + const scalar massVolatile = YVolatile*mass; if (massVolatile <= volatileResidualCoeff_*massVolatile0) { @@ -85,7 +86,7 @@ Foam::scalar Foam::SingleKineticRateDevolatilisation<CloudType>::calculate // Kinetic rate const scalar kappa = A1_*exp(-E_/(specie::RR*T)); - // Volatile mass transfer from particle to carrier gas phase + // Volatile devolatilisation from particle to carrier gas phase const scalar dMass = min(dt*kappa*massVolatile, massVolatile); return dMass; diff --git a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H similarity index 87% rename from src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H index 6db27bffce94cd39972be3549826af5b8ba18652..48fec17b833019497d909c42bfebdc0e2e7f5838 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/MassTransferModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ Description #ifndef SingleKineticRateDevolatilisation_H #define SingleKineticRateDevolatilisation_H -#include "MassTransferModel.H" +#include "DevolatilisationModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -46,9 +46,8 @@ namespace Foam template<class CloudType> class SingleKineticRateDevolatilisation : - public MassTransferModel<CloudType> + public DevolatilisationModel<CloudType> { - // Private data // Model constants @@ -81,25 +80,24 @@ public: ); - // Destructor - - ~SingleKineticRateDevolatilisation(); + //- Destructor + virtual ~SingleKineticRateDevolatilisation(); // Member Functions - //- Flag to indicate whether model activates mass transfer model - bool active() const; + //- Flag to indicate whether model activates devolatilisation model + virtual bool active() const; //- Update model - scalar calculate + virtual scalar calculate ( const scalar dt, const scalar mass0, const scalar mass, - const scalarField& YMixture0, - const scalarField& YMixture, const scalar T, + const scalar YVolatile0, + const scalar YVolatile, bool& canCombust ) const; }; diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C similarity index 79% rename from src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C index 3923455a9219d32f099112d19936c705724f5f3b..53eecf01f92c3452f6abd714291d02f765c644bf 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.C @@ -31,11 +31,11 @@ License template <class CloudType> Foam::NoSurfaceReaction<CloudType>::NoSurfaceReaction ( - const dictionary& dict, + const dictionary&, CloudType& owner ) : - SurfaceReactionModel<CloudType>(dict, owner, typeName) + SurfaceReactionModel<CloudType>(owner) {} @@ -56,27 +56,29 @@ bool Foam::NoSurfaceReaction<CloudType>::active() const template<class CloudType> -void Foam::NoSurfaceReaction<CloudType>::calculate +Foam::scalar Foam::NoSurfaceReaction<CloudType>::calculate ( - const scalar dt, - const label celli, - const scalar dp, - const scalar T0, - const scalar T1, - const scalar Tc, - const scalar pc, - const scalar rhoc, - const scalar massp, - const scalarList& dMassMT, - scalarField& YGas, - scalarField& YLiquid, - scalarField& YSolid, - scalarField& YMixture, - scalarList& dMassSR, - scalar& dhRet + const scalar, + const label, + const scalar, + const scalar, + const scalar, + const scalar, + const scalar, + const scalar, + const scalarField&, + const scalarField&, + const scalarField&, + const scalarField&, + const scalarField&, + scalarField&, + scalarField&, + scalarField&, + scalarField& ) const { // do nothing + return 0.0; } diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H similarity index 78% rename from src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H index 18aaeb8179527b05349b0bfa15f0f48fa892d5ce..d3c99ebd5dad8546cda80b8469a8a0bdab536ee3 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/NoSurfaceReaction/NoSurfaceReaction.H @@ -26,7 +26,7 @@ Class Foam::NoSurfaceReaction Description - Dummy Devolatisation model for 'no devolatisation' + Dummy surface reaction model for 'none' \*---------------------------------------------------------------------------*/ @@ -40,7 +40,7 @@ Description namespace Foam { /*---------------------------------------------------------------------------*\ - Class NoSurfaceReaction Declaration + Class NoSurfaceReaction Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -48,11 +48,10 @@ class NoSurfaceReaction : public SurfaceReactionModel<CloudType> { - public: //- Runtime type information - TypeName("NoSurfaceReaction"); + TypeName("none"); // Constructors @@ -65,35 +64,35 @@ public: ); - // Destructor - - ~NoSurfaceReaction(); + //- Destructor + virtual ~NoSurfaceReaction(); // Member Functions //- Flag to indicate whether model activates devolatisation model - bool active() const; + virtual bool active() const; //- Update surface reactions - void calculate + virtual scalar calculate ( const scalar dt, - const label celli, - const scalar dp, - const scalar T0, - const scalar T1, + const label cellI, + const scalar d, + const scalar T, const scalar Tc, const scalar pc, const scalar rhoc, - const scalar massp, - const scalarList& dMassMT, - scalarField& YGas, - scalarField& YLiquid, - scalarField& YSolid, - scalarField& YMixture, - scalarList& dMassSR, - scalar& dhRet + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier ) const; }; diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/NewSurfaceReactionModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/NewSurfaceReactionModel.C similarity index 88% rename from src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/NewSurfaceReactionModel.C rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/NewSurfaceReactionModel.C index 2303e58f21c0e81702bff59ba360f925d533e5bc..348bfa8a8c7dac79636131ac7489b0b27baefd27 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/NewSurfaceReactionModel.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/NewSurfaceReactionModel.C @@ -36,10 +36,7 @@ Foam::SurfaceReactionModel<CloudType>::New CloudType& owner ) { - word SurfaceReactionModelType - ( - dict.lookup("SurfaceReactionModel") - ); + word SurfaceReactionModelType(dict.lookup("SurfaceReactionModel")); Info<< "Selecting SurfaceReactionModel " << SurfaceReactionModelType << endl; @@ -52,12 +49,14 @@ Foam::SurfaceReactionModel<CloudType>::New FatalErrorIn ( "SurfaceReactionModel<CloudType>::New" - "(const dictionary&, CloudType&)" - ) - << "Unknown SurfaceReactionModelType type " + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown SurfaceReactionModelType type " << SurfaceReactionModelType << ", constructor not in hash table" << nl << nl - << " Valid SurfaceReactionModel types are :" << nl + << " Valid SurfaceReactionModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C similarity index 91% rename from src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C index 1173ea1c59d17e30077a49cacf61a6194957a55d..79e953e873263b6259b5f7dd5a22a75e8cf4b988 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.C @@ -28,6 +28,18 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class CloudType> +Foam::SurfaceReactionModel<CloudType>::SurfaceReactionModel +( + CloudType& owner +) +: + dict_(dictionary::null), + owner_(owner), + coeffDict_(dictionary::null) +{} + + template<class CloudType> Foam::SurfaceReactionModel<CloudType>::SurfaceReactionModel ( @@ -35,7 +47,8 @@ Foam::SurfaceReactionModel<CloudType>::SurfaceReactionModel CloudType& owner, const word& type ) -: dict_(dict), +: + dict_(dict), owner_(owner), coeffDict_(dict.subDict(type + "Coeffs")) {} @@ -49,6 +62,7 @@ Foam::SurfaceReactionModel<CloudType>::~SurfaceReactionModel() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + template<class CloudType> const CloudType& Foam::SurfaceReactionModel<CloudType>::owner() const { diff --git a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H similarity index 73% rename from src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H rename to src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H index d89bf0cbf643084170edf3e4d564200721b38b96..f876563fec613eadc020828d1ab89e9cea0bcaf9 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/SurfaceReactionModel/SurfaceReactionModel/SurfaceReactionModel.H @@ -25,7 +25,6 @@ License Class Foam::SurfaceReactionModel - Description Templated surface reaction model class @@ -43,7 +42,6 @@ SourceFiles #include "runTimeSelectionTables.H" #include "scalarField.H" -#include "scalarList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -57,13 +55,12 @@ namespace Foam template<class CloudType> class SurfaceReactionModel { - // Private data //- The cloud dictionary const dictionary& dict_; - // reference to the owner cloud class + //- Reference to the owner cloud class CloudType& owner_; //- The coefficients dictionary @@ -92,6 +89,9 @@ public: // Constructors + //- Construct null from owner + SurfaceReactionModel(CloudType& owner); + //- Construct from dictionary SurfaceReactionModel ( @@ -101,18 +101,16 @@ public: ); - // Destructor - - virtual ~SurfaceReactionModel(); + //- Destructor + virtual ~SurfaceReactionModel(); - // Selector - - static autoPtr<SurfaceReactionModel<CloudType> > New - ( - const dictionary& dict, - CloudType& cloud - ); + //- Selector + static autoPtr<SurfaceReactionModel<CloudType> > New + ( + const dictionary& dict, + CloudType& cloud + ); // Access @@ -129,28 +127,30 @@ public: // Member Functions - //- Flag to indicate whether model activates devolatisation model + //- Flag to indicate whether model activates surface reaction model virtual bool active() const = 0; //- Update surface reactions - virtual void calculate + // Returns the heat of reaction + virtual scalar calculate ( const scalar dt, - const label celli, - const scalar dp, - const scalar T0, - const scalar T1, + const label cellI, + const scalar d, + const scalar T, const scalar Tc, const scalar pc, const scalar rhoc, - const scalar massp, - const scalarList& dMassMT, - scalarField& YGas, - scalarField& YLiquid, - scalarField& YSolid, - scalarField& YMixture, - scalarList& dMassSR, - scalar& dhRet + const scalar mass, + const scalarField& YGas, + const scalarField& YLiquid, + const scalarField& YSolid, + const scalarField& YMixture, + const scalarField& dMassVolatile, + scalarField& dMassGas, + scalarField& dMassLiquid, + scalarField& dMassSolid, + scalarField& dMassSRCarrier ) const = 0; }; @@ -172,22 +172,18 @@ public: ); -#define makeSurfaceReactionModelType(SS, CloudType, ParcelType) \ - \ - defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ - \ - SurfaceReactionModel<CloudType<ParcelType> >:: \ - adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ - add##SS##CloudType##ParcelType##ConstructorToTable_; - - -#define makeSurfaceReactionModelTypeInstance(SS, CloudType, ParcelType) \ +#define makeSurfaceReactionModelThermoType(SS, CloudType, ParcelType, ThermoType)\ \ - defineNamedTemplateTypeNameAndDebug(SS, 0); \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ \ - SurfaceReactionModel<CloudType<ParcelType> >:: \ - adddictionaryConstructorToTable<SS> \ - add##SS##CloudType##ParcelType##ConstructorToTable_; + SurfaceReactionModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C index 64d33f815f0c64d21cb3d369a5011b98c50e3549..37b5276269d3f01e9563f6f4b087c13afc63647a 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.C @@ -28,6 +28,15 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class CloudType> +Foam::HeatTransferModel<CloudType>::HeatTransferModel(CloudType& owner) +: + dict_(dictionary::null), + owner_(owner), + coeffDict_(dictionary::null) +{} + + template<class CloudType> Foam::HeatTransferModel<CloudType>::HeatTransferModel ( @@ -35,7 +44,8 @@ Foam::HeatTransferModel<CloudType>::HeatTransferModel CloudType& owner, const word& type ) -: dict_(dict), +: + dict_(dict), owner_(owner), coeffDict_(dict.subDict(type + "Coeffs")) {} @@ -83,7 +93,7 @@ Foam::scalar Foam::HeatTransferModel<CloudType>::h const scalar muc ) const { - const scalar Re = rhoc*mag(Ur)*dp/(muc + SMALL); + const scalar Re = rhoc*mag(Ur)*dp/(muc + ROOTVSMALL); // const scalar Pr = muc/alphac; const scalar Pr = this->Pr(); @@ -108,7 +118,7 @@ Foam::scalar Foam::HeatTransferModel<CloudType>::Cu const scalar muc ) const { - const scalar Re = rhoc*mag(Ur)*dp/(muc + SMALL); + const scalar Re = rhoc*mag(Ur)*dp/(muc + ROOTVSMALL); // const scalar Pr = muc/alphac; const scalar Pr = this->Pr(); diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H index 1866093986ec5fa758c474aa59b70aaf16a0a45f..baf61f2395e973377c975c5f21b4c8f5c6b313fd 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/HeatTransferModel.H @@ -25,7 +25,6 @@ License Class Foam::HeatTransferModel - Description Templated heat transfer model class @@ -54,7 +53,6 @@ namespace Foam template<class CloudType> class HeatTransferModel { - // Private data //- The cloud dictionary @@ -63,7 +61,7 @@ class HeatTransferModel //- Reference to the owner cloud class CloudType& owner_; - //- The coefficents dictionary + //- The coefficients dictionary const dictionary coeffDict_; @@ -88,6 +86,9 @@ public: // Constructors + //- Construct null from owner + HeatTransferModel(CloudType& owner); + //- Construct from dictionary HeatTransferModel ( @@ -97,18 +98,16 @@ public: ); - // Destructor - - virtual ~HeatTransferModel(); + //- Destructor + virtual ~HeatTransferModel(); - // Selector - - static autoPtr<HeatTransferModel<CloudType> > New - ( - const dictionary& dict, - CloudType& owner - ); + //- Selector + static autoPtr<HeatTransferModel<CloudType> > New + ( + const dictionary& dict, + CloudType& owner + ); // Access @@ -139,7 +138,7 @@ public: virtual scalar Pr() const = 0; //- Return heat transfer coefficient - scalar h + virtual scalar h ( const scalar dp, const vector& Ur, @@ -151,7 +150,7 @@ public: ) const; //- Return linearised coefficient for temperature equation - scalar Cu + virtual scalar Cu ( const scalar dp, const vector& Ur, @@ -190,6 +189,20 @@ public: add##SS##CloudType##ParcelType##ConstructorToTable_; +#define makeHeatTransferModelThermoType(SS, CloudType, ParcelType, ThermoType)\ + \ + defineNamedTemplateTypeNameAndDebug \ + ( \ + SS<CloudType<ParcelType<ThermoType> > >, \ + 0 \ + ); \ + \ + HeatTransferModel<CloudType<ParcelType<ThermoType> > >:: \ + adddictionaryConstructorToTable \ + <SS<CloudType<ParcelType<ThermoType> > > > \ + add##SS##CloudType##ParcelType##ThermoType##ConstructorToTable_; + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/NewHeatTransferModel.C b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/NewHeatTransferModel.C index fb0362bbc3ae584bd27e0fa4f4d6a9d40af0044c..d5d4748c4db4727e12eb5164a8bd2285c124599c 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/NewHeatTransferModel.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/HeatTransferModel/NewHeatTransferModel.C @@ -36,10 +36,7 @@ Foam::HeatTransferModel<CloudType>::New CloudType& owner ) { - word HeatTransferModelType - ( - dict.lookup("HeatTransferModel") - ); + word HeatTransferModelType(dict.lookup("HeatTransferModel")); Info<< "Selecting HeatTransferModel " << HeatTransferModelType << endl; @@ -51,12 +48,14 @@ Foam::HeatTransferModel<CloudType>::New FatalErrorIn ( "HeatTransferModel<CloudType>::New" - "(const dictionary&, CloudType&)" - ) - << "Unknown HeatTransferModelType type " + "(" + "const dictionary&, " + "CloudType&" + ")" + ) << "Unknown HeatTransferModelType type " << HeatTransferModelType << ", constructor not in hash table" << nl << nl - << " Valid HeatTransferModel types are :" << nl + << " Valid HeatTransferModel types are:" << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C index ab80ae9895f3109e6d769fdcbd39dfdf88c9ebbb..c50dd4d511f29a3ba4ff25980140e949e57d96a6 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.C @@ -31,11 +31,11 @@ License template <class CloudType> Foam::NoHeatTransfer<CloudType>::NoHeatTransfer ( - const dictionary& dict, - CloudType& cloud + const dictionary&, + CloudType& owner ) : - HeatTransferModel<CloudType>(dict, cloud, typeName) + HeatTransferModel<CloudType>(owner) {} diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.H b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.H index 641605465ebde9ec14937007d7ce161f91f53843..2941b4c2b7b9f6eb08515dff5e39c669fcc333a7 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.H +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/NoHeatTransfer/NoHeatTransfer.H @@ -26,7 +26,7 @@ Class Foam::NoHeatTransfer Description - Dummy heat transfer model for 'no heat transfer' + Dummy heat transfer model for 'none' \*---------------------------------------------------------------------------*/ @@ -40,7 +40,7 @@ Description namespace Foam { /*---------------------------------------------------------------------------*\ - Class NoHeatTransfer Declaration + Class NoHeatTransfer Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -48,42 +48,36 @@ class NoHeatTransfer : public HeatTransferModel<CloudType> { - public: //- Runtime type information - TypeName("NoHeatTransfer"); + TypeName("none"); // Constructors //- Construct from dictionary - NoHeatTransfer - ( - const dictionary& dict, - CloudType& cloud - ); - + NoHeatTransfer(const dictionary&, CloudType& owner); - // Destructor - ~NoHeatTransfer(); + //- Destructor + virtual ~NoHeatTransfer(); // Member Functions //- Flag to indicate whether model activates heat transfer model - bool active() const; + virtual bool active() const; //- Nusselt number - scalar Nu + virtual scalar Nu ( const scalar, const scalar ) const; //- Prandtl number - scalar Pr() const; + virtual scalar Pr() const; }; diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.C b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.C index 3cfe1f712c78f92c238bf23aee85ffa3fe6440fe..8e9b6e9379e1dacf996c00baed606fcf1f092bc2 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.C @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -#include "error.H" - #include "RanzMarshall.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -65,7 +63,7 @@ Foam::scalar Foam::RanzMarshall<CloudType>::Nu const scalar Pr ) const { - return 2.0 + 0.6*pow(Re, 1.0/2.0)*pow(Pr, 1.0/3.0); + return 2.0 + 0.6*pow(Re, 0.5)*pow(Pr, 0.333); } diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.H b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.H index 09a3abb4f65220f5fbf4b2d934095243ba54be71..f010160c1feb51aef1ec100b5fd4ae04692dc95c 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.H +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/HeatTransferModel/RanzMarshall/RanzMarshall.H @@ -48,7 +48,6 @@ class RanzMarshall : public HeatTransferModel<CloudType> { - // Private data // Prandtl number @@ -71,25 +70,24 @@ public: ); - // Destructor - - ~RanzMarshall(); + //- Destructor + virtual ~RanzMarshall(); // Member Functions //- Flag to indicate whether model activates heat transfer model - bool active() const; + virtual bool active() const; //- Nusselt number - scalar Nu + virtual scalar Nu ( const scalar Re, const scalar Pr ) const; //- Prandtl number - scalar Pr() const; + virtual scalar Pr() const; }; diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C new file mode 100644 index 0000000000000000000000000000000000000000..ad7e13b6d20417d9364345d3da04628588241777 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.C @@ -0,0 +1,250 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "ThermoLookupTableInjection.H" +#include "scalarIOList.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::ThermoLookupTableInjection<CloudType>::INPUT_FILE_COLS = 11; + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class CloudType> +Foam::label Foam::ThermoLookupTableInjection<CloudType>::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if ((time0 >= 0.0) && (time0 < duration_)) + { + return round(injectorCells_.size()*(time1 - time0)*nParcelsPerSecond_); + } + else + { + return 0; + } +} + + +template<class CloudType> +Foam::scalar Foam::ThermoLookupTableInjection<CloudType>::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + scalar volume = 0.0; + if ((time0 >= 0.0) && (time0 < duration_)) + { + forAll(mDot_, injectorI) + { + volume += mDot_[injectorI]/rho_[injectorI]*(time1 - time0); + } + } + + return volume; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ThermoLookupTableInjection<CloudType>::ThermoLookupTableInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel<CloudType>(dict, owner, typeName), + inputFileName_(this->coeffDict().lookup("inputFile")), + duration_(readScalar(this->coeffDict().lookup("duration"))), + nParcelsPerSecond_ + ( + readScalar(this->coeffDict().lookup("parcelsPerSecond")) + ), + x_(0), + U_(0), + d_(0), + rho_(0), + mDot_(0), + T_(0), + cp_(0), + injectorCells_(0) +{ + scalarListIOList injectorData + ( + IOobject + ( + inputFileName_, + owner.db().time().constant(), + owner.db(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + x_.setSize(injectorData.size()); + U_.setSize(injectorData.size()); + d_.setSize(injectorData.size()); + rho_.setSize(injectorData.size()); + mDot_.setSize(injectorData.size()); + T_.setSize(injectorData.size()); + cp_.setSize(injectorData.size()); + + // Populate lists + forAll(injectorData, injectorI) + { + if (injectorData[injectorI].size() != INPUT_FILE_COLS) + { + FatalErrorIn + ( + "ThermoLookupTableInjection" + "(" + "const dictionary&," + "CloudType& owner" + ")" + ) << "Incorrect number of entries in injector specification " + << "- found " << injectorData[injectorI].size() + << ", expected " << INPUT_FILE_COLS << ":" << nl + << " x0 x1 x2 u0 u1 u2 d rho mDot T cp" + << nl << exit(FatalError); + } + x_[injectorI].component(0) = injectorData[injectorI][0]; + x_[injectorI].component(1) = injectorData[injectorI][1]; + x_[injectorI].component(2) = injectorData[injectorI][2]; + U_[injectorI].component(0) = injectorData[injectorI][3]; + U_[injectorI].component(1) = injectorData[injectorI][4]; + U_[injectorI].component(2) = injectorData[injectorI][5]; + d_[injectorI] = injectorData[injectorI][6]; + rho_[injectorI] = injectorData[injectorI][7]; + mDot_[injectorI] = injectorData[injectorI][8]; + T_[injectorI] = injectorData[injectorI][9]; + cp_[injectorI] = injectorData[injectorI][10]; + } + + // Set/cache the injector cells + injectorCells_.setSize(injectorData.size()); + forAll(x_, injectorI) + { + this->findCellAtPosition(injectorCells_[injectorI], x_[injectorI]); + } + + // Determine volume of particles to inject + this->volumeTotal_ = 0.0; + forAll(mDot_, injectorI) + { + this->volumeTotal_ += mDot_[injectorI]/rho_[injectorI]; + } + this->volumeTotal_ *= duration_; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ThermoLookupTableInjection<CloudType>::~ThermoLookupTableInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +bool Foam::ThermoLookupTableInjection<CloudType>::active() const +{ + return true; +} + + +template<class CloudType> +Foam::scalar Foam::ThermoLookupTableInjection<CloudType>::timeEnd() const +{ + return this->SOI_ + duration_; +} + + +template<class CloudType> +void Foam::ThermoLookupTableInjection<CloudType>::setPositionAndCell +( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + position = x_[injectorI]; + cellOwner = injectorCells_[injectorI]; +} + + +template<class CloudType> +void Foam::ThermoLookupTableInjection<CloudType>::setProperties +( + const label parcelI, + const label nParcels, + const scalar, + typename CloudType::parcelType* pPtr +) +{ + label injectorI = parcelI*injectorCells_.size()/nParcels; + + // set particle velocity + parcel.U() = U_[injectorI]; + + // set particle diameter + parcel.d() = d_[injectorI]; + + // set particle density + parcel.rho() = rho_[injectorI]; + + // set particle temperature + parcel.T() = T_[injectorI]; + + // set particle specific heat capacity + parcel.cp() = cp_[injectorI]; +} + + +template<class CloudType> +bool Foam::ThermoLookupTableInjection<CloudType>::fullyDescribed() const +{ + return true; +} + + +template<class CloudType> +bool Foam::ThermoLookupTableInjection<CloudType>::validInjection(const label) +{ + return true; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H new file mode 100644 index 0000000000000000000000000000000000000000..5c53b0337e2dbfa885cd175846cfd2fb364bcff5 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/InjectionModel/ThermoLookupTableInjection/ThermoLookupTableInjection.H @@ -0,0 +1,204 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::ThermoLookupTableInjection + +Description + Particle injection sources read from look-up table. Each row corresponds to + an injection site. + + ( + (x y z u v w d rho mDot T cp) + ); + + where: + x, y, z = global cartesian co-ordinates [m] + u, v, w = global cartesian velocity components [m/s] + d = diameter [m] + rho = density [kg/m3] + mDot = mass flow rate [kg/m3] + T = temperature [K] + cp = specific heat capacity [J/kg/K] + +SourceFiles + ThermoLookupTableInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ThermoLookupTableInjection_H +#define ThermoLookupTableInjection_H + +#include "InjectionModel.H" +#include "pdf.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class ThermoLookupTableInjection Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class ThermoLookupTableInjection +: + public InjectionModel<CloudType> +{ + // Private data + + //- Name of file containing injector/parcel data + const word inputFileName_; + + //- Injection duration - common to all injection sources + const scalar duration_; + + //- Number of parcels per injector - common to all injection sources + const label nParcelsPerSecond_; + + //- List of parcel position per injector / [m] + List<point> x_; + + //- List of parcel velocity per injector / [m] + List<vector> U_; + + //- List of parcel diameter per injector / [m] + List<scalar> d_; + + //- List of parcel fluid density pre injector / [kg/m3] + List<scalar> rho_; + + //- List of parcel injection mass flow per injector / [kg/s] + List<scalar> mDot_; + + //- List of parcel temperature flow per injector / [K] + List<scalar> T_; + + //- List of parcel specific heat capacity per injector / [J/kg/K] + List<scalar> cp_; + + //- List of injector cells per injector + List<label> injectorCells_; + + //- Number of columns expected in input file + static label INPUT_FILE_COLS; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step relative to SOI + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Volume of parcels to introduce over the time step relative to SOI + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("ThermoLookupTableInjection"); + + + // Constructors + + //- Construct from dictionary + ThermoLookupTableInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + //- Destructor + virtual ~ThermoLookupTableInjection(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + virtual void setPositionAndCell + ( + const label parcelI, + const label nParcels, + const scalar time, + vector& position, + label& cellOwner + ); + + //- Set the parcel properties + virtual void setProperties + ( + const label parcelI, + const label nParcels, + const scalar time, + typename CloudType::parcelType& parcel + ); + + //- Flag to identify whether model fully describes the parcel + virtual bool fullyDescribed() const + { + return true; + } + + //- Return flag to identify whether or not injection of parcelI is + // permitted + virtual bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "ThermoLookupTableInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C index de19513e4a91a97816bf4515bfd8207e36a0dae4..fae1d15e6b2aadaad63af8cc36531a29314ee21a 100644 --- a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C +++ b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.C @@ -72,7 +72,7 @@ Foam::radiation::cloudAbsorptionEmission::~cloudAbsorptionEmission() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // Foam::tmp<Foam::volScalarField> -Foam::radiation::cloudAbsorptionEmission::aDisp() const +Foam::radiation::cloudAbsorptionEmission::aDisp(const label) const { tmp<volScalarField> ta ( @@ -107,7 +107,7 @@ Foam::radiation::cloudAbsorptionEmission::aDisp() const Foam::tmp<Foam::volScalarField> -Foam::radiation::cloudAbsorptionEmission::eDisp() const +Foam::radiation::cloudAbsorptionEmission::eDisp(const label bandI) const { tmp<volScalarField> te ( @@ -132,7 +132,7 @@ Foam::radiation::cloudAbsorptionEmission::eDisp() const Foam::tmp<Foam::volScalarField> -Foam::radiation::cloudAbsorptionEmission::EDisp() const +Foam::radiation::cloudAbsorptionEmission::EDisp(const label bandI) const { tmp<volScalarField> tE ( diff --git a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H index eeb8ce7cb23564901c47e5df5abb7b4e30922d09..a737764e88ce9add4f113e6c324ddd1bd9f8f266 100644 --- a/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H +++ b/src/lagrangian/intermediate/submodels/addOns/radiation/absorptionEmission/cloudAbsorptionEmission/cloudAbsorptionEmission.H @@ -53,7 +53,6 @@ class cloudAbsorptionEmission : public absorptionEmissionModel { - // Private data //- Coefficients dictionary @@ -72,16 +71,11 @@ public: // Constructors //- Construct from components - cloudAbsorptionEmission - ( - const dictionary& dict, - const fvMesh& mesh - ); + cloudAbsorptionEmission(const dictionary& dict, const fvMesh& mesh); // Destructor - - ~cloudAbsorptionEmission(); + virtual ~cloudAbsorptionEmission(); // Member Operators @@ -91,19 +85,19 @@ public: // Absorption coefficient //- Absorption coefficient for dispersed phase - tmp<volScalarField> aDisp() const; + virtual tmp<volScalarField> aDisp(const label bandI = 0) const; // Emission coefficient //- Emission coefficient for dispersed phase - tmp<volScalarField> eDisp() const; + virtual tmp<volScalarField> eDisp(const label bandI = 0) const; // Emission contribution //- Return emission contribution for dispersed phase - tmp<volScalarField> EDisp() const; + virtual tmp<volScalarField> EDisp(const label bandI = 0) const; }; diff --git a/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H b/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H index 288edd839116a8e4ac8f6cf1bb332caf0656d8ab..2d36e281f4756692ed43914b9071ff9aed9ca6a9 100644 --- a/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H +++ b/src/lagrangian/intermediate/submodels/addOns/radiation/scatter/cloudScatter/cloudScatter.H @@ -46,16 +46,13 @@ namespace radiation { /*---------------------------------------------------------------------------*\ - Class cloudScatter Declaration + Class cloudScatter Declaration \*---------------------------------------------------------------------------*/ class cloudScatter : public scatterModel { - -private: - // Private data //- Absorption model dictionary @@ -82,14 +79,11 @@ public: // Destructor - - ~cloudScatter(); + virtual ~cloudScatter(); // Member Operators - // Edit - // Access //- Return scatter coefficient diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C index 18d46cb90a7fc2b5ee9a1f67422df61d9e7e1c41..de7d31fcb5291c99895422b2b75fe76be6439db7 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -126,6 +126,7 @@ void Foam::bufferedAccumulator<Type>::setSizes } } + template<class Type> Foam::label Foam::bufferedAccumulator<Type>::addToBuffers ( @@ -184,11 +185,10 @@ Foam::Field<Type> Foam::bufferedAccumulator<Type>::averaged() const WarningIn ( "bufferedAccumulator<Type>::averagedbufferedAccumulator() const" - ) - << "Averaged correlation function requested but averagesTaken = " - << averagesTaken_ - << ". Returning empty field." - << endl; + ) << "Averaged correlation function requested but averagesTaken = " + << averagesTaken_ + << ". Returning empty field." + << endl; return Field<Type>(bufferLength(), pTraits<Type>::zero); } @@ -218,8 +218,7 @@ void Foam::bufferedAccumulator<Type>::operator= FatalErrorIn ( "bufferedAccumulator<Type>::operator=(const bufferedAccumulator&)" - ) - << "Attempted assignment to self" + ) << "Attempted assignment to self" << abort(FatalError); } diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H index 53b8f9371dd64468a985ff1d25f0fa3bb8d93159..ed8afa2115883a602a094c2fe13aa07345a7ea72 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H index 96531509c8e0d2ea371b09409cdbe4866890a0ca..28bcde97a990a81bddd15374513182f1773eea60 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C index 8e5d7c9d729d0f2d6c1a273143c80cceb3083333..ec1956a345dba0d1454ebec2a1e73da58e92a2db 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,9 +34,9 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const bufferedAccumulator<Type>& bA) { - os<< bA.averagesTaken_ - << static_cast<const List< Field<Type> >&>(bA) - << bA.bufferOffsets(); + os << bA.averagesTaken_ + << static_cast<const List< Field<Type> >&>(bA) + << bA.bufferOffsets(); // Check state of Ostream os.check diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C index eca654aa2dd4302c0e25ffdae2ffd40e3416f7df..cce0d86a22c0d6f9000d2f3b6f2d9a35e48b10bc 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -138,7 +138,7 @@ void Foam::correlationFunction<Type>::calculateCorrelationFunction FatalErrorIn("correlationFunction<Type>::calculateCorrelationFunction") << "Trying to supply a Field of length" << currentValues.size() - <<" to calculate the correlation function. " + << " to calculate the correlation function. " << "Expecting a Field of length " << measurandFieldSize() << nl << abort(FatalError); @@ -205,7 +205,7 @@ Foam::scalar Foam::correlationFunction<Type>::integral() const scalar cFIntegral = 0.0; - for(label v = 0; v < averageCF.size() - 1; v++) + for (label v = 0; v < averageCF.size() - 1; v++) { cFIntegral += 0.5 diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H index 2b8753676c5a67253808bdcad17c2d291e5ffe0a..fe2071aff372af8f680c640fd4559afb74dcba3b 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -155,7 +155,10 @@ public: // IOstream Operators friend Ostream& operator<< <Type> - (Ostream&, const correlationFunction<Type>&); + ( + Ostream&, + const correlationFunction<Type>& + ); }; diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H index d07d54eca0ac442309a989a15941c76bb48a836b..adbf70505994612da152d42fd4b95ae273507c2b 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C index 7dcbcc1eda11ad23905087e6f196b29fd45d016a..aa62cdcaf6e0797077492306873cf8db4aea0679 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,10 +34,10 @@ bool Foam::correlationFunction<Type>::writeAveraged(Ostream& os) const forAll(averageCF, v) { - os<< v*sampleInterval() - << token::SPACE - << averageCF[v] - << nl; + os << v*sampleInterval() + << token::SPACE + << averageCF[v] + << nl; } return os.good(); @@ -51,12 +51,12 @@ Foam::Ostream& Foam::operator<< const correlationFunction<Type>& cF ) { - os<< cF.duration() - << nl << cF.sampleInterval() - << nl << cF.averagingInterval() - << nl << cF.sampleSteps() - << nl << cF.tZeroBuffers() - << nl << static_cast<const bufferedAccumulator<scalar>&>(cF); + os << cF.duration() + << nl << cF.sampleInterval() + << nl << cF.averagingInterval() + << nl << cF.sampleSteps() + << nl << cF.tZeroBuffers() + << nl << static_cast<const bufferedAccumulator<scalar>&>(cF); // Check state of Ostream os.check diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C index a4a08b08fa6efd78597d0be45985c227f4d094ad..439ed64bdf06229f8b13fd6424a9336f14f43187 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -75,7 +75,7 @@ label distribution::totalEntries() const << "sumOfEntries = " << sumOfEntries << ". This is most likely to be because too many samples " << "have been added to the bins and the label has 'rolled " - << "round'. Try distribution::approxTotalEntries which " + << "round'. Try distribution::approxTotalEntries which " << "returns a scalar." << endl; sumOfEntries = -1; @@ -336,8 +336,8 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) *(oldDist[u].second() - oldDist[u-1].second()) + ( - oldDist[u-1].second() * oldDist[u].first() - - oldDist[u].second() * oldDist[u-1].first() + oldDist[u-1].second()*oldDist[u].first() + - oldDist[u].second()*oldDist[u-1].first() ) /binWidth_; } @@ -348,7 +348,7 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) { newDist[u].second() = (0.5 + scalar(newKey))*-oldDist[u].second() - + oldDist[u].second() * (oldDist[u].first() + binWidth_) + + oldDist[u].second()*(oldDist[u].first() + binWidth_) /binWidth_; } else @@ -358,8 +358,8 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) *(oldDist[u+1].second() - oldDist[u].second()) + ( - oldDist[u].second() * oldDist[u+1].first() - - oldDist[u+1].second() * oldDist[u].first() + oldDist[u].second()*oldDist[u+1].first() + - oldDist[u+1].second()*oldDist[u].first() ) /binWidth_; } @@ -395,7 +395,7 @@ List<Pair<scalar> > distribution::raw() { label key = keys[k]; - rawDist[k].first() = (0.5 + scalar(key)) * binWidth_; + rawDist[k].first() = (0.5 + scalar(key))*binWidth_; rawDist[k].second() = scalar((*this)[key]); } diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H index 597d2eedb087aa8af9427a1cfa659e1f8820bf6e..da1ce973bc7d3fa9dceabbcf4dd2e5f2b39a1b87 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,7 +30,6 @@ Description SourceFiles distributionI.H distribution.C - distributionIO.C \*---------------------------------------------------------------------------*/ @@ -46,7 +45,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class distribution Declaration + Class distribution Declaration \*---------------------------------------------------------------------------*/ class distribution diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H index 988d76de31c8e38ca0a41f91d94c331d052f0111..4bc3596a50957e656072444188f5c02267d37c12 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/Make/files b/src/lagrangian/molecularDynamics/molecule/Make/files old mode 100755 new mode 100644 diff --git a/src/lagrangian/molecularDynamics/molecule/Make/options b/src/lagrangian/molecularDynamics/molecule/Make/options old mode 100755 new mode 100644 diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C index ba3a3d90669ec95b43e98e780b7f7bb0c1324f79..1556db83178b50ca625860d22292e4de7612069a 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -79,8 +79,12 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellI], - cellJ) == -1 + findIndex + ( + directInteractionList[cellI], + cellJ + ) + == -1 ) { directInteractionList[cellI].append(cellJ); @@ -91,8 +95,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellJ], - cellI) == -1 + findIndex + ( + directInteractionList[cellJ], + cellI + ) + == + -1 ) { directInteractionList[cellJ].append(cellI); @@ -109,18 +118,16 @@ void Foam::directInteractionList::buildDirectInteractionList Info<< tab << "Point-Face, Edge-Edge direct interaction list build." << endl; - forAll (mesh.points(), p) + forAll(mesh.points(), p) { forAll(mesh.faces(), f) { - if(il_.testPointFaceDistance(p, f)) + if (il_.testPointFaceDistance(p, f)) { const labelList& pCells(mesh.pointCells()[p]); const label cellO(mesh.faceOwner()[f]); - const label cellN(mesh.faceNeighbour()[f]); - forAll(pCells, pC) { const label cellI(pCells[pC]); @@ -131,8 +138,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellI], - cellO) == -1 + findIndex + ( + directInteractionList[cellI], + cellO + ) + == + -1 ) { directInteractionList[cellI].append(cellO); @@ -143,8 +155,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellO], - cellI) == -1 + findIndex + ( + directInteractionList[cellO], + cellI + ) + == + -1 ) { directInteractionList[cellO].append(cellI); @@ -156,12 +173,19 @@ void Foam::directInteractionList::buildDirectInteractionList // boundary faces will not have neighbour // information + const label cellN(mesh.faceNeighbour()[f]); + if (cellN > cellI) { if ( - findIndex(directInteractionList[cellI], - cellN) == -1 + findIndex + ( + directInteractionList[cellI], + cellN + ) + == + -1 ) { directInteractionList[cellI].append(cellN); @@ -172,8 +196,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellN], - cellI) == -1 + findIndex + ( + directInteractionList[cellN], + cellI + ) + == + -1 ) { directInteractionList[cellN].append(cellI); @@ -187,7 +216,7 @@ void Foam::directInteractionList::buildDirectInteractionList label edgeJIndex; - forAll (mesh.edges(), edgeIIndex) + forAll(mesh.edges(), edgeIIndex) { const edge& eI(mesh.edges()[edgeIIndex]); @@ -218,8 +247,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellI], - cellJ) == -1 + findIndex + ( + directInteractionList[cellI], + cellJ + ) + == + -1 ) { directInteractionList[cellI].append(cellJ); @@ -230,8 +264,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellJ], - cellI) == -1 + findIndex + ( + directInteractionList[cellJ], + cellI + ) + == + -1 ) { directInteractionList[cellJ].append(cellI); @@ -272,11 +311,11 @@ Foam::directInteractionList::directInteractionList labelListList(il.mesh().nCells()), il_(il) { - if((*this).size() > 1) + if ((*this).size() > 1) { buildDirectInteractionList(pointPointListBuild); } - else if((*this).size() == 1) + else if ((*this).size() == 1) { Info<< nl << "Single cell mesh, no direct interaction lists required." @@ -305,16 +344,4 @@ Foam::directInteractionList::~directInteractionList() {} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H index 3777b0b098e7552bf8d78724a4e205e0c098d4cd..8a85404ca04d3c962da39ff74237be3742090092 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -59,6 +59,7 @@ class directInteractionList const interactionLists& il_; + // Private Member Functions void buildDirectInteractionList @@ -72,6 +73,7 @@ class directInteractionList //- Disallow default bitwise assignment void operator=(const directInteractionList&); + public: // Constructors @@ -89,6 +91,7 @@ public: const interactionLists& il ); + // Destructor ~directInteractionList(); @@ -100,12 +103,6 @@ public: inline const interactionLists& il() const; - // Check - - // Edit - - // Write - // IOstream Operators diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H index 7c1ded995b372b0fb911ee6d75c22666c43bc657..34c1d65080664619ce92f4df416337ffee87c774 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline const Foam::interactionLists& Foam::directInteractionList::il() const @@ -34,7 +32,4 @@ inline const Foam::interactionLists& Foam::directInteractionList::il() const } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C index 411d6dbfba2c3f8a0cbb30a6bbdbd72825a6ea3d..f1036eaa0e937bd2121f80187ef61199cd3d75e4 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -342,6 +342,7 @@ bool Foam::interactionLists::testPointFaceDistance ); } + bool Foam::interactionLists::testPointFaceDistance ( const vector& p, diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H index a8d28133eb7fd3d516878407a28843b79558db20..744b59b067a17867b1cd4906281183f9c30d6f6a 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,7 +52,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class interactionLists Declaration + Class interactionLists Declaration \*---------------------------------------------------------------------------*/ class interactionLists @@ -71,6 +71,7 @@ class interactionLists List<receivingReferralList> cellReceivingReferralLists_; + // Private Member Functions //- Build referralLists which define how to send information @@ -83,6 +84,7 @@ class interactionLists //- Disallow default bitwise assignment void operator=(const interactionLists&); + public: // Static data members @@ -90,6 +92,7 @@ public: //- Tolerance for checking that faces on a patch segment static scalar transTol; + // Constructors //- Construct and create all information from the mesh @@ -103,6 +106,7 @@ public: //- Construct from file interactionLists(const polyMesh& mesh); + // Destructor ~interactionLists(); @@ -177,6 +181,7 @@ public: const labelList& segmentPoints ) const; + // Access inline const polyMesh& mesh() const; diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H index 6749e05be018287c98f4385ab4bd05a5bf195f00..7c5c4ec1227cb102a33473e80dacca1c265c76dd 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C index db0831eaee88874b252d43d33b984394d284d712..2f646fcba5f50ccc11ada22d43874e35f69674e4 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -143,7 +143,7 @@ bool operator== Foam::Istream& Foam::operator>>(Istream& is, receivingReferralList& rRL) { - is >> rRL.sourceProc_ >> static_cast<labelListList&>(rRL); + is >> rRL.sourceProc_ >> static_cast<labelListList&>(rRL); is.check ( @@ -160,7 +160,7 @@ Foam::Ostream& Foam::operator<< const receivingReferralList& rRL ) { - os << rRL.sourceProc() << token::SPACE + os << rRL.sourceProc() << token::SPACE << static_cast< const labelListList& >(rRL); os.check @@ -171,7 +171,5 @@ Foam::Ostream& Foam::operator<< return os; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H index b7ec5a26fac197a1a140a13feea420ad2c0e0065..91ebe8eb32c9ff2fa0781c6e29739d95bf0ffe54 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H index 48b11405b4d5013ffd9e8cdf9617dfe45aa5e405..084863b01a0ee09739adcff006d103eedae04306 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::label Foam::receivingReferralList::sourceProc() const @@ -46,7 +44,4 @@ inline bool operator!= } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C index bb0b3b1e529dba4a01554d02009c0673bd738cb4..6235ddabfad51cd0d2c79c59e691926ef1cdd6c0 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -145,7 +145,7 @@ Foam::Istream& Foam::operator>> sendingReferralList& sRL ) { - is >> sRL.destinationProc_ >> static_cast<labelList&>(sRL); + is >> sRL.destinationProc_ >> static_cast<labelList&>(sRL); is.check("Istream& operator<<(Istream& f, const sendingReferralList& sRL"); @@ -159,7 +159,7 @@ Foam::Ostream& Foam::operator<< const sendingReferralList& rL ) { - os << rL.destinationProc() << token::SPACE + os << rL.destinationProc() << token::SPACE << static_cast< const labelList& >(rL); os.check("Ostream& operator<<(Ostream& f, const sendingReferralList& rL"); @@ -168,6 +168,4 @@ Foam::Ostream& Foam::operator<< } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H index 30afadebee5fb469aa4c62100a2bb04b7930450e..b7b9bf082cc971abc4c66e82687633a1684f22ad 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H index 51c569cfd20ca906ce2ecb12a4369eaf3c6bfac5..d34ffd3595413511dfaabdb643ae0991db287a64 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::label Foam::sendingReferralList::destinationProc() const @@ -46,6 +44,4 @@ inline bool operator!= } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C index 194caa11e2c5066838cf1fb3ba1033c493a3baec..225ad5902a01ca024526ef4e8b43326f90e4f677 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,7 +38,7 @@ void referredCell::setConstructionData const label sourceCell ) { - // * * * * * * * * * * * Points * * * * * * * * * * * + // Points const labelList& points = mesh.cellPoints()[sourceCell]; @@ -51,7 +51,8 @@ void referredCell::setConstructionData vertexPositions_ = referPositions(sourceCellVertices); - // * * * * * * * * * * * Edges * * * * * * * * * * * + + // Edges const labelList& edges = mesh.cellEdges()[sourceCell]; @@ -64,7 +65,8 @@ void referredCell::setConstructionData locallyMapEdgeList(points, sourceCellEdges); - // * * * * * * * * * * * Faces * * * * * * * * * * * + + // Faces labelList faces(mesh.cells()[sourceCell]); @@ -383,8 +385,8 @@ bool referredCell::duplicate(const referredCell& refCellDupl) const return ( sourceProc_ == refCellDupl.sourceProc() - && sourceCell_ == refCellDupl.sourceCell() - && mag(offset_ - refCellDupl.offset()) < interactionLists::transTol + && sourceCell_ == refCellDupl.sourceCell() + && mag(offset_ - refCellDupl.offset()) < interactionLists::transTol ); } @@ -394,8 +396,8 @@ bool referredCell::duplicate(const label procNo,const label nCells) const return ( sourceProc_ == procNo - && sourceCell_ < nCells - && mag(offset_) < interactionLists::transTol + && sourceCell_ < nCells + && mag(offset_) < interactionLists::transTol ); } @@ -405,7 +407,7 @@ bool referredCell::duplicate(const label procNo,const label nCells) const Istream& operator>>(Istream& is, referredCell& rC) { - is >> rC.sourceProc_ + is >> rC.sourceProc_ >> rC.sourceCell_ >> rC.vertexPositions_ >> rC.edges_ @@ -424,7 +426,7 @@ Istream& operator>>(Istream& is, referredCell& rC) Ostream& operator<<(Ostream& os, const referredCell& rC) { - os << rC.sourceProc() + os << rC.sourceProc() << token::SPACE << rC.sourceCell() << token::SPACE << rC.vertexPositions() << token::SPACE << rC.edges() diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H index 789c9e4d4143ceca47ccd82cf31c51ff33433623..666b4f9268297675083c85fb810e85723951d14f 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,7 +53,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class referredCell Declaration + Class referredCell Declaration \*---------------------------------------------------------------------------*/ class referredCell diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H index a7427c141da9f57cd6febff42d33b6acc4bce4ba..bd3954e83cd678b91428e7dabd33ecfa100f4b7d 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C index fbc5c1740be6b14d7b1d8fd475f2c3a53d2011d6..2ba95daa18e09e821868d574cebe524b087c94cc 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -357,7 +357,7 @@ void Foam::referredCellList::buildReferredCellList label iterationNo = 0; - while(cellsReferredThisIteration) + while (cellsReferredThisIteration) { label refIntListStartSize = referredInteractionList.size(); @@ -499,7 +499,10 @@ void Foam::referredCellList::buildReferredCellList ( meshPointsOnThisSegment, facePoint - ) == -1) + ) + == + -1 + ) { meshPointsOnThisSegment.append(facePoint); } @@ -610,18 +613,20 @@ void Foam::referredCellList::buildReferredCellList forAll(referredCellsFoundInRange,cFIR) { - referredCell& existingRefCell = referredInteractionList - [ - referredCellsFoundInRange[cFIR] - ]; + referredCell& existingRefCell = + referredInteractionList + [ + referredCellsFoundInRange[cFIR] + ]; - referredCell cellToReRefer = existingRefCell.reRefer - ( - patch.faceCentres()[0], - patch.faceCentres()[patch.size()/2], - patch.faceNormals()[0], - patch.faceNormals()[patch.size()/2] - ); + referredCell cellToReRefer = + existingRefCell.reRefer + ( + patch.faceCentres()[0], + patch.faceCentres()[patch.size()/2], + patch.faceNormals()[0], + patch.faceNormals()[patch.size()/2] + ); // Test all existing referred and real cells to check // duplicates are not being made or cells aren't being @@ -705,7 +710,9 @@ void Foam::referredCellList::buildReferredCellList ( meshEdgesOnThisSegment, faceEdge - ) == -1 + ) + == + -1 ) { meshEdgesOnThisSegment.append(faceEdge); @@ -724,7 +731,10 @@ void Foam::referredCellList::buildReferredCellList ( meshPointsOnThisSegment, facePoint - ) == -1) + ) + == + -1 + ) { meshPointsOnThisSegment.append(facePoint); } @@ -823,28 +833,30 @@ void Foam::referredCellList::buildReferredCellList referredInteractionList.shrink(); referredCellsFoundInRange = - il_.referredCellsInRangeOfSegment - ( - referredInteractionList, - meshFacesOnThisSegment, - meshEdgesOnThisSegment, - meshPointsOnThisSegment - ); + il_.referredCellsInRangeOfSegment + ( + referredInteractionList, + meshFacesOnThisSegment, + meshEdgesOnThisSegment, + meshPointsOnThisSegment + ); forAll(referredCellsFoundInRange,cFIR) { - referredCell& existingRefCell = referredInteractionList - [ - referredCellsFoundInRange[cFIR] - ]; + referredCell& existingRefCell = + referredInteractionList + [ + referredCellsFoundInRange[cFIR] + ]; - referredCell cellToReRefer = existingRefCell.reRefer - ( - patch.faceCentres()[patch.size()/2], - patch.faceCentres()[0], - patch.faceNormals()[patch.size()/2], - patch.faceNormals()[0] - ); + referredCell cellToReRefer = + existingRefCell.reRefer + ( + patch.faceCentres()[patch.size()/2], + patch.faceCentres()[0], + patch.faceNormals()[patch.size()/2], + patch.faceNormals()[0] + ); // Test all existing referred and real cells to check // duplicates are not being made or cells aren't being @@ -901,15 +913,15 @@ void Foam::referredCellList::buildReferredCellList forAll(procPatches,pP) { const processorPolyPatch& patch = - refCast<const processorPolyPatch> - ( - mesh.boundaryMesh()[procPatches[pP]] - ); + refCast<const processorPolyPatch> + ( + mesh.boundaryMesh()[procPatches[pP]] + ); DynamicList<referredCell> referredCellsToTransfer; const vectorList& neighbFaceCentres = - allNeighbourFaceCentres[pP]; + allNeighbourFaceCentres[pP]; const vectorList& neighbFaceAreas = allNeighbourFaceAreas[pP]; @@ -971,7 +983,9 @@ void Foam::referredCellList::buildReferredCellList ( meshEdgesOnThisSegment, faceEdge - ) == -1 + ) + == + -1 ) { meshEdgesOnThisSegment.append(faceEdge); @@ -990,7 +1004,9 @@ void Foam::referredCellList::buildReferredCellList ( meshPointsOnThisSegment, facePoint - ) == -1 + ) + == + -1 ) { meshPointsOnThisSegment.append(facePoint); @@ -1032,7 +1048,7 @@ void Foam::referredCellList::buildReferredCellList forAll(realCellsFoundInRange,cFIR) { const label realCell = - realCellsFoundInRange[cFIR]; + realCellsFoundInRange[cFIR]; referredCell cellToRefer ( @@ -1074,19 +1090,20 @@ void Foam::referredCellList::buildReferredCellList forAll(referredCellsFoundInRange,cFIR) { referredCell& existingRefCell = - referredInteractionList - [ - referredCellsFoundInRange[cFIR] - ]; + referredInteractionList + [ + referredCellsFoundInRange[cFIR] + ]; - referredCell cellToReRefer = existingRefCell.reRefer - ( - patch.faceCentres()[faceT], - neighbFaceCentres[faceT], - patch.faceNormals()[faceT], - neighbFaceAreas[faceT] - /(mag(neighbFaceAreas[faceT]) + VSMALL) - ); + referredCell cellToReRefer = + existingRefCell.reRefer + ( + patch.faceCentres()[faceT], + neighbFaceCentres[faceT], + patch.faceNormals()[faceT], + neighbFaceAreas[faceT] + /(mag(neighbFaceAreas[faceT]) + VSMALL) + ); referredCellsToTransfer.append(cellToReRefer); } @@ -1409,6 +1426,7 @@ void Foam::referredCellList::buildReferredCellList } } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::referredCellList::referredCellList @@ -1557,7 +1575,4 @@ void Foam::referredCellList::referMolecules } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H index e323a9dcb661ae3af8add5b25d9ee764936e804d..c8a77cb27f320ad9a4c8f46921725363b4e1c569 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ namespace Foam class interactionLists; /*---------------------------------------------------------------------------*\ - Class referredCellList Declaration + Class referredCellList Declaration \*---------------------------------------------------------------------------*/ class referredCellList @@ -59,7 +59,8 @@ class referredCellList const interactionLists& il_; - // Private Member Functions + + // Private Member Functions void buildReferredCellList ( diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H index a81d6cf8e834faf72acb2f36d5859fec030d2b0f..588bf94eabb916d7a36caddc02f72cc99c1f6a21 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C index 3db08989c320039f1df76b76456b4cd82898db03..c1e2e487695d4f1305809dde4c3a8412ed6ecac5 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -83,6 +83,4 @@ Foam::Ostream& Foam::operator<< } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H index 13fd0983d74d342b793c7b328b39cb27e8aaaf97..27c3c98ee39f45991318c192ba51c0ff34b01b7b 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,7 +45,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class referredMolecule Declaration + Class referredMolecule Declaration \*---------------------------------------------------------------------------*/ class referredMolecule diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H index 102bd5e30fb0db48a965283f9bb49cc41f636173..1db2f9a923f957a4c4e4a64b22c29bba34f22e69 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,6 +45,7 @@ Foam::referredMolecule::sitePositions() const return sitePositions_; } + // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // inline bool Foam::operator== @@ -71,6 +72,4 @@ inline bool Foam::operator!= } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H b/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H index db0c24bc95e00bc77c0de6f358e5434ecffbf0fa..9781c9d70f415b8c92d90d29d3b05ec015bcebcc 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H @@ -5,68 +5,68 @@ if (runTime.outputTime()) \*-----------------------------------------------------------------------*/ scalarField totalRhoN_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesRhoN, rN) { allSpeciesRhoN[rN].internalField() = allSpeciesN_RU[rN] /mesh.cellVolumes() /nAveragingSteps; - + totalRhoN_sum += allSpeciesRhoN[rN].internalField(); } - + totalRhoN.internalField() = totalRhoN_sum; - - + + /*-----------------------------------------------------------------------*\ Mass density \*-----------------------------------------------------------------------*/ - + scalarField totalRhoM_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesRhoM, rM) { allSpeciesRhoM[rM].internalField() = allSpeciesM_RU[rM] /mesh.cellVolumes() /nAveragingSteps; - + totalRhoM_sum += allSpeciesRhoM[rM].internalField(); } - + totalRhoM.internalField() = totalRhoM_sum; - + /*-----------------------------------------------------------------------*\ Bulk velocity \*-----------------------------------------------------------------------*/ - + vectorField totalMomentum_sum(mesh.nCells(), vector::zero); - + scalarField totalMass_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesVelocity, v) { // A check for 1/0 molecules is required. - + vectorField& singleSpeciesVelocity ( allSpeciesVelocity[v].internalField() ); - + forAll(singleSpeciesVelocity, sSV) { - if(allSpeciesN_RU[v][sSV]) + if (allSpeciesN_RU[v][sSV]) { - singleSpeciesVelocity[sSV] = + singleSpeciesVelocity[sSV] = allSpeciesVelocitySum_RU[v][sSV] /allSpeciesN_RU[v][sSV]; - + totalMomentum_sum[sSV] += allSpeciesM_RU[v][sSV] /allSpeciesN_RU[v][sSV] *allSpeciesVelocitySum_RU[v][sSV]; - + totalMass_sum[sSV] += allSpeciesM_RU[v][sSV]; } else @@ -75,10 +75,10 @@ if (runTime.outputTime()) } } } - + forAll(totalVelocity.internalField(), tV) { - if(totalMass_sum[tV] > VSMALL) + if (totalMass_sum[tV] > VSMALL) { totalVelocity.internalField()[tV] = totalMomentum_sum[tV] @@ -90,34 +90,33 @@ if (runTime.outputTime()) vector::zero; } } - + /*-----------------------------------------------------------------------*\ Kinetic temperature \*-----------------------------------------------------------------------*/ - + scalarField totalTemperatureVTerms_sum(mesh.nCells(), 0.0); - + scalarField totalN_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesTemperature, t) { // A check for 1/0 molecules is required. - + scalarField& singleSpeciesTemp ( allSpeciesTemperature[t].internalField() ); - + forAll(singleSpeciesTemp, sST) { - if(allSpeciesN_RU[t][sST]) + if (allSpeciesN_RU[t][sST]) { - singleSpeciesTemp[sST] = + singleSpeciesTemp[sST] = allSpeciesM_RU[t][sST] /allSpeciesN_RU[t][sST] /(3.0 * moleculeCloud::kb * allSpeciesN_RU[t][sST]) - * - ( + *( allSpeciesVelocityMagSquaredSum_RU[t][sST] - ( @@ -127,14 +126,13 @@ if (runTime.outputTime()) ) /allSpeciesN_RU[t][sST] ); - + totalTemperatureVTerms_sum[sST] += allSpeciesM_RU[t][sST] - /allSpeciesN_RU[t][sST] - * - ( + /allSpeciesN_RU[t][sST] + *( allSpeciesVelocityMagSquaredSum_RU[t][sST] - - + - ( allSpeciesVelocitySum_RU[t][sST] & @@ -142,7 +140,7 @@ if (runTime.outputTime()) ) /allSpeciesN_RU[t][sST] ); - + totalN_sum[sST] += allSpeciesN_RU[t][sST]; } else @@ -151,7 +149,7 @@ if (runTime.outputTime()) } } } - + forAll(totalTemperature.internalField(), tT) { if(totalN_sum[tT] > 0) @@ -165,41 +163,39 @@ if (runTime.outputTime()) totalTemperature.internalField()[tT] = 0.0; } } - + /*-----------------------------------------------------------------------*\ Mean kinetic energy \*-----------------------------------------------------------------------*/ - + scalarField totalKE_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesMeanKE, mKE) { // A check for 1/0 molecules is required. - + scalarField& singleSpeciesMeanKE ( allSpeciesMeanKE[mKE].internalField() ); - + forAll(singleSpeciesMeanKE, sSMKE) { if(allSpeciesN_RU[mKE][sSMKE]) { - singleSpeciesMeanKE[sSMKE] = + singleSpeciesMeanKE[sSMKE] = allSpeciesM_RU[mKE][sSMKE] - /allSpeciesN_RU[mKE][sSMKE] - /(2.0 * allSpeciesN_RU[mKE][sSMKE]) - * - ( + /allSpeciesN_RU[mKE][sSMKE] + /(2.0*allSpeciesN_RU[mKE][sSMKE]) + *( allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE] ); - + totalKE_sum[sSMKE] += allSpeciesM_RU[mKE][sSMKE] /allSpeciesN_RU[mKE][sSMKE] /2.0 - * - ( + *( allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE] ); } @@ -209,7 +205,7 @@ if (runTime.outputTime()) } } } - + forAll(totalMeanKE.internalField(), tMKE) { if(totalN_sum[tMKE] > 0) diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H index ce0113352e38b7ce230510a5786346efa706bb47..968cfa93cb80339db241aaf317418d678dbbcaa5 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,18 +60,15 @@ if (mesh.time().timeIndex() % pacf.sampleSteps() == 0) { p.x() += mol().mass() * mol().U().y() * mol().U().z() - + - 0.5 * mol().rf().yz(); + + 0.5*mol().rf().yz(); p.y() += mol().mass() * mol().U().z() * mol().U().x() - + - 0.5 * mol().rf().zx(); + + 0.5*mol().rf().zx(); p.z() += mol().mass() * mol().U().x() * mol().U().y() - + - 0.5 * mol().rf().xy(); + + 0.5*mol().rf().xy(); } pacf.calculateCorrelationFunction(p); @@ -93,12 +90,10 @@ if (mesh.time().timeIndex() % hfacf.sampleSteps() == 0) { s += ( - 0.5 * mol().mass() * magSqr(mol().U()) - + - mol().potentialEnergy() - ) * mol().U() - + - 0.5 * ( mol().rf() & mol().U() ); + 0.5*mol().mass()*magSqr(mol().U()) + + mol().potentialEnergy() + )*mol().U() + + 0.5*(mol().rf() & mol().U()); } hfacf.calculateCorrelationFunction(s); diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H index 1ffbcc15b79d4b45fd462d6c799747370b7d137b..0ee094ff149a2d25a9b9ff89d8f31420557039b0 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ if (writeVacf) } } -Info << "Diffusion coefficient = " +Info<< "Diffusion coefficient = " << vacf.integral() << endl; if (writePacf) @@ -57,13 +57,13 @@ Info<< "Viscosity = " << pacf.integral()/averageTemperature/moleculeCloud::kb/meshVolume << endl; -if(writeHFacf) +if (writeHFacf) { OFstream hfacfFile ( runTime.path()/ + "hfacf" ); - + if (!hfacf.writeAveraged(hfacfFile)) { FatalErrorIn(args.executable()) @@ -73,7 +73,7 @@ if(writeHFacf) } } -Info << "Thermal conductivity = " +Info<< "Thermal conductivity = " << hfacf.integral() /averageTemperature /averageTemperature diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H b/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H index 6821055ae0036f84b57eaabda6ee2eff4d2842ca..ab2d593cc682aec604752381264053cc4edc3840 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/md.H b/src/lagrangian/molecularDynamics/molecule/mdTools/md.H index ae4ab08124268c2dbeb756c5c8fc932abc84b07e..9a079764ae823abdac17a56236003610c44863df 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/md.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/md.H @@ -1,11 +1,9 @@ #ifndef md_H #define md_H - -# include "potential.H" -# include "moleculeCloud.H" -# include "correlationFunction.H" -# include "distribution.H" -# include "reducedUnits.H" - + #include "potential.H" + #include "moleculeCloud.H" + #include "correlationFunction.H" + #include "distribution.H" + #include "reducedUnits.H" #endif diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H b/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H index 8688d63669bbda4a361b5d4b91d348b2bb2cdc21..fb5118bb5a484f0ce77bb3dd7a88b0e88aa2fd14 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,6 +52,8 @@ scalar singleStepTotalrDotf = 0.0; label singleStepNMols = molecules.size(); +label singleStepDOFs = 0; + { IDLList<molecule>::iterator mol(molecules.begin()); @@ -85,9 +87,11 @@ label singleStepNMols = molecules.size(); { label molId = mol().id(); - scalar molMass(molecules.constProps(molId).mass()); + const molecule::constantProperties cP(molecules.constProps(molId)); + + scalar molMass(cP.mass()); - const diagTensor& molMoI(molecules.constProps(molId).momentOfInertia()); + const diagTensor& molMoI(cP.momentOfInertia()); const vector& molV(mol().v()); @@ -112,6 +116,8 @@ label singleStepNMols = molecules.size(); singleStepTotalPE += mol().potentialEnergy(); singleStepTotalrDotf += tr(mol().rf()); + + singleStepDOFs += cP.degreesOfFreedom(); } } @@ -134,50 +140,53 @@ if (Pstream::parRun()) reduce(singleStepTotalrDotf, sumOp<scalar>()); reduce(singleStepNMols, sumOp<label>()); + + reduce(singleStepDOFs, sumOp<label>()); } if (singleStepNMols) { - Info<< "Number of mols in system = " + Info<< "Number of molecules in system = " << singleStepNMols << nl << "Overall number density = " << singleStepNMols/meshVolume << nl << "Overall mass density = " << singleStepTotalMass/meshVolume << nl - << "Average linear momentum per mol = " + << "Average linear momentum per molecule = " << singleStepTotalLinearMomentum/singleStepNMols << ' ' << mag(singleStepTotalLinearMomentum)/singleStepNMols << nl - << "Average angular momentum per mol = " + << "Average angular momentum per molecule = " << singleStepTotalAngularMomentum << ' ' << mag(singleStepTotalAngularMomentum)/singleStepNMols << nl << "Maximum |velocity| = " << singleStepMaxVelocityMag << nl - << "Average linear KE per mol = " + << "Average linear KE per molecule = " << singleStepTotalLinearKE/singleStepNMols << nl - << "Average angular KE per mol = " + << "Average angular KE per molecule = " << singleStepTotalAngularKE/singleStepNMols << nl - << "Average PE per mol = " + << "Average PE per molecule = " << singleStepTotalPE/singleStepNMols << nl - << "Average TE per mol = " + << "Average TE per molecule = " << ( singleStepTotalLinearKE - + singleStepTotalAngularKE - + singleStepTotalPE + + singleStepTotalAngularKE + + singleStepTotalPE ) /singleStepNMols << endl; -// Info << singleStepNMols << " " -// // << singleStepTotalMomentum/singleStepTotalMass << " " -// << singleStepMaxVelocityMag << " " -// << singleStepTotalKE/singleStepNMols << " " -// << singleStepTotalPE/singleStepNMols << " " -// << (singleStepTotalKE + singleStepTotalPE)/singleStepNMols << endl; + // Info << singleStepNMols << " " + // << singleStepTotalMomentum/singleStepTotalMass << " " + // << singleStepMaxVelocityMag << " " + // << singleStepTotalKE/singleStepNMols << " " + // << singleStepTotalPE/singleStepNMols << " " + // << (singleStepTotalKE + singleStepTotalPE) + // /singleStepNMols << endl; } else { - Info << "No molecules in system" << endl; + Info<< "No molecules in system" << endl; } diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H b/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H index ff274a33366d579e1a12ae49cf425bd7f9b34cc9..af0197b5fe4dc0fc2e75858e9f49ba86f3b0a273 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H @@ -3,24 +3,24 @@ if (runTime.outputTime()) allSpeciesN_RU = List< scalarField > ( molecules.potential().nIds(), - scalarField (mesh.nCells(), 0.0) + scalarField(mesh.nCells(), 0.0) ); allSpeciesM_RU = List< scalarField > ( molecules.potential().nIds(), - scalarField (mesh.nCells(), 0.0) + scalarField(mesh.nCells(), 0.0) ); allSpeciesVelocitySum_RU = List< vectorField > ( molecules.potential().nIds(), - vectorField (mesh.nCells(), vector::zero) + vectorField(mesh.nCells(), vector::zero) ); allSpeciesVelocityMagSquaredSum_RU = List< scalarField > ( molecules.potential().nIds(), - scalarField (mesh.nCells(), 0.0) + scalarField(mesh.nCells(), 0.0) ); } diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H index 4ba2bc1bc4d3188c4137b20d50626f963f0550bc..788763b163df63c6e173b91ce6905bd81384f758 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,17 +47,17 @@ accumulatedTotalrDotfSum += singleStepTotalrDotf; accumulatedNMols += singleStepNMols; +accumulatedDOFs += singleStepDOFs; + if (runTime.outputTime()) { - // calculate averages - if (accumulatedNMols) { Info << "calculating averages" << endl; averageTemperature = ( - 2.0/(6.0 * moleculeCloud::kb * accumulatedNMols) + 2.0/(moleculeCloud::kb * accumulatedDOFs) * ( accumulatedTotalLinearKE + accumulatedTotalAngularKE @@ -79,27 +79,20 @@ if (runTime.outputTime()) meshVolume ); - // output values - Info << "----------------------------------------" << nl << "Averaged properties" << nl << "Average |velocity| = " - << mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass - << " m/s" << nl - << "Average temperature = " - << averageTemperature << " K" << nl - << "Average pressure = " - << averagePressure << " N/m^2" << nl + << mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass << nl + << "Average temperature = " << averageTemperature << nl + << "Average pressure = " << averagePressure << nl << "----------------------------------------" << endl; } else { - Info << "Not averaging temperature and pressure: " + Info<< "Not averaging temperature and pressure: " << "no molecules in system" << endl; } - // reset counters - accumulatedTotalLinearMomentum = vector::zero; accumulatedTotalMass = 0.0; @@ -113,6 +106,9 @@ if (runTime.outputTime()) accumulatedTotalrDotfSum = 0.0; accumulatedNMols = 0; + + accumulatedDOFs = 0; } + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H index e5e236271f834659d2c1662427e95e66164408a3..9856c9d4da82a62412ce5a96c73bd8c7656456fc 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,6 +44,8 @@ scalar accumulatedTotalrDotfSum = 0.0; label accumulatedNMols = 0; +label accumulatedDOFs = 0; + scalar averageTemperature = 0.0; scalar averagePressure = 0.0; diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H index 1d924db4b49ad84b14895c13d45152e0ee4c0134..b1ac5d4230e4de124495c8f45e53542380a961db 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C index ac45040c096840c13064609ed9b80de5b6ef4543..64c5c45ccf9bc54036aca97284dbe6d218a314f2 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C +++ b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -241,6 +241,28 @@ void Foam::molecule::setSiteSizes(label size) } +bool Foam::molecule::hitPatch +( + const polyPatch&, + molecule::trackData&, + const label +) +{ + return false; +} + + +bool Foam::molecule::hitPatch +( + const polyPatch&, + int&, + const label +) +{ + return false; +} + + void Foam::molecule::hitProcessorPatch ( const processorPolyPatch&, diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H index 04e33428e99948adae78dbf6645dabc258d42ddd..ef2de145c464a7e5cefe15e652bcf34cd440c908 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H +++ b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -82,6 +82,8 @@ public: Field<vector> siteReferencePositions_; + List<scalar> siteMasses_; + List<scalar> siteCharges_; List<label> siteIds_; @@ -106,6 +108,7 @@ public: bool linearMoleculeTest() const; + public: inline constantProperties(); @@ -117,6 +120,8 @@ public: inline const Field<vector>& siteReferencePositions() const; + inline const List<scalar>& siteMasses() const; + inline const List<scalar>& siteCharges() const; inline const List<label>& siteIds() const; @@ -137,6 +142,8 @@ public: inline bool pointMolecule() const; + inline label degreesOfFreedom() const; + inline scalar mass() const; inline label nSites() const; @@ -208,6 +215,7 @@ private: List<vector> sitePositions_; + // Private Member Functions tensor rotationTensorX(scalar deltaT) const; @@ -216,6 +224,7 @@ private: tensor rotationTensorZ(scalar deltaT) const; + public: friend class Cloud<molecule>; @@ -256,7 +265,8 @@ public: // Member Functions - //- Tracking + // Tracking + bool move(trackData&); void transformProperties(const tensor& T); @@ -267,6 +277,7 @@ public: void setSiteSizes(label size); + // Access inline const tensor& Q() const; @@ -305,8 +316,27 @@ public: inline label id() const; + // Member Operators + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + bool hitPatch + ( + const polyPatch&, + molecule::trackData& td, + const label patchI + ); + + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions without trackData + bool hitPatch + ( + const polyPatch& p, + int& td, + const label patchI + ); + //- Overridable function to handle the particle hitting a processorPatch void hitProcessorPatch ( diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H index eb80dd930fb7fa22ad6ed70d27cbd78930433340..447a04e4ea3e047f045ac56cf55af05aa2849cac 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H +++ b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,6 +29,7 @@ License inline Foam::molecule::constantProperties::constantProperties() : siteReferencePositions_(Field<vector>(0)), + siteMasses_(List<scalar>(0)), siteCharges_(List<scalar>(0)), siteIds_(List<label>(0)), pairPotentialSites_(List<bool>(false)), @@ -44,6 +45,7 @@ inline Foam::molecule::constantProperties::constantProperties ) : siteReferencePositions_(dict.lookup("siteReferencePositions")), + siteMasses_(dict.lookup("siteMasses")), siteCharges_(dict.lookup("siteCharges")), siteIds_(List<word>(dict.lookup("siteIds")).size(), -1), pairPotentialSites_(), @@ -59,9 +61,7 @@ inline Foam::molecule::constantProperties::constantProperties List<word>(dict.lookup("pairPotentialSiteIds")) ); - scalarList siteMasses(dict.lookup("siteMasses")); - - mass_ = sum(siteMasses); + mass_ = sum(siteMasses_); vector centreOfMass(vector::zero); @@ -70,7 +70,7 @@ inline Foam::molecule::constantProperties::constantProperties forAll(siteReferencePositions_, i) { - centreOfMass += siteReferencePositions_[i]*siteMasses[i]; + centreOfMass += siteReferencePositions_[i]*siteMasses_[i]; } centreOfMass /= mass_; @@ -106,7 +106,7 @@ inline Foam::molecule::constantProperties::constantProperties forAll(siteReferencePositions_, i) { - centreOfMass += siteReferencePositions_[i]*siteMasses[i]; + centreOfMass += siteReferencePositions_[i]*siteMasses_[i]; } centreOfMass /= mass_; @@ -119,10 +119,8 @@ inline Foam::molecule::constantProperties::constantProperties { const vector& p(siteReferencePositions_[i]); - momOfInertia += siteMasses[i]*diagTensor - ( - 0, p.x()*p.x(), p.x()*p.x() - ); + momOfInertia += + siteMasses_[i]*diagTensor(0, p.x()*p.x(), p.x()*p.x()); } momentOfInertia_ = diagTensor @@ -144,7 +142,7 @@ inline Foam::molecule::constantProperties::constantProperties { const vector& p(siteReferencePositions_[i]); - momOfInertia += siteMasses[i]*tensor + momOfInertia += siteMasses_[i]*tensor ( p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(), -p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(), @@ -156,8 +154,7 @@ inline Foam::molecule::constantProperties::constantProperties { FatalErrorIn("molecule::constantProperties::constantProperties") << "An eigenvalue of the inertia tensor is zero, the molecule " - << dict.name() - << " is not a valid 6DOF shape." + << dict.name() << " is not a valid 6DOF shape." << nl << abort(FatalError); } @@ -172,7 +169,7 @@ inline Foam::molecule::constantProperties::constantProperties // global axes tensor Q = - vector(1,0,0)*e.x() + vector(0,1,0)*e.y() + vector(0,0,1)*e.z(); + vector(1,0,0)*e.x() + vector(0,1,0)*e.y() + vector(0,0,1)*e.z(); // Transform the site positions @@ -187,7 +184,7 @@ inline Foam::molecule::constantProperties::constantProperties forAll(siteReferencePositions_, i) { - centreOfMass += siteReferencePositions_[i]*siteMasses[i]; + centreOfMass += siteReferencePositions_[i]*siteMasses_[i]; } centreOfMass /= mass_; @@ -203,7 +200,7 @@ inline Foam::molecule::constantProperties::constantProperties { const vector& p(siteReferencePositions_[i]); - momOfInertia += siteMasses[i]*tensor + momOfInertia += siteMasses_[i]*tensor ( p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(), -p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(), @@ -337,6 +334,13 @@ Foam::molecule::constantProperties::siteReferencePositions() const } +inline const Foam::List<Foam::scalar>& +Foam::molecule::constantProperties::siteMasses() const +{ + return siteMasses_; +} + + inline const Foam::List<Foam::scalar>& Foam::molecule::constantProperties::siteCharges() const { @@ -372,7 +376,7 @@ inline bool Foam::molecule::constantProperties::pairPotentialSite { label s = findIndex(siteIds_, sId); - if(s == -1) + if (s == -1) { FatalErrorIn("moleculeI.H") << nl << sId << " site not found." @@ -396,10 +400,12 @@ inline bool Foam::molecule::constantProperties::electrostaticSite { label s = findIndex(siteIds_, sId); - if(s == -1) + if (s == -1) { - FatalErrorIn("moleculeI.H") << nl - << sId << " site not found." + FatalErrorIn + ( + "molecule::constantProperties::electrostaticSite(label)" + ) << sId << " site not found." << nl << abort(FatalError); } @@ -416,7 +422,7 @@ Foam::molecule::constantProperties::momentOfInertia() const inline bool Foam::molecule::constantProperties::linearMolecule() const { - return (momentOfInertia_.xx() < 0); + return ((momentOfInertia_.xx() < 0) && (momentOfInertia_.yy() > 0)); } @@ -426,6 +432,23 @@ inline bool Foam::molecule::constantProperties::pointMolecule() const } +inline Foam::label Foam::molecule::constantProperties::degreesOfFreedom() const +{ + if (linearMolecule()) + { + return 5; + } + else if (pointMolecule()) + { + return 3; + } + else + { + return 6; + } +} + + inline Foam::scalar Foam::molecule::constantProperties::mass() const { return mass_; @@ -592,6 +615,4 @@ inline Foam::label Foam::molecule::id() const } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C index c1e99d8a0bd06b79cf0dbdf36b4b1dde46485ea2..04ae825df59f5914dfc968ee84c58c13b387de62 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C +++ b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,16 +55,16 @@ Foam::molecule::molecule { if (is.format() == IOstream::ASCII) { - is >> Q_; - is >> v_; - is >> a_; - is >> pi_; - is >> tau_; - is >> siteForces_; - is >> sitePositions_; - is >> specialPosition_; + is >> Q_; + is >> v_; + is >> a_; + is >> pi_; + is >> tau_; + is >> siteForces_; + is >> sitePositions_; + is >> specialPosition_; potentialEnergy_ = readScalar(is); - is >> rf_; + is >> rf_; special_ = readLabel(is); id_ = readLabel(is); } @@ -74,18 +74,18 @@ Foam::molecule::molecule ( reinterpret_cast<char*>(&Q_), sizeof(Q_) - + sizeof(v_) - + sizeof(a_) - + sizeof(pi_) - + sizeof(tau_) - + sizeof(specialPosition_) - + sizeof(potentialEnergy_) - + sizeof(rf_) - + sizeof(special_) - + sizeof(id_) + + sizeof(v_) + + sizeof(a_) + + sizeof(pi_) + + sizeof(tau_) + + sizeof(specialPosition_) + + sizeof(potentialEnergy_) + + sizeof(rf_) + + sizeof(special_) + + sizeof(id_) ); - is >> siteForces_ >> sitePositions_; + is >> siteForces_ >> sitePositions_; } } @@ -169,6 +169,38 @@ void Foam::molecule::writeFields(const moleculeCloud& mC) IOField<label> special(mC.fieldIOobject("special", IOobject::NO_READ), np); IOField<label> id(mC.fieldIOobject("id", IOobject::NO_READ), np); + // Post processing fields + + IOField<vector> piGlobal + ( + mC.fieldIOobject("piGlobal", IOobject::NO_READ), + np + ); + + IOField<vector> tauGlobal + ( + mC.fieldIOobject("tauGlobal", IOobject::NO_READ), + np + ); + + IOField<vector> orientation1 + ( + mC.fieldIOobject("orientation1", IOobject::NO_READ), + np + ); + + IOField<vector> orientation2 + ( + mC.fieldIOobject("orientation2", IOobject::NO_READ), + np + ); + + IOField<vector> orientation3 + ( + mC.fieldIOobject("orientation3", IOobject::NO_READ), + np + ); + label i = 0; forAllConstIter(moleculeCloud, mC, iter) { @@ -182,6 +214,14 @@ void Foam::molecule::writeFields(const moleculeCloud& mC) specialPosition[i] = mol.specialPosition_; special[i] = mol.special_; id[i] = mol.id_; + + piGlobal[i] = mol.Q_ & mol.pi_; + tauGlobal[i] = mol.Q_ & mol.tau_; + + orientation1[i] = mol.Q_ & vector(1,0,0); + orientation2[i] = mol.Q_ & vector(0,1,0); + orientation3[i] = mol.Q_ & vector(0,0,1); + i++; } @@ -193,6 +233,18 @@ void Foam::molecule::writeFields(const moleculeCloud& mC) specialPosition.write(); special.write(); id.write(); + + piGlobal.write(); + tauGlobal.write(); + + orientation1.write(); + orientation2.write(); + orientation3.write(); + + mC.writeXYZ + ( + mC.mesh().time().timePath() + "/lagrangian" + "/moleculeCloud.xmol" + ); } @@ -225,17 +277,17 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const molecule& mol) ( reinterpret_cast<const char*>(&mol.Q_), sizeof(mol.Q_) - + sizeof(mol.v_) - + sizeof(mol.a_) - + sizeof(mol.pi_) - + sizeof(mol.tau_) - + sizeof(mol.specialPosition_) - + sizeof(mol.potentialEnergy_) - + sizeof(mol.rf_) - + sizeof(mol.special_) - + sizeof(mol.id_) + + sizeof(mol.v_) + + sizeof(mol.a_) + + sizeof(mol.pi_) + + sizeof(mol.tau_) + + sizeof(mol.specialPosition_) + + sizeof(mol.potentialEnergy_) + + sizeof(mol.rf_) + + sizeof(mol.special_) + + sizeof(mol.id_) ); - os << mol.siteForces_ << mol.sitePositions_; + os << mol.siteForces_ << mol.sitePositions_; } // Check state of Ostream diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C index a0c45a73655871aaf5b819f6e0f854bb40310790..113fb829421dc6bc1591701c4a54c4e4cd3f05d5 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -507,7 +507,7 @@ void Foam::moleculeCloud::initialiseMolecules else { const dictionary& zoneDict = - mdInitialiseDict.subDict(zone.name()); + mdInitialiseDict.subDict(zone.name()); const scalar temperature ( @@ -530,7 +530,7 @@ void Foam::moleculeCloud::initialiseMolecules { FatalErrorIn("Foam::moleculeCloud::initialiseMolecules") << "latticeIds and latticePositions must be the same " - << " size." << nl + << " size." << nl << abort(FatalError); } @@ -548,6 +548,15 @@ void Foam::moleculeCloud::initialiseMolecules zoneDict.lookup("numberDensity") ); + if (numberDensity < VSMALL) + { + WarningIn("moleculeCloud::initialiseMolecules") + << "numberDensity too small, not filling zone " + << zone.name() << endl; + + continue; + } + latticeCellScale = pow ( latticeIds.size()/(det(latticeCellShape)*numberDensity), @@ -572,9 +581,19 @@ void Foam::moleculeCloud::initialiseMolecules zoneDict.lookup("massDensity") ); + if (massDensity < VSMALL) + { + WarningIn("moleculeCloud::initialiseMolecules") + << "massDensity too small, not filling zone " + << zone.name() << endl; + + continue; + } + + latticeCellScale = pow ( - unitCellMass /(det(latticeCellShape)*massDensity), + unitCellMass/(det(latticeCellShape)*massDensity), (1.0/3.0) ); } @@ -906,7 +925,7 @@ void Foam::moleculeCloud::initialiseMolecules ) { WarningIn("Foam::moleculeCloud::initialiseMolecules()") - << "A whole layer of unit cells was placed " + << "A whole layer of unit cells was placed " << "outside the bounds of the mesh, but no " << "molecules have been placed in zone '" << zone.name() @@ -928,7 +947,6 @@ void Foam::moleculeCloud::initialiseMolecules n++; } - } } } @@ -1025,6 +1043,21 @@ void Foam::moleculeCloud::createMolecule } +Foam::label Foam::moleculeCloud::nSites() const +{ + label n = 0; + + const_iterator mol(this->begin()); + + for (mol = this->begin(); mol != this->end(); ++mol) + { + n += constProps(mol().id()).nSites(); + } + + return n; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::moleculeCloud::moleculeCloud @@ -1158,4 +1191,30 @@ void Foam::moleculeCloud::writeFields() const } +void Foam::moleculeCloud::writeXYZ(const fileName& fName) const +{ + OFstream str(fName); + + str << nSites() << nl << "moleculeCloud site positions in angstroms" << nl; + + const_iterator mol(this->begin()); + + for (mol = this->begin(); mol != this->end(); ++mol) + { + const molecule::constantProperties& cP = constProps(mol().id()); + + forAll(mol().sitePositions(), i) + { + const point& sP = mol().sitePositions()[i]; + + str << pot_.siteIdList()[cP.siteIds()[i]] + << ' ' << sP.x()*1e10 + << ' ' << sP.y()*1e10 + << ' ' << sP.z()*1e10 + << nl; + } + } +} + + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H index d6f961ca0ce573329508db010a106d1cd901f9af..6863227c12ceb43c81f07e51e7dea4b1bc2ee5e5 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,6 +44,7 @@ SourceFiles #include "interactionLists.H" #include "labelVector.H" #include "Random.H" +#include "fileName.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,7 +52,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class moleculeCloud Declaration + Class moleculeCloud Declaration \*---------------------------------------------------------------------------*/ class moleculeCloud @@ -75,6 +76,7 @@ private: Random rndGen_; + // Private Member Functions void buildConstProps(); @@ -131,6 +133,8 @@ private: const vector& bulkVelocity ); + label nSites() const; + inline vector equipartitionLinearVelocity ( scalar temperature, @@ -160,6 +164,7 @@ public: static scalar vacuumPermittivity; + // Constructors //- Construct given mesh and potential references @@ -177,8 +182,8 @@ public: const IOdictionary& mdInitialiseDict ); - // Member Functions + // Member Functions //- Evolve the molecules (move, calculate forces, control state etc) void evolve(); @@ -191,6 +196,7 @@ public: const scalar measuredTemperature ); + // Access inline const polyMesh& mesh() const; @@ -204,15 +210,18 @@ public: inline const List<molecule::constantProperties> constProps() const; inline const molecule::constantProperties& - constProps(label id) const; + constProps(label id) const; inline Random& rndGen(); + // Member Operators //- Write fields + void writeFields() const; - void writeFields() const; + //- Write molecule sites in XYZ format + void writeXYZ(const fileName& fName) const; }; diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H index 55813e665812c14d992c6883802ccdd35df27e74..94c9f49286bda8afbdbd62eef7ca2dd8cb19327e 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,9 +32,9 @@ inline void Foam::moleculeCloud::evaluatePair molecule* molJ ) { - const pairPotentialList& pairPot(pot_.pairPotentials()); + const pairPotentialList& pairPot = pot_.pairPotentials(); - const electrostaticPotential& electrostatic(pot_.electrostatic()); + const pairPotential& electrostatic = pairPot.electrostatic(); label idI = molI->id(); @@ -67,7 +67,7 @@ inline void Foam::moleculeCloud::evaluatePair if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ]) { vector rsIsJ = - molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; + molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; scalar rsIsJMagSq = magSqr(rsIsJ); @@ -75,8 +75,9 @@ inline void Foam::moleculeCloud::evaluatePair { scalar rsIsJMag = mag(rsIsJ); - vector fsIsJ = (rsIsJ/rsIsJMag) - *pairPot.force(idsI, idsJ, rsIsJMag); + vector fsIsJ = + (rsIsJ/rsIsJMag) + *pairPot.force(idsI, idsJ, rsIsJMag); molI->siteForces()[sI] += fsIsJ; @@ -91,9 +92,18 @@ inline void Foam::moleculeCloud::evaluatePair molJ->potentialEnergy() += 0.5*potentialEnergy; - molI->rf() += rsIsJ * fsIsJ; + vector rIJ = molI->position() - molJ->position(); + + tensor virialContribution = + (rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq; + + molI->rf() += virialContribution; + + molJ->rf() += virialContribution; - molJ->rf() += rsIsJ * fsIsJ; + // molI->rf() += rsIsJ * fsIsJ; + + // molJ->rf() += rsIsJ * fsIsJ; } } @@ -104,7 +114,7 @@ inline void Foam::moleculeCloud::evaluatePair scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutMaxSqr(rsIsJMagSq)) + if(rsIsJMagSq <= electrostatic.rCutSqr()) { scalar rsIsJMag = mag(rsIsJ); @@ -112,38 +122,50 @@ inline void Foam::moleculeCloud::evaluatePair scalar chargeJ = constPropJ.siteCharges()[sJ]; - vector fsIsJ = (rsIsJ/rsIsJMag) - *chargeI*chargeJ*electrostatic.force(rsIsJMag); + vector fsIsJ = + (rsIsJ/rsIsJMag) + *chargeI*chargeJ*electrostatic.force(rsIsJMag); molI->siteForces()[sI] += fsIsJ; molJ->siteForces()[sJ] += -fsIsJ; - scalar potentialEnergy = chargeI*chargeJ - *electrostatic.energy(rsIsJMag); + scalar potentialEnergy = + chargeI*chargeJ + *electrostatic.energy(rsIsJMag); molI->potentialEnergy() += 0.5*potentialEnergy; molJ->potentialEnergy() += 0.5*potentialEnergy; - molI->rf() += rsIsJ * fsIsJ; + vector rIJ = molI->position() - molJ->position(); + + tensor virialContribution = + (rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq; + + molI->rf() += virialContribution; + + molJ->rf() += virialContribution; - molJ->rf() += rsIsJ * fsIsJ; + // molI->rf() += rsIsJ * fsIsJ; + + // molJ->rf() += rsIsJ * fsIsJ; } } } } } + inline void Foam::moleculeCloud::evaluatePair ( molecule* molReal, referredMolecule* molRef ) { - const pairPotentialList& pairPot(pot_.pairPotentials()); + const pairPotentialList& pairPot = pot_.pairPotentials(); - const electrostaticPotential& electrostatic(pot_.electrostatic()); + const pairPotential& electrostatic = pairPot.electrostatic(); label idReal = molReal->id(); @@ -176,16 +198,18 @@ inline void Foam::moleculeCloud::evaluatePair if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) + if (pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) { scalar rsRealsRefMag = mag(rsRealsRef); - vector fsRealsRef = (rsRealsRef/rsRealsRefMag) - *pairPot.force(idsReal, idsRef, rsRealsRefMag); + vector fsRealsRef = + (rsRealsRef/rsRealsRefMag) + *pairPot.force(idsReal, idsRef, rsRealsRefMag); molReal->siteForces()[sReal] += fsRealsRef; @@ -196,7 +220,14 @@ inline void Foam::moleculeCloud::evaluatePair molReal->potentialEnergy() += 0.5*potentialEnergy; - molReal->rf() += rsRealsRef * fsRealsRef; + vector rRealRef = molReal->position() - molRef->position(); + + molReal->rf() += + (rsRealsRef*fsRealsRef) + *(rsRealsRef & rRealRef) + /rsRealsRefMagSq; + + // molReal->rf() += rsRealsRef * fsRealsRef; } } @@ -204,11 +235,12 @@ inline void Foam::moleculeCloud::evaluatePair if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutMaxSqr(rsRealsRefMagSq)) + if (rsRealsRefMagSq <= electrostatic.rCutSqr()) { scalar rsRealsRefMag = mag(rsRealsRef); @@ -216,18 +248,27 @@ inline void Foam::moleculeCloud::evaluatePair scalar chargeRef = constPropRef.siteCharges()[sRef]; - vector fsRealsRef = (rsRealsRef/rsRealsRefMag) - *chargeReal*chargeRef - *electrostatic.force(rsRealsRefMag); + vector fsRealsRef = + (rsRealsRef/rsRealsRefMag) + *chargeReal*chargeRef + *electrostatic.force(rsRealsRefMag); molReal->siteForces()[sReal] += fsRealsRef; - scalar potentialEnergy = chargeReal*chargeRef - *electrostatic.energy(rsRealsRefMag); + scalar potentialEnergy = + chargeReal*chargeRef + *electrostatic.energy(rsRealsRefMag); molReal->potentialEnergy() += 0.5*potentialEnergy; - molReal->rf() += rsRealsRef * fsRealsRef; + vector rRealRef = molReal->position() - molRef->position(); + + molReal->rf() += + (rsRealsRef*fsRealsRef) + *(rsRealsRef & rRealRef) + /rsRealsRefMagSq; + + // molReal->rf() += rsRealsRef * fsRealsRef; } } } @@ -241,9 +282,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit molecule* molJ ) const { - const pairPotentialList& pairPot(pot_.pairPotentials()); + const pairPotentialList& pairPot = pot_.pairPotentials(); - const electrostaticPotential& electrostatic(pot_.electrostatic()); + const pairPotential& electrostatic = pairPot.electrostatic(); label idI = molI->id(); @@ -276,11 +317,11 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ]) { vector rsIsJ = - molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; + molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) + if (pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) { scalar rsIsJMag = mag(rsIsJ); @@ -291,7 +332,7 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsIsJMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsIsJMag << ". These may have been placed on top of each" @@ -325,11 +366,11 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (electrostaticSitesI[sI] && electrostaticSitesJ[sJ]) { vector rsIsJ = - molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; + molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutMaxSqr(rsIsJMagSq)) + if (pairPot.rCutMaxSqr(rsIsJMagSq)) { scalar rsIsJMag = mag(rsIsJ); @@ -340,18 +381,23 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsIsJMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsIsJMag << ". These may have been placed on top of each" - << " other by a rounding error in molConfig in" - << " parallel or a block filled with molecules " + << " other by a rounding error in mdInitialise in" + << " parallel or a block filled with molecules" << " twice. Removing one of the molecules." << endl; return true; } + if (rsIsJMag < electrostatic.rMin()) + { + return true; + } + scalar chargeI = constPropI.siteCharges()[sI]; scalar chargeJ = constPropJ.siteCharges()[sJ]; @@ -379,9 +425,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit referredMolecule* molRef ) const { - const pairPotentialList& pairPot(pot_.pairPotentials()); + const pairPotentialList& pairPot = pot_.pairPotentials(); - const electrostaticPotential& electrostatic(pot_.electrostatic()); + const pairPotential& electrostatic = pairPot.electrostatic(); label idReal = molReal->id(); @@ -414,11 +460,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) + if (pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) { scalar rsRealsRefMag = mag(rsRealsRef); @@ -429,12 +476,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsRealsRefMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsRealsRefMag << ". These may have been placed on top of each" - << " other by a rounding error in molConfig in" - << " parallel or a block filled with molecules " + << " other by a rounding error in mdInitialise in" + << " parallel or a block filled with molecules" << " twice. Removing one of the molecules." << endl; @@ -464,11 +511,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutMaxSqr(rsRealsRefMagSq)) + if (pairPot.rCutMaxSqr(rsRealsRefMagSq)) { scalar rsRealsRefMag = mag(rsRealsRef); @@ -479,18 +527,23 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsRealsRefMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsRealsRefMag << ". These may have been placed on top of each" - << " other by a rounding error in molConfig in" - << " parallel or a block filled with molecules " + << " other by a rounding error in mdInitialise in" + << " parallel or a block filled with molecules" << " twice. Removing one of the molecules." << endl; return true; } + if (rsRealsRefMag < electrostatic.rMin()) + { + return true; + } + scalar chargeReal = constPropReal.siteCharges()[sReal]; scalar chargeRef = constPropRef.siteCharges()[sRef]; @@ -499,8 +552,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit ( mag ( - chargeReal*chargeRef - *electrostatic.energy(rsRealsRefMag) + chargeReal + *chargeRef + *electrostatic.energy(rsRealsRefMag) ) > pot_.potentialEnergyLimit() ) @@ -559,6 +613,7 @@ inline Foam::vector Foam::moleculeCloud::equipartitionAngularMomentum } } + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline const Foam::polyMesh& Foam::moleculeCloud::mesh() const diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C index e9b048507bd61d9e01d0ed0c7e3957fd5a5a0e49..6836c2bc277e3f13ee476df76d7aca0b250a5102 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H index 294aa7770e6de424c553ce159de0f514186835d2..acefe4b8151c571323d955d8d69b8485eebd9df3 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class reducedUnits Declaration + Class reducedUnits Declaration \*---------------------------------------------------------------------------*/ class reducedUnits diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H index 8f3ae51b16ac067f64e75f59906e982e29fe6d5f..72ff243776432aaa5b77cee3581b7553b602a972 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C index 175a2aa4899b2c04029a26e65ca2717830f634e7..03b4489ec5a34ac510a6170de116bc6a97e3202b 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/Make/files b/src/lagrangian/molecularDynamics/potential/Make/files index 7b16b6e2b61938fcc029900b8db8322f0b933055..4afe4de3d950a1a9cc18af997d5324566b275fb2 100644 --- a/src/lagrangian/molecularDynamics/potential/Make/files +++ b/src/lagrangian/molecularDynamics/potential/Make/files @@ -15,6 +15,7 @@ $(pairPotential)/derived/maitlandSmith/maitlandSmith.C $(pairPotential)/derived/azizChen/azizChen.C $(pairPotential)/derived/exponentialRepulsion/exponentialRepulsion.C $(pairPotential)/derived/coulomb/coulomb.C +$(pairPotential)/derived/dampedCoulomb/dampedCoulomb.C $(pairPotential)/derived/noInteraction/noInteraction.C energyScalingFunction = energyScalingFunction @@ -43,4 +44,4 @@ electrostaticPotential = electrostaticPotential $(electrostaticPotential)/electrostaticPotential.C -LIB = $(FOAM_LIBBIN)/libpotential +LIB = $(FOAM_LIBBIN)/libpotential \ No newline at end of file diff --git a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C index 17fe776235acbd98aa65e2e11eed5c15e3e53156..1dff432741c4766ee3c86003af8a62f97fde9a4a 100644 --- a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C +++ b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,8 +27,6 @@ License #include "electrostaticPotential.H" #include "mathematicalConstants.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::electrostaticPotential::electrostaticPotential() diff --git a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H index 0bc0e0d4d04416b75f3d0f732db5b44684556c71..d2c4bb88b917388875cccdc52b0f3d5c06128f2e 100644 --- a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H +++ b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class electrostaticPotential Declaration + Class electrostaticPotential Declaration \*---------------------------------------------------------------------------*/ class electrostaticPotential diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C index c06f90ea27ea0ba7f4235a224680bdc982888986..df247d84dea90ba5f5d0b698436b7da1bfd55b44 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,8 +36,6 @@ namespace Foam defineTypeNameAndDebug(energyScalingFunction, 0); defineRunTimeSelectionTable(energyScalingFunction, dictionary); -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::energyScalingFunction::energyScalingFunction @@ -66,6 +64,7 @@ bool Foam::energyScalingFunction::read return true; } + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H index 4473fe2bb043b280524a92221d267de2b83bd358..8815151bcf0392705dc4e5309521460abfe44d54 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class energyScalingFunction Declaration + Class energyScalingFunction Declaration \*---------------------------------------------------------------------------*/ class energyScalingFunction @@ -144,8 +144,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - #endif // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C index 92166f863215f4d9daaf373700d0aad2d2088607..ccbdb8c92e7d2fa386df5ca3578e46f8c9b0d6b6 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,8 +58,8 @@ autoPtr<energyScalingFunction> energyScalingFunction::New ( "energyScalingFunction::New()" ) << "Unknown energyScalingFunction type " - << energyScalingFunctionTypeName << endl << endl - << "Valid energyScalingFunctions are : " << endl + << energyScalingFunctionTypeName << nl << nl + << "Valid energyScalingFunctions are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C index 6ca0fff321cd6fce75773f319be56a91775191fe..defeb779a0620c7d75eb381111bf016c99cc96a5 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,7 @@ scalar doubleSigmoid::sigmoidScale return 1.0 / (1.0 + exp( scale * (r - shift))); } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // doubleSigmoid::doubleSigmoid @@ -67,13 +68,17 @@ doubleSigmoid::doubleSigmoid ) : energyScalingFunction(name, energyScalingFunctionProperties, pairPot), - doubleSigmoidCoeffs_(energyScalingFunctionProperties.subDict(typeName + "Coeffs")), + doubleSigmoidCoeffs_ + ( + energyScalingFunctionProperties.subDict(typeName + "Coeffs") + ), shift1_(readScalar(doubleSigmoidCoeffs_.lookup("shift1"))), scale1_(readScalar(doubleSigmoidCoeffs_.lookup("scale1"))), shift2_(readScalar(doubleSigmoidCoeffs_.lookup("shift2"))), scale2_(readScalar(doubleSigmoidCoeffs_.lookup("scale2"))) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void doubleSigmoid::scaleEnergy(scalar& e, const scalar r) const @@ -81,17 +86,19 @@ void doubleSigmoid::scaleEnergy(scalar& e, const scalar r) const e *= sigmoidScale(r, shift1_, scale1_) * sigmoidScale(r, shift2_, scale2_); } + bool doubleSigmoid::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - doubleSigmoidCoeffs_ = energyScalingFunctionProperties.subDict(typeName + "Coeffs"); + doubleSigmoidCoeffs_ = + energyScalingFunctionProperties.subDict(typeName + "Coeffs"); doubleSigmoidCoeffs_.lookup("shift1") >> shift1_; doubleSigmoidCoeffs_.lookup("scale1") >> scale1_; doubleSigmoidCoeffs_.lookup("shift2") >> shift2_; doubleSigmoidCoeffs_.lookup("scale2") >> scale2_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H index 07c4dfbd49003d6306e850b11f8d027c490462f7..27e75fb1901a72c6450b7448f5eaac75910f5819 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace energyScalingFunctions { /*---------------------------------------------------------------------------*\ - Class doubleSigmoid Declaration + Class doubleSigmoid Declaration \*---------------------------------------------------------------------------*/ class doubleSigmoid @@ -62,6 +62,7 @@ class doubleSigmoid scalar shift2_; scalar scale2_; + // Private Member Functions scalar sigmoidScale @@ -98,7 +99,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C index ea4ec88ed43c657840b7d8ae7b80ae7f23d91202..412f7538876e19b72daa78e4e36176595d013802 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -60,15 +58,17 @@ noScaling::noScaling energyScalingFunction(name, energyScalingFunctionProperties, pairPot) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void noScaling::scaleEnergy(scalar& e, const scalar r) const {} + bool noScaling::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H index 192c862fb4330fff66ca6d78346dc6a5b9e115af..ea2ad62aef18327594f59483d3b95f39493d1ec1 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -80,7 +80,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C index 90eccc9b8021ff9b4b5399c28821d03a171abae5..d6866cfc8f9878cde632284ebe34349ac18a1c27 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -61,6 +59,7 @@ shifted::shifted e_at_rCut_(pairPot.unscaledEnergy(pairPot.rCut())) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void shifted::scaleEnergy(scalar& e, const scalar r) const @@ -68,10 +67,11 @@ void shifted::scaleEnergy(scalar& e, const scalar r) const e -= e_at_rCut_; } + bool shifted::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H index 6f95adbdb90f89b0d3a4c375ff1acca31e25543e..01b0b413f34e9abc72ed5d054492a79751513041 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,7 @@ class shifted scalar e_at_rCut_; + public: //- Runtime type information @@ -79,11 +80,12 @@ public: ~shifted() {} + // Member Functions void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C index dec8729fae9841bb18906bea8cf863669fbb2181..72041de3e05c77b8c4781e7675d06b2f5e8d6846 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -63,6 +61,7 @@ shiftedForce::shiftedForce de_dr_at_rCut_(pairPot.energyDerivative(rCut_, false)) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void shiftedForce::scaleEnergy(scalar& e, const scalar r) const @@ -70,10 +69,11 @@ void shiftedForce::scaleEnergy(scalar& e, const scalar r) const e -= ( e_at_rCut_ + de_dr_at_rCut_ * (r - rCut_) ); } + bool shiftedForce::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H index d67164c64e544a9930bbbbc1e6a149f89697a8b1..f6d97d002b633f28908820d6973697da22a85f30 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace energyScalingFunctions { /*---------------------------------------------------------------------------*\ - Class shiftedForce Declaration + Class shiftedForce Declaration \*---------------------------------------------------------------------------*/ class shiftedForce @@ -89,7 +89,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C index 43483221ae562c28d4e29ec69bc2cc2b6f18b389..c689608172acc735d5d4fbb408de72985ba9c07c 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,6 +45,7 @@ addToRunTimeSelectionTable dictionary ); + // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // scalar sigmoid::sigmoidScale @@ -57,6 +58,7 @@ scalar sigmoid::sigmoidScale return 1.0 / (1.0 + exp( scale * (r - shift))); } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // sigmoid::sigmoid @@ -67,11 +69,15 @@ sigmoid::sigmoid ) : energyScalingFunction(name, energyScalingFunctionProperties, pairPot), - sigmoidCoeffs_(energyScalingFunctionProperties.subDict(typeName + "Coeffs")), + sigmoidCoeffs_ + ( + energyScalingFunctionProperties.subDict(typeName + "Coeffs") + ), shift_(readScalar(sigmoidCoeffs_.lookup("shift"))), scale_(readScalar(sigmoidCoeffs_.lookup("scale"))) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void sigmoid::scaleEnergy(scalar& e, const scalar r) const @@ -79,15 +85,17 @@ void sigmoid::scaleEnergy(scalar& e, const scalar r) const e *= sigmoidScale(r, shift_, scale_); } + bool sigmoid::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - sigmoidCoeffs_ = energyScalingFunctionProperties.subDict(typeName + "Coeffs"); + sigmoidCoeffs_ = + energyScalingFunctionProperties.subDict(typeName + "Coeffs"); sigmoidCoeffs_.lookup("shift") >> shift_; sigmoidCoeffs_.lookup("scale") >> shift_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H index 42d0ac85b83b7bc3a4b99c6bb9be42ffb716e525..8a37ad86003f460c036fb51df247c61642a85617 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -98,7 +98,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C index b5251d733c89d6919807429be5c1d3b07e130541..2986a0e5394f73a6e2a6f63996668057536bb215 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,8 +54,8 @@ autoPtr<pairPotential> pairPotential::New ( "pairPotential::New()" ) << "Unknown pairPotential type " - << pairPotentialTypeName << endl << endl - << "Valid pairPotentials are : " << endl + << pairPotentialTypeName << nl << nl + << "Valid pairPotentials are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C index d4a807f352f91577f281dfa344ab8ba82cf3ccee..b3e609f4e77140c17b98e4ec7f2ae47dc129d555 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -93,7 +93,7 @@ void Foam::pairPotential::setLookupTables() } -Foam::scalar Foam::pairPotential::forceLookup(const scalar r) const +Foam::scalar Foam::pairPotential::force(const scalar r) const { scalar k_rIJ = (r - rMin_)/dr_; @@ -102,7 +102,7 @@ Foam::scalar Foam::pairPotential::forceLookup(const scalar r) const if (k < 0) { FatalErrorIn("pairPotential.C") << nl - << "r less than rMin" << nl + << "r less than rMin in pair potential " << name_ << nl << abort(FatalError); } @@ -130,7 +130,7 @@ Foam::pairPotential::forceTable() const } -Foam::scalar Foam::pairPotential::energyLookup(const scalar r) const +Foam::scalar Foam::pairPotential::energy(const scalar r) const { scalar k_rIJ = (r - rMin_)/dr_; @@ -139,7 +139,7 @@ Foam::scalar Foam::pairPotential::energyLookup(const scalar r) const if (k < 0) { FatalErrorIn("pairPotential.C") << nl - << "r less than rMin" << nl + << "r less than rMin in pair potential " << name_ << nl << abort(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H index 6d6701a106c013bea2241d08b6cc2174db8e64af..9be12ebd0c840a0ec84e5c75f25d036586eaa338 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,7 +54,7 @@ namespace Foam class energyScalingFunction; /*---------------------------------------------------------------------------*\ - Class pairPotential Declaration + Class pairPotential Declaration \*---------------------------------------------------------------------------*/ class pairPotential @@ -80,6 +80,7 @@ protected: bool writeTables_; + // Private Member Functions void scaleEnergy(scalar& e, const scalar r) const; @@ -94,7 +95,7 @@ protected: public: //- Runtime type information - TypeName("pairPotential"); + TypeName("pairPotential"); // Declare run-time constructor selection table @@ -150,9 +151,9 @@ public: inline scalar rCutSqr() const; - scalar energyLookup (const scalar r) const; + scalar energy (const scalar r) const; - scalar forceLookup (const scalar r) const; + scalar force (const scalar r) const; List<Pair<scalar> > energyTable() const; @@ -160,7 +161,7 @@ public: inline bool writeTables() const; - virtual scalar unscaledEnergy (const scalar r) const = 0; + virtual scalar unscaledEnergy(const scalar r) const = 0; scalar scaledEnergy(const scalar r) const; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H index f39140c38bb0c346e78a3c1cc0c352aa26c5a770..4c2ef76b8e5248cd886c95f32a7615d42e941c43 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C index 5c0893045a417fa84e61fb01ff18339d4f713406..a07f21beceb54a1924936adab91f8ffa99286a88 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,12 +38,12 @@ bool Foam::pairPotential::writeEnergyAndForceTables(Ostream& os) const forAll(eTab, e) { - os<< eTab[e].first() - << token::SPACE - << eTab[e].second() - << token::SPACE - << fTab[e].second() - << nl; + os << eTab[e].first() + << token::SPACE + << eTab[e].second() + << token::SPACE + << fTab[e].second() + << nl; } return os.good(); diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C index 0327f163d56a6fb38d681b627a73b52ad14e979a..2e44f617da378c4911fb5987bc458ae9e718fe31 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -71,6 +69,7 @@ azizChen::azizChen setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar azizChen::unscaledEnergy(const scalar r) const @@ -84,15 +83,16 @@ scalar azizChen::unscaledEnergy(const scalar r) const F = exp(-pow(((D_ / x) - 1.0),2)); } - return epsilon_ * - ( - A_ * Foam::pow(x, gamma_) * exp(-alpha_ * x) - - ( - (C6_/ Foam::pow(x, 6)) - + (C8_/ Foam::pow(x, 8)) - + (C10_/ Foam::pow(x, 10)) - ) - * F + return + epsilon_ + *( + A_ * Foam::pow(x, gamma_)*exp(-alpha_*x) + - ( + (C6_/ Foam::pow(x, 6)) + + (C8_/ Foam::pow(x, 8)) + + (C10_/ Foam::pow(x, 10)) + ) + *F ); } @@ -112,7 +112,7 @@ bool azizChen::read(const dictionary& azizChen) azizChenCoeffs_.lookup("C10") >> C10_; azizChenCoeffs_.lookup("D") >> D_; azizChenCoeffs_.lookup("gamma") >> gamma_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H index 43a1ee9dca61e3c2d3926982a78153790fb3195a..53f93481281922d2094172101628956067d0137d 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -85,6 +85,7 @@ class azizChen scalar D_; scalar gamma_; + public: //- Runtime type information @@ -111,7 +112,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C index 0476e378da3fcde4a8417d81baa367da813652cc..7dd02320322136e8f29a46ed1e0a7010c46615db 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,7 @@ License \*---------------------------------------------------------------------------*/ #include "coulomb.H" +#include "mathematicalConstants.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,7 +46,8 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +scalar coulomb::oneOverFourPiEps0 = + 1.0/(4.0 * mathematicalConstant::pi * 8.854187817e-12); // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -61,11 +63,12 @@ coulomb::coulomb setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar coulomb::unscaledEnergy(const scalar r) const { - return 1.0/(4.0 * mathematicalConstant::pi * 8.854187817e-12 * r); + return oneOverFourPiEps0/r; } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H index 44e5e2cc5cfdeb1fe1290f9a8ccc57ac4d07fc85..f1e06712bb7b8ff3984a2ff62c41cacda0ce5c1e 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::pairPotentials::coulomb + Foam::pairPotentials::electrostatic Description @@ -53,13 +53,16 @@ class coulomb : public pairPotential { - public: //- Runtime type information TypeName("coulomb"); + // Static data members + + static scalar oneOverFourPiEps0; + // Constructors //- Construct from components @@ -80,7 +83,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.C new file mode 100644 index 0000000000000000000000000000000000000000..fd771e1854e3d44980b6dd86cfa1e746a4d40b78 --- /dev/null +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.C @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "dampedCoulomb.H" +#include "mathematicalConstants.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace pairPotentials +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(dampedCoulomb, 0); + +addToRunTimeSelectionTable +( + pairPotential, + dampedCoulomb, + dictionary +); + +scalar dampedCoulomb::oneOverFourPiEps0 = + 1.0/(4.0 * mathematicalConstant::pi * 8.854187817e-12); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +dampedCoulomb::dampedCoulomb +( + const word& name, + const dictionary& pairPotentialProperties +) +: + pairPotential(name, pairPotentialProperties), + dampedCoulombCoeffs_ + ( + pairPotentialProperties.subDict(typeName + "Coeffs") + ), + alpha_(readScalar(dampedCoulombCoeffs_.lookup("alpha"))) +{ + setLookupTables(); +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +scalar dampedCoulomb::unscaledEnergy(const scalar r) const +{ + return oneOverFourPiEps0*erfc(alpha_*r)/r; +} + + +bool dampedCoulomb::read(const dictionary& pairPotentialProperties) +{ + pairPotential::read(pairPotentialProperties); + + dampedCoulombCoeffs_ = + pairPotentialProperties.subDict(typeName + "Coeffs"); + + dampedCoulombCoeffs_.lookup("alpha") >> alpha_; + + return true; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace pairPotentials +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCECStencilObject.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.H similarity index 65% rename from src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCECStencilObject.H rename to src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.H index dc4544e9b37e1f30da30435a1bda61ca54998007..377b531824e4d520ccf3621672e1ae537e9e7585 100644 --- a/src/finiteVolume/fvMesh/extendedStencil/extendedStencilMeshObjects/upwindCECStencilObject.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,63 +23,82 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::upwindCECStencilObject + Foam::pairPotentials::electrostatic Description + SourceFiles + dampedCoulomb.C \*---------------------------------------------------------------------------*/ -#ifndef upwindCECStencilObject_H -#define upwindCECStencilObject_H +#ifndef dampedCoulomb_H +#define dampedCoulomb_H -#include "extendedUpwindStencil.H" -#include "cellEdgeCellStencil.H" -#include "MeshObject.H" +#include "pairPotential.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +namespace pairPotentials +{ /*---------------------------------------------------------------------------*\ - Class upwindCECStencilObject Declaration + Class dampedCoulomb Declaration \*---------------------------------------------------------------------------*/ -class upwindCECStencilObject +class dampedCoulomb : - public MeshObject<fvMesh, upwindCECStencilObject>, - public extendedUpwindStencil + public pairPotential { + // Private data + + dictionary dampedCoulombCoeffs_; + + scalar alpha_; + public: - TypeName("upwindCFCStencil"); + //- Runtime type information + TypeName("dampedCoulomb"); + + + // Static data members + + static scalar oneOverFourPiEps0; + // Constructors - //- Construct from uncompacted face stencil - explicit upwindCECStencilObject + //- Construct from components + dampedCoulomb ( - const fvMesh& mesh, - const scalar minOpposedness - ) - : - MeshObject<fvMesh, upwindCECStencilObject>(mesh), - extendedUpwindStencil(cellEdgeCellStencil(mesh), minOpposedness) - {} + const word& name, + const dictionary& pairPotentialProperties + ); // Destructor - virtual ~upwindCECStencilObject() + ~dampedCoulomb() {} + + + // Member Functions + + scalar unscaledEnergy(const scalar r) const; + + //- Read dictionary + bool read(const dictionary& pairPotentialProperties); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace pairPotentials } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C index ccd54ec787dd8a14a6ca466ed38f95a077beaf45..ae34ef4cdbc30f5dc58c3927f7a2f2c1eeb583a1 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -57,13 +55,17 @@ exponentialRepulsion::exponentialRepulsion ) : pairPotential(name, exponentialRepulsion), - exponentialRepulsionCoeffs_(exponentialRepulsion.subDict(typeName + "Coeffs")), + exponentialRepulsionCoeffs_ + ( + exponentialRepulsion.subDict(typeName + "Coeffs") + ), rm_(readScalar(exponentialRepulsionCoeffs_.lookup("rm"))), epsilon_(readScalar(exponentialRepulsionCoeffs_.lookup("epsilon"))) { setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar exponentialRepulsion::unscaledEnergy(const scalar r) const @@ -76,7 +78,8 @@ bool exponentialRepulsion::read(const dictionary& exponentialRepulsion) { pairPotential::read(exponentialRepulsion); - exponentialRepulsionCoeffs_ = exponentialRepulsion.subDict(typeName + "Coeffs"); + exponentialRepulsionCoeffs_ = + exponentialRepulsion.subDict(typeName + "Coeffs"); exponentialRepulsionCoeffs_.lookup("rm") >> rm_; exponentialRepulsionCoeffs_.lookup("epsilon") >> epsilon_; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H index cef45b7a3ae9c512305da12fa2c2c2291bedc38b..8ce1ee4a0f914faae42488a1712b370c29a4c978 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class exponentialRepulsion Declaration + Class exponentialRepulsion Declaration \*---------------------------------------------------------------------------*/ class exponentialRepulsion @@ -60,6 +60,7 @@ class exponentialRepulsion scalar rm_; scalar epsilon_; + public: //- Runtime type information @@ -86,7 +87,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C index 9c93f3a70e017ca9a285b9992370dd9052ef36c4..d5a1deb88e6e8c0426a8ffad5c6a2ebead09c4ac 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -64,6 +62,7 @@ lennardJones::lennardJones setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar lennardJones::unscaledEnergy(const scalar r) const diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H index f12027d1151eafa256ea8ced6130c17432cfa319..2ae3c036ae4bc893689d10de81741bfa6a22a22d 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class lennardJones Declaration + Class lennardJones Declaration \*---------------------------------------------------------------------------*/ class lennardJones @@ -60,6 +60,7 @@ class lennardJones scalar sigma_; scalar epsilon_; + public: //- Runtime type information @@ -86,7 +87,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C index a813495f2678ce51f2b2091a8d1858139827da90..7545573591bf22809f92db844cd65234b28a9809 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -66,6 +64,7 @@ maitlandSmith::maitlandSmith setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar maitlandSmith::unscaledEnergy(const scalar r) const @@ -90,7 +89,7 @@ bool maitlandSmith::read(const dictionary& maitlandSmith) maitlandSmithCoeffs_.lookup("gamma") >> gamma_; maitlandSmithCoeffs_.lookup("rm") >> rm_; maitlandSmithCoeffs_.lookup("epsilon") >> epsilon_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H index af4612644b5cd14bc3695a8b399da5d135bda24b..cdeb01211b58630e31f5d1044a94363a54ee28a8 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,7 +72,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class maitlandSmith Declaration + Class maitlandSmith Declaration \*---------------------------------------------------------------------------*/ class maitlandSmith @@ -88,6 +88,7 @@ class maitlandSmith scalar rm_; scalar epsilon_; + public: //- Runtime type information @@ -114,7 +115,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C index ca43080d7485662917c3fd3158d510bf12794a21..3326fd7fe1f41e5a723e0df06f75d91350cdf834 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -61,6 +59,7 @@ noInteraction::noInteraction setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar noInteraction::unscaledEnergy(const scalar r) const diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H index d09564ef882ab3d5b4f849c13e770c6b425590c4..5d3fd5742dbf0fe3290b28968a923659c6e7839f 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class noInteraction Declaration + Class noInteraction Declaration \*---------------------------------------------------------------------------*/ class noInteraction @@ -80,7 +80,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C index ef856bc50527ad70f8a554a9ce3ded45a89fd322..2d77c4ce59505c320590182f5eae168637f48cc4 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,9 +60,9 @@ void Foam::pairPotentialList::readPairPotentialDict else { FatalErrorIn("pairPotentialList::buildPotentials") << nl - << "Pair pairPotential specification subDict " - << idA << "-" << idB << " not found" - << nl << abort(FatalError); + << "Pair pairPotential specification subDict " + << idA << "-" << idB << " not found" + << nl << abort(FatalError); } } else @@ -80,10 +80,10 @@ void Foam::pairPotentialList::readPairPotentialDict else { FatalErrorIn("pairPotentialList::buildPotentials") << nl - << "Pair pairPotential specification subDict " - << idA << "-" << idB << " or " - << idB << "-" << idA << " not found" - << nl << abort(FatalError); + << "Pair pairPotential specification subDict " + << idA << "-" << idB << " or " + << idB << "-" << idA << " not found" + << nl << abort(FatalError); } if @@ -93,10 +93,10 @@ void Foam::pairPotentialList::readPairPotentialDict ) { FatalErrorIn("pairPotentialList::buildPotentials") << nl - << "Pair pairPotential specification subDict " - << idA << "-" << idB << " and " - << idB << "-" << idA << " found multiple definition" - << nl << abort(FatalError); + << "Pair pairPotential specification subDict " + << idA << "-" << idB << " and " + << idB << "-" << idA << " found multiple definition" + << nl << abort(FatalError); } } @@ -136,9 +136,41 @@ void Foam::pairPotentialList::readPairPotentialDict } } + if (!pairPotentialDict.found("electrostatic")) + { + FatalErrorIn("pairPotentialList::buildPotentials") << nl + << "Pair pairPotential specification subDict electrostatic" + << nl << abort(FatalError); + } + + electrostaticPotential_ = pairPotential::New + ( + "electrostatic", + pairPotentialDict.subDict("electrostatic") + ); + + if (electrostaticPotential_->rCut() > rCutMax_) + { + rCutMax_ = electrostaticPotential_->rCut(); + } + + if (electrostaticPotential_->writeTables()) + { + OFstream ppTabFile(mesh.time().path()/"electrostatic"); + + if(!electrostaticPotential_->writeEnergyAndForceTables(ppTabFile)) + { + FatalErrorIn("pairPotentialList::readPairPotentialDict") + << "Failed writing to " + << ppTabFile.name() << nl + << abort(FatalError); + } + } + rCutMaxSqr_ = rCutMax_*rCutMax_; } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::pairPotentialList::pairPotentialList() @@ -146,6 +178,7 @@ Foam::pairPotentialList::pairPotentialList() PtrList<pairPotential>() {} + Foam::pairPotentialList::pairPotentialList ( const List<word>& idList, @@ -188,13 +221,13 @@ const Foam::pairPotential& Foam::pairPotentialList::pairPotentialFunction const label b ) const { - return (*this)[pairPotentialIndex (a, b)]; + return (*this)[pairPotentialIndex(a, b)]; } bool Foam::pairPotentialList::rCutMaxSqr(const scalar rIJMagSqr) const { - if (rIJMagSqr <= rCutMaxSqr_) + if (rIJMagSqr < rCutMaxSqr_) { return true; } @@ -212,7 +245,7 @@ bool Foam::pairPotentialList::rCutSqr const scalar rIJMagSqr ) const { - if (rIJMagSqr <= rCutSqr (a, b)) + if (rIJMagSqr < rCutSqr(a, b)) { return true; } @@ -229,7 +262,7 @@ Foam::scalar Foam::pairPotentialList::rMin const label b ) const { - return (*this)[pairPotentialIndex (a, b)].rMin(); + return (*this)[pairPotentialIndex(a, b)].rMin(); } @@ -239,7 +272,7 @@ Foam::scalar Foam::pairPotentialList::dr const label b ) const { - return (*this)[pairPotentialIndex (a, b)].dr(); + return (*this)[pairPotentialIndex(a, b)].dr(); } @@ -249,7 +282,7 @@ Foam::scalar Foam::pairPotentialList::rCutSqr const label b ) const { - return (*this)[pairPotentialIndex (a, b)].rCutSqr(); + return (*this)[pairPotentialIndex(a, b)].rCutSqr(); } @@ -259,7 +292,7 @@ Foam::scalar Foam::pairPotentialList::rCut const label b ) const { - return (*this)[pairPotentialIndex (a, b)].rCut(); + return (*this)[pairPotentialIndex(a, b)].rCut(); } @@ -270,7 +303,7 @@ Foam::scalar Foam::pairPotentialList::force const scalar rIJMag ) const { - scalar f = (*this)[pairPotentialIndex (a, b)].forceLookup(rIJMag); + scalar f = (*this)[pairPotentialIndex(a, b)].force(rIJMag); return f; } @@ -283,11 +316,10 @@ Foam::scalar Foam::pairPotentialList::energy const scalar rIJMag ) const { - scalar e = (*this)[pairPotentialIndex (a, b)].energyLookup(rIJMag); + scalar e = (*this)[pairPotentialIndex(a, b)].energy(rIJMag); return e; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H index a7e8190a01bfccd986ffa79817fd492f500e78c2..b4193a46ae49df57ed5cbcda74f8657e4cdcece4 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,7 +47,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class pairPotentialList Declaration + Class pairPotentialList Declaration \*---------------------------------------------------------------------------*/ class pairPotentialList @@ -62,6 +62,9 @@ class pairPotentialList scalar rCutMaxSqr_; + autoPtr<pairPotential> electrostaticPotential_; + + // Private Member Functions inline label pairPotentialIndex @@ -83,6 +86,7 @@ class pairPotentialList //- Disallow default bitwise copy construct pairPotentialList(const pairPotentialList&); + public: // Constructors @@ -97,10 +101,12 @@ public: const polyMesh& mesh ); + // Destructor ~pairPotentialList(); + // Member Functions void buildPotentials @@ -110,6 +116,7 @@ public: const polyMesh& mesh ); + // Access inline scalar rCutMax() const; @@ -132,13 +139,13 @@ public: const scalar rIJMagSqr ) const; - scalar rMin (const label a, const label b) const; + scalar rMin(const label a, const label b) const; - scalar dr (const label a, const label b) const; + scalar dr(const label a, const label b) const; - scalar rCutSqr (const label a, const label b) const; + scalar rCutSqr(const label a, const label b) const; - scalar rCut (const label a, const label b) const; + scalar rCut(const label a, const label b) const; scalar force ( @@ -153,6 +160,8 @@ public: const label b, const scalar rIJMag ) const; + + inline const pairPotential& electrostatic() const; }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H index 413ffea05eb663c8bc7184801475fefee38d6dda..c14aa3695e189388a7be344c3ace053909b75249 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -56,6 +56,7 @@ inline Foam::label Foam::pairPotentialList::pairPotentialIndex return index; } + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::scalar Foam::pairPotentialList::rCutMax() const @@ -70,4 +71,10 @@ inline Foam::scalar Foam::pairPotentialList::rCutMaxSqr() const } +inline const Foam::pairPotential& Foam::pairPotentialList::electrostatic() const +{ + return electrostaticPotential_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/potential/potential.C b/src/lagrangian/molecularDynamics/potential/potential/potential.C index 16a7fca6cd8b56a16894df3363e8964d92e28f12..5532c2f105c0751eeb4bf966918e91fb12c09c10 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potential.C +++ b/src/lagrangian/molecularDynamics/potential/potential/potential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -365,8 +365,7 @@ void Foam::potential::potential::readMdInitialiseDict Foam::potential::potential(const polyMesh& mesh) : - mesh_(mesh), - electrostaticPotential_() + mesh_(mesh) { readPotentialDict(); } @@ -379,8 +378,7 @@ Foam::potential::potential IOdictionary& idListDict ) : - mesh_(mesh), - electrostaticPotential_() + mesh_(mesh) { readMdInitialiseDict(mdInitialiseDict, idListDict); } diff --git a/src/lagrangian/molecularDynamics/potential/potential/potential.H b/src/lagrangian/molecularDynamics/potential/potential/potential.H index 7accf239cd0f6fde38fca7dac2645b1f8206cfb5..32f9b2a1d29d98b82af3b4e760910f0548a057b2 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potential.H +++ b/src/lagrangian/molecularDynamics/potential/potential/potential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,7 +49,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class potential Declaration + Class potential Declaration \*---------------------------------------------------------------------------*/ class potential @@ -70,12 +70,11 @@ class potential pairPotentialList pairPotentials_; - electrostaticPotential electrostaticPotential_; - tetherPotentialList tetherPotentials_; vector gravity_; + // Private Member Functions void setSiteIdList(const IOdictionary& moleculePropertiesDict); @@ -110,6 +109,7 @@ public: IOdictionary& idListDict ); + // Destructor ~potential(); @@ -133,8 +133,6 @@ public: inline const pairPotentialList& pairPotentials() const; - inline const electrostaticPotential& electrostatic() const; - inline const tetherPotentialList& tetherPotentials() const; inline const vector& gravity() const; diff --git a/src/lagrangian/molecularDynamics/potential/potential/potentialI.H b/src/lagrangian/molecularDynamics/potential/potential/potentialI.H index eddd2b047ccdbb3d04e3997e20c47f304ccc8812..38ba634455761cc7416fe2123b48edc088304200 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potentialI.H +++ b/src/lagrangian/molecularDynamics/potential/potential/potentialI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::label Foam::potential::nIds() const @@ -70,13 +68,6 @@ inline const Foam::pairPotentialList& Foam::potential::pairPotentials() const } -inline const Foam::electrostaticPotential& -Foam::potential::electrostatic() const -{ - return electrostaticPotential_; -} - - inline const Foam::tetherPotentialList& Foam::potential::tetherPotentials() const { diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C index 4caba50778c52157ff789479ec2e6f4c61acf14b..85c8a703596579aca1b3af84b2dcb84a24ef0773 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,7 +39,11 @@ autoPtr<tetherPotential> tetherPotential::New const dictionary& tetherPotentialProperties ) { - word tetherPotentialTypeName(tetherPotentialProperties.lookup("tetherPotential")); + word + tetherPotentialTypeName + ( + tetherPotentialProperties.lookup("tetherPotential") + ); Info<< nl << "Selecting tether potential " << tetherPotentialTypeName << " for " @@ -54,8 +58,8 @@ autoPtr<tetherPotential> tetherPotential::New ( "tetherPotential::New()" ) << "Unknown tetherPotential type " - << tetherPotentialTypeName << endl << endl - << "Valid tetherPotentials are : " << endl + << tetherPotentialTypeName << nl << nl + << "Valid tetherPotentials are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C index 462be334561a6c1b3af9fd186d7f6b0c5c4e39b5..4c4708ba96a320c07cd81c7738ad0fa67477e9b7 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H index 19a9cddb77743a3d038ac9a51a457b21a9e12067..f65e5bb6b8593e9bfa28caec2dabd15c5ded5659 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class tetherPotential Declaration + Class tetherPotential Declaration \*---------------------------------------------------------------------------*/ class tetherPotential diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C index 453d5898ab85917cd511b02032dbd18f3f8f14bc..1edcc70a155fa5f1242623f97f6d4011226a7458 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H index 6508adaec902e78461435887b6f13081a6046210..4af51cfdff80706857f0a50322c78b5f73bf4b46 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace tetherPotentials { /*---------------------------------------------------------------------------*\ - Class harmonicSpring Declaration + Class harmonicSpring Declaration \*---------------------------------------------------------------------------*/ class harmonicSpring @@ -88,7 +88,7 @@ public: vector force(const vector r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& tetherPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C index 7e12f9ab74e93b82c2b5c9b25e28529c1c032fd9..8a3a081f6fc6bbdcf1e8cdb39df46f233dc97b2c 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H index 82b93b087b7fc542067afdb2d90aa4063f80bf5c..2bb98e39bd2063ccff4809f187f970de80baef46 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace tetherPotentials { /*---------------------------------------------------------------------------*\ - Class pitchForkRing Declaration + Class pitchForkRing Declaration \*---------------------------------------------------------------------------*/ class pitchForkRing @@ -90,7 +90,7 @@ public: vector force(const vector r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& tetherPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C index 45a48a4c623fbfa663b889ad142463c3d22d8c3f..5396013a173a973aa7302f5cc07e69889ff61b54 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -88,6 +86,7 @@ scalar restrainedHarmonicSpring::energy(const vector r) const } } + vector restrainedHarmonicSpring::force(const vector r) const { scalar magR = mag(r); @@ -102,7 +101,11 @@ vector restrainedHarmonicSpring::force(const vector r) const } } -bool restrainedHarmonicSpring::read(const dictionary& tetherPotentialProperties) + +bool restrainedHarmonicSpring::read +( + const dictionary& tetherPotentialProperties +) { tetherPotential::read(tetherPotentialProperties); diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H index 62b92618591cde2ab81918375ee98cf5d0638bd4..1711c4f5f3e5db5b35723de84bdc8aa082026f21 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace tetherPotentials { /*---------------------------------------------------------------------------*\ - Class restrainedHarmonicSpring Declaration + Class restrainedHarmonicSpring Declaration \*---------------------------------------------------------------------------*/ class restrainedHarmonicSpring @@ -90,7 +90,7 @@ public: vector force(const vector r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& tetherPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C index 79a1ce83d7a0922f4c4b5d7472d6ffa1fe555286..93498b8f711a2a8dc050e950e27eb51cc2ea1407 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -131,7 +131,7 @@ const Foam::tetherPotential& Foam::tetherPotentialList::tetherPotentialFunction const label a ) const { - return (*this)[tetherPotentialIndex (a)]; + return (*this)[tetherPotentialIndex(a)]; } @@ -141,7 +141,7 @@ Foam::vector Foam::tetherPotentialList::force const vector rIT ) const { - return (*this)[tetherPotentialIndex (a)].force(rIT); + return (*this)[tetherPotentialIndex(a)].force(rIT); } @@ -151,9 +151,8 @@ Foam::scalar Foam::tetherPotentialList::energy const vector rIT ) const { - return (*this)[tetherPotentialIndex (a)].energy(rIT); + return (*this)[tetherPotentialIndex(a)].energy(rIT); } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H index a48cc21edec46f805845e4fa84b7504660a39c37..8ca770f52351cd1de3f749428afb9be8474e8e6a 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,7 @@ class tetherPotentialList List<label> idMap_; + // Private Member Functions inline label tetherPotentialIndex @@ -92,10 +93,12 @@ public: const List<word>& tetherSiteIdList ); + // Destructor ~tetherPotentialList(); + // Member Functions void buildPotentials diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H index 67b1e4dbe62a97c3b38a41863bcd5e9c77b1d4b8..73834281efd0b4f92749800b1526b35841f0d440 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/solidParticle/solidParticle.C b/src/lagrangian/solidParticle/solidParticle.C index 7b9fdf18a6444245442508c3dcd2971b558c0671..e77b9cf8a2f94ac4fd8736e217b9b0ebb9de3874 100644 --- a/src/lagrangian/solidParticle/solidParticle.C +++ b/src/lagrangian/solidParticle/solidParticle.C @@ -84,12 +84,9 @@ bool Foam::solidParticle::move(solidParticle::trackData& td) if (onBoundary() && td.keepParticle) { - if (face() > -1) + if (isType<processorPolyPatch>(pbMesh[patch(face())])) { - if (isType<processorPolyPatch>(pbMesh[patch(face())])) - { - td.switchProcessor = true; - } + td.switchProcessor = true; } } } @@ -98,6 +95,28 @@ bool Foam::solidParticle::move(solidParticle::trackData& td) } +bool Foam::solidParticle::hitPatch +( + const polyPatch&, + solidParticle::trackData&, + const label +) +{ + return false; +} + + +bool Foam::solidParticle::hitPatch +( + const polyPatch&, + int&, + const label +) +{ + return false; +} + + void Foam::solidParticle::hitProcessorPatch ( const processorPolyPatch&, diff --git a/src/lagrangian/solidParticle/solidParticle.H b/src/lagrangian/solidParticle/solidParticle.H index a0977520cc07a9e6f63ea47162fa7b59de26f722..4847970f2fc452a29ba8384c3103f1251fecb63c 100644 --- a/src/lagrangian/solidParticle/solidParticle.H +++ b/src/lagrangian/solidParticle/solidParticle.H @@ -163,68 +163,91 @@ public: inline scalar wallImpactDistance(const vector& n) const; - //- Tracking - bool move(trackData&); + // Tracking + //- Move + bool move(trackData&); - //- Overridable function to handle the particle hitting a processorPatch - void hitProcessorPatch - ( - const processorPolyPatch&, - solidParticle::trackData& td - ); - //- Overridable function to handle the particle hitting a processorPatch - //- without trackData - void hitProcessorPatch - ( - const processorPolyPatch&, - int& - ); + // Patch interactions - //- Overridable function to handle the particle hitting a wallPatch - void hitWallPatch - ( - const wallPolyPatch&, - solidParticle::trackData& td - ); + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions + bool hitPatch + ( + const polyPatch&, + solidParticle::trackData& td, + const label patchI + ); - //- Overridable function to handle the particle hitting a wallPatch - //- without trackData - void hitWallPatch - ( - const wallPolyPatch&, - int& - ); + //- Overridable function to handle the particle hitting a patch + // Executed before other patch-hitting functions without trackData + bool hitPatch + ( + const polyPatch& p, + int& td, + const label patchI + ); - //- Overridable function to handle the particle hitting a polyPatch - void hitPatch - ( - const polyPatch&, - solidParticle::trackData& td - ); + //- Overridable function to handle the particle hitting a + // processorPatch + void hitProcessorPatch + ( + const processorPolyPatch&, + solidParticle::trackData& td + ); - //- Overridable function to handle the particle hitting a polyPatch - //- without trackData - void hitPatch - ( - const polyPatch&, - int& - ); + //- Overridable function to handle the particle hitting a + // processorPatch without trackData + void hitProcessorPatch + ( + const processorPolyPatch&, + int& + ); - //- Transform the physical properties of the particle - // according to the given transformation tensor - void transformProperties - ( - const tensor& T - ); + //- Overridable function to handle the particle hitting a wallPatch + void hitWallPatch + ( + const wallPolyPatch&, + solidParticle::trackData& td + ); - //- Transform the physical properties of the particle - // according to the given separation vector - void transformProperties - ( - const vector& separation - ); + //- Overridable function to handle the particle hitting a wallPatch + //- without trackData + void hitWallPatch + ( + const wallPolyPatch&, + int& + ); + + //- Overridable function to handle the particle hitting a polyPatch + void hitPatch + ( + const polyPatch&, + solidParticle::trackData& td + ); + + //- Overridable function to handle the particle hitting a polyPatch + //- without trackData + void hitPatch + ( + const polyPatch&, + int& + ); + + //- Transform the physical properties of the particle + // according to the given transformation tensor + void transformProperties + ( + const tensor& T + ); + + //- Transform the physical properties of the particle + // according to the given separation vector + void transformProperties + ( + const vector& separation + ); // I-O diff --git a/src/lagrangian/solidParticle/solidParticleCloud.H b/src/lagrangian/solidParticle/solidParticleCloud.H index 078594592d995164e62a5027cdb2fd1049e232e4..f171007ce35311aa54cee38788c642d71a3d8f58 100644 --- a/src/lagrangian/solidParticle/solidParticleCloud.H +++ b/src/lagrangian/solidParticle/solidParticleCloud.H @@ -108,10 +108,10 @@ public: void move(const dimensionedVector& g); - // I-O + // Write //- Write fields - void writeFields() const; + virtual void writeFields() const; }; diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files index d5133cb33dad9e45beb50fa4785fdaee749b2d39..a61d00246e04323e182603105061d72d9150acd6 100644 --- a/src/meshTools/Make/files +++ b/src/meshTools/Make/files @@ -90,6 +90,7 @@ $(cellSources)/nbrToCell/nbrToCell.C $(cellSources)/zoneToCell/zoneToCell.C $(cellSources)/sphereToCell/sphereToCell.C $(cellSources)/cylinderToCell/cylinderToCell.C +$(cellSources)/faceZoneToCell/faceZoneToCell.C faceSources = sets/faceSources $(faceSources)/faceToFace/faceToFace.C diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPatchBase.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPatchBase.H index 1a476f66a9eb392021ac0d8085bfbe804f82bccf..a3d936757eaa5fc190dfb7890ff2f0194406f9a8 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPatchBase.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPatchBase.H @@ -105,6 +105,7 @@ private: // - schedule mutable autoPtr<mapDistribute> mapPtr_; + // Private Member Functions //- Collect single list of samples and originating processor+face. @@ -162,7 +163,7 @@ private: public: //- Runtime type information - ClassName("directMappedPatchBase"); + TypeName("directMappedPatchBase"); // Constructors @@ -177,15 +178,14 @@ public: directMappedPatchBase(const polyPatch&, const directMappedPatchBase&); - // Destructor - - ~directMappedPatchBase(); - - void clearOut(); + //- Destructor + virtual ~directMappedPatchBase(); // Member functions + void clearOut(); + //- What to sample const sampleMode& mode() const { diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H index 522564b33775c89f135092dc1b161875c9a78ed0..fdd4baec85c9547ded1b7911c765d696c0d10946 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H @@ -151,9 +151,8 @@ public: } - // Destructor - - ~directMappedPolyPatch(); + //- Destructor + virtual ~directMappedPolyPatch(); // Member functions diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H index 407d62ddda2c07958a45b0ea642567ceaf4c1078..457552e42140f9a92a49b1ca3fd40ba99d1df1c9 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H @@ -158,9 +158,8 @@ public: } - // Destructor - - ~directMappedWallPolyPatch(); + //- Destructor + virtual ~directMappedWallPolyPatch(); // Member functions diff --git a/src/meshTools/meshTools/meshTools.C b/src/meshTools/meshTools/meshTools.C index 4568b32e38ad8179c9d280678be0a88cd416a116..0441013d46bcc3745b27645f4467525c3a47ea50 100644 --- a/src/meshTools/meshTools/meshTools.C +++ b/src/meshTools/meshTools/meshTools.C @@ -46,7 +46,7 @@ bool Foam::meshTools::visNormal return false; } } - + return true; } @@ -63,7 +63,7 @@ Foam::vectorField Foam::meshTools::calcBoxPointNormals(const primitivePatch& pp) octantNormal[pXmYpZ] = vector(1, -1, 1); octantNormal[mXpYpZ] = vector(-1, 1, 1); octantNormal[pXpYpZ] = vector(1, 1, 1); - + octantNormal /= mag(octantNormal); @@ -300,7 +300,7 @@ bool Foam::meshTools::edgeOnCell ) { return findIndex(mesh.edgeCells(edgeI), cellI) != -1; -} +} bool Foam::meshTools::edgeOnFace @@ -311,7 +311,7 @@ bool Foam::meshTools::edgeOnFace ) { return findIndex(mesh.faceEdges(faceI), edgeI) != -1; -} +} // Return true if faceI part of cellI @@ -635,9 +635,14 @@ Foam::label Foam::meshTools::walkFace } -void Foam::meshTools::constrainToMeshCentre(const polyMesh& mesh, point& pt) +void Foam::meshTools::constrainToMeshCentre +( + const polyMesh& mesh, + point& pt +) { const Vector<label>& dirs = mesh.geometricD(); + const point& min = mesh.bounds().min(); const point& max = mesh.bounds().max(); @@ -645,7 +650,7 @@ void Foam::meshTools::constrainToMeshCentre(const polyMesh& mesh, point& pt) { if (dirs[cmpt] == -1) { - pt[cmpt] = 0.5*(min[cmpt]+max[cmpt]); + pt[cmpt] = 0.5*(min[cmpt] + max[cmpt]); } } } @@ -658,6 +663,7 @@ void Foam::meshTools::constrainToMeshCentre ) { const Vector<label>& dirs = mesh.geometricD(); + const point& min = mesh.bounds().min(); const point& max = mesh.bounds().max(); @@ -679,7 +685,7 @@ void Foam::meshTools::constrainToMeshCentre { if (dirs[cmpt] == -1) { - pts[i][cmpt] = 0.5*(min[cmpt]+max[cmpt]); + pts[i][cmpt] = 0.5*(min[cmpt] + max[cmpt]); } } } @@ -688,10 +694,13 @@ void Foam::meshTools::constrainToMeshCentre //- Set the constrained components of directions/velocity to zero -void Foam::meshTools::constrainDirection(const polyMesh& mesh, vector& d) +void Foam::meshTools::constrainDirection +( + const polyMesh& mesh, + const Vector<label>& dirs, + vector& d +) { - const Vector<label>& dirs = mesh.geometricD(); - for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) { if (dirs[cmpt] == -1) @@ -702,10 +711,13 @@ void Foam::meshTools::constrainDirection(const polyMesh& mesh, vector& d) } -void Foam::meshTools::constrainDirection(const polyMesh& mesh, vectorField& d) +void Foam::meshTools::constrainDirection +( + const polyMesh& mesh, + const Vector<label>& dirs, + vectorField& d +) { - const Vector<label>& dirs = mesh.geometricD(); - bool isConstrained = false; for (direction cmpt=0; cmpt<vector::nComponents; cmpt++) { @@ -857,7 +869,7 @@ Foam::label Foam::meshTools::cutDirToEdge doneEdges.insert(e2); doneEdges.insert(e3); } - } + } } forAll(cEdges, cEdgeI) diff --git a/src/meshTools/meshTools/meshTools.H b/src/meshTools/meshTools/meshTools.H index 3710d5af06250dc654465ebcba5bb47697f13465..0bd033b8893dbbbf4a412a31710762d77f806010 100644 --- a/src/meshTools/meshTools/meshTools.H +++ b/src/meshTools/meshTools/meshTools.H @@ -215,7 +215,7 @@ namespace meshTools const label vertI ); - //- Return face on cell using edgeI but not faceI. Throws error + //- Return face on cell using edgeI but not faceI. Throws error // if none found. label otherFace ( @@ -225,7 +225,7 @@ namespace meshTools const label edgeI ); - //- Return cell on other side of face. Throws error + //- Return cell on other side of face. Throws error // if face not internal. label otherCell ( @@ -249,14 +249,32 @@ namespace meshTools // Constraints on position //- Set the constrained components of position to mesh centre - void constrainToMeshCentre(const polyMesh&, point&); - void constrainToMeshCentre(const polyMesh&, pointField&); + void constrainToMeshCentre + ( + const polyMesh& mesh, + point& pt + ); + void constrainToMeshCentre + ( + const polyMesh& mesh, + pointField& pt + ); //- Set the constrained components of directions/velocity to zero - void constrainDirection(const polyMesh&, vector&); - void constrainDirection(const polyMesh&, vectorField&); + void constrainDirection + ( + const polyMesh& mesh, + const Vector<label>& dirs, + vector& d + ); + void constrainDirection + ( + const polyMesh& mesh, + const Vector<label>& dirs, + vectorField& d + ); + - // Hex only functionality. //- Given edge on hex find other 'parallel', non-connected edges. @@ -287,7 +305,7 @@ namespace meshTools const label cellI, const vector& cutDir ); - + } // End namespace meshTools diff --git a/src/meshTools/searchableSurface/distributedTriSurfaceMesh.H b/src/meshTools/searchableSurface/distributedTriSurfaceMesh.H index 4d5f7dfd173edd6ccb3c559221de0564d46edc50..dba72d2abf4b1491be861f6e5dc825533d9b1427 100644 --- a/src/meshTools/searchableSurface/distributedTriSurfaceMesh.H +++ b/src/meshTools/searchableSurface/distributedTriSurfaceMesh.H @@ -354,8 +354,7 @@ public: //- Range of global indices that can be returned. virtual label globalSize() const { - const labelList& offsets = globalTris().offsets(); - return offsets[offsets.size()-1]; + return globalTris().size(); } virtual void findNearest diff --git a/src/meshTools/searchableSurface/searchableBox.C b/src/meshTools/searchableSurface/searchableBox.C index cb9ca7e4426cbc0397baf64d7188f2f9f5e1213e..8b4c0f5c76c5c8abfd0b0ab5f432e268766769a8 100644 --- a/src/meshTools/searchableSurface/searchableBox.C +++ b/src/meshTools/searchableSurface/searchableBox.C @@ -170,7 +170,20 @@ Foam::searchableBox::searchableBox : searchableSurface(io), treeBoundBox(bb) -{} +{ + if (!contains(midpoint())) + { + FatalErrorIn + ( + "Foam::searchableBox::searchableBox\n" + "(\n" + " const IOobject& io,\n" + " const treeBoundBox& bb\n" + ")\n" + ) << "Illegal bounding box specification : " + << static_cast<const treeBoundBox>(*this) << exit(FatalError); + } +} Foam::searchableBox::searchableBox @@ -181,7 +194,20 @@ Foam::searchableBox::searchableBox : searchableSurface(io), treeBoundBox(dict.lookup("min"), dict.lookup("max")) -{} +{ + if (!contains(midpoint())) + { + FatalErrorIn + ( + "Foam::searchableBox::searchableBox\n" + "(\n" + " const IOobject& io,\n" + " const treeBoundBox& bb\n" + ")\n" + ) << "Illegal bounding box specification : " + << static_cast<const treeBoundBox>(*this) << exit(FatalError); + } +} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.C b/src/meshTools/searchableSurface/searchableSurfaceCollection.C index 11b37bf97bba53761ebfe02e5e51016dfbd58435..306e78df25fd8242892b219ae4a9e63daf633be0 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceCollection.C +++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.C @@ -36,7 +36,12 @@ namespace Foam { defineTypeNameAndDebug(searchableSurfaceCollection, 0); -addToRunTimeSelectionTable(searchableSurface, searchableSurfaceCollection, dict); +addToRunTimeSelectionTable +( + searchableSurface, + searchableSurfaceCollection, + dict +); } @@ -63,15 +68,17 @@ void Foam::searchableSurfaceCollection::findNearest forAll(subGeom_, surfI) { - // Transform then divide - tmp<pointField> localSamples = cmptDivide + subGeom_[surfI].findNearest ( - transform_[surfI].localPosition(samples), - scale_[surfI] + cmptDivide // Transform then divide + ( + transform_[surfI].localPosition(samples), + scale_[surfI] + ), + localMinDistSqr, + hitInfo ); - subGeom_[surfI].findNearest(localSamples, localMinDistSqr, hitInfo); - forAll(hitInfo, pointI) { if (hitInfo[pointI].hit()) @@ -115,7 +122,8 @@ Foam::searchableSurfaceCollection::searchableSurfaceCollection instance_(dict.size()), scale_(dict.size()), transform_(dict.size()), - subGeom_(dict.size()) + subGeom_(dict.size()), + mergeSubRegions_(dict.lookup("mergeSubRegions")) { Info<< "SearchableCollection : " << name() << endl; @@ -181,12 +189,19 @@ const Foam::wordList& Foam::searchableSurfaceCollection::regions() const { regionOffset_[surfI] = allRegions.size(); - const wordList& subRegions = subGeom_[surfI].regions(); - - forAll(subRegions, i) + if (mergeSubRegions_) { - //allRegions.append(subRegions[i] + "_" + Foam::name(surfI)); - allRegions.append(instance_[surfI] + "_" + subRegions[i]); + // Single name regardless how many regions subsurface has + allRegions.append(instance_[surfI] + "_" + Foam::name(surfI)); + } + else + { + const wordList& subRegions = subGeom_[surfI].regions(); + + forAll(subRegions, i) + { + allRegions.append(instance_[surfI] + "_" + subRegions[i]); + } } } regions_.transfer(allRegions.shrink()); @@ -370,7 +385,15 @@ void Foam::searchableSurfaceCollection::getRegion {} else if (subGeom_.size() == 1) { - subGeom_[0].getRegion(info, region); + if (mergeSubRegions_) + { + region.setSize(info.size()); + region = regionOffset_[0]; + } + else + { + subGeom_[0].getRegion(info, region); + } } else { @@ -429,15 +452,25 @@ void Foam::searchableSurfaceCollection::getRegion // Collect points from my surface labelList indices(findIndices(nearestSurf, surfI)); - labelList surfRegion; - subGeom_[surfI].getRegion - ( - UIndirectList<pointIndexHit>(info, indices), - surfRegion - ); - forAll(indices, i) + if (mergeSubRegions_) { - region[indices[i]] = regionOffset_[surfI] + surfRegion[i]; + forAll(indices, i) + { + region[indices[i]] = regionOffset_[surfI]; + } + } + else + { + labelList surfRegion; + subGeom_[surfI].getRegion + ( + UIndirectList<pointIndexHit>(info, indices), + surfRegion + ); + forAll(indices, i) + { + region[indices[i]] = regionOffset_[surfI] + surfRegion[i]; + } } } } diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.H b/src/meshTools/searchableSurface/searchableSurfaceCollection.H index 9c39923747f9abcb1c21b4b4ce3993086ba14773..dd4c5fdce215c5ccf3743a97541f9075114c668e 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceCollection.H +++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.H @@ -26,7 +26,8 @@ Class Foam::searchableSurfaceCollection Description - Union of transformed searchableSurfaces + Set of transformed searchableSurfaces. Does not do boolean operations. + So when meshing might find parts 'inside'. SourceFiles searchableSurfaceCollection.C @@ -40,6 +41,7 @@ SourceFiles #include "treeBoundBox.H" #include "coordinateSystem.H" #include "UPtrList.H" +#include "Switch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -73,6 +75,8 @@ private: UPtrList<searchableSurface> subGeom_; + Switch mergeSubRegions_; + //- Region names mutable wordList regions_; //- From individual regions to collection regions diff --git a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.C b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.C new file mode 100644 index 0000000000000000000000000000000000000000..526620fe14746be56d0e433274be25edb0b5d8cd --- /dev/null +++ b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.C @@ -0,0 +1,185 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "faceZoneToCell.H" +#include "polyMesh.H" + +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + +defineTypeNameAndDebug(faceZoneToCell, 0); + +addToRunTimeSelectionTable(topoSetSource, faceZoneToCell, word); + +addToRunTimeSelectionTable(topoSetSource, faceZoneToCell, istream); + +} + + +Foam::topoSetSource::addToUsageTable Foam::faceZoneToCell::usage_ +( + faceZoneToCell::typeName, + "\n Usage: faceZoneToCell zone master|slave\n\n" + " Select master or slave side of the faceZone." + " Note:accepts wildcards for zone.\n\n" +); + + +template<> +const char* Foam::NamedEnum<Foam::faceZoneToCell::faceAction, 2>::names[] = +{ + "master", + "slave" +}; + + +const Foam::NamedEnum<Foam::faceZoneToCell::faceAction, 2> + Foam::faceZoneToCell::faceActionNames_; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::faceZoneToCell::combine(topoSet& set, const bool add) const +{ + bool hasMatched = false; + + forAll(mesh_.faceZones(), i) + { + const faceZone& zone = mesh_.faceZones()[i]; + + if (zoneName_.match(zone.name())) + { + const labelList& cellLabels = + ( + option_ == MASTER + ? zone.masterCells() + : zone.slaveCells() + ); + + Info<< " Found matching zone " << zone.name() + << " with " << cellLabels.size() << " cells on selected side." + << endl; + + hasMatched = true; + + forAll(cellLabels, i) + { + // Only do active cells + if (cellLabels[i] < mesh_.nCells()) + { + addOrDelete(set, cellLabels[i], add); + } + } + } + } + + if (!hasMatched) + { + WarningIn("faceZoneToCell::combine(topoSet&, const bool)") + << "Cannot find any faceZone named " << zoneName_ << endl + << "Valid names are " << mesh_.faceZones().names() << endl; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +Foam::faceZoneToCell::faceZoneToCell +( + const polyMesh& mesh, + const word& zoneName, + const faceAction option +) +: + topoSetSource(mesh), + zoneName_(zoneName), + option_(option) +{} + + +// Construct from dictionary +Foam::faceZoneToCell::faceZoneToCell +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + zoneName_(dict.lookup("name")), + option_(faceActionNames_.read(dict.lookup("option"))) +{} + + +// Construct from Istream +Foam::faceZoneToCell::faceZoneToCell +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + zoneName_(checkIs(is)), + option_(faceActionNames_.read(checkIs(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::faceZoneToCell::~faceZoneToCell() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::faceZoneToCell::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding all " << faceActionNames_[option_] + << " cells of faceZone " << zoneName_ << " ..." << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing all " << faceActionNames_[option_] + << " cells of faceZone " << zoneName_ << " ..." << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H new file mode 100644 index 0000000000000000000000000000000000000000..b09c58399fcca136725ec959690542ff25221318 --- /dev/null +++ b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H @@ -0,0 +1,138 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::faceZoneToCell + +Description + A topoSetSource to select cells based on side of faceZone. + +SourceFiles + faceZoneToCell.C + +\*---------------------------------------------------------------------------*/ + +#ifndef faceZoneToCell_H +#define faceZoneToCell_H + +#include "topoSetSource.H" +#include "wordRe.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class faceZoneToCell Declaration +\*---------------------------------------------------------------------------*/ + +class faceZoneToCell +: + public topoSetSource +{ +public: + //- Enumeration defining the valid options + enum faceAction + { + MASTER, + SLAVE + }; + +private: + + // Private data + + static const NamedEnum<faceAction, 2> faceActionNames_; + + //- Add usage string + static addToUsageTable usage_; + + //- Name/regular expression of faceZone + wordRe zoneName_; + + //- Option + faceAction option_; + + + // Private Member Functions + + void combine(topoSet& set, const bool add) const; + + +public: + + //- Runtime type information + TypeName("faceZoneToCell"); + + // Constructors + + //- Construct from components + faceZoneToCell + ( + const polyMesh& mesh, + const word& zoneName, + const faceAction option + ); + + //- Construct from dictionary + faceZoneToCell + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + faceZoneToCell + ( + const polyMesh& mesh, + Istream& + ); + + + // Destructor + + virtual ~faceZoneToCell(); + + + // Member Functions + + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C index 0dcd1e0ffb8b733911aebf50cdaab88e67a0c0f9..14b6deb7f37771b062c29e8d635f7feae33448aa 100644 --- a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C +++ b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C @@ -47,7 +47,8 @@ Foam::topoSetSource::addToUsageTable Foam::zoneToCell::usage_ ( zoneToCell::typeName, "\n Usage: zoneToCell zone\n\n" - " Select all cells in the cellZone\n\n" + " Select all cells in the cellZone." + " Note:accepts wildcards for zone.\n\n" ); diff --git a/src/meshTools/sets/faceSources/patchToFace/patchToFace.C b/src/meshTools/sets/faceSources/patchToFace/patchToFace.C index 9bcf49690ffc285ae3db1568476ba31edc0e9353..000db639a96180f2e24ada7aa4f08b4a621685e4 100644 --- a/src/meshTools/sets/faceSources/patchToFace/patchToFace.C +++ b/src/meshTools/sets/faceSources/patchToFace/patchToFace.C @@ -49,7 +49,7 @@ Foam::topoSetSource::addToUsageTable Foam::patchToFace::usage_ ( patchToFace::typeName, "\n Usage: patchToFace patch\n\n" - " Select all faces in the patch\n\n" + " Select all faces in the patch. Note:accepts wildcards for patch.\n\n" ); diff --git a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C index 12cbab560d68ff36281aa34ca6bead1a4b8926f9..465632f2b1091fcdf774b99a0eb076ab16600d15 100644 --- a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C +++ b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C @@ -47,7 +47,8 @@ Foam::topoSetSource::addToUsageTable Foam::zoneToFace::usage_ ( zoneToFace::typeName, "\n Usage: zoneToFace zone\n\n" - " Select all faces in the faceZone\n\n" + " Select all faces in the faceZone." + " Note:accepts wildcards for zone.\n\n" ); diff --git a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C index 4b5148c558c8d0915109d9e87591076d705db5fc..0558093afa54d58b53c6c6eed6435a7dba6f6798 100644 --- a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C +++ b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C @@ -47,7 +47,8 @@ Foam::topoSetSource::addToUsageTable Foam::zoneToPoint::usage_ ( zoneToPoint::typeName, "\n Usage: zoneToPoint zone\n\n" - " Select all points in the pointZone\n\n" + " Select all points in the pointZone." + " Note:accepts wildcards for zone.\n\n" ); diff --git a/src/postProcessing/functionObjects/Allwmake b/src/postProcessing/functionObjects/Allwmake index 051f73227f574ad9d0be87941e07f54dd0c49337..6c642dfe7b6333d4e71ab8c22f4458da73294503 100755 --- a/src/postProcessing/functionObjects/Allwmake +++ b/src/postProcessing/functionObjects/Allwmake @@ -4,6 +4,7 @@ set -x wmake libso field wmake libso forces +wmake libso IO wmake libso utilities wmake libso systemCall diff --git a/src/postProcessing/functionObjects/IO/Make/files b/src/postProcessing/functionObjects/IO/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..a3517e560f1e3a3349b3dee8930ec12a8e420086 --- /dev/null +++ b/src/postProcessing/functionObjects/IO/Make/files @@ -0,0 +1,4 @@ +writeRegisteredObject/writeRegisteredObject.C +writeRegisteredObject/writeRegisteredObjectFunctionObject.C + +LIB = $(FOAM_LIBBIN)/libIOFunctionObjects diff --git a/src/postProcessing/functionObjects/IO/Make/options b/src/postProcessing/functionObjects/IO/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..5166bcc9e32f547f48a5f87c9c60d7210409967f --- /dev/null +++ b/src/postProcessing/functionObjects/IO/Make/options @@ -0,0 +1,9 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude + +LIB_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -lsampling diff --git a/src/lagrangian/dieselSpray/sprayThermoTypes/sprayThermoTypes.H b/src/postProcessing/functionObjects/IO/writeRegisteredObject/IOwriteRegisteredObject.H similarity index 78% rename from src/lagrangian/dieselSpray/sprayThermoTypes/sprayThermoTypes.H rename to src/postProcessing/functionObjects/IO/writeRegisteredObject/IOwriteRegisteredObject.H index b52f690b5f88384469aea4b0c402217db41993a7..cb014395c95ecb15909e1c26aae0b9b0bf8f9e91 100644 --- a/src/lagrangian/dieselSpray/sprayThermoTypes/sprayThermoTypes.H +++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/IOwriteRegisteredObject.H @@ -23,30 +23,24 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Typedef - Foam::specieProperties + Foam::IOwriteRegisteredObject Description - Foam::specieProperties + Instance of the generic IOOutputFilter for writeRegisteredObject. \*---------------------------------------------------------------------------*/ -#ifndef sprayThermoTypes_H -#define sprayThermoTypes_H +#ifndef IOwriteRegisteredObject_H +#define IOwriteRegisteredObject_H -#include "sutherlandTransport.H" -#include "specieThermo.H" -#include "janafThermo.H" -#include "perfectGas.H" +#include "writeRegisteredObject.H" +#include "IOOutputFilter.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - typedef sutherlandTransport<specieThermo<janafThermo<perfectGas> > > - specieProperties; - - // typedef sutherlandTransport<specieThermo<hConstThermo<perfectGas> > > - // specieProperties; + typedef IOOutputFilter<writeRegisteredObject> IOwriteRegisteredObject; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C new file mode 100644 index 0000000000000000000000000000000000000000..b5ad785ab164d7fb424ea8310066d415c372cf0f --- /dev/null +++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.C @@ -0,0 +1,123 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "writeRegisteredObject.H" +#include "dictionary.H" +#include "Time.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(writeRegisteredObject, 0); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::writeRegisteredObject::writeRegisteredObject +( + const word& name, + const objectRegistry& obr, + const dictionary& dict, + const bool loadFromFiles +) +: + name_(name), + obr_(obr), + active_(true), + objectNames_() +{ + read(dict); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::writeRegisteredObject::~writeRegisteredObject() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::writeRegisteredObject::read(const dictionary& dict) +{ + if (active_) + { + dict.lookup("objectNames") >> objectNames_; + + forAll(objectNames_, i) + { + if (obr_.foundObject<regIOobject>(objectNames_[i])) + { + regIOobject& obj = + const_cast<regIOobject&> + ( + obr_.lookupObject<regIOobject>(objectNames_[i]) + ); + obj.writeOpt() = IOobject::NO_WRITE; + } + else + { + FatalErrorIn + ( + "Foam::writeRegisteredObject::read(const dictionary&)" + ) << "Object " << objectNames_[i] << " not found in " + << "database. Available objects are:" << nl << obr_.toc() + << nl << exit(FatalError); + } + } + } +} + + +void Foam::writeRegisteredObject::execute() +{ + // Do nothing - only valid on write +} + + +void Foam::writeRegisteredObject::end() +{ + // Do nothing - only valid on write +} + + +void Foam::writeRegisteredObject::write() +{ + if (active_) + { + forAll(objectNames_, i) + { + const regIOobject& obj = + obr_.lookupObject<regIOobject>(objectNames_[i]); + obj.write(); + } + } +} + + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H new file mode 100644 index 0000000000000000000000000000000000000000..6cfeaa5e0b88de7c7690cd1724f28a43f6bad72b --- /dev/null +++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObject.H @@ -0,0 +1,150 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::writeRegisteredObject + +Description + Takes over the writing of registered IO objects + +SourceFiles + writeRegisteredObject.C + IOwriteRegisteredObject.H + +\*---------------------------------------------------------------------------*/ + +#ifndef writeRegisteredObject_H +#define writeRegisteredObject_H + +#include "pointFieldFwd.H" +#include "wordList.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class objectRegistry; +class dictionary; +class mapPolyMesh; + +/*---------------------------------------------------------------------------*\ + Class writeRegisteredObject Declaration +\*---------------------------------------------------------------------------*/ + +class writeRegisteredObject +{ +protected: + + // Private data + + //- Name of this set of writeRegisteredObject + word name_; + + const objectRegistry& obr_; + + //- On/off switch + bool active_; + + + // Read from dictionary + + //- Names of objects to control + wordList objectNames_; + + + // Private Member Functions + + + //- Disallow default bitwise copy construct + writeRegisteredObject(const writeRegisteredObject&); + + //- Disallow default bitwise assignment + void operator=(const writeRegisteredObject&); + + +public: + + //- Runtime type information + TypeName("writeRegisteredObject"); + + + // Constructors + + //- Construct for given objectRegistry and dictionary. + // Allow the possibility to load fields from files + writeRegisteredObject + ( + const word& name, + const objectRegistry&, + const dictionary&, + const bool loadFromFiles = false + ); + + + //- Destructor + virtual ~writeRegisteredObject(); + + + // Member Functions + + //- Return name of the writeRegisteredObject + virtual const word& name() const + { + return name_; + } + + //- Read the writeRegisteredObject data + virtual void read(const dictionary&); + + //- Execute, currently does nothing + virtual void execute(); + + //- Execute at the final time-loop, currently does nothing + virtual void end(); + + //- Write the writeRegisteredObject + virtual void write(); + + //- Update for changes of mesh + virtual void updateMesh(const mapPolyMesh&) + {} + + //- Update for changes of mesh + virtual void movePoints(const pointField&) + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.C b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.C new file mode 100644 index 0000000000000000000000000000000000000000..9b4c324c9d08ae1d1a5d0da5df32bed853d543a0 --- /dev/null +++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.C @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "writeRegisteredObjectFunctionObject.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineNamedTemplateTypeNameAndDebug + ( + writeRegisteredObjectFunctionObject, + 0 + ); + + addToRunTimeSelectionTable + ( + functionObject, + writeRegisteredObjectFunctionObject, + dictionary + ); +} + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H new file mode 100644 index 0000000000000000000000000000000000000000..284aa6c17a77ad26a05c9af0c06d6117f6520fe4 --- /dev/null +++ b/src/postProcessing/functionObjects/IO/writeRegisteredObject/writeRegisteredObjectFunctionObject.H @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Typedef + Foam::writeRegisteredObjectFunctionObject + +Description + FunctionObject wrapper around writeRegisteredObject to allow them to be + created via the functions list within controlDict. + +SourceFiles + writeRegisteredObjectFunctionObject.C + +\*---------------------------------------------------------------------------*/ + +#ifndef writeRegisteredObjectFunctionObject_H +#define writeRegisteredObjectFunctionObject_H + +#include "writeRegisteredObject.H" +#include "OutputFilterFunctionObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef OutputFilterFunctionObject<writeRegisteredObject> + writeRegisteredObjectFunctionObject; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/IOfieldMinMax.H b/src/postProcessing/functionObjects/field/fieldMinMax/IOfieldMinMax.H index 6215d670ca4c15b329e6f186762d1610e56d58f6..90b2d1484018d6e689dcf82819d21d91583af49f 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/IOfieldMinMax.H +++ b/src/postProcessing/functionObjects/field/fieldMinMax/IOfieldMinMax.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C index 509e483f2b79c0b07b7d928a998f9d1b8b67f1fe..ec77782df4e7100291150b701ecb5bafb280bc0b 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C +++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H index 812359f71caa3edffcf8b43629c58db520f05823..8c8a3aaf479a3a788b43fd07d9ae1af829fa0f86 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H +++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMax.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.C b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.C index 384388833fe64bba0bdf69f0e59ff42b72ed2906..ad124b6e7b0f6254ee8a9b7b79e3fd546d0ed236 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.C +++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H index 7d9240ab7ecdd9e857d6ed24c64a693368477c2e..a5af27af513d1a0de44cd25052b0aae687ece873 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H +++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxFunctionObject.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C index 06d6bd585e447b36db17f970c12fdd62c35820d4..25daf62dd6ee73ecaacf41d0a340eb7d30332327 100644 --- a/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldMinMax/fieldMinMaxTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/systemCall/IOsystemCall.H b/src/postProcessing/functionObjects/systemCall/IOsystemCall.H index beb33d593c6f0cc3515952c5bb623821c9a60aac..827569da14d636245e534d097737f4e31d60e92c 100644 --- a/src/postProcessing/functionObjects/systemCall/IOsystemCall.H +++ b/src/postProcessing/functionObjects/systemCall/IOsystemCall.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/systemCall/systemCall.C b/src/postProcessing/functionObjects/systemCall/systemCall.C index 6fdf84d70c6adf76c53cb729e58d4667e38b9379..44f7948c80a1bdd00a524b4b7e69a1058a7f5cf7 100644 --- a/src/postProcessing/functionObjects/systemCall/systemCall.C +++ b/src/postProcessing/functionObjects/systemCall/systemCall.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/systemCall/systemCall.H b/src/postProcessing/functionObjects/systemCall/systemCall.H index 6dc8fed5294e6f3d7a8b58f17208581cb09437d3..042ee0fc4d8667749314e03cea856dbff25c6016 100644 --- a/src/postProcessing/functionObjects/systemCall/systemCall.H +++ b/src/postProcessing/functionObjects/systemCall/systemCall.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.C b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.C index 096b43ca1cafc3bec63e72550886410c42b56cc6..196ed81e5cc1213b0b234b92d66d5a9899974014 100644 --- a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.C +++ b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H index 875c78970bf928d6b05c43647f6df51aa12f76e6..ad4f429cabd8feb81cfca8de8748e99b04dd2fd6 100644 --- a/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H +++ b/src/postProcessing/functionObjects/systemCall/systemCallFunctionObject.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/IOdsmcFields.C b/src/postProcessing/functionObjects/utilities/dsmcFields/IOdsmcFields.C index 32627acb3c5ceb3e2873fe858317d3e8af80114d..01a2d6b9ffb49996efb43e7d91d8d8964078ac8e 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/IOdsmcFields.C +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/IOdsmcFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C index 273c88f3699822572bce150ad303b3224f5574ce..8957dee17cda6ce696f191b04e79c4347f020994 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H index b53dda6700040633582cdc054b92eb4aee4ee5ab..3e6b33c0d37ed766bd83480e540cc583d58508e9 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFields.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.C b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.C index cd5324f25b103be5086875e4863677e053ce95ee..b2bb31b828561462d662a41ec9acad29f28abf44 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.C +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H index cf34cdaa2e4d9a2ef03fa1fbee6644c4bf63ea1a..758626798c8563a706959d890368ba74f44e9dd3 100644 --- a/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H +++ b/src/postProcessing/functionObjects/utilities/dsmcFields/dsmcFieldsFunctionObject.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/IOstaticPressure.H b/src/postProcessing/functionObjects/utilities/staticPressure/IOstaticPressure.H index 8409c7f103b4c0d319d74acdedc5f8a85c763c53..524e44514445e362e801528435777b68211c257f 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/IOstaticPressure.H +++ b/src/postProcessing/functionObjects/utilities/staticPressure/IOstaticPressure.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C index 9ca4f715df0025bee3e4e2c11c4e7f5cd7796d0a..b746987f3c17ed9ad2789622cc0ea2c56c29fd0b 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C +++ b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -127,11 +127,11 @@ void Foam::staticPressure::write() { const volScalarField& p = obr_.lookupObject<volScalarField>(pName_); - volScalarField pDyn + volScalarField pStatic ( IOobject ( - "pDyn", + "pStatic", obr_.time().timeName(), obr_, IOobject::NO_READ @@ -139,7 +139,7 @@ void Foam::staticPressure::write() dimensionedScalar("rho", dimDensity, rho_)*p ); - pDyn.write(); + pStatic.write(); } } diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.H b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.H index 0a7be2c6204bf045fd6f951e6cce23f33e8712f2..71c4fd3516b5d9947dbe70ac694b12de1f7258f0 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.H +++ b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressure.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.C b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.C index d84c802a4a8825cbaf49cd978f10b077fbf24a33..9d13a5739e03b9e8adf1fd36e79813d7aeb28d62 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.C +++ b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H index 40f425d4b1892b8f09aa0edb442a44d2fae72614..0ddb184d22edc949f28fb4cdcc79c02d1bfc3364 100644 --- a/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H +++ b/src/postProcessing/functionObjects/utilities/staticPressure/staticPressureFunctionObject.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/postProcessing/functionObjects/zones/Make/files b/src/postProcessing/functionObjects/zones/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..90e33f75241df48dde2b4749d723aff3fc660b82 --- /dev/null +++ b/src/postProcessing/functionObjects/zones/Make/files @@ -0,0 +1,4 @@ +faceZoneIntegration/faceZonesIntegration.C +faceZoneIntegration/faceZonesIntegrationFunctionObject.C + +LIB = $(FOAM_LIBBIN)/libzoneFunctionObjects diff --git a/src/postProcessing/functionObjects/zones/Make/options b/src/postProcessing/functionObjects/zones/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..5166bcc9e32f547f48a5f87c9c60d7210409967f --- /dev/null +++ b/src/postProcessing/functionObjects/zones/Make/options @@ -0,0 +1,9 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude + +LIB_LIBS = \ + -lfiniteVolume \ + -lmeshTools \ + -lsampling diff --git a/src/postProcessing/functionObjects/zones/faceZoneIntegration/IOfaceZonesIntegration.H b/src/postProcessing/functionObjects/zones/faceZoneIntegration/IOfaceZonesIntegration.H new file mode 100644 index 0000000000000000000000000000000000000000..ef1ecbf0043aa34d098f0f2db829ee69e9c955fe --- /dev/null +++ b/src/postProcessing/functionObjects/zones/faceZoneIntegration/IOfaceZonesIntegration.H @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Typedef + Foam::IOfaceZonesIntegration + +Description + Instance of the generic IOOutputFilter for faceZonesIntegration. + +\*---------------------------------------------------------------------------*/ + +#ifndef IOfaceZonesIntegration_H +#define IOfaceZonesIntegration_H + +#include "faceZonesIntegration.H" +#include "IOOutputFilter.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef IOOutputFilter<faceZonesIntegration> IOfaceZonesIntegration; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegration.C b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegration.C new file mode 100644 index 0000000000000000000000000000000000000000..0b8314667c728839bc11e72eddc2149e94026fdd --- /dev/null +++ b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegration.C @@ -0,0 +1,322 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "faceZonesIntegration.H" +#include "volFields.H" +#include "dictionary.H" +#include "Time.H" +#include "IOmanip.H" +#include "ListListOps.H" +#include "processorPolyPatch.H" +#include "cyclicPolyPatch.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(faceZonesIntegration, 0); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::faceZonesIntegration::faceZonesIntegration +( + const word& name, + const objectRegistry& obr, + const dictionary& dict, + const bool loadFromFiles +) +: + name_(name), + obr_(obr), + active_(true), + log_(false), + faceZonesSet_(), + fItems_(), + faceZonesIntegrationFilePtr_(NULL) +{ + // Check if the available mesh is an fvMesh otherise deactivate + if (!isA<fvMesh>(obr_)) + { + active_ = false; + WarningIn + ( + "Foam::faceZonesIntegration::faceZonesIntegration" + "(" + "const word&, " + "const objectRegistry&, " + "const dictionary&, " + "const bool" + ")" + ) << "No fvMesh available, deactivating." + << endl; + } + + read(dict); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::faceZonesIntegration::~faceZonesIntegration() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::faceZonesIntegration::read(const dictionary& dict) +{ + if (active_) + { + log_ = dict.lookupOrDefault<Switch>("log", false); + + dict.lookup("fields") >> fItems_; + + dict.lookup("faceZones") >> faceZonesSet_; + } +} + + +void Foam::faceZonesIntegration::makeFile() +{ + // Create the face Zone file if not already created + if (faceZonesIntegrationFilePtr_.empty()) + { + if (debug) + { + Info<< "Creating faceZonesIntegration file." << endl; + } + + // File update + if (Pstream::master()) + { + fileName faceZonesIntegrationDir; + if (Pstream::parRun()) + { + // Put in undecomposed case (Note: gives problems for + // distributed data running) + faceZonesIntegrationDir = + obr_.time().path()/".."/name_/obr_.time().timeName(); + } + else + { + faceZonesIntegrationDir = + obr_.time().path()/name_/obr_.time().timeName(); + } + + // Create directory if does not exist. + mkDir(faceZonesIntegrationDir); + + // Open new file at start up + faceZonesIntegrationFilePtr_.resize(fItems_.size()); + + forAll(fItems_, Ifields) + { + const word& fieldName = fItems_[Ifields]; + + OFstream* sPtr = new OFstream + ( + faceZonesIntegrationDir/fieldName + ); + + faceZonesIntegrationFilePtr_.insert(fieldName, sPtr); + } + + // Add headers to output data + writeFileHeader(); + } + } +} + + +void Foam::faceZonesIntegration::writeFileHeader() +{ + forAllIter(HashPtrTable<OFstream>, faceZonesIntegrationFilePtr_, iter) + { + unsigned int w = IOstream::defaultPrecision() + 7; + + OFstream& os = *faceZonesIntegrationFilePtr_[iter.key()]; + + os << "#Time " << setw(w); + + forAll (faceZonesSet_, zoneI) + { + const word name = faceZonesSet_[zoneI]; + os << name << setw(w); + } + + os << nl << endl; + } +} + + +void Foam::faceZonesIntegration::execute() +{ + // Do nothing - only valid on write +} + + +void Foam::faceZonesIntegration::end() +{ + // Do nothing - only valid on write +} + + +void Foam::faceZonesIntegration::write() +{ + if (active_) + { + makeFile(); + scalar dm = 0.0; + forAll(fItems_, fieldI) + { + const word& fieldName = fItems_[fieldI]; + + const surfaceScalarField& fD = + obr_.lookupObject<surfaceScalarField>(fieldName); + + const fvMesh& mesh = fD.mesh(); + + unsigned int w = IOstream::defaultPrecision() + 7; + + if + ( + Pstream::master() + && faceZonesIntegrationFilePtr_.found(fieldName) + ) + { + OFstream& os = *faceZonesIntegrationFilePtr_(fieldName); + + os << obr_.time().value(); + + const faceZoneMesh& faceZoneList = mesh.faceZones(); + + forAll(faceZonesSet_, zoneI) + { + const word name = faceZonesSet_[zoneI]; + + label zoneID = faceZoneList.findZoneID(name); + + const faceZone& fz = mesh.faceZones()[zoneID]; + + dm = calcFaceZonesIntegral(fD, fz); + + reduce(dm, sumOp<scalar>()); + + os << ' ' << setw(w) << dm; + + if (log_) + { + Info<< "faceZonesIntegration output:" << nl + << " Integration" << dm << endl; + } + } + + os << endl; + } + } + } +} + + +Foam::scalar Foam::faceZonesIntegration::calcFaceZonesIntegral +( + const surfaceScalarField& fD, + const faceZone& fz +) const +{ + scalar dm = 0.0; + const fvMesh& mesh = fD.mesh(); + + forAll (fz, i) + { + label faceI = fz[i]; + + if (mesh.isInternalFace(faceI)) + { + if (fz.flipMap()[faceI]) + { + dm -= fD[faceI]; + } + else + { + dm += fD[faceI]; + } + } + else + { + label patchI = mesh.boundaryMesh().whichPatch(faceI); + const polyPatch& pp = mesh.boundaryMesh()[patchI]; + if (isA<processorPolyPatch>(pp)) + { + if (refCast<const processorPolyPatch>(pp).owner()) + { + if (fz.flipMap()[faceI]) + { + dm -= fD.boundaryField()[patchI][pp.whichFace(faceI)]; + } + else + { + dm += fD.boundaryField()[patchI][pp.whichFace(faceI)]; + } + } + } + else if (isA<cyclicPolyPatch>(pp)) + { + label patchFaceI = faceI - pp.start(); + if (patchFaceI < pp.size()/2) + { + if (fz.flipMap()[patchFaceI]) + { + dm -= fD.boundaryField()[patchI][patchFaceI]; + } + else + { + dm += fD.boundaryField()[patchI][patchFaceI]; + } + } + } + else if (!isA<emptyPolyPatch>(pp)) + { + label patchFaceI = faceI - pp.start(); + if (fz.flipMap()[patchFaceI]) + { + dm -= fD.boundaryField()[patchI][patchFaceI]; + } + else + { + dm += fD.boundaryField()[patchI][patchFaceI]; + } + } + } + } + + return dm; +} + + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegration.H b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegration.H new file mode 100644 index 0000000000000000000000000000000000000000..5fc957bba739954dcf3181cd03d5a7f654e6609f --- /dev/null +++ b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegration.H @@ -0,0 +1,178 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::faceZonesIntegration + +Description + Integrates surfaceScalarFields on faceZones + +SourceFiles + faceZonesIntegration.C + IOfaceZonesIntegration.H + +\*---------------------------------------------------------------------------*/ + +#ifndef faceZonesIntegration_H +#define faceZonesIntegration_H + +#include "fvCFD.H" +#include "primitiveFieldsFwd.H" +#include "volFieldsFwd.H" +#include "HashPtrTable.H" +#include "OFstream.H" +#include "Switch.H" +#include "pointFieldFwd.H" +#include "polyMesh.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class objectRegistry; +class dictionary; +class mapPolyMesh; + +/*---------------------------------------------------------------------------*\ + Class faceZonesIntegration Declaration +\*---------------------------------------------------------------------------*/ + +class faceZonesIntegration +{ + +protected: + + // Private data + + //- Name of this set of face zone integration, + // Also used as the name of the probes directory. + word name_; + + const objectRegistry& obr_; + + //- on/off switch + bool active_; + + //- Switch to send output to Info as well as to file + Switch log_; + + //- Current open files + HashPtrTable<OFstream> faceZonesIntegrationFilePtr_; + + // Read from dictionary + + //- faceZones to integrate over + wordList faceZonesSet_; + + //- Names of the surface fields + wordList fItems_; + + + // Private Member Functions + + //- If the integration file has not been created create it + void makeFile(); + + scalar calcFaceZonesIntegral + ( + const surfaceScalarField& fD, + const faceZone& fz + ) const; + + + //- Disallow default bitwise copy construct + faceZonesIntegration(const faceZonesIntegration&); + + //- Disallow default bitwise assignment + void operator=(const faceZonesIntegration&); + + //- Output file header information + virtual void writeFileHeader(); + + +public: + + //- Runtime type information + TypeName("faceZonesIntegration"); + + + // Constructors + + //- Construct for given objectRegistry and dictionary. + // Allow the possibility to load fields from files + faceZonesIntegration + ( + const word& name, + const objectRegistry&, + const dictionary&, + const bool loadFromFiles = false + ); + + + // Destructor + + virtual ~faceZonesIntegration(); + + + // Member Functions + + //- Return name of the set of zones + virtual const word& name() const + { + return name_; + }; + + //- Read the zone integration data + virtual void read(const dictionary&); + + //- Execute, currently does nothing + virtual void execute(); + + //- Execute at the final time-loop, currently does nothing + virtual void end(); + + //- Write the integration + virtual void write(); + + //- Update for changes of mesh + virtual void updateMesh(const mapPolyMesh&) + {} + + //- Update for changes of mesh + virtual void movePoints(const pointField&) + {} +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegrationFunctionObject.C b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegrationFunctionObject.C new file mode 100644 index 0000000000000000000000000000000000000000..43665119b14aeedf9056ead1a814e32f8518e3cb --- /dev/null +++ b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegrationFunctionObject.C @@ -0,0 +1,43 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "faceZonesIntegrationFunctionObject.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineNamedTemplateTypeNameAndDebug(faceZonesIntegrationFunctionObject, 0); + + addToRunTimeSelectionTable + ( + functionObject, + faceZonesIntegrationFunctionObject, + dictionary + ); +} + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegrationFunctionObject.H b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegrationFunctionObject.H new file mode 100644 index 0000000000000000000000000000000000000000..2cc95e2af21eb19a1e890207447fdfdfa76d47d3 --- /dev/null +++ b/src/postProcessing/functionObjects/zones/faceZoneIntegration/faceZonesIntegrationFunctionObject.H @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Typedef + Foam::faceZonesIntegrationFunctionObject + +Description + FunctionObject wrapper around faceZonesIntegration to allow them to be + created via the functions list within controlDict. + +SourceFiles + faceZonesIntegrationFunctionObject.C + +\*---------------------------------------------------------------------------*/ + +#ifndef faceZonesIntegrationFunctionObject_H +#define faceZonesIntegrationFunctionObject_H + +#include "faceZonesIntegration.H" +#include "OutputFilterFunctionObject.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef OutputFilterFunctionObject<faceZonesIntegration> + faceZonesIntegrationFunctionObject; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/sampling/probes/probes.H b/src/sampling/probes/probes.H index 33e4f39e25056cda02b95f87a2fa8ae676ad5869..11a7f581c16215cc4f7fe448163c368af9240c7c 100644 --- a/src/sampling/probes/probes.H +++ b/src/sampling/probes/probes.H @@ -175,9 +175,8 @@ public: ); - // Destructor - - virtual ~probes(); + //- Destructor + virtual ~probes(); // Member Functions @@ -188,6 +187,18 @@ public: return name_; } + //- Return names of fields to probe + virtual const wordList& fieldNames() const + { + return fieldNames_; + } + + //- Return locations to probe + virtual const vectorField& probeLocations() const + { + return probeLocations_; + } + //- Cells to be probed (obtained from the locations) const labelList& cells() const { diff --git a/src/thermophysicalModels/Allwmake b/src/thermophysicalModels/Allwmake index 62175e440fb768dec572cec706bdb787b360c2c7..7fbee69034eae6d4ec0cff99068f1a44b1cfee24 100755 --- a/src/thermophysicalModels/Allwmake +++ b/src/thermophysicalModels/Allwmake @@ -10,7 +10,7 @@ wmake libso solids wmake libso solidMixture wmake libso basic -wmake libso combustion +wmake libso reactionThermo wmake libso laminarFlameSpeed wmake libso chemistryModel wmake libso pdfs diff --git a/src/thermophysicalModels/basic/Make/files b/src/thermophysicalModels/basic/Make/files index 4cea8bf57d4c6f7e179760a661e095f4a862044c..dcf9c8f4c0cbe6686de6b4db1b501dea7e45ed6a 100644 --- a/src/thermophysicalModels/basic/Make/files +++ b/src/thermophysicalModels/basic/Make/files @@ -1,13 +1,16 @@ -basicMixture = mixtures/basicMixture -basicThermo = basicThermo +mixtures/basicMixture/basicMixture.C +mixtures/basicMixture/basicMixtures.C -$(basicMixture)/basicMixture.C -$(basicMixture)/basicMixtures.C -$(basicThermo)/basicThermo.C -$(basicThermo)/newBasicThermo.C +basicThermo/basicThermo.C -hThermo/hThermos.C -eThermo/eThermos.C +psiThermo/basicPsiThermo/basicPsiThermo.C +psiThermo/basicPsiThermo/newBasicPsiThermo.C +psiThermo/hPsiThermo/hPsiThermos.C +psiThermo/ePsiThermo/ePsiThermos.C + +rhoThermo/basicRhoThermo/basicRhoThermo.C +rhoThermo/basicRhoThermo/newBasicRhoThermo.C +rhoThermo/hRhoThermo/hRhoThermos.C derivedFvPatchFields/fixedEnthalpy/fixedEnthalpyFvPatchScalarField.C derivedFvPatchFields/gradientEnthalpy/gradientEnthalpyFvPatchScalarField.C diff --git a/src/thermophysicalModels/basic/basicThermo/basicThermo.C b/src/thermophysicalModels/basic/basicThermo/basicThermo.C index 14d2e235924b1d80b023d87613b6f89cc7d0078f..4a1e7f19f9422250e8336734715cceb9d97dc5ac 100644 --- a/src/thermophysicalModels/basic/basicThermo/basicThermo.C +++ b/src/thermophysicalModels/basic/basicThermo/basicThermo.C @@ -35,20 +35,16 @@ License #include "gradientInternalEnergyFvPatchScalarField.H" #include "mixedInternalEnergyFvPatchScalarField.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ namespace Foam { - -/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ - -defineTypeNameAndDebug(basicThermo, 0); -defineRunTimeSelectionTable(basicThermo, fvMesh); - + defineTypeNameAndDebug(basicThermo, 0); +} // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -wordList basicThermo::hBoundaryTypes() +Foam::wordList Foam::basicThermo::hBoundaryTypes() { const volScalarField::GeometricBoundaryField& tbf = T_.boundaryField(); @@ -77,7 +73,8 @@ wordList basicThermo::hBoundaryTypes() return hbt; } -void basicThermo::hBoundaryCorrection(volScalarField& h) + +void Foam::basicThermo::hBoundaryCorrection(volScalarField& h) { volScalarField::GeometricBoundaryField& hbf = h.boundaryField(); @@ -96,7 +93,8 @@ void basicThermo::hBoundaryCorrection(volScalarField& h) } } -wordList basicThermo::eBoundaryTypes() + +Foam::wordList Foam::basicThermo::eBoundaryTypes() { const volScalarField::GeometricBoundaryField& tbf = T_.boundaryField(); @@ -125,7 +123,8 @@ wordList basicThermo::eBoundaryTypes() return ebt; } -void basicThermo::eBoundaryCorrection(volScalarField& e) + +void Foam::basicThermo::eBoundaryCorrection(volScalarField& e) { volScalarField::GeometricBoundaryField& ebf = e.boundaryField(); @@ -146,7 +145,7 @@ void basicThermo::eBoundaryCorrection(volScalarField& e) // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -basicThermo::basicThermo(const fvMesh& mesh) +Foam::basicThermo::basicThermo(const fvMesh& mesh) : IOdictionary ( @@ -173,31 +172,31 @@ basicThermo::basicThermo(const fvMesh& mesh) mesh ), - T_ + psi_ ( IOobject ( - "T", + "psi", mesh.time().timeName(), mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE + IOobject::NO_READ, + IOobject::NO_WRITE ), - mesh + mesh, + dimensionSet(0, -2, 2, 0, 0) ), - psi_ + T_ ( IOobject ( - "psi", + "T", mesh.time().timeName(), mesh, - IOobject::NO_READ, - IOobject::NO_WRITE + IOobject::MUST_READ, + IOobject::AUTO_WRITE ), - mesh, - dimensionSet(0, -2, 2, 0, 0) + mesh ), mu_ @@ -232,20 +231,184 @@ basicThermo::basicThermo(const fvMesh& mesh) // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -basicThermo::~basicThermo() +Foam::basicThermo::~basicThermo() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool basicThermo::read() +Foam::volScalarField& Foam::basicThermo::p() { - return regIOobject::read(); + return p_; +} + + +const Foam::volScalarField& Foam::basicThermo::p() const +{ + return p_; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +const Foam::volScalarField& Foam::basicThermo::psi() const +{ + return psi_; +} + + +Foam::volScalarField& Foam::basicThermo::h() +{ + notImplemented("basicThermo::h()"); + return const_cast<volScalarField&>(volScalarField::null()); +} + + +const Foam::volScalarField& Foam::basicThermo::h() const +{ + notImplemented("basicThermo::h() const"); + return volScalarField::null(); +} + + +Foam::tmp<Foam::scalarField> Foam::basicThermo::h +( + const scalarField& T, + const labelList& cells +) const +{ + notImplemented + ( + "basicThermo::h" + "(const scalarField& T, const labelList& cells) const" + ); + return tmp<scalarField>(NULL); +} + + +Foam::tmp<Foam::scalarField> Foam::basicThermo::h +( + const scalarField& T, + const label patchi +) const +{ + notImplemented + ( + "basicThermo::h" + "(const scalarField& T, const label patchi) const" + ); + return tmp<scalarField>(NULL); +} + + +Foam::volScalarField& Foam::basicThermo::e() +{ + notImplemented("basicThermo::e()"); + return const_cast<volScalarField&>(volScalarField::null()); +} + + +const Foam::volScalarField& Foam::basicThermo::e() const +{ + notImplemented("basicThermo::e()"); + return volScalarField::null(); +} + + +Foam::tmp<Foam::scalarField> Foam::basicThermo::e +( + const scalarField& T, + const labelList& cells +) const +{ + notImplemented + ( + "basicThermo::e" + "(const scalarField& T, const labelList& cells) const" + ); + return tmp<scalarField>(NULL); +} + + +Foam::tmp<Foam::scalarField> Foam::basicThermo::e +( + const scalarField& T, + const label patchi +) const +{ + notImplemented + ( + "basicThermo::e" + "(const scalarField& T, const label patchi) const" + ); + return tmp<scalarField>(NULL); +} + + +const Foam::volScalarField& Foam::basicThermo::T() const +{ + return T_; +} + + +Foam::tmp<Foam::scalarField> Foam::basicThermo::Cp +( + const scalarField& T, + const label patchi +) const +{ + notImplemented + ( + "basicThermo::Cp" + "(const scalarField& T, const label patchi) const" + ); + return tmp<scalarField>(NULL); +} + + +Foam::tmp<Foam::volScalarField> Foam::basicThermo::Cp() const +{ + notImplemented("basicThermo::Cp() const"); + return volScalarField::null(); +} + + +Foam::tmp<Foam::scalarField> Foam::basicThermo::Cv +( + const scalarField& T, + const label patchi +) const +{ + notImplemented + ( + "basicThermo::Cv" + "(const scalarField& T, const label patchi) const" + ); + return tmp<scalarField>(NULL); +} + + +Foam::tmp<Foam::volScalarField> Foam::basicThermo::Cv() const +{ + notImplemented("basicThermo::Cv() const"); + return volScalarField::null(); +} + + +const Foam::volScalarField& Foam::basicThermo::mu() const +{ + return mu_; +} + + +const Foam::volScalarField& Foam::basicThermo::alpha() const +{ + return alpha_; +} + + +bool Foam::basicThermo::read() +{ + return regIOobject::read(); +} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/basic/basicThermo/basicThermo.H b/src/thermophysicalModels/basic/basicThermo/basicThermo.H index 4b316fc1c9ba5a9ad6d94734908e4e5c0144b1ec..1b5425852530ca30ec9cb6328adb12b777d473ab 100644 --- a/src/thermophysicalModels/basic/basicThermo/basicThermo.H +++ b/src/thermophysicalModels/basic/basicThermo/basicThermo.H @@ -41,7 +41,6 @@ SourceFiles #include "typeInfo.H" #include "IOdictionary.H" #include "autoPtr.H" -#include "runTimeSelectionTables.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -49,7 +48,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class basicThermo Declaration + Class basicThermo Declaration \*---------------------------------------------------------------------------*/ class basicThermo @@ -61,21 +60,45 @@ protected: // Protected data - volScalarField p_; - volScalarField T_; - volScalarField psi_; + // Fields - volScalarField mu_; - volScalarField alpha_; + //- Pressure [Pa] + volScalarField p_; + + //- Compressibility [s^2/m^2] + volScalarField psi_; + + //- Temperature [K] + volScalarField T_; + + //- Laminar dynamic viscosity [kg/m/s] + volScalarField mu_; + + //- Laminar thermal diffusuvity [kg/m/s] + volScalarField alpha_; // Protected member functions - wordList hBoundaryTypes(); - void hBoundaryCorrection(volScalarField& h); + // Enthalpy + + //- Return the enthalpy field boundary types by interrogating the + // temperature field boundary types + wordList hBoundaryTypes(); + + //- Correct the enthalpy field boundaries + void hBoundaryCorrection(volScalarField& h); + + + // Internal energy + + //- Return the internal energy field boundary types by + // interrogating the temperature field boundary types + wordList eBoundaryTypes(); + + //- Correct the internal energy field boundaries + void eBoundaryCorrection(volScalarField& e); - wordList eBoundaryTypes(); - void eBoundaryCorrection(volScalarField& e); //- Construct as copy (not implemented) basicThermo(const basicThermo&); @@ -87,29 +110,12 @@ public: TypeName("basicThermo"); - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - basicThermo, - fvMesh, - (const fvMesh& mesh), - (mesh) - ); - - // Constructors //- Construct from mesh basicThermo(const fvMesh&); - // Selectors - - static autoPtr<basicThermo> New(const fvMesh&); - - //- Destructor virtual ~basicThermo(); @@ -120,193 +126,101 @@ public: virtual void correct() = 0; - // Access to thermodynamic state variables. + // Access to thermodynamic state variables //- Pressure [Pa] // Non-const access allowed for transport equations - virtual volScalarField& p() - { - return p_; - } + virtual volScalarField& p(); //- Pressure [Pa] - virtual const volScalarField& p() const - { - return p_; - } + virtual const volScalarField& p() const; + + //- Density [kg/m^3] + virtual tmp<volScalarField> rho() const = 0; + + //- Compressibility [s^2/m^2] + virtual const volScalarField& psi() const; //- Enthalpy [J/kg] // Non-const access allowed for transport equations - virtual volScalarField& h() - { - notImplemented("basicThermo::h()"); - return const_cast<volScalarField&>(volScalarField::null()); - } + virtual volScalarField& h(); //- Enthalpy [J/kg] - virtual const volScalarField& h() const - { - notImplemented("basicThermo::h() const"); - return volScalarField::null(); - } + virtual const volScalarField& h() const; //- Enthalpy for cell-set [J/kg] virtual tmp<scalarField> h ( const scalarField& T, const labelList& cells - ) const - { - notImplemented - ( - "basicThermo::h" - "(const scalarField& T, const labelList& cells) const" - ); - return tmp<scalarField>(NULL); - } + ) const; //- Enthalpy for patch [J/kg] virtual tmp<scalarField> h ( const scalarField& T, const label patchi - ) const - { - notImplemented - ( - "basicThermo::h" - "(const scalarField& T, const label patchi) const" - ); - return tmp<scalarField>(NULL); - } + ) const; //- Internal energy [J/kg] // Non-const access allowed for transport equations - virtual volScalarField& e() - { - notImplemented("basicThermo::e()"); - return const_cast<volScalarField&>(volScalarField::null()); - } + virtual volScalarField& e(); //- Internal energy [J/kg] - virtual const volScalarField& e() const - { - notImplemented("basicThermo::e()"); - return volScalarField::null(); - } + virtual const volScalarField& e() const; //- Internal energy for cell-set [J/kg] virtual tmp<scalarField> e ( const scalarField& T, const labelList& cells - ) const - { - notImplemented - ( - "basicThermo::e" - "(const scalarField& T, const labelList& cells) const" - ); - return tmp<scalarField>(NULL); - } + ) const; //-Internal energy for patch [J/kg] virtual tmp<scalarField> e ( const scalarField& T, const label patchi - ) const - { - notImplemented - ( - "basicThermo::e" - "(const scalarField& T, const label patchi) const" - ); - return tmp<scalarField>(NULL); - } + ) const; + // Fields derived from thermodynamic state variables //- Temperature [K] - virtual const volScalarField& T() const - { - return T_; - } - - //- Density [kg/m^3] - virtual tmp<volScalarField> rho() const - { - return p_*psi(); - } - - //- Compressibility [s^2/m^2] - virtual const volScalarField& psi() const - { - return psi_; - } + virtual const volScalarField& T() const; //- Heat capacity at constant pressure for patch [J/kg/K] virtual tmp<scalarField> Cp ( const scalarField& T, const label patchi - ) const - { - notImplemented - ( - "basicThermo::Cp" - "(const scalarField& T, const label patchi) const" - ); - return tmp<scalarField>(NULL); - } + ) const; //- Heat capacity at constant pressure [J/kg/K] - virtual tmp<volScalarField> Cp() const - { - notImplemented("basicThermo::Cp() const"); - return volScalarField::null(); - } + virtual tmp<volScalarField> Cp() const; //- Heat capacity at constant volume for patch [J/kg/K] virtual tmp<scalarField> Cv ( const scalarField& T, const label patchi - ) const - { - notImplemented - ( - "basicThermo::Cv" - "(const scalarField& T, const label patchi) const" - ); - return tmp<scalarField>(NULL); - } + ) const; //- Heat capacity at constant volume [J/kg/K] - virtual tmp<volScalarField> Cv() const - { - notImplemented("basicThermo::Cv() const"); - return volScalarField::null(); - } + virtual tmp<volScalarField> Cv() const; // Access to transport state variables - //- Dynamic viscosity of mixture [kg/ms] - virtual const volScalarField& mu() const - { - return mu_; - } + //- Dynamic viscosity of mixture [kg/m/s] + virtual const volScalarField& mu() const; - //- Thermal diffusivity for enthalpy of mixture [kg/ms] - virtual const volScalarField& alpha() const - { - return alpha_; - } + //- Thermal diffusivity for enthalpy of mixture [kg/m/s] + virtual const volScalarField& alpha() const; //- Read thermophysicalProperties dictionary - virtual bool read() = 0; + virtual bool read(); }; diff --git a/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.C b/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.C index bbe76c43ef88703329699fa36975ac7f094d089a..0167d9c4cb7c4ce61fa4b90bf9e932e5975a7b6b 100644 --- a/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.C +++ b/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.C @@ -22,8 +22,6 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - \*---------------------------------------------------------------------------*/ #include "error.H" diff --git a/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.H b/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.H index d44f5483f99e4efdcf1945e19d25ab77ab4be168..a976184530cff94190f0666f8140617ecd22b2f5 100644 --- a/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.H +++ b/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixture.H @@ -47,7 +47,7 @@ class fvMesh; class dictionary; /*---------------------------------------------------------------------------*\ - Class basicMixture Declaration + Class basicMixture Declaration \*---------------------------------------------------------------------------*/ class basicMixture @@ -65,9 +65,8 @@ public: basicMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~basicMixture(); + //- Destructor + virtual ~basicMixture(); }; diff --git a/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixtures.C b/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixtures.C index c3bad32fc14616e383f5cbb897bd9c42b064ac22..0aced02618e2baaa73623f635396b8763a5583c1 100644 --- a/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixtures.C +++ b/src/thermophysicalModels/basic/mixtures/basicMixture/basicMixtures.C @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Description - Selection function for internal energy based thermodynamics package. + Mixture instantiation \*---------------------------------------------------------------------------*/ @@ -34,6 +34,8 @@ Description #include "perfectGas.H" +#include "eConstThermo.H" + #include "hConstThermo.H" #include "janafThermo.H" #include "specieThermo.H" @@ -68,6 +70,22 @@ makeBasicMixture perfectGas ); +makeBasicMixture +( + pureMixture, + constTransport, + eConstThermo, + perfectGas +); + +makeBasicMixture +( + pureMixture, + sutherlandTransport, + eConstThermo, + perfectGas +); + makeBasicMixture ( pureMixture, diff --git a/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/basicPsiThermo.C b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/basicPsiThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..6464e9e71b04e93fb050293f8caa2d5ae2ba3a1f --- /dev/null +++ b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/basicPsiThermo.C @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "basicPsiThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(basicPsiThermo, 0); + defineRunTimeSelectionTable(basicPsiThermo, fvMesh); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::basicPsiThermo::basicPsiThermo(const fvMesh& mesh) +: + basicThermo(mesh) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::basicPsiThermo::~basicPsiThermo() +{} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/basicPsiThermo.H b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/basicPsiThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..df6d21b9ab65f41845130e1221b1f056cbdbd37c --- /dev/null +++ b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/basicPsiThermo.H @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::basicPsiThermo + +Description + Basic thermodynamic properties based on compressibility + +SourceFiles + basicPsiThermo.C + newBasicPsiThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef basicPsiThermo_H +#define basicPsiThermo_H + +#include "basicThermo.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class basicPsiThermo Declaration +\*---------------------------------------------------------------------------*/ + +class basicPsiThermo +: + public basicThermo +{ + +protected: + + // Protected member functions + + //- Construct as copy (not implemented) + basicPsiThermo(const basicPsiThermo&); + + +public: + + //- Runtime type information + TypeName("basicPsiThermo"); + + + //- Declare run-time constructor selection table + declareRunTimeSelectionTable + ( + autoPtr, + basicPsiThermo, + fvMesh, + (const fvMesh& mesh), + (mesh) + ); + + // Constructors + + //- Construct from mesh + basicPsiThermo(const fvMesh&); + + + //- Selector + static autoPtr<basicPsiThermo> New(const fvMesh&); + + //- Destructor + virtual ~basicPsiThermo(); + + + // Member functions + + // Fields derived from thermodynamic state variables + + //- Density [kg/m^3] - uses current value of pressure + virtual tmp<volScalarField> rho() const + { + return p_*psi(); + } +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/hCombustionThermo/makeCombustionThermo.H b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/makeBasicPsiThermo.H similarity index 67% rename from src/thermophysicalModels/combustion/hCombustionThermo/makeCombustionThermo.H rename to src/thermophysicalModels/basic/psiThermo/basicPsiThermo/makeBasicPsiThermo.H index f961d0ca0c532d035828d8dc2cd6183755392fa0..c36ec8da9103544a364d5db3cef0d609ec7abaad 100644 --- a/src/thermophysicalModels/combustion/hCombustionThermo/makeCombustionThermo.H +++ b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/makeBasicPsiThermo.H @@ -23,39 +23,38 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA InClass - Foam::hCombustionThermo + Foam::basicPsiThermo Description + Macros for creating 'basic' compresibility-based thermo packages \*---------------------------------------------------------------------------*/ -#ifndef makeCombustionThermo_H -#define makeCombustionThermo_H +#ifndef makeBasicPsiThermo_H +#define makeBasicPsiThermo_H + +#include "basicPsiThermo.H" +#include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeCombustionThermo(CThermo,MixtureThermo,Mixture,Transport,Thermo,EqnOfState) \ +#define makeBasicPsiThermo(Cthermo,Mixture,Transport,Thermo,EqnOfState) \ \ -typedef MixtureThermo \ - <Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \ - MixtureThermo##Mixture##Transport##Thermo##EqnOfState; \ +typedef Cthermo<Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \ + Cthermo##Mixture##Transport##Thermo##EqnOfState; \ \ defineTemplateTypeNameAndDebugWithName \ - (MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ - #MixtureThermo \ - "<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", 0); \ - \ -addToRunTimeSelectionTable \ ( \ - basicThermo, \ - MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ - fvMesh \ + Cthermo##Mixture##Transport##Thermo##EqnOfState, \ + #Cthermo \ + "<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", \ + 0 \ ); \ \ addToRunTimeSelectionTable \ ( \ - CThermo, \ - MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + basicPsiThermo, \ + Cthermo##Mixture##Transport##Thermo##EqnOfState, \ fvMesh \ ) diff --git a/src/thermophysicalModels/combustion/hCombustionThermo/newhCombustionThermo.C b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/newBasicPsiThermo.C similarity index 68% rename from src/thermophysicalModels/combustion/hCombustionThermo/newhCombustionThermo.C rename to src/thermophysicalModels/basic/psiThermo/basicPsiThermo/newBasicPsiThermo.C index 2345a2b6d7e1b76f2e8121691c4725a1892850c2..3f9c43a0f9ee4f1edb837fa43becbea43f9e194c 100644 --- a/src/thermophysicalModels/combustion/hCombustionThermo/newhCombustionThermo.C +++ b/src/thermophysicalModels/basic/psiThermo/basicPsiThermo/newBasicPsiThermo.C @@ -24,19 +24,16 @@ License \*---------------------------------------------------------------------------*/ -#include "hCombustionThermo.H" -#include "fvMesh.H" +#include "basicPsiThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -namespace Foam +Foam::autoPtr<Foam::basicPsiThermo> Foam::basicPsiThermo::New +( + const fvMesh& mesh +) { - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -autoPtr<hCombustionThermo> hCombustionThermo::New(const fvMesh& mesh) -{ - word hCombustionThermoTypeName; + word thermoTypeName; // Enclose the creation of the thermophysicalProperties to ensure it is // deleted before the turbulenceModel is created otherwise the dictionary @@ -54,31 +51,25 @@ autoPtr<hCombustionThermo> hCombustionThermo::New(const fvMesh& mesh) ) ); - thermoDict.lookup("thermoType") >> hCombustionThermoTypeName; + thermoDict.lookup("thermoType") >> thermoTypeName; } - Info<< "Selecting thermodynamics package " - << hCombustionThermoTypeName << endl; + Info<< "Selecting thermodynamics package " << thermoTypeName << endl; fvMeshConstructorTable::iterator cstrIter = - fvMeshConstructorTablePtr_->find(hCombustionThermoTypeName); + fvMeshConstructorTablePtr_->find(thermoTypeName); if (cstrIter == fvMeshConstructorTablePtr_->end()) { - FatalErrorIn("hCombustionThermo::New(const fvMesh&)") - << "Unknown hCombustionThermo type " - << hCombustionThermoTypeName << endl << endl - << "Valid hCombustionThermo types are :" << endl - << fvMeshConstructorTablePtr_->toc() + FatalErrorIn("basicPsiThermo::New(const fvMesh&)") + << "Unknown basicPsiThermo type " << thermoTypeName << nl << nl + << "Valid basicPsiThermo types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl << exit(FatalError); } - return autoPtr<hCombustionThermo>(cstrIter()(mesh)); + return autoPtr<basicPsiThermo>(cstrIter()(mesh)); } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/basic/eThermo/eThermo.C b/src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermo.C similarity index 72% rename from src/thermophysicalModels/basic/eThermo/eThermo.C rename to src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermo.C index 3c7562b9785e0de63c899aafccbc0af29fd73981..789f35bed9e275c24e24abb0555fd92ce54b9894 100644 --- a/src/thermophysicalModels/basic/eThermo/eThermo.C +++ b/src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermo.C @@ -24,72 +24,22 @@ License \*---------------------------------------------------------------------------*/ -#include "eThermo.H" +#include "ePsiThermo.H" #include "fvMesh.H" #include "fixedValueFvPatchFields.H" -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class MixtureType> -Foam::eThermo<MixtureType>::eThermo(const fvMesh& mesh) -: - basicThermo(mesh), - MixtureType(*this, mesh), - - e_ - ( - IOobject - ( - "e", - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensionSet(0, 2, -2, 0, 0), - eBoundaryTypes() - ) -{ - scalarField& eCells = e_.internalField(); - const scalarField& TCells = T_.internalField(); - - forAll(eCells, celli) - { - eCells[celli] = this->cellMixture(celli).E(TCells[celli]); - } - - forAll(e_.boundaryField(), patchi) - { - e_.boundaryField()[patchi] == e(T_.boundaryField()[patchi], patchi); - } - - eBoundaryCorrection(e_); - - calculate(); - psi_.oldTime(); // Switch on saving old time -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template<class MixtureType> -Foam::eThermo<MixtureType>::~eThermo() -{} - - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class MixtureType> -void Foam::eThermo<MixtureType>::calculate() +void Foam::ePsiThermo<MixtureType>::calculate() { const scalarField& eCells = e_.internalField(); - const scalarField& pCells = p_.internalField(); + const scalarField& pCells = this->p_.internalField(); - scalarField& TCells = T_.internalField(); - scalarField& psiCells = psi_.internalField(); - scalarField& muCells = mu_.internalField(); - scalarField& alphaCells = alpha_.internalField(); + scalarField& TCells = this->T_.internalField(); + scalarField& psiCells = this->psi_.internalField(); + scalarField& muCells = this->mu_.internalField(); + scalarField& alphaCells = this->alpha_.internalField(); forAll(TCells, celli) { @@ -103,16 +53,16 @@ void Foam::eThermo<MixtureType>::calculate() alphaCells[celli] = mixture_.alpha(TCells[celli]); } - forAll(T_.boundaryField(), patchi) + forAll(this->T_.boundaryField(), patchi) { - fvPatchScalarField& pp = p_.boundaryField()[patchi]; - fvPatchScalarField& pT = T_.boundaryField()[patchi]; - fvPatchScalarField& ppsi = psi_.boundaryField()[patchi]; + fvPatchScalarField& pp = this->p_.boundaryField()[patchi]; + fvPatchScalarField& pT = this->T_.boundaryField()[patchi]; + fvPatchScalarField& ppsi = this->psi_.boundaryField()[patchi]; fvPatchScalarField& pe = e_.boundaryField()[patchi]; - fvPatchScalarField& pmu = mu_.boundaryField()[patchi]; - fvPatchScalarField& palpha = alpha_.boundaryField()[patchi]; + fvPatchScalarField& pmu = this->mu_.boundaryField()[patchi]; + fvPatchScalarField& palpha = this->alpha_.boundaryField()[patchi]; if (pT.fixesValue()) { @@ -146,30 +96,83 @@ void Foam::eThermo<MixtureType>::calculate() } +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::ePsiThermo<MixtureType>::ePsiThermo(const fvMesh& mesh) +: + basicPsiThermo(mesh), + MixtureType(*this, mesh), + + e_ + ( + IOobject + ( + "e", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, 0, 0), + this->eBoundaryTypes() + ) +{ + scalarField& eCells = e_.internalField(); + const scalarField& TCells = this->T_.internalField(); + + forAll(eCells, celli) + { + eCells[celli] = this->cellMixture(celli).E(TCells[celli]); + } + + forAll(e_.boundaryField(), patchi) + { + e_.boundaryField()[patchi] == + e(this->T_.boundaryField()[patchi], patchi); + } + + this->eBoundaryCorrection(e_); + + calculate(); + + // Switch on saving old time + this->psi_.oldTime(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::ePsiThermo<MixtureType>::~ePsiThermo() +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class MixtureType> -void Foam::eThermo<MixtureType>::correct() +void Foam::ePsiThermo<MixtureType>::correct() { if (debug) { - Info<< "entering eThermo<MixtureType>::correct()" << endl; + Info<< "entering ePsiThermo<MixtureType>::correct()" << endl; } // force the saving of the old-time values - psi_.oldTime(); + this->psi_.oldTime(); calculate(); if (debug) { - Info<< "exiting eThermo<MixtureType>::correct()" << endl; + Info<< "exiting ePsiThermo<MixtureType>::correct()" << endl; } } template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::e +Foam::tmp<Foam::scalarField> Foam::ePsiThermo<MixtureType>::e ( const scalarField& T, const labelList& cells @@ -188,7 +191,7 @@ Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::e template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::e +Foam::tmp<Foam::scalarField> Foam::ePsiThermo<MixtureType>::e ( const scalarField& T, const label patchi @@ -205,8 +208,9 @@ Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::e return te; } + template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::Cp +Foam::tmp<Foam::scalarField> Foam::ePsiThermo<MixtureType>::Cp ( const scalarField& T, const label patchi @@ -223,10 +227,11 @@ Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::Cp return tCp; } + template<class MixtureType> -Foam::tmp<Foam::volScalarField> Foam::eThermo<MixtureType>::Cp() const +Foam::tmp<Foam::volScalarField> Foam::ePsiThermo<MixtureType>::Cp() const { - const fvMesh& mesh = T_.mesh(); + const fvMesh& mesh = this->T_.mesh(); tmp<volScalarField> tCp ( @@ -242,20 +247,20 @@ Foam::tmp<Foam::volScalarField> Foam::eThermo<MixtureType>::Cp() const ), mesh, dimensionSet(0, 2, -2, -1, 0), - T_.boundaryField().types() + this->T_.boundaryField().types() ) ); volScalarField& cp = tCp(); - forAll(T_, celli) + forAll(this->T_, celli) { - cp[celli] = this->cellMixture(celli).Cp(T_[celli]); + cp[celli] = this->cellMixture(celli).Cp(this->T_[celli]); } - forAll(T_.boundaryField(), patchi) + forAll(this->T_.boundaryField(), patchi) { - const fvPatchScalarField& pT = T_.boundaryField()[patchi]; + const fvPatchScalarField& pT = this->T_.boundaryField()[patchi]; fvPatchScalarField& pCp = cp.boundaryField()[patchi]; forAll(pT, facei) @@ -269,7 +274,7 @@ Foam::tmp<Foam::volScalarField> Foam::eThermo<MixtureType>::Cp() const template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::Cv +Foam::tmp<Foam::scalarField> Foam::ePsiThermo<MixtureType>::Cv ( const scalarField& T, const label patchi @@ -288,9 +293,9 @@ Foam::tmp<Foam::scalarField> Foam::eThermo<MixtureType>::Cv template<class MixtureType> -Foam::tmp<Foam::volScalarField> Foam::eThermo<MixtureType>::Cv() const +Foam::tmp<Foam::volScalarField> Foam::ePsiThermo<MixtureType>::Cv() const { - const fvMesh& mesh = T_.mesh(); + const fvMesh& mesh = this->T_.mesh(); tmp<volScalarField> tCv ( @@ -311,14 +316,15 @@ Foam::tmp<Foam::volScalarField> Foam::eThermo<MixtureType>::Cv() const volScalarField& cv = tCv(); - forAll(T_, celli) + forAll(this->T_, celli) { - cv[celli] = this->cellMixture(celli).Cv(T_[celli]); + cv[celli] = this->cellMixture(celli).Cv(this->T_[celli]); } - forAll(T_.boundaryField(), patchi) + forAll(this->T_.boundaryField(), patchi) { - cv.boundaryField()[patchi] = Cv(T_.boundaryField()[patchi], patchi); + cv.boundaryField()[patchi] = + Cv(this->T_.boundaryField()[patchi], patchi); } return tCv; @@ -326,9 +332,9 @@ Foam::tmp<Foam::volScalarField> Foam::eThermo<MixtureType>::Cv() const template<class MixtureType> -bool Foam::eThermo<MixtureType>::read() +bool Foam::ePsiThermo<MixtureType>::read() { - if (basicThermo::read()) + if (basicPsiThermo::read()) { MixtureType::read(*this); return true; diff --git a/src/thermophysicalModels/basic/eThermo/eThermo.H b/src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermo.H similarity index 87% rename from src/thermophysicalModels/basic/eThermo/eThermo.H rename to src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermo.H index b573ca4aa4e377ce98d162101526ab37c61b9353..fd3071ff1170a8a594a47f26a4daad4db4d34d79 100644 --- a/src/thermophysicalModels/basic/eThermo/eThermo.H +++ b/src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermo.H @@ -23,20 +23,20 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::eThermo + Foam::ePsiThermo Description - Internal energy for a mixture + Internal energy for a mixture based on compressibility SourceFiles - eThermo.C + ePsiThermo.C \*---------------------------------------------------------------------------*/ -#ifndef eThermo_H -#define eThermo_H +#ifndef ePsiThermo_H +#define ePsiThermo_H -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "basicMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,53 +45,55 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class eThermo Declaration + Class ePsiThermo Declaration \*---------------------------------------------------------------------------*/ template<class MixtureType> -class eThermo +class ePsiThermo : - public basicThermo, + public basicPsiThermo, public MixtureType { // Private data + //- Internal energy field volScalarField e_; // Private member functions + //- Calculate the thermo variables void calculate(); //- Construct as copy (not implemented) - eThermo(const eThermo<MixtureType>&); + ePsiThermo(const ePsiThermo<MixtureType>&); public: //- Runtime type information - TypeName("eThermo"); + TypeName("ePsiThermo"); // Constructors //- Construct from mese - eThermo(const fvMesh&); + ePsiThermo(const fvMesh&); //- Destructor - virtual ~eThermo(); + virtual ~ePsiThermo(); // Member functions - //- Return the compostion of the combustion mixture + //- Return the compostion of the mixture virtual basicMixture& composition() { return *this; } - //- Return the compostion of the combustion mixture + //- Return the compostion of the mixture virtual const basicMixture& composition() const { return *this; @@ -166,7 +168,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #ifdef NoRepository -# include "eThermo.C" +# include "ePsiThermo.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/basic/basicThermo/basicThermos.C b/src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermos.C similarity index 84% rename from src/thermophysicalModels/basic/basicThermo/basicThermos.C rename to src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermos.C index 7a837bcc9baf6ffe7a5c9bca0162ecb6e2cbe9e8..0517a06ec20498b1cf01e9ab211f1cb8be325ceb 100644 --- a/src/thermophysicalModels/basic/basicThermo/basicThermos.C +++ b/src/thermophysicalModels/basic/psiThermo/ePsiThermo/ePsiThermos.C @@ -22,30 +22,22 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - Selection function for internal energy based thermodynamics package. - \*---------------------------------------------------------------------------*/ -#include "error.H" - -#include "basicThermo.H" -#include "makeBasicThermo.H" +#include "makeBasicPsiThermo.H" #include "perfectGas.H" -#include "hConstThermo.H" +#include "eConstThermo.H" #include "janafThermo.H" #include "specieThermo.H" #include "constTransport.H" #include "sutherlandTransport.H" -#include "hThermo.H" +#include "ePsiThermo.H" #include "pureMixture.H" -#include "addToRunTimeSelectionTable.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -53,27 +45,27 @@ namespace Foam /* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ -makeBasicThermo +makeBasicPsiThermo ( - hThermo, + ePsiThermo, pureMixture, constTransport, - hConstThermo, + eConstThermo, perfectGas ); -makeBasicThermo +makeBasicPsiThermo ( - hThermo, + ePsiThermo, pureMixture, sutherlandTransport, - hConstThermo, + eConstThermo, perfectGas ); -makeBasicThermo +makeBasicPsiThermo ( - hThermo, + ePsiThermo, pureMixture, sutherlandTransport, janafThermo, diff --git a/src/thermophysicalModels/basic/hThermo/hThermo.C b/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermo.C similarity index 73% rename from src/thermophysicalModels/basic/hThermo/hThermo.C rename to src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermo.C index 74e80601b9ae9f5f3b7e8fed64efbe1d5107baee..ab85557cf478222b30631345410042555ac97b9b 100644 --- a/src/thermophysicalModels/basic/hThermo/hThermo.C +++ b/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermo.C @@ -24,72 +24,20 @@ License \*---------------------------------------------------------------------------*/ -#include "hThermo.H" -#include "fvMesh.H" -#include "fixedValueFvPatchFields.H" - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class MixtureType> -Foam::hThermo<MixtureType>::hThermo(const fvMesh& mesh) -: - basicThermo(mesh), - MixtureType(*this, mesh), - - h_ - ( - IOobject - ( - "h", - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensionSet(0, 2, -2, 0, 0), - hBoundaryTypes() - ) -{ - scalarField& hCells = h_.internalField(); - const scalarField& TCells = T_.internalField(); - - forAll(hCells, celli) - { - hCells[celli] = this->cellMixture(celli).H(TCells[celli]); - } - - forAll(h_.boundaryField(), patchi) - { - h_.boundaryField()[patchi] == h(T_.boundaryField()[patchi], patchi); - } - - hBoundaryCorrection(h_); - - calculate(); - psi_.oldTime(); // Switch on saving old time -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template<class MixtureType> -Foam::hThermo<MixtureType>::~hThermo() -{} - +#include "hPsiThermo.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class MixtureType> -void Foam::hThermo<MixtureType>::calculate() +void Foam::hPsiThermo<MixtureType>::calculate() { const scalarField& hCells = h_.internalField(); - const scalarField& pCells = p_.internalField(); + const scalarField& pCells = this->p_.internalField(); - scalarField& TCells = T_.internalField(); - scalarField& psiCells = psi_.internalField(); - scalarField& muCells = mu_.internalField(); - scalarField& alphaCells = alpha_.internalField(); + scalarField& TCells = this->T_.internalField(); + scalarField& psiCells = this->psi_.internalField(); + scalarField& muCells = this->mu_.internalField(); + scalarField& alphaCells = this->alpha_.internalField(); forAll(TCells, celli) { @@ -105,14 +53,14 @@ void Foam::hThermo<MixtureType>::calculate() forAll(T_.boundaryField(), patchi) { - fvPatchScalarField& pp = p_.boundaryField()[patchi]; - fvPatchScalarField& pT = T_.boundaryField()[patchi]; - fvPatchScalarField& ppsi = psi_.boundaryField()[patchi]; + fvPatchScalarField& pp = this->p_.boundaryField()[patchi]; + fvPatchScalarField& pT = this->T_.boundaryField()[patchi]; + fvPatchScalarField& ppsi = this->psi_.boundaryField()[patchi]; fvPatchScalarField& ph = h_.boundaryField()[patchi]; - fvPatchScalarField& pmu = mu_.boundaryField()[patchi]; - fvPatchScalarField& palpha = alpha_.boundaryField()[patchi]; + fvPatchScalarField& pmu = this->mu_.boundaryField()[patchi]; + fvPatchScalarField& palpha = this->alpha_.boundaryField()[patchi]; if (pT.fixesValue()) { @@ -146,30 +94,83 @@ void Foam::hThermo<MixtureType>::calculate() } +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hPsiThermo<MixtureType>::hPsiThermo(const fvMesh& mesh) +: + basicPsiThermo(mesh), + MixtureType(*this, mesh), + + h_ + ( + IOobject + ( + "h", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, 0, 0), + this->hBoundaryTypes() + ) +{ + scalarField& hCells = h_.internalField(); + const scalarField& TCells = this->T_.internalField(); + + forAll(hCells, celli) + { + hCells[celli] = this->cellMixture(celli).H(TCells[celli]); + } + + forAll(h_.boundaryField(), patchi) + { + h_.boundaryField()[patchi] == + h(this->T_.boundaryField()[patchi], patchi); + } + + hBoundaryCorrection(h_); + + calculate(); + + // Switch on saving old time + this->psi_.oldTime(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hPsiThermo<MixtureType>::~hPsiThermo() +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class MixtureType> -void Foam::hThermo<MixtureType>::correct() +void Foam::hPsiThermo<MixtureType>::correct() { if (debug) { - Info<< "entering hThermo<MixtureType>::correct()" << endl; + Info<< "entering hPsiThermo<MixtureType>::correct()" << endl; } // force the saving of the old-time values - psi_.oldTime(); + this->psi_.oldTime(); calculate(); if (debug) { - Info<< "exiting hThermo<MixtureType>::correct()" << endl; + Info<< "exiting hPsiThermo<MixtureType>::correct()" << endl; } } template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::h +Foam::tmp<Foam::scalarField> Foam::hPsiThermo<MixtureType>::h ( const scalarField& T, const labelList& cells @@ -188,7 +189,7 @@ Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::h template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::h +Foam::tmp<Foam::scalarField> Foam::hPsiThermo<MixtureType>::h ( const scalarField& T, const label patchi @@ -205,8 +206,9 @@ Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::h return th; } + template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::Cp +Foam::tmp<Foam::scalarField> Foam::hPsiThermo<MixtureType>::Cp ( const scalarField& T, const label patchi @@ -223,10 +225,11 @@ Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::Cp return tCp; } + template<class MixtureType> -Foam::tmp<Foam::volScalarField> Foam::hThermo<MixtureType>::Cp() const +Foam::tmp<Foam::volScalarField> Foam::hPsiThermo<MixtureType>::Cp() const { - const fvMesh& mesh = T_.mesh(); + const fvMesh& mesh = this->T_.mesh(); tmp<volScalarField> tCp ( @@ -242,20 +245,20 @@ Foam::tmp<Foam::volScalarField> Foam::hThermo<MixtureType>::Cp() const ), mesh, dimensionSet(0, 2, -2, -1, 0), - T_.boundaryField().types() + this->T_.boundaryField().types() ) ); volScalarField& cp = tCp(); - forAll(T_, celli) + forAll(this->T_, celli) { - cp[celli] = this->cellMixture(celli).Cp(T_[celli]); + cp[celli] = this->cellMixture(celli).Cp(this->T_[celli]); } - forAll(T_.boundaryField(), patchi) + forAll(this->T_.boundaryField(), patchi) { - const fvPatchScalarField& pT = T_.boundaryField()[patchi]; + const fvPatchScalarField& pT = this->T_.boundaryField()[patchi]; fvPatchScalarField& pCp = cp.boundaryField()[patchi]; forAll(pT, facei) @@ -269,7 +272,7 @@ Foam::tmp<Foam::volScalarField> Foam::hThermo<MixtureType>::Cp() const template<class MixtureType> -Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::Cv +Foam::tmp<Foam::scalarField> Foam::hPsiThermo<MixtureType>::Cv ( const scalarField& T, const label patchi @@ -288,9 +291,9 @@ Foam::tmp<Foam::scalarField> Foam::hThermo<MixtureType>::Cv template<class MixtureType> -Foam::tmp<Foam::volScalarField> Foam::hThermo<MixtureType>::Cv() const +Foam::tmp<Foam::volScalarField> Foam::hPsiThermo<MixtureType>::Cv() const { - const fvMesh& mesh = T_.mesh(); + const fvMesh& mesh = this->T_.mesh(); tmp<volScalarField> tCv ( @@ -311,23 +314,25 @@ Foam::tmp<Foam::volScalarField> Foam::hThermo<MixtureType>::Cv() const volScalarField& cv = tCv(); - forAll(T_, celli) + forAll(this->T_, celli) { - cv[celli] = this->cellMixture(celli).Cv(T_[celli]); + cv[celli] = this->cellMixture(celli).Cv(this->T_[celli]); } - forAll(T_.boundaryField(), patchi) + forAll(this->T_.boundaryField(), patchi) { - cv.boundaryField()[patchi] = Cv(T_.boundaryField()[patchi], patchi); + cv.boundaryField()[patchi] = + Cv(this->T_.boundaryField()[patchi], patchi); } return tCv; } + template<class MixtureType> -bool Foam::hThermo<MixtureType>::read() +bool Foam::hPsiThermo<MixtureType>::read() { - if (basicThermo::read()) + if (basicPsiThermo::read()) { MixtureType::read(*this); return true; diff --git a/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermo.H b/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..4eae7214a0301a19e5ad1882a983f3b2add23002 --- /dev/null +++ b/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermo.H @@ -0,0 +1,178 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::hPsiThermo + +Description + Enthalpy for a mixture based on compressibility + +SourceFiles + hPsiThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef hPsiThermo_H +#define hPsiThermo_H + +#include "basicPsiThermo.H" +#include "basicMixture.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class hPsiThermo Declaration +\*---------------------------------------------------------------------------*/ + +template<class MixtureType> +class hPsiThermo +: + public basicPsiThermo, + public MixtureType +{ + // Private data + + //- Enthalpy field + volScalarField h_; + + + // Private member functions + + //- Calculate the thermo variables + void calculate(); + + //- Construct as copy (not implemented) + hPsiThermo(const hPsiThermo<MixtureType>&); + + +public: + + //- Runtime type information + TypeName("hPsiThermo"); + + + // Constructors + + //- Construct from mesh + hPsiThermo(const fvMesh&); + + + //- Destructor + virtual ~hPsiThermo(); + + + // Member functions + + //- Return the compostion of the mixture + virtual basicMixture& composition() + { + return *this; + } + + //- Return the compostion of the mixture + virtual const basicMixture& composition() const + { + return *this; + } + + //- Update properties + virtual void correct(); + + + // Access to thermodynamic state variables + + //- Enthalpy [J/kg] + // Non-const access allowed for transport equations + virtual volScalarField& h() + { + return h_; + } + + //- Enthalpy [J/kg] + virtual const volScalarField& h() const + { + return h_; + } + + + // Fields derived from thermodynamic state variables + + //- Enthalpy for cell-set [J/kg] + virtual tmp<scalarField> h + ( + const scalarField& T, + const labelList& cells + ) const; + + //- Enthalpy for patch [J/kg] + virtual tmp<scalarField> h + ( + const scalarField& T, + const label patchi + ) const; + + //- Heat capacity at constant pressure for patch [J/kg/K] + virtual tmp<scalarField> Cp + ( + const scalarField& T, + const label patchi + ) const; + + //- Heat capacity at constant pressure [J/kg/K] + virtual tmp<volScalarField> Cp() const; + + //- Heat capacity at constant volume for patch [J/kg/K] + virtual tmp<scalarField> Cv + ( + const scalarField& T, + const label patchi + ) const; + + //- Heat capacity at constant volume [J/kg/K] + virtual tmp<volScalarField> Cv() const; + + + //- Read thermophysicalProperties dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +#ifdef NoRepository +# include "hPsiThermo.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/basic/eThermo/eThermos.C b/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermos.C similarity index 86% rename from src/thermophysicalModels/basic/eThermo/eThermos.C rename to src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermos.C index b34bd9ce01ef460ddb2d24a206afd63e4dd336ca..04ed4722adfbb5f952749d6a1534dd51bcc17237 100644 --- a/src/thermophysicalModels/basic/eThermo/eThermos.C +++ b/src/thermophysicalModels/basic/psiThermo/hPsiThermo/hPsiThermos.C @@ -22,15 +22,9 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - Selection function for internal energy based thermodynamics package. - \*---------------------------------------------------------------------------*/ -#include "error.H" - -#include "basicThermo.H" -#include "makeBasicThermo.H" +#include "makeBasicPsiThermo.H" #include "perfectGas.H" @@ -41,11 +35,9 @@ Description #include "constTransport.H" #include "sutherlandTransport.H" -#include "eThermo.H" +#include "hPsiThermo.H" #include "pureMixture.H" -#include "addToRunTimeSelectionTable.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -53,34 +45,34 @@ namespace Foam /* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ - -makeBasicThermo +makeBasicPsiThermo ( - eThermo, + hPsiThermo, pureMixture, constTransport, hConstThermo, perfectGas ); -makeBasicThermo +makeBasicPsiThermo ( - eThermo, + hPsiThermo, pureMixture, sutherlandTransport, hConstThermo, perfectGas ); -makeBasicThermo +makeBasicPsiThermo ( - eThermo, + hPsiThermo, pureMixture, sutherlandTransport, janafThermo, perfectGas ); + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/thermophysicalModels/basic/rhoThermo/.directory b/src/thermophysicalModels/basic/rhoThermo/.directory new file mode 100644 index 0000000000000000000000000000000000000000..72608b79a0c4cea5c3d5399ea62dac6e34f75df9 --- /dev/null +++ b/src/thermophysicalModels/basic/rhoThermo/.directory @@ -0,0 +1,5 @@ +[Dolphin] +AdditionalInfo=3 +SortOrder=0 +Timestamp=2009,6,10,15,58,20 +ViewMode=1 diff --git a/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/basicRhoThermo.C b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/basicRhoThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..dff5dac38796abe255ee0ba5c3ba4246b07e9f80 --- /dev/null +++ b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/basicRhoThermo.C @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "basicRhoThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(basicRhoThermo, 0); + defineRunTimeSelectionTable(basicRhoThermo, fvMesh); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::basicRhoThermo::basicRhoThermo(const fvMesh& mesh) +: + basicThermo(mesh), + rho_ + ( + IOobject + ( + "rhoThermo", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimDensity + ) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::basicRhoThermo::~basicRhoThermo() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp<Foam::volScalarField> Foam::basicRhoThermo::rho() const +{ + return rho_; +} + + +Foam::volScalarField& Foam::basicRhoThermo::rho() +{ + return rho_; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/basicRhoThermo.H b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/basicRhoThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..04e8ea1c3308809298de16480fa32c9fd64dd2f5 --- /dev/null +++ b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/basicRhoThermo.H @@ -0,0 +1,123 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::basicRhoThermo + +Description + Basic thermodynamic properties based on density + +SourceFiles + basicRhoThermo.C + newBasicRhoThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef basicRhoThermo_H +#define basicRhoThermo_H + +#include "basicThermo.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class basicRhoThermo Declaration +\*---------------------------------------------------------------------------*/ + +class basicRhoThermo +: + public basicThermo +{ + +protected: + + // Protected data + + //- Density field [kg/m^3] + // Named 'rhoThermo' to avoid (potential) conflict with solver density + volScalarField rho_; + + + // Protected member functions + + //- Construct as copy (not implemented) + basicRhoThermo(const basicRhoThermo&); + + +public: + + //- Runtime type information + TypeName("basicRhoThermo"); + + + //- Declare run-time constructor selection table + declareRunTimeSelectionTable + ( + autoPtr, + basicRhoThermo, + fvMesh, + (const fvMesh& mesh), + (mesh) + ); + + + // Constructors + + //- Construct from mesh + basicRhoThermo(const fvMesh&); + + + //- Selector + static autoPtr<basicRhoThermo> New(const fvMesh&); + + + //- Destructor + virtual ~basicRhoThermo(); + + + // Member functions + + // Fields derived from thermodynamic state variables + + //- Density [kg/m^3] + virtual tmp<volScalarField> rho() const; + + //- Return non-const access to the local density field [kg/m^3] + virtual volScalarField& rho(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/basic/basicThermo/makeBasicThermo.H b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/makeBasicRhoThermo.H similarity index 76% rename from src/thermophysicalModels/basic/basicThermo/makeBasicThermo.H rename to src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/makeBasicRhoThermo.H index 59165247a470305374d758aee6475680bf4cc9b5..e6302bea8c382a4edee96badd71cfb2bfec2ef2c 100644 --- a/src/thermophysicalModels/basic/basicThermo/makeBasicThermo.H +++ b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/makeBasicRhoThermo.H @@ -23,36 +23,42 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA InClass - Foam::basicThermo + Foam::basicRhoThermo Description + Macros for creating 'basic' density-based thermo packages \*---------------------------------------------------------------------------*/ -#ifndef makeBasicThermo_H -#define makeBasicThermo_H +#ifndef makeBasicRhoThermo_H +#define makeBasicRhoThermo_H -#include "basicThermo.H" +#include "basicRhoThermo.H" +#include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeBasicThermo(Cthermo,Mixture,Transport,Thermo,EqnOfState) \ +#define makeBasicRhoThermo(Cthermo,Mixture,Transport,Thermo,EqnOfState) \ \ typedef Cthermo<Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \ Cthermo##Mixture##Transport##Thermo##EqnOfState; \ \ defineTemplateTypeNameAndDebugWithName \ - (Cthermo##Mixture##Transport##Thermo##EqnOfState, \ +( \ + Cthermo##Mixture##Transport##Thermo##EqnOfState, \ #Cthermo \ - "<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", 0); \ + "<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", \ + 0 \ +); \ \ addToRunTimeSelectionTable \ ( \ - basicThermo, \ + basicRhoThermo, \ Cthermo##Mixture##Transport##Thermo##EqnOfState, \ fvMesh \ ) + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/src/thermophysicalModels/basic/basicThermo/newBasicThermo.C b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/newBasicRhoThermo.C similarity index 68% rename from src/thermophysicalModels/basic/basicThermo/newBasicThermo.C rename to src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/newBasicRhoThermo.C index 3ff6bc9dd19716ce001259383d23e175e2102ae4..9a7ec5ac86f19c77078dc9a2ce899baa732d2bda 100644 --- a/src/thermophysicalModels/basic/basicThermo/newBasicThermo.C +++ b/src/thermophysicalModels/basic/rhoThermo/basicRhoThermo/newBasicRhoThermo.C @@ -23,23 +23,20 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Description - Selection function for internal energy based thermodynamics package. + Selection function for 'basic' density-based thermodynamics \*---------------------------------------------------------------------------*/ -#include "basicThermo.H" -#include "fvMesh.H" +#include "basicRhoThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -namespace Foam +Foam::autoPtr<Foam::basicRhoThermo> Foam::basicRhoThermo::New +( + const fvMesh& mesh +) { - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -autoPtr<basicThermo> basicThermo::New(const fvMesh& mesh) -{ - word basicThermoTypeName; + word thermoTypeName; // Enclose the creation of the thermophysicalProperties to ensure it is // deleted before the turbulenceModel is created otherwise the dictionary @@ -57,30 +54,25 @@ autoPtr<basicThermo> basicThermo::New(const fvMesh& mesh) ) ); - thermoDict.lookup("thermoType") >> basicThermoTypeName; + thermoDict.lookup("thermoType") >> thermoTypeName; } - Info<< "Selecting thermodynamics package " << basicThermoTypeName << endl; + Info<< "Selecting thermodynamics package " << thermoTypeName << endl; fvMeshConstructorTable::iterator cstrIter = - fvMeshConstructorTablePtr_->find(basicThermoTypeName); + fvMeshConstructorTablePtr_->find(thermoTypeName); if (cstrIter == fvMeshConstructorTablePtr_->end()) { - FatalErrorIn("basicThermo::New(const fvMesh&)") - << "Unknown basicThermo type " << basicThermoTypeName - << endl << endl - << "Valid basicThermo types are :" << endl - << fvMeshConstructorTablePtr_->toc() + FatalErrorIn("basicRhoThermo::New(const fvMesh&)") + << "Unknown basicRhoThermo type " << thermoTypeName << nl << nl + << "Valid basicRhoThermo types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl << exit(FatalError); } - return autoPtr<basicThermo>(cstrIter()(mesh)); + return autoPtr<basicRhoThermo>(cstrIter()(mesh)); } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermo.C b/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..ce3486fa152124a02503f5bdd6c6787eb888438c --- /dev/null +++ b/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermo.C @@ -0,0 +1,346 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hRhoThermo.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class MixtureType> +void Foam::hRhoThermo<MixtureType>::calculate() +{ + const scalarField& hCells = this->h_.internalField(); + const scalarField& pCells = this->p_.internalField(); + + scalarField& TCells = this->T_.internalField(); + scalarField& psiCells = this->psi_.internalField(); + scalarField& rhoCells = this->rho_.internalField(); + scalarField& muCells = this->mu_.internalField(); + scalarField& alphaCells = this->alpha_.internalField(); + + forAll(TCells, celli) + { + const typename MixtureType::thermoType& mixture_ = + this->cellMixture(celli); + + TCells[celli] = mixture_.TH(hCells[celli], TCells[celli]); + psiCells[celli] = mixture_.psi(pCells[celli], TCells[celli]); + rhoCells[celli] = mixture_.rho(pCells[celli], TCells[celli]); + + muCells[celli] = mixture_.mu(TCells[celli]); + alphaCells[celli] = mixture_.alpha(TCells[celli]); + } + + forAll(this->T_.boundaryField(), patchi) + { + fvPatchScalarField& pp = this->p_.boundaryField()[patchi]; + fvPatchScalarField& pT = this->T_.boundaryField()[patchi]; + fvPatchScalarField& ppsi = this->psi_.boundaryField()[patchi]; + fvPatchScalarField& prho = this->rho_.boundaryField()[patchi]; + + fvPatchScalarField& ph = this->h_.boundaryField()[patchi]; + + fvPatchScalarField& pmu = this->mu_.boundaryField()[patchi]; + fvPatchScalarField& palpha = this->alpha_.boundaryField()[patchi]; + + if (pT.fixesValue()) + { + forAll(pT, facei) + { + const typename MixtureType::thermoType& mixture_ = + this->patchFaceMixture(patchi, facei); + + ph[facei] = mixture_.H(pT[facei]); + + ppsi[facei] = mixture_.psi(pp[facei], pT[facei]); + prho[facei] = mixture_.rho(pp[facei], pT[facei]); + pmu[facei] = mixture_.mu(pT[facei]); + palpha[facei] = mixture_.alpha(pT[facei]); + } + } + else + { + forAll(pT, facei) + { + const typename MixtureType::thermoType& mixture_ = + this->patchFaceMixture(patchi, facei); + + pT[facei] = mixture_.TH(ph[facei], pT[facei]); + + ppsi[facei] = mixture_.psi(pp[facei], pT[facei]); + prho[facei] = mixture_.rho(pp[facei], pT[facei]); + pmu[facei] = mixture_.mu(pT[facei]); + palpha[facei] = mixture_.alpha(pT[facei]); + } + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hRhoThermo<MixtureType>::hRhoThermo(const fvMesh& mesh) +: + basicRhoThermo(mesh), + MixtureType(*this, mesh), + + h_ + ( + IOobject + ( + "h", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, 0, 0), + this->hBoundaryTypes() + ) +{ + scalarField& hCells = h_.internalField(); + const scalarField& TCells = this->T_.internalField(); + + forAll(hCells, celli) + { + hCells[celli] = this->cellMixture(celli).H(TCells[celli]); + } + + forAll(h_.boundaryField(), patchi) + { + h_.boundaryField()[patchi] == + h(this->T_.boundaryField()[patchi], patchi); + } + + hBoundaryCorrection(h_); + + calculate(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hRhoThermo<MixtureType>::~hRhoThermo() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class MixtureType> +void Foam::hRhoThermo<MixtureType>::correct() +{ + if (debug) + { + Info<< "entering hRhoThermo<MixtureType>::correct()" << endl; + } + + calculate(); + + if (debug) + { + Info<< "exiting hRhoThermo<MixtureType>::correct()" << endl; + } +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> Foam::hRhoThermo<MixtureType>::h +( + const scalarField& T, + const labelList& cells +) const +{ + tmp<scalarField> th(new scalarField(T.size())); + scalarField& h = th(); + + forAll(T, celli) + { + h[celli] = this->cellMixture(cells[celli]).H(T[celli]); + } + + return th; +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> Foam::hRhoThermo<MixtureType>::h +( + const scalarField& T, + const label patchi +) const +{ + tmp<scalarField> th(new scalarField(T.size())); + scalarField& h = th(); + + forAll(T, facei) + { + h[facei] = this->patchFaceMixture(patchi, facei).H(T[facei]); + } + + return th; +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> Foam::hRhoThermo<MixtureType>::Cp +( + const scalarField& T, + const label patchi +) const +{ + tmp<scalarField> tCp(new scalarField(T.size())); + scalarField& cp = tCp(); + + forAll(T, facei) + { + cp[facei] = this->patchFaceMixture(patchi, facei).Cp(T[facei]); + } + + return tCp; +} + + +template<class MixtureType> +Foam::tmp<Foam::volScalarField> Foam::hRhoThermo<MixtureType>::Cp() const +{ + const fvMesh& mesh = this->T_.mesh(); + + tmp<volScalarField> tCp + ( + new volScalarField + ( + IOobject + ( + "Cp", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, -1, 0), + this->T_.boundaryField().types() + ) + ); + + volScalarField& cp = tCp(); + + forAll(this->T_, celli) + { + cp[celli] = this->cellMixture(celli).Cp(this->T_[celli]); + } + + forAll(this->T_.boundaryField(), patchi) + { + const fvPatchScalarField& pT = this->T_.boundaryField()[patchi]; + fvPatchScalarField& pCp = cp.boundaryField()[patchi]; + + forAll(pT, facei) + { + pCp[facei] = this->patchFaceMixture(patchi, facei).Cp(pT[facei]); + } + } + + return tCp; +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> Foam::hRhoThermo<MixtureType>::Cv +( + const scalarField& T, + const label patchi +) const +{ + tmp<scalarField> tCv(new scalarField(T.size())); + scalarField& cv = tCv(); + + forAll(T, facei) + { + cv[facei] = this->patchFaceMixture(patchi, facei).Cv(T[facei]); + } + + return tCv; +} + + +template<class MixtureType> +Foam::tmp<Foam::volScalarField> Foam::hRhoThermo<MixtureType>::Cv() const +{ + const fvMesh& mesh = this->T_.mesh(); + + tmp<volScalarField> tCv + ( + new volScalarField + ( + IOobject + ( + "Cv", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, -1, 0) + ) + ); + + volScalarField& cv = tCv(); + + forAll(this->T_, celli) + { + cv[celli] = this->cellMixture(celli).Cv(this->T_[celli]); + } + + forAll(this->T_.boundaryField(), patchi) + { + cv.boundaryField()[patchi] = + Cv(this->T_.boundaryField()[patchi], patchi); + } + + return tCv; +} + + +template<class MixtureType> +bool Foam::hRhoThermo<MixtureType>::read() +{ + if (basicRhoThermo::read()) + { + MixtureType::read(*this); + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/basic/hThermo/hThermo.H b/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermo.H similarity index 89% rename from src/thermophysicalModels/basic/hThermo/hThermo.H rename to src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermo.H index ead0088a7cae670e2e340f63bf59069ff7a965aa..a83a241c26354dfad0d1d4cd18f46f9dde950e72 100644 --- a/src/thermophysicalModels/basic/hThermo/hThermo.H +++ b/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermo.H @@ -23,20 +23,20 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::hThermo + Foam::hPsiThermo Description - Enthalpy for a mixture + Enthalpy for a mixture based on density SourceFiles - hThermo.C + hRhoThermo.C \*---------------------------------------------------------------------------*/ -#ifndef hThermo_H -#define hThermo_H +#ifndef hRhoThermo_H +#define hRhoThermo_H -#include "basicThermo.H" +#include "basicRhoThermo.H" #include "basicMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,42 +45,44 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class hThermo Declaration + Class hRhoThermo Declaration \*---------------------------------------------------------------------------*/ template<class MixtureType> -class hThermo +class hRhoThermo : - public basicThermo, + public basicRhoThermo, public MixtureType { // Private data + //- Enthalpy field volScalarField h_; // Private member functions + //- Calculate the thermo variables void calculate(); //- Construct as copy (not implemented) - hThermo(const hThermo<MixtureType>&); + hRhoThermo(const hRhoThermo<MixtureType>&); public: //- Runtime type information - TypeName("hThermo"); + TypeName("hRhoThermo"); // Constructors //- Construct from mesh - hThermo(const fvMesh&); + hRhoThermo(const fvMesh&); //- Destructor - virtual ~hThermo(); + virtual ~hRhoThermo(); // Member functions @@ -166,7 +168,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #ifdef NoRepository -# include "hThermo.C" +# include "hRhoThermo.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/basic/hThermo/hThermos.C b/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermos.C similarity index 86% rename from src/thermophysicalModels/basic/hThermo/hThermos.C rename to src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermos.C index 0ed152ec5fb31fbe2052b5a8f7411c5ca9dacfb2..233ee905dccf4f49d6f7c3472d4715612f388d1d 100644 --- a/src/thermophysicalModels/basic/hThermo/hThermos.C +++ b/src/thermophysicalModels/basic/rhoThermo/hRhoThermo/hRhoThermos.C @@ -22,15 +22,9 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - Selection function for internal energy based thermodynamics package. - \*---------------------------------------------------------------------------*/ -#include "error.H" - -#include "basicThermo.H" -#include "makeBasicThermo.H" +#include "makeBasicRhoThermo.H" #include "perfectGas.H" @@ -41,11 +35,9 @@ Description #include "constTransport.H" #include "sutherlandTransport.H" -#include "hThermo.H" +#include "hRhoThermo.H" #include "pureMixture.H" -#include "addToRunTimeSelectionTable.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -53,34 +45,34 @@ namespace Foam /* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ - -makeBasicThermo +makeBasicRhoThermo ( - hThermo, + hRhoThermo, pureMixture, constTransport, hConstThermo, perfectGas ); -makeBasicThermo +makeBasicRhoThermo ( - hThermo, + hRhoThermo, pureMixture, sutherlandTransport, hConstThermo, perfectGas ); -makeBasicThermo +makeBasicRhoThermo ( - hThermo, + hRhoThermo, pureMixture, sutherlandTransport, janafThermo, perfectGas ); + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/thermophysicalModels/chemistryModel/Make/files b/src/thermophysicalModels/chemistryModel/Make/files index 542393735ccb741fd7a016d60f550aae527f5ec0..b92108d63a23df223262b8b2e597a8a09100a1f1 100644 --- a/src/thermophysicalModels/chemistryModel/Make/files +++ b/src/thermophysicalModels/chemistryModel/Make/files @@ -1,12 +1,13 @@ -chemistryModel = chemistryModel -chemistrySolver = chemistrySolver +chemistryModel/basicChemistryModel/basicChemistryModel.C -$(chemistryModel)/chemistryModel.C +chemistryModel/psiChemistryModel/psiChemistryModel.C +chemistryModel/psiChemistryModel/newPsiChemistryModel.C +chemistryModel/psiChemistryModel/psiChemistryModels.C -$(chemistrySolver)/chemistrySolver/chemistrySolver.C -$(chemistrySolver)/chemistrySolver/newChemistrySolver.C -$(chemistrySolver)/sequential/sequential.C -$(chemistrySolver)/EulerImplicit/EulerImplicit.C -$(chemistrySolver)/ode/ode.C +chemistryModel/rhoChemistryModel/rhoChemistryModel.C +chemistryModel/rhoChemistryModel/newRhoChemistryModel.C +chemistryModel/rhoChemistryModel/rhoChemistryModels.C + +chemistrySolver/chemistrySolver/makeChemistrySolvers.C LIB = $(FOAM_LIBBIN)/libchemistryModel diff --git a/src/thermophysicalModels/chemistryModel/Make/options b/src/thermophysicalModels/chemistryModel/Make/options index 80ca3a7c6d6d35bb53db55f03a433f29602fa7c8..3cdfbc22ac450a66d647c677a8730c6c1f8ff1f7 100644 --- a/src/thermophysicalModels/chemistryModel/Make/options +++ b/src/thermophysicalModels/chemistryModel/Make/options @@ -1,15 +1,16 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/functions/Polynomial \ + -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/ODE/lnInclude LIB_LIBS = \ - -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels \ + -lbasicThermophysicalModels \ + -lreactionThermophysicalModels \ + -lspecie \ -lthermophysicalFunctions \ - -lspecie \ - -lODE + -lODE diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C similarity index 59% rename from src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel.C rename to src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C index 78ce070b1972b9e1127471865d4e5714b438cc21..dfe226da197e43ebeca9e6f333c2e4e76bb3f18d 100644 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel.C +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,96 +24,91 @@ License \*---------------------------------------------------------------------------*/ -#include "chemistryModel.H" +#include "ODEChemistryModel.H" #include "chemistrySolver.H" -#include "multiComponentMixture.H" +#include "reactingMixture.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components -Foam::chemistryModel::chemistryModel +template<class CompType, class ThermoType> +Foam::ODEChemistryModel<CompType, ThermoType>::ODEChemistryModel ( - hCombustionThermo& thermo, - const volScalarField& rho + const fvMesh& mesh, + const word& compTypeName, + const word& thermoTypeName ) : - thermo_(thermo), + CompType(mesh, thermoTypeName), - Y_(thermo.composition().Y()), - rho_(rho), + ODE(), - chemistryProperties_ + Y_(this->thermo().composition().Y()), + + reactions_ ( - IOobject - ( - "chemistryProperties", - rho_.time().constant(), - rho_.db(), - IOobject::MUST_READ, - IOobject::NO_WRITE - ) + dynamic_cast<const reactingMixture<ThermoType>&>(this->thermo()) + ), + specieThermo_ + ( + dynamic_cast<const reactingMixture<ThermoType>&> + (this->thermo()).speciesData() ), - chemistry_(chemistryProperties_.lookup("chemistry")), - - reactions_(dynamic_cast<const reactingMixture&>(thermo)), - specieThermo_(dynamic_cast<const reactingMixture&>(thermo).speciesData()), - Ns_(thermo.composition().Y().size()), - Nr_(reactions_.size()), + nSpecie_(Y_.size()), + nReaction_(reactions_.size()), solver_ ( - chemistrySolver::New + chemistrySolver<CompType, ThermoType>::New ( - chemistryProperties_, - *this + *this, + compTypeName, + thermoTypeName ) ), - deltaTChem_ - ( - rho_.size(), - readScalar(chemistryProperties_.lookup("initialChemicalTimeStep")) - ) + + RR_(nSpecie_) { - // set the size of the chemistry sources - RR_.setSize(Ns()); - for(label i=0; i<Ns(); i++) + // create the fields for the chemistry sources + forAll(RR_, fieldI) { RR_.set ( - i, - new scalarField(rho_.size(), 0.0) + fieldI, + new scalarField(mesh.nCells(), 0.0) ); } - Info<< "chemistryModel::chemistryModel: Number of species = " << Ns() - << " and reactions = " << Nr() << endl; + Info<< "ODEChemistryModel: Number of species = " << nSpecie_ + << " and reactions = " << nReaction_ << endl; } // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::chemistryModel::~chemistryModel() +template<class CompType, class ThermoType> +Foam::ODEChemistryModel<CompType, ThermoType>::~ODEChemistryModel() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::scalarField Foam::chemistryModel::omega +template<class CompType, class ThermoType> +Foam::scalarField Foam::ODEChemistryModel<CompType, ThermoType>::omega ( const scalarField& c, const scalar T, const scalar p ) const { - scalar pf,cf,pr,cr; + scalar pf, cf, pr, cr; label lRef, rRef; scalarField om(nEqns(), 0.0); forAll(reactions_, i) { - const reaction& R = reactions_[i]; + const Reaction<ThermoType>& R = reactions_[i]; scalar omegai = omega ( @@ -136,12 +131,13 @@ Foam::scalarField Foam::chemistryModel::omega } return om; -} // end omega +} -Foam::scalar Foam::chemistryModel::omega +template<class CompType, class ThermoType> +Foam::scalar Foam::ODEChemistryModel<CompType, ThermoType>::omega ( - const reaction& R, + const Reaction<ThermoType>& R, const scalarField& c, const scalar T, const scalar p, @@ -153,8 +149,8 @@ Foam::scalar Foam::chemistryModel::omega label& rRef ) const { - scalarField c2(Ns(), 0.0); - for(label i=0; i<Ns(); i++) + scalarField c2(nSpecie_, 0.0); + for (label i=0; i<nSpecie_; i++) { c2[i] = max(0.0, c[i]); } @@ -172,7 +168,7 @@ Foam::scalar Foam::chemistryModel::omega lRef = R.lhs()[slRef].index; pf = kf; - for(label s=1; s<Nl; s++) + for (label s=1; s<Nl; s++) { label si = R.lhs()[s].index; @@ -197,7 +193,7 @@ Foam::scalar Foam::chemistryModel::omega { if (cf > SMALL) { - pf *= pow(cf, exp-1.0); + pf *= pow(cf, exp - 1.0); } else { @@ -206,7 +202,7 @@ Foam::scalar Foam::chemistryModel::omega } else { - pf *= pow(cf, exp-1.0); + pf *= pow(cf, exp - 1.0); } } @@ -215,7 +211,7 @@ Foam::scalar Foam::chemistryModel::omega // find the matrix element and element position for the rhs pr = kr; - for(label s=1; s<Nr; s++) + for (label s=1; s<Nr; s++) { label si = R.rhs()[s].index; if (c[si] < c[rRef]) @@ -239,7 +235,7 @@ Foam::scalar Foam::chemistryModel::omega { if (cr>SMALL) { - pr *= pow(cr, exp-1.0); + pr *= pow(cr, exp - 1.0); } else { @@ -248,25 +244,26 @@ Foam::scalar Foam::chemistryModel::omega } else { - pr *= pow(cr, exp-1.0); + pr *= pow(cr, exp - 1.0); } } return pf*cf - pr*cr; -} // end omega +} -void Foam::chemistryModel::derivatives +template<class CompType, class ThermoType> +void Foam::ODEChemistryModel<CompType, ThermoType>::derivatives ( const scalar time, const scalarField &c, scalarField& dcdt ) const { - scalar T = c[Ns_]; - scalar p = c[Ns_ + 1]; + scalar T = c[nSpecie_]; + scalar p = c[nSpecie_ + 1]; dcdt = omega(c, T, p); @@ -274,7 +271,7 @@ void Foam::chemistryModel::derivatives // dT/dt = ... scalar rho = 0.0; scalar cSum = 0.0; - for(label i=0; i<Ns(); i++) + for (label i=0; i<nSpecie_; i++) { scalar W = specieThermo_[i].W(); cSum += c[i]; @@ -282,7 +279,7 @@ void Foam::chemistryModel::derivatives } scalar mw = rho/cSum; scalar cp = 0.0; - for(label i=0; i<Ns(); i++) + for (label i=0; i<nSpecie_; i++) { scalar cpi = specieThermo_[i].cp(T); scalar Xi = c[i]/rho; @@ -291,7 +288,7 @@ void Foam::chemistryModel::derivatives cp /= mw; scalar dT = 0.0; - for(label i=0; i<Ns(); i++) + for (label i=0; i<nSpecie_; i++) { scalar hi = specieThermo_[i].h(T); dT += hi*dcdt[i]; @@ -301,14 +298,15 @@ void Foam::chemistryModel::derivatives // limit the time-derivative, this is more stable for the ODE // solver when calculating the allowed time step scalar dtMag = min(500.0, mag(dT)); - dcdt[Ns_] = -dT*dtMag/(mag(dT) + 1.0e-10); + dcdt[nSpecie_] = -dT*dtMag/(mag(dT) + 1.0e-10); // dp/dt = ... - dcdt[Ns_+1] = 0.0; + dcdt[nSpecie_+1] = 0.0; } -void Foam::chemistryModel::jacobian +template<class CompType, class ThermoType> +void Foam::ODEChemistryModel<CompType, ThermoType>::jacobian ( const scalar t, const scalarField& c, @@ -316,29 +314,29 @@ void Foam::chemistryModel::jacobian scalarSquareMatrix& dfdc ) const { - scalar T = c[Ns_]; - scalar p = c[Ns_ + 1]; + scalar T = c[nSpecie_]; + scalar p = c[nSpecie_ + 1]; - scalarField c2(Ns(), 0.0); - for(label i=0; i<Ns(); i++) + scalarField c2(nSpecie_, 0.0); + for (label i=0; i<nSpecie_; i++) { c2[i] = max(c[i], 0.0); } - for(label i=0; i<nEqns(); i++) + for (label i=0; i<nEqns(); i++) { - for(label j=0; j<nEqns(); j++) + for (label j=0; j<nEqns(); j++) { dfdc[i][j] = 0.0; } } - // length of the first argument must be Ns() + // length of the first argument must be nSpecie() dcdt = omega(c2, T, p); for (label ri=0; ri<reactions_.size(); ri++) { - const reaction& R = reactions_[ri]; + const Reaction<ThermoType>& R = reactions_[ri]; scalar kf0 = R.kf(T, p, c2); scalar kr0 = R.kr(T, p, c2); @@ -357,7 +355,7 @@ void Foam::chemistryModel::jacobian { if (c2[si]>SMALL) { - kf *= el*pow(c2[si]+VSMALL, el-1.0); + kf *= el*pow(c2[si] + VSMALL, el - 1.0); } else { @@ -366,7 +364,7 @@ void Foam::chemistryModel::jacobian } else { - kf *= el*pow(c2[si], el-1.0); + kf *= el*pow(c2[si], el - 1.0); } } else @@ -403,7 +401,7 @@ void Foam::chemistryModel::jacobian { if (c2[si]>SMALL) { - kr *= er*pow(c2[si]+VSMALL, er-1.0); + kr *= er*pow(c2[si] + VSMALL, er - 1.0); } else { @@ -412,7 +410,7 @@ void Foam::chemistryModel::jacobian } else { - kr *= er*pow(c2[si], er-1.0); + kr *= er*pow(c2[si], er - 1.0); } } else @@ -438,40 +436,54 @@ void Foam::chemistryModel::jacobian // calculate the dcdT elements numerically scalar delta = 1.0e-8; - scalarField dcdT0 = omega(c2, T-delta, p); - scalarField dcdT1 = omega(c2, T+delta, p); + scalarField dcdT0 = omega(c2, T - delta, p); + scalarField dcdT1 = omega(c2, T + delta, p); - for(label i=0; i<nEqns(); i++) + for (label i=0; i<nEqns(); i++) { - dfdc[i][Ns()] = 0.5*(dcdT1[i]-dcdT0[i])/delta; + dfdc[i][nSpecie()] = 0.5*(dcdT1[i] - dcdT0[i])/delta; } -} // end jacobian +} -Foam::tmp<Foam::volScalarField> Foam::chemistryModel::tc() const +template<class CompType, class ThermoType> +Foam::tmp<Foam::volScalarField> +Foam::ODEChemistryModel<CompType, ThermoType>::tc() const { - scalar pf,cf,pr,cr; label lRef, rRef; - label nCells = rho_.size(); - label Nr = reactions_.size(); + const volScalarField rho + ( + IOobject + ( + "rho", + this->time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->thermo().rho() + ); + + label nCells = rho.size(); + label nReaction = reactions_.size(); scalarField t(nCells, SMALL); - if (chemistry_) + if (this->chemistry_) { - - for(label celli=0; celli<nCells; celli++) + forAll(rho, celli) { - scalar rhoi = rho_[celli]; - scalar Ti = thermo_.T()[celli]; - scalar pi = thermo_.p()[celli]; - scalarField c(Ns_); + scalar rhoi = rho[celli]; + scalar Ti = this->thermo().T()[celli]; + scalar pi = this->thermo().p()[celli]; + scalarField c(nSpecie_); scalar cSum = 0.0; - for(label i=0; i<Ns_; i++) + for (label i=0; i<nSpecie_; i++) { scalar Yi = Y_[i][celli]; c[i] = rhoi*Yi/specieThermo_[i].W(); @@ -480,7 +492,7 @@ Foam::tmp<Foam::volScalarField> Foam::chemistryModel::tc() const forAll(reactions_, i) { - const reaction& R = reactions_[i]; + const Reaction<ThermoType>& R = reactions_[i]; omega ( @@ -493,7 +505,7 @@ Foam::tmp<Foam::volScalarField> Foam::chemistryModel::tc() const t[celli] += sr*pf*cf; } } - t[celli] = Nr*cSum/t[celli]; + t[celli] = nReaction*cSum/t[celli]; } } @@ -504,13 +516,13 @@ Foam::tmp<Foam::volScalarField> Foam::chemistryModel::tc() const IOobject ( "tc", - rho_.time().timeName(), - rho_.db(), + this->mesh_.time().timeName(), + this->mesh_, IOobject::NO_READ, IOobject::NO_WRITE ), - rho_.mesh(), - dimensionedScalar("zero", dimensionSet(0, 0, 1, 0, 0), 0.0), + this->mesh_, + dimensionedScalar("zero", dimTime, 0.0), zeroGradientFvPatchScalarField::typeName ) ); @@ -522,37 +534,103 @@ Foam::tmp<Foam::volScalarField> Foam::chemistryModel::tc() const } -Foam::label Foam::chemistryModel::nEqns() const +template<class CompType, class ThermoType> +Foam::tmp<Foam::volScalarField> +Foam::ODEChemistryModel<CompType, ThermoType>::dQ() const +{ + tmp<volScalarField> tdQ + ( + new volScalarField + ( + IOobject + ( + "dQ", + this->mesh_.time().timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + this->mesh_, + dimensionedScalar + ( + "zero", + dimensionSet(1, -3, -1 , 0, 0, 0, 0), + 0.0 + ) + ) + ); + + if (this->chemistry_) + { + scalarField& dQ = tdQ(); + + scalarField cp(dQ.size(), 0.0); + + forAll(Y_, i) + { + forAll(dQ, cellI) + { + scalar Ti = this->thermo().T()[cellI]; + cp[cellI] += Y_[i][cellI]*specieThermo_[i].Cp(Ti); + scalar hi = specieThermo_[i].h(Ti); + dQ[cellI] -= hi*RR_[i][cellI]; + } + } + + dQ /= cp; + } + + return tdQ; +} + + +template<class CompType, class ThermoType> +Foam::label Foam::ODEChemistryModel<CompType, ThermoType>::nEqns() const { // nEqns = number of species + temperature + pressure - return Ns_ + 2; + return nSpecie_ + 2; } -void Foam::chemistryModel::calculate() +template<class CompType, class ThermoType> +void Foam::ODEChemistryModel<CompType, ThermoType>::calculate() { - for(label i=0; i<Ns(); i++) + const volScalarField rho + ( + IOobject + ( + "rho", + this->time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->thermo().rho() + ); + + for (label i=0; i<nSpecie_; i++) { - RR_[i].setSize(rho_.size()); + RR_[i].setSize(rho.size()); } - if (chemistry_) + if (this->chemistry_) { - for(label celli=0; celli<rho_.size(); celli++) + forAll(rho, celli) { - for(label i=0; i<Ns(); i++) + for (label i=0; i<nSpecie_; i++) { RR_[i][celli] = 0.0; } - scalar rhoi = rho_[celli]; - scalar Ti = thermo_.T()[celli]; - scalar pi = thermo_.p()[celli]; + scalar rhoi = rho[celli]; + scalar Ti = this->thermo().T()[celli]; + scalar pi = this->thermo().p()[celli]; - scalarField c(Ns_); + scalarField c(nSpecie_); scalarField dcdt(nEqns(), 0.0); - for(label i=0; i<Ns_; i++) + for (label i=0; i<nSpecie_; i++) { scalar Yi = Y_[i][celli]; c[i] = rhoi*Yi/specieThermo_[i].W(); @@ -560,7 +638,7 @@ void Foam::chemistryModel::calculate() dcdt = omega(c, Ti, pi); - for(label i=0; i<Ns_; i++) + for (label i=0; i<nSpecie_; i++) { RR_[i][celli] = dcdt[i]*specieThermo_[i].W(); } @@ -569,44 +647,63 @@ void Foam::chemistryModel::calculate() } -Foam::scalar Foam::chemistryModel::solve(const scalar t0, const scalar deltaT) +template<class CompType, class ThermoType> +Foam::scalar Foam::ODEChemistryModel<CompType, ThermoType>::solve +( + const scalar t0, + const scalar deltaT +) { - for(label i=0; i<Ns(); i++) + const volScalarField rho + ( + IOobject + ( + "rho", + this->time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->thermo().rho() + ); + + for (label i=0; i<nSpecie_; i++) { - RR_[i].setSize(rho_.size()); + RR_[i].setSize(rho.size()); } - if (!chemistry_) + if (!this->chemistry_) { return GREAT; } scalar deltaTMin = GREAT; - for(label celli=0; celli<rho_.size(); celli++) + forAll(rho, celli) { - for(label i=0; i<Ns(); i++) + for (label i=0; i<nSpecie(); i++) { RR_[i][celli] = 0.0; } - scalar rhoi = rho_[celli]; - scalar Ti = thermo_.T()[celli]; - scalar hi = thermo_.h()[celli]; - scalar pi = thermo_.p()[celli]; + scalar rhoi = rho[celli]; + scalar Ti = this->thermo().T()[celli]; + scalar hi = this->thermo().h()[celli]; + scalar pi = this->thermo().p()[celli]; - scalarField c(Ns_); - scalarField c0(Ns_); - scalarField dc(Ns_, 0.0); + scalarField c(nSpecie_); + scalarField c0(nSpecie_); + scalarField dc(nSpecie_, 0.0); - for(label i=0; i<Ns_; i++) + for (label i=0; i<nSpecie_; i++) { c[i] = rhoi*Y_[i][celli]/specieThermo_[i].W(); } c0 = c; scalar t = t0; - scalar tauC = deltaTChem_[celli]; + scalar tauC = this->deltaTChem_[celli]; scalar dt = min(deltaT, tauC); scalar timeLeft = deltaT; @@ -620,15 +717,15 @@ Foam::scalar Foam::chemistryModel::solve(const scalar t0, const scalar deltaT) // update the temperature cTot = sum(c); - reactionThermo mixture(0.0*specieThermo_[0]); - for(label i=0; i<Ns_; i++) + ThermoType mixture(0.0*specieThermo_[0]); + for (label i=0; i<nSpecie_; i++) { mixture += (c[i]/cTot)*specieThermo_[i]; } Ti = mixture.TH(hi, Ti); timeLeft -= dt; - deltaTChem_[celli] = tauC; + this->deltaTChem_[celli] = tauC; dt = min(timeLeft, tauC); dt = max(dt, SMALL); } @@ -636,13 +733,13 @@ Foam::scalar Foam::chemistryModel::solve(const scalar t0, const scalar deltaT) dc = c - c0; scalar WTot = 0.0; - for(label i=0; i<Ns_; i++) + for (label i=0; i<nSpecie_; i++) { WTot += c[i]*specieThermo_[i].W(); } WTot /= cTot; - for(label i=0; i<Ns_; i++) + for (label i=0; i<nSpecie_; i++) { RR_[i][celli] = dc[i]*specieThermo_[i].W()/deltaT; } diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.H new file mode 100644 index 0000000000000000000000000000000000000000..ac8c10e086fcb6a8eebbc8ad39701c28c6438477 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModel.H @@ -0,0 +1,227 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::ODEChemistryModel + +Description + Extends base chemistry model by adding a thermo package, and ODE functions. + Introduces chemistry equation system and evaluation of chemical source + terms. + +SourceFiles + ODEChemistryModelI.H + ODEChemistryModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ODEChemistryModel_H +#define ODEChemistryModel_H + +#include "hCombustionThermo.H" +#include "Reaction.H" +#include "ODE.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +template<class CompType, class ThermoType> +class chemistrySolver; + +/*---------------------------------------------------------------------------*\ + Class ODEChemistryModel Declaration +\*---------------------------------------------------------------------------*/ + +template<class CompType, class ThermoType> +class ODEChemistryModel +: + public CompType, + public ODE +{ + // Private Member Functions + + //- Disallow default bitwise assignment + void operator=(const ODEChemistryModel&); + + +protected: + + // Private data + + //- Reference to the field of specie mass fractions + PtrList<volScalarField>& Y_; + + //- Reactions + const PtrList<Reaction<ThermoType> >& reactions_; + + //- Thermodynamic data of the species + const PtrList<ThermoType>& specieThermo_; + + //- Number of species + label nSpecie_; + + //- Number of reactions + label nReaction_; + + //- Chemistry solver + autoPtr<chemistrySolver<CompType, ThermoType> > solver_; + + //- Chemical source term + PtrList<scalarField> RR_; + + + // Protected Member Functions + + //- Write access to chemical source terms + // (e.g. for multi-chemistry model) + inline PtrList<scalarField>& RR(); + + +public: + + //- Runtime type information + TypeName("ODEChemistryModel"); + + + // Constructors + + //- Construct from components + ODEChemistryModel + ( + const fvMesh& mesh, + const word& compTypeName, + const word& thermoTypeName + ); + + + //- Destructor + virtual ~ODEChemistryModel(); + + + // Member Functions + + //- The reactions + inline const PtrList<Reaction<ThermoType> >& reactions() const; + + //- Thermodynamic data of the species + inline const PtrList<ThermoType>& specieThermo() const; + + //- The number of species + inline label nSpecie() const; + + //- The number of reactions + inline label nReaction() const; + + //- Return the chemisty solver + inline const chemistrySolver<CompType, ThermoType>& solver() const; + + //- dc/dt = omega, rate of change in concentration, for each species + virtual scalarField omega + ( + const scalarField& c, + const scalar T, + const scalar p + ) const; + + //- Return the reaction rate for reaction r and the reference + // species and charateristic times + virtual scalar omega + ( + const Reaction<ThermoType>& r, + const scalarField& c, + const scalar T, + const scalar p, + scalar& pf, + scalar& cf, + label& lRef, + scalar& pr, + scalar& cr, + label& rRef + ) const; + + //- Calculates the reaction rates + virtual void calculate(); + + + // Chemistry model functions (overriding abstract functions in + // chemistryModel.H) + + //- Return const access to the chemical source terms + inline tmp<volScalarField> RR(const label i) const; + + //- Solve the reaction system for the given start time and time + // step and return the characteristic time + virtual scalar solve(const scalar t0, const scalar deltaT); + + //- Return the chemical time scale + virtual tmp<volScalarField> tc() const; + + //- Return the heat release + virtual tmp<volScalarField> dQ() const; + + + // ODE functions (overriding abstract functions in ODE.H) + + //- Number of ODE's to solve + virtual label nEqns() const; + + virtual void derivatives + ( + const scalar t, + const scalarField& c, + scalarField& dcdt + ) const; + + virtual void jacobian + ( + const scalar t, + const scalarField& c, + scalarField& dcdt, + scalarSquareMatrix& dfdc + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "ODEChemistryModelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "ODEChemistryModel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModelI.H b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModelI.H new file mode 100644 index 0000000000000000000000000000000000000000..b5264a28d43c2c9dd88ac18610ce0b14ae918cfa --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/ODEChemistryModel/ODEChemistryModelI.H @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "zeroGradientFvPatchFields.H" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CompType, class ThermoType> +inline Foam::PtrList<Foam::scalarField>& +Foam::ODEChemistryModel<CompType, ThermoType>::RR() +{ + return RR_; +} + + +template<class CompType, class ThermoType> +inline const Foam::PtrList<Foam::Reaction<ThermoType> >& +Foam::ODEChemistryModel<CompType, ThermoType>::reactions() const +{ + return reactions_; +} + + +template<class CompType, class ThermoType> +inline const Foam::PtrList<ThermoType>& +Foam::ODEChemistryModel<CompType, ThermoType>::specieThermo() const +{ + return specieThermo_; +} + + +template<class CompType, class ThermoType> +inline Foam::label +Foam::ODEChemistryModel<CompType, ThermoType>::nSpecie() const +{ + return nSpecie_; +} + + +template<class CompType, class ThermoType> +inline Foam::label +Foam::ODEChemistryModel<CompType, ThermoType>::nReaction() const +{ + return nReaction_; +} + + +template<class CompType, class ThermoType> +inline const Foam::chemistrySolver<CompType, ThermoType>& +Foam::ODEChemistryModel<CompType, ThermoType>::solver() const +{ + return solver_; +} + + +template<class CompType, class ThermoType> +inline Foam::tmp<Foam::volScalarField> +Foam::ODEChemistryModel<CompType, ThermoType>::RR +( + const label i +) const +{ + tmp<volScalarField> tRR + ( + new volScalarField + ( + IOobject + ( + "RR(" + this->Y_[i].name() + ')', + this->time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + this->mesh(), + dimensionedScalar("zero", dimensionSet(1, -3, -1, 0, 0), 0.0), + zeroGradientFvPatchScalarField::typeName + ) + ); + + if (this->chemistry_) + { + tRR().internalField() = RR_[i]; + tRR().correctBoundaryConditions(); + } + return tRR; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModel.C new file mode 100644 index 0000000000000000000000000000000000000000..e7bd4f1e35970f5f92b88dffcd9e85ba9dd046ec --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModel.C @@ -0,0 +1,69 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "basicChemistryModel.H" +#include "fvMesh.H" +#include "Time.H" + +/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ + +namespace Foam +{ + defineTypeNameAndDebug(basicChemistryModel, 0); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::basicChemistryModel::basicChemistryModel(const fvMesh& mesh) +: + IOdictionary + ( + IOobject + ( + "chemistryProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ), + mesh_(mesh), + chemistry_(lookup("chemistry")), + deltaTChem_ + ( + mesh.nCells(), + readScalar(lookup("initialChemicalTimeStep")) + ) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::basicChemistryModel::~basicChemistryModel() +{} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModel.H new file mode 100644 index 0000000000000000000000000000000000000000..c8fcdd9863e58ec43bc58046c845634c128fb864 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModel.H @@ -0,0 +1,153 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::basicChemistryModel + +Description + Base class for chemistry models + +SourceFiles + basicChemistryModelI.H + basicChemistryModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef basicChemistryModel_H +#define basicChemistryModel_H + +#include "IOdictionary.H" +#include "Switch.H" +#include "scalarField.H" +#include "volFieldsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class fvMesh; + +/*---------------------------------------------------------------------------*\ + class basicChemistryModel Declaration +\*---------------------------------------------------------------------------*/ + +class basicChemistryModel +: + public IOdictionary +{ + // Private Member Functions + + //- Construct as copy (not implemented) + basicChemistryModel(const basicChemistryModel&); + + //- Disallow default bitwise assignment + void operator=(const basicChemistryModel&); + + +protected: + + // Protected data + + //- Reference to the mesh database + const fvMesh& mesh_; + + //- Chemistry activation switch + Switch chemistry_; + + //- Latest estimation of integration step + scalarField deltaTChem_; + + + // Protected member functions + + //- Return non-const access to the latest estimation of integration + // step, e.g. for multi-chemistry model + scalarField& deltaTChem(); + + +public: + + //- Runtime type information + TypeName("basicChemistryModel"); + + + // Constructors + + //- Construct from mesh + basicChemistryModel(const fvMesh& mesh); + + + //- Destructor + virtual ~basicChemistryModel(); + + + // Member Functions + + //- Return const access to the mesh database + inline const fvMesh& mesh() const; + + //- Chemistry activation switch + inline Switch chemistry() const; + + //- Return the latest estimation of integration step + inline const scalarField& deltaTChem() const; + + + // Functions to be derived in derived classes + + // Fields + + //- Return const access to chemical source terms + virtual tmp<volScalarField> RR(const label i) const = 0; + + + // Chemistry solution + + //- Solve the reaction system for the given start time and + // timestep and return the characteristic time + virtual scalar solve(const scalar t0, const scalar deltaT) = 0; + + //- Return the chemical time scale + virtual tmp<volScalarField> tc() const = 0; + + //- Return the heat release + virtual tmp<volScalarField> dQ() const = 0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "basicChemistryModelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModelI.H b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModelI.H new file mode 100644 index 0000000000000000000000000000000000000000..214d17bac1c9a7f6ae263744abd19a732c881f11 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/basicChemistryModelI.H @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +inline const Foam::fvMesh& Foam::basicChemistryModel::mesh() const +{ + return mesh_; +} + + +inline Foam::Switch Foam::basicChemistryModel::chemistry() const +{ + return chemistry_; +} + + +inline const Foam::scalarField& Foam::basicChemistryModel::deltaTChem() const +{ + return deltaTChem_; +} + + +inline Foam::scalarField& Foam::basicChemistryModel::deltaTChem() +{ + return deltaTChem_; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/makeChemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/makeChemistryModel.H new file mode 100644 index 0000000000000000000000000000000000000000..d0b893629e18416c4c925206290950b5b71cf688 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/basicChemistryModel/makeChemistryModel.H @@ -0,0 +1,72 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +InClass + Foam::psiChemistryModel + +Description + Macros for instantiating chemistry models based on compressibility and + transport types + +\*---------------------------------------------------------------------------*/ + +#ifndef makeChemistryModel_H +#define makeChemistryModel_H + +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeChemistryModel(SS, Comp, Thermo) \ + \ +typedef SS<Comp, Thermo> SS##Comp##Thermo; \ + \ +defineTemplateTypeNameAndDebugWithName \ +( \ + SS##Comp##Thermo, \ + #SS"<"#Comp","#Thermo">", \ + 0 \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + Comp, \ + SS##Comp##Thermo, \ + fvMesh \ +); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel.H deleted file mode 100644 index a194b31ac9ff01ed112fdfe23bebb8f536b88854..0000000000000000000000000000000000000000 --- a/src/thermophysicalModels/chemistryModel/chemistryModel/chemistryModel.H +++ /dev/null @@ -1,281 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Class - Foam::chemistryModel - -Description - Foam::chemistryModel - -SourceFiles - chemistryModelI.H - chemistryModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef chemistryModel_H -#define chemistryModel_H - -#include "hCombustionThermo.H" -#include "reactingMixture.H" -#include "ODE.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -class chemistrySolver; - -/*---------------------------------------------------------------------------*\ - Class chemistryModel Declaration -\*---------------------------------------------------------------------------*/ - -class chemistryModel -: - public ODE -{ - -public: - - typedef reactingMixture::reaction reaction; - typedef reactingMixture::reactionThermo reactionThermo; - - -private: - - // Private data - - const hCombustionThermo& thermo_; - - PtrList<volScalarField>& Y_; - const volScalarField& rho_; - - IOdictionary chemistryProperties_; - - //- Do the chemistry or not. - Switch chemistry_; - - //- The reactions - const PtrList<reaction>& reactions_; - - //- thermodynamic data of the species - const PtrList<reactionThermo>& specieThermo_; - - //- The number of species - label Ns_; - - //- The number of reactions - label Nr_; - - //- chemistry solver - autoPtr<chemistrySolver> solver_; - - //- the chemical source term - PtrList<scalarField> RR_; - - //- Latest estimation of integration step - scalarField deltaTChem_; - - - // Private Member Functions - - //- Disallow default bitwise assignment - void operator=(const chemistryModel&); - -protected: - - // Protected Member Functions - - //- Write access to chemical source terms - // (eg, for multi-chemistry model) - PtrList<scalarField>& RR() - { - return RR_; - } - - //- Return the latest estimation of integration step - // (eg, for multi-chemistry model) - scalarField& deltaTChem() - { - return deltaTChem_; - } - -public: - - // Constructors - - //- Construct from components - chemistryModel - ( - hCombustionThermo& thermo, - const volScalarField& rho - ); - - - // Destructor - - virtual ~chemistryModel(); - - - // Member Functions - - //- Return the thermodynamics model - const hCombustionThermo& thermo() const - { - return thermo_; - } - - //- Access the fractions of the species - const PtrList<volScalarField>& Y() const - { - return Y_; - } - - //- Access the density field - const volScalarField& rho() const - { - return rho_; - } - - //- Return the chemistry properties - inline const IOdictionary& chemistryProperties() const - { - return chemistryProperties_; - } - - //- Do the chemistry or not. - inline Switch chemistry() const - { - return chemistry_; - } - - inline const PtrList<reaction>& reactions() const - { - return reactions_; - } - - inline const PtrList<reactionThermo>& specieThermo() const - { - return specieThermo_; - } - - //- The number of species - inline label Ns() const - { - return Ns_; - } - - //- The number of reactions - inline label Nr() const - { - return Nr_; - } - - // Return the chemisty solver - inline const chemistrySolver& solver() const - { - return solver_; - } - - //- Return the chemical source terms - inline tmp<volScalarField> RR(const label i) const; - - //- Return the latest estimation of integration step - const scalarField& deltaTChem() const - { - return deltaTChem_; - } - - //- The chemical time scale - tmp<volScalarField> tc() const; - - //- dc/dt = omega, rate of change in concentration, for each species - scalarField omega - ( - const scalarField& c, - const scalar T, - const scalar p - ) const; - - //- return the reaction rate for reaction r and the reference - // species and charateristic times - scalar omega - ( - const reaction& r, - const scalarField& c, - const scalar T, - const scalar p, - scalar& pf, - scalar& cf, - label& lRef, - scalar& pr, - scalar& cr, - label& rRef - ) const; - - //- The number of ODE to solve - label nEqns() const; - - void derivatives - ( - const scalar t, - const scalarField& c, - scalarField& dcdt - ) const; - - void jacobian - ( - const scalar t, - const scalarField& c, - scalarField& dcdt, - scalarSquareMatrix& dfdc - ) const; - - //- Calculates the reaction rates - void calculate(); - - //- Solve the reaction system for the given start time and time-step - // and return the characteristic time - scalar solve - ( - const scalar t0, - const scalar deltaT - ); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "chemistryModelI.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/newPsiChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/newPsiChemistryModel.C new file mode 100644 index 0000000000000000000000000000000000000000..6a5606d0e73f13bdc636512e8e5217d95a5f5f8e --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/newPsiChemistryModel.C @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "psiChemistryModel.H" + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::psiChemistryModel> Foam::psiChemistryModel::New +( + const fvMesh& mesh +) +{ + word psiChemistryModelType; + word thermoTypeName; + word userModel; + + // Enclose the creation of the chemistrtyProperties to ensure it is + // deleted before the chemistrtyProperties is created otherwise the + // dictionary is entered in the database twice + { + IOdictionary chemistryPropertiesDict + ( + IOobject + ( + "chemistryProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + chemistryPropertiesDict.lookup("psiChemistryModel") >> userModel; + + // construct chemistry model type name by inserting first template + // argument + label tempOpen = userModel.find('<'); + label tempClose = userModel.find('>'); + + word className = userModel(0, tempOpen); + thermoTypeName = userModel(tempOpen + 1, tempClose - tempOpen - 1); + + psiChemistryModelType = + className + '<' + typeName + ',' + thermoTypeName + '>'; + } + + if (debug) + { + Info<< "Selecting psiChemistryModel " << psiChemistryModelType << endl; + } + else + { + Info<< "Selecting psiChemistryModel " << userModel << endl; + } + + fvMeshConstructorTable::iterator cstrIter = + fvMeshConstructorTablePtr_->find(psiChemistryModelType); + + if (cstrIter == fvMeshConstructorTablePtr_->end()) + { + if (debug) + { + FatalErrorIn("psiChemistryModelBase::New(const mesh&)") + << "Unknown psiChemistryModel type " << psiChemistryModelType + << nl << nl << "Valid psiChemistryModel types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl << exit(FatalError); + } + else + { + wordList models = fvMeshConstructorTablePtr_->toc(); + forAll(models, i) + { + models[i] = models[i].replace(typeName + ',', ""); + } + + FatalErrorIn("psiChemistryModelBase::New(const mesh&)") + << "Unknown psiChemistryModel type " << userModel + << nl << nl << "Valid psiChemistryModel types are:" << nl + << models << nl << exit(FatalError); + } + } + + return autoPtr<psiChemistryModel> + (cstrIter()(mesh, typeName, thermoTypeName)); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModel.C new file mode 100644 index 0000000000000000000000000000000000000000..7381d12a1df87d1a9aebe58a622c990173eb98ef --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModel.C @@ -0,0 +1,58 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "psiChemistryModel.H" +#include "fvMesh.H" +#include "Time.H" + +/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ + +namespace Foam +{ + defineTypeNameAndDebug(psiChemistryModel, 0); + defineRunTimeSelectionTable(psiChemistryModel, fvMesh); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::psiChemistryModel::psiChemistryModel +( + const fvMesh& mesh, + const word& thermoTypeName +) +: + basicChemistryModel(mesh), + thermo_(hCombustionThermo::NewType(mesh, thermoTypeName)) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::psiChemistryModel::~psiChemistryModel() +{} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModel.H new file mode 100644 index 0000000000000000000000000000000000000000..4cf7af58ec89920d63395302ee0d84feb72df17c --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModel.H @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::psiChemistryModel + +Description + Chemistry model for compressibility-based thermodynamics + +SourceFiles + psiChemistryModelI.H + psiChemistryModel.C + newChemistryModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef psiChemistryModel_H +#define psiChemistryModel_H + +#include "basicChemistryModel.H" +#include "autoPtr.H" +#include "runTimeSelectionTables.H" +#include "hCombustionThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class fvMesh; + +/*---------------------------------------------------------------------------*\ + class psiChemistryModel Declaration +\*---------------------------------------------------------------------------*/ + +class psiChemistryModel +: + public basicChemistryModel +{ + // Private Member Functions + + //- Construct as copy (not implemented) + psiChemistryModel(const psiChemistryModel&); + + //- Disallow default bitwise assignment + void operator=(const psiChemistryModel&); + + +protected: + + // Protected data + + //- Thermo package + autoPtr<hCombustionThermo> thermo_; + + +public: + + //- Runtime type information + TypeName("psiChemistryModel"); + + + //- Declare run-time constructor selection tables + declareRunTimeSelectionTable + ( + autoPtr, + psiChemistryModel, + fvMesh, + ( + const fvMesh& mesh, + const word& compTypeName, + const word& thermoTypeName + ), + (mesh, compTypeName, thermoTypeName) + ); + + + // Constructors + + //- Construct from mesh + psiChemistryModel(const fvMesh& mesh, const word& thermoTypeName); + + + //- Selector + static autoPtr<psiChemistryModel> New(const fvMesh& mesh); + + + //- Destructor + virtual ~psiChemistryModel(); + + + // Member Functions + + //- Return access to the thermo package + inline hCombustionThermo& thermo(); + + //- Return const access to the thermo package + inline const hCombustionThermo& thermo() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "psiChemistryModelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelI.H b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelI.H new file mode 100644 index 0000000000000000000000000000000000000000..a6122b8b6840fbcf94afb92a5b99227000719d01 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModelI.H @@ -0,0 +1,41 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +inline Foam::hCombustionThermo& Foam::psiChemistryModel::thermo() +{ + return thermo_(); +} + + +inline const Foam::hCombustionThermo& Foam::psiChemistryModel::thermo() const +{ + return thermo_(); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModels.C b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModels.C new file mode 100644 index 0000000000000000000000000000000000000000..819156ee51b852829e078fabab1c29dd1491ad3f --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/psiChemistryModel/psiChemistryModels.C @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +InClass + Foam::psiChemistryModel + +Description + Creates chemistry model instances templated on the type of thermodynamics + +\*---------------------------------------------------------------------------*/ + +#include "makeChemistryModel.H" + +#include "psiChemistryModel.H" +#include "ODEChemistryModel.H" +#include "thermoPhysicsTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeChemistryModel + ( + ODEChemistryModel, + psiChemistryModel, + gasThermoPhysics + ); + makeChemistryModel + ( + ODEChemistryModel, + psiChemistryModel, + icoPoly8ThermoPhysics + ); +} + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/newRhoChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/newRhoChemistryModel.C new file mode 100644 index 0000000000000000000000000000000000000000..c59a607f872dd92a5f569b245b95e22cfd34a2cb --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/newRhoChemistryModel.C @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "rhoChemistryModel.H" + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::rhoChemistryModel> Foam::rhoChemistryModel::New +( + const fvMesh& mesh +) +{ + word rhoChemistryModelType; + word thermoTypeName; + word userModel; + + // Enclose the creation of the chemistrtyProperties to ensure it is + // deleted before the chemistrtyProperties is created otherwise the + // dictionary is entered in the database twice + { + IOdictionary chemistryPropertiesDict + ( + IOobject + ( + "chemistryProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + chemistryPropertiesDict.lookup("rhoChemistryModel") >> userModel; + + // construct chemistry model type name by inserting first template + // argument + label tempOpen = userModel.find('<'); + label tempClose = userModel.find('>'); + + word className = userModel(0, tempOpen); + thermoTypeName = userModel(tempOpen + 1, tempClose - tempOpen - 1); + + rhoChemistryModelType = + className + '<' + typeName + ',' + thermoTypeName + '>'; + } + + if (debug) + { + Info<< "Selecting rhoChemistryModel " << rhoChemistryModelType << endl; + } + else + { + Info<< "Selecting rhoChemistryModel " << userModel << endl; + } + + fvMeshConstructorTable::iterator cstrIter = + fvMeshConstructorTablePtr_->find(rhoChemistryModelType); + + if (cstrIter == fvMeshConstructorTablePtr_->end()) + { + if (debug) + { + FatalErrorIn("rhoChemistryModelBase::New(const mesh&)") + << "Unknown rhoChemistryModel type " << rhoChemistryModelType + << nl << nl << "Valid rhoChemistryModel types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl << exit(FatalError); + } + else + { + wordList models = fvMeshConstructorTablePtr_->toc(); + forAll(models, i) + { + models[i] = models[i].replace(typeName + ',', ""); + } + + FatalErrorIn("rhoChemistryModelBase::New(const mesh&)") + << "Unknown rhoChemistryModel type " << userModel + << nl << nl << "Valid rhoChemistryModel types are:" << nl + << models << nl << exit(FatalError); + } + } + + return autoPtr<rhoChemistryModel> + (cstrIter()(mesh, typeName, thermoTypeName)); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModel.C b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModel.C new file mode 100644 index 0000000000000000000000000000000000000000..73a3f00e9cf8c4fc81e5532264566a9b5c0eadc5 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModel.C @@ -0,0 +1,58 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "rhoChemistryModel.H" +#include "fvMesh.H" +#include "Time.H" + +/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ + +namespace Foam +{ + defineTypeNameAndDebug(rhoChemistryModel, 0); + defineRunTimeSelectionTable(rhoChemistryModel, fvMesh); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::rhoChemistryModel::rhoChemistryModel +( + const fvMesh& mesh, + const word& thermoTypeName +) +: + basicChemistryModel(mesh), + thermo_(hReactionThermo::NewType(mesh, thermoTypeName)) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::rhoChemistryModel::~rhoChemistryModel() +{} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModel.H b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModel.H new file mode 100644 index 0000000000000000000000000000000000000000..43df6e0406ee2ed27d0de94b832bd399864648d5 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModel.H @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::rhoChemistryModel + +Description + Chemistry model for compressibility-based thermodynamics + +SourceFiles + rhoChemistryModelI.H + rhoChemistryModel.C + newChemistryModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef rhoChemistryModel_H +#define rhoChemistryModel_H + +#include "basicChemistryModel.H" +#include "autoPtr.H" +#include "runTimeSelectionTables.H" +#include "hReactionThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class fvMesh; + +/*---------------------------------------------------------------------------*\ + class rhoChemistryModel Declaration +\*---------------------------------------------------------------------------*/ + +class rhoChemistryModel +: + public basicChemistryModel +{ + // Private Member Functions + + //- Construct as copy (not implemented) + rhoChemistryModel(const rhoChemistryModel&); + + //- Disallow default bitwise assignment + void operator=(const rhoChemistryModel&); + + +protected: + + // Protected data + + //- Thermo package + autoPtr<hReactionThermo> thermo_; + + +public: + + //- Runtime type information + TypeName("rhoChemistryModel"); + + + //- Declare run-time constructor selection tables + declareRunTimeSelectionTable + ( + autoPtr, + rhoChemistryModel, + fvMesh, + ( + const fvMesh& mesh, + const word& compTypeName, + const word& thermoTypeName + ), + (mesh, compTypeName, thermoTypeName) + ); + + + // Constructors + + //- Construct from mesh + rhoChemistryModel(const fvMesh& mesh, const word& thermoTypeName); + + + //- Selector + static autoPtr<rhoChemistryModel> New(const fvMesh& mesh); + + + //- Destructor + virtual ~rhoChemistryModel(); + + + // Member Functions + + //- Return access to the thermo package + inline hReactionThermo& thermo(); + + //- Return const access to the thermo package + inline const hReactionThermo& thermo() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "rhoChemistryModelI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelI.H b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelI.H new file mode 100644 index 0000000000000000000000000000000000000000..d96171001b694bb6fdd721b835a358c52eaef13f --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModelI.H @@ -0,0 +1,41 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +inline Foam::hReactionThermo& Foam::rhoChemistryModel::thermo() +{ + return thermo_(); +} + + +inline const Foam::hReactionThermo& Foam::rhoChemistryModel::thermo() const +{ + return thermo_(); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModels.C b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModels.C new file mode 100644 index 0000000000000000000000000000000000000000..69d3f75a66756d97594cff0b7d5d9f1fe40147ed --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistryModel/rhoChemistryModel/rhoChemistryModels.C @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +InClass + Foam::rhoChemistryModel + +Description + Creates chemistry model instances templated on the type of thermodynamics + +\*---------------------------------------------------------------------------*/ + +#include "makeChemistryModel.H" + +#include "rhoChemistryModel.H" +#include "ODEChemistryModel.H" +#include "thermoPhysicsTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeChemistryModel + ( + ODEChemistryModel, + rhoChemistryModel, + gasThermoPhysics + ); + makeChemistryModel + ( + ODEChemistryModel, + rhoChemistryModel, + icoPoly8ThermoPhysics + ); +} + +// ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C index 53398178a70d09c3e2022b38233ba4f2a798b5a6..95cfc763881b4ae68bb1e1db21e0402501299a55 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.C @@ -28,30 +28,17 @@ License #include "addToRunTimeSelectionTable.H" #include "simpleMatrix.H" -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(EulerImplicit, 0); - addToRunTimeSelectionTable - ( - chemistrySolver, - EulerImplicit, - dictionary - ); -}; - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::EulerImplicit::EulerImplicit +template<class CompType, class ThermoType> +Foam::EulerImplicit<CompType, ThermoType>::EulerImplicit ( - const Foam::dictionary& dict, - Foam::chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ) : - chemistrySolver(dict, chemistry), - coeffsDict_(dict.subDict(typeName + "Coeffs")), + chemistrySolver<CompType, ThermoType>(model, modelName), + coeffsDict_(model.subDict(modelName + "Coeffs")), cTauChem_(readScalar(coeffsDict_.lookup("cTauChem"))), equil_(coeffsDict_.lookup("equilibriumRateLimiter")) {} @@ -59,13 +46,15 @@ Foam::EulerImplicit::EulerImplicit // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::EulerImplicit::~EulerImplicit() +template<class CompType, class ThermoType> +Foam::EulerImplicit<CompType, ThermoType>::~EulerImplicit() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::scalar Foam::EulerImplicit::solve +template<class CompType, class ThermoType> +Foam::scalar Foam::EulerImplicit<CompType, ThermoType>::solve ( scalarField &c, const scalar T, @@ -74,28 +63,27 @@ Foam::scalar Foam::EulerImplicit::solve const scalar dt ) const { - scalar pf, cf, pr, cr; label lRef, rRef; - label Ns = chemistry_.Ns(); - simpleMatrix<scalar> RR(Ns); - - for(label i=0; i<Ns; i++) + label nSpecie = this->model_.nSpecie(); + simpleMatrix<scalar> RR(nSpecie); + + for (label i=0; i<nSpecie; i++) { c[i] = max(0.0, c[i]); } - for(label i=0; i<Ns; i++) + for (label i=0; i<nSpecie; i++) { RR.source()[i] = c[i]/dt; } - for(label i=0; i<chemistry_.reactions().size(); i++) + for (label i=0; i<this->model_.reactions().size(); i++) { - const chemistryModel::reaction& R = chemistry_.reactions()[i]; + const Reaction<ThermoType>& R = this->model_.reactions()[i]; - scalar omegai = chemistry_.omega + scalar omegai = this->model_.omega ( R, c, T, p, pf, cf, lRef, pr, cr, rRef ); @@ -113,59 +101,59 @@ Foam::scalar Foam::EulerImplicit::solve } } - for(label s=0; s<R.lhs().size(); s++) + for (label s=0; s<R.lhs().size(); s++) { label si = R.lhs()[s].index; scalar sl = R.lhs()[s].stoichCoeff; RR[si][rRef] -= sl*pr*corr; RR[si][lRef] += sl*pf*corr; } - - for(label s=0; s<R.rhs().size(); s++) + + for (label s=0; s<R.rhs().size(); s++) { label si = R.rhs()[s].index; scalar sr = R.rhs()[s].stoichCoeff; RR[si][lRef] -= sr*pf*corr; RR[si][rRef] += sr*pr*corr; } - + } // end for(label i... - - for(label i=0; i<Ns; i++) + + for (label i=0; i<nSpecie; i++) { RR[i][i] += 1.0/dt; } c = RR.LUsolve(); - for(label i=0; i<Ns; i++) + for (label i=0; i<nSpecie; i++) { c[i] = max(0.0, c[i]); } // estimate the next time step scalar tMin = GREAT; - label n = chemistry_.nEqns(); - scalarField c1(n, 0.0); + label nEqns = this->model_.nEqns(); + scalarField c1(nEqns, 0.0); - for(label i=0; i<Ns; i++) + for (label i=0; i<nSpecie; i++) { c1[i] = c[i]; } - c1[Ns] = T; - c1[Ns+1] = p; + c1[nSpecie] = T; + c1[nSpecie+1] = p; + + scalarField dcdt(nEqns, 0.0); + this->model_.derivatives(0.0, c1, dcdt); - scalarField dcdt(n, 0.0); - chemistry_.derivatives(0.0, c1, dcdt); - scalar sumC = sum(c); - for(label i=0; i<Ns; i++) + for (label i=0; i<nSpecie; i++) { scalar d = dcdt[i]; if (d < -SMALL) { - tMin = min(tMin, -(c[i]+SMALL)/d); + tMin = min(tMin, -(c[i] + SMALL)/d); } else { @@ -173,10 +161,9 @@ Foam::scalar Foam::EulerImplicit::solve scalar cm = max(sumC - c[i], 1.0e-5); tMin = min(tMin, cm/d); } - } + } return cTauChem_*tMin; - } diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.H b/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.H index b5d6eb5cc50c3e9f0132165774021ed35a0167d3..521a06e2768ddd4e10bb97ac3eac62271f3fe140 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.H +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/EulerImplicit/EulerImplicit.H @@ -43,20 +43,25 @@ SourceFiles namespace Foam { +// Forward declaration of classes +template<class CompType, class ThermoType> +class EulerImplicit; + /*---------------------------------------------------------------------------*\ Class EulerImplicit Declaration \*---------------------------------------------------------------------------*/ +template<class CompType, class ThermoType> class EulerImplicit : - public chemistrySolver + public chemistrySolver<CompType, ThermoType> { // Private data dictionary coeffsDict_; - // model constants - + // Model constants + scalar cTauChem_; Switch equil_; @@ -72,14 +77,13 @@ public: //- Construct from components EulerImplicit ( - const dictionary& dict, - chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ); - // Destructor - - ~EulerImplicit(); + //- Destructor + virtual ~EulerImplicit(); // Member Functions @@ -102,6 +106,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "EulerImplicit.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.C index 4b3463f03e9c581e151f527d07427c66c7a9ca80..129bcabb00e470caeeb4837d379095459109f191 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.C @@ -29,29 +29,24 @@ License namespace Foam { -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(chemistrySolver, 0); -defineRunTimeSelectionTable(chemistrySolver, dictionary); - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components -Foam::chemistrySolver::chemistrySolver +template<class CompType, class ThermoType> +Foam::chemistrySolver<CompType, ThermoType>::chemistrySolver ( - const Foam::dictionary& dict, - Foam::chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ) : - dict_(dict), - chemistry_(chemistry) + model_(model), + name_(modelName) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::chemistrySolver::~chemistrySolver() +template<class CompType, class ThermoType> +Foam::chemistrySolver<CompType, ThermoType>::~chemistrySolver() {} diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.H b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.H index 6a1a9f6ade3446122258694823c9375e20535b78..0a21a2755c2b2f79f25bc9fc7545d1ff0e64d3f6 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.H +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/chemistrySolver.H @@ -26,7 +26,7 @@ Class Foam::chemistrySolver Description - An abstract class for solving chemistry + An abstract base class for solving chemistry SourceFiles chemistrySolver.C @@ -36,7 +36,7 @@ SourceFiles #ifndef chemistrySolver_H #define chemistrySolver_H -#include "chemistryModel.H" +#include "ODEChemistryModel.H" #include "IOdictionary.H" #include "scalarField.H" #include "autoPtr.H" @@ -47,17 +47,26 @@ SourceFiles namespace Foam { +// Forward declaration of classes +template<class CompType, class ThermoType> +class chemistrySolver; + /*---------------------------------------------------------------------------*\ - Class chemistrySolver Declaration + Class chemistrySolver Declaration \*---------------------------------------------------------------------------*/ +template<class CompType, class ThermoType> class chemistrySolver { - protected: - const dictionary& dict_; - chemistryModel& chemistry_; + // Protected data + + //- Reference to the chemistry model + ODEChemistryModel<CompType, ThermoType>& model_; + + //- Name of the chemistry solver + const word name_; public: @@ -73,10 +82,10 @@ public: chemistrySolver, dictionary, ( - const dictionary& dict, - chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ), - (dict, chemistry) + (model, modelName) ); @@ -85,23 +94,22 @@ public: //- Construct from components chemistrySolver ( - const dictionary& dict, - chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ); - // Selectors - - static autoPtr<chemistrySolver> New - ( - const dictionary& dict, - chemistryModel& chemistry - ); - + //- Selector + static autoPtr<chemistrySolver> New + ( + ODEChemistryModel<CompType, ThermoType>& model, + const word& compTypeName, + const word& thermoTypeName + ); - // Destructor - virtual ~chemistrySolver(); + //- Destructor + virtual ~chemistrySolver(); // Member Functions @@ -124,6 +132,50 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#define makeChemistrySolver(Comp, Thermo) \ + \ + typedef chemistrySolver<Comp, Thermo> \ + chemistrySolver##Comp##Thermo; \ + \ + defineTemplateTypeNameAndDebugWithName \ + ( \ + chemistrySolver##Comp##Thermo, \ + "chemistryModel<"#Comp","#Thermo">", \ + 0 \ + ); \ + \ + defineTemplateRunTimeSelectionTable \ + ( \ + chemistrySolver##Comp##Thermo, \ + dictionary \ + ); + + +#define makeChemistrySolverType(SS, Comp, Thermo) \ + \ + typedef SS<Comp, Thermo> SS##Comp##Thermo; \ + \ + defineTemplateTypeNameAndDebugWithName \ + ( \ + SS##Comp##Thermo, \ + #SS"<"#Comp","#Thermo">", \ + 0 \ + ); \ + \ + chemistrySolver<Comp, Thermo>:: \ + adddictionaryConstructorToTable<SS<Comp, Thermo> > \ + add##SS##Comp##Thermo##ConstructorToTable_; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "chemistrySolver.C" +# include "newChemistrySolver.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/makeChemistrySolvers.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/makeChemistrySolvers.C new file mode 100644 index 0000000000000000000000000000000000000000..b371931f5fd55b7b817873f27a30ea34533f57a6 --- /dev/null +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/makeChemistrySolvers.C @@ -0,0 +1,83 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "thermoPhysicsTypes.H" +#include "chemistrySolver.H" + +#include "psiChemistryModel.H" +#include "rhoChemistryModel.H" + +#include "EulerImplicit.H" +#include "ode.H" +#include "sequential.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeChemistrySolver(psiChemistryModel, gasThermoPhysics) + makeChemistrySolverType(EulerImplicit, psiChemistryModel, gasThermoPhysics) + makeChemistrySolverType(ode, psiChemistryModel, gasThermoPhysics) + makeChemistrySolverType(sequential, psiChemistryModel, gasThermoPhysics) + + makeChemistrySolver(psiChemistryModel, icoPoly8ThermoPhysics) + makeChemistrySolverType + ( + EulerImplicit, + psiChemistryModel, + icoPoly8ThermoPhysics + ) + makeChemistrySolverType(ode, psiChemistryModel, icoPoly8ThermoPhysics) + makeChemistrySolverType + ( + sequential, + psiChemistryModel, + icoPoly8ThermoPhysics + ) + + makeChemistrySolver(rhoChemistryModel, gasThermoPhysics) + makeChemistrySolverType(EulerImplicit, rhoChemistryModel, gasThermoPhysics) + makeChemistrySolverType(ode, rhoChemistryModel, gasThermoPhysics) + makeChemistrySolverType(sequential, rhoChemistryModel, gasThermoPhysics) + + makeChemistrySolver(rhoChemistryModel, icoPoly8ThermoPhysics) + makeChemistrySolverType + ( + EulerImplicit, + rhoChemistryModel, + icoPoly8ThermoPhysics + ) + makeChemistrySolverType(ode, rhoChemistryModel, icoPoly8ThermoPhysics) + makeChemistrySolverType + ( + sequential, + rhoChemistryModel, + icoPoly8ThermoPhysics + ) +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/newChemistrySolver.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/newChemistrySolver.C index 37869dcf30b4c3c10a77e55be795fc19df296614..b0baa00fbe9068c1c61e487296a66fe88871c45c 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/newChemistrySolver.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/chemistrySolver/newChemistrySolver.C @@ -26,33 +26,54 @@ License #include "chemistrySolver.H" - // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // -Foam::autoPtr<Foam::chemistrySolver> Foam::chemistrySolver::New +template<class CompType, class ThermoType> +Foam::autoPtr<Foam::chemistrySolver<CompType, ThermoType> > +Foam::chemistrySolver<CompType, ThermoType>::New ( - const dictionary& dict, - chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& compTypeName, + const word& thermoTypeName ) { - word chemistrySolverType(dict.lookup("chemistrySolver")); + word modelName(model.lookup("chemistrySolver")); + + word chemistrySolverType = + modelName + '<' + compTypeName + ',' + thermoTypeName + '>'; - dictionaryConstructorTable::iterator cstrIter = + Info<< "Selecting chemistrySolver " << modelName << endl; + + typename dictionaryConstructorTable::iterator cstrIter = dictionaryConstructorTablePtr_->find(chemistrySolverType); if (cstrIter == dictionaryConstructorTablePtr_->end()) { + wordList models = dictionaryConstructorTablePtr_->toc(); + forAll(models, i) + { + models[i] = models[i].replace + ( + '<' + compTypeName + ',' + thermoTypeName + '>', + "" + ); + } + FatalErrorIn ( - "chemistrySolver::New(const dictionary&, const chemistryModel&)" - ) << "Unknown chemistrySolverType type " << chemistrySolverType - << endl << endl - << "Valid chemistrySolverType types are :" << endl - << dictionaryConstructorTablePtr_->toc() - << exit(FatalError); + "chemistrySolver::New" + "(" + "const ODEChemistryModel&, " + "const word&, " + "const word&" + ")" + ) << "Unknown chemistrySolver type " << modelName + << nl << nl << "Valid chemistrySolver types are:" << nl + << models << nl << exit(FatalError); } - return autoPtr<chemistrySolver>(cstrIter()(dict, chemistry)); + return autoPtr<chemistrySolver<CompType, ThermoType> > + (cstrIter()(model, modelName)); } diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C index dcc05caaf182e23dec6879d67846a3d91d838adc..7a4bde923f7610abde7a598c8d1d97d09e114a39 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.C @@ -25,36 +25,21 @@ License \*---------------------------------------------------------------------------*/ #include "ode.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(ode, 0); - addToRunTimeSelectionTable - ( - chemistrySolver, - ode, - dictionary - ); -} - +#include "ODEChemistryModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components -Foam::ode::ode +template<class CompType, class ThermoType> +Foam::ode<CompType, ThermoType>::ode ( - const Foam::dictionary& dict, - Foam::chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ) : - chemistrySolver(dict, chemistry), - chemistry_(chemistry), - coeffsDict_(dict.subDict(typeName + "Coeffs")), + chemistrySolver<CompType, ThermoType>(model, modelName), + coeffsDict_(model.subDict(modelName + "Coeffs")), solverName_(coeffsDict_.lookup("ODESolver")), - odeSolver_(ODESolver::New(solverName_, chemistry)), + odeSolver_(ODESolver::New(solverName_, model)), eps_(readScalar(coeffsDict_.lookup("eps"))), scale_(readScalar(coeffsDict_.lookup("scale"))) {} @@ -62,14 +47,15 @@ Foam::ode::ode // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::ode::~ode() +template<class CompType, class ThermoType> +Foam::ode<CompType, ThermoType>::~ode() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::scalar Foam::ode::solve +template<class CompType, class ThermoType> +Foam::scalar Foam::ode<CompType, ThermoType>::solve ( scalarField& c, const scalar T, @@ -78,22 +64,22 @@ Foam::scalar Foam::ode::solve const scalar dt ) const { - label Ns = chemistry_.Ns(); - scalarField c1(chemistry_.nEqns(), 0.0); + label nSpecie = this->model_.nSpecie(); + scalarField c1(this->model_.nEqns(), 0.0); // copy the concentration, T and P to the total solve-vector - for(label i=0; i<Ns; i++) + for (label i=0; i<nSpecie; i++) { c1[i] = c[i]; } - c1[Ns] = T; - c1[Ns+1] = p; + c1[nSpecie] = T; + c1[nSpecie+1] = p; scalar dtEst = dt; odeSolver_->solve ( - chemistry_, + this->model_, t0, t0 + dt, c1, @@ -101,7 +87,7 @@ Foam::scalar Foam::ode::solve dtEst ); - for(label i=0; i<c.size(); i++) + for (label i=0; i<c.size(); i++) { c[i] = max(0.0, c1[i]); } diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.H b/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.H index 4c0cf1d007339cc2b9449fea5ace9d6b4e237477..faac5ca2ad2826a51967d4b7c2dfe18077c14183 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.H +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/ode/ode.H @@ -44,24 +44,27 @@ SourceFiles namespace Foam { +// Forward declaration of classes +template<class CompType, class ThermoType> +class ode; + /*---------------------------------------------------------------------------*\ - Class ode Declaration + Class ode Declaration \*---------------------------------------------------------------------------*/ +template<class CompType, class ThermoType> class ode : - public chemistrySolver + public chemistrySolver<CompType, ThermoType> { // Private data - chemistryModel& chemistry_; - dictionary coeffsDict_; const word solverName_; autoPtr<ODESolver> odeSolver_; - // model constants - + // Model constants + scalar eps_; scalar scale_; @@ -77,14 +80,13 @@ public: //- Construct from components ode ( - const dictionary& dict, - chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ); - // Destructor - - ~ode(); + //- Destructor + virtual ~ode(); // Member Functions @@ -106,6 +108,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "ode.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C b/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C index 1837f533db343fa6b7d6d5286797a96713678830..d929c5aea2e12a3d426441418db6319ffead318c 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.C @@ -27,31 +27,17 @@ License #include "sequential.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(sequential, 0); - addToRunTimeSelectionTable - ( - chemistrySolver, - sequential, - dictionary - ); -}; - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components -Foam::sequential::sequential +template<class CompType, class ThermoType> +Foam::sequential<CompType, ThermoType>::sequential ( - const Foam::dictionary& dict, - Foam::chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ) : - chemistrySolver(dict, chemistry), - coeffsDict_(dict.subDict(typeName + "Coeffs")), + chemistrySolver<CompType, ThermoType>(model, modelName), + coeffsDict_(model.subDict(modelName + "Coeffs")), cTauChem_(readScalar(coeffsDict_.lookup("cTauChem"))), equil_(coeffsDict_.lookup("equilibriumRateLimiter")) {} @@ -59,13 +45,15 @@ Foam::sequential::sequential // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::sequential::~sequential() +template<class CompType, class ThermoType> +Foam::sequential<CompType, ThermoType>::~sequential() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::scalar Foam::sequential::solve +template<class CompType, class ThermoType> +Foam::scalar Foam::sequential<CompType, ThermoType>::solve ( scalarField &c, const scalar T, @@ -79,11 +67,11 @@ Foam::scalar Foam::sequential::solve scalar pf, cf, pb, cb; label lRef, rRef; - for(label i=0; i<chemistry_.reactions().size(); i++) + for (label i=0; i<this->model_.reactions().size(); i++) { - const chemistryModel::reaction& R = chemistry_.reactions()[i]; + const Reaction<ThermoType>& R = this->model_.reactions()[i]; - scalar om0 = chemistry_.omega + scalar om0 = this->model_.omega ( R, c, T, p, pf, cf, lRef, pb, cb, rRef ); @@ -108,23 +96,23 @@ Foam::scalar Foam::sequential::solve // update species - for(label s=0; s<R.lhs().size(); s++) + for (label s=0; s<R.lhs().size(); s++) { label si = R.lhs()[s].index; scalar sl = R.lhs()[s].stoichCoeff; c[si] -= dt*sl*omeg; c[si] = max(0.0, c[si]); - } + } - for(label s=0; s<R.rhs().size(); s++) + for (label s=0; s<R.rhs().size(); s++) { label si = R.rhs()[s].index; scalar sr = R.rhs()[s].stoichCoeff; c[si] += dt*sr*omeg; c[si] = max(0.0, c[si]); - } + } - } // end for(label i... + } // end for (label i... return cTauChem_/tChemInv; } diff --git a/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.H b/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.H index e128b900d92a4ecbf93cd8164377265cdb7e1037..c72692a40faaf68e29885d714a99cc2657952bbc 100644 --- a/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.H +++ b/src/thermophysicalModels/chemistryModel/chemistrySolver/sequential/sequential.H @@ -45,19 +45,24 @@ SourceFiles namespace Foam { +// Forward declaration of classes +template<class CompType, class ThermoType> +class sequential; + /*---------------------------------------------------------------------------*\ - Class sequential Declaration + Class sequential Declaration \*---------------------------------------------------------------------------*/ +template<class CompType, class ThermoType> class sequential : - public chemistrySolver + public chemistrySolver<CompType, ThermoType> { // Private data dictionary coeffsDict_; - // model constants + // Model constants scalar cTauChem_; Switch equil_; @@ -75,14 +80,13 @@ public: //- Construct from components sequential ( - const dictionary& dict, - chemistryModel& chemistry + ODEChemistryModel<CompType, ThermoType>& model, + const word& modelName ); - // Destructor - - ~sequential(); + //- Destructor + virtual ~sequential(); // Member Functions @@ -105,6 +109,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "sequential.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/Make/files b/src/thermophysicalModels/combustion/Make/files deleted file mode 100644 index 70e985783d90225deba8fb5cf844354112e82e48..0000000000000000000000000000000000000000 --- a/src/thermophysicalModels/combustion/Make/files +++ /dev/null @@ -1,33 +0,0 @@ -hCombustionThermo = hCombustionThermo -hhuCombustionThermo = hhuCombustionThermo -hThermo = hThermo - -chemistryReader = chemistryReaders/chemistryReader -foamChemistryReader = chemistryReaders/foamChemistryReader -chemkinReader = chemistryReaders/chemkinReader - -mixtures = mixtureThermos/mixtures -combustionMixture = $(mixtures)/combustionMixture -reactingMixture = $(mixtures)/reactingMixture - -$(chemistryReader)/chemistryReader.C -$(foamChemistryReader)/foamChemistryReader.C -$(chemkinReader)/chemkinReader.C -$(chemkinReader)/chemkinLexer.L - -$(combustionMixture)/combustionMixture.C -$(reactingMixture)/reactingMixture.C - -$(hCombustionThermo)/hCombustionThermo.C -$(hCombustionThermo)/newhCombustionThermo.C -$(hCombustionThermo)/hCombustionThermos.C - -$(hhuCombustionThermo)/hhuCombustionThermo.C -$(hhuCombustionThermo)/newhhuCombustionThermo.C -$(hhuCombustionThermo)/hhuCombustionThermos.C - -derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.C -derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C -derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C - -LIB = $(FOAM_LIBBIN)/libcombustionThermophysicalModels diff --git a/src/thermophysicalModels/laminarFlameSpeed/Make/options b/src/thermophysicalModels/laminarFlameSpeed/Make/options index d3f9e6993df72cb8197451476c7ece3f24750e4d..fe682dababbceea0e6ce13b0400a55e8bfb59bae 100644 --- a/src/thermophysicalModels/laminarFlameSpeed/Make/options +++ b/src/thermophysicalModels/laminarFlameSpeed/Make/options @@ -2,7 +2,7 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude LIB_LIBS = \ -lfiniteVolume diff --git a/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C b/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C index 72852bdb80cad7d9d3891f0e696fcf85f7a3dc9c..9cfc15a8692efc66e73819802bb8a2002b8a4283 100644 --- a/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C +++ b/src/thermophysicalModels/liquidMixture/liquidMixture/liquidMixture.C @@ -34,7 +34,6 @@ const Foam::scalar Foam::liquidMixture::TrMax = 0.999; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Construct from components Foam::liquidMixture::liquidMixture ( const dictionary& thermophysicalProperties @@ -72,6 +71,7 @@ Foam::liquidMixture::liquidMixture } } + // * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // Foam::autoPtr<Foam::liquidMixture> Foam::liquidMixture::New @@ -85,7 +85,6 @@ Foam::autoPtr<Foam::liquidMixture> Foam::liquidMixture::New // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -// Critical Temperature Foam::scalar Foam::liquidMixture::Tc ( const scalarField& x @@ -104,9 +103,8 @@ Foam::scalar Foam::liquidMixture::Tc return vTc/vc; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Pseudocritical temperature + Foam::scalar Foam::liquidMixture::Tpc ( const scalarField& x @@ -121,9 +119,7 @@ Foam::scalar Foam::liquidMixture::Tpc return Tpc; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Pseudocritical pressure Foam::scalar Foam::liquidMixture::Ppc ( const scalarField& x @@ -140,7 +136,6 @@ Foam::scalar Foam::liquidMixture::Ppc return specie::RR*Zc*Tpc(x)/Vc; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Foam::scalar Foam::liquidMixture::omega ( @@ -156,7 +151,6 @@ Foam::scalar Foam::liquidMixture::omega return omega; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Foam::scalarField Foam::liquidMixture::Xs ( @@ -178,9 +172,6 @@ Foam::scalarField Foam::liquidMixture::Xs return xs; } -//----------------------------------------------------------------------------- -// Physical properties -//----------------------------------------------------------------------------- Foam::scalar Foam::liquidMixture::W ( @@ -196,6 +187,7 @@ Foam::scalar Foam::liquidMixture::W return W; } + Foam::scalarField Foam::liquidMixture::Y ( const scalarField& X @@ -211,6 +203,7 @@ Foam::scalarField Foam::liquidMixture::Y return Y; } + Foam::scalarField Foam::liquidMixture::X ( const scalarField& Y @@ -250,6 +243,7 @@ Foam::scalar Foam::liquidMixture::rho return W(x)/v; } + Foam::scalar Foam::liquidMixture::pv ( const scalar p, @@ -271,6 +265,7 @@ Foam::scalar Foam::liquidMixture::pv return pv/W(x); } + Foam::scalar Foam::liquidMixture::hl ( const scalar p, @@ -292,6 +287,7 @@ Foam::scalar Foam::liquidMixture::hl return hl/W(x); } + Foam::scalar Foam::liquidMixture::cp ( const scalar p, @@ -313,6 +309,7 @@ Foam::scalar Foam::liquidMixture::cp return cp/W(x); } + Foam::scalar Foam::liquidMixture::sigma ( const scalar p, @@ -346,6 +343,7 @@ Foam::scalar Foam::liquidMixture::sigma return sigma; } + Foam::scalar Foam::liquidMixture::mu ( const scalar p, @@ -367,6 +365,7 @@ Foam::scalar Foam::liquidMixture::mu return exp(mu); } + Foam::scalar Foam::liquidMixture::K ( const scalar p, @@ -402,7 +401,12 @@ Foam::scalar Foam::liquidMixture::K { scalar Tj = min(TrMax*properties_[j].Tc(), T); - scalar Kij = 2.0/(1.0/properties_[i].K(p, Ti) + 1.0/properties_[j].K(p, Tj)); + scalar Kij = + 2.0 + /( + 1.0/properties_[i].K(p, Ti) + + 1.0/properties_[j].K(p, Tj) + ); K += phii[i]*phii[j]*Kij; } } @@ -410,6 +414,7 @@ Foam::scalar Foam::liquidMixture::K return K; } + Foam::scalar Foam::liquidMixture::D ( const scalar p, @@ -432,4 +437,5 @@ Foam::scalar Foam::liquidMixture::D return 1.0/Dinv; } + // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/Ar/Ar.C b/src/thermophysicalModels/liquids/Ar/Ar.C index 7bd5bc451618118ca02c0e519e1fa3e0a754e598..901a6ea6dadfbd353aa05443534522d4e86bf652 100644 --- a/src/thermophysicalModels/liquids/Ar/Ar.C +++ b/src/thermophysicalModels/liquids/Ar/Ar.C @@ -27,19 +27,117 @@ License #include "Ar.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(Ar, 0); + addToRunTimeSelectionTable(liquid, Ar,); + addToRunTimeSelectionTable(liquid, Ar, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTypeNameAndDebug(Ar, 0); -addToRunTimeSelectionTable(liquid, Ar,); -addToRunTimeSelectionTable(liquid, Ar, Istream); +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::Ar::Ar() +: + liquid + ( + 39.948, + 150.86, + 4.8981e+6, + 0.07459, + 0.291, + 83.78, + 6.88e+4, + 87.28, + 0.0, + 0.0, + 1.4138e+4 + ), + rho_(151.922244, 0.286, 150.86, 0.2984), + pv_(39.233, -1051.7, -3.5895, 5.0444e-05, 2), + hl_(150.86, 218509.061780314, 0.352, 0.0, 0.0, 0.0), + cp_(4562.43116050866, -70.7770101131471, 0.367477721037349, 0.0, 0.0, 0.0), + h_ + ( + -1460974.49982473, + 4562.43116050866, + -35.3885050565735, + 0.122492573679116, + 0.0, + 0.0 + ), + cpg_(520.326424351657, 0.0, 0.0, 0.0, 0.0, 0.0), + B_ + ( + 0.000952488234705117, + -0.379993992189847, + -2022.62941824372, + 4633523580654.85, + -302893761890458.0 + ), + mu_(-8.868, 204.3, -0.3831, -1.3e-22, 10.0), + mug_(8.386e-07, 0.6175, 75.377, -432.5), + K_(0.1819, -0.0003176, -4.11e-06, 0.0, 0.0, 0.0), + Kg_(0.0001236, 0.8262, -132.8, 16000), + sigma_(150.86, 0.03823, 1.2927, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 39.948, 28) // note: Same as nHeptane +{} + + +Foam::Ar::Ar +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc0& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} + -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::Ar::Ar(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/Ar/Ar.H b/src/thermophysicalModels/liquids/Ar/Ar.H index 63d873d9ebc18ca06bc639dc65c2358f4772fc2e..39e8f0f960a4422bdb9047c6dcaf3e6d49fba759 100644 --- a/src/thermophysicalModels/liquids/Ar/Ar.H +++ b/src/thermophysicalModels/liquids/Ar/Ar.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - Ar() - : - liquid(39.948, 150.86, 4.8981e+6, 0.07459, 0.291, 83.78, 6.88e+4, 87.28, 0.0, 0.0, 1.4138e+4), - rho_(151.922244, 0.286, 150.86, 0.2984), - pv_(39.233, -1051.7, -3.5895, 5.0444e-05, 2), - hl_(150.86, 218509.061780314, 0.352, 0, 0, 0), - cp_(4562.43116050866, -70.7770101131471, 0.367477721037349, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-1460974.49982473, 4562.43116050866, -35.3885050565735, 0.122492573679116, 0, 0), - cpg_(520.326424351657, 0, 0, 0, 0, 0), - B_(0.000952488234705117, -0.379993992189847, -2022.62941824372, 4633523580654.85, -302893761890458.0), - mu_(-8.868, 204.3, -0.3831, -1.3e-22, 10), - mug_(8.386e-07, 0.6175, 75.377, -432.5), - K_(0.1819, -0.0003176, -4.11e-06, 0, 0, 0), - Kg_(0.0001236, 0.8262, -132.8, 16000), - sigma_(150.86, 0.03823, 1.2927, 0, 0, 0), - D_(147.18, 20.1, 39.948, 28) // NN: Same as nHeptane - {} + Ar(); + + //- Construct from components Ar ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - Ar(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + Ar(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const Ar& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "ArI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/Ar/ArI.H b/src/thermophysicalModels/liquids/Ar/ArI.H new file mode 100644 index 0000000000000000000000000000000000000000..72ba64c1a832aef42cfba29faa1d0fd391d410a4 --- /dev/null +++ b/src/thermophysicalModels/liquids/Ar/ArI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::Ar::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::Ar::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C10H22/C10H22.C b/src/thermophysicalModels/liquids/C10H22/C10H22.C index d1148a21aee1c8c6edd73540d89a7251b08f0988..d26c3afc390f9972414dd715bee3e345ce5dfb71 100644 --- a/src/thermophysicalModels/liquids/C10H22/C10H22.C +++ b/src/thermophysicalModels/liquids/C10H22/C10H22.C @@ -27,19 +27,124 @@ License #include "C10H22.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C10H22, 0); + addToRunTimeSelectionTable(liquid, C10H22,); + addToRunTimeSelectionTable(liquid, C10H22, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C10H22::C10H22() +: + liquid + ( + 142.285, + 617.70, + 2.11e+6, + 0.6, + 0.247, + 243.51, + 1.393, + 447.30, + 0.0, + 0.4923, + 1.57e+4 + ), + rho_(60.94208835, 0.25745, 617.7, 0.28912), + pv_(112.73, -9749.6, -13.245, 7.1266e-06, 2.0), + hl_(617.70, 464743.296904101, 0.39797, 0.0, 0.0, 0.0), + cp_ + ( + 1958.18252099659, + -1.39094071757388, + 0.00754612221948905, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2699436.15229142, + 1958.18252099659, + -0.695470358786942, + 0.00251537407316302, + 0.0, + 0.0 + ), + cpg_(1175.10630073444, 3762.16748076045, 1614.1, 2658.04547211582, 742), + B_ + ( + 0.00337351091119935, + -4.13606494008504, + -534560.916470464, + -1.13364022911762e+19, + 2.80704220402713e+21 + ), + mu_(-16.468, 1533.5, 0.7511, 0.0, 0.0), + mug_(2.64e-08, 0.9487, 71.0, 0.0), + K_(0.2063, -0.000254, 0.0, 0.0, 0.0, 0.0), + Kg_(-668.4, 0.9323, -4071000000.0, 0.0), + sigma_(617.70, 0.055435, 1.3095, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 142.285, 28.0) // note: Same as nHeptane +{} + + +Foam::C10H22::C10H22 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C10H22, 0); -addToRunTimeSelectionTable(liquid, C10H22,); -addToRunTimeSelectionTable(liquid, C10H22, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C10H22::C10H22(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C10H22/C10H22.H b/src/thermophysicalModels/liquids/C10H22/C10H22.H index 6ee211c320c92f08bc813ca836849c908fd4b989..88ee972321aecf5f76e972b270a15619599188e3 100644 --- a/src/thermophysicalModels/liquids/C10H22/C10H22.H +++ b/src/thermophysicalModels/liquids/C10H22/C10H22.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C10H22() - : - liquid(142.285, 617.70, 2.11e+6, 0.6, 0.247, 243.51, 1.393, 447.30, 0.0, 0.4923, 1.57e+4), - rho_(60.94208835, 0.25745, 617.7, 0.28912), - pv_(112.73, -9749.6, -13.245, 7.1266e-06, 2), - hl_(617.70, 464743.296904101, 0.39797, 0, 0, 0), - cp_(1958.18252099659, -1.39094071757388, 0.00754612221948905, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2699436.15229142, 1958.18252099659, -0.695470358786942, 0.00251537407316302, 0, 0), - cpg_(1175.10630073444, 3762.16748076045, 1614.1, 2658.04547211582, 742), - B_(0.00337351091119935, -4.13606494008504, -534560.916470464, -1.13364022911762e+19, 2.80704220402713e+21), - mu_(-16.468, 1533.5, 0.7511, 0, 0), - mug_(2.64e-08, 0.9487, 71, 0), - K_(0.2063, -0.000254, 0, 0, 0, 0), - Kg_(-668.4, 0.9323, -4071000000.0, 0), - sigma_(617.70, 0.055435, 1.3095, 0, 0, 0), - D_(147.18, 20.1, 142.285, 28) // NN: Same as nHeptane - {} + C10H22(); + + //- Construct from components C10H22 ( const liquid& l, @@ -123,124 +106,55 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C10H22(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C10H22(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + + // I-O //- Write the function coefficients void writeData(Ostream& os) const @@ -261,8 +175,7 @@ public: } - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C10H22& l) { l.writeData(os); @@ -277,6 +190,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C10H22I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C10H22/C10H22I.H b/src/thermophysicalModels/liquids/C10H22/C10H22I.H new file mode 100644 index 0000000000000000000000000000000000000000..bdbc395f1f54241bcfbd82261deb1938eaf22124 --- /dev/null +++ b/src/thermophysicalModels/liquids/C10H22/C10H22I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C10H22::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C10H22::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C12H26/C12H26.C b/src/thermophysicalModels/liquids/C12H26/C12H26.C index d12ca93da75252e7391935995dc876c5431667c3..8eb5d25e4615fab70790a2db71baf840ee0989bb 100644 --- a/src/thermophysicalModels/liquids/C12H26/C12H26.C +++ b/src/thermophysicalModels/liquids/C12H26/C12H26.C @@ -27,19 +27,116 @@ License #include "C12H26.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C12H26, 0); + addToRunTimeSelectionTable(liquid, C12H26,); + addToRunTimeSelectionTable(liquid, C12H26, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C12H26::C12H26() +: + liquid + ( + 170.338, + 658.0, + 1.82e+6, + 0.716, + 0.238, + 263.57, + 6.152e-1, + 489.47, + 0.0, + 0.5764, + 1.59e+4 + ), + rho_(60.53982858, 0.25511, 658.0, 0.29368), + pv_(137.47, -11976.0, -16.698, 8.0906e-06, 2.0), + hl_(658.0, 454020.829174935, 0.40681, 0.0, 0.0, 0.0), + cp_(2983.53861146661, -8.0352006011577, 0.018207916025784, 0.0, 0.0, 0.0), + h_ + ( + -2755166.83820769, + 2983.53861146661, + -4.01760030057885, + 0.00606930534192801, + 0.0, + 0.0 + ), + cpg_(1250.16144371778, 3894.02247296552, 1715.5, 2650.67101879792, 777.5), + B_ + ( + 0.00516619896910848, + -6.40491258556517, + -295295.236529723, + -3.22147729807794e+19, + 8.78195117941974e+21 + ), + mu_(-20.607, 1943, 1.3205, 0.0, 0.0), + mug_(6.344e-08, 0.8287, 219.5, 0.0), + K_(0.2047, -0.0002326, 0.0, 0.0, 0.0, 0.0), + Kg_(5.719e-06, 1.4699, 579.4, 0.0), + sigma_(658.0, 0.055493, 1.3262, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 170.338, 28.0) // note: Same as nHeptane +{} + + +Foam::C12H26::C12H26 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C12H26, 0); -addToRunTimeSelectionTable(liquid, C12H26,); -addToRunTimeSelectionTable(liquid, C12H26, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C12H26::C12H26(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C12H26/C12H26.H b/src/thermophysicalModels/liquids/C12H26/C12H26.H index 2feca3b73686c9a80e83664ecc4dd8a374a6f561..9c3cba2ac2b71a724afda2c55b1c14a02dd5e494 100644 --- a/src/thermophysicalModels/liquids/C12H26/C12H26.H +++ b/src/thermophysicalModels/liquids/C12H26/C12H26.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C12H26() - : - liquid(170.338, 658.0, 1.82e+6, 0.716, 0.238, 263.57, 6.152e-1, 489.47, 0, 0.5764, 1.59e+4), - rho_(60.53982858, 0.25511, 658, 0.29368), - pv_(137.47, -11976, -16.698, 8.0906e-06, 2), - hl_(658.0, 454020.829174935, 0.40681, 0, 0, 0), - cp_(2983.53861146661, -8.0352006011577, 0.018207916025784, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2755166.83820769, 2983.53861146661, -4.01760030057885, 0.00606930534192801, 0, 0), - cpg_(1250.16144371778, 3894.02247296552, 1715.5, 2650.67101879792, 777.5), - B_(0.00516619896910848, -6.40491258556517, -295295.236529723, -3.22147729807794e+19, 8.78195117941974e+21), - mu_(-20.607, 1943, 1.3205, 0, 0), - mug_(6.344e-08, 0.8287, 219.5, 0), - K_(0.2047, -0.0002326, 0, 0, 0, 0), - Kg_(5.719e-06, 1.4699, 579.4, 0), - sigma_(658.0, 0.055493, 1.3262, 0, 0, 0), - D_(147.18, 20.1, 170.338, 28) // NN: Same as nHeptane - {} + C12H26(); + + //- Construct from conponents C12H26 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C12H26(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C12H26(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C12H26& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C12H26I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C12H26/C12H26I.H b/src/thermophysicalModels/liquids/C12H26/C12H26I.H new file mode 100644 index 0000000000000000000000000000000000000000..0edb1e981ae1598a684da2e20f5bb20918b36724 --- /dev/null +++ b/src/thermophysicalModels/liquids/C12H26/C12H26I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C12H26::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C12H26::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C13H28/C13H28.C b/src/thermophysicalModels/liquids/C13H28/C13H28.C index 2b8fe56e6ab445d988e13f54a1515fc6161c06b5..db63784cafe571719b973353a2c717312ba36a51 100644 --- a/src/thermophysicalModels/liquids/C13H28/C13H28.C +++ b/src/thermophysicalModels/liquids/C13H28/C13H28.C @@ -27,19 +27,124 @@ License #include "C13H28.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C13H28, 0); + addToRunTimeSelectionTable(liquid, C13H28,); + addToRunTimeSelectionTable(liquid, C13H28, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C13H28::C13H28() +: + liquid + ( + 184.365, + 675.80, + 1.7225e+6, + 0.77, + 0.236, + 267.76, + 3.801e-1, + 508.62, + 0.0, + 0.6186, + 1.5901e+4 + ), + rho_(59.513022, 0.2504, 675.8, 0.312), + pv_(118.27, -11432, -13.769, 5.9641e-06, 2.0), + hl_(675.80, 444227.48352453, 0.4162, 0.0, 0.0, 0.0), + cp_ + ( + 4275.05220622135, + -16.6539202126217, + 0.0325755973205326, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2860442.0545124, + 4275.05220622135, + -8.32696010631085, + 0.0108585324401775, + 0.0, + 0.0 + ), + cpg_(1136.87522035093, 3641.14663846175, -1443, 2277.00485450058, -683.0), + B_ + ( + 0.00246321156401703, + -2.66601578390692, + -1249532.17801643, + -1.0460770753668e+19, + 1.90117430097904e+21 + ), + mu_(-23.341, 2121.9, 1.7208, 0.0, 0.0), + mug_(3.5585e-08, 0.8987, 165.3, 0.0), + K_(0.1981, -0.0002046, 0.0, 0.0, 0.0, 0.0), + Kg_(5.3701e-06, 1.4751, 599.09, 0.0), + sigma_(675.80, 0.05561, 1.3361, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 184.365, 28.0) // note: Same as nHeptane +{} + + +Foam::C13H28::C13H28 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C13H28, 0); -addToRunTimeSelectionTable(liquid, C13H28,); -addToRunTimeSelectionTable(liquid, C13H28, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C13H28::C13H28(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C13H28/C13H28.H b/src/thermophysicalModels/liquids/C13H28/C13H28.H index 632b7c0ab76a2fd2827db4c4be7095d595715bc3..d97300f1d129f6e381139ecd35812f44cb1eeac9 100644 --- a/src/thermophysicalModels/liquids/C13H28/C13H28.H +++ b/src/thermophysicalModels/liquids/C13H28/C13H28.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C13H28() - : - liquid(184.365, 675.80, 1.7225e+6, 0.77, 0.236, 267.76, 3.801e-1, 508.62, 0.0, 0.6186, 1.5901e+4), - rho_(59.513022, 0.2504, 675.8, 0.312), - pv_(118.27, -11432, -13.769, 5.9641e-06, 2), - hl_(675.80, 444227.48352453, 0.4162, 0, 0, 0), - cp_(4275.05220622135, -16.6539202126217, 0.0325755973205326, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2860442.0545124, 4275.05220622135, -8.32696010631085, 0.0108585324401775, 0, 0), - cpg_(1136.87522035093, 3641.14663846175, -1443, 2277.00485450058, -683), - B_(0.00246321156401703, -2.66601578390692, -1249532.17801643, -1.0460770753668e+19, 1.90117430097904e+21), - mu_(-23.341, 2121.9, 1.7208, 0, 0), - mug_(3.5585e-08, 0.8987, 165.3, 0), - K_(0.1981, -0.0002046, 0, 0, 0, 0), - Kg_(5.3701e-06, 1.4751, 599.09, 0), - sigma_(675.80, 0.05561, 1.3361, 0, 0, 0), - D_(147.18, 20.1, 184.365, 28) // NN: Same as nHeptane - {} + C13H28(); + + //- Construct from components C13H28 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C13H28(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C13H28(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C13H28& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C13H28I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C13H28/C13H28I.H b/src/thermophysicalModels/liquids/C13H28/C13H28I.H new file mode 100644 index 0000000000000000000000000000000000000000..333905a9f3cc3aa36fe61f62446d7ffce1190aed --- /dev/null +++ b/src/thermophysicalModels/liquids/C13H28/C13H28I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C13H28::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C13H28::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C14H30/C14H30.C b/src/thermophysicalModels/liquids/C14H30/C14H30.C index 4177874ca49b691c462070304cff0c425540ebe0..0ccb3eb6c6edd4c437e08aa7a2e7edc8a9800155 100644 --- a/src/thermophysicalModels/liquids/C14H30/C14H30.C +++ b/src/thermophysicalModels/liquids/C14H30/C14H30.C @@ -27,19 +27,124 @@ License #include "C14H30.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C14H30, 0); + addToRunTimeSelectionTable(liquid, C14H30,); + addToRunTimeSelectionTable(liquid, C14H30, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C14H30::C14H30() +: + liquid + ( + 198.392, + 692.40, + 1.6212e+6, + 0.8428, + 0.237, + 279.01, + 1.8849e-1, + 526.73, + 0.0, + 0.6617, + 1.6173e+4 + ), + rho_(60.92023144, 0.2582, 692.4, 0.26628), + pv_(249.21, -16915, -35.195, 0.028451, 1.0), + hl_(692.40, 455764.345336506, 0.428, 0.0, 0.0, 0.0), + cp_ + ( + 2565.72845679261, + -4.78114036856325, + 0.0120362716238558, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2690601.01887934, + 2565.72845679261, + -2.39057018428162, + 0.00401209054128527, + 0.0, + 0.0 + ), + cpg_(1134.11831122223, 3629.17859591113, -1440.3, 2275.29335860317, -682), + B_ + ( + 0.00247837614419936, + -2.62692044034034, + -1427174.48284205, + -1.68288035807895e+19, + 3.48854792531957e+21 + ), + mu_(-18.964, 2010.9, 1.0648, 0.0, 0.0), + mug_(4.4565e-08, 0.8684, 228.16, -4347.2), + K_(0.1957, -0.0001993, 0.0, 0.0, 0.0, 0.0), + Kg_(-0.000628, 0.944, -5490, 0.0), + sigma_(692.40, 0.056436, 1.3658, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 198.392, 28.0) // note: Same as nHeptane +{} + + +Foam::C14H30::C14H30 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C14H30, 0); -addToRunTimeSelectionTable(liquid, C14H30,); -addToRunTimeSelectionTable(liquid, C14H30, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C14H30::C14H30(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C14H30/C14H30.H b/src/thermophysicalModels/liquids/C14H30/C14H30.H index fa86f3c9c3df5ad7493f1ffb20c08b875fd152fa..183ee026de88bd828575787d3a3a657de5756b8f 100644 --- a/src/thermophysicalModels/liquids/C14H30/C14H30.H +++ b/src/thermophysicalModels/liquids/C14H30/C14H30.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C14H30() - : - liquid(198.392, 692.40, 1.6212e+6, 0.8428, 0.237, 279.01, 1.8849e-1, 526.73, 0.0, 0.6617, 1.6173e+4), - rho_(60.92023144, 0.2582, 692.4, 0.26628), - pv_(249.21, -16915, -35.195, 0.028451, 1), - hl_(692.40, 455764.345336506, 0.428, 0, 0, 0), - cp_(2565.72845679261, -4.78114036856325, 0.0120362716238558, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2690601.01887934, 2565.72845679261, -2.39057018428162, 0.00401209054128527, 0, 0), - cpg_(1134.11831122223, 3629.17859591113, -1440.3, 2275.29335860317, -682), - B_(0.00247837614419936, -2.62692044034034, -1427174.48284205, -1.68288035807895e+19, 3.48854792531957e+21), - mu_(-18.964, 2010.9, 1.0648, 0, 0), - mug_(4.4565e-08, 0.8684, 228.16, -4347.2), - K_(0.1957, -0.0001993, 0, 0, 0, 0), - Kg_(-0.000628, 0.944, -5490, 0), - sigma_(692.40, 0.056436, 1.3658, 0, 0, 0), - D_(147.18, 20.1, 198.392, 28) // NN: Same as nHeptane - {} + C14H30(); + + //- Construct from components C14H30 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C14H30(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C14H30(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; - //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + //- Liquid thermal conductivity [W/(m K)] + inline scalar K(scalar p, scalar T) const; - //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + //- Vapour thermal conductivity [W/(m K)] + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C14H30& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C14H30I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C14H30/C14H30I.H b/src/thermophysicalModels/liquids/C14H30/C14H30I.H new file mode 100644 index 0000000000000000000000000000000000000000..6c64cab8c42ab65ef5866fb8aac40fd1766a5966 --- /dev/null +++ b/src/thermophysicalModels/liquids/C14H30/C14H30I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C14H30::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C14H30::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C16H34/C16H34.C b/src/thermophysicalModels/liquids/C16H34/C16H34.C index 7c394c898b78c00c8adc0460919ded10cfc5cc90..af1a86a186519aba492fa9861c0be63608acc247 100644 --- a/src/thermophysicalModels/liquids/C16H34/C16H34.C +++ b/src/thermophysicalModels/liquids/C16H34/C16H34.C @@ -27,19 +27,124 @@ License #include "C16H34.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C16H34, 0); + addToRunTimeSelectionTable(liquid, C16H34,); + addToRunTimeSelectionTable(liquid, C16H34, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C16H34::C16H34() +: + liquid + ( + 226.446, + 720.60, + 1.4186e+6, + 0.93, + 0.22, + 291.32, + 8.7467e-2, + 560.01, + 0.0, + 0.7471, + 1.6052e+4 + ), + rho_(61.94656776, 0.25442, 720.6, 0.3238), + pv_(233.1, -17346, -32.251, 0.02407, 1.0), + hl_(720.60, 430654.548987397, 0.4122, 0.0, 0.0, 0.0), + cp_ + ( + 3769.90540791182, + -12.5871068599136, + 0.0247211255663602, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2777201.30410301, + 3769.90540791182, + -6.29355342995681, + 0.00824037518878673, + 0.0, + 0.0 + ), + cpg_(1128.74592618108, 3600.8584828171, -1429.7, 2259.69988429913, 679.0), + B_ + ( + 0.0025091191718997, + -2.46668079807106, + -1704070.72767901, + -3.00623548219001e+19, + 7.07320950690231e+21 + ), + mu_(-18.388, 2056.8, 0.98681, 0.0, 0.0), + mug_(1.2463e-07, 0.7322, 395.0, 6000.0), + K_(0.1963, -0.00019, 0.0, 0.0, 0.0, 0.0), + Kg_(3.075e-06, 1.552, 678.0, 0.0), + sigma_(720.60, 0.05699, 1.3929, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 226.446, 28.0) // note: Same as nHeptane +{} + + +Foam::C16H34::C16H34 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C16H34, 0); -addToRunTimeSelectionTable(liquid, C16H34,); -addToRunTimeSelectionTable(liquid, C16H34, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C16H34::C16H34(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C16H34/C16H34.H b/src/thermophysicalModels/liquids/C16H34/C16H34.H index 9cbc69541bda278558e4a299b02b47138cfcb127..5f2b8831635c6434817e3377c18fb9b999f626a2 100644 --- a/src/thermophysicalModels/liquids/C16H34/C16H34.H +++ b/src/thermophysicalModels/liquids/C16H34/C16H34.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C16H34() - : - liquid(226.446, 720.60, 1.4186e+6, 0.93, 0.22, 291.32, 8.7467e-2, 560.01, 0, 0.7471, 1.6052e+4), - rho_(61.94656776, 0.25442, 720.6, 0.3238), - pv_(233.1, -17346, -32.251, 0.02407, 1), - hl_(720.60, 430654.548987397, 0.4122, 0, 0, 0), - cp_(3769.90540791182, -12.5871068599136, 0.0247211255663602, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2777201.30410301, 3769.90540791182, -6.29355342995681, 0.00824037518878673, 0, 0), - cpg_(1128.74592618108, 3600.8584828171, -1429.7, 2259.69988429913, 679), - B_(0.0025091191718997, -2.46668079807106, -1704070.72767901, -3.00623548219001e+19, 7.07320950690231e+21), - mu_(-18.388, 2056.8, 0.98681, 0, 0), - mug_(1.2463e-07, 0.7322, 395, 6000), - K_(0.1963, -0.00019, 0, 0, 0, 0), - Kg_(3.075e-06, 1.552, 678, 0), - sigma_(720.60, 0.05699, 1.3929, 0, 0, 0), - D_(147.18, 20.1, 226.446, 28) // NN: Same as nHeptane - {} + C16H34(); + + //- Construct from components C16H34 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C16H34(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C16H34(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C16H34& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C16H34I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C16H34/C16H34I.H b/src/thermophysicalModels/liquids/C16H34/C16H34I.H new file mode 100644 index 0000000000000000000000000000000000000000..66a19bb3d4877ca9511b6102d41f38dc445e103b --- /dev/null +++ b/src/thermophysicalModels/liquids/C16H34/C16H34I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C16H34::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C16H34::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C index e5943b893ef16f7342f68363f8242961c05a199b..c5bfbe37e49503ac5c975df63d13e1255b67fb15 100644 --- a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C +++ b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.C @@ -27,19 +27,124 @@ License #include "C2H5OH.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C2H5OH, 0); + addToRunTimeSelectionTable(liquid, C2H5OH,); + addToRunTimeSelectionTable(liquid, C2H5OH, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C2H5OH::C2H5OH() +: + liquid + ( + 46.069, + 516.25, + 6.3835e+6, + 0.16692, + 0.248, + 159.05, + 7.1775e-5, + 351.44, + 5.6372e-30, + 0.6371, + 2.6421e+4 + ), + rho_(70.1308387, 0.26395, 516.25, 0.2367), + pv_(59.796, -6595, -5.0474, 6.3e-07, 2), + hl_(516.25, 958345.091059064, -0.4134, 0.75362, 0.0, 0.0), + cp_ + ( + 2052.57331394213, + -1.21990926653498, + 0.00714146172046278, + 5.20523562482363e-05, + 0.0, + 0.0 + ), + h_ + ( + -6752827.25039109, + 2052.57331394213, + -0.60995463326749, + 0.00238048724015426, + 1.30130890620591e-05, + 0.0 + ), + cpg_(909.505307256507, 3358.00646855803, 1530, 2029.56434912848, 640), + B_ + ( + -0.00358158414552085, + 3.90718270420456, + -1180837.43949293, + 9.81136990166923e+18, + -3.58592545963663e+21 + ), + mu_(8.049, 776, -3.068, 0.0, 0.0), + mug_(1.0613e-07, 0.8066, 52.7, 0.0), + K_(0.253, -0.000281, 0.0, 0.0, 0.0, 0.0), + Kg_(-3.12, 0.7152, -3550000.0, 0.0), + sigma_(516.25, 0.04064, -4.34e-05, -6.42e-08, 0.0, 0.0), + D_(147.18, 20.1, 46.069, 28) // note: Same as nHeptane +{} + + +Foam::C2H5OH::C2H5OH +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C2H5OH, 0); -addToRunTimeSelectionTable(liquid, C2H5OH,); -addToRunTimeSelectionTable(liquid, C2H5OH, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C2H5OH::C2H5OH(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H index 8e4867006457f13efadec823decb99416a306b1e..88a7099446da793a5393b42cdf254060fa1c7887 100644 --- a/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H +++ b/src/thermophysicalModels/liquids/C2H5OH/C2H5OH.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C2H5OH() - : - liquid(46.069, 516.25, 6.3835e+6, 0.16692, 0.248, 159.05, 7.1775e-5, 351.44, 5.6372e-30, 0.6371, 2.6421e+4), - rho_(70.1308387, 0.26395, 516.25, 0.2367), - pv_(59.796, -6595, -5.0474, 6.3e-07, 2), - hl_(516.25, 958345.091059064, -0.4134, 0.75362, 0, 0), - cp_(2052.57331394213, -1.21990926653498, 0.00714146172046278, 5.20523562482363e-05, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-6752827.25039109, 2052.57331394213, -0.60995463326749, 0.00238048724015426, 1.30130890620591e-05, 0), - cpg_(909.505307256507, 3358.00646855803, 1530, 2029.56434912848, 640), - B_(-0.00358158414552085, 3.90718270420456, -1180837.43949293, 9.81136990166923e+18, -3.58592545963663e+21), - mu_(8.049, 776, -3.068, 0, 0), - mug_(1.0613e-07, 0.8066, 52.7, 0), - K_(0.253, -0.000281, 0, 0, 0, 0), - Kg_(-3.12, 0.7152, -3550000.0, 0), - sigma_(516.25, 0.04064, -4.34e-05, -6.42e-08, 0, 0), - D_(147.18, 20.1, 46.069, 28) // NN: Same as nHeptane - {} + C2H5OH(); + + //- Construct from components C2H5OH ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C2H5OH(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C2H5OH(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C2H5OH& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C2H5OHI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H5OH/C2H5OHI.H b/src/thermophysicalModels/liquids/C2H5OH/C2H5OHI.H new file mode 100644 index 0000000000000000000000000000000000000000..cf051eea9c8cf30a3d5d000be0c9af9aeca5b8e3 --- /dev/null +++ b/src/thermophysicalModels/liquids/C2H5OH/C2H5OHI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C2H5OH::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C2H5OH::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H6/C2H6.C b/src/thermophysicalModels/liquids/C2H6/C2H6.C index 8859c637be4f507d42f66f74471ea9d36fddf4fa..659144b76406545185205471fcafae760b968654 100644 --- a/src/thermophysicalModels/liquids/C2H6/C2H6.C +++ b/src/thermophysicalModels/liquids/C2H6/C2H6.C @@ -27,19 +27,115 @@ License #include "C2H6.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C2H6, 0); + addToRunTimeSelectionTable(liquid, C2H6,); + addToRunTimeSelectionTable(liquid, C2H6, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C2H6::C2H6() +: + liquid + ( + 30.070, + 305.32, + 4.872e+6, + 0.14550, + 0.279, + 90.35, + 1.13, + 184.55, + 0.0, + 0.0995, + 1.24e+4 + ), + rho_(57.499854, 0.27937, 305.32, 0.29187), + pv_(51.857, -2598.7, -5.1283, 1.4913e-05, 2.0), + hl_(305.32, 701396.740937812, 0.60646, -0.55492, 0.32799, 0.0), + cp_ + ( + 305.32, + 8.02554965861611, + 2983.63817758563, + 167.548325566287, + -343.93389207094 + ), + h_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0), + cpg_(1341.07083471899, 4463.58496840705, 1655.5, 2435.08480212837, 752.87), + B_ + ( + 0.00269205187894912, + -2.05221150648487, + -47721.9820419022, + 2.24808779514466e+15, + -3.23910874625873e+17 + ), + mu_(-3.4134, 197.05, -1.2193, -9.2023e-26, 10.0), + mug_(2.5906e-07, 0.67988, 98.902, 0.0), + K_(0.35758, -0.0011458, 6.1866e-07, 0.0, 0.0, 0.0), + Kg_(7.3869e-05, 1.1689, 500.73, 0.0), + sigma_(305.32, 0.048643, 1.1981, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 30.070, 28) // note: Same as nHeptane +{} + + +Foam::C2H6::C2H6 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc14& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C2H6, 0); -addToRunTimeSelectionTable(liquid, C2H6,); -addToRunTimeSelectionTable(liquid, C2H6, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C2H6::C2H6(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H6/C2H6.H b/src/thermophysicalModels/liquids/C2H6/C2H6.H index 48200af5908303c92f33085379c4b60af6eac002..728c362732ec9249476fdddbf41561e9e047781b 100644 --- a/src/thermophysicalModels/liquids/C2H6/C2H6.H +++ b/src/thermophysicalModels/liquids/C2H6/C2H6.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C2H6() - : - liquid(30.070, 305.32, 4.872e+6, 0.14550, 0.279, 90.35, 1.13, 184.55, 0.0, 0.0995, 1.24e+4), - rho_(57.499854, 0.27937, 305.32, 0.29187), - pv_(51.857, -2598.7, -5.1283, 1.4913e-05, 2), - hl_(305.32, 701396.740937812, 0.60646, -0.55492, 0.32799, 0), - cp_(305.32, 8.02554965861611, 2983.63817758563, 167.548325566287, -343.93389207094), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(0, 0, 0, 0, 0, 0), - cpg_(1341.07083471899, 4463.58496840705, 1655.5, 2435.08480212837, 752.87), - B_(0.00269205187894912, -2.05221150648487, -47721.9820419022, 2.24808779514466e+15, -3.23910874625873e+17), - mu_(-3.4134, 197.05, -1.2193, -9.2023e-26, 10), - mug_(2.5906e-07, 0.67988, 98.902, 0), - K_(0.35758, -0.0011458, 6.1866e-07, 0, 0, 0), - Kg_(7.3869e-05, 1.1689, 500.73, 0), - sigma_(305.32, 0.048643, 1.1981, 0, 0, 0), - D_(147.18, 20.1, 30.070, 28) // NN: Same as nHeptane - {} + C2H6(); + + //- Construct from components C2H6 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C2H6(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C2H6(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C2H6& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C2H6I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H6/C2H6I.H b/src/thermophysicalModels/liquids/C2H6/C2H6I.H new file mode 100644 index 0000000000000000000000000000000000000000..a788413b0efafe6f73aa17984020a267069a8885 --- /dev/null +++ b/src/thermophysicalModels/liquids/C2H6/C2H6I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C2H6::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H6O/C2H6O.C b/src/thermophysicalModels/liquids/C2H6O/C2H6O.C index d4de1a8c1b8fddd0202bdcea08fb3529bb61f9cf..8cc2a83df0b03bd414b3f1d0a52fea166a68be30 100644 --- a/src/thermophysicalModels/liquids/C2H6O/C2H6O.C +++ b/src/thermophysicalModels/liquids/C2H6O/C2H6O.C @@ -27,19 +27,124 @@ License #include "C2H6O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C2H6O, 0); + addToRunTimeSelectionTable(liquid, C2H6O,); + addToRunTimeSelectionTable(liquid, C2H6O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C2H6O::C2H6O() +: + liquid + ( + 46.069, + 400.10, + 5.3702e+6, + 0.17, + 0.274, + 131.65, + 3.0849, + 248.31, + 4.3363e-30, + 0.2036, + 1.7572e+4 + ), + rho_(69.472052, 0.26325, 400.1, 0.2806), + pv_(51.566, -3664.4, -4.653, 5.9e-06, 2), + hl_(400.10, 608435.173326966, 0.2477, -0.089, 0.203, 0), + cp_ + ( + 1491.24139877141, + 11.3099915344375, + -0.067273003538171, + 0.000136556035511949, + 0.0, + 0.0 + ), + h_ + ( + -5024829.22619402, + 1491.24139877141, + 5.65499576721874, + -0.0224243345127237, + 3.41390088779874e-05, + 0.0 + ), + cpg_(950.747791356443, 3160.47667628991, 1284, 1291.5409494454, 520), + B_ + ( + 0.00235082159369641, + -2.26616596843865, + -123293.320888233, + -8.87364605266014e+16, + 1.46389111984198e+19 + ), + mu_(-10.62, 448.99, 8.3967e-05, 0.0, 0.0), + mug_(7.27, 0.1091, 440600000, 0.0), + K_(0.31276, -0.0005677, 0.0, 0.0, 0.0, 0.0), + Kg_(0.2247, 0.1026, 997.06, 1762900), + sigma_(400.10, 0.06096, 1.2286, 0, 0, 0), + D_(147.18, 20.1, 46.069, 28) // note: Same as nHeptane +{} + + +Foam::C2H6O::C2H6O +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C2H6O, 0); -addToRunTimeSelectionTable(liquid, C2H6O,); -addToRunTimeSelectionTable(liquid, C2H6O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C2H6O::C2H6O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H6O/C2H6O.H b/src/thermophysicalModels/liquids/C2H6O/C2H6O.H index 8017e404377ac34e17a3e55e797d5665991ef4ea..690f68d9e4f68d7e1f1b5e31156e72ef89247621 100644 --- a/src/thermophysicalModels/liquids/C2H6O/C2H6O.H +++ b/src/thermophysicalModels/liquids/C2H6O/C2H6O.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C2H6O() - : - liquid(46.069, 400.10, 5.3702e+6, 0.17, 0.274, 131.65, 3.0849, 248.31, 4.3363e-30, 0.2036, 1.7572e+4), - rho_(69.472052, 0.26325, 400.1, 0.2806), - pv_(51.566, -3664.4, -4.653, 5.9e-06, 2), - hl_(400.10, 608435.173326966, 0.2477, -0.089, 0.203, 0), - cp_(1491.24139877141, 11.3099915344375, -0.067273003538171, 0.000136556035511949, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-5024829.22619402, 1491.24139877141, 5.65499576721874, -0.0224243345127237, 3.41390088779874e-05, 0), - cpg_(950.747791356443, 3160.47667628991, 1284, 1291.5409494454, 520), - B_(0.00235082159369641, -2.26616596843865, -123293.320888233, -8.87364605266014e+16, 1.46389111984198e+19), - mu_(-10.62, 448.99, 8.3967e-05, 0, 0), - mug_(7.27, 0.1091, 440600000, 0), - K_(0.31276, -0.0005677, 0, 0, 0, 0), - Kg_(0.2247, 0.1026, 997.06, 1762900), - sigma_(400.10, 0.06096, 1.2286, 0, 0, 0), - D_(147.18, 20.1, 46.069, 28) // NN: Same as nHeptane - {} + C2H6O(); + + //- Construct from components C2H6O ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C2H6O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C2H6O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C2H6O& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C2H6OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C2H6O/C2H6OI.H b/src/thermophysicalModels/liquids/C2H6O/C2H6OI.H new file mode 100644 index 0000000000000000000000000000000000000000..5e2b7cadc707d912433a31fdf7bd64989b90d11a --- /dev/null +++ b/src/thermophysicalModels/liquids/C2H6O/C2H6OI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C2H6O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C2H6O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C3H6O/C3H6O.C b/src/thermophysicalModels/liquids/C3H6O/C3H6O.C index 9e128206ced0d9dcc0930317a3a0aa697140c092..2e2b29b6e0b31c9dd8438b291aa3bb6363459985 100644 --- a/src/thermophysicalModels/liquids/C3H6O/C3H6O.C +++ b/src/thermophysicalModels/liquids/C3H6O/C3H6O.C @@ -27,19 +27,124 @@ License #include "C3H6O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C3H6O, 0); + addToRunTimeSelectionTable(liquid, C3H6O,); + addToRunTimeSelectionTable(liquid, C3H6O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C3H6O::C3H6O() +: + liquid + ( + 58.08, + 508.20, + 4.7015e+6, + 0.209, + 0.233, + 178.45, + 2.5938, + 329.44, + 9.6066e-30, + 0.3064, + 1.9774e+4 + ), + rho_(71.426784, 0.2576, 508.2, 0.29903), + pv_(70.72, -5.685, -7.351, 6.3e-06, 2.0), + hl_(508.20, 846590.909090909, 1.036, -1.294, 0.672, 0.0), + cp_ + ( + 2334.71074380165, + -3.04752066115702, + 0.00488464187327824, + 1.18629476584022e-05, + 0.0, + 0.0 + ), + h_ + ( + 2571201.780143, + 2334.71074380165, + -1.52376033057851, + 0.00162821395775941, + 2.96573691460055e-06, + 0.0 + ), + cpg_(828.512396694215, 2830.57851239669, 1250.0, 1234.50413223141, -524.4), + B_ + ( + 0.00190599173553719, + -1.70798898071625, + -525826.446280992, + 1.70282369146006e+17, + -2.83298898071625e+20 + ), + mu_(-14.918, 1023.4, 0.5961, 0.0, 0.0), + mug_(3.1005e-08, 0.9762, 23.139, 0.0), + K_(0.2502, -0.000298, 0.0, 0.0, 0.0, 0.0), + Kg_(-26.8, 0.9098, -126500000, 0.0), + sigma_(508.20, 0.0622, 1.124, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 58.08, 28) // note: Same as nHeptane +{} + + +Foam::C3H6O::C3H6O +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C3H6O, 0); -addToRunTimeSelectionTable(liquid, C3H6O,); -addToRunTimeSelectionTable(liquid, C3H6O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C3H6O::C3H6O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C3H6O/C3H6O.H b/src/thermophysicalModels/liquids/C3H6O/C3H6O.H index 86cb9c5998757aa0919449f278bade06453bd618..b08db3fc0b4c68c76ecd10d48f73868127940569 100644 --- a/src/thermophysicalModels/liquids/C3H6O/C3H6O.H +++ b/src/thermophysicalModels/liquids/C3H6O/C3H6O.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C3H6O() - : - liquid(58.08, 508.20, 4.7015e+6, 0.209, 0.233, 178.45, 2.5938, 329.44, 9.6066e-30, 0.3064, 1.9774e+4), - rho_(71.426784, 0.2576, 508.2, 0.29903), - pv_(70.72, -5.685, -7.351, 6.3e-06, 2), - hl_(508.20, 846590.909090909, 1.036, -1.294, 0.672, 0), - cp_(2334.71074380165, -3.04752066115702, 0.00488464187327824, 1.18629476584022e-05, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(2571201.780143, 2334.71074380165, -1.52376033057851, 0.00162821395775941, 2.96573691460055e-06, 0), - cpg_(828.512396694215, 2830.57851239669, 1250, 1234.50413223141, -524.4), - B_(0.00190599173553719, -1.70798898071625, -525826.446280992, 1.70282369146006e+17, -2.83298898071625e+20), - mu_(-14.918, 1023.4, 0.5961, 0, 0), - mug_(3.1005e-08, 0.9762, 23.139, 0), - K_(0.2502, -0.000298, 0, 0, 0, 0), - Kg_(-26.8, 0.9098, -126500000, 0), - sigma_(508.20, 0.0622, 1.124, 0, 0, 0), - D_(147.18, 20.1, 58.08, 28) // NN: Same as nHeptane - {} + C3H6O(); + + //- Construct from compoents C3H6O ( const liquid& l, @@ -123,124 +106,55 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C3H6O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C3H6O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + + // I-O //- Write the function coefficients void writeData(Ostream& os) const @@ -260,8 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C3H6O& l) { @@ -277,6 +190,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C3H6OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C3H6O/C3H6OI.H b/src/thermophysicalModels/liquids/C3H6O/C3H6OI.H new file mode 100644 index 0000000000000000000000000000000000000000..a02afbde380980732218ea7374f4923ae9c28462 --- /dev/null +++ b/src/thermophysicalModels/liquids/C3H6O/C3H6OI.H @@ -0,0 +1,104 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C3H6O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C3H6O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C3H8/C3H8.C b/src/thermophysicalModels/liquids/C3H8/C3H8.C index 6293a16b5205c07b965df9caad38dcd047993b89..936af6e463068826cba70eeb5258e07dc84bc4f8 100644 --- a/src/thermophysicalModels/liquids/C3H8/C3H8.C +++ b/src/thermophysicalModels/liquids/C3H8/C3H8.C @@ -27,19 +27,113 @@ License #include "C3H8.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C3H8, 0); + addToRunTimeSelectionTable(liquid, C3H8,); + addToRunTimeSelectionTable(liquid, C3H8, Istream); +} +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +Foam::C3H8::C3H8() +: + liquid + ( + 44.096, + 369.83, + 4.248e+6, + 0.2, 0.276, + 85.47, + 1.685e-4, + 231.11, + 0.0, + 0.1523, + 1.31e+4 + ), + rho_(60.6628672, 0.27453, 369.83, 0.29359), + pv_(59.078, -3492.6, -6.0669, 1.0919e-05, 2.0), + hl_(369.83, 662395.682148041, 0.78237, -0.77319, 0.39246, 0.0), + cp_ + ( + 369.83, + 9.48470319647089, + 2576.87772133527, + 95.3560311677331, + -131.535634282099 + ), + h_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0), + cpg_(1177.43105950653, 4364.34143686502, 1626.5, 2648.76632801161, 723.6), + B_ + ( + 0.00255578737300435, + -2.24963715529753, + -102276.850507983, + 7.00743831640058e+15, + -1.59878447024673e+18 + ), + mu_(-6.9281, 420.76, -0.63276, -1.713e-26, 10.0), + mug_(2.4993e-07, 0.68612, 179.34, -8254.6), + K_(0.26755, -0.00066457, 2.774e-07, 0.0, 0.0, 0.0), + Kg_(-1.12, 0.10972, -9834.6, -7535800), + sigma_(369.83, 0.05092, 1.2197, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 44.096, 28) // note: Same as nHeptane +{} + + +Foam::C3H8::C3H8 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc14& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C3H8, 0); -addToRunTimeSelectionTable(liquid, C3H8,); -addToRunTimeSelectionTable(liquid, C3H8, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C3H8::C3H8(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C3H8/C3H8.H b/src/thermophysicalModels/liquids/C3H8/C3H8.H index 878ea72ad1b1f49fc92762eb5c4c7a57221271f0..27477b01c67e73c72c0958e3dd007968004fbb2f 100644 --- a/src/thermophysicalModels/liquids/C3H8/C3H8.H +++ b/src/thermophysicalModels/liquids/C3H8/C3H8.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C3H8() - : - liquid(44.096, 369.83, 4.248e+6, 0.2, 0.276, 85.47, 1.685e-4, 231.11, 0.0, 0.1523, 1.31e+4), - rho_(60.6628672, 0.27453, 369.83, 0.29359), - pv_(59.078, -3492.6, -6.0669, 1.0919e-05, 2), - hl_(369.83, 662395.682148041, 0.78237, -0.77319, 0.39246, 0), - cp_(369.83, 9.48470319647089, 2576.87772133527, 95.3560311677331, -131.535634282099), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(0, 0, 0, 0, 0, 0), - cpg_(1177.43105950653, 4364.34143686502, 1626.5, 2648.76632801161, 723.6), - B_(0.00255578737300435, -2.24963715529753, -102276.850507983, 7.00743831640058e+15, -1.59878447024673e+18), - mu_(-6.9281, 420.76, -0.63276, -1.713e-26, 10), - mug_(2.4993e-07, 0.68612, 179.34, -8254.6), - K_(0.26755, -0.00066457, 2.774e-07, 0, 0, 0), - Kg_(-1.12, 0.10972, -9834.6, -7535800), - sigma_(369.83, 0.05092, 1.2197, 0, 0, 0), - D_(147.18, 20.1, 44.096, 28) // NN: Same as nHeptane - {} + C3H8(); + + //- Construct from components C3H8 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C3H8(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C3H8(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C3H8& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C3H8I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C3H8/C3H8I.H b/src/thermophysicalModels/liquids/C3H8/C3H8I.H new file mode 100644 index 0000000000000000000000000000000000000000..7ba1f47a74bc50d3a6370b59bcf1e93aafb90279 --- /dev/null +++ b/src/thermophysicalModels/liquids/C3H8/C3H8I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C3H8::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C3H8::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C4H10O/C4H10O.C b/src/thermophysicalModels/liquids/C4H10O/C4H10O.C index 330dbf21c296a03c8e879181f6eaf94a288b31de..83a7dd2aa693ca66f855519317cc00d2f21819ef 100644 --- a/src/thermophysicalModels/liquids/C4H10O/C4H10O.C +++ b/src/thermophysicalModels/liquids/C4H10O/C4H10O.C @@ -27,19 +27,124 @@ License #include "C4H10O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C4H10O, 0); + addToRunTimeSelectionTable(liquid, C4H10O,); + addToRunTimeSelectionTable(liquid, C4H10O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C4H10O::C4H10O() +: + liquid + ( + 74.123, + 466.70, + 3.6376e+6, + 0.28, + 0.262, + 156.85, + 4.0709e-1, + 307.58, + 3.836e-30, + 0.2846, + 1.5532e+4 + ), + rho_(75.2793188, 0.27608, 466.7, 0.29358), + pv_(101.03, -6311.5, -12.27, 1.377e-05, 2), + hl_(466.70, 566355.921913576, 0.40717, 0, 0, 0), + cp_ + ( + 599.004357621791, + 17.5519069654493, + -0.0742009902459426, + 0.00011822241409549, + 0.0, + 0.0 + ), + h_ + ( + -4312350.92187216, + 599.004357621791, + 8.77595348272466, + -0.0247336634153142, + 2.95556035238725e-05, + 0.0 + ), + cpg_(1163.06679438231, 3441.57683849817, 1541.3, 1938.66950878944, -688.9), + B_ + ( + 0.00215992337061371, + -1.810504162001, + -276972.0599544, + -2.12349742994752e+17, + 3.1016013922804e+19 + ), + mu_(10.197, -63.8, -3.226, 0.0, 0.0), + mug_(1.948e-06, 0.41, 495.8, 0.0), + K_(0.249, -0.0004005, 0.0, 0.0, 0.0, 0.0), + Kg_(-0.0044894, 0.6155, -3266.3, 0.0), + sigma_(466.70, 0.057356, 1.288, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 74.123, 28) // note: Same as nHeptane +{} + + +Foam::C4H10O::C4H10O +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C4H10O, 0); -addToRunTimeSelectionTable(liquid, C4H10O,); -addToRunTimeSelectionTable(liquid, C4H10O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C4H10O::C4H10O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C4H10O/C4H10O.H b/src/thermophysicalModels/liquids/C4H10O/C4H10O.H index 1c9257ea64081928b1c0af8c003cde8c68fc3ce0..b2da44684940020f18a07764986d19d399fd96dd 100644 --- a/src/thermophysicalModels/liquids/C4H10O/C4H10O.H +++ b/src/thermophysicalModels/liquids/C4H10O/C4H10O.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C4H10O() - : - liquid(74.123, 466.70, 3.6376e+6, 0.28, 0.262, 156.85, 4.0709e-1, 307.58, 3.836e-30, 0.2846, 1.5532e+4), - rho_(75.2793188, 0.27608, 466.7, 0.29358), - pv_(101.03, -6311.5, -12.27, 1.377e-05, 2), - hl_(466.70, 566355.921913576, 0.40717, 0, 0, 0), - cp_(599.004357621791, 17.5519069654493, -0.0742009902459426, 0.00011822241409549, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-4312350.92187216, 599.004357621791, 8.77595348272466, -0.0247336634153142, 2.95556035238725e-05, 0), - cpg_(1163.06679438231, 3441.57683849817, 1541.3, 1938.66950878944, -688.9), - B_(0.00215992337061371, -1.810504162001, -276972.0599544, -2.12349742994752e+17, 3.1016013922804e+19), - mu_(10.197, -63.8, -3.226, 0, 0), - mug_(1.948e-06, 0.41, 495.8, 0), - K_(0.249, -0.0004005, 0, 0, 0, 0), - Kg_(-0.0044894, 0.6155, -3266.3, 0), - sigma_(466.70, 0.057356, 1.288, 0, 0, 0), - D_(147.18, 20.1, 74.123, 28) // NN: Same as nHeptane - {} + C4H10O(); + + //- Construct from components C4H10O ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C4H10O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C4H10O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C4H10O& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C4H10OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C4H10O/C4H10OI.H b/src/thermophysicalModels/liquids/C4H10O/C4H10OI.H new file mode 100644 index 0000000000000000000000000000000000000000..bc067ebaffa5bf7d3cc2e5b4a6406a62c314ce19 --- /dev/null +++ b/src/thermophysicalModels/liquids/C4H10O/C4H10OI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C4H10O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C4H10O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C6H14/C6H14.C b/src/thermophysicalModels/liquids/C6H14/C6H14.C index d78e28c0dfb45760ae91ae4a53490e3b9b0d7b6e..6e82c98871ac62c0973dfe9f416f0087caa34014 100644 --- a/src/thermophysicalModels/liquids/C6H14/C6H14.C +++ b/src/thermophysicalModels/liquids/C6H14/C6H14.C @@ -27,19 +27,124 @@ License #include "C6H14.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C6H14, 0); + addToRunTimeSelectionTable(liquid, C6H14,); + addToRunTimeSelectionTable(liquid, C6H14, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C6H14::C6H14() +: + liquid + ( + 86.177, + 507.60, + 3.025e+6, + 0.371, + 0.266, + 177.83, + 9.017e-1, + 341.88, + 0.0, + 0.3013, + 1.49e+4 + ), + rho_(61.03399848, 0.26411, 507.6, 0.27537), + pv_(104.65, -6995.5, -12.702, 1.2381e-05, 2.0), + hl_(507.60, 527286.863084118, 0.39002, 0.0, 0.0, 0.0), + cp_ + ( + 1997.28465831951, + -2.13258758137322, + 0.0102964828202421, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2902186.5403246, + 1997.28465831951, + -1.06629379068661, + 0.00343216094008069, + 0.0, + 0.0 + ), + cpg_(1211.4601343746, 4088.0977523005, 1694.6, 2748.99335089409, 761.6), + B_ + ( + 0.0022859927822969, + -2.32080485512376, + -430509.300625457, + 1.93787205402834e+17, + -7.17128700233241e+19 + ), + mu_(-20.715, 1207.5, 1.4993, 0.0, 0.0), + mug_(1.7514e-07, 0.70737, 157.14, 0.0), + K_(0.22492, -0.0003533, 0.0, 0.0, 0.0, 0.0), + Kg_(-650.5, 0.8053, -1412100000, 0.0), + sigma_(507.60, 0.055003, 1.2674, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 86.177, 28) // note: Same as nHeptane +{} + + +Foam::C6H14::C6H14 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C6H14, 0); -addToRunTimeSelectionTable(liquid, C6H14,); -addToRunTimeSelectionTable(liquid, C6H14, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C6H14::C6H14(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C6H14/C6H14.H b/src/thermophysicalModels/liquids/C6H14/C6H14.H index 46f1c0766ca8db147c5e34156826d58971dfd7d6..919d68bfd68e5381c126e7fb250ae8348b23aa9a 100644 --- a/src/thermophysicalModels/liquids/C6H14/C6H14.H +++ b/src/thermophysicalModels/liquids/C6H14/C6H14.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C6H14() - : - liquid(86.177, 507.60, 3.025e+6, 0.371, 0.266, 177.83, 9.017e-1, 341.88, 0.0, 0.3013, 1.49e+4), - rho_(61.03399848, 0.26411, 507.6, 0.27537), - pv_(104.65, -6995.5, -12.702, 1.2381e-05, 2), - hl_(507.60, 527286.863084118, 0.39002, 0, 0, 0), - cp_(1997.28465831951, -2.13258758137322, 0.0102964828202421, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2902186.5403246, 1997.28465831951, -1.06629379068661, 0.00343216094008069, 0, 0), - cpg_(1211.4601343746, 4088.0977523005, 1694.6, 2748.99335089409, 761.6), - B_(0.0022859927822969, -2.32080485512376, -430509.300625457, 1.93787205402834e+17, -7.17128700233241e+19), - mu_(-20.715, 1207.5, 1.4993, 0, 0), - mug_(1.7514e-07, 0.70737, 157.14, 0), - K_(0.22492, -0.0003533, 0, 0, 0, 0), - Kg_(-650.5, 0.8053, -1412100000, 0), - sigma_(507.60, 0.055003, 1.2674, 0, 0, 0), - D_(147.18, 20.1, 86.177, 28) // NN: Same as nHeptane - {} + C6H14(); + + //- Construct from components C6H14 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C6H14(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C6H14(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C6H14& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C6H14I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C6H14/C6H14I.H b/src/thermophysicalModels/liquids/C6H14/C6H14I.H new file mode 100644 index 0000000000000000000000000000000000000000..144648c0a71c2d091f0635e1800a8e2129569857 --- /dev/null +++ b/src/thermophysicalModels/liquids/C6H14/C6H14I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C6H14::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C6H14::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C6H6/C6H6.C b/src/thermophysicalModels/liquids/C6H6/C6H6.C index 3e17819e6ad2204649c453122e257154e6f79b46..4b3abbd24d0bce010596f09bd4960078e96de0ba 100644 --- a/src/thermophysicalModels/liquids/C6H6/C6H6.C +++ b/src/thermophysicalModels/liquids/C6H6/C6H6.C @@ -27,19 +27,124 @@ License #include "C6H6.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C6H6, 0); + addToRunTimeSelectionTable(liquid, C6H6,); + addToRunTimeSelectionTable(liquid, C6H6, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C6H6::C6H6() +: + liquid + ( + 78.114, + 562.16, + 4.898e+6, + 0.25894, + 0.271, + 278.68, + 4.7961e+3, + 353.24, + 0.0, + 0.2108, + 1.8706e+4 + ), + rho_(80.5511568, 0.2667, 562.16, 0.2818), + pv_(78.05, -6275.5, -8.4443, 6.26e-06, 2), + hl_(562.16, 649435.440510024, 0.7616, -0.5052, 0.1564, 0), + cp_ + ( + 1386.69124612745, + -0.416058581048212, + 0.00542796425736744, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + 186141.395065592, + 1386.69124612745, + -0.208029290524106, + 0.00180932141912248, + 0.0, + 0.0 + ), + cpg_(568.656066774202, 2970.65826868423, 1494.6, 2203.57426325627, -678.15), + B_ + ( + 0.00184089919860716, + -2.30176408838364, + -309176.332027549, + -5.12072099751645e+15, + -2.90216862534245e+19 + ), + mu_(6.764, 336.4, -2.687, 0.0, 0.0), + mug_(3.134e-08, 0.9676, 7.9, 0.0), + K_(0.2407, -0.0003202, 0.0, 0.0, 0.0, 0.0), + Kg_(1.652e-05, 1.3117, 491, 0.0), + sigma_(562.16, 0.07195, 1.2389, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 78.114, 28) // note: Same as nHeptane +{} + + +Foam::C6H6::C6H6 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C6H6, 0); -addToRunTimeSelectionTable(liquid, C6H6,); -addToRunTimeSelectionTable(liquid, C6H6, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C6H6::C6H6(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C6H6/C6H6.H b/src/thermophysicalModels/liquids/C6H6/C6H6.H index 58b04a293946f7c4def35c2a74721c83abd95e71..cc9c5ac1f100fbcf7760351d49e022a651ca3e46 100644 --- a/src/thermophysicalModels/liquids/C6H6/C6H6.H +++ b/src/thermophysicalModels/liquids/C6H6/C6H6.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C6H6() - : - liquid(78.114, 562.16, 4.898e+6, 0.25894, 0.271, 278.68, 4.7961e+3, 353.24, 0.0, 0.2108, 1.8706e+4), - rho_(80.5511568, 0.2667, 562.16, 0.2818), - pv_(78.05, -6275.5, -8.4443, 6.26e-06, 2), - hl_(562.16, 649435.440510024, 0.7616, -0.5052, 0.1564, 0), - cp_(1386.69124612745, -0.416058581048212, 0.00542796425736744, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(186141.395065592, 1386.69124612745, -0.208029290524106, 0.00180932141912248, 0, 0), - cpg_(568.656066774202, 2970.65826868423, 1494.6, 2203.57426325627, -678.15), - B_(0.00184089919860716, -2.30176408838364, -309176.332027549, -5.12072099751645e+15, -2.90216862534245e+19), - mu_(6.764, 336.4, -2.687, 0, 0), - mug_(3.134e-08, 0.9676, 7.9, 0), - K_(0.2407, -0.0003202, 0, 0, 0, 0), - Kg_(1.652e-05, 1.3117, 491, 0), - sigma_(562.16, 0.07195, 1.2389, 0, 0, 0), - D_(147.18, 20.1, 78.114, 28) // NN: Same as nHeptane - {} + C6H6(); + + //- Comstruct from components C6H6 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C6H6(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C6H6(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; - //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + //- Liquid thermal conductivity [W/(m K)] + inline scalar K(scalar p, scalar T) const; - //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + //- Vapour thermal conductivity [W/(m K)] + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C6H6& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C6H6I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C6H6/C6H6I.H b/src/thermophysicalModels/liquids/C6H6/C6H6I.H new file mode 100644 index 0000000000000000000000000000000000000000..3aca0ee525af1a8bc688967efa34596ad0fa4914 --- /dev/null +++ b/src/thermophysicalModels/liquids/C6H6/C6H6I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C6H6::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C6H6::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C7H16/C7H16.C b/src/thermophysicalModels/liquids/C7H16/C7H16.C index 0cc7e69f0ab412c63440f9e4412d00155ae8c85f..846671927b899f9d641a205856cfa24f11423c23 100644 --- a/src/thermophysicalModels/liquids/C7H16/C7H16.C +++ b/src/thermophysicalModels/liquids/C7H16/C7H16.C @@ -27,19 +27,115 @@ License #include "C7H16.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C7H16, 0); + addToRunTimeSelectionTable(liquid, C7H16,); + addToRunTimeSelectionTable(liquid, C7H16, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C7H16::C7H16() +: + liquid + ( + 100.204, + 540.20, + 2.74e+6, + 0.428, + 0.261, + 182.57, + 1.8269e-1, + 371.58, + 0.0, + 0.3495, + 1.52e+4 + ), + rho_(61.38396836, 0.26211, 540.2, 0.28141), + pv_(87.829, -6996.4, -9.8802, 7.2099e-06, 2.0), + hl_(540.20, 499121.791545248, 0.38795, 0.0, 0.0, 0.0), + cp_ + ( + 540.20, + 6.11976102401216, + 3137.69909384855, + 182.274175063868, + -254.530511150515 + ), + h_(-3.1469964e+6,7.3072e+3,-3.52884e+1,1.10637e-1,-1.634831e-4,9.64941e-8), + cpg_(1199.05392998284, 3992.85457666361, 1676.6, 2734.42177956968, 756.4), + B_ + ( + 0.00274040956448844, + -2.90407568560137, + -440900.562851782, + -8.78208454752305e+17, + 1.28238393676899e+20 + ), + mu_(-24.451, 1533.1, 2.0087, 0.0, 0.0), + mug_(6.672e-08, 0.82837, 85.752, 0.0), + K_(0.215, -0.000303, 0.0, 0.0, 0.0, 0.0), + Kg_(-0.070028, 0.38068, -7049.9, -2400500.0), + sigma_(540.20, 0.054143, 1.2512, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 100.204, 28.0) // note: Same as C7H16 +{} + + +Foam::C7H16::C7H16 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc14& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C7H16, 0); -addToRunTimeSelectionTable(liquid, C7H16,); -addToRunTimeSelectionTable(liquid, C7H16, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C7H16::C7H16(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C7H16/C7H16.H b/src/thermophysicalModels/liquids/C7H16/C7H16.H index 64264aebfba0246ca129b915c1d37c50396f4c38..617cffb04b39d36f12b19fbbcdf430ccec09edaa 100644 --- a/src/thermophysicalModels/liquids/C7H16/C7H16.H +++ b/src/thermophysicalModels/liquids/C7H16/C7H16.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C7H16() - : - liquid(100.204, 540.20, 2.74e+6, 0.428, 0.261, 182.57, 1.8269e-1, 371.58, 0, 0.3495, 1.52e+4), - rho_(61.38396836, 0.26211, 540.2, 0.28141), - pv_(87.829, -6996.4, -9.8802, 7.2099e-06, 2), - hl_(540.20, 499121.791545248, 0.38795, 0, 0, 0), - cp_(540.20, 6.11976102401216, 3137.69909384855, 182.274175063868, -254.530511150515), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-3.1469964e+6,7.3072e+3,-3.52884e+1,1.10637e-1,-1.634831e-4,9.64941e-8), - cpg_(1199.05392998284, 3992.85457666361, 1676.6, 2734.42177956968, 756.4), - B_(0.00274040956448844, -2.90407568560137, -440900.562851782, -8.78208454752305e+17, 1.28238393676899e+20), - mu_(-24.451, 1533.1, 2.0087, 0, 0), - mug_(6.672e-08, 0.82837, 85.752, 0), - K_(0.215, -0.000303, 0, 0, 0, 0), - Kg_(-0.070028, 0.38068, -7049.9, -2400500), - sigma_(540.20, 0.054143, 1.2512, 0, 0, 0), - D_(147.18, 20.1, 100.204, 28) // NN: Same as C7H16 - {} + C7H16(); + + //- Construct from components C7H16 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C7H16(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C7H16(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C7H16& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C7H16I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C7H16/C7H16I.H b/src/thermophysicalModels/liquids/C7H16/C7H16I.H new file mode 100644 index 0000000000000000000000000000000000000000..27eb0761e148398225f7b796263e7043f975c6ab --- /dev/null +++ b/src/thermophysicalModels/liquids/C7H16/C7H16I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C7H16::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C7H16::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C7H8/C7H8.C b/src/thermophysicalModels/liquids/C7H8/C7H8.C index cfa8bda4b7a93d5bcbeb3bdf1dc268d22eb5cff2..9d58afe0143c7c6ab8b3d2a82e979dd66b7ac3c7 100644 --- a/src/thermophysicalModels/liquids/C7H8/C7H8.C +++ b/src/thermophysicalModels/liquids/C7H8/C7H8.C @@ -27,19 +27,124 @@ License #include "C7H8.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C7H8, 0); + addToRunTimeSelectionTable(liquid, C7H8,); + addToRunTimeSelectionTable(liquid, C7H8, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C7H8::C7H8() +: + liquid + ( + 92.141, + 591.79, + 4.1086e+6, + 0.31579, + 0.264, + 178.18, + 4.1009e-2, + 383.78, + 1.2008e-30, + 0.2641, + 1.8346e+4 + ), + rho_(81.32088237, 0.27108, 591.79, 0.29889), + pv_(83.359, -6995, -9.1635, 6.225e-06, 2.0), + hl_(591.79, 544383.065085033, 0.3834, 0.0, 0.0, 0.0), + cp_ + ( + 2066.83235476064, + -8.14664481609707, + 0.0322581695445024, + -3.01223125427334e-05, + 0.0, + 0.0 + ), + h_ + ( + -353094.830249075, + 2066.83235476064, + -4.07332240804853, + 0.0107527231815008, + -7.53057813568336e-06, + 0.0 + ), + cpg_(630.989461803106, 3107.19440856947, 1440.6, 2059.88647833212, -650.43), + B_ + ( + 0.00191120131103418, + -2.24970425760519, + -482293.441573241, + -7.62309938029759e+17, + 1.00986531511488e+20 + ), + mu_(-13.362, 1183, 0.333, 0.0, 0.0), + mug_(2.919e-08, 0.9648, 0.0, 0.0), + K_(0.2043, -0.000239, 0.0, 0.0, 0.0, 0.0), + Kg_(2.392e-05, 1.2694, 537, 0.0), + sigma_(591.79, 0.06685, 1.2456, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 92.141, 28) // note: Same as nHeptane +{} + + +Foam::C7H8::C7H8 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C7H8, 0); -addToRunTimeSelectionTable(liquid, C7H8,); -addToRunTimeSelectionTable(liquid, C7H8, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C7H8::C7H8(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C7H8/C7H8.H b/src/thermophysicalModels/liquids/C7H8/C7H8.H index 1e8e6ac734d19c61f2b87b9ae50f94edbcdfacd4..8d0afcf8cb2cfbc5e0aee953142244cc2fc6237f 100644 --- a/src/thermophysicalModels/liquids/C7H8/C7H8.H +++ b/src/thermophysicalModels/liquids/C7H8/C7H8.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C7H8() - : - liquid(92.141, 591.79, 4.1086e+6, 0.31579, 0.264, 178.18, 4.1009e-2, 383.78, 1.2008e-30, 0.2641, 1.8346e+4), - rho_(81.32088237, 0.27108, 591.79, 0.29889), - pv_(83.359, -6995, -9.1635, 6.225e-06, 2), - hl_(591.79, 544383.065085033, 0.3834, 0, 0, 0), - cp_(2066.83235476064, -8.14664481609707, 0.0322581695445024, -3.01223125427334e-05, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-353094.830249075, 2066.83235476064, -4.07332240804853, 0.0107527231815008, -7.53057813568336e-06, 0), - cpg_(630.989461803106, 3107.19440856947, 1440.6, 2059.88647833212, -650.43), - B_(0.00191120131103418, -2.24970425760519, -482293.441573241, -7.62309938029759e+17, 1.00986531511488e+20), - mu_(-13.362, 1183, 0.333, 0, 0), - mug_(2.919e-08, 0.9648, 0, 0), - K_(0.2043, -0.000239, 0, 0, 0, 0), - Kg_(2.392e-05, 1.2694, 537, 0), - sigma_(591.79, 0.06685, 1.2456, 0, 0, 0), - D_(147.18, 20.1, 92.141, 28) // NN: Same as nHeptane - {} + C7H8(); + + //- Construct from components C7H8 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C7H8(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C7H8(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C7H8& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C7H8I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C7H8/C7H8I.H b/src/thermophysicalModels/liquids/C7H8/C7H8I.H new file mode 100644 index 0000000000000000000000000000000000000000..02813a18f8feb5b33e3e296f22ff7564b2a9b622 --- /dev/null +++ b/src/thermophysicalModels/liquids/C7H8/C7H8I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C7H8::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C7H8::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C8H10/C8H10.C b/src/thermophysicalModels/liquids/C8H10/C8H10.C index 7b0bbede52314acba7f993ac35b9de6f5016b504..09263031d6dea4782142434f506e767a4fc1e5fb 100644 --- a/src/thermophysicalModels/liquids/C8H10/C8H10.C +++ b/src/thermophysicalModels/liquids/C8H10/C8H10.C @@ -27,19 +27,124 @@ License #include "C8H10.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C8H10, 0); + addToRunTimeSelectionTable(liquid, C8H10,); + addToRunTimeSelectionTable(liquid, C8H10, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C8H10::C8H10() +: + liquid + ( + 106.167, + 617.17, + 3.6094e+6, + 0.37381, + 0.263, + 178.15, + 4.038e-3, + 409.35, + 1.9680e-30, + 0.3036, + 1.8043e+4 + ), + rho_(76.3765398, 0.26438, 617.17, 0.2921), + pv_(88.246, -7691.1, -9.797, 5.931e-06, 2.0), + hl_(617.17, 516167.924119547, 0.3882, 0.0, 0.0, 0.0), + cp_ + ( + 818.521762883005, + 6.66873887366131, + -0.0248005500767658, + 4.23860521631015e-05, + 0.0, + 0.0 + ), + h_ + ( + -524002.612929508, + 818.521762883005, + 3.33436943683065, + -0.00826685002558862, + 1.05965130407754e-05, + 0.0 + ), + cpg_(738.835984816374, 3201.5598067196, 1559, 2285.07916772632, -702.0), + B_ + ( + 0.00165776559571242, + -2.77958310962917, + -388067.855359952, + -5.86905535618412e+18, + 1.58052878954854e+21 + ), + mu_(-10.452, 1048.4, -0.0715, 0.0, 0.0), + mug_(1.2e-06, 0.4518, 439.0, 0.0), + K_(0.20149, -0.00023988, 0.0, 0.0, 0.0, 0.0), + Kg_(1.708e-05, 1.319, 565.6, 0.0), + sigma_(617.17, 0.066, 1.268, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 106.167, 28.0) // note: Same as nHeptane +{} + + +Foam::C8H10::C8H10 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C8H10, 0); -addToRunTimeSelectionTable(liquid, C8H10,); -addToRunTimeSelectionTable(liquid, C8H10, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C8H10::C8H10(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C8H10/C8H10.H b/src/thermophysicalModels/liquids/C8H10/C8H10.H index a08832ab7c267da69ef6d3a4480389d59356dcc5..6301c555cc71bf048d5c8fb816904536aaccd0c4 100644 --- a/src/thermophysicalModels/liquids/C8H10/C8H10.H +++ b/src/thermophysicalModels/liquids/C8H10/C8H10.H @@ -86,26 +86,9 @@ public: // Constructors //- Construct null - C8H10() - : - liquid(106.167, 617.17, 3.6094e+6, 0.37381, 0.263, 178.15, 4.038e-3, 409.35, 1.9680e-30, 0.3036, 1.8043e+4), - rho_(76.3765398, 0.26438, 617.17, 0.2921), - pv_(88.246, -7691.1, -9.797, 5.931e-06, 2), - hl_(617.17, 516167.924119547, 0.3882, 0, 0, 0), - cp_(818.521762883005, 6.66873887366131, -0.0248005500767658, 4.23860521631015e-05, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-524002.612929508, 818.521762883005, 3.33436943683065, -0.00826685002558862, 1.05965130407754e-05, 0), - cpg_(738.835984816374, 3201.5598067196, 1559, 2285.07916772632, -702), - B_(0.00165776559571242, -2.77958310962917, -388067.855359952, -5.86905535618412e+18, 1.58052878954854e+21), - mu_(-10.452, 1048.4, -0.0715, 0, 0), - mug_(1.2e-06, 0.4518, 439, 0), - K_(0.20149, -0.00023988, 0, 0, 0, 0), - Kg_(1.708e-05, 1.319, 565.6, 0), - sigma_(617.17, 0.066, 1.268, 0, 0, 0), - D_(147.18, 20.1, 106.167, 28) // NN: Same as nHeptane - {} + C8H10(); + + // Construct from components C8H10 ( const liquid& l, @@ -122,125 +105,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C8H10(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C8H10(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -259,9 +173,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C8H10& l) { l.writeData(os); @@ -276,6 +188,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C8H10I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C8H10/C8H10I.H b/src/thermophysicalModels/liquids/C8H10/C8H10I.H new file mode 100644 index 0000000000000000000000000000000000000000..58ee6c81a94e85971fb006bdd67ab0bea82353a9 --- /dev/null +++ b/src/thermophysicalModels/liquids/C8H10/C8H10I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C8H10::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C8H10::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C8H18/C8H18.C b/src/thermophysicalModels/liquids/C8H18/C8H18.C index dac83519ca9b7611a91f909c30be9d5e85cc9751..ea9c3f3ed5581dca9e0c6788cf00567aaaaeb754 100644 --- a/src/thermophysicalModels/liquids/C8H18/C8H18.C +++ b/src/thermophysicalModels/liquids/C8H18/C8H18.C @@ -27,19 +27,124 @@ License #include "C8H18.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C8H18, 0); + addToRunTimeSelectionTable(liquid, C8H18,); + addToRunTimeSelectionTable(liquid, C8H18, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C8H18::C8H18() +: + liquid + ( + 114.231, + 568.70, + 2.49e+6, + 0.486, + 0.256, + 216.38, + 2.1083, + 398.83, + 0.0, + 0.3996, + 1.54e+4 + ), + rho_(61.37745861, 0.26115, 568.7, 0.28034), + pv_(96.084, -7900.2, -11.003, 7.1802e-06, 2.0), + hl_(568.70, 483056.263186, 0.38467, 0.0, 0.0, 0.0), + cp_ + ( + 1968.20477803749, + -1.63379467920267, + 0.00839448135795012, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2778787.734126, + 1968.20477803749, + -0.816897339601334, + 0.00279816045265004, + 0.0, + 0.0 + ), + cpg_(1186.54305748877, 3878.9820626625, 1635.6, 2673.52995246474, 746.4), + B_ + ( + 0.00239777293379205, + -2.81394717721109, + -585042.589139551, + -1.11265768486663e+18, + 1.40968738783693e+20 + ), + mu_(-20.463, 1497.4, 1.379, 0.0, 0.0), + mug_(3.1191e-08, 0.92925, 55.092, 0.0), + K_(0.2156, -0.00029483, 0.0, 0.0, 0.0, 0.0), + Kg_(-8758, 0.8448, -27121000000.0, 0.0), + sigma_(568.70, 0.052789, 1.2323, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 114.231, 28.0) // note: Same as nHeptane +{} + + +Foam::C8H18::C8H18 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C8H18, 0); -addToRunTimeSelectionTable(liquid, C8H18,); -addToRunTimeSelectionTable(liquid, C8H18, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C8H18::C8H18(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C8H18/C8H18.H b/src/thermophysicalModels/liquids/C8H18/C8H18.H index 4656d86236675fe3459cc96d2e186ed1e1caa821..20f4f5aa111df78e22bf8185f306a120c5a3791c 100644 --- a/src/thermophysicalModels/liquids/C8H18/C8H18.H +++ b/src/thermophysicalModels/liquids/C8H18/C8H18.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C8H18() - : - liquid(114.231, 568.70, 2.49e+6, 0.486, 0.256, 216.38, 2.1083, 398.83, 0.0, 0.3996, 1.54e+4), - rho_(61.37745861, 0.26115, 568.7, 0.28034), - pv_(96.084, -7900.2, -11.003, 7.1802e-06, 2), - hl_(568.70, 483056.263186, 0.38467, 0, 0, 0), - cp_(1968.20477803749, -1.63379467920267, 0.00839448135795012, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2778787.734126, 1968.20477803749, -0.816897339601334, 0.00279816045265004, 0, 0), - cpg_(1186.54305748877, 3878.9820626625, 1635.6, 2673.52995246474, 746.4), - B_(0.00239777293379205, -2.81394717721109, -585042.589139551, -1.11265768486663e+18, 1.40968738783693e+20), - mu_(-20.463, 1497.4, 1.379, 0, 0), - mug_(3.1191e-08, 0.92925, 55.092, 0), - K_(0.2156, -0.00029483, 0, 0, 0, 0), - Kg_(-8758, 0.8448, -27121000000.0, 0), - sigma_(568.70, 0.052789, 1.2323, 0, 0, 0), - D_(147.18, 20.1, 114.231, 28) // NN: Same as nHeptane - {} + C8H18(); + + //- Construct from components C8H18 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C8H18(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C8H18(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; - //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + //- Vapour pressure [Pa]; + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C8H18& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C8H18I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C8H18/C8H18I.H b/src/thermophysicalModels/liquids/C8H18/C8H18I.H new file mode 100644 index 0000000000000000000000000000000000000000..3844155a37b548a5ff54892e01afb253c4da56dc --- /dev/null +++ b/src/thermophysicalModels/liquids/C8H18/C8H18I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C8H18::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C8H18::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C9H20/C9H20.C b/src/thermophysicalModels/liquids/C9H20/C9H20.C index c9e321e46b05834302f42b2a53aa2eb26811e6e1..a2e6309c9917b78089d0397cb76e11519b82d004 100644 --- a/src/thermophysicalModels/liquids/C9H20/C9H20.C +++ b/src/thermophysicalModels/liquids/C9H20/C9H20.C @@ -27,19 +27,124 @@ License #include "C9H20.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(C9H20, 0); + addToRunTimeSelectionTable(liquid, C9H20,); + addToRunTimeSelectionTable(liquid, C9H20, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C9H20::C9H20() +: + liquid + ( + 128.258, + 594.60, + 2.29e+6, + 0.544, + 0.252, + 219.66, + 4.3058e-1, + 423.97, + 0.0, + 0.4435, + 1.56e+4 + ), + rho_(62.06019846, 0.26147, 594.6, 0.28281), + pv_(109.35, -90304.0, -12.882, 7.8544e-06, 2.0), + hl_(594.60, 470691.886665939, 0.38522, 0.0, 0.0, 0.0), + cp_ + ( + 2986.79224687739, + -8.88677509395125, + 0.0211300659607978, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2825628.50868792, + 2986.79224687739, + -4.44338754697563, + 0.00704335532026592, + 0.0, + 0.0 + ), + cpg_(1183.16206396482, 3832.11963386299, 1644.8, 2705.48425829188, 749.6), + B_ + ( + 0.00304542406711472, + -3.65357326638494, + -520825.211682702, + -6.15400208953827e+18, + 1.41901479829718e+21 + ), + mu_(-21.149, 1658, 1.454, 0.0, 0.0), + mug_(1.0344e-07, 0.77301, 220.47, 0.0), + K_(0.209, -0.000264, 0.0, 0.0, 0.0, 0.0), + Kg_(-0.065771, 0.27198, -3482.3, -1580300.0), + sigma_(594.60, 0.054975, 1.2897, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 128.258, 28.0) // note: Same as nHeptane +{} + + +Foam::C9H20::C9H20 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(C9H20, 0); -addToRunTimeSelectionTable(liquid, C9H20,); -addToRunTimeSelectionTable(liquid, C9H20, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::C9H20::C9H20(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C9H20/C9H20.H b/src/thermophysicalModels/liquids/C9H20/C9H20.H index 015bde640fff3f37cbcf9457537eb1c627adb0a6..be28728d4f763f057aadc9722424d2f42c3f2361 100644 --- a/src/thermophysicalModels/liquids/C9H20/C9H20.H +++ b/src/thermophysicalModels/liquids/C9H20/C9H20.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - C9H20() - : - liquid(128.258, 594.60, 2.29e+6, 0.544, 0.252, 219.66, 4.3058e-1, 423.97, 0, 0.4435, 1.56e+4), - rho_(62.06019846, 0.26147, 594.6, 0.28281), - pv_(109.35, -90304, -12.882, 7.8544e-06, 2), - hl_(594.60, 470691.886665939, 0.38522, 0, 0, 0), - cp_(2986.79224687739, -8.88677509395125, 0.0211300659607978, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2825628.50868792, 2986.79224687739, -4.44338754697563, 0.00704335532026592, 0, 0), - cpg_(1183.16206396482, 3832.11963386299, 1644.8, 2705.48425829188, 749.6), - B_(0.00304542406711472, -3.65357326638494, -520825.211682702, -6.15400208953827e+18, 1.41901479829718e+21), - mu_(-21.149, 1658, 1.454, 0, 0), - mug_(1.0344e-07, 0.77301, 220.47, 0), - K_(0.209, -0.000264, 0, 0, 0, 0), - Kg_(-0.065771, 0.27198, -3482.3, -1580300), - sigma_(594.60, 0.054975, 1.2897, 0, 0, 0), - D_(147.18, 20.1, 128.258, 28) // NN: Same as nHeptane - {} + C9H20(); + + //- Construct from components C9H20 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - C9H20(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + C9H20(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const C9H20& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "C9H20I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/C9H20/C9H20I.H b/src/thermophysicalModels/liquids/C9H20/C9H20I.H new file mode 100644 index 0000000000000000000000000000000000000000..d478264307aded97e58186360134438e7ca8859c --- /dev/null +++ b/src/thermophysicalModels/liquids/C9H20/C9H20I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::C9H20::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::C9H20::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/CH3OH/CH3OH.C b/src/thermophysicalModels/liquids/CH3OH/CH3OH.C index 8a562084d7a28be283ebdf75221b42be7cbad59f..64f322b4b1909630ff6ab67b020495c4a5b3f166 100644 --- a/src/thermophysicalModels/liquids/CH3OH/CH3OH.C +++ b/src/thermophysicalModels/liquids/CH3OH/CH3OH.C @@ -27,19 +27,124 @@ License #include "CH3OH.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(CH3OH, 0); + addToRunTimeSelectionTable(liquid, CH3OH,); + addToRunTimeSelectionTable(liquid, CH3OH, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CH3OH::CH3OH() +: + liquid + ( + 32.042, + 512.58, + 8.0959e+6, + 0.1178, + 0.224, + 175.47, + 1.054e-1, + 337.85, + 5.6706e-30, + 0.5656, + 2.9523e+4 + ), + rho_(73.952936, 0.27192, 512.58, 0.2331), + pv_(109.93, -7471.3, -13.988, 0.015281, 1.0), + hl_(512.58, 1644716.30984333, 0.3766, 0.0, 0.0, 0.0), + cp_ + ( + 3358.09250358904, + -11.8781599151114, + 0.0305536483365583, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -8190474.32066862, + 3358.09250358904, + -5.93907995755571, + 0.0101845494455194, + 0.0, + 0.0 + ), + cpg_(1226.9521253355, 2772.92303851195, 1963, 1733.66206853505, 909.6), + B_ + ( + -0.0199737844079645, + 19.3496036452157, + -3342487.98452032, + 2.40808938268523e+19, + -6.85787404032208e+21 + ), + mu_(-7.288, 1065.3, -0.6657, 0.0, 0.0), + mug_(3.0663e-07, 0.69655, 205.0, 0.0), + K_(0.2837, -0.000281, 0.0, 0.0, 0.0, 0.0), + Kg_(-7.763, 1.0279, -74360000.0, 6770000000.0), + sigma_(512.58, 0.056, -0.00014583, 1.08e-07, 0.0, 0.0), + D_(147.18, 20.1, 32.042, 28.0) // note: Same as nHeptane +{} + + +Foam::CH3OH::CH3OH +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(CH3OH, 0); -addToRunTimeSelectionTable(liquid, CH3OH,); -addToRunTimeSelectionTable(liquid, CH3OH, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::CH3OH::CH3OH(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/CH3OH/CH3OH.H b/src/thermophysicalModels/liquids/CH3OH/CH3OH.H index 9fe8d3db96e8a5b25f06be989acffe40559c0211..11deb6a8617afda836335894044d13924e744cb0 100644 --- a/src/thermophysicalModels/liquids/CH3OH/CH3OH.H +++ b/src/thermophysicalModels/liquids/CH3OH/CH3OH.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - CH3OH() - : - liquid(32.042, 512.58, 8.0959e+6, 0.1178, 0.224, 175.47, 1.054e-1, 337.85, 5.6706e-30, 0.5656, 2.9523e+4), - rho_(73.952936, 0.27192, 512.58, 0.2331), - pv_(109.93, -7471.3, -13.988, 0.015281, 1), - hl_(512.58, 1644716.30984333, 0.3766, 0, 0, 0), - cp_(3358.09250358904, -11.8781599151114, 0.0305536483365583, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-8190474.32066862, 3358.09250358904, -5.93907995755571, 0.0101845494455194, 0, 0), - cpg_(1226.9521253355, 2772.92303851195, 1963, 1733.66206853505, 909.6), - B_(-0.0199737844079645, 19.3496036452157, -3342487.98452032, 2.40808938268523e+19, -6.85787404032208e+21), - mu_(-7.288, 1065.3, -0.6657, 0, 0), - mug_(3.0663e-07, 0.69655, 205, 0), - K_(0.2837, -0.000281, 0, 0, 0, 0), - Kg_(-7.763, 1.0279, -74360000.0, 6770000000.0), - sigma_(512.58, 0.056, -0.00014583, 1.08e-07, 0, 0), - D_(147.18, 20.1, 32.042, 28) // NN: Same as nHeptane - {} + CH3OH(); + + //- Construct from components CH3OH ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - CH3OH(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + CH3OH(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const CH3OH& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "CH3OHI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/CH3OH/CH3OHI.H b/src/thermophysicalModels/liquids/CH3OH/CH3OHI.H new file mode 100644 index 0000000000000000000000000000000000000000..28c56dde5481f408930a5a17c743597d82375f18 --- /dev/null +++ b/src/thermophysicalModels/liquids/CH3OH/CH3OHI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::CH3OH::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::CH3OH::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C index 32e601952ffbfc9c2a297c58fd235802cf4a5540..d1b0ac261006c113e0e05ad56b5edb5986ed2ce9 100644 --- a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C +++ b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.C @@ -30,19 +30,108 @@ Description #include "CH4N2O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(CH4N2O, 0); + addToRunTimeSelectionTable(liquid, CH4N2O,); + addToRunTimeSelectionTable(liquid, CH4N2O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CH4N2O::CH4N2O() +: + liquid + ( + 60.056, + 705.0, + 9.050e+6, + 0.218, + 0.337, + 405.85, + 9.3131e+1, + 465.0, + 1.52e-29, + 0.3449, + 4.7813e+4 + ), + rho_(1230.006936, 0.0, 0.0, 0.0, 0.0, 0.0), + pv_(3015.15611544, -185497.059684, -430.223621983, 0.00017405122622, 2.0), + hl_(705.0, 2534249.0, 0.5, 0.0, 0.0, 0.0), + cp_(2006.46063673904, 0.0, 0.0, 0.0, 0.0, 0.0), + h_(-6154107.41641135, 2006.46063673904, 0.0, 0.0, 0.0, 0.0), + cpg_(811.875582789397, 2099.04089516451, 1627.3, 1603.63660583455, 724.41), + B_ + ( + -0.000383641934194752, + 0.447249234048222, + -469062.208605302, + 5.5628080458239e+18, + -2.3040162514986e+21 + ), + mu_(-51.964, 3670.6, 5.7331, -5.3495e-29, 10.0), + mug_(2.6986e-06, 0.498, 1257.7, -19570.0), + K_(-0.4267, 0.0056903, -8.0065e-06, 1.815e-09, 0.0, 0.0), + Kg_(6.977e-05, 1.1243, 844.9, -148850.0), + sigma_(705.0, 1.0, 0.0, 0.0, 0.0, 0.0), // note: set to constant + D_(147.18, 20.1, 60.056, 28.0) // note: Same as nHeptane +{} + + +Foam::CH4N2O::CH4N2O +( + const liquid& l, + const NSRDSfunc0& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(CH4N2O, 0); -addToRunTimeSelectionTable(liquid, CH4N2O,); -addToRunTimeSelectionTable(liquid, CH4N2O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::CH4N2O::CH4N2O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H index 2b5b4f4ae5259d787b165eb4777ddb913bf727f6..bcfbbd62ef4dfa66fd4c4e8c6e40f4f144e0f1fc 100644 --- a/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H +++ b/src/thermophysicalModels/liquids/CH4N2O/CH4N2O.H @@ -26,7 +26,8 @@ Class Foam::CH4N2O Description - urea, note that some of the properties are unavailable in the literature and have been copied from water. + urea, note that some of the properties are unavailable in the literature + and have been copied from water. SourceFiles CH4N2O.C @@ -86,23 +87,9 @@ public: // Constructors //- Construct null - CH4N2O() - : - liquid(60.056, 705.0, 9.050e+6, 0.218, 0.337, 405.85, 9.3131e+1, 465.0, 1.52e-29, 0.3449, 4.7813e+4), - rho_(1230.006936, 0, 0, 0, 0, 0), - pv_(3015.15611544, -185497.059684, -430.223621983, 0.00017405122622, 2.0), - hl_(705.0, 2534249.0, 0.5, 0.0, 0.0, 0.0), - cp_(2006.46063673904, 0, 0, 0, 0, 0), - h_(-6154107.41641135, 2006.46063673904, 0, 0, 0, 0), - cpg_(811.875582789397, 2099.04089516451, 1627.3, 1603.63660583455, 724.41), - B_(-0.000383641934194752, 0.447249234048222, -469062.208605302, 5.5628080458239e+18, -2.3040162514986e+21), - mu_(-51.964, 3670.6, 5.7331, -5.3495e-29, 10), - mug_(2.6986e-06, 0.498, 1257.7, -19570), - K_(-0.4267, 0.0056903, -8.0065e-06, 1.815e-09, 0, 0), - Kg_(6.977e-05, 1.1243, 844.9, -148850), - sigma_(705.0, 1.0, 0.0, 0.0, 0.0, 0), // set to constant - D_(147.18, 20.1, 60.056, 28) // Same as nHeptane - {} + CH4N2O(); + + //- Construct from components CH4N2O ( const liquid& l, @@ -119,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - CH4N2O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + CH4N2O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -256,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const CH4N2O& l) { l.writeData(os); @@ -273,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "CH4N2OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/CH4N2O/CH4N2OI.H b/src/thermophysicalModels/liquids/CH4N2O/CH4N2OI.H new file mode 100644 index 0000000000000000000000000000000000000000..b04233aad1d846ca3b1e0f0827804180a26cc302 --- /dev/null +++ b/src/thermophysicalModels/liquids/CH4N2O/CH4N2OI.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::CH4N2O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::CH4N2O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // + diff --git a/src/thermophysicalModels/liquids/H2O/H2O.C b/src/thermophysicalModels/liquids/H2O/H2O.C index ae3de412f23c0c44505577586fa91b819fb52c2a..590da07405f31b539e88278dbf6ba926405b4544 100644 --- a/src/thermophysicalModels/liquids/H2O/H2O.C +++ b/src/thermophysicalModels/liquids/H2O/H2O.C @@ -27,19 +27,131 @@ License #include "H2O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(H2O, 0); + addToRunTimeSelectionTable(liquid, H2O,); + addToRunTimeSelectionTable(liquid, H2O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::H2O::H2O() +: + liquid + ( + 18.015, + 647.13, + 2.2055e+7, + 0.05595, + 0.229, + 273.16, + 6.113e+2, + 373.15, + 6.1709e-30, + 0.3449, + 4.7813e+4 + ), + rho_(98.343885, 0.30542, 647.13, 0.081), + pv_(73.649, -7258.2, -7.3037, 4.1653e-06, 2), + hl_(647.13, 2889425.47876769, 0.3199, -0.212, 0.25795, 0), + cp_ + ( + 15341.1046350264, + -116.019983347211, + 0.451013044684985, + -0.000783569247849015, + 5.20127671384957e-07, + 0 + ), + h_ + ( + -17957283.7993676, + 15341.1046350264, + -58.0099916736053, + 0.150337681561662, + -0.000195892311962254, + 1.04025534276991e-07 + ), + cpg_ + ( + 1851.73466555648, + 1487.53816264224, + 2609.3, + 493.366638912018, + 1167.6 + ), + B_ + ( + -0.0012789342214821, + 1.4909797391063, + -1563696.91923397, + 1.85445462114904e+19, + -7.68082153760755e+21 + ), + mu_(-51.964, 3670.6, 5.7331, -5.3495e-29, 10), + mug_(2.6986e-06, 0.498, 1257.7, -19570), + K_(-0.4267, 0.0056903, -8.0065e-06, 1.815e-09, 0, 0), + Kg_(6.977e-05, 1.1243, 844.9, -148850), + sigma_(647.13, 0.18548, 2.717, -3.554, 2.047, 0), + D_(15.0, 15.0, 18.015, 28) +{} + + +Foam::H2O::H2O +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(H2O, 0); -addToRunTimeSelectionTable(liquid, H2O,); -addToRunTimeSelectionTable(liquid, H2O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::H2O::H2O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/H2O/H2O.H b/src/thermophysicalModels/liquids/H2O/H2O.H index 698056356151f6d0eedd0db6a0ef918c36dc017a..92287b22161b8c587f8e3735f5b07bc82e18dbd9 100644 --- a/src/thermophysicalModels/liquids/H2O/H2O.H +++ b/src/thermophysicalModels/liquids/H2O/H2O.H @@ -86,26 +86,9 @@ public: // Constructors //- Construct null - H2O() - : - liquid(18.015, 647.13, 2.2055e+7, 0.05595, 0.229, 273.16, 6.113e+2, 373.15, 6.1709e-30, 0.3449, 4.7813e+4), - rho_(98.343885, 0.30542, 647.13, 0.081), - pv_(73.649, -7258.2, -7.3037, 4.1653e-06, 2), - hl_(647.13, 2889425.47876769, 0.3199, -0.212, 0.25795, 0), - cp_(15341.1046350264, -116.019983347211, 0.451013044684985, -0.000783569247849015, 5.20127671384957e-07, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-17957283.7993676, 15341.1046350264, -58.0099916736053, 0.150337681561662, -0.000195892311962254, 1.04025534276991e-07), - cpg_(1851.73466555648, 1487.53816264224, 2609.3, 493.366638912018, 1167.6), - B_(-0.0012789342214821, 1.4909797391063, -1563696.91923397, 1.85445462114904e+19, -7.68082153760755e+21), - mu_(-51.964, 3670.6, 5.7331, -5.3495e-29, 10), - mug_(2.6986e-06, 0.498, 1257.7, -19570), - K_(-0.4267, 0.0056903, -8.0065e-06, 1.815e-09, 0, 0), - Kg_(6.977e-05, 1.1243, 844.9, -148850), - sigma_(647.13, 0.18548, 2.717, -3.554, 2.047, 0), - D_(147.18, 20.1, 18.015, 28) // NN: Same as nHeptane - {} + H2O(); + + //- Construct from components H2O ( const liquid& l, @@ -122,124 +105,55 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - H2O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + H2O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + + // I-O //- Write the function coefficients void writeData(Ostream& os) const @@ -260,8 +174,7 @@ public: } - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const H2O& l) { l.writeData(os); @@ -276,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "H2OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/H2O/H2OI.H b/src/thermophysicalModels/liquids/H2O/H2OI.H new file mode 100644 index 0000000000000000000000000000000000000000..bc5c4bff5ab8268e39ff7761c9f2d8931356a911 --- /dev/null +++ b/src/thermophysicalModels/liquids/H2O/H2OI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::H2O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::H2O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/IC8H18/IC8H18.C b/src/thermophysicalModels/liquids/IC8H18/IC8H18.C index 713bada8d0c16205cc3610bff8ab9041592dff6c..483e6c24660a5ef2320620fb2d71691f0150ac1d 100644 --- a/src/thermophysicalModels/liquids/IC8H18/IC8H18.C +++ b/src/thermophysicalModels/liquids/IC8H18/IC8H18.C @@ -27,19 +27,124 @@ License #include "IC8H18.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(IC8H18, 0); + addToRunTimeSelectionTable(liquid, IC8H18,); + addToRunTimeSelectionTable(liquid, IC8H18, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::IC8H18::IC8H18() +: + liquid + ( + 114.231, + 543.96, + 2.5676e+6, + 0.468, + 0.266, + 165.78, + 1.4464e-2, + 372.39, + 0.0, + 0.3031, + 1.4051e+4 + ), + rho_(67.2363666, 0.27373, 543.96, 0.2846), + pv_(120.81, -7550, -16.111, 0.017099, 1.0), + hl_(543.96, 375379.713037617, 0.1549, 0.138, 0.0666, 0.0), + cp_ + ( + 1219.89652546156, + 1.67205049417409, + 0.00414073237562483, + 0.0, + 0.0, + 0.0 + ), + h_ + ( + -2743275.10767575, + 1219.89652546156, + 0.836025247087043, + 0.00138024412520828, + 0.0, + 0.0 + ), + cpg_(997.10236275617, 4627.4653990598, 1594, 2933.52942721328, 677.94), + B_ + ( + 0.00234936225718063, + -2.83381919093766, + -413154.047500241, + -3.49703670632315e+17, + 3.13750207912038e+19 + ), + mu_(-15.811, 1282.5, 0.67791, -3.8617e-28, 10.0), + mug_(1.107e-07, 0.746, 72.4, 0.0), + K_(0.1508, -0.0001712, 0.0, 0.0, 0.0, 0.0), + Kg_(1.758e-05, 1.3114, 392.9, 0.0), + sigma_(543.96, 0.047434, 1.1975, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 114.231, 28.0) // note: Same as nHeptane +{} + + +Foam::IC8H18::IC8H18 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(IC8H18, 0); -addToRunTimeSelectionTable(liquid, IC8H18,); -addToRunTimeSelectionTable(liquid, IC8H18, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::IC8H18::IC8H18(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/IC8H18/IC8H18.H b/src/thermophysicalModels/liquids/IC8H18/IC8H18.H index 742f1c4c5ffa2c3b44630bce45afa2f2c3d1939d..48de18edbed52466ba8874fb8b42f69d972c71dd 100644 --- a/src/thermophysicalModels/liquids/IC8H18/IC8H18.H +++ b/src/thermophysicalModels/liquids/IC8H18/IC8H18.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - IC8H18() - : - liquid(114.231, 543.96, 2.5676e+6, 0.468, 0.266, 165.78, 1.4464e-2, 372.39, 0.0, 0.3031, 1.4051e+4), - rho_(67.2363666, 0.27373, 543.96, 0.2846), - pv_(120.81, -7550, -16.111, 0.017099, 1), - hl_(543.96, 375379.713037617, 0.1549, 0.138, 0.0666, 0), - cp_(1219.89652546156, 1.67205049417409, 0.00414073237562483, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-2743275.10767575, 1219.89652546156, 0.836025247087043, 0.00138024412520828, 0, 0), - cpg_(997.10236275617, 4627.4653990598, 1594, 2933.52942721328, 677.94), - B_(0.00234936225718063, -2.83381919093766, -413154.047500241, -3.49703670632315e+17, 3.13750207912038e+19), - mu_(-15.811, 1282.5, 0.67791, -3.8617e-28, 10), - mug_(1.107e-07, 0.746, 72.4, 0), - K_(0.1508, -0.0001712, 0, 0, 0, 0), - Kg_(1.758e-05, 1.3114, 392.9, 0), - sigma_(543.96, 0.047434, 1.1975, 0, 0, 0), - D_(147.18, 20.1, 114.231, 28) // NN: Same as nHeptane - {} + IC8H18(); + + //- Construct from components IC8H18 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - IC8H18(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + IC8H18(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; - //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + //- Liquid thermal conductivity [W/(m K)] + inline scalar K(scalar p, scalar T) const; - //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + //- Vapour thermal conductivity [W/(m K)] + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const IC8H18& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "IC8H18I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/IC8H18/IC8H18I.H b/src/thermophysicalModels/liquids/IC8H18/IC8H18I.H new file mode 100644 index 0000000000000000000000000000000000000000..ac53685cb8dbda889d444828a048422b6adadfa2 --- /dev/null +++ b/src/thermophysicalModels/liquids/IC8H18/IC8H18I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::IC8H18::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::IC8H18::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/IDEA/IDEA.C b/src/thermophysicalModels/liquids/IDEA/IDEA.C index cd2560c2dc4b1443d4b390b400e0f4bae34f679d..f58a625ec5533724899bd6463376b9305cce8124 100644 --- a/src/thermophysicalModels/liquids/IDEA/IDEA.C +++ b/src/thermophysicalModels/liquids/IDEA/IDEA.C @@ -27,19 +27,144 @@ License #include "IDEA.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(IDEA, 0); + addToRunTimeSelectionTable(liquid, IDEA,); + addToRunTimeSelectionTable(liquid, IDEA, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::IDEA::IDEA() +: + liquid + ( + 142.26, + 618.074, + 2.11e+6, + 0.523, + 0.247, + 242.67, + 3.4929e-2, + 447.3, + 1.7012e-30, + 0.3478, + 1.57e+4 + ), + rho_(152.012105, 3.87150382e-1, 618.073893, 4.00790044e-1), + pv_ + ( + 8.4817774623e+01, + -8.6782398353e+03, + -9.1277694857, + 4.6153144498e-06, + 2.0 + ), + hl_ + ( + 618.074, + 2.1671983789e+05, + -4.2413153435e+00, + 1.1656811532e+01, + -1.1656446689e+01, + 4.3667661492 + ), + cp_(1.6604957e+3, -6.250871e-1, 6.1778552e-3, 0.0, 0.0, 0.0), + h_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0), + cpg_ + ( + 1.0457515243e+03, + 3.4410492875e+03, + 1.5976862298e+03, + 2.4697705752e+03, + 7.3699710536e+02 + ), + B_ + ( + 0.00337351091119935, + -4.13606494008504, + -534560.916470464, + -1.13364022911762e+19, + 2.80704220402713e+21 + ), + mu_(-6.9645853822e+01, 4.4390635942e+03, 8.4680722718e+00, 0.0, 0.0), + mug_(4.2629382158e-08, 8.8144402122e-01, 9.6918097636e+01, 0.0), + K_(2.03684e-01, -2.3168e-04, 0.0, 0.0, 0.0, 0.0), + Kg_ + ( + -5.664925956707e+02, + 8.896721676320e-01, + -2.849783998688e+09, + 6.914935658053e+05 + ), + sigma_ + ( + 618.074, + 8.3846525429e-03, + -1.0044759047e+01, + 2.7261918781e+01, + -2.5529134309e+01, + 8.6488806234 + ), + D_(147.18, 20.1, 142.2, 28.0) // note: Same as nHeptane +{} + + +Foam::IDEA::IDEA +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(IDEA, 0); -addToRunTimeSelectionTable(liquid, IDEA,); -addToRunTimeSelectionTable(liquid, IDEA, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::IDEA::IDEA(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/IDEA/IDEA.H b/src/thermophysicalModels/liquids/IDEA/IDEA.H index a623416f8e78ac0ba86b845ed345c5da90c665c5..a51aa86cbf2123bbbaeb91b71da63d11c23803a0 100644 --- a/src/thermophysicalModels/liquids/IDEA/IDEA.H +++ b/src/thermophysicalModels/liquids/IDEA/IDEA.H @@ -109,26 +109,9 @@ public: // Constructors //- Construct null - IDEA() - : - liquid(142.26, 618.074, 2.11e+6, 0.523, 0.247, 242.67, 3.4929e-2, 447.3, 1.7012e-30, 0.3478, 1.57e+4), - rho_(152.012105, 3.87150382e-1, 618.073893, 4.00790044e-1), - pv_(8.4817774623e+01, -8.6782398353e+03, -9.1277694857, 4.6153144498e-06, 2.0), - hl_(618.074,2.1671983789e+05, -4.2413153435e+00, 1.1656811532e+01, -1.1656446689e+01, 4.3667661492), - cp_(1.6604957e+3, -6.250871e-1, 6.1778552e-3, 0.0, 0.0, 0.0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // For this fuel I've put it to zero because I was lazy at the time... - h_(0.0, 0.0, 0.0, 0.0, 0.0, 0.0), - cpg_(1.0457515243e+03, 3.4410492875e+03, 1.5976862298e+03, 2.4697705752e+03, 7.3699710536e+02), - B_(0.00337351091119935, -4.13606494008504, -534560.916470464, -1.13364022911762e+19, 2.80704220402713e+21), - mu_(-6.9645853822e+01, 4.4390635942e+03, 8.4680722718e+00, 0.0, 0.0), - mug_(4.2629382158e-08, 8.8144402122e-01, 9.6918097636e+01, 0.0), - K_(2.03684e-01, -2.3168e-04, 0.0, 0.0, 0.0, 0.0), - Kg_(-5.664925956707e+02, 8.896721676320e-01, -2.849783998688e+09, 6.914935658053e+05), - sigma_(618.074, 8.3846525429e-03, -1.0044759047e+01, 2.7261918781e+01, -2.5529134309e+01, 8.6488806234), - D_(147.18, 20.1, 142.2, 28) // NN: Same as nHeptane - {} + IDEA(); + + // Construct from components IDEA ( const liquid& l, @@ -145,125 +128,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - IDEA(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + IDEA(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -281,9 +195,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const IDEA& l) { l.writeData(os); @@ -298,6 +210,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "IDEAI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/IDEA/IDEAI.H b/src/thermophysicalModels/liquids/IDEA/IDEAI.H new file mode 100644 index 0000000000000000000000000000000000000000..865d7babfe422c5be25b20c27cae0a99904709e2 --- /dev/null +++ b/src/thermophysicalModels/liquids/IDEA/IDEAI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::IDEA::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::IDEA::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/MB/MB.C b/src/thermophysicalModels/liquids/MB/MB.C index 0328ef010391ba91da8c3f555b8a9bdeb54a7827..b5df86262c20a750b32d639a227cf678b2346571 100644 --- a/src/thermophysicalModels/liquids/MB/MB.C +++ b/src/thermophysicalModels/liquids/MB/MB.C @@ -27,19 +27,108 @@ License #include "MB.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(MB, 0); + addToRunTimeSelectionTable(liquid, MB,); + addToRunTimeSelectionTable(liquid, MB, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::MB::MB() +: + liquid + ( + 102.133, + 554.5, + 3.4734e+6, + 0.34, + 0.256, + 187.35, + 1.0102e-1, + 375.90, + 5.7373e-30, + 0.3807, + 1.7713e+4 + ), + rho_(76.6099633, 0.257, 554.5, 0.2772), + pv_(107.51, -8112.9, -12.77, 9.2919e-06, 2.0), + hl_(554.5, 508307.794738233, 0.392, 0.0, 0.0, 0.0), + cp_(1135.77394182096, 2.89818178257762, 0.0, 0.0, 0.0, 0.0), + h_(-5255966.14542938, 1135.77394182096, 1.44909089128881, 0.0, 0.0, 0.0), + cpg_(875.329227575808, 2849.22600922327, 1570.0, 2029.70636327142, 678.3), + B_ + ( + 0.00220496803188, + -2.42184210783978, + -401045.695318849, + -2.85079259397061e+17, + -3.57377145486767e+19 + ), + mu_(-12.206, 1141.7, 0.15014, 0.0, 0.0), + mug_(3.733e-07, 0.6177, 256.5, 0.0), + K_(0.2298, -0.0003002, 0.0, 0.0, 0.0, 0.0), + Kg_(1333.1, 0.9962, 12317000000.0, 0.0), + sigma_(554.5, 0.064084, 1.2418, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 102.133, 28.0) // note: Same as nHeptane +{} + + +Foam::MB::MB +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(MB, 0); -addToRunTimeSelectionTable(liquid, MB,); -addToRunTimeSelectionTable(liquid, MB, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::MB::MB(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/MB/MB.H b/src/thermophysicalModels/liquids/MB/MB.H index 4fb918ea02ab9421c27e86e6622fd22e8bd211cc..e9e4703e3d5d362bcc8ec7eba78e1b6a342807e9 100644 --- a/src/thermophysicalModels/liquids/MB/MB.H +++ b/src/thermophysicalModels/liquids/MB/MB.H @@ -31,8 +31,7 @@ Description SourceFiles MB.C -*/ -// ------------------------------------------------------------------------- // +\*---------------------------------------------------------------------------*/ #ifndef MB_H #define MB_H @@ -88,26 +87,9 @@ public: // Constructors //- Construct null - MB() - : - liquid(102.133, 554.5, 3.4734e+6, 0.34, 0.256, 187.35, 1.0102e-1, 375.90, 5.7373e-30, 0.3807, 1.7713e+4), - rho_(76.6099633, 0.257, 554.5, 0.2772), - pv_(107.51, -8112.9, -12.77, 9.2919e-06, 2), - hl_(554.5, 508307.794738233, 0.392, 0, 0, 0), - cp_(1135.77394182096, 2.89818178257762, 0, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-5255966.14542938, 1135.77394182096, 1.44909089128881, 0, 0, 0), - cpg_(875.329227575808, 2849.22600922327, 1570, 2029.70636327142, 678.3), - B_(0.00220496803188, -2.42184210783978, -401045.695318849, -2.85079259397061e+17, -3.57377145486767e+19), - mu_(-12.206, 1141.7, 0.15014, 0, 0), - mug_(3.733e-07, 0.6177, 256.5, 0), - K_(0.2298, -0.0003002, 0, 0, 0, 0), - Kg_(1333.1, 0.9962, 12317000000.0, 0), - sigma_(554.5, 0.064084, 1.2418, 0, 0, 0), - D_(147.18, 20.1, 102.133, 28) // NN: Same as nHeptane - {} + MB(); + + //- Construct from components MB ( const liquid& l, @@ -124,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - MB(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + MB(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -261,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const MB& l) { l.writeData(os); @@ -278,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "MBI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/MB/MBI.H b/src/thermophysicalModels/liquids/MB/MBI.H new file mode 100644 index 0000000000000000000000000000000000000000..058d2c9f26b9d737d34af97b7c031b371b8fbb82 --- /dev/null +++ b/src/thermophysicalModels/liquids/MB/MBI.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::MB::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::MB::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::MB::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::MB::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::MB::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::MB::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::MB::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::MB::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::MB::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::MB::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::MB::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::MB::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::MB::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/N2/N2.C b/src/thermophysicalModels/liquids/N2/N2.C index 3a2c2a1e4ea433d3e46221c7d55ef248799ea517..f3458d825ebe96f3d4ca310c17fc0c6a38fa5931 100644 --- a/src/thermophysicalModels/liquids/N2/N2.C +++ b/src/thermophysicalModels/liquids/N2/N2.C @@ -27,19 +27,124 @@ License #include "N2.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(N2, 0); + addToRunTimeSelectionTable(liquid, N2,); + addToRunTimeSelectionTable(liquid, N2, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::N2::N2() +: + liquid + ( + 28.014, + 126.10, + 3.3944e+6, + 0.0901, + 0.292, + 63.15, + 1.2517e+4, + 77.35, + 0.0, + 0.0403, + 9.0819e+3 + ), + rho_(88.8716136, 0.28479, 126.1, 0.2925), + pv_(59.826, -1097.6, -8.6689, 0.046346, 1.0), + hl_(126.10, 336617.405582923, 1.201, -1.4811, 0.7085, 0.0), + cp_ + ( + -1192.26101235097, + 125.187406296852, + -1.66702363104162, + 0.00759263225530092, + 0.0, + 0.0 + ), + h_ + ( + -5480656.55276541, + -1192.26101235097, + 62.5937031484258, + -0.555674543680541, + 0.00189815806382523, + 0.0 + ), + cpg_(1038.94481330763, 307.52123938031, 1701.6, 3.69351038766331, 909.79), + B_ + ( + 0.00166702363104162, + -0.533661740558292, + -2182.12322410223, + 2873563218390.8, + -165274505604341.0 + ), + mu_(32.165, 496.9, 3.9069, -1.08e-21, 10.0), + mug_(7.632e-07, 0.58823, 67.75, 0.0), + K_(0.7259, -0.016728, 0.00016215, -5.7605e-07, 0.0, 0.0), + Kg_(0.000351, 0.7652, 25.767, 0.0), + sigma_(126.10, 0.02898, 1.2457, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 28.014, 28.0) // note: Same as nHeptane +{} + + +Foam::N2::N2 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(N2, 0); -addToRunTimeSelectionTable(liquid, N2,); -addToRunTimeSelectionTable(liquid, N2, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::N2::N2(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/N2/N2.H b/src/thermophysicalModels/liquids/N2/N2.H index 972b97dd545e864eb8a7f1cb554f9e448abb34ea..3595320ce87def7da1aab0f8d5c0587ec49f7ce4 100644 --- a/src/thermophysicalModels/liquids/N2/N2.H +++ b/src/thermophysicalModels/liquids/N2/N2.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - N2() - : - liquid(28.014, 126.10, 3.3944e+6, 0.0901, 0.292, 63.15, 1.2517e+4, 77.35, 0.0, 0.0403, 9.0819e+3), - rho_(88.8716136, 0.28479, 126.1, 0.2925), - pv_(59.826, -1097.6, -8.6689, 0.046346, 1), - hl_(126.10, 336617.405582923, 1.201, -1.4811, 0.7085, 0), - cp_(-1192.26101235097, 125.187406296852, -1.66702363104162, 0.00759263225530092, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-5480656.55276541, -1192.26101235097, 62.5937031484258, -0.555674543680541, 0.00189815806382523, 0), - cpg_(1038.94481330763, 307.52123938031, 1701.6, 3.69351038766331, 909.79), - B_(0.00166702363104162, -0.533661740558292, -2182.12322410223, 2873563218390.8, -165274505604341.0), - mu_(32.165, 496.9, 3.9069, -1.08e-21, 10), - mug_(7.632e-07, 0.58823, 67.75, 0), - K_(0.7259, -0.016728, 0.00016215, -5.7605e-07, 0, 0), - Kg_(0.000351, 0.7652, 25.767, 0), - sigma_(126.10, 0.02898, 1.2457, 0, 0, 0), - D_(147.18, 20.1, 28.014, 28) // NN: Same as nHeptane - {} + N2(); + + //- Construct from components N2 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - N2(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + N2(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; - //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + //- Liquid thermal conductivity [W/(m K)] + inline scalar K(scalar p, scalar T) const; - //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + //- Vapour thermal conductivity [W/(m K)] + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const N2& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "N2I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/N2/N2I.H b/src/thermophysicalModels/liquids/N2/N2I.H new file mode 100644 index 0000000000000000000000000000000000000000..757f99d29395d48ee9407d33555b907ba3633b79 --- /dev/null +++ b/src/thermophysicalModels/liquids/N2/N2I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::N2::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::N2::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::N2::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::N2::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::N2::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::N2::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::N2::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::N2::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::N2::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::N2::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::N2::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::N2::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::N2::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C index 45364056f1b7a2c40fcbcba71b1203fe88adc060..4edbe582a25d455cf0112ba9c47275dec87a03fa 100644 --- a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C +++ b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.C @@ -27,19 +27,116 @@ License #include "aC10H7CH3.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(aC10H7CH3, 0); + addToRunTimeSelectionTable(liquid, aC10H7CH3,); + addToRunTimeSelectionTable(liquid, aC10H7CH3, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::aC10H7CH3::aC10H7CH3() +: + liquid + ( + 142.2, + 772.04, + 3.66e+6, + 0.523, + 0.298, + 242.67, + 3.4929e-2, + 517.83, + 1.7012e-30, + 0.3478, + 2.0176e+4 + ), + rho_(60.92559, 0.22408, 772.04, 0.25709), + pv_(73.716, -9103.2, -7.2253, 2.062e-06, 2), + hl_(772.04, 511744.022503516, 0.4164, 0, 0, 0), + cp_(965.893108298172, 1.16216596343179, 0.00298523206751055, 0, 0, 0), + h_ + ( + 38161.6838138517, + 965.893108298172, + 0.581082981715893, + 0.00099507735583685, + 0, + 0 + ), + cpg_(743.389592123769, 2703.5864978903, 1548.5, 2031.64556962025, 722.06), + B_ + ( + 0.00205555555555556, + -3.34423347398031, + -931153.305203938, + 1.87601969057665e+18, + -2.06448663853727e+21 + ), + mu_(-93.6, 5784, 12, 0, 0), + mug_(2.5672e-06, 0.3566, 825.54, 0), + K_(0.19758, -0.0001796, 0, 0, 0, 0), + Kg_(0.3911, -0.1051, -213.52, 2318300), + sigma_(772.04, 0.076, 1.33, 0, 0, 0), + D_(147.18, 20.1, 142.2, 28) // note: Same as nHeptane +{} + + +Foam::aC10H7CH3::aC10H7CH3 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(aC10H7CH3, 0); -addToRunTimeSelectionTable(liquid, aC10H7CH3,); -addToRunTimeSelectionTable(liquid, aC10H7CH3, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::aC10H7CH3::aC10H7CH3(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H index 97eb8051ba21da7ba4f0a44c43036d7f3aa1d476..7489d6a0e4da24a569b81adf7d0ad6f10e097897 100644 --- a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H +++ b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3.H @@ -54,7 +54,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class aC10H7CH3 Declaration + Class aC10H7CH3 Declaration \*---------------------------------------------------------------------------*/ class aC10H7CH3 @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - aC10H7CH3() - : - liquid(142.2, 772.04, 3.66e+6, 0.523, 0.298, 242.67, 3.4929e-2, 517.83, 1.7012e-30, 0.3478, 2.0176e+4), - rho_(60.92559, 0.22408, 772.04, 0.25709), - pv_(73.716, -9103.2, -7.2253, 2.062e-06, 2), - hl_(772.04, 511744.022503516, 0.4164, 0, 0, 0), - cp_(965.893108298172, 1.16216596343179, 0.00298523206751055, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(38161.6838138517, 965.893108298172, 0.581082981715893, 0.00099507735583685, 0, 0), - cpg_(743.389592123769, 2703.5864978903, 1548.5, 2031.64556962025, 722.06), - B_(0.00205555555555556, -3.34423347398031, -931153.305203938, 1.87601969057665e+18, -2.06448663853727e+21), - mu_(-93.6, 5784, 12, 0, 0), - mug_(2.5672e-06, 0.3566, 825.54, 0), - K_(0.19758, -0.0001796, 0, 0, 0, 0), - Kg_(0.3911, -0.1051, -213.52, 2318300), - sigma_(772.04, 0.076, 1.33, 0, 0, 0), - D_(147.18, 20.1, 142.2, 28) // NN: Same as nHeptane - {} + aC10H7CH3(); + + //- Constrcut from components aC10H7CH3 ( const liquid& l, @@ -123,124 +106,55 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - aC10H7CH3(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + aC10H7CH3(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + + // I-O //- Write the function coefficients void writeData(Ostream& os) const @@ -261,8 +175,7 @@ public: } - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const aC10H7CH3& l) { l.writeData(os); @@ -277,6 +190,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "aC10H7CH3I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3I.H b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3I.H new file mode 100644 index 0000000000000000000000000000000000000000..4cf642cc0be9d1e8e39607a66d0055d295615bae --- /dev/null +++ b/src/thermophysicalModels/liquids/aC10H7CH3/aC10H7CH3I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::aC10H7CH3::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::aC10H7CH3::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C index a24626852dec8814b82f314e046500810a5b089b..545176895d89112d0e0d49a248e1091c964338e4 100644 --- a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C +++ b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.C @@ -27,19 +27,116 @@ License #include "bC10H7CH3.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(bC10H7CH3, 0); + addToRunTimeSelectionTable(liquid, bC10H7CH3,); + addToRunTimeSelectionTable(liquid, bC10H7CH3, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::bC10H7CH3::bC10H7CH3() +: + liquid + ( + 142.2, + 761.0, + 3.25e+6, + 0.507, + 0.260, + 307.73, + 1.7374e+1, + 514.20, + 1.4010e-30, + 0.3459, + 1.987e+4 + ), + rho_(67.36014, 0.23843, 761, 0.2559), + pv_(134.31, -12103, -16.195, 6.9659e-06, 2), + hl_(761.0, 513150.492264416, 0.4044, 0.0, 0.0, 0.0), + cp_(811.322081575246, 2.30225035161744, 0.0008628691983122, 0.0, 0.0, 0.0), + h_ + ( + 45001.2311880177, + 811.322081575246, + 1.15112517580872, + 0.000287623066104079, + 0.0, + 0.0 + ), + cpg_(760.126582278481, 2699.08579465542, 1564.1, 1994.51476793249, 727.49), + B_ + ( + 0.00229430379746835, + -3.53720112517581, + -1067158.93108298, + 2.29746835443038e+18, + -2.68438818565401e+21 + ), + mu_(-63.276, 4219, 7.5549, 0.0, 0.0), + mug_(2.1791e-06, 0.3717, 712.53, 0.0), + K_(0.1962, -0.00018414, 0.0, 0.0, 0.0, 0.0), + Kg_(0.4477, -0.1282, -345.89, 2340100), + sigma_(761.0, 0.066442, 1.2634, 0.0, 0.0, 0.0), + D_(147.18, 20.1, 142.2, 28) // note: Same as nHeptane +{} + + +Foam::bC10H7CH3::bC10H7CH3 +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc6& surfaceTension, + const APIdiffCoefFunc& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(bC10H7CH3, 0); -addToRunTimeSelectionTable(liquid, bC10H7CH3,); -addToRunTimeSelectionTable(liquid, bC10H7CH3, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::bC10H7CH3::bC10H7CH3(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H index 4fffdd559c784fef183ca966e2958a043e68c318..add7fa7e934136e2587b89c2a80173bba0b3bbf2 100644 --- a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H +++ b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3.H @@ -87,26 +87,9 @@ public: // Constructors //- Construct null - bC10H7CH3() - : - liquid(142.2, 761.0, 3.25e+6, 0.507, 0.260, 307.73, 1.7374e+1, 514.20, 1.4010e-30, 0.3459, 1.987e+4), - rho_(67.36014, 0.23843, 761, 0.2559), - pv_(134.31, -12103, -16.195, 6.9659e-06, 2), - hl_(761.0, 513150.492264416, 0.4044, 0, 0, 0), - cp_(811.322081575246, 2.30225035161744, 0.000862869198312236, 0, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(45001.2311880177, 811.322081575246, 1.15112517580872, 0.000287623066104079, 0, 0), - cpg_(760.126582278481, 2699.08579465542, 1564.1, 1994.51476793249, 727.49), - B_(0.00229430379746835, -3.53720112517581, -1067158.93108298, 2.29746835443038e+18, -2.68438818565401e+21), - mu_(-63.276, 4219, 7.5549, 0, 0), - mug_(2.1791e-06, 0.3717, 712.53, 0), - K_(0.1962, -0.00018414, 0, 0, 0, 0), - Kg_(0.4477, -0.1282, -345.89, 2340100), - sigma_(761.0, 0.066442, 1.2634, 0, 0, 0), - D_(147.18, 20.1, 142.2, 28) // NN: Same as nHeptane - {} + bC10H7CH3(); + + //- Construct from components bC10H7CH3 ( const liquid& l, @@ -123,125 +106,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc6& surfaceTension, const APIdiffCoefFunc& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - bC10H7CH3(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + bC10H7CH3(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; - //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + //- Liquid thermal conductivity [W/(m K)] + inline scalar K(scalar p, scalar T) const; - //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + //- Vapour thermal conductivity [W/(m K)] + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -260,9 +174,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const bC10H7CH3& l) { l.writeData(os); @@ -277,6 +189,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "bC10H7CH3I.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3I.H b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3I.H new file mode 100644 index 0000000000000000000000000000000000000000..1be40b2f2d61f3b6c0bd0c32fb8d1e056174e36d --- /dev/null +++ b/src/thermophysicalModels/liquids/bC10H7CH3/bC10H7CH3I.H @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::bC10H7CH3::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::bC10H7CH3::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C index 0cc62cedb91d645aaf0feaeecaa4b0ce1a06026f..f3985234601a2e733a45cacba016299ffd5b0efd 100644 --- a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C +++ b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.C @@ -24,25 +24,129 @@ License Description -------------------------------------------------------------------------------- -*/ +\*---------------------------------------------------------------------------*/ #include "iC3H8O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(iC3H8O, 0); + addToRunTimeSelectionTable(liquid, iC3H8O,); + addToRunTimeSelectionTable(liquid, iC3H8O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::iC3H8O::iC3H8O() +: + liquid + ( + 60.096, + 508.31, + 4.7643e+6, + 0.22013, + 0.248, + 185.28, + 3.20e-2, + 355.41, + 5.5372e-30, + 0.6689, + 2.3575e+4 + ), + rho_(70.91328, 0.26475, 508.31, 0.243), + pv_(92.935, -8177.1, -10.031, 3.9988e-06, 2.0), + hl_(508.31, 948149.627263046, 0.087, 0.3007, 0.0, 0.0), + cp_ + ( + 7760.91586794462, + -68.3672790202343, + 0.241380457933972, + -0.000235057241746539, + 0.0, + 0.0 + ), + h_ + ( + -6227786.27583977, + 7760.91586794462, + -34.1836395101172, + 0.0804601526446574, + -5.87643104366347e-05, + 0.0 + ), + cpg_(789.73642172524, 3219.8482428115, 1124, 1560.83599574015, 460.0), + B_ + ( + 0.000502529286474973, + -0.104665867944622, + -717185.83599574, + 3.3047124600639e+18, + -1.43270766773163e+21 + ), + mu_(-8.23, 2282.2, -0.98495, 0.0, 0.0), + mug_(1.993e-07, 0.7233, 178.0, 0.0), + K_(0.2029, -0.0002278, 0.0, 0.0, 0.0, 0.0), + Kg_(-80.642, -1.4549, -604.42, 0.0), + sigma_(0.03818, -3.818e-05, -6.51e-08, 0.0, 0.0, 0.0), + D_(4.75e-10, 1.75, 0.0, 0.0, 0.0) +{} + + +Foam::iC3H8O::iC3H8O +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc0& surfaceTension, + const NSRDSfunc1& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(iC3H8O, 0); -addToRunTimeSelectionTable(liquid, iC3H8O,); -addToRunTimeSelectionTable(liquid, iC3H8O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::iC3H8O::iC3H8O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H index ffa2acb32e301048288fbefe2b01aa89a78a9a6f..d6f59b9568aa9b2ce300d1327f03800a9c7be779 100644 --- a/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H +++ b/src/thermophysicalModels/liquids/iC3H8O/iC3H8O.H @@ -85,26 +85,9 @@ public: // Constructors //- Construct null - iC3H8O() - : - liquid(60.096, 508.31, 4.7643e+6, 0.22013, 0.248, 185.28, 3.20e-2, 355.41, 5.5372e-30, 0.6689, 2.3575e+4), - rho_(70.91328, 0.26475, 508.31, 0.243), - pv_(92.935, -8177.1, -10.031, 3.9988e-06, 2), - hl_(508.31, 948149.627263046, 0.087, 0.3007, 0, 0), - cp_(7760.91586794462, -68.3672790202343, 0.241380457933972, -0.000235057241746539, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-6227786.27583977, 7760.91586794462, -34.1836395101172, 0.0804601526446574, -5.87643104366347e-05, 0), - cpg_(789.73642172524, 3219.8482428115, 1124, 1560.83599574015, 460), - B_(0.000502529286474973, -0.104665867944622, -717185.83599574, 3.3047124600639e+18, -1.43270766773163e+21), - mu_(-8.23, 2282.2, -0.98495, 0, 0), - mug_(1.993e-07, 0.7233, 178, 0), - K_(0.2029, -0.0002278, 0, 0, 0, 0), - Kg_(-80.642, -1.4549, -604.42, 0), - sigma_(0.03818, -3.818e-05, -6.51e-08, 0, 0, 0), - D_(4.75e-10, 1.75, 0.0, 0.0, 0.0) // NN. same as iC3H8O - {} + iC3H8O(); + + //- Constrcut from components iC3H8O ( const liquid& l, @@ -121,125 +104,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc0& surfaceTension, const NSRDSfunc1& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - iC3H8O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + iC3H8O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + inline scalar K(scalar p, scalar T) const; //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -258,9 +172,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const iC3H8O& l) { l.writeData(os); @@ -275,6 +187,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "iC3H8OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/iC3H8O/iC3H8OI.H b/src/thermophysicalModels/liquids/iC3H8O/iC3H8OI.H new file mode 100644 index 0000000000000000000000000000000000000000..3ec8bd368df335a009bdc1ec9642bc81c8ea8f4e --- /dev/null +++ b/src/thermophysicalModels/liquids/iC3H8O/iC3H8OI.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::iC3H8O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::iC3H8O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // + diff --git a/src/thermophysicalModels/liquids/liquid/liquid.C b/src/thermophysicalModels/liquids/liquid/liquid.C index e4ffc44b010412a060395ad7ccc2e645b3ab1e06..c2b5f8b3fad858d6e93fb1f06aad83b680dd23ba 100644 --- a/src/thermophysicalModels/liquids/liquid/liquid.C +++ b/src/thermophysicalModels/liquids/liquid/liquid.C @@ -33,16 +33,14 @@ License namespace Foam { - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -defineTypeNameAndDebug(liquid, 0); -defineRunTimeSelectionTable(liquid,); -defineRunTimeSelectionTable(liquid, Istream); + defineTypeNameAndDebug(liquid, 0); + defineRunTimeSelectionTable(liquid,); + defineRunTimeSelectionTable(liquid, Istream); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -autoPtr<liquid> liquid::New(Istream& is) +Foam::autoPtr<Foam::liquid> Foam::liquid::New(Istream& is) { if (debug) { @@ -64,8 +62,8 @@ autoPtr<liquid> liquid::New(Istream& is) { FatalErrorIn("liquid::New(Istream&)") << "Unknown liquid type " << liquidType - << endl << endl - << "Valid liquid types are :" << endl + << nl << nl + << "Valid liquid types are:" << nl << ConstructorTablePtr_->toc() << abort(FatalError); } @@ -82,7 +80,7 @@ autoPtr<liquid> liquid::New(Istream& is) FatalErrorIn("liquid::New(Istream&)") << "Unknown liquid type " << liquidType << endl << endl - << "Valid liquid types are :" << endl + << "Valid liquid types are:" << nl << IstreamConstructorTablePtr_->toc() << abort(FatalError); } @@ -102,8 +100,4 @@ autoPtr<liquid> liquid::New(Istream& is) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/liquid/liquid.H b/src/thermophysicalModels/liquids/liquid/liquid.H index 27bbff55bf2ea53e89432595f9aca3a837f962f6..053d36027b179cb71b5303b0ee97f2c204ef6b1f 100644 --- a/src/thermophysicalModels/liquids/liquid/liquid.H +++ b/src/thermophysicalModels/liquids/liquid/liquid.H @@ -162,10 +162,9 @@ public: static autoPtr<liquid> New(Istream& is); - // Destructor - - virtual ~liquid() - {} + //- Destructor + virtual ~liquid() + {} // Member Functions @@ -173,70 +172,37 @@ public: // Physical constants which define the specie //- Molecular weight [kg/kmol] - scalar W() const - { - return W_; - } + inline scalar W() const; //- Critical temperature [K] - scalar Tc() const - { - return Tc_; - } + inline scalar Tc() const; //- Critical pressure [Pa] - scalar Pc() const - { - return Pc_; - } + inline scalar Pc() const; //- Critical volume [m^3/mol] - scalar Vc() const - { - return Vc_; - } + inline scalar Vc() const; //- Critical compressibilty factor - scalar Zc() const - { - return Zc_; - } + inline scalar Zc() const; //- Triple point temperature [K] - scalar Tt() const - { - return Tt_; - } + inline scalar Tt() const; //- Triple point pressure [Pa] - scalar Pt() const - { - return Pt_; - } + inline scalar Pt() const; //- Normal boiling temperature [K] - scalar Tb() const - { - return Tb_; - } + inline scalar Tb() const; //- Dipole moment [] - scalar dipm() const - { - return dipm_; - } + inline scalar dipm() const; //- Pitzer's ascentric factor [] - scalar omega() const - { - return omega_; - } + inline scalar omega() const; //- Solubility parameter [(J/m^3)^(1/2)] - scalar delta() const - { - return delta_; - } + inline scalar delta() const; // Physical property pure virtual functions @@ -266,7 +232,7 @@ public: virtual scalar mug(scalar p, scalar T) const = 0; //- Liquid thermal conductivity [W/(m K)] - virtual scalar K(scalar p, scalar T) const =0; + virtual scalar K(scalar p, scalar T) const = 0; //- Vapour thermal conductivity [W/(m K)] virtual scalar Kg(scalar p, scalar T) const = 0; @@ -278,6 +244,8 @@ public: virtual scalar D(scalar p, scalar T) const = 0; + // I-O + //- Write the function coefficients virtual void writeData(Ostream& os) const { @@ -290,9 +258,7 @@ public: << delta_; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const liquid& l) { l.writeData(os); @@ -307,6 +273,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "liquidI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/liquid/liquidI.H b/src/thermophysicalModels/liquids/liquid/liquidI.H new file mode 100644 index 0000000000000000000000000000000000000000..cf941d79bfbae49886b7ea62d4086d1faecb2606 --- /dev/null +++ b/src/thermophysicalModels/liquids/liquid/liquidI.H @@ -0,0 +1,93 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::liquid::W() const +{ + return W_; +} + + +inline Foam::scalar Foam::liquid::Tc() const +{ + return Tc_; +} + + +inline Foam::scalar Foam::liquid::Pc() const +{ + return Pc_; +} + + +inline Foam::scalar Foam::liquid::Vc() const +{ + return Vc_; +} + + +inline Foam::scalar Foam::liquid::Zc() const +{ + return Zc_; +} + + +inline Foam::scalar Foam::liquid::Tt() const +{ + return Tt_; +} + + +inline Foam::scalar Foam::liquid::Pt() const +{ + return Pt_; +} + + +inline Foam::scalar Foam::liquid::Tb() const +{ + return Tb_; +} + + +inline Foam::scalar Foam::liquid::dipm() const +{ + return dipm_; +} + + +inline Foam::scalar Foam::liquid::omega() const +{ + return omega_; +} + + +inline Foam::scalar Foam::liquid::delta() const +{ + return delta_; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C index cdf81e6b947f2559c742e9d9ba383669b09cc4bd..5b4be350ea8ecb5db495c21454fc0f090d11f5a5 100644 --- a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C +++ b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.C @@ -22,27 +22,129 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -Description - -------------------------------------------------------------------------------- -*/ +\*---------------------------------------------------------------------------*/ #include "nC3H8O.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(nC3H8O, 0); + addToRunTimeSelectionTable(liquid, nC3H8O,); + addToRunTimeSelectionTable(liquid, nC3H8O, Istream); +} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::nC3H8O::nC3H8O() +: + liquid + ( + 60.096, + 536.71, + 5.1696e+6, + 0.21853, + 0.253, + 146.95, + 6.5112e-7, + 370.35, + 5.6039e-30, + 0.6279, + 2.4557e+4 + ), + rho_(75.300288, 0.272, 536.71, 0.2494), + pv_(77.46, -7960, -7.5235, 3e-07, 2.0), + hl_(536.71, 1098242.8115016, 0.647, -0.783, 0.613, 0.0), + cp_ + ( + 216.320553780618, + 18.5203674121406, + -0.0751797124600639, + 0.000126464323748669, + 0.0, + 0.0 + ), + h_ + ( + -5533091.96851587, + 216.320553780618, + 9.26018370607029, + -0.0250599041533546, + 3.16160809371672e-05, + 0.0 + ), + cpg_(961.794462193823, 3467.78487752929, 1542, 2046.72523961661, 649), + B_ + ( + 0.000933506389776358, + -1.09325079872204, + -531649.361022364, + -2.32627795527157e+17, + -3.81888977635783e+20 + ), + mu_(0.571, 1521, -2.0894, 0.0, 0.0), + mug_(7.942e-07, 0.5491, 415.8, 0.0), + K_(0.204, -0.000169, 0.0, 0.0, 0.0, 0.0), + Kg_(-613.84, 0.7927, -1157400000.0, 0.0), + sigma_(0.04533, -6.88e-05, -1.6e-08, 0.0, 0.0, 0.0), + D_(4.75e-10, 1.75, 0.0, 0.0, 0.0) // note: same as iC3H8O +{} + + +Foam::nC3H8O::nC3H8O +( + const liquid& l, + const NSRDSfunc5& density, + const NSRDSfunc1& vapourPressure, + const NSRDSfunc6& heatOfVapourisation, + const NSRDSfunc0& heatCapacity, + const NSRDSfunc0& enthalpy, + const NSRDSfunc7& idealGasHeatCapacity, + const NSRDSfunc4& secondVirialCoeff, + const NSRDSfunc1& dynamicViscosity, + const NSRDSfunc2& vapourDynamicViscosity, + const NSRDSfunc0& thermalConductivity, + const NSRDSfunc2& vapourThermalConductivity, + const NSRDSfunc0& surfaceTension, + const NSRDSfunc1& vapourDiffussivity +) +: + liquid(l), + rho_(density), + pv_(vapourPressure), + hl_(heatOfVapourisation), + cp_(heatCapacity), + h_(enthalpy), + cpg_(idealGasHeatCapacity), + B_(secondVirialCoeff), + mu_(dynamicViscosity), + mug_(vapourDynamicViscosity), + K_(thermalConductivity), + Kg_(vapourThermalConductivity), + sigma_(surfaceTension), + D_(vapourDiffussivity) +{} -defineTypeNameAndDebug(nC3H8O, 0); -addToRunTimeSelectionTable(liquid, nC3H8O,); -addToRunTimeSelectionTable(liquid, nC3H8O, Istream); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Foam::nC3H8O::nC3H8O(Istream& is) +: + liquid(is), + rho_(is), + pv_(is), + hl_(is), + cp_(is), + h_(is), + cpg_(is), + B_(is), + mu_(is), + mug_(is), + K_(is), + Kg_(is), + sigma_(is), + D_(is) +{} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H index 5bb5ba21d7900ed355f6b7dddbb3bf8a44c5a6d8..27601bc5481a498b8968366e9b0b045644d6e651 100644 --- a/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H +++ b/src/thermophysicalModels/liquids/nC3H8O/nC3H8O.H @@ -85,26 +85,9 @@ public: // Constructors //- Construct null - nC3H8O() - : - liquid(60.096, 536.71, 5.1696e+6, 0.21853, 0.253, 146.95, 6.5112e-7, 370.35, 5.6039e-30, 0.6279, 2.4557e+4), - rho_(75.300288, 0.272, 536.71, 0.2494), - pv_(77.46, -7960, -7.5235, 3e-07, 2), - hl_(536.71, 1098242.8115016, 0.647, -0.783, 0.613, 0), - cp_(216.320553780618, 18.5203674121406, -0.0751797124600639, 0.000126464323748669, 0, 0), - // NN: enthalpy, h_, is not used in the sprayModel. - // For consistency, the enthalpy is derived from hlat and hl. - // It is, however, convenient to have it available. - h_(-5533091.96851587, 216.320553780618, 9.26018370607029, -0.0250599041533546, 3.16160809371672e-05, 0), - cpg_(961.794462193823, 3467.78487752929, 1542, 2046.72523961661, 649), - B_(0.000933506389776358, -1.09325079872204, -531649.361022364, -2.32627795527157e+17, -3.81888977635783e+20), - mu_(0.571, 1521, -2.0894, 0, 0), - mug_(7.942e-07, 0.5491, 415.8, 0), - K_(0.204, -0.000169, 0, 0, 0, 0), - Kg_(-613.84, 0.7927, -1157400000, 0), - sigma_(0.04533, -6.88e-05, -1.6e-08, 0, 0, 0), - D_(4.75e-10, 1.75, 0.0, 0.0, 0.0) // NN. same as iC3H8O - {} + nC3H8O(); + + //- Construct from components nC3H8O ( const liquid& l, @@ -121,125 +104,56 @@ public: const NSRDSfunc2& vapourThermalConductivity, const NSRDSfunc0& surfaceTension, const NSRDSfunc1& vapourDiffussivity - ) - : - liquid(l), - rho_(density), - pv_(vapourPressure), - hl_(heatOfVapourisation), - cp_(heatCapacity), - h_(enthalpy), - cpg_(idealGasHeatCapacity), - B_(secondVirialCoeff), - mu_(dynamicViscosity), - mug_(vapourDynamicViscosity), - K_(thermalConductivity), - Kg_(vapourThermalConductivity), - sigma_(surfaceTension), - D_(vapourDiffussivity) - {} + ); //- Construct from Istream - nC3H8O(Istream& is) - : - liquid(is), - rho_(is), - pv_(is), - hl_(is), - cp_(is), - h_(is), - cpg_(is), - B_(is), - mu_(is), - mug_(is), - K_(is), - Kg_(is), - sigma_(is), - D_(is) - {} + nC3H8O(Istream& is); // Member Functions //- Liquid density [kg/m^3] - scalar rho(scalar p, scalar T) const - { - return rho_.f(p, T); - } + inline scalar rho(scalar p, scalar T) const; //- Vapour pressure [Pa] - scalar pv(scalar p, scalar T) const - { - return pv_.f(p, T); - } + inline scalar pv(scalar p, scalar T) const; //- Heat of vapourisation [J/kg] - scalar hl(scalar p, scalar T) const - { - return hl_.f(p, T); - } + inline scalar hl(scalar p, scalar T) const; //- Liquid heat capacity [J/(kg K)] - scalar cp(scalar p, scalar T) const - { - return cp_.f(p, T); - } + inline scalar cp(scalar p, scalar T) const; //- Liquid Enthalpy [J/(kg)] - scalar h(scalar p, scalar T) const - { - return h_.f(p, T); - } + inline scalar h(scalar p, scalar T) const; //- Ideal gas heat capacity [J/(kg K)] - scalar cpg(scalar p, scalar T) const - { - return cpg_.f(p, T); - } + inline scalar cpg(scalar p, scalar T) const; //- Second Virial Coefficient [m^3/kg] - scalar B(scalar p, scalar T) const - { - return B_.f(p, T); - } + inline scalar B(scalar p, scalar T) const; //- Liquid viscosity [Pa s] - scalar mu(scalar p, scalar T) const - { - return mu_.f(p, T); - } + inline scalar mu(scalar p, scalar T) const; //- Vapour viscosity [Pa s] - scalar mug(scalar p, scalar T) const - { - return mug_.f(p, T); - } + inline scalar mug(scalar p, scalar T) const; - //- Liquid thermal conductivity [W/(m K)] - scalar K(scalar p, scalar T) const - { - return K_.f(p, T); - } + //- Liquid thermal conductivity [W/(m K)] + inline scalar K(scalar p, scalar T) const; - //- Vapour thermal conductivity [W/(m K)] - scalar Kg(scalar p, scalar T) const - { - return Kg_.f(p, T); - } + //- Vapour thermal conductivity [W/(m K)] + inline scalar Kg(scalar p, scalar T) const; //- Surface tension [N/m] - scalar sigma(scalar p, scalar T) const - { - return sigma_.f(p, T); - } + inline scalar sigma(scalar p, scalar T) const; //- Vapour diffussivity [m2/s] - scalar D(scalar p, scalar T) const - { - return D_.f(p, T); - } + inline scalar D(scalar p, scalar T) const; + // I-O + //- Write the function coefficients void writeData(Ostream& os) const { @@ -258,9 +172,7 @@ public: D_.writeData(os); os << endl; } - - // Ostream Operator - + //- Ostream Operator friend Ostream& operator<<(Ostream& os, const nC3H8O& l) { l.writeData(os); @@ -275,6 +187,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "nC3H8OI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/liquids/nC3H8O/nC3H8OI.H b/src/thermophysicalModels/liquids/nC3H8O/nC3H8OI.H new file mode 100644 index 0000000000000000000000000000000000000000..ec850eddf8d4c9f39de477e59fc4e94d3dd5ca2f --- /dev/null +++ b/src/thermophysicalModels/liquids/nC3H8O/nC3H8OI.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::scalar Foam::nC3H8O::rho(scalar p, scalar T) const +{ + return rho_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::pv(scalar p, scalar T) const +{ + return pv_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::hl(scalar p, scalar T) const +{ + return hl_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::cp(scalar p, scalar T) const +{ + return cp_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::h(scalar p, scalar T) const +{ + return h_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::cpg(scalar p, scalar T) const +{ + return cpg_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::B(scalar p, scalar T) const +{ + return B_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::mu(scalar p, scalar T) const +{ + return mu_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::mug(scalar p, scalar T) const +{ + return mug_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::K(scalar p, scalar T) const +{ + return K_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::Kg(scalar p, scalar T) const +{ + return Kg_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::sigma(scalar p, scalar T) const +{ + return sigma_.f(p, T); +} + + +inline Foam::scalar Foam::nC3H8O::D(scalar p, scalar T) const +{ + return D_.f(p, T); +} + + +// ************************************************************************* // + diff --git a/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C index 567eff9dafc283e9f8d44f86aee7fd4d19bb0de8..80c3c2dc694839322ceaf2cfa40b1df6929fe6be 100644 --- a/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C +++ b/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.H b/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.H index 005fe768652354f712917046ac6cdc302a0aeec5..cad873ab725423ad055a576793f9c4149a356dc6 100644 --- a/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.H +++ b/src/thermophysicalModels/radiation/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C index b3669bd6fa45708e430c6cea388bf13254f1c8a3..08dbb061ed6e9c8b63b9032c0b7e33ce8e6ee277 100644 --- a/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C +++ b/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.H b/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.H index 9d170131b273ef0843fa59f291551c92b66b5662..60ba567ba33882f6eb5b66fc843617c62e418982 100644 --- a/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.H +++ b/src/thermophysicalModels/radiation/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/createRadiationModel.H b/src/thermophysicalModels/radiation/include/createRadiationModel.H similarity index 68% rename from applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/createRadiationModel.H rename to src/thermophysicalModels/radiation/include/createRadiationModel.H index babe3c4dbe103dfafed9d392eebf0ea11d51ea4d..d61082c36fdc563e400e4f47bb6ee0050597bc2c 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/createRadiationModel.H +++ b/src/thermophysicalModels/radiation/include/createRadiationModel.H @@ -1,5 +1,5 @@ Info<< "Creating radiation model\n" << endl; autoPtr<radiation::radiationModel> radiation ( - radiation::radiationModel::New(thermo->T()) + radiation::radiationModel::New(thermo.T()) ); diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.C b/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.C index 3452797b3eb23f61faf17dc2d07f56be7cf7f820..eeec89cef8fc178dfe5cec174c300a3a159976a9 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.C +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.H index 1a79e310b908f435d1c23ea41fd2a8355d46bc15..685d1052195db864aec04aec74b26a7c0f17dcce 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffs.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffsI.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffsI.H index c7759db4772a908cbc4f7b8ce8640436f5c8125b..9ae17155cd41aee4d1b6ebe11442fbae14726922 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffsI.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/absorptionCoeffs/absorptionCoeffsI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.C b/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.C index dee5647366936e75e202bf93426e042bd8f49ea2..bc21f3bfe0bfc027479aef047315895b4db061c4 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.C +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.H index 01719e50764880cb8d436034a8ffba5366f706c4..958f6d6d7e0bb1a9e6a611e625ad42f6def1b957 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/blackBodyEmission/blackBodyEmission.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C index 296b99ff9e93c1faab2f43c463a1d4219f503663..bfcf1309e881dd41bea7d8f97671ca315f8d2236 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.H index f91163805a46f899a8253d65ea5b22f267861cb7..183ce1b9a8320984e21a2ad43bd87599a67c9740 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOM.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOMI.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOMI.H index 594b5bee0ac72a6dde43be556d2d616813353e4a..0995efa43643a76ec9a58e6649a332e3d22da4bf 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOMI.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/fvDOM/fvDOMI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.C b/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.C old mode 100755 new mode 100644 index f000e43fa3910ef87653e3d620b315809d67388f..b9af5e65b6c62a28bcbe2939db17ae7c22e33ea8 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.C +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.H old mode 100755 new mode 100644 index 6140ae4bc3a6527acc6f1b30b3e05419c0f15b62..7768fb48ca2586fbefd811c4fd482469061e50d5 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTable.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTableI.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTableI.H index 5829db3148e534ecdbcaaeb797427426db55acd0..8019d1c64fc20aa3cbf4dcca5645e75acfd0c166 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTableI.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/interpolationLookUpTable/interpolationLookUpTableI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C b/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C index 7441b900d695a91f3c6e81617d3d8f342ce53c83..ff22c6335933fb2ba307b82cfb7093432b4f7c30 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.H index 1e558c8f3cdf4e42b7a92498be2c07e8744aed98..c139a3633427827c6a2ca2629c0cbe00070ba84d 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRay.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRayI.H b/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRayI.H index 0efd423a6dc08efb6a113900e5ac8c6f43b44874..649f5b7c9e4820110461b5c91c338dc8bd518850 100644 --- a/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRayI.H +++ b/src/thermophysicalModels/radiation/radiationModel/fvDOM/radiativeIntensityRay/radiativeIntensityRayI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H b/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H index 2527ab1211fac521aa8d55b8fb4a4b90ca873316..c171ce23bd40cb919c9562953b3f6eeb5def57f2 100644 --- a/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H +++ b/src/thermophysicalModels/radiation/radiationModel/noRadiation/noRadiation.H @@ -66,7 +66,7 @@ class noRadiation public: //- Runtime type information - TypeName("noRadiation"); + TypeName("none"); // Constructors diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C index 15d8c37a31008217e0c5d07b4c9d416f1f33aa78..5cc3ac9b27a4582e0b35edbf26b0be858ea74509 100644 --- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C +++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.C @@ -75,44 +75,44 @@ Foam::radiation::binaryAbsorptionEmission::~binaryAbsorptionEmission() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // Foam::tmp<Foam::volScalarField> -Foam::radiation::binaryAbsorptionEmission::aCont() const +Foam::radiation::binaryAbsorptionEmission::aCont(const label bandI) const { - return model1_->aCont() + model2_->aCont(); + return model1_->aCont(bandI) + model2_->aCont(bandI); } Foam::tmp<Foam::volScalarField> -Foam::radiation::binaryAbsorptionEmission::aDisp() const +Foam::radiation::binaryAbsorptionEmission::aDisp(const label bandI) const { - return model1_->aDisp() + model2_->aDisp(); + return model1_->aDisp(bandI) + model2_->aDisp(bandI); } Foam::tmp<Foam::volScalarField> -Foam::radiation::binaryAbsorptionEmission::eCont() const +Foam::radiation::binaryAbsorptionEmission::eCont(const label bandI) const { - return model1_->eCont() + model2_->eCont(); + return model1_->eCont(bandI) + model2_->eCont(bandI); } Foam::tmp<Foam::volScalarField> -Foam::radiation::binaryAbsorptionEmission::eDisp() const +Foam::radiation::binaryAbsorptionEmission::eDisp(const label bandI) const { - return model1_->eDisp() + model2_->eDisp(); + return model1_->eDisp(bandI) + model2_->eDisp(bandI); } Foam::tmp<Foam::volScalarField> -Foam::radiation::binaryAbsorptionEmission::ECont() const +Foam::radiation::binaryAbsorptionEmission::ECont(const label bandI) const { - return model1_->ECont() + model2_->ECont(); + return model1_->ECont(bandI) + model2_->ECont(bandI); } Foam::tmp<Foam::volScalarField> -Foam::radiation::binaryAbsorptionEmission::EDisp() const +Foam::radiation::binaryAbsorptionEmission::EDisp(const label bandI) const { - return model1_->EDisp() + model2_->EDisp(); + return model1_->EDisp(bandI) + model2_->EDisp(bandI); } diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H index 68ad204b84a3dab0d32d02ab65937fc5e7bee28d..d5cec44a8f923746b2a6e6770a8a581ce553fb45 100644 --- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H +++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/binaryAbsorptionEmission/binaryAbsorptionEmission.H @@ -92,28 +92,28 @@ public: // Absorption coefficient //- Absorption coefficient for continuous phase - tmp<volScalarField> aCont() const; + virtual tmp<volScalarField> aCont(const label bandI = 0) const; //- Absorption coefficient for dispersed phase - tmp<volScalarField> aDisp() const; + virtual tmp<volScalarField> aDisp(const label bandI = 0) const; // Emission coefficient //- Emission coefficient for continuous phase - tmp<volScalarField> eCont() const; + virtual tmp<volScalarField> eCont(const label bandI = 0) const; //- Emission coefficient for dispersed phase - tmp<volScalarField> eDisp() const; + virtual tmp<volScalarField> eDisp(const label bandI = 0) const; // Emission contribution //- Emission contribution for continuous phase - tmp<volScalarField> ECont() const; + virtual tmp<volScalarField> ECont(const label bandI = 0) const; //- Emission contribution for continuous phase - tmp<volScalarField> EDisp() const; + virtual tmp<volScalarField> EDisp(const label bandI = 0) const; }; diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.C index dccbbbad25064f2f278d6b93a813041fdc8b3d38..cdb57c0f5397ea63334fca60594b9595c4df2493 100644 --- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.C +++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.H index 2c24af42c49d7ceb08cd90209c717cd6183f009e..a5921d7c40802d09d49a3b31b0f135862fd43286 100644 --- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.H +++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/greyMeanAbsorptionEmission/greyMeanAbsorptionEmission.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C index a96deeb0b40273b0e69d26305bde5bb38c0f9924..1665519e3e711fdaa8c80493c77f91c1be972fdb 100644 --- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C +++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H index 21e10c400b63385c9a047b1d655e1a0f662c8c2f..5a0dd1d20e0a6477110bc084537fa3ba2b13a4af 100644 --- a/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H +++ b/src/thermophysicalModels/radiation/submodels/absorptionEmissionModel/wideBandAbsorptionEmission/wideBandAbsorptionEmission.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/reactionThermo/Make/files b/src/thermophysicalModels/reactionThermo/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..c2f9612ec5d5a462cbf6139bc7086ef1d0b55dae --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/Make/files @@ -0,0 +1,24 @@ +chemistryReaders/chemkinReader/chemkinReader.C +chemistryReaders/chemkinReader/chemkinLexer.C +chemistryReaders/chemistryReader/makeChemistryReaders.C + +mixtures/basicMultiComponentMixture/basicMultiComponentMixture.C + +combustionThermo/hCombustionThermo/hCombustionThermo.C +combustionThermo/hCombustionThermo/newhCombustionThermo.C +combustionThermo/hCombustionThermo/hCombustionThermos.C + +combustionThermo/hhuCombustionThermo/hhuCombustionThermo.C +combustionThermo/hhuCombustionThermo/newhhuCombustionThermo.C +combustionThermo/hhuCombustionThermo/hhuCombustionThermos.C + +reactionThermo/hReactionThermo/hReactionThermo.C +reactionThermo/hReactionThermo/newhReactionThermo.C +reactionThermo/hReactionThermo/hReactionThermos.C + + +derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.C +derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C +derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C + +LIB = $(FOAM_LIBBIN)/libreactionThermophysicalModels diff --git a/src/thermophysicalModels/combustion/Make/options b/src/thermophysicalModels/reactionThermo/Make/options similarity index 100% rename from src/thermophysicalModels/combustion/Make/options rename to src/thermophysicalModels/reactionThermo/Make/options diff --git a/src/thermophysicalModels/combustion/chemistryReaders/chemistryReader/chemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C similarity index 78% rename from src/thermophysicalModels/combustion/chemistryReaders/chemistryReader/chemistryReader.C rename to src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C index 38ad6e1f9801336b11ee9f3351bed30e8545051c..e178bd0338f685001280eba5f0433b0e6572b84a 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/chemistryReader/chemistryReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C @@ -26,17 +26,11 @@ License #include "chemistryReader.H" -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(chemistryReader, 0); - defineRunTimeSelectionTable(chemistryReader, dictionary); -}; - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -Foam::autoPtr<Foam::chemistryReader> Foam::chemistryReader::New +template<class ThermoType> +Foam::autoPtr<Foam::chemistryReader<ThermoType> > +Foam::chemistryReader<ThermoType>::New ( const dictionary& thermoDict ) @@ -50,9 +44,8 @@ Foam::autoPtr<Foam::chemistryReader> Foam::chemistryReader::New Info<< "Selecting chemistryReader " << chemistryReaderTypeName << endl; - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_ - ->find(chemistryReaderTypeName); + typename dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(chemistryReaderTypeName); if (cstrIter == dictionaryConstructorTablePtr_->end()) { @@ -60,13 +53,13 @@ Foam::autoPtr<Foam::chemistryReader> Foam::chemistryReader::New ( "chemistryReader::New(const dictionary& thermoDict)" ) << "Unknown chemistryReader type " - << chemistryReaderTypeName << endl << endl - << "Valid chemistryReaders are : " << endl + << chemistryReaderTypeName << nl << nl + << "Valid chemistryReaders are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } - return autoPtr<chemistryReader>(cstrIter()(thermoDict)); + return autoPtr<chemistryReader<ThermoType> >(cstrIter()(thermoDict)); } diff --git a/src/thermophysicalModels/combustion/chemistryReaders/chemistryReader/chemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H similarity index 57% rename from src/thermophysicalModels/combustion/chemistryReaders/chemistryReader/chemistryReader.H rename to src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H index bd5f4eaa1a5db8b80ac9778e1ea56573339bc7ad..550d44c79ad8cc60e464c4d7ec4c55a72bf5774e 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/chemistryReader/chemistryReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H @@ -39,10 +39,6 @@ SourceFiles #include "typeInfo.H" #include "runTimeSelectionTables.H" #include "Reaction.H" -#include "sutherlandTransport.H" -#include "specieThermo.H" -#include "janafThermo.H" -#include "perfectGas.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -50,23 +46,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class chemistryReader Declaration + Class chemistryReader Declaration \*---------------------------------------------------------------------------*/ +template<class ThermoType> class chemistryReader { - -public: - - // Public data types - - typedef sutherlandTransport<specieThermo<janafThermo<perfectGas> > > - reactionThermo; - - typedef Reaction<reactionThermo> reaction; - -private: - // Private Member Functions //- Disallow default bitwise copy construct @@ -81,6 +66,9 @@ public: //- Runtime type information TypeName("chemistryReader"); + //- The type of thermo package the reader was instantiated for + typedef ThermoType thermoType; + // Constructors @@ -109,17 +97,18 @@ public: static autoPtr<chemistryReader> New(const dictionary& thermoDict); - // Destructor - - virtual ~chemistryReader() - {} + //- Destructor + virtual ~chemistryReader() + {} // Member Functions virtual const speciesTable& species() const = 0; - virtual const HashPtrTable<reactionThermo>& speciesThermo() const = 0; - virtual const SLPtrList<reaction>& reactions() const = 0; + + virtual const HashPtrTable<ThermoType>& speciesThermo() const = 0; + + virtual const SLPtrList<Reaction<ThermoType> >& reactions() const = 0; }; @@ -129,6 +118,41 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#define makeChemistryReader(Thermo) \ + \ +defineTemplateTypeNameAndDebug \ +( \ + chemistryReader<Thermo>, \ + 0 \ +); \ + \ +defineTemplateRunTimeSelectionTable(chemistryReader<Thermo>, dictionary); + + +#define makeChemistryReaderType(SS, Thermo) \ + \ + defineNamedTemplateTypeNameAndDebug(SS<Thermo>, 0); \ + \ + chemistryReader<Thermo>::adddictionaryConstructorToTable<SS<Thermo> > \ + add##SS##Thermo##ConstructorToTable_; + + +#define addChemistryReaderType(SS, Thermo) \ + \ + defineNamedTemplateTypeNameAndDebug(SS, 0); \ + \ + chemistryReader<Thermo>::adddictionaryConstructorToTable<SS> \ + add##SS##Thermo##ConstructorToTable_; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "chemistryReader.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/makeChemistryReaders.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/makeChemistryReaders.C new file mode 100644 index 0000000000000000000000000000000000000000..35ab18220b048c0777b8cca86b613dd85d2ce15b --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/makeChemistryReaders.C @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "makeReactionThermo.H" +#include "thermoPhysicsTypes.H" + +#include "chemistryReader.H" +#include "foamChemistryReader.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makeChemistryReader(gasThermoPhysics); +makeChemistryReader(icoPoly8ThermoPhysics); + +makeChemistryReaderType(foamChemistryReader, gasThermoPhysics); +makeChemistryReaderType(foamChemistryReader, icoPoly8ThermoPhysics); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinLexer.L b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L similarity index 98% rename from src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinLexer.L rename to src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L index d32e172daec2b66d0330a231fae88c3e260ffc71..f7ec61e3314c059b889fd1f07cf1d9643b11046c 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinLexer.L +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L @@ -1,4 +1,4 @@ -/*--------------------------------*- C++ -*----------------------------------*\ +/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | @@ -306,13 +306,13 @@ List<specieElement> currentSpecieComposition(5); scalar currentLowT = 0; scalar currentHighT = 0; scalar currentCommonT = 0; -reactionThermo::coeffArray highCpCoeffs; -reactionThermo::coeffArray lowCpCoeffs; +gasThermoPhysics::coeffArray highCpCoeffs; +gasThermoPhysics::coeffArray lowCpCoeffs; -reaction::specieCoeffs currentSpecieCoeff; +gasReaction::specieCoeffs currentSpecieCoeff; -DynamicList<reaction::specieCoeffs> lhs; -DynamicList<reaction::specieCoeffs> rhs; +DynamicList<gasReaction::specieCoeffs> lhs; +DynamicList<gasReaction::specieCoeffs> rhs; scalarList ArrheniusCoeffs(3); DynamicList<scalar> reactionCoeffs; @@ -322,7 +322,7 @@ label currentThirdBodyIndex = -1; word reactionCoeffsName = word::null; HashTable<scalarList> reactionCoeffsTable; -DynamicList<reaction::specieCoeffs> *lrhsPtr = &lhs; +DynamicList<gasReaction::specieCoeffs> *lrhsPtr = &lhs; reactionType rType = unknownReactionType; reactionRateType rrType = Arrhenius; @@ -614,7 +614,7 @@ bool finishReaction = false; <readThermoLineLabel4>{thermoLineLabel4} { - HashPtrTable<reactionThermo>::iterator specieThermoIter + HashPtrTable<gasThermoPhysics>::iterator specieThermoIter ( speciesThermo_.find(currentSpecieName) ); @@ -627,7 +627,7 @@ bool finishReaction = false; speciesThermo_.insert ( currentSpecieName, - new reactionThermo + new gasThermoPhysics ( janafThermo<perfectGas> ( @@ -863,7 +863,7 @@ bool finishReaction = false; { case unimolecularFallOffReactionType: { - if (pDependentSpecieName.empty()) + if (!pDependentSpecieName.size()) { FatalErrorIn("chemkinReader::lex()") << "LOW keyword given for a unimolecular fall-off" @@ -898,7 +898,7 @@ bool finishReaction = false; case chemicallyActivatedBimolecularReactionType: { - if (pDependentSpecieName.empty()) + if (!pDependentSpecieName.size()) { FatalErrorIn("chemkinReader::lex()") << "HIGH keyword given for a chemically" @@ -935,7 +935,7 @@ bool finishReaction = false; case TroeReactionType: { - if (pDependentSpecieName.empty()) + if (!pDependentSpecieName.size()) { FatalErrorIn("chemkinReader::lex()") << "TROE keyword given for a" @@ -969,7 +969,7 @@ bool finishReaction = false; case SRIReactionType: { - if (pDependentSpecieName.empty()) + if (!pDependentSpecieName.size()) { FatalErrorIn("chemkinReader::lex()") << "SRI keyword given for a" @@ -1434,7 +1434,7 @@ bool finishReaction = false; <readReactionOrder>{reactionCoeff}{endReactionCoeffs} { - DynamicList<reaction::specieCoeffs>& lrhs = *lrhsPtr; + DynamicList<gasReaction::specieCoeffs>& lrhs = *lrhsPtr; bool found = false; @@ -1535,5 +1535,5 @@ bool finishReaction = false; %% /* ------------------------------------------------------------------------- *\ - ------ End of STLToFoam.L + ------ End of chemkinLexer.L \* ------------------------------------------------------------------------- */ diff --git a/src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C similarity index 96% rename from src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinReader.C rename to src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C index f04995cd3e241f41090f6f2b08f211dfb4bd2ecd..a6841241225ab9ced70ca0466d3c6fcb0d34347a 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C @@ -46,8 +46,7 @@ License namespace Foam { - defineTypeNameAndDebug(chemkinReader, 0); - addToRunTimeSelectionTable(chemistryReader, chemkinReader, dictionary); + addChemistryReaderType(chemkinReader, gasThermoPhysics); }; /* * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * */ @@ -164,8 +163,8 @@ template<class ReactionRateType> void Foam::chemkinReader::addReactionType ( const reactionType rType, - DynamicList<reaction::specieCoeffs>& lhs, - DynamicList<reaction::specieCoeffs>& rhs, + DynamicList<gasReaction::specieCoeffs>& lhs, + DynamicList<gasReaction::specieCoeffs>& rhs, const ReactionRateType& rr ) { @@ -175,9 +174,9 @@ void Foam::chemkinReader::addReactionType { reactions_.append ( - new IrreversibleReaction<reactionThermo, ReactionRateType> + new IrreversibleReaction<gasThermoPhysics, ReactionRateType> ( - Reaction<reactionThermo> + Reaction<gasThermoPhysics> ( speciesTable_, lhs.shrink(), @@ -194,9 +193,9 @@ void Foam::chemkinReader::addReactionType { reactions_.append ( - new ReversibleReaction<reactionThermo, ReactionRateType> + new ReversibleReaction<gasThermoPhysics, ReactionRateType> ( - Reaction<reactionThermo> + Reaction<gasThermoPhysics> ( speciesTable_, lhs.shrink(), @@ -234,8 +233,8 @@ void Foam::chemkinReader::addPressureDependentReaction ( const reactionType rType, const fallOffFunctionType fofType, - DynamicList<reaction::specieCoeffs>& lhs, - DynamicList<reaction::specieCoeffs>& rhs, + DynamicList<gasReaction::specieCoeffs>& lhs, + DynamicList<gasReaction::specieCoeffs>& rhs, const scalarList& efficiencies, const scalarList& k0Coeffs, const scalarList& kInfCoeffs, @@ -417,8 +416,8 @@ void Foam::chemkinReader::addPressureDependentReaction void Foam::chemkinReader::addReaction ( - DynamicList<reaction::specieCoeffs>& lhs, - DynamicList<reaction::specieCoeffs>& rhs, + DynamicList<gasReaction::specieCoeffs>& lhs, + DynamicList<gasReaction::specieCoeffs>& rhs, const scalarList& efficiencies, const reactionType rType, const reactionRateType rrType, @@ -493,9 +492,9 @@ void Foam::chemkinReader::addReaction reactions_.append ( new NonEquilibriumReversibleReaction - <reactionThermo, ArrheniusReactionRate> + <gasThermoPhysics, ArrheniusReactionRate> ( - Reaction<reactionThermo> + Reaction<gasThermoPhysics> ( speciesTable_, lhs.shrink(), @@ -546,9 +545,9 @@ void Foam::chemkinReader::addReaction reactions_.append ( new NonEquilibriumReversibleReaction - <reactionThermo, thirdBodyArrheniusReactionRate> + <gasThermoPhysics, thirdBodyArrheniusReactionRate> ( - Reaction<reactionThermo> + Reaction<gasThermoPhysics> ( speciesTable_, lhs.shrink(), @@ -651,9 +650,9 @@ void Foam::chemkinReader::addReaction reactions_.append ( new NonEquilibriumReversibleReaction - <reactionThermo, LandauTellerReactionRate> + <gasThermoPhysics, LandauTellerReactionRate> ( - Reaction<reactionThermo> + Reaction<gasThermoPhysics> ( speciesTable_, lhs.shrink(), @@ -797,7 +796,7 @@ void Foam::chemkinReader::read const fileName& thermoFileName ) { - if (thermoFileName.size()) + if (thermoFileName != fileName::null) { std::ifstream thermoStream(thermoFileName.c_str()); diff --git a/src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H similarity index 93% rename from src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinReader.H rename to src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H index cdb9bc9095e26efd5bc7abefbee4493aad2fcb48..de679103806b55e96a6a8a9faad1edd41bca973a 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/chemkinReader/chemkinReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H @@ -47,6 +47,8 @@ SourceFiles #include "speciesTable.H" #include "atomicWeights.H" +#include "reactionTypes.H" + #include <FlexLexer.h> // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,12 +57,12 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class chemkin Declaration + Class chemkinReader Declaration \*---------------------------------------------------------------------------*/ class chemkinReader : - public chemistryReader, + public chemistryReader<gasThermoPhysics>, public yyFlexLexer { @@ -198,13 +200,13 @@ private: HashTable<phase> speciePhase_; //- Table of the thermodynamic data given in the CHEMKIN file - HashPtrTable<reactionThermo> speciesThermo_; + HashPtrTable<gasThermoPhysics> speciesThermo_; //- Table of species composition HashTable<List<specieElement> > specieComposition_; //- List of the reactions - SLPtrList<reaction> reactions_; + SLPtrList<gasReaction> reactions_; // Private Member Functions @@ -256,8 +258,8 @@ private: void addReactionType ( const reactionType rType, - DynamicList<reaction::specieCoeffs>& lhs, - DynamicList<reaction::specieCoeffs>& rhs, + DynamicList<gasReaction::specieCoeffs>& lhs, + DynamicList<gasReaction::specieCoeffs>& rhs, const ReactionRateType& rr ); @@ -266,8 +268,8 @@ private: ( const reactionType rType, const fallOffFunctionType fofType, - DynamicList<reaction::specieCoeffs>& lhs, - DynamicList<reaction::specieCoeffs>& rhs, + DynamicList<gasReaction::specieCoeffs>& lhs, + DynamicList<gasReaction::specieCoeffs>& rhs, const scalarList& thirdBodyEfficiencies, const scalarList& k0Coeffs, const scalarList& kInfCoeffs, @@ -279,8 +281,8 @@ private: void addReaction ( - DynamicList<reaction::specieCoeffs>& lhs, - DynamicList<reaction::specieCoeffs>& rhs, + DynamicList<gasReaction::specieCoeffs>& lhs, + DynamicList<gasReaction::specieCoeffs>& rhs, const scalarList& thirdBodyEfficiencies, const reactionType rType, const reactionRateType rrType, @@ -363,7 +365,7 @@ public: } //- Table of the thermodynamic data given in the CHEMKIN file - const HashPtrTable<reactionThermo>& speciesThermo() const + const HashPtrTable<gasThermoPhysics>& speciesThermo() const { return speciesThermo_; } @@ -375,7 +377,7 @@ public: } //- List of the reactions - const SLPtrList<reaction>& reactions() const + const SLPtrList<gasReaction>& reactions() const { return reactions_; } diff --git a/src/thermophysicalModels/combustion/chemistryReaders/foamChemistryReader/foamChemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C similarity index 81% rename from src/thermophysicalModels/combustion/chemistryReaders/foamChemistryReader/foamChemistryReader.C rename to src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C index e0913fe3d10e5add98f17cd5bd1dbae380c7b420..7e06956ab5e49488a3d0afb34b55cd6276e2749d 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/foamChemistryReader/foamChemistryReader.C +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C @@ -28,36 +28,33 @@ License #include "IFstream.H" #include "addToRunTimeSelectionTable.H" -/* * * * * * * * * * * * * * * * * Static data * * * * * * * * * * * * * * * */ - -namespace Foam -{ - defineTypeNameAndDebug(foamChemistryReader, 0); - addToRunTimeSelectionTable(chemistryReader, foamChemistryReader, dictionary); -}; - // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * // -// Construct from components -Foam::foamChemistryReader::foamChemistryReader +template<class ThermoType> +Foam::foamChemistryReader<ThermoType>::foamChemistryReader ( const fileName& reactionsFileName, const fileName& thermoFileName ) : + chemistryReader<ThermoType>(), speciesThermo_(IFstream(thermoFileName)()), speciesTable_(dictionary(IFstream(reactionsFileName)()).lookup("species")), reactions_ ( dictionary(IFstream(reactionsFileName)()).lookup("reactions"), - reaction::iNew(speciesTable_, speciesThermo_) + Reaction<ThermoType>::iNew(speciesTable_, speciesThermo_) ) {} -// Construct from components -Foam::foamChemistryReader::foamChemistryReader(const dictionary& thermoDict) +template<class ThermoType> +Foam::foamChemistryReader<ThermoType>::foamChemistryReader +( + const dictionary& thermoDict +) : + chemistryReader<ThermoType>(), speciesThermo_ ( IFstream @@ -84,7 +81,7 @@ Foam::foamChemistryReader::foamChemistryReader(const dictionary& thermoDict) fileName(thermoDict.lookup("foamChemistryFile")).expand() )() ).lookup("reactions"), - reaction::iNew(speciesTable_, speciesThermo_) + typename Reaction<ThermoType>::iNew(speciesTable_, speciesThermo_) ) {} diff --git a/src/thermophysicalModels/combustion/chemistryReaders/foamChemistryReader/foamChemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H similarity index 86% rename from src/thermophysicalModels/combustion/chemistryReaders/foamChemistryReader/foamChemistryReader.H rename to src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H index 2fa851462d140262fd6b9dc899450ce685a9910b..129cf1c811c180a18dcc6ba9a2bd6f65dda6b4f4 100644 --- a/src/thermophysicalModels/combustion/chemistryReaders/foamChemistryReader/foamChemistryReader.H +++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H @@ -51,21 +51,22 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class foamChemistry Declaration + Class foamChemistry Declaration \*---------------------------------------------------------------------------*/ +template<class ThermoType> class foamChemistryReader : - public chemistryReader + public chemistryReader<ThermoType> { //- Table of the thermodynamic data given in the foamChemistry file - HashPtrTable<reactionThermo> speciesThermo_; + HashPtrTable<ThermoType> speciesThermo_; //- Table of species speciesTable speciesTable_; //- List of the reactions - SLPtrList<reaction> reactions_; + SLPtrList<Reaction<ThermoType> > reactions_; // Private Member Functions @@ -97,10 +98,9 @@ public: foamChemistryReader(const dictionary& thermoDict); - // Destructor - - virtual ~foamChemistryReader() - {} + //- Destructor + virtual ~foamChemistryReader() + {} // Member functions @@ -112,13 +112,13 @@ public: } //- Table of the thermodynamic data given in the foamChemistry file - const HashPtrTable<reactionThermo>& speciesThermo() const + const HashPtrTable<ThermoType>& speciesThermo() const { return speciesThermo_; } //- List of the reactions - const SLPtrList<reaction>& reactions() const + const SLPtrList<Reaction<ThermoType> >& reactions() const { return reactions_; } @@ -131,6 +131,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "foamChemistryReader.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermo.C b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.C similarity index 81% rename from src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermo.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.C index 8f455f4eb4a15e80b42d1bc0a4e99ea7f115d830..5ea740221712048cb0c13bc85afc9a87f4fdf27e 100644 --- a/src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermo.C +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.C @@ -31,17 +31,15 @@ License namespace Foam { - -/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ - -defineTypeNameAndDebug(hCombustionThermo, 0); -defineRunTimeSelectionTable(hCombustionThermo, fvMesh); + defineTypeNameAndDebug(hCombustionThermo, 0); + defineRunTimeSelectionTable(hCombustionThermo, fvMesh); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -hCombustionThermo::hCombustionThermo(const fvMesh& mesh) +Foam::hCombustionThermo::hCombustionThermo(const fvMesh& mesh) : - basicThermo(mesh), + basicPsiThermo(mesh), h_ ( @@ -55,19 +53,15 @@ hCombustionThermo::hCombustionThermo(const fvMesh& mesh) ), mesh, dimensionSet(0, 2, -2, 0, 0), - hBoundaryTypes() + this->hBoundaryTypes() ) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -hCombustionThermo::~hCombustionThermo() +Foam::hCombustionThermo::~hCombustionThermo() {} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermo.H b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.H similarity index 77% rename from src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermo.H rename to src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.H index fe1e12adc0615064f97298a1c08657cfb87ecd9c..b4b66b55bdb3dcefc0ad5143773cb400e03d2f78 100644 --- a/src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermo.H +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermo.H @@ -30,15 +30,14 @@ Description SourceFiles hCombustionThermo.C - newhCombustionThermo.C \*---------------------------------------------------------------------------*/ #ifndef hCombustionThermo_H #define hCombustionThermo_H -#include "basicThermo.H" -#include "combustionMixture.H" +#include "basicPsiThermo.H" +#include "basicMultiComponentMixture.H" #include "autoPtr.H" #include "runTimeSelectionTables.H" @@ -48,18 +47,19 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class hCombustionThermo Declaration + Class hCombustionThermo Declaration \*---------------------------------------------------------------------------*/ class hCombustionThermo : - public basicThermo + public basicPsiThermo { protected: // Protected data + //- Enthalpy field volScalarField h_; @@ -69,16 +69,15 @@ public: TypeName("hCombustionThermo"); - // Declare run-time constructor selection tables - - declareRunTimeSelectionTable - ( - autoPtr, - hCombustionThermo, - fvMesh, - (const fvMesh& mesh), - (mesh) - ); + //- Declare run-time constructor selection tables + declareRunTimeSelectionTable + ( + autoPtr, + hCombustionThermo, + fvMesh, + (const fvMesh& mesh), + (mesh) + ); // Constructors @@ -89,8 +88,16 @@ public: // Selectors + //- Standard selection based on fvMesh static autoPtr<hCombustionThermo> New(const fvMesh&); + //- Select and check that package contains 'thermoType' + static autoPtr<hCombustionThermo> NewType + ( + const fvMesh&, + const word& thermoType + ); + //- Destructor virtual ~hCombustionThermo(); @@ -98,11 +105,11 @@ public: // Member functions - //- Return the composition of the combustion mixture - virtual combustionMixture& composition() = 0; + //- Return the composition of the multi-component mixture + virtual basicMultiComponentMixture& composition() = 0; - //- Return the composition of the combustion mixture - virtual const combustionMixture& composition() const = 0; + //- Return the composition of the multi-component mixture + virtual const basicMultiComponentMixture& composition() const = 0; // Access to thermodynamic state variables diff --git a/src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermos.C b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermos.C similarity index 80% rename from src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermos.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermos.C index fbfa73c85626e09068c819b01f2c6852bec099d0..94846bb75c09efee4ea8745991bd161959a353a2 100644 --- a/src/thermophysicalModels/combustion/hCombustionThermo/hCombustionThermos.C +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/hCombustionThermos.C @@ -24,11 +24,10 @@ License \*---------------------------------------------------------------------------*/ -#include "hCombustionThermo.H" -#include "hMixtureThermo.H" - #include "makeCombustionThermo.H" -#include "addToRunTimeSelectionTable.H" + +#include "hCombustionThermo.H" +#include "hPsiMixtureThermo.H" #include "perfectGas.H" @@ -46,6 +45,7 @@ License #include "multiComponentMixture.H" #include "reactingMixture.H" +#include "thermoPhysicsTypes.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -57,7 +57,7 @@ namespace Foam makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, homogeneousMixture, constTransport, hConstThermo, @@ -67,7 +67,7 @@ makeCombustionThermo makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, inhomogeneousMixture, constTransport, hConstThermo, @@ -77,7 +77,7 @@ makeCombustionThermo makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, veryInhomogeneousMixture, constTransport, hConstThermo, @@ -87,7 +87,7 @@ makeCombustionThermo makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, homogeneousMixture, sutherlandTransport, janafThermo, @@ -97,7 +97,7 @@ makeCombustionThermo makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, inhomogeneousMixture, sutherlandTransport, janafThermo, @@ -107,7 +107,7 @@ makeCombustionThermo makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, veryInhomogeneousMixture, sutherlandTransport, janafThermo, @@ -117,43 +117,32 @@ makeCombustionThermo makeCombustionThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, dieselMixture, sutherlandTransport, janafThermo, perfectGas ); - -makeCombustionThermo + +// Multi-component thermo + +makeCombustionMixtureThermo ( hCombustionThermo, - hMixtureThermo, + hPsiMixtureThermo, multiComponentMixture, - sutherlandTransport, - janafThermo, - perfectGas + gasThermoPhysics ); -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Reaction thermo - -defineTemplateTypeNameAndDebug(hMixtureThermo<reactingMixture>, 0); - -typedef hMixtureThermo<reactingMixture> hMixtureThermoReactingMixture; +// Multi-component reaction thermo -addToRunTimeSelectionTable +makeCombustionMixtureThermo ( hCombustionThermo, - hMixtureThermoReactingMixture, - fvMesh -); - -addToRunTimeSelectionTable -( - basicThermo, - hMixtureThermoReactingMixture, - fvMesh + hPsiMixtureThermo, + reactingMixture, + gasThermoPhysics ); diff --git a/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/makeCombustionThermo.H b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/makeCombustionThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..4ee0c2a022a3ed2c37656e4910724923b580a2b4 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/makeCombustionThermo.H @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +InClass + Foam::hCombustionThermo + +Description + +\*---------------------------------------------------------------------------*/ + +#ifndef makeCombustionThermo_H +#define makeCombustionThermo_H + +#include "addToRunTimeSelectionTable.H" +#include "basicPsiThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeCombustionThermo(CThermo,MixtureThermo,Mixture,Transport,Thermo,EqnOfState) \ + \ +typedef MixtureThermo \ + <Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState; \ + \ +defineTemplateTypeNameAndDebugWithName \ +( \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + #MixtureThermo \ + "<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", \ + 0 \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + basicPsiThermo, \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + fvMesh \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + CThermo, \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + fvMesh \ +) + + +#define makeCombustionMixtureThermo(CThermo,MixtureThermo,Mixture,ThermoPhys) \ + \ +typedef MixtureThermo<Mixture<ThermoPhys> > \ + MixtureThermo##Mixture##ThermoPhys; \ + \ +defineTemplateTypeNameAndDebugWithName \ +( \ + MixtureThermo##Mixture##ThermoPhys, \ + #MixtureThermo"<"#Mixture"<"#ThermoPhys">>", \ + 0 \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + basicPsiThermo, \ + MixtureThermo##Mixture##ThermoPhys, \ + fvMesh \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + CThermo, \ + MixtureThermo##Mixture##ThermoPhys, \ + fvMesh \ +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/newhCombustionThermo.C b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/newhCombustionThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..788a298d0d841b2d09d258cb2c35a904dd254bd7 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/hCombustionThermo/newhCombustionThermo.C @@ -0,0 +1,151 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hCombustionThermo.H" +#include "fvMesh.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::hCombustionThermo> Foam::hCombustionThermo::New +( + const fvMesh& mesh +) +{ + word hCombustionThermoTypeName; + + // Enclose the creation of the thermophysicalProperties to ensure it is + // deleted before the turbulenceModel is created otherwise the dictionary + // is entered in the database twice + { + IOdictionary thermoDict + ( + IOobject + ( + "thermophysicalProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + thermoDict.lookup("thermoType") >> hCombustionThermoTypeName; + } + + Info<< "Selecting thermodynamics package " << hCombustionThermoTypeName + << endl; + + fvMeshConstructorTable::iterator cstrIter = + fvMeshConstructorTablePtr_->find(hCombustionThermoTypeName); + + if (cstrIter == fvMeshConstructorTablePtr_->end()) + { + FatalErrorIn("hCombustionThermo::New(const fvMesh&)") + << "Unknown hCombustionThermo type " + << hCombustionThermoTypeName << nl << nl + << "Valid hCombustionThermo types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl + << exit(FatalError); + } + + return autoPtr<hCombustionThermo>(cstrIter()(mesh)); +} + + +Foam::autoPtr<Foam::hCombustionThermo> Foam::hCombustionThermo::NewType +( + const fvMesh& mesh, + const word& thermoType +) +{ + word hCombustionThermoTypeName; + + // Enclose the creation of the thermophysicalProperties to ensure it is + // deleted before the turbulenceModel is created otherwise the dictionary + // is entered in the database twice + { + IOdictionary thermoDict + ( + IOobject + ( + "thermophysicalProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + thermoDict.lookup("thermoType") >> hCombustionThermoTypeName; + + if (hCombustionThermoTypeName.find(thermoType) == string::npos) + { + wordList allModels = fvMeshConstructorTablePtr_->toc(); + DynamicList<word> validModels; + forAll(allModels, i) + { + if (allModels[i].find(thermoType) != string::npos) + { + validModels.append(allModels[i]); + } + } + + FatalErrorIn + ( + "autoPtr<hCombustionThermo> hCombustionThermo::NewType" + "(" + "const fvMesh&, " + "const word&" + ")" + ) << "Inconsistent thermo package selected:" << nl << nl + << hCombustionThermoTypeName << nl << nl << "Please select a " + << "thermo package based on " << thermoType + << ". Valid options include:" << nl << validModels << nl + << exit(FatalError); + } + } + + Info<< "Selecting thermodynamics package " << hCombustionThermoTypeName + << endl; + + fvMeshConstructorTable::iterator cstrIter = + fvMeshConstructorTablePtr_->find(hCombustionThermoTypeName); + + if (cstrIter == fvMeshConstructorTablePtr_->end()) + { + FatalErrorIn("hCombustionThermo::New(const fvMesh&)") + << "Unknown hCombustionThermo type " + << hCombustionThermoTypeName << nl << nl + << "Valid hCombustionThermo types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl + << exit(FatalError); + } + + return autoPtr<hCombustionThermo>(cstrIter()(mesh)); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/hhuCombustionThermo/hhuCombustionThermo.C b/src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/hhuCombustionThermo.C similarity index 100% rename from src/thermophysicalModels/combustion/hhuCombustionThermo/hhuCombustionThermo.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/hhuCombustionThermo.C diff --git a/src/thermophysicalModels/combustion/hhuCombustionThermo/hhuCombustionThermo.H b/src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/hhuCombustionThermo.H similarity index 100% rename from src/thermophysicalModels/combustion/hhuCombustionThermo/hhuCombustionThermo.H rename to src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/hhuCombustionThermo.H diff --git a/src/thermophysicalModels/combustion/hhuCombustionThermo/hhuCombustionThermos.C b/src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/hhuCombustionThermos.C similarity index 100% rename from src/thermophysicalModels/combustion/hhuCombustionThermo/hhuCombustionThermos.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/hhuCombustionThermos.C diff --git a/src/thermophysicalModels/combustion/hhuCombustionThermo/newhhuCombustionThermo.C b/src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/newhhuCombustionThermo.C similarity index 100% rename from src/thermophysicalModels/combustion/hhuCombustionThermo/newhhuCombustionThermo.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/hhuCombustionThermo/newhhuCombustionThermo.C diff --git a/src/thermophysicalModels/combustion/mixtureThermos/hMixtureThermo/hMixtureThermo.C b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hPsiMixtureThermo/hPsiMixtureThermo.C similarity index 81% rename from src/thermophysicalModels/combustion/mixtureThermos/hMixtureThermo/hMixtureThermo.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hPsiMixtureThermo/hPsiMixtureThermo.C index 57d054ad43f118cc7e1d45875b2d4072d6dd8ed5..5a788049a62d2a649e1761ca4ae1df31f9d80047 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/hMixtureThermo/hMixtureThermo.C +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hPsiMixtureThermo/hPsiMixtureThermo.C @@ -24,49 +24,14 @@ License \*---------------------------------------------------------------------------*/ -#include "hMixtureThermo.H" +#include "hPsiMixtureThermo.H" #include "fvMesh.H" #include "fixedValueFvPatchFields.H" -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class MixtureType> -Foam::hMixtureThermo<MixtureType>::hMixtureThermo(const fvMesh& mesh) -: - hCombustionThermo(mesh), - MixtureType(*this, mesh) -{ - scalarField& hCells = h_.internalField(); - const scalarField& TCells = T_.internalField(); - - forAll(hCells, celli) - { - hCells[celli] = this->cellMixture(celli).H(TCells[celli]); - } - - forAll(h_.boundaryField(), patchi) - { - h_.boundaryField()[patchi] == h(T_.boundaryField()[patchi], patchi); - } - - hBoundaryCorrection(h_); - - calculate(); - psi_.oldTime(); // Switch on saving old time -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -template<class MixtureType> -Foam::hMixtureThermo<MixtureType>::~hMixtureThermo() -{} - - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class MixtureType> -void Foam::hMixtureThermo<MixtureType>::calculate() +void Foam::hPsiMixtureThermo<MixtureType>::calculate() { const scalarField& hCells = h_.internalField(); const scalarField& pCells = p_.internalField(); @@ -78,14 +43,14 @@ void Foam::hMixtureThermo<MixtureType>::calculate() forAll(TCells, celli) { - const typename MixtureType::thermoType& mixture_ = + const typename MixtureType::thermoType& mixture = this->cellMixture(celli); - TCells[celli] = mixture_.TH(hCells[celli], TCells[celli]); - psiCells[celli] = mixture_.psi(pCells[celli], TCells[celli]); + TCells[celli] = mixture.TH(hCells[celli], TCells[celli]); + psiCells[celli] = mixture.psi(pCells[celli], TCells[celli]); - muCells[celli] = mixture_.mu(TCells[celli]); - alphaCells[celli] = mixture_.alpha(TCells[celli]); + muCells[celli] = mixture.mu(TCells[celli]); + alphaCells[celli] = mixture.alpha(TCells[celli]); } forAll(T_.boundaryField(), patchi) @@ -103,42 +68,79 @@ void Foam::hMixtureThermo<MixtureType>::calculate() { forAll(pT, facei) { - const typename MixtureType::thermoType& mixture_ = + const typename MixtureType::thermoType& mixture = this->patchFaceMixture(patchi, facei); - ph[facei] = mixture_.H(pT[facei]); + ph[facei] = mixture.H(pT[facei]); - ppsi[facei] = mixture_.psi(pp[facei], pT[facei]); - pmu_[facei] = mixture_.mu(pT[facei]); - palpha_[facei] = mixture_.alpha(pT[facei]); + ppsi[facei] = mixture.psi(pp[facei], pT[facei]); + pmu_[facei] = mixture.mu(pT[facei]); + palpha_[facei] = mixture.alpha(pT[facei]); } } else { forAll(pT, facei) { - const typename MixtureType::thermoType& mixture_ = + const typename MixtureType::thermoType& mixture = this->patchFaceMixture(patchi, facei); - pT[facei] = mixture_.TH(ph[facei], pT[facei]); + pT[facei] = mixture.TH(ph[facei], pT[facei]); - ppsi[facei] = mixture_.psi(pp[facei], pT[facei]); - pmu_[facei] = mixture_.mu(pT[facei]); - palpha_[facei] = mixture_.alpha(pT[facei]); + ppsi[facei] = mixture.psi(pp[facei], pT[facei]); + pmu_[facei] = mixture.mu(pT[facei]); + palpha_[facei] = mixture.alpha(pT[facei]); } } } } +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hPsiMixtureThermo<MixtureType>::hPsiMixtureThermo(const fvMesh& mesh) +: + hCombustionThermo(mesh), + MixtureType(*this, mesh) +{ + scalarField& hCells = h_.internalField(); + const scalarField& TCells = T_.internalField(); + + forAll(hCells, celli) + { + hCells[celli] = this->cellMixture(celli).H(TCells[celli]); + } + + forAll(h_.boundaryField(), patchi) + { + h_.boundaryField()[patchi] == h(T_.boundaryField()[patchi], patchi); + } + + hBoundaryCorrection(h_); + + calculate(); + + // Switch on saving old time + psi_.oldTime(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hPsiMixtureThermo<MixtureType>::~hPsiMixtureThermo() +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class MixtureType> -void Foam::hMixtureThermo<MixtureType>::correct() +void Foam::hPsiMixtureThermo<MixtureType>::correct() { if (debug) { - Info<< "entering hMixtureThermo<MixtureType>::correct()" << endl; + Info<< "entering hPsiMixtureThermo<MixtureType>::correct()" << endl; } // force the saving of the old-time values @@ -148,14 +150,14 @@ void Foam::hMixtureThermo<MixtureType>::correct() if (debug) { - Info<< "exiting hMixtureThermo<MixtureType>::correct()" << endl; + Info<< "exiting hPsiMixtureThermo<MixtureType>::correct()" << endl; } } template<class MixtureType> Foam::tmp<Foam::volScalarField> -Foam::hMixtureThermo<MixtureType>::hs() const +Foam::hPsiMixtureThermo<MixtureType>::hs() const { const fvMesh& mesh = T_.mesh(); @@ -202,7 +204,7 @@ Foam::hMixtureThermo<MixtureType>::hs() const template<class MixtureType> Foam::tmp<Foam::volScalarField> -Foam::hMixtureThermo<MixtureType>::hc() const +Foam::hPsiMixtureThermo<MixtureType>::hc() const { const fvMesh& mesh = T_.mesh(); @@ -247,7 +249,7 @@ Foam::hMixtureThermo<MixtureType>::hc() const template<class MixtureType> Foam::tmp<Foam::scalarField> -Foam::hMixtureThermo<MixtureType>::h +Foam::hPsiMixtureThermo<MixtureType>::h ( const scalarField& T, const labelList& cells @@ -267,7 +269,7 @@ Foam::hMixtureThermo<MixtureType>::h template<class MixtureType> Foam::tmp<Foam::scalarField> -Foam::hMixtureThermo<MixtureType>::h +Foam::hPsiMixtureThermo<MixtureType>::h ( const scalarField& T, const label patchi @@ -287,7 +289,7 @@ Foam::hMixtureThermo<MixtureType>::h template<class MixtureType> Foam::tmp<Foam::scalarField> -Foam::hMixtureThermo<MixtureType>::Cp +Foam::hPsiMixtureThermo<MixtureType>::Cp ( const scalarField& T, const label patchi @@ -308,7 +310,7 @@ Foam::hMixtureThermo<MixtureType>::Cp template<class MixtureType> Foam::tmp<Foam::volScalarField> -Foam::hMixtureThermo<MixtureType>::Cp() const +Foam::hPsiMixtureThermo<MixtureType>::Cp() const { const fvMesh& mesh = T_.mesh(); @@ -349,7 +351,7 @@ Foam::hMixtureThermo<MixtureType>::Cp() const template<class MixtureType> -bool Foam::hMixtureThermo<MixtureType>::read() +bool Foam::hPsiMixtureThermo<MixtureType>::read() { if (hCombustionThermo::read()) { diff --git a/src/thermophysicalModels/combustion/mixtureThermos/hMixtureThermo/hMixtureThermo.H b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hPsiMixtureThermo/hPsiMixtureThermo.H similarity index 83% rename from src/thermophysicalModels/combustion/mixtureThermos/hMixtureThermo/hMixtureThermo.H rename to src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hPsiMixtureThermo/hPsiMixtureThermo.H index 62d7943400e809a9891c1684c82a3012cf3cc247..64503284478016985773a5cef53b5de87af8d299 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/hMixtureThermo/hMixtureThermo.H +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hPsiMixtureThermo/hPsiMixtureThermo.H @@ -23,18 +23,18 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::hMixtureThermo + Foam::hPsiMixtureThermo Description - Foam::hMixtureThermo + Foam::hPsiMixtureThermo SourceFiles - hMixtureThermo.C + hPsiMixtureThermo.C \*---------------------------------------------------------------------------*/ -#ifndef hMixtureThermo_H -#define hMixtureThermo_H +#ifndef hPsiMixtureThermo_H +#define hPsiMixtureThermo_H #include "hCombustionThermo.H" @@ -44,11 +44,11 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class hMixtureThermo Declaration + Class hPsiMixtureThermo Declaration \*---------------------------------------------------------------------------*/ template<class MixtureType> -class hMixtureThermo +class hPsiMixtureThermo : public hCombustionThermo, public MixtureType @@ -58,35 +58,35 @@ class hMixtureThermo void calculate(); //- Construct as copy (not implemented) - hMixtureThermo(const hMixtureThermo<MixtureType>&); + hPsiMixtureThermo(const hPsiMixtureThermo<MixtureType>&); public: //- Runtime type information - TypeName("hMixtureThermo"); + TypeName("hPsiMixtureThermo"); // Constructors //- Construct from mesh - hMixtureThermo(const fvMesh&); + hPsiMixtureThermo(const fvMesh&); //- Destructor - virtual ~hMixtureThermo(); + virtual ~hPsiMixtureThermo(); // Member functions - //- Return the compostion of the combustion mixture - virtual combustionMixture& composition() + //- Return the compostion of the multi-component mixture + virtual basicMultiComponentMixture& composition() { return *this; } - //- Return the compostion of the combustion mixture - virtual const combustionMixture& composition() const + //- Return the compostion of the multi-component mixture + virtual const basicMultiComponentMixture& composition() const { return *this; } @@ -100,6 +100,7 @@ public: //- Chemical enthalpy [J/kg] virtual tmp<volScalarField> hc() const; + // Fields derived from thermodynamic state variables //- Enthalpy for cell-set [J/kg] @@ -139,7 +140,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "hMixtureThermo.C" +# include "hPsiMixtureThermo.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.C b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.C similarity index 100% rename from src/thermophysicalModels/combustion/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.C rename to src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.C diff --git a/src/thermophysicalModels/combustion/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.H b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.H similarity index 93% rename from src/thermophysicalModels/combustion/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.H rename to src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.H index 99cf720488d528ae062af50470dd184cee98a359..5e9834e86c086b036855efa7f9ba3ae66a1a0e33 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.H +++ b/src/thermophysicalModels/reactionThermo/combustionThermo/mixtureThermos/hhuMixtureThermo/hhuMixtureThermo.H @@ -36,7 +36,7 @@ SourceFiles #ifndef hhuMixtureThermo_H #define hhuMixtureThermo_H -#include "hMixtureThermo.H" +//#include "hPsiMixtureThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class hhuMixtureThermo Declaration + Class hhuMixtureThermo Declaration \*---------------------------------------------------------------------------*/ template<class MixtureType> @@ -79,14 +79,14 @@ public: // Member functions - //- Return the compostion of the combustion mixture - virtual combustionMixture& composition() + //- Return the compostion of the multi-component mixture + virtual basicMultiComponentMixture& composition() { return *this; } - //- Return the compostion of the combustion mixture - virtual const combustionMixture& composition() const + //- Return the compostion of the multi-component mixture + virtual const basicMultiComponentMixture& composition() const { return *this; } diff --git a/src/thermophysicalModels/combustion/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.C b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.C similarity index 100% rename from src/thermophysicalModels/combustion/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.C rename to src/thermophysicalModels/reactionThermo/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.C diff --git a/src/thermophysicalModels/combustion/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.H b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.H similarity index 98% rename from src/thermophysicalModels/combustion/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.H rename to src/thermophysicalModels/reactionThermo/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.H index 6da82e29eb7a0748135f434c39408abf662f1866..d55a9585a10017ba20ec70678dbadc17290afa94 100644 --- a/src/thermophysicalModels/combustion/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.H +++ b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/fixedUnburntEnthalpy/fixedUnburntEnthalpyFvPatchScalarField.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class fixedUnburntEnthalpyFvPatchScalarField Declaration + Class fixedUnburntEnthalpyFvPatchScalarField Declaration \*---------------------------------------------------------------------------*/ class fixedUnburntEnthalpyFvPatchScalarField diff --git a/src/thermophysicalModels/combustion/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C similarity index 100% rename from src/thermophysicalModels/combustion/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C rename to src/thermophysicalModels/reactionThermo/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.C diff --git a/src/thermophysicalModels/combustion/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.H b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.H similarity index 98% rename from src/thermophysicalModels/combustion/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.H rename to src/thermophysicalModels/reactionThermo/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.H index 081ff77d91e7bf76934330f6edc08f69436ff90d..f237bb98ba814c18bc58286bc19b39f90a8aa497 100644 --- a/src/thermophysicalModels/combustion/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.H +++ b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/gradientUnburntEnthalpy/gradientUnburntEnthalpyFvPatchScalarField.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class gradientUnburntEnthalpyFvPatchScalarField Declaration + Class gradientUnburntEnthalpyFvPatchScalarField Declaration \*---------------------------------------------------------------------------*/ class gradientUnburntEnthalpyFvPatchScalarField diff --git a/src/thermophysicalModels/combustion/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C similarity index 100% rename from src/thermophysicalModels/combustion/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C rename to src/thermophysicalModels/reactionThermo/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.C diff --git a/src/thermophysicalModels/combustion/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.H b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.H similarity index 98% rename from src/thermophysicalModels/combustion/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.H rename to src/thermophysicalModels/reactionThermo/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.H index f97d9ebf2c2202696c445a3a8344a64f35b58779..28d6c939a44ee7bd468cbd467a6827220ed61833 100644 --- a/src/thermophysicalModels/combustion/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.H +++ b/src/thermophysicalModels/reactionThermo/derivedFvPatchFields/mixedUnburntEnthalpy/mixedUnburntEnthalpyFvPatchScalarField.H @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class mixedUnburntEnthalpyFvPatchScalarField Declaration + Class mixedUnburntEnthalpyFvPatchScalarField Declaration \*---------------------------------------------------------------------------*/ class mixedUnburntEnthalpyFvPatchScalarField diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/combustionMixture/combustionMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixture.C similarity index 88% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/combustionMixture/combustionMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixture.C index 0744a4e2ead014599f3ff00d532d7ee67e0c2c13..1016a33a97bb9d11a365fc09b3a96b91423da34e 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/combustionMixture/combustionMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixture.C @@ -24,17 +24,29 @@ License \*---------------------------------------------------------------------------*/ -#include "combustionMixture.H" -#include "fvMesh.H" +#include "basicMultiComponentMixture.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -namespace Foam +void Foam::basicMultiComponentMixture::correctMassFractions() { + volScalarField Yt = Y_[0]; + + for(label n=1; n<Y_.size(); n++) + { + Yt += Y_[n]; + } + + forAll (Y_, n) + { + Y_[n] /= Yt; + } +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -combustionMixture::combustionMixture +Foam::basicMultiComponentMixture::basicMultiComponentMixture ( const dictionary& thermoDict, const wordList& specieNames, @@ -107,11 +119,9 @@ combustionMixture::combustionMixture ); } } -} + correctMassFractions(); +} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/combustionMixture/combustionMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixture.H similarity index 67% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/combustionMixture/combustionMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixture.H index f109ace2ac149beeaa3a55e28033639198e019a3..a21485889a666654d49d88f5da946a35b12892a6 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/combustionMixture/combustionMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixture.H @@ -23,18 +23,18 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::combustionMixture + Foam::basicMultiComponentMixture Description combustion mixture SourceFiles - combustionMixture.C + basicMultiComponentMixture.C \*---------------------------------------------------------------------------*/ -#ifndef combustionMixture_H -#define combustionMixture_H +#ifndef basicMultiComponentMixture_H +#define basicMultiComponentMixture_H #include "volFields.H" #include "PtrList.H" @@ -46,29 +46,35 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class combustionMixture Declaration + Class basicMultiComponentMixture Declaration \*---------------------------------------------------------------------------*/ -class combustionMixture +class basicMultiComponentMixture { protected: // Protected data - //- The table of species + //- Table of specie names speciesTable species_; //- Species mass fractions PtrList<volScalarField> Y_; + // Protected member functions + + //- Correct the mass fractions to sum to 1 + void correctMassFractions(); + + public: // Constructors //- Construct from dictionary and mesh - combustionMixture + basicMultiComponentMixture ( const dictionary&, const wordList& specieNames, @@ -76,69 +82,47 @@ public: ); - // Destructor - - virtual ~combustionMixture() - {} + //- Destructor + virtual ~basicMultiComponentMixture() + {} // Member functions - //- Return the mass-fraction fields - PtrList<volScalarField>& Y() + //- Return the table of species + const speciesTable& species() const { - return Y_; + return species_; } + //- Return the mass-fraction fields + inline PtrList<volScalarField>& Y(); + //- Return the const mass-fraction fields - const PtrList<volScalarField>& Y() const - { - return Y_; - } + inline const PtrList<volScalarField>& Y() const; //- Return the mass-fraction field for a specie given by index - volScalarField& Y(const label i) - { - return Y_[i]; - } + inline volScalarField& Y(const label i); //- Return the const mass-fraction field for a specie given by index - const volScalarField& Y(const label i) const - { - return Y_[i]; - } + inline const volScalarField& Y(const label i) const; //- Return the mass-fraction field for a specie given by name - volScalarField& Y(const word& specieName) - { - return Y_[species_[specieName]]; - } + inline volScalarField& Y(const word& specieName); //- Return the const mass-fraction field for a specie given by name - const volScalarField& Y(const word& specieName) const - { - return Y_[species_[specieName]]; - } + inline const volScalarField& Y(const word& specieName) const; - //- does the mixture include this specie - bool contains(const word& specieName) const - { - return species_.contains(specieName); - } + //- Does the mixture include this specie? + inline bool contains(const word& specieName) const; - scalar fres(const scalar ft, const scalar stoicRatio) const - { - return max(ft - (1.0 - ft)/stoicRatio, 0.0); - } + inline scalar fres(const scalar ft, const scalar stoicRatio) const; - tmp<volScalarField> fres + inline tmp<volScalarField> fres ( const volScalarField& ft, const dimensionedScalar& stoicRatio - ) const - { - return max(ft - (scalar(1) - ft)/stoicRatio.value(), scalar(0)); - } + ) const; }; @@ -148,6 +132,10 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "basicMultiComponentMixtureI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixtureI.H b/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixtureI.H new file mode 100644 index 0000000000000000000000000000000000000000..593cb6c47b4a3404a2fd0d6cbafb6d5fe2f23678 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/mixtures/basicMultiComponentMixture/basicMultiComponentMixtureI.H @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +inline Foam::PtrList<Foam::volScalarField>& +Foam::basicMultiComponentMixture::Y() +{ + return Y_; +} + + +inline const Foam::PtrList<Foam::volScalarField>& +Foam::basicMultiComponentMixture::Y() const +{ + return Y_; +} + + +inline Foam::volScalarField& Foam::basicMultiComponentMixture::Y(const label i) +{ + return Y_[i]; +} + + +inline const Foam::volScalarField& Foam::basicMultiComponentMixture::Y +( + const label i +) const +{ + return Y_[i]; +} + + +inline Foam::volScalarField& Foam::basicMultiComponentMixture::Y +( + const word& specieName +) +{ + return Y_[species_[specieName]]; +} + + +inline const Foam::volScalarField& Foam::basicMultiComponentMixture::Y +( + const word& specieName +) const +{ + return Y_[species_[specieName]]; +} + + +inline bool Foam::basicMultiComponentMixture::contains +( + const word& specieName +) const +{ + return species_.contains(specieName); +} + + +inline Foam::scalar Foam::basicMultiComponentMixture::fres +( + const scalar ft, + const scalar stoicRatio +) const +{ + return max(ft - (1.0 - ft)/stoicRatio, 0.0); +} + + +inline Foam::tmp<Foam::volScalarField> Foam::basicMultiComponentMixture::fres +( + const volScalarField& ft, + const dimensionedScalar& stoicRatio +) const +{ + return max(ft - (scalar(1) - ft)/stoicRatio.value(), scalar(0)); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/dieselMixture/dieselMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/dieselMixture/dieselMixture.C similarity index 83% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/dieselMixture/dieselMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/dieselMixture/dieselMixture.C index 09a12153a9089e141d16b8d1bef66a969c35a6e4..ff069468315f6dbf56a08a628197f49da191d66d 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/dieselMixture/dieselMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/dieselMixture/dieselMixture.C @@ -27,28 +27,27 @@ License #include "dieselMixture.H" #include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // template<class ThermoType> -const char* dieselMixture<ThermoType>::specieNames_[2] = - {"ft", "fu"}; +const char* Foam::dieselMixture<ThermoType>::specieNames_[2] = {"ft", "fu"}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ThermoType> -dieselMixture<ThermoType>::dieselMixture +Foam::dieselMixture<ThermoType>::dieselMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - combustionMixture(thermoDict, speciesTable(nSpecies_, specieNames_), mesh), + basicMultiComponentMixture + ( + thermoDict, + speciesTable(nSpecies_, specieNames_), + mesh + ), stoicRatio_(thermoDict.lookup("stoichiometricAirFuelMassRatio")), @@ -66,7 +65,7 @@ dieselMixture<ThermoType>::dieselMixture // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ThermoType> -const ThermoType& dieselMixture<ThermoType>::mixture +const ThermoType& Foam::dieselMixture<ThermoType>::mixture ( const scalar ft, const scalar fu @@ -91,7 +90,7 @@ const ThermoType& dieselMixture<ThermoType>::mixture template<class ThermoType> -void dieselMixture<ThermoType>::read(const dictionary& thermoDict) +void Foam::dieselMixture<ThermoType>::read(const dictionary& thermoDict) { fuel_ = ThermoType(thermoDict.lookup("fuel")); oxidant_ = ThermoType(thermoDict.lookup("oxidant")); @@ -99,8 +98,4 @@ void dieselMixture<ThermoType>::read(const dictionary& thermoDict) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/dieselMixture/dieselMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/dieselMixture/dieselMixture.H similarity index 95% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/dieselMixture/dieselMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/dieselMixture/dieselMixture.H index 02e0605238d183a17cfc6ef2721c605656f7f00f..cc2a2e8fc2afda30ec8d4c5fac1ce01645685524 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/dieselMixture/dieselMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/dieselMixture/dieselMixture.H @@ -36,7 +36,7 @@ SourceFiles #ifndef dieselMixture_H #define dieselMixture_H -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,13 +44,13 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class dieselMixture Declaration + Class dieselMixture Declaration \*---------------------------------------------------------------------------*/ template<class ThermoType> class dieselMixture : - public combustionMixture + public basicMultiComponentMixture { // Private data @@ -84,10 +84,9 @@ public: dieselMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~dieselMixture() - {} + //- Destructor + virtual ~dieselMixture() + {} // Member functions diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/egrMixture/egrMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/egrMixture/egrMixture.C similarity index 84% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/egrMixture/egrMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/egrMixture/egrMixture.C index b61ad10f4be6f095cf4be9c6b8346ae51f599734..5e9e70e69f4916ca36bdbf5b70831f6ec1af1cea 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/egrMixture/egrMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/egrMixture/egrMixture.C @@ -27,27 +27,27 @@ License #include "egrMixture.H" #include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // template<class ThermoType> -const char* egrMixture<ThermoType>::specieNames_[3] = {"ft", "b", "egr"}; +const char* Foam::egrMixture<ThermoType>::specieNames_[3] = {"ft", "b", "egr"}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ThermoType> -egrMixture<ThermoType>::egrMixture +Foam::egrMixture<ThermoType>::egrMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - combustionMixture(thermoDict, speciesTable(nSpecies_, specieNames_), mesh), + basicMultiComponentMixture + ( + thermoDict, + speciesTable(nSpecies_, specieNames_), + mesh + ), stoicRatio_(thermoDict.lookup("stoichiometricAirFuelMassRatio")), @@ -66,7 +66,7 @@ egrMixture<ThermoType>::egrMixture // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ThermoType> -const ThermoType& egrMixture<ThermoType>::mixture +const ThermoType& Foam::egrMixture<ThermoType>::mixture ( const scalar ft, const scalar b, @@ -79,13 +79,13 @@ const ThermoType& egrMixture<ThermoType>::mixture } else { - + scalar fu = b*ft + (1.0 - b)*fres(ft, stoicRatio().value()); scalar ox = 1 - ft - (ft - fu)*stoicRatio().value(); - + fu *= (1.0 - egr); ox *= (1.0 - egr); - + scalar pr = 1 - fu - ox; mixture_ = fu/fuel_.W()*fuel_; @@ -98,7 +98,7 @@ const ThermoType& egrMixture<ThermoType>::mixture template<class ThermoType> -void egrMixture<ThermoType>::read(const dictionary& thermoDict) +void Foam::egrMixture<ThermoType>::read(const dictionary& thermoDict) { stoicRatio_ = thermoDict.lookup("stoichiometricAirFuelMassRatio"); @@ -108,8 +108,4 @@ void egrMixture<ThermoType>::read(const dictionary& thermoDict) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/egrMixture/egrMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/egrMixture/egrMixture.H similarity index 96% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/egrMixture/egrMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/egrMixture/egrMixture.H index fc1b3fba39b9b1abddda743ed1a482d8bb12fecc..e53029155006c848158e9fc1104da1ee41e6b323 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/egrMixture/egrMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/egrMixture/egrMixture.H @@ -36,7 +36,7 @@ SourceFiles #ifndef egrMixture_H #define egrMixture_H -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,13 +44,13 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class egrMixture Declaration + Class egrMixture Declaration \*---------------------------------------------------------------------------*/ template<class ThermoType> class egrMixture : - public combustionMixture + public basicMultiComponentMixture { // Private data @@ -90,10 +90,9 @@ public: egrMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~egrMixture() - {} + //- Destructor + virtual ~egrMixture() + {} // Member functions diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/homogeneousMixture/homogeneousMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/homogeneousMixture/homogeneousMixture.C similarity index 80% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/homogeneousMixture/homogeneousMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/homogeneousMixture/homogeneousMixture.C index e71614f3e7c368da372952ca0c3cc9c507bb1c19..09fbc701d82ddb7a9e23acec69cb09548687ccab 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/homogeneousMixture/homogeneousMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/homogeneousMixture/homogeneousMixture.C @@ -27,27 +27,27 @@ License #include "homogeneousMixture.H" #include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // template<class ThermoType> -const char* homogeneousMixture<ThermoType>::specieNames_[1] = {"b"}; +const char* Foam::homogeneousMixture<ThermoType>::specieNames_[1] = {"b"}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ThermoType> -homogeneousMixture<ThermoType>::homogeneousMixture +Foam::homogeneousMixture<ThermoType>::homogeneousMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - combustionMixture(thermoDict, speciesTable(nSpecies_, specieNames_), mesh), + basicMultiComponentMixture + ( + thermoDict, + speciesTable(nSpecies_, specieNames_), + mesh + ), reactants_(thermoDict.lookup("reactants")), products_(thermoDict.lookup("products")), @@ -59,7 +59,10 @@ homogeneousMixture<ThermoType>::homogeneousMixture // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ThermoType> -const ThermoType& homogeneousMixture<ThermoType>::mixture(const scalar b) const +const ThermoType& Foam::homogeneousMixture<ThermoType>::mixture +( + const scalar b +) const { if (b > 0.999) { @@ -80,15 +83,11 @@ const ThermoType& homogeneousMixture<ThermoType>::mixture(const scalar b) const template<class ThermoType> -void homogeneousMixture<ThermoType>::read(const dictionary& thermoDict) +void Foam::homogeneousMixture<ThermoType>::read(const dictionary& thermoDict) { reactants_ = ThermoType(thermoDict.lookup("reactants")); products_ = ThermoType(thermoDict.lookup("products")); } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/homogeneousMixture/homogeneousMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/homogeneousMixture/homogeneousMixture.H similarity index 94% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/homogeneousMixture/homogeneousMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/homogeneousMixture/homogeneousMixture.H index 50e1952f497890ae7a3f365869ea6a097b267c2c..91c495fcc516b8665a6867dc6be5bb44a8539f53 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/homogeneousMixture/homogeneousMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/homogeneousMixture/homogeneousMixture.H @@ -36,7 +36,7 @@ SourceFiles #ifndef homogeneousMixture_H #define homogeneousMixture_H -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,13 +44,13 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class homogeneousMixture Declaration + Class homogeneousMixture Declaration \*---------------------------------------------------------------------------*/ template<class ThermoType> class homogeneousMixture : - public combustionMixture + public basicMultiComponentMixture { // Private data @@ -81,10 +81,9 @@ public: homogeneousMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~homogeneousMixture() - {} + //- Destructor + virtual ~homogeneousMixture() + {} // Member functions diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/inhomogeneousMixture/inhomogeneousMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/inhomogeneousMixture/inhomogeneousMixture.C similarity index 83% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/inhomogeneousMixture/inhomogeneousMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/inhomogeneousMixture/inhomogeneousMixture.C index 0f916f5353fb8ee8f7861d0b55463921ec4b37d3..f491a70446b31f16db155f88e9f942d0cd49c191 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/inhomogeneousMixture/inhomogeneousMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/inhomogeneousMixture/inhomogeneousMixture.C @@ -27,27 +27,28 @@ License #include "inhomogeneousMixture.H" #include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // template<class ThermoType> -const char* inhomogeneousMixture<ThermoType>::specieNames_[2] = {"ft", "b"}; +const char* Foam::inhomogeneousMixture<ThermoType>::specieNames_[2] = + {"ft", "b"}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ThermoType> -inhomogeneousMixture<ThermoType>::inhomogeneousMixture +Foam::inhomogeneousMixture<ThermoType>::inhomogeneousMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - combustionMixture(thermoDict, speciesTable(nSpecies_, specieNames_), mesh), + basicMultiComponentMixture + ( + thermoDict, + speciesTable(nSpecies_, specieNames_), + mesh + ), stoicRatio_(thermoDict.lookup("stoichiometricAirFuelMassRatio")), @@ -65,7 +66,7 @@ inhomogeneousMixture<ThermoType>::inhomogeneousMixture // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ThermoType> -const ThermoType& inhomogeneousMixture<ThermoType>::mixture +const ThermoType& Foam::inhomogeneousMixture<ThermoType>::mixture ( const scalar ft, const scalar b @@ -91,7 +92,7 @@ const ThermoType& inhomogeneousMixture<ThermoType>::mixture template<class ThermoType> -void inhomogeneousMixture<ThermoType>::read(const dictionary& thermoDict) +void Foam::inhomogeneousMixture<ThermoType>::read(const dictionary& thermoDict) { stoicRatio_ = thermoDict.lookup("stoichiometricAirFuelMassRatio"); @@ -101,8 +102,4 @@ void inhomogeneousMixture<ThermoType>::read(const dictionary& thermoDict) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/inhomogeneousMixture/inhomogeneousMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/inhomogeneousMixture/inhomogeneousMixture.H similarity index 95% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/inhomogeneousMixture/inhomogeneousMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/inhomogeneousMixture/inhomogeneousMixture.H index cb95973f5413233aba935ecb80c13158f606963b..22fbb83f3ca0aa065e7fd0fad06535abe3d601f9 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/inhomogeneousMixture/inhomogeneousMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/inhomogeneousMixture/inhomogeneousMixture.H @@ -36,7 +36,7 @@ SourceFiles #ifndef inhomogeneousMixture_H #define inhomogeneousMixture_H -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,13 +44,13 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class inhomogeneousMixture Declaration + Class inhomogeneousMixture Declaration \*---------------------------------------------------------------------------*/ template<class ThermoType> class inhomogeneousMixture : - public combustionMixture + public basicMultiComponentMixture { // Private data @@ -87,10 +87,9 @@ public: inhomogeneousMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~inhomogeneousMixture() - {} + //- Destructor + virtual ~inhomogeneousMixture() + {} // Member functions diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/multiComponentMixture/multiComponentMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/multiComponentMixture/multiComponentMixture.C similarity index 73% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/multiComponentMixture/multiComponentMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/multiComponentMixture/multiComponentMixture.C index 5e27d6caebedc79a446e374e6219c652ebd266d6..521959a2e9c4907cab5d5341690a263bc800a5c3 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/multiComponentMixture/multiComponentMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/multiComponentMixture/multiComponentMixture.C @@ -25,17 +25,11 @@ License \*---------------------------------------------------------------------------*/ #include "multiComponentMixture.H" -#include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class ThermoType> -const ThermoType& multiComponentMixture<ThermoType>::constructSpeciesData +const ThermoType& Foam::multiComponentMixture<ThermoType>::constructSpeciesData ( const dictionary& thermoDict ) @@ -53,27 +47,10 @@ const ThermoType& multiComponentMixture<ThermoType>::constructSpeciesData } -template<class ThermoType> -void multiComponentMixture<ThermoType>::correctMassFractions() -{ - volScalarField Yt = Y_[0]; - - for(label n=1; n<Y_.size(); n++) - { - Yt += Y_[n]; - } - - forAll (Y_, n) - { - Y_[n] /= Yt; - } -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ThermoType> -multiComponentMixture<ThermoType>::multiComponentMixture +Foam::multiComponentMixture<ThermoType>::multiComponentMixture ( const dictionary& thermoDict, const wordList& specieNames, @@ -81,7 +58,7 @@ multiComponentMixture<ThermoType>::multiComponentMixture const fvMesh& mesh ) : - combustionMixture(thermoDict, specieNames, mesh), + basicMultiComponentMixture(thermoDict, specieNames, mesh), speciesData_(species_.size()), mixture_("mixture", *specieThermoData[specieNames[0]]) { @@ -93,30 +70,26 @@ multiComponentMixture<ThermoType>::multiComponentMixture new ThermoType(*specieThermoData[species_[i]]) ); } - - correctMassFractions(); } template<class ThermoType> -multiComponentMixture<ThermoType>::multiComponentMixture +Foam::multiComponentMixture<ThermoType>::multiComponentMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - combustionMixture(thermoDict, thermoDict.lookup("species"), mesh), + basicMultiComponentMixture(thermoDict, thermoDict.lookup("species"), mesh), speciesData_(species_.size()), mixture_("mixture", constructSpeciesData(thermoDict)) -{ - correctMassFractions(); -} +{} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ThermoType> -const ThermoType& multiComponentMixture<ThermoType>::cellMixture +const ThermoType& Foam::multiComponentMixture<ThermoType>::cellMixture ( const label celli ) const @@ -127,13 +100,13 @@ const ThermoType& multiComponentMixture<ThermoType>::cellMixture { mixture_ += Y_[n][celli]/speciesData_[n].W()*speciesData_[n]; } - + return mixture_; } template<class ThermoType> -const ThermoType& multiComponentMixture<ThermoType>::patchFaceMixture +const ThermoType& Foam::multiComponentMixture<ThermoType>::patchFaceMixture ( const label patchi, const label facei @@ -149,13 +122,16 @@ const ThermoType& multiComponentMixture<ThermoType>::patchFaceMixture Y_[n].boundaryField()[patchi][facei] /speciesData_[n].W()*speciesData_[n]; } - + return mixture_; } template<class ThermoType> -void multiComponentMixture<ThermoType>::read(const dictionary& thermoDict) +void Foam::multiComponentMixture<ThermoType>::read +( + const dictionary& thermoDict +) { forAll(species_, i) { @@ -164,8 +140,4 @@ void multiComponentMixture<ThermoType>::read(const dictionary& thermoDict) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/multiComponentMixture/multiComponentMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/multiComponentMixture/multiComponentMixture.H similarity index 95% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/multiComponentMixture/multiComponentMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/multiComponentMixture/multiComponentMixture.H index e0298314980f4a919f65936c6c5abe7f837b02bc..cb02f56683ee715c04e479cc988fc721b3685561 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/multiComponentMixture/multiComponentMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/multiComponentMixture/multiComponentMixture.H @@ -36,7 +36,7 @@ SourceFiles #ifndef multiComponentMixture_H #define multiComponentMixture_H -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" #include "HashPtrTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,13 +45,13 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class multiComponentMixture Declaration + Class multiComponentMixture Declaration \*---------------------------------------------------------------------------*/ template<class ThermoType> class multiComponentMixture : - public combustionMixture + public basicMultiComponentMixture { // Private data @@ -96,10 +96,9 @@ public: multiComponentMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~multiComponentMixture() - {} + //- Destructor + virtual ~multiComponentMixture() + {} // Member functions diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/reactingMixture/reactingMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C similarity index 70% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/reactingMixture/reactingMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C index 9c020b3ade387de1c9c064c85be56bb53bb93efc..0247c643dfa4cbf72007e90d98979d969ca9f44a 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/reactingMixture/reactingMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C @@ -27,44 +27,41 @@ License #include "reactingMixture.H" #include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -reactingMixture::reactingMixture +template<class ThermoType> +Foam::reactingMixture<ThermoType>::reactingMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - autoPtr<chemistryReader>(chemistryReader::New(thermoDict)), - multiComponentMixture<chemistryReader::reactionThermo> + autoPtr<chemistryReader<ThermoType> > + ( + chemistryReader<ThermoType>::New(thermoDict) + ), + multiComponentMixture<ThermoType> ( thermoDict, - autoPtr<chemistryReader>::operator()().species(), - autoPtr<chemistryReader>::operator()().speciesThermo(), + autoPtr<chemistryReader<ThermoType> >::operator()().species(), + autoPtr<chemistryReader<ThermoType> >::operator()().speciesThermo(), mesh ), - PtrList<chemistryReader::reaction> + PtrList<Reaction<ThermoType> > ( - autoPtr<chemistryReader>::operator()().reactions(), species_ + autoPtr<chemistryReader<ThermoType> >::operator()().reactions(), + this->species_ ) { - autoPtr<chemistryReader>::clear(); + autoPtr<chemistryReader<ThermoType> >::clear(); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void reactingMixture::read(const dictionary& thermoDict) +template<class ThermoType> +void Foam::reactingMixture<ThermoType>::read(const dictionary& thermoDict) {} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/reactingMixture/reactingMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H similarity index 82% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/reactingMixture/reactingMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H index a280ed834a5d1611f712e1b7d67d0bc42bb406d0..be8aa476c5617a451f390bc92d727c101cea531b 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/reactingMixture/reactingMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H @@ -45,24 +45,16 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class reactingMixture Declaration + Class reactingMixture Declaration \*---------------------------------------------------------------------------*/ +template<class ThermoType> class reactingMixture : - public autoPtr<chemistryReader>, - public multiComponentMixture<chemistryReader::reactionThermo>, - public PtrList<chemistryReader::reaction> + public autoPtr<chemistryReader<ThermoType> >, + public multiComponentMixture<ThermoType>, + public PtrList<Reaction<ThermoType> > { - -public: - - typedef chemistryReader::reaction reaction; - typedef chemistryReader::reactionThermo reactionThermo; - - -private: - // Private member functions //- Disallow default bitwise copy construct @@ -74,16 +66,19 @@ private: public: + //- The type of thermo package this mixture is instantiated for + typedef ThermoType thermoType; + + // Constructors //- Construct from dictionary and mesh reactingMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~reactingMixture() - {} + //- Destructor + virtual ~reactingMixture() + {} // Member functions @@ -99,6 +94,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "reactingMixture.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.C similarity index 82% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.C rename to src/thermophysicalModels/reactionThermo/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.C index 06a4e0f9ba24fc08b71802c6d645c2246caae4b0..82476163ea6a2940d327f00c16cd6a4811610b60 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.C @@ -27,28 +27,28 @@ License #include "veryInhomogeneousMixture.H" #include "fvMesh.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // template<class ThermoType> -const char* veryInhomogeneousMixture<ThermoType>::specieNames_[3] = +const char* Foam::veryInhomogeneousMixture<ThermoType>::specieNames_[3] = {"ft", "fu", "b"}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class ThermoType> -veryInhomogeneousMixture<ThermoType>::veryInhomogeneousMixture +Foam::veryInhomogeneousMixture<ThermoType>::veryInhomogeneousMixture ( const dictionary& thermoDict, const fvMesh& mesh ) : - combustionMixture(thermoDict, speciesTable(nSpecies_, specieNames_), mesh), + basicMultiComponentMixture + ( + thermoDict, + speciesTable(nSpecies_, specieNames_), + mesh + ), stoicRatio_(thermoDict.lookup("stoichiometricAirFuelMassRatio")), @@ -67,7 +67,7 @@ veryInhomogeneousMixture<ThermoType>::veryInhomogeneousMixture // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class ThermoType> -const ThermoType& veryInhomogeneousMixture<ThermoType>::mixture +const ThermoType& Foam::veryInhomogeneousMixture<ThermoType>::mixture ( const scalar ft, const scalar fu @@ -92,7 +92,10 @@ const ThermoType& veryInhomogeneousMixture<ThermoType>::mixture template<class ThermoType> -void veryInhomogeneousMixture<ThermoType>::read(const dictionary& thermoDict) +void Foam::veryInhomogeneousMixture<ThermoType>::read +( + const dictionary& thermoDict +) { fuel_ = ThermoType(thermoDict.lookup("fuel")); oxidant_ = ThermoType(thermoDict.lookup("oxidant")); @@ -100,8 +103,4 @@ void veryInhomogeneousMixture<ThermoType>::read(const dictionary& thermoDict) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.H similarity index 95% rename from src/thermophysicalModels/combustion/mixtureThermos/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.H rename to src/thermophysicalModels/reactionThermo/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.H index fe0e1a7b69ba34a2f17e071e32ac47b1f5dce355..c257334690649b27ca90491f37a07088f01e32b9 100644 --- a/src/thermophysicalModels/combustion/mixtureThermos/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.H +++ b/src/thermophysicalModels/reactionThermo/mixtures/veryInhomogeneousMixture/veryInhomogeneousMixture.H @@ -36,7 +36,7 @@ SourceFiles #ifndef veryInhomogeneousMixture_H #define veryInhomogeneousMixture_H -#include "combustionMixture.H" +#include "basicMultiComponentMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -44,13 +44,13 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class veryInhomogeneousMixture Declaration + Class veryInhomogeneousMixture Declaration \*---------------------------------------------------------------------------*/ template<class ThermoType> class veryInhomogeneousMixture : - public combustionMixture + public basicMultiComponentMixture { // Private data @@ -90,10 +90,9 @@ public: veryInhomogeneousMixture(const dictionary&, const fvMesh&); - // Destructor - - virtual ~veryInhomogeneousMixture() - {} + //- Destructor + virtual ~veryInhomogeneousMixture() + {} // Member functions diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermo.C b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..fca95dff16ae6b108ba5507eccff140072f8d37f --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermo.C @@ -0,0 +1,67 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hReactionThermo.H" +#include "fvMesh.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(hReactionThermo, 0); + defineRunTimeSelectionTable(hReactionThermo, fvMesh); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::hReactionThermo::hReactionThermo(const fvMesh& mesh) +: + basicRhoThermo(mesh), + + h_ + ( + IOobject + ( + "h", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, 0, 0), + this->hBoundaryTypes() + ) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::hReactionThermo::~hReactionThermo() +{} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermo.H b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..3d5c37614c3c16e3ec5fd7786bc667da322bb900 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermo.H @@ -0,0 +1,150 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::hReactionThermo + +Description + Foam::hReactionThermo + +SourceFiles + hReactionThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef hReactionThermo_H +#define hReactionThermo_H + +#include "basicRhoThermo.H" +#include "basicMultiComponentMixture.H" +#include "autoPtr.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class hReactionThermo Declaration +\*---------------------------------------------------------------------------*/ + +class hReactionThermo +: + public basicRhoThermo +{ + +protected: + + // Protected data + + //- Enthalpy field + volScalarField h_; + + +public: + + //- Runtime type information + TypeName("hReactionThermo"); + + + //- Declare run-time constructor selection tables + declareRunTimeSelectionTable + ( + autoPtr, + hReactionThermo, + fvMesh, + (const fvMesh& mesh), + (mesh) + ); + + + // Constructors + + //- Construct from dictionary and mesh + hReactionThermo(const fvMesh&); + + + // Selectors + + //- Standard selection based on fvMesh + static autoPtr<hReactionThermo> New(const fvMesh&); + + //- Select and check that package contains 'thermoType' + static autoPtr<hReactionThermo> NewType + ( + const fvMesh&, + const word& thermoType + ); + + + //- Destructor + virtual ~hReactionThermo(); + + + // Member functions + + //- Return the composition of the multi-component mixture + virtual basicMultiComponentMixture& composition() = 0; + + //- Return the composition of the multi-component mixture + virtual const basicMultiComponentMixture& composition() const = 0; + + + // Access to thermodynamic state variables + + //- Enthalpy [J/kg] + // Non-const access allowed for transport equations + virtual volScalarField& h() + { + return h_; + } + + //- Enthalpy [J/kg] + virtual const volScalarField& h() const + { + return h_; + } + + + //- Sensible enthalpy [J/kg] + virtual tmp<volScalarField> hs() const = 0; + + //- Chemical enthalpy [J/kg] + virtual tmp<volScalarField> hc() const = 0; + + //- Update properties + virtual void correct() = 0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermos.C b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermos.C new file mode 100644 index 0000000000000000000000000000000000000000..cafc62c4946e8bff9c0e15c07aa14efdb7c23830 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/hReactionThermos.C @@ -0,0 +1,171 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "makeReactionThermo.H" + +#include "hReactionThermo.H" +#include "hRhoMixtureThermo.H" + +#include "perfectGas.H" + +#include "hConstThermo.H" +#include "janafThermo.H" +#include "specieThermo.H" + +#include "constTransport.H" +#include "sutherlandTransport.H" + +#include "homogeneousMixture.H" +#include "inhomogeneousMixture.H" +#include "veryInhomogeneousMixture.H" +#include "dieselMixture.H" +#include "multiComponentMixture.H" +#include "reactingMixture.H" + +#include "thermoPhysicsTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + homogeneousMixture, + constTransport, + hConstThermo, + perfectGas +); + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + inhomogeneousMixture, + constTransport, + hConstThermo, + perfectGas +); + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + veryInhomogeneousMixture, + constTransport, + hConstThermo, + perfectGas +); + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + homogeneousMixture, + sutherlandTransport, + janafThermo, + perfectGas +); + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + inhomogeneousMixture, + sutherlandTransport, + janafThermo, + perfectGas +); + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + veryInhomogeneousMixture, + sutherlandTransport, + janafThermo, + perfectGas +); + + +makeReactionThermo +( + hReactionThermo, + hRhoMixtureThermo, + dieselMixture, + sutherlandTransport, + janafThermo, + perfectGas +); + + +// Multi-component thermo + +makeReactionMixtureThermo +( + hReactionThermo, + hRhoMixtureThermo, + multiComponentMixture, + icoPoly8ThermoPhysics +); + +makeReactionMixtureThermo +( + hReactionThermo, + hRhoMixtureThermo, + multiComponentMixture, + gasThermoPhysics +); + + +// Multi-component reaction thermo + +makeReactionMixtureThermo +( + hReactionThermo, + hRhoMixtureThermo, + reactingMixture, + icoPoly8ThermoPhysics +); + +makeReactionMixtureThermo +( + hReactionThermo, + hRhoMixtureThermo, + reactingMixture, + gasThermoPhysics +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/makeReactionThermo.H b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/makeReactionThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..a74bded0bf74e571e8e43d9d9126075112034ea9 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/makeReactionThermo.H @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +InClass + Foam::hReactionThermo + +Description + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactionThermo_H +#define makeReactionThermo_H + +#include "addToRunTimeSelectionTable.H" +#include "basicRhoThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactionThermo(CThermo,MixtureThermo,Mixture,Transport,Thermo,EqnOfState) \ + \ +typedef MixtureThermo \ + <Mixture<Transport<specieThermo<Thermo<EqnOfState> > > > > \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState; \ + \ +defineTemplateTypeNameAndDebugWithName \ +( \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + #MixtureThermo \ + "<"#Mixture"<"#Transport"<specieThermo<"#Thermo"<"#EqnOfState">>>>>", \ + 0 \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + basicRhoThermo, \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + fvMesh \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + CThermo, \ + MixtureThermo##Mixture##Transport##Thermo##EqnOfState, \ + fvMesh \ +) + + +#define makeReactionMixtureThermo(CThermo,MixtureThermo,Mixture,ThermoPhys) \ + \ +typedef MixtureThermo<Mixture<ThermoPhys> > \ + MixtureThermo##Mixture##ThermoPhys; \ + \ +defineTemplateTypeNameAndDebugWithName \ +( \ + MixtureThermo##Mixture##ThermoPhys, \ + #MixtureThermo"<"#Mixture"<"#ThermoPhys">>", \ + 0 \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + basicRhoThermo, \ + MixtureThermo##Mixture##ThermoPhys, \ + fvMesh \ +); \ + \ +addToRunTimeSelectionTable \ +( \ + CThermo, \ + MixtureThermo##Mixture##ThermoPhys, \ + fvMesh \ +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/newhReactionThermo.C b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/newhReactionThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..688b37b6d2a726a82771119fd896c3649bcf59df --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/hReactionThermo/newhReactionThermo.C @@ -0,0 +1,151 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hReactionThermo.H" +#include "fvMesh.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::hReactionThermo> Foam::hReactionThermo::New +( + const fvMesh& mesh +) +{ + word hReactionThermoTypeName; + + // Enclose the creation of the thermophysicalProperties to ensure it is + // deleted before the turbulenceModel is created otherwise the dictionary + // is entered in the database twice + { + IOdictionary thermoDict + ( + IOobject + ( + "thermophysicalProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + thermoDict.lookup("thermoType") >> hReactionThermoTypeName; + } + + Info<< "Selecting thermodynamics package " << hReactionThermoTypeName + << endl; + + fvMeshConstructorTable::iterator cstrIter = + fvMeshConstructorTablePtr_->find(hReactionThermoTypeName); + + if (cstrIter == fvMeshConstructorTablePtr_->end()) + { + FatalErrorIn("hReactionThermo::New(const fvMesh&)") + << "Unknown hReactionThermo type " + << hReactionThermoTypeName << nl << nl + << "Valid hReactionThermo types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl + << exit(FatalError); + } + + return autoPtr<hReactionThermo>(cstrIter()(mesh)); +} + + +Foam::autoPtr<Foam::hReactionThermo> Foam::hReactionThermo::NewType +( + const fvMesh& mesh, + const word& thermoType +) +{ + word hReactionThermoTypeName; + + // Enclose the creation of the thermophysicalProperties to ensure it is + // deleted before the turbulenceModel is created otherwise the dictionary + // is entered in the database twice + { + IOdictionary thermoDict + ( + IOobject + ( + "thermophysicalProperties", + mesh.time().constant(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + thermoDict.lookup("thermoType") >> hReactionThermoTypeName; + + if (hReactionThermoTypeName.find(thermoType) == string::npos) + { + wordList allModels = fvMeshConstructorTablePtr_->toc(); + DynamicList<word> validModels; + forAll(allModels, i) + { + if (allModels[i].find(thermoType) != string::npos) + { + validModels.append(allModels[i]); + } + } + + FatalErrorIn + ( + "autoPtr<hReactionThermo> hReactionThermo::NewType" + "(" + "const fvMesh&, " + "const word&" + ")" + ) << "Inconsistent thermo package selected:" << nl << nl + << hReactionThermoTypeName << nl << nl << "Please select a " + << "thermo package based on " << thermoType + << ". Valid options include:" << nl << validModels << nl + << exit(FatalError); + } + } + + Info<< "Selecting thermodynamics package " << hReactionThermoTypeName + << endl; + + fvMeshConstructorTable::iterator cstrIter = + fvMeshConstructorTablePtr_->find(hReactionThermoTypeName); + + if (cstrIter == fvMeshConstructorTablePtr_->end()) + { + FatalErrorIn("hReactionThermo::New(const fvMesh&)") + << "Unknown hReactionThermo type " + << hReactionThermoTypeName << nl << nl + << "Valid hReactionThermo types are:" << nl + << fvMeshConstructorTablePtr_->toc() << nl + << exit(FatalError); + } + + return autoPtr<hReactionThermo>(cstrIter()(mesh)); +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/mixtureThermos/hRhoMixtureThermo/hRhoMixtureThermo.C b/src/thermophysicalModels/reactionThermo/reactionThermo/mixtureThermos/hRhoMixtureThermo/hRhoMixtureThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..9cbf9202dee94885edbc428ad5d4f51a10d2a111 --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/mixtureThermos/hRhoMixtureThermo/hRhoMixtureThermo.C @@ -0,0 +1,367 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hRhoMixtureThermo.H" +#include "fvMesh.H" +#include "fixedValueFvPatchFields.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class MixtureType> +void Foam::hRhoMixtureThermo<MixtureType>::calculate() +{ + const scalarField& hCells = h_.internalField(); + const scalarField& pCells = p_.internalField(); + + scalarField& TCells = T_.internalField(); + scalarField& psiCells = psi_.internalField(); + scalarField& rhoCells = rho_.internalField(); + scalarField& muCells = mu_.internalField(); + scalarField& alphaCells = alpha_.internalField(); + + forAll(TCells, celli) + { + const typename MixtureType::thermoType& mixture = + this->cellMixture(celli); + + TCells[celli] = mixture.TH(hCells[celli], TCells[celli]); + psiCells[celli] = mixture.psi(pCells[celli], TCells[celli]); + rhoCells[celli] = mixture.rho(pCells[celli], TCells[celli]); + + muCells[celli] = mixture.mu(TCells[celli]); + alphaCells[celli] = mixture.alpha(TCells[celli]); + } + + forAll(T_.boundaryField(), patchi) + { + fvPatchScalarField& pp = p_.boundaryField()[patchi]; + fvPatchScalarField& pT = T_.boundaryField()[patchi]; + fvPatchScalarField& ppsi = psi_.boundaryField()[patchi]; + fvPatchScalarField& prho = rho_.boundaryField()[patchi]; + + fvPatchScalarField& ph = h_.boundaryField()[patchi]; + + fvPatchScalarField& pmu_ = mu_.boundaryField()[patchi]; + fvPatchScalarField& palpha_ = alpha_.boundaryField()[patchi]; + + if (pT.fixesValue()) + { + forAll(pT, facei) + { + const typename MixtureType::thermoType& mixture = + this->patchFaceMixture(patchi, facei); + + ph[facei] = mixture.H(pT[facei]); + + ppsi[facei] = mixture.psi(pp[facei], pT[facei]); + prho[facei] = mixture.rho(pp[facei], pT[facei]); + pmu_[facei] = mixture.mu(pT[facei]); + palpha_[facei] = mixture.alpha(pT[facei]); + } + } + else + { + forAll(pT, facei) + { + const typename MixtureType::thermoType& mixture = + this->patchFaceMixture(patchi, facei); + + pT[facei] = mixture.TH(ph[facei], pT[facei]); + + ppsi[facei] = mixture.psi(pp[facei], pT[facei]); + prho[facei] = mixture.rho(pp[facei], pT[facei]); + pmu_[facei] = mixture.mu(pT[facei]); + palpha_[facei] = mixture.alpha(pT[facei]); + } + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hRhoMixtureThermo<MixtureType>::hRhoMixtureThermo(const fvMesh& mesh) +: + hReactionThermo(mesh), + MixtureType(*this, mesh) +{ + scalarField& hCells = h_.internalField(); + const scalarField& TCells = T_.internalField(); + + forAll(hCells, celli) + { + hCells[celli] = this->cellMixture(celli).H(TCells[celli]); + } + + forAll(h_.boundaryField(), patchi) + { + h_.boundaryField()[patchi] == h(T_.boundaryField()[patchi], patchi); + } + + hBoundaryCorrection(h_); + + calculate(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class MixtureType> +Foam::hRhoMixtureThermo<MixtureType>::~hRhoMixtureThermo() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class MixtureType> +void Foam::hRhoMixtureThermo<MixtureType>::correct() +{ + if (debug) + { + Info<< "entering hRhoMixtureThermo<MixtureType>::correct()" << endl; + } + + calculate(); + + if (debug) + { + Info<< "exiting hRhoMixtureThermo<MixtureType>::correct()" << endl; + } +} + + +template<class MixtureType> +Foam::tmp<Foam::volScalarField> +Foam::hRhoMixtureThermo<MixtureType>::hs() const +{ + const fvMesh& mesh = T_.mesh(); + + tmp<volScalarField> ths + ( + new volScalarField + ( + IOobject + ( + "hs", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + h_.dimensions() + ) + ); + + volScalarField& hsf = ths(); + scalarField& hsCells = hsf.internalField(); + const scalarField& TCells = T_.internalField(); + + forAll(TCells, celli) + { + hsCells[celli] = this->cellMixture(celli).Hs(TCells[celli]); + } + + forAll(T_.boundaryField(), patchi) + { + scalarField& hsp = hsf.boundaryField()[patchi]; + const scalarField& Tp = T_.boundaryField()[patchi]; + + forAll(Tp, facei) + { + hsp[facei] = this->patchFaceMixture(patchi, facei).Hs(Tp[facei]); + } + } + + return ths; +} + + +template<class MixtureType> +Foam::tmp<Foam::volScalarField> +Foam::hRhoMixtureThermo<MixtureType>::hc() const +{ + const fvMesh& mesh = T_.mesh(); + + tmp<volScalarField> thc + ( + new volScalarField + ( + IOobject + ( + "hc", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + h_.dimensions() + ) + ); + + volScalarField& hcf = thc(); + scalarField& hcCells = hcf.internalField(); + + forAll(hcCells, celli) + { + hcCells[celli] = this->cellMixture(celli).Hc(); + } + + forAll(hcf.boundaryField(), patchi) + { + scalarField& hcp = hcf.boundaryField()[patchi]; + + forAll(hcp, facei) + { + hcp[facei] = this->patchFaceMixture(patchi, facei).Hc(); + } + } + + return thc; +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> +Foam::hRhoMixtureThermo<MixtureType>::h +( + const scalarField& T, + const labelList& cells +) const +{ + tmp<scalarField> th(new scalarField(T.size())); + scalarField& h = th(); + + forAll(T, celli) + { + h[celli] = this->cellMixture(cells[celli]).H(T[celli]); + } + + return th; +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> +Foam::hRhoMixtureThermo<MixtureType>::h +( + const scalarField& T, + const label patchi +) const +{ + tmp<scalarField> th(new scalarField(T.size())); + scalarField& h = th(); + + forAll(T, facei) + { + h[facei] = this->patchFaceMixture(patchi, facei).H(T[facei]); + } + + return th; +} + + +template<class MixtureType> +Foam::tmp<Foam::scalarField> +Foam::hRhoMixtureThermo<MixtureType>::Cp +( + const scalarField& T, + const label patchi +) const +{ + tmp<scalarField> tCp(new scalarField(T.size())); + + scalarField& cp = tCp(); + + forAll(T, facei) + { + cp[facei] = this->patchFaceMixture(patchi, facei).Cp(T[facei]); + } + + return tCp; +} + + +template<class MixtureType> +Foam::tmp<Foam::volScalarField> +Foam::hRhoMixtureThermo<MixtureType>::Cp() const +{ + const fvMesh& mesh = T_.mesh(); + + tmp<volScalarField> tCp + ( + new volScalarField + ( + IOobject + ( + "Cp", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionSet(0, 2, -2, -1, 0) + ) + ); + + volScalarField& cp = tCp(); + + scalarField& cpCells = cp.internalField(); + const scalarField& TCells = T_.internalField(); + + forAll(TCells, celli) + { + cpCells[celli] = this->cellMixture(celli).Cp(TCells[celli]); + } + + forAll(T_.boundaryField(), patchi) + { + cp.boundaryField()[patchi] = Cp(T_.boundaryField()[patchi], patchi); + } + + return tCp; +} + + +template<class MixtureType> +bool Foam::hRhoMixtureThermo<MixtureType>::read() +{ + if (hReactionThermo::read()) + { + MixtureType::read(*this); + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/reactionThermo/reactionThermo/mixtureThermos/hRhoMixtureThermo/hRhoMixtureThermo.H b/src/thermophysicalModels/reactionThermo/reactionThermo/mixtureThermos/hRhoMixtureThermo/hRhoMixtureThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..570f696bac41be646b72fdf814b648c1811b285f --- /dev/null +++ b/src/thermophysicalModels/reactionThermo/reactionThermo/mixtureThermos/hRhoMixtureThermo/hRhoMixtureThermo.H @@ -0,0 +1,150 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::hRhoMixtureThermo + +Description + Foam::hRhoMixtureThermo + +SourceFiles + hRhoMixtureThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef hRhoMixtureThermo_H +#define hRhoMixtureThermo_H + +#include "hReactionThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class hRhoMixtureThermo Declaration +\*---------------------------------------------------------------------------*/ + +template<class MixtureType> +class hRhoMixtureThermo +: + public hReactionThermo, + public MixtureType +{ + // Private member functions + + void calculate(); + + //- Construct as copy (not implemented) + hRhoMixtureThermo(const hRhoMixtureThermo<MixtureType>&); + + +public: + + //- Runtime type information + TypeName("hRhoMixtureThermo"); + + + // Constructors + + //- Construct from mesh + hRhoMixtureThermo(const fvMesh&); + + + //- Destructor + virtual ~hRhoMixtureThermo(); + + + // Member functions + + //- Return the compostion of the multi-component mixture + virtual basicMultiComponentMixture& composition() + { + return *this; + } + + //- Return the compostion of the multi-component mixture + virtual const basicMultiComponentMixture& composition() const + { + return *this; + } + + //- Update properties + virtual void correct(); + + //- Sensible enthalpy [J/kg] + virtual tmp<volScalarField> hs() const; + + //- Chemical enthalpy [J/kg] + virtual tmp<volScalarField> hc() const; + + + // Fields derived from thermodynamic state variables + + //- Enthalpy for cell-set [J/kg] + virtual tmp<scalarField> h + ( + const scalarField& T, + const labelList& cells + ) const; + + //- Enthalpy for patch [J/kg] + virtual tmp<scalarField> h + ( + const scalarField& T, + const label patchi + ) const; + + //- Heat capacity at constant pressure for patch [J/kg/K] + virtual tmp<scalarField> Cp + ( + const scalarField& T, + const label patchi + ) const; + + //- Heat capacity at constant pressure [J/kg/K] + virtual tmp<volScalarField> Cp() const; + + + //- Read thermophysicalProperties dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "hRhoMixtureThermo.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C b/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C index 2f9645138c9f020816f94fd413992f6b7f2443e6..8bb511e9cc9b7176e2c059f5075a429db16dbb16 100644 --- a/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C +++ b/src/thermophysicalModels/solidMixture/solidMixture/solidMixture.C @@ -34,7 +34,7 @@ Foam::solidMixture::solidMixture const dictionary& thermophysicalProperties ) : - components_(thermophysicalProperties.lookup("solidFuelComponents")), + components_(thermophysicalProperties.lookup("solidComponents")), properties_(components_.size()) { diff --git a/src/thermophysicalModels/solids/C/C.C b/src/thermophysicalModels/solids/C/C.C new file mode 100644 index 0000000000000000000000000000000000000000..1dbcfd2eed25f46a5948eef699d2717d5c5a0169 --- /dev/null +++ b/src/thermophysicalModels/solids/C/C.C @@ -0,0 +1,80 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "C.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(C, 0); + addToRunTimeSelectionTable(solid, C,); + addToRunTimeSelectionTable(solid, C, Istream); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::C::C() +: + solid(2010, 710, 0.04, 0.0, 1.0) +{ + WarningIn("C::C()") + << "Properties of graphite need to be checked!!!" + << endl; +} + + +Foam::C::C(const solid& s) +: + solid(s) +{} + + +Foam::C::C(Istream& is) +: + solid(is) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::C::writeData(Ostream& os) const +{ + solid::writeData(os); +} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const C& s) +{ + s.writeData(os); + return os; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/solids/C/C.H b/src/thermophysicalModels/solids/C/C.H new file mode 100644 index 0000000000000000000000000000000000000000..0a3110b55d63d7e60341fb029c5b2f3246ae3809 --- /dev/null +++ b/src/thermophysicalModels/solids/C/C.H @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::C + +Description + Graphite + +SourceFiles + C.C + +\*---------------------------------------------------------------------------*/ + +#ifndef solid_C_H +#define solid_C_H + +#include "solid.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class C; + +Ostream& operator<< +( + Ostream&, + const C& +); + + +/*---------------------------------------------------------------------------*\ + Class C Declaration +\*---------------------------------------------------------------------------*/ + +class C +: + public solid +{ +public: + + //- Runtime type information + TypeName("C"); + + + // Constructors + + //- Construct null + C(); + + //- Construct from solid + C(const solid& s); + + //- Construct from Istream + C(Istream& is); + + + // I-O + + //- Write the function coefficients + void writeData(Ostream& os) const; + + + //- Ostream Operator + friend Ostream& operator<<(Ostream& os, const C& s); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/solids/CaCO3/CaCO3.C b/src/thermophysicalModels/solids/CaCO3/CaCO3.C new file mode 100644 index 0000000000000000000000000000000000000000..77a4398322a48c74123ed77f490721d16ced4751 --- /dev/null +++ b/src/thermophysicalModels/solids/CaCO3/CaCO3.C @@ -0,0 +1,80 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "CaCO3.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(CaCO3, 0); + addToRunTimeSelectionTable(solid, CaCO3,); + addToRunTimeSelectionTable(solid, CaCO3, Istream); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::CaCO3::CaCO3() +: + solid(2710, 850, 1.3, 0.0, 1.0) +{ + WarningIn("CaCO3::CaCO3()") + << "Properties of CaCO3 need to be checked!!!" + << endl; +} + + +Foam::CaCO3::CaCO3(const solid& s) +: + solid(s) +{} + + +Foam::CaCO3::CaCO3(Istream& is) +: + solid(is) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::CaCO3::writeData(Ostream& os) const +{ + solid::writeData(os); +} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const CaCO3& s) +{ + s.writeData(os); + return os; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/solids/Cs/Cs.H b/src/thermophysicalModels/solids/CaCO3/CaCO3.H similarity index 73% rename from src/thermophysicalModels/solids/Cs/Cs.H rename to src/thermophysicalModels/solids/CaCO3/CaCO3.H index 648c5bf9106af5939873fa7b8c44042af7d6157c..a3336f2f77105e1651d314796172122bd50f5d3b 100644 --- a/src/thermophysicalModels/solids/Cs/Cs.H +++ b/src/thermophysicalModels/solids/CaCO3/CaCO3.H @@ -23,18 +23,18 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::Cs + Foam::CaCO3 Description - Graphite + Calcium carbonate (limestone) SourceFiles - Cs.C + CaCO3.C \*---------------------------------------------------------------------------*/ -#ifndef solid_Cs_H -#define solid_Cs_H +#ifndef solid_CaCO3_H +#define solid_CaCO3_H #include "solid.H" @@ -43,11 +43,20 @@ SourceFiles namespace Foam { +class CaCO3; + +Ostream& operator<< +( + Ostream&, + const CaCO3& +); + + /*---------------------------------------------------------------------------*\ - Class Cs Declaration + Class CaCO3 Declaration \*---------------------------------------------------------------------------*/ -class Cs +class CaCO3 : public solid { @@ -55,50 +64,30 @@ class Cs public: //- Runtime type information - TypeName("Cs"); + TypeName("CaCO3"); // Constructors //- Construct null - Cs() - : - solid(2010, 710, 0.04, 0.0, 1.0) - { - WarningIn("Cs::Cs()") - << "Properties of graphite need to be checked!!!" - << endl; - } + CaCO3(); //- Construct from solid - Cs - ( - const solid& s - ) - : - solid(s) - {} + CaCO3(const solid& s); //- Construct from Istream - Cs(Istream& is) - : - solid(is) - {} + CaCO3(Istream& is); + + + // I-O //- Write the function coefficients - void writeData(Ostream& os) const - { - solid::writeData(os); - } + void writeData(Ostream& os) const; // Ostream Operator - friend Ostream& operator<<(Ostream& os, const Cs& s) - { - s.writeData(os); - return os; - } + friend Ostream& operator<<(Ostream& os, const CaCO3& s); }; diff --git a/src/thermophysicalModels/solids/Make/files b/src/thermophysicalModels/solids/Make/files index 407737ead160d245904cd9b74f15069d29dbfec3..5da964b97f8ac1237b2d8f8c2dfd8eec89fadc7c 100644 --- a/src/thermophysicalModels/solids/Make/files +++ b/src/thermophysicalModels/solids/Make/files @@ -1,5 +1,8 @@ solid/solid.C +solid/newSolid.C + ash/ash.C -Cs/Cs.C +C/C.C +CaCO3/CaCO3.C LIB = $(FOAM_LIBBIN)/libsolids diff --git a/src/thermophysicalModels/solids/ash/ash.C b/src/thermophysicalModels/solids/ash/ash.C index c63318e399967e59a27af428b3b5f806f285fb9f..c904131aab258699500b7aee1175dc63bd96c71b 100644 --- a/src/thermophysicalModels/solids/ash/ash.C +++ b/src/thermophysicalModels/solids/ash/ash.C @@ -27,19 +27,54 @@ License #include "ash.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(ash, 0); + addToRunTimeSelectionTable(solid, ash,); + addToRunTimeSelectionTable(solid, ash, Istream); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::ash::ash() +: + solid(2010, 710, 0.04, 0.0, 1.0) +{ + WarningIn("ash::ash()") + << "Properties of ash need to be checked!!!" + << endl; +} + + +Foam::ash::ash(const solid& s) +: + solid(s) +{} -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTypeNameAndDebug(ash, 0); -addToRunTimeSelectionTable(solid, ash,); -addToRunTimeSelectionTable(solid, ash, Istream); +Foam::ash::ash(Istream& is) +: + solid(is) +{} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace Foam +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::ash::writeData(Ostream& os) const +{ + solid::writeData(os); +} + + +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const ash& s) +{ + s.writeData(os); + return os; +} + // ************************************************************************* // diff --git a/src/thermophysicalModels/solids/ash/ash.H b/src/thermophysicalModels/solids/ash/ash.H index e9de1e74db5783b805e14aa301f4ab5cdf477a85..f4bab78fdccbada0ebc326de653b45ac8c9b1389 100644 --- a/src/thermophysicalModels/solids/ash/ash.H +++ b/src/thermophysicalModels/solids/ash/ash.H @@ -43,6 +43,15 @@ SourceFiles namespace Foam { +class ash; + +Ostream& operator<< +( + Ostream&, + const ash& +); + + /*---------------------------------------------------------------------------*\ Class ash Declaration \*---------------------------------------------------------------------------*/ @@ -61,45 +70,24 @@ public: // Constructors //- Construct null - ash() - : -// rho Cp K Hf e -// [kg/m3] [J/(kg.K)] [W/(m.K)] [J/kg] [-] - solid(2010, 710, 0.04, 0.0, 1.0) // TODO - { - WarningIn("ash::ash()") - << "Properties of ash need to be checked!!!" - << endl; - } - - ash - ( - const solid& s - ) - : - solid(s) - {} + ash(); + + //- Construct from solid + ash(const solid& s); //- Construct from Istream - ash(Istream& is) - : - solid(is) - {} + ash(Istream& is); + + + // I-O //- Write the function coefficients - void writeData(Ostream& os) const - { - solid::writeData(os); - } + void writeData(Ostream& os) const; // Ostream Operator - friend Ostream& operator<<(Ostream& os, const ash& s) - { - s.writeData(os); - return os; - } + friend Ostream& operator<<(Ostream& os, const ash& s); }; diff --git a/src/thermophysicalModels/solids/solid/newSolid.C b/src/thermophysicalModels/solids/solid/newSolid.C new file mode 100644 index 0000000000000000000000000000000000000000..445a98a00d31e5df5b3620ed0521a2d394ebdd79 --- /dev/null +++ b/src/thermophysicalModels/solids/solid/newSolid.C @@ -0,0 +1,89 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "solid.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::solid> Foam::solid::New(Istream& is) +{ + if (debug) + { + Info<< "solid::New(Istream&): " + << "constructing solid" + << endl; + } + + word solidType(is); + + word coeffs(is); + + if (coeffs == "defaultCoeffs") + { + ConstructorTable::iterator cstrIter = + ConstructorTablePtr_->find(solidType); + + if (cstrIter == ConstructorTablePtr_->end()) + { + FatalErrorIn("solid::New(Istream&)") + << "Unknown solid type " << solidType << nl << nl + << "Valid solid types are:" << endl + << ConstructorTablePtr_->toc() + << exit(FatalError); + } + + return autoPtr<solid>(cstrIter()()); + } + else if (coeffs == "coeffs") + { + IstreamConstructorTable::iterator cstrIter = + IstreamConstructorTablePtr_->find(solidType); + + if (cstrIter == IstreamConstructorTablePtr_->end()) + { + FatalErrorIn("solid::New(Istream&)") + << "Unknown solid type " << solidType << nl << nl + << "Valid solid types are:" << endl + << IstreamConstructorTablePtr_->toc() + << exit(FatalError); + } + + return autoPtr<solid>(cstrIter()(is)); + } + else + { + FatalErrorIn("solid::New(Istream&)") + << "solid type " << solidType + << ", option " << coeffs << " given" + << ", should be coeffs or defaultCoeffs" + << exit(FatalError); + + return autoPtr<solid>(NULL); + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/solids/solid/solid.C b/src/thermophysicalModels/solids/solid/solid.C index 02a0fdde4668e0593364b539ba93b53f77f1e7a5..5a9da6b875131714701557fecddd1569584bf8da 100644 --- a/src/thermophysicalModels/solids/solid/solid.C +++ b/src/thermophysicalModels/solids/solid/solid.C @@ -26,79 +26,63 @@ License #include "solid.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(solid, 0); -defineRunTimeSelectionTable(solid,); -defineRunTimeSelectionTable(solid, Istream); + defineTypeNameAndDebug(solid, 0); + defineRunTimeSelectionTable(solid,); + defineRunTimeSelectionTable(solid, Istream); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -autoPtr<solid> solid::New(Istream& is) +Foam::solid::solid +( + scalar rho, + scalar cp, + scalar K, + scalar Hf, + scalar emissivity +) +: + rho_(rho), + cp_(cp), + K_(K), + Hf_(Hf), + emissivity_(emissivity) +{} + + +Foam::solid::solid(Istream& is) +: + rho_(readScalar(is)), + cp_(readScalar(is)), + K_(readScalar(is)), + Hf_(readScalar(is)), + emissivity_(readScalar(is)) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::solid::writeData(Ostream& os) const { - if (debug) - { - Info<< "solid::New(Istream&): " - << "constructing solid" - << endl; - } - - word solidType(is); - - word coeffs(is); - - if (coeffs == "defaultCoeffs") - { - ConstructorTable::iterator cstrIter = - ConstructorTablePtr_->find(solidType); - - if (cstrIter == ConstructorTablePtr_->end()) - { - FatalErrorIn("solid::New(Istream&)") - << "Unknown solid type " << solidType << nl << nl - << "Valid solid types are :" << endl - << ConstructorTablePtr_->toc() - << exit(FatalError); - } - - return autoPtr<solid>(cstrIter()()); - } - else if (coeffs == "coeffs") - { - IstreamConstructorTable::iterator cstrIter = - IstreamConstructorTablePtr_->find(solidType); - - if (cstrIter == IstreamConstructorTablePtr_->end()) - { - FatalErrorIn("solid::New(Istream&)") - << "Unknown solid type " << solidType << nl << nl - << "Valid solid types are :" << endl - << IstreamConstructorTablePtr_->toc() - << exit(FatalError); - } - - return autoPtr<solid>(cstrIter()(is)); - } - else - { - FatalErrorIn("solid::New(Istream&)") - << "solid type " << solidType - << ", option " << coeffs << " given" - << ", should be coeffs or defaultCoeffs" - << exit(FatalError); - - return autoPtr<solid>(NULL); - } + os << rho_ << token::SPACE + << cp_ << token::SPACE + << K_ << token::SPACE + << Hf_ << token::SPACE + << emissivity_; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<<(Ostream& os, const solid& s) +{ + s.writeData(os); + return os; +} -} // End namespace Foam // ************************************************************************* // diff --git a/src/thermophysicalModels/solids/solid/solid.H b/src/thermophysicalModels/solids/solid/solid.H index 7ad30e79a285117e261d2ce1732993789e80f292..3a7c8e27101a6e554b1a951e1ef69944b5de8357 100644 --- a/src/thermophysicalModels/solids/solid/solid.H +++ b/src/thermophysicalModels/solids/solid/solid.H @@ -45,6 +45,15 @@ SourceFiles namespace Foam { +class solid; + +Ostream& operator<< +( + Ostream&, + const solid& +); + + /*---------------------------------------------------------------------------*\ Class solid Declaration \*---------------------------------------------------------------------------*/ @@ -107,24 +116,10 @@ public: scalar K, scalar Hf, scalar emissivity - ) - : - rho_(rho), - cp_(cp), - K_(K), - Hf_(Hf), - emissivity_(emissivity) - {} + ); //- Construct from Istream - solid(Istream& is) - : - rho_(readScalar(is)), - cp_(readScalar(is)), - K_(readScalar(is)), - Hf_(readScalar(is)), - emissivity_(readScalar(is)) - {} + solid(Istream& is); //- Return a pointer to a new solid created from input static autoPtr<solid> New(Istream& is); @@ -141,59 +136,37 @@ public: // Phisical constants which define the solid //- Density [kg/m3] - scalar rho() const - { - return rho_; - } + inline scalar rho() const; //- Specific heat capacity [J/(kg.K)] - scalar cp() const - { - return cp_; - } + inline scalar cp() const; //- Thermal conductivity [W/(m.K)] - scalar K() const - { - return K_; - } + inline scalar K() const; //- Heat of formation [J/kg] - scalar Hf() const - { - return Hf_; - } + inline scalar Hf() const; - //- emissivity - scalar emissivity() const - { - return emissivity_; - } + //- Emissivity [] + inline scalar emissivity() const; // I-O //- Write the solid properties - virtual void writeData(Ostream& os) const - { - os<< rho_ << token::SPACE - << cp_ << token::SPACE - << K_ << token::SPACE - << Hf_ << token::SPACE - << emissivity_; - } + virtual void writeData(Ostream& os) const; // Ostream Operator - friend Ostream& operator<<(Ostream& os, const solid& s) - { - s.writeData(os); - return os; - } + friend Ostream& operator<<(Ostream& os, const solid& s); }; +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "solidI.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/thermophysicalModels/solids/solid/solidI.H b/src/thermophysicalModels/solids/solid/solidI.H new file mode 100644 index 0000000000000000000000000000000000000000..1921b1da3c25454593c7f113030343f01a657cdb --- /dev/null +++ b/src/thermophysicalModels/solids/solid/solidI.H @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +inline Foam::scalar Foam::solid::rho() const +{ + return rho_; +} + + +inline Foam::scalar Foam::solid::cp() const +{ + return cp_; +} + + +inline Foam::scalar Foam::solid::K() const +{ + return K_; +} + + +inline Foam::scalar Foam::solid::Hf() const +{ + return Hf_; +} + + +inline Foam::scalar Foam::solid::emissivity() const +{ + return emissivity_; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/Make/files b/src/thermophysicalModels/specie/Make/files index 2f0e008422b669478807fc035629ef717bf462e1..428f6d8fc7784f5ba6e2226740d0ffddfada9b4f 100644 --- a/src/thermophysicalModels/specie/Make/files +++ b/src/thermophysicalModels/specie/Make/files @@ -1,14 +1,15 @@ atomicWeights = atomicWeights specie = specie speciesTable = speciesTable -perfectGas = equationOfState/perfectGas +equationOfState = equationOfState reactions = reaction/reactions $(atomicWeights)/atomicWeights.C $(specie)/specie.C $(speciesTable)/speciesTable.C -$(perfectGas)/perfectGas.C +$(equationOfState)/perfectGas/perfectGas.C $(reactions)/makeChemkinReactions.C +$(reactions)/makeReactionThermoReactions.C $(reactions)/makeLangmuirHinshelwoodReactions.C LIB = $(FOAM_LIBBIN)/libspecie diff --git a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C new file mode 100644 index 0000000000000000000000000000000000000000..9fd15c2986c5fe3365f6c6d65b8af2bb2198aa34 --- /dev/null +++ b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C @@ -0,0 +1,65 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "icoPolynomial.H" +#include "IOstreams.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<int PolySize> +icoPolynomial<PolySize>::icoPolynomial(Istream& is) +: + specie(is), + rhoPolynomial_("rhoPolynomial", is) +{} + + +// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // + +template<int PolySize> +Ostream& operator<<(Ostream& os, const icoPolynomial<PolySize>& ip) +{ + os << static_cast<const specie&>(ip); + + os.check + ( + "Ostream& operator<<(Ostream& os, const icoPolynomial<PolySize>& ip)" + ); + + return os; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H new file mode 100644 index 0000000000000000000000000000000000000000..27190fd833bfdedf79961cfb0b7467faaf42e84f --- /dev/null +++ b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H @@ -0,0 +1,212 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::icoPolynomial + +Description + Incompressible, polynomial form of equation of state, using a polynomial + function for density. + +SourceFiles + icoPolynomialI.H + icoPolynomial.C + +\*---------------------------------------------------------------------------*/ + +#ifndef icoPolynomial_H +#define icoPolynomial_H + +#include "specie.H" +#include "autoPtr.H" +#include "Polynomial.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of friend functions and operators + +template<int PolySize> +class icoPolynomial; + +template<int PolySize> +icoPolynomial<PolySize> operator+ +( + const icoPolynomial<PolySize>&, + const icoPolynomial<PolySize>& +); + +template<int PolySize> +icoPolynomial<PolySize> operator- +( + const icoPolynomial<PolySize>&, + const icoPolynomial<PolySize>& +); + +template<int PolySize> +icoPolynomial<PolySize> operator* +( + const scalar, + const icoPolynomial<PolySize>& +); + +template<int PolySize> +icoPolynomial<PolySize> operator== +( + const icoPolynomial<PolySize>&, + const icoPolynomial<PolySize>& +); + +template<int PolySize> +Ostream& operator<< +( + Ostream&, + const icoPolynomial<PolySize>& +); + + +/*---------------------------------------------------------------------------*\ + Class icoPolynomial Declaration +\*---------------------------------------------------------------------------*/ + +template<int PolySize> +class icoPolynomial +: + public specie +{ + // Private data + + //- Density + Polynomial<PolySize> rhoPolynomial_; + + +public: + + // Constructors + + //- Construct from components + inline icoPolynomial + ( + const specie& sp, + const Polynomial<PolySize>& rhoPoly + ); + + //- Construct from Istream + icoPolynomial(Istream&); + + //- Construct as named copy + inline icoPolynomial(const word& name, const icoPolynomial&); + + //- Construct and return a clone + inline autoPtr<icoPolynomial> clone() const; + + // Selector from Istream + inline static autoPtr<icoPolynomial> New(Istream& is); + + + // Member functions + + //- Return density [kg/m^3] + inline scalar rho(scalar p, scalar T) const; + + //- Return compressibility rho/p [s^2/m^2] + inline scalar psi(scalar p, scalar T) const; + + //- Return compression factor [] + inline scalar Z(scalar p, scalar T) const; + + + // Member operators + + inline void operator+=(const icoPolynomial&); + inline void operator-=(const icoPolynomial&); + + inline void operator*=(const scalar); + + + // Friend operators + + friend icoPolynomial operator+ <PolySize> + ( + const icoPolynomial&, + const icoPolynomial& + ); + + friend icoPolynomial operator- <PolySize> + ( + const icoPolynomial&, + const icoPolynomial& + ); + + friend icoPolynomial operator* <PolySize> + ( + const scalar s, + const icoPolynomial& + ); + + friend icoPolynomial operator== <PolySize> + ( + const icoPolynomial&, + const icoPolynomial& + ); + + + // Ostream Operator + + friend Ostream& operator<< <PolySize>(Ostream&, const icoPolynomial&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeIcoPolynomial(PolySize) \ + \ +defineTemplateTypeNameAndDebugWithName \ +( \ + icoPolynomial<PolySize>, \ + "icoPolynomial<"#PolySize">", \ + 0 \ +); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "icoPolynomialI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "icoPolynomial.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H new file mode 100644 index 0000000000000000000000000000000000000000..d174c57192bac3d842188fc6a03ddda8eeb23aac --- /dev/null +++ b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H @@ -0,0 +1,209 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "icoPolynomial.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<int PolySize> +inline Foam::icoPolynomial<PolySize>::icoPolynomial +( + const specie& sp, + const Polynomial<PolySize>& rhoPoly +) +: + specie(sp), + rhoPolynomial_(rhoPoly) +{} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<int PolySize> +inline Foam::icoPolynomial<PolySize>::icoPolynomial +( + const word& name, + const icoPolynomial<PolySize>& ip +) +: + specie(name, ip), + rhoPolynomial_(ip.rhoPolynomial_) +{} + + +template<int PolySize> +inline Foam::autoPtr<Foam::icoPolynomial<PolySize> > +Foam::icoPolynomial<PolySize>::clone() const +{ + return autoPtr<icoPolynomial<PolySize> > + ( + new icoPolynomial<PolySize>(*this) + ); +} + + +template<int PolySize> +inline Foam::autoPtr<Foam::icoPolynomial<PolySize> > +Foam::icoPolynomial<PolySize>::New(Istream& is) +{ + return autoPtr<icoPolynomial<PolySize> >(new icoPolynomial<PolySize>(is)); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<int PolySize> +inline Foam::scalar Foam::icoPolynomial<PolySize>::rho(scalar, scalar T) const +{ + return rhoPolynomial_.evaluate(T); +} + + +template<int PolySize> +inline Foam::scalar Foam::icoPolynomial<PolySize>::psi(scalar, scalar) const +{ + return 0.0; +} + + +template<int PolySize> +inline Foam::scalar Foam::icoPolynomial<PolySize>::Z(scalar, scalar) const +{ + return 0.0; +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +template<int PolySize> +inline void Foam::icoPolynomial<PolySize>::operator+= +( + const icoPolynomial<PolySize>& ip +) +{ + scalar molr1 = this->nMoles(); + + specie::operator+=(ip); + + molr1 /= this->nMoles(); + scalar molr2 = ip.nMoles()/this->nMoles(); + + rhoPolynomial_ = molr1*rhoPolynomial_ + molr2*ip.rhoPolynomial_; +} + + +template<int PolySize> +inline void Foam::icoPolynomial<PolySize>::operator-= +( + const icoPolynomial<PolySize>& ip +) +{ + scalar molr1 = this->nMoles(); + specie::operator-=(ip); + + molr1 /= this->nMoles(); + scalar molr2 = ip.nMoles()/this->nMoles(); + + rhoPolynomial_ = molr1*rhoPolynomial_ - molr2*ip.rhoPolynomial_; +} + + +template<int PolySize> +inline void Foam::icoPolynomial<PolySize>::operator*=(const scalar s) +{ + specie::operator*=(s); +} + + +// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // + +template<int PolySize> +Foam::icoPolynomial<PolySize> Foam::operator+ +( + const icoPolynomial<PolySize>& ip1, + const icoPolynomial<PolySize>& ip2 +) +{ + scalar mol1 = ip1.nMoles(); + scalar mol2 = ip2.nMoles(); + scalar nMoles = mol1 + mol2; + + return icoPolynomial<PolySize> + ( + static_cast<const specie&>(ip1) + + static_cast<const specie&>(ip2), + (mol1/nMoles)*ip1.rhoPolynomial_ + (mol2/nMoles)*ip2.rhoPolynomial_ + ); +} + + +template<int PolySize> +Foam::icoPolynomial<PolySize> Foam::operator- +( + const icoPolynomial<PolySize>& ip1, + const icoPolynomial<PolySize>& ip2 +) +{ + scalar mol1 = ip1.nMoles(); + scalar mol2 = ip2.nMoles(); + scalar nMoles = mol1 + mol2; + + return icoPolynomial<PolySize> + ( + static_cast<const specie&>(ip1) + - static_cast<const specie&>(ip2), + (mol1/nMoles)*ip1.rhoPolynomial_ - (mol2/nMoles)*ip2.rhoPolynomial_ + ); +} + + +template<int PolySize> +Foam::icoPolynomial<PolySize> Foam::operator* +( + const scalar s, + const icoPolynomial<PolySize>& ip +) +{ + return icoPolynomial<PolySize> + ( + s*static_cast<const specie&>(ip), + ip.rhoPolynomial_ + ); +} + + +template<int PolySize> +Foam::icoPolynomial<PolySize> Foam::operator== +( + const icoPolynomial<PolySize>& ip1, + const icoPolynomial<PolySize>& ip2 +) +{ + return ip2 - ip1; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/containers/Lists/PtrList/PtrListLoopM.H b/src/thermophysicalModels/specie/include/reactionTypes.H similarity index 76% rename from src/OpenFOAM/containers/Lists/PtrList/PtrListLoopM.H rename to src/thermophysicalModels/specie/include/reactionTypes.H index cbd6fd10dfbf6525f5984f1d208447cb3426ce02..6ea8803c79d2071bdbe0af57095127df7ef3a93f 100644 --- a/src/OpenFOAM/containers/Lists/PtrList/PtrListLoopM.H +++ b/src/thermophysicalModels/specie/include/reactionTypes.H @@ -22,35 +22,38 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +Typedefs + Foam::reactionTypes + Description - simple generic PtrList MACROS for looping + Type definitions for reactions \*---------------------------------------------------------------------------*/ -#ifndef PtrListLoop_H -#define PtrListLoop_H +#ifndef reactionTypes_H +#define reactionTypes_H -#include "undefListLoopM.H" +#include "thermoPhysicsTypes.H" +#include "Reaction.H" +#include "icoPolynomial.H" +#include "hPolynomialThermo.H" +#include "polynomialTransport.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// Element access looping using [] for vector and parallel machines - -#define List_FOR_ALL(f, i) \ - forAll(f, i) \ - { \ - -#define List_END_FOR_ALL } +namespace Foam +{ + typedef Reaction<gasThermoPhysics> gasReaction; -#define List_ELEM(f, fp, i) ((f)[i]) - -#define List_ACCESS(type, f, fp) -#define List_CONST_ACCESS(type, f, fp) + typedef Reaction<constGasThermoPhysics> constGasReaction; + typedef Reaction<icoPoly8ThermoPhysics> icoPoly8Reaction; +} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* // + diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H b/src/thermophysicalModels/specie/include/thermoPhysicsTypes.H similarity index 76% rename from src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H rename to src/thermophysicalModels/specie/include/thermoPhysicsTypes.H index 2341e65aa027a792bc4c51e1a4063b0b39417398..502958b505b8459b9d3245656e3a7767038a84f3 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloudThermoTypes.H +++ b/src/thermophysicalModels/specie/include/thermoPhysicsTypes.H @@ -23,39 +23,50 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Typedefs - Foam::cloudThermoTypes + Foam::thermoPhysicsTypes Description + Type definitions for thermo-physics models \*---------------------------------------------------------------------------*/ -#ifndef ReactingCloudThermoTypes_H -#define ReactingCloudThermoTypes_H +#ifndef thermoPhysicsTypes_H +#define thermoPhysicsTypes_H -#include "sutherlandTransport.H" -#include "multiComponentMixture.H" -#include "specie.H" -#include "constTransport.H" -#include "specieThermo.H" +#include "perfectGas.H" #include "hConstThermo.H" #include "janafThermo.H" -#include "perfectGas.H" +#include "specieThermo.H" +#include "sutherlandTransport.H" +#include "constTransport.H" + +#include "icoPolynomial.H" +#include "hPolynomialThermo.H" +#include "polynomialTransport.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -// typedef multiComponentMixture<constTransport<specieThermo<hConstThermo<perfectGas> > > > specieProperties; -// typedef hConstThermo<perfectGas> specieProperties; - -// typedef sutherlandTransport<specieThermo<janafThermo<perfectGas> > > -// specieProperties; - typedef sutherlandTransport<specieThermo<janafThermo<perfectGas> > > - specieReactingProperties; + gasThermoPhysics; typedef constTransport<specieThermo<hConstThermo<perfectGas> > > - specieConstProperties; + constGasThermoPhysics; + + typedef polynomialTransport + < + specieThermo + < + hPolynomialThermo + < + icoPolynomial<8>, + 8 + > + >, + 8 + > + icoPoly8ThermoPhysics; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -63,3 +74,4 @@ namespace Foam #endif // ************************************************************************* // + diff --git a/src/thermophysicalModels/specie/reaction/reactions/makeChemkinReactions.C b/src/thermophysicalModels/specie/reaction/reactions/makeChemkinReactions.C index 3bd2e3d0de95388b6a3914f9fe2814f9247e09ae..3756f2e3657a0b1a5dce610248a9250fcb1d02a5 100644 --- a/src/thermophysicalModels/specie/reaction/reactions/makeChemkinReactions.C +++ b/src/thermophysicalModels/specie/reaction/reactions/makeChemkinReactions.C @@ -26,7 +26,8 @@ Description \*---------------------------------------------------------------------------*/ -#include "makeReactionJanaf.H" +#include "reactionTypes.H" +#include "makeReactionThermo.H" #include "ArrheniusReactionRate.H" #include "thirdBodyArrheniusReactionRate.H" @@ -47,21 +48,39 @@ namespace Foam // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTemplateTypeNameAndDebug(reaction, 0); -defineTemplateRunTimeSelectionTable(reaction, Istream); +defineTemplateTypeNameAndDebug(gasReaction, 0); +defineTemplateRunTimeSelectionTable(gasReaction, Istream); // * * * * * * * * * * * * * Make CHEMKIN reactions * * * * * * * * * * * * // -makeIRNReactions(ArrheniusReactionRate) -makeIRNReactions(LandauTellerReactionRate) -makeIRNReactions(thirdBodyArrheniusReactionRate) -makeIRReactions(JanevReactionRate) -makeIRReactions(powerSeriesReactionRate) +makeIRNReactions(gasThermoPhysics, ArrheniusReactionRate) +makeIRNReactions(gasThermoPhysics, LandauTellerReactionRate) +makeIRNReactions(gasThermoPhysics, thirdBodyArrheniusReactionRate) +makeIRReactions(gasThermoPhysics, JanevReactionRate) +makeIRReactions(gasThermoPhysics, powerSeriesReactionRate) + +makePressureDependentReactions +( + gasThermoPhysics, + ArrheniusReactionRate, + LindemannFallOffFunction +) + +makePressureDependentReactions +( + gasThermoPhysics, + ArrheniusReactionRate, + TroeFallOffFunction +) + +makePressureDependentReactions +( + gasThermoPhysics, + ArrheniusReactionRate, + SRIFallOffFunction +) -makePressureDependentReactions(ArrheniusReactionRate, LindemannFallOffFunction) -makePressureDependentReactions(ArrheniusReactionRate, TroeFallOffFunction) -makePressureDependentReactions(ArrheniusReactionRate, SRIFallOffFunction) // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/specie/reaction/reactions/makeLangmuirHinshelwoodReactions.C b/src/thermophysicalModels/specie/reaction/reactions/makeLangmuirHinshelwoodReactions.C index 8a4b2f6ad87747979a644823d50b1774c9901c69..1789fe80fc4d513d6c0b3b7de485ba7f1fd2daf3 100644 --- a/src/thermophysicalModels/specie/reaction/reactions/makeLangmuirHinshelwoodReactions.C +++ b/src/thermophysicalModels/specie/reaction/reactions/makeLangmuirHinshelwoodReactions.C @@ -26,17 +26,16 @@ Description \*---------------------------------------------------------------------------*/ -#include "makeReactionJanaf.H" +#include "makeReactionThermo.H" +#include "reactionTypes.H" #include "LangmuirHinshelwoodReactionRate.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - - makeIRReactions(LangmuirHinshelwoodReactionRate) - + makeIRReactions(gasThermoPhysics, LangmuirHinshelwoodReactionRate) + makeIRReactions(icoPoly8ThermoPhysics, LangmuirHinshelwoodReactionRate) } // ************************************************************************* // diff --git a/src/thermophysicalModels/specie/reaction/reactions/makeReactionJanaf.H b/src/thermophysicalModels/specie/reaction/reactions/makeReactionJanaf.H deleted file mode 100644 index 7a4de043f6dde0b06cbdfde930893a31661ac217..0000000000000000000000000000000000000000 --- a/src/thermophysicalModels/specie/reaction/reactions/makeReactionJanaf.H +++ /dev/null @@ -1,118 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - Foam::makeReactionJanaf - -Description - -\*---------------------------------------------------------------------------*/ - -#ifndef makeReactionJanaf_H -#define makeReactionJanaf_H - -#include "Reaction.H" - -#include "IrreversibleReaction.H" -#include "ReversibleReaction.H" -#include "NonEquilibriumReversibleReaction.H" - -#include "sutherlandTransport.H" -#include "specieThermo.H" -#include "janafThermo.H" -#include "perfectGas.H" - -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -typedef sutherlandTransport<specieThermo<janafThermo<perfectGas> > > - reactionThermo; - -typedef Reaction<reactionThermo> - reaction; - -#define makeReaction(Reaction, ReactionRate) \ - \ - typedef Reaction<reactionThermo, ReactionRate> \ - Reaction##ReactionRate; \ - \ - template<> \ - const word Reaction##ReactionRate::typeName \ - ( \ - Reaction::typeName_() \ - + ReactionRate::type() \ - + reaction::typeName_() \ - ); \ - \ - addToRunTimeSelectionTable(reaction, Reaction##ReactionRate, Istream); - -#define makePressureDependentReaction(Reaction, PressureDependentReactionRate, ReactionRate, FallOffFunction) \ - \ - typedef PressureDependentReactionRate<ReactionRate, FallOffFunction> \ - PressureDependentReactionRate##ReactionRate##FallOffFunction; \ - \ - makeReaction \ - (Reaction, PressureDependentReactionRate##ReactionRate##FallOffFunction) - -#define makeIRReactions(ReactionRate) \ - makeReaction(IrreversibleReaction, ReactionRate) \ - makeReaction(ReversibleReaction, ReactionRate) - -#define makeIRNReactions(ReactionRate) \ - makeIRReactions(ReactionRate) \ - makeReaction(NonEquilibriumReversibleReaction, ReactionRate) - -#define makePressureDependentReactions(ReactionRate, FallOffFunction) \ - \ - makePressureDependentReaction \ - (IrreversibleReaction, FallOffReactionRate, \ - ReactionRate, FallOffFunction) \ - \ - makePressureDependentReaction \ - (ReversibleReaction, FallOffReactionRate, \ - ReactionRate, FallOffFunction) \ - \ - makePressureDependentReaction \ - (IrreversibleReaction, ChemicallyActivatedReactionRate, \ - ReactionRate, FallOffFunction) \ - \ - makePressureDependentReaction \ - (ReversibleReaction, ChemicallyActivatedReactionRate, \ - ReactionRate, FallOffFunction) - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H b/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..6d982155c7d48f30f671585112e5d1ecc105430a --- /dev/null +++ b/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermo.H @@ -0,0 +1,158 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +InClass + Foam::makeReactionThermo + +Description + Macros for instantiating reactions on given thermo packages + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactionTherno_H +#define makeReactionThermo_H + +#include "Reaction.H" + +#include "IrreversibleReaction.H" +#include "ReversibleReaction.H" +#include "NonEquilibriumReversibleReaction.H" + +#include "specieThermo.H" + +#include "sutherlandTransport.H" +#include "janafThermo.H" +#include "perfectGas.H" + +#include "polynomialTransport.H" +#include "hPolynomialThermo.H" +#include "icoPolynomial.H" + +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReaction(Thermo, ReactionType, ReactionRate) \ + \ + typedef Reaction<Thermo> Reaction##Thermo; \ + \ + typedef ReactionType<Thermo, ReactionRate> \ + ReactionType##Thermo##ReactionRate; \ + \ + template<> \ + const word ReactionType##Thermo##ReactionRate::typeName \ + ( \ + ReactionType::typeName_() \ + + ReactionRate::type() \ + + Reaction##Thermo::typeName_() \ + ); \ + \ + addToRunTimeSelectionTable \ + ( \ + Reaction##Thermo, \ + ReactionType##Thermo##ReactionRate, \ + Istream \ + ); + + +#define makePressureDependentReaction(Thermo, Reaction, PressureDependentReactionRate, ReactionRate, FallOffFunction) \ + \ + typedef PressureDependentReactionRate<ReactionRate, FallOffFunction> \ + PressureDependentReactionRate##ReactionRate##FallOffFunction; \ + \ + makeReaction \ + ( \ + Thermo, \ + Reaction, \ + PressureDependentReactionRate##ReactionRate##FallOffFunction \ + ) + + +#define makeIRReactions(Thermo, ReactionRate) \ + \ + makeReaction(Thermo, IrreversibleReaction, ReactionRate) \ + \ + makeReaction(Thermo, ReversibleReaction, ReactionRate) + + +#define makeIRNReactions(Thermo, ReactionRate) \ + \ + makeIRReactions(Thermo, ReactionRate) \ + \ + makeReaction(Thermo, NonEquilibriumReversibleReaction, ReactionRate) + + +#define makePressureDependentReactions(Thermo, ReactionRate, FallOffFunction) \ + \ + makePressureDependentReaction \ + ( \ + Thermo, \ + IrreversibleReaction, \ + FallOffReactionRate, \ + ReactionRate, \ + FallOffFunction \ + ) \ + \ + makePressureDependentReaction \ + ( \ + Thermo, \ + ReversibleReaction, \ + FallOffReactionRate, \ + ReactionRate, \ + FallOffFunction \ + ) \ + \ + makePressureDependentReaction \ + ( \ + Thermo, \ + IrreversibleReaction, \ + ChemicallyActivatedReactionRate, \ + ReactionRate, \ + FallOffFunction \ + ) \ + \ + makePressureDependentReaction \ + ( \ + Thermo, \ + ReversibleReaction, \ + ChemicallyActivatedReactionRate, \ + ReactionRate, \ + FallOffFunction \ + ) + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermoReactions.C b/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermoReactions.C new file mode 100644 index 0000000000000000000000000000000000000000..1a054b11249f50609912d1fd90f49f7a01376f4f --- /dev/null +++ b/src/thermophysicalModels/specie/reaction/reactions/makeReactionThermoReactions.C @@ -0,0 +1,89 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + +\*---------------------------------------------------------------------------*/ + +#include "reactionTypes.H" +#include "makeReactionThermo.H" + +#include "ArrheniusReactionRate.H" +#include "thirdBodyArrheniusReactionRate.H" +#include "FallOffReactionRate.H" +#include "ChemicallyActivatedReactionRate.H" +#include "LindemannFallOffFunction.H" +#include "TroeFallOffFunction.H" +#include "SRIFallOffFunction.H" +#include "LandauTellerReactionRate.H" +#include "JanevReactionRate.H" +#include "powerSeriesReactionRate.H" + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTemplateTypeNameAndDebug(icoPoly8Reaction, 0); +defineTemplateRunTimeSelectionTable(icoPoly8Reaction, Istream); + + +// * * * * * * * * * * * * * Make CHEMKIN reactions * * * * * * * * * * * * // + +makeIRNReactions(icoPoly8ThermoPhysics, ArrheniusReactionRate) +makeIRNReactions(icoPoly8ThermoPhysics, LandauTellerReactionRate) +makeIRNReactions(icoPoly8ThermoPhysics, thirdBodyArrheniusReactionRate) +makeIRReactions(icoPoly8ThermoPhysics, JanevReactionRate) +makeIRReactions(icoPoly8ThermoPhysics, powerSeriesReactionRate) + +makePressureDependentReactions +( + icoPoly8ThermoPhysics, + ArrheniusReactionRate, + LindemannFallOffFunction +) + +makePressureDependentReactions +( + icoPoly8ThermoPhysics, + ArrheniusReactionRate, + TroeFallOffFunction +) + +makePressureDependentReactions +( + icoPoly8ThermoPhysics, + ArrheniusReactionRate, + SRIFallOffFunction +) + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/specie/specie.H b/src/thermophysicalModels/specie/specie/specie.H index 38f36e34f2c6af4e8eb894e8f98a3807916ad04e..10238c220cd617dc51d0b4a365fdd8ec5ae451dc 100644 --- a/src/thermophysicalModels/specie/specie/specie.H +++ b/src/thermophysicalModels/specie/specie/specie.H @@ -62,7 +62,7 @@ class specie //- Number of moles of this component in the mixture scalar nMoles_; - //- Molecular weight of specie + //- Molecular weight of specie [kg/kmol] scalar molWeight_; diff --git a/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.C b/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.C index 8d62be816fbbe6806de8e0fada75ebfa8561879a..e13eb5b0ab3c77b8e520bc5ef9c006016cd92619 100644 --- a/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.C +++ b/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.C @@ -29,9 +29,10 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::eConstThermo::eConstThermo(Istream& is) +template<class equationOfState> +Foam::eConstThermo<equationOfState>::eConstThermo(Istream& is) : - specieThermo(is), + equationOfState(is), Cv_(readScalar(is)), Hf_(readScalar(is)) { @@ -41,9 +42,15 @@ Foam::eConstThermo::eConstThermo(Istream& is) // * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // -Foam::Ostream& Foam::operator<<(Ostream& os, const eConstThermo& ct) +template<class equationOfState> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const eConstThermo<equationOfState>& ct +) { - os << (const specieThermo&)ct << tab << ct.Cv_ << tab << ct.Hf_; + os << static_cast<const equationOfState&>(ct) << tab + << ct.Cv_ << tab << ct.Hf_; os.check("Ostream& operator<<(Ostream& os, const eConstThermo& ct)"); return os; diff --git a/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.H b/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.H index c01600eabdbc52d7b1df70b739305ac340fb568c..6d9bef74233c05173010b7595c627bb9d40eacc7 100644 --- a/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.H +++ b/src/thermophysicalModels/specie/thermo/eConst/eConstThermo.H @@ -26,8 +26,8 @@ Class Foam::eConstThermo Description - Constant properties thermodynamics package derived from the basic - thermo package data type specieThermo. + Constant properties thermodynamics package templated on an equation of + state SourceFiles eConstThermoI.H @@ -86,12 +86,13 @@ Ostream& operator<< /*---------------------------------------------------------------------------*\ - Class eConstThermo Declaration + Class eConstThermo Declaration \*---------------------------------------------------------------------------*/ +template<class equationOfState> class eConstThermo : - public specieThermo + public equationOfState { // Private data @@ -104,7 +105,7 @@ class eConstThermo //- Construct from components inline eConstThermo ( - const specieThermo& st, + const equationOfState& st, const scalar cv, const scalar hf ); @@ -147,20 +148,10 @@ public: inline scalar s(const scalar T) const; - // Some derived properties - // Other derived properties obtained from specieThermo base type - - //- Temperature from Enthalpy given an initial temperature T0 - inline scalar TH(const scalar h, const scalar T0) const; - - //- Temperature from internal energy given an initial temperature T0 - inline scalar TE(const scalar e, const scalar T0) const; - - // Member operators - inline void operator+=(const hConstThermo&); - inline void operator-=(const hConstThermo&); + inline void operator+=(const eConstThermo&); + inline void operator-=(const eConstThermo&); // Friend operators @@ -194,7 +185,8 @@ public: friend Ostream& operator<< <equationOfState> ( - Ostream&, const eConstThermo& + Ostream&, + const eConstThermo& ); }; @@ -207,6 +199,10 @@ public: #include "eConstThermoI.H" +#ifdef NoRepository +# include "eConstThermo.C" +#endif + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/src/thermophysicalModels/specie/thermo/eConst/eConstThermoI.H b/src/thermophysicalModels/specie/thermo/eConst/eConstThermoI.H index aba6da1eef53a90a480ccc694c106be2a2170d6d..8e021c53ab403ba935b1dccfa4cd158edbc7a459 100644 --- a/src/thermophysicalModels/specie/thermo/eConst/eConstThermoI.H +++ b/src/thermophysicalModels/specie/thermo/eConst/eConstThermoI.H @@ -26,14 +26,15 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -inline Foam::eConstThermo::eConstThermo +template<class equationOfState> +inline Foam::eConstThermo<equationOfState>::eConstThermo ( - const specieThermo& st, + const equationOfState& st, const scalar cv, const scalar hf ) : - specieThermo(st), + equationOfState(st), Cv_(cv), Hf_(hf) {} @@ -41,20 +42,21 @@ inline Foam::eConstThermo::eConstThermo // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -inline Foam::eConstThermo::eConstThermo +template<class equationOfState> +inline Foam::eConstThermo<equationOfState>::eConstThermo ( const word& name, - const eConstThermo& ct + const eConstThermo<equationOfState>& ct ) : - specieThermo(name, ct), + equationOfState(name, ct), Cv_(ct.Cv_), Hf_(ct.Hf_) {} template<class equationOfState> -inline Foam::autoPtr<eConstThermo<equationOfState> > +inline Foam::autoPtr<Foam::eConstThermo<equationOfState> > Foam::eConstThermo<equationOfState>::clone() const { return autoPtr<eConstThermo<equationOfState> > @@ -65,7 +67,7 @@ Foam::eConstThermo<equationOfState>::clone() const template<class equationOfState> -inline autoPtr<eConstThermo<equationOfState> > +inline Foam::autoPtr<Foam::eConstThermo<equationOfState> > Foam::eConstThermo<equationOfState>::New(Istream& is) { return autoPtr<eConstThermo<equationOfState> > @@ -77,19 +79,31 @@ Foam::eConstThermo<equationOfState>::New(Istream& is) // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -inline Foam::scalar Foam::eConstThermo::cp(const scalar) const +template<class equationOfState> +inline Foam::scalar Foam::eConstThermo<equationOfState>::cp +( + const scalar +) const { - return Cv_*W() + RR; + return Cv_*this->W() + specie::RR; } -inline Foam::scalar Foam::eConstThermo::h(const scalar T) const +template<class equationOfState> +inline Foam::scalar Foam::eConstThermo<equationOfState>::h +( + const scalar T +) const { - return cp(T)*T + Hf_*W(); + return cp(T)*T + Hf_*this->W(); } -inline Foam::scalar Foam::eConstThermo::hs(const scalar T) const +template<class equationOfState> +inline Foam::scalar Foam::eConstThermo<equationOfState>::hs +( + const scalar T +) const { return cp(T)*T; } @@ -102,104 +116,126 @@ inline Foam::scalar Foam::eConstThermo<equationOfState>::hc() const } -inline Foam::scalar Foam::eConstThermo::s(const scalar T) const +template<class equationOfState> +inline Foam::scalar Foam::eConstThermo<equationOfState>::s +( + const scalar T +) const { notImplemented("scalar eConstThermo::s(const scalar T) const"); return T; } -inline Foam::scalar Foam::eConstThermo::TH +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +template<class equationOfState> +inline void Foam::eConstThermo<equationOfState>::operator+= ( - const scalar h, - const scalar T0 -) const + const eConstThermo<equationOfState>& ct +) { - return (h - Hf_)/Cp(T0); -} + scalar molr1 = this->nMoles(); + equationOfState::operator+=(ct); -inline Foam::scalar Foam::eConstThermo::TE -( - const scalar e, - const scalar -) const -{ - return (e - Hf_)/Cv_; + molr1 /= this->nMoles(); + scalar molr2 = ct.nMoles()/this->nMoles(); + + Cv_ = molr1*Cv_ + molr2*ct.Cv_; + Hf_ = molr1*Hf_ + molr2*ct.Hf_; } -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - -inline Foam::eConstThermo& Foam::eConstThermo::operator= +template<class equationOfState> +inline void Foam::eConstThermo<equationOfState>::operator-= ( - const eConstThermo& ct + const eConstThermo<equationOfState>& ct ) { - specieThermo::operator=(ct); + scalar molr1 = this->nMoles(); - Cv_ = ct.Cv_; - Hf_ = ct.Hf_; + equationOfState::operator-=(ct); - return *this; + molr1 /= this->nMoles(); + scalar molr2 = ct.nMoles()/this->nMoles(); + + Cv_ = molr1*Cv_ - molr2*ct.Cv_; + Hf_ = molr1*Hf_ - molr2*ct.Hf_; } // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // -inline Foam::eConstThermo Foam::operator+ +template<class equationOfState> +inline Foam::eConstThermo<equationOfState> Foam::operator+ ( - const eConstThermo& ct1, - const eConstThermo& ct2 + const eConstThermo<equationOfState>& ct1, + const eConstThermo<equationOfState>& ct2 ) { - specieThermo st(((const specieThermo&)ct1) + ((const specieThermo&)ct2)); + equationOfState eofs + ( + static_cast<const equationOfState&>(ct1) + + static_cast<const equationOfState&>(ct2) + ); - return eConstThermo + return eConstThermo<equationOfState> ( - st, - ct1.nMoles()/st.nMoles()*ct1.Cv_ + ct2.nMoles()/st.nMoles()*ct2.Cv_, - ct1.nMoles()/st.nMoles()*ct1.Hf_ + ct2.nMoles()/st.nMoles()*ct2.Hf_ + eofs, + ct1.nMoles()/eofs.nMoles()*ct1.Cv_ + + ct2.nMoles()/eofs.nMoles()*ct2.Cv_, + ct1.nMoles()/eofs.nMoles()*ct1.Hf_ + + ct2.nMoles()/eofs.nMoles()*ct2.Hf_ ); } -inline Foam::eConstThermo Foam::operator- +template<class equationOfState> +inline Foam::eConstThermo<equationOfState> Foam::operator- ( - const eConstThermo& ct1, - const eConstThermo& ct2 + const eConstThermo<equationOfState>& ct1, + const eConstThermo<equationOfState>& ct2 ) { - specieThermo st(((const specieThermo&)ct1) - ((const specieThermo&)ct2)); + equationOfState eofs + ( + static_cast<const equationOfState&>(ct1) + - static_cast<const equationOfState&>(ct2) + ); - return eConstThermo + return eConstThermo<equationOfState> ( - st, - ct1.nMoles()/st.nMoles()*ct1.Cv_ - ct2.nMoles()/st.nMoles()*ct2.Cv_, - ct1.nMoles()/st.nMoles()*ct1.Hf_ - ct2.nMoles()/st.nMoles()*ct2.Hf_ + eofs, + ct1.nMoles()/eofs.nMoles()*ct1.Cv_ + - ct2.nMoles()/eofs.nMoles()*ct2.Cv_, + ct1.nMoles()/eofs.nMoles()*ct1.Hf_ + - ct2.nMoles()/eofs.nMoles()*ct2.Hf_ ); } -inline Foam::eConstThermo Foam::operator* +template<class equationOfState> +inline Foam::eConstThermo<equationOfState> Foam::operator* ( const scalar s, - const eConstThermo& ct + const eConstThermo<equationOfState>& ct ) { - return eConstThermo + return eConstThermo<equationOfState> ( - s*((const specieThermo&)ct), + s*static_cast<const equationOfState&>(ct), ct.Cv_, ct.Hf_ ); } -inline Foam::eConstThermo Foam::operator== +template<class equationOfState> +inline Foam::eConstThermo<equationOfState> Foam::operator== ( - const eConstThermo& ct1, - const eConstThermo& ct2 + const eConstThermo<equationOfState>& ct1, + const eConstThermo<equationOfState>& ct2 ) { return ct2 - ct1; diff --git a/src/thermophysicalModels/specie/thermo/hConst/hConstThermo.H b/src/thermophysicalModels/specie/thermo/hConst/hConstThermo.H index 2508f23c853d1d9756763ff29e76a2276f8965c3..c116c16203f3ae801214178fd54bc02cb7ec5a3d 100644 --- a/src/thermophysicalModels/specie/thermo/hConst/hConstThermo.H +++ b/src/thermophysicalModels/specie/thermo/hConst/hConstThermo.H @@ -122,7 +122,7 @@ public: //- Construct and return a clone inline autoPtr<hConstThermo> clone() const; - // Selector from Istream + //- Selector from Istream inline static autoPtr<hConstThermo> New(Istream& is); diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C new file mode 100644 index 0000000000000000000000000000000000000000..294a96005a397a24e43c2e87d9643083aa90bb5a --- /dev/null +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C @@ -0,0 +1,69 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hPolynomialThermo.H" +#include "IOstreams.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +Foam::hPolynomialThermo<EquationOfState, PolySize>::hPolynomialThermo(Istream& is) +: + EquationOfState(is), + Hf_(readScalar(is)), + Sf_(readScalar(is)), + cpPolynomial_("cpPolynomial", is), + dhPolynomial_("dhPolynomial", cpPolynomial_.integrate()), + sPolynomial_("sPolynomial", cpPolynomial_.integrateMinus1()) +{} + + +// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const hPolynomialThermo<EquationOfState, PolySize>& pt +) +{ + os << static_cast<const EquationOfState&>(pt) << tab + << pt.Hf_ << tab + << pt.Sf_ << tab + << pt.cpPolynomial_ << tab + << pt.dhPolynomial_ << tab + << pt.sPolynomial; + + os.check + ( + "operator<<(Ostream& os, const hPolynomialThermo<EquationOfState>& pt)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H new file mode 100644 index 0000000000000000000000000000000000000000..ec3c752f24bc7273dfd7b9460f7429fd6018b603 --- /dev/null +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H @@ -0,0 +1,221 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::hPolynomialThermo + +Description + Thermodynamics package templated on the equation of state, using polynomial + functions for cp, h and s + + Polynomials for h and s derived from cp + +SourceFiles + hPolynomialThermoI.H + hPolynomialThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef hPolynomialThermo_H +#define hPolynomialThermo_H + +#include "scalar.H" +#include "Polynomial.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of friend functions and operators + +template<class EquationOfState, int PolySize> +class hPolynomialThermo; + +template<class EquationOfState, int PolySize> +inline hPolynomialThermo<EquationOfState, PolySize> operator+ +( + const hPolynomialThermo<EquationOfState, PolySize>&, + const hPolynomialThermo<EquationOfState, PolySize>& +); + +template<class EquationOfState, int PolySize> +inline hPolynomialThermo<EquationOfState, PolySize> operator- +( + const hPolynomialThermo<EquationOfState, PolySize>&, + const hPolynomialThermo<EquationOfState, PolySize>& +); + +template<class EquationOfState, int PolySize> +inline hPolynomialThermo<EquationOfState, PolySize> operator* +( + const scalar, + const hPolynomialThermo<EquationOfState, PolySize>& +); + +template<class EquationOfState, int PolySize> +inline hPolynomialThermo<EquationOfState, PolySize> operator== +( + const hPolynomialThermo<EquationOfState, PolySize>&, + const hPolynomialThermo<EquationOfState, PolySize>& +); + +template<class EquationOfState, int PolySize> +Ostream& operator<< +( + Ostream&, + const hPolynomialThermo<EquationOfState, PolySize>& +); + + +/*---------------------------------------------------------------------------*\ + Class hPolynomialThermo Declaration +\*---------------------------------------------------------------------------*/ + +template<class EquationOfState, int PolySize> +class hPolynomialThermo +: + public EquationOfState +{ + // Private data + + //- Heat of formation [J/kg] + scalar Hf_; + + //- Standard entropy [J/(kg.K)] + scalar Sf_; + + //- Specific heat at constant pressure + Polynomial<PolySize> cpPolynomial_; + + //- Enthalpy - derived from cp + typename Polynomial<PolySize>::intPolyType dhPolynomial_; + + //- Entropy - derived from cp + Polynomial<PolySize> sPolynomial_; + + + // Private member functions + + //- Construct from components + inline hPolynomialThermo + ( + const EquationOfState& pt, + const scalar Hf, + const scalar Sf, + const Polynomial<PolySize>& cpPoly, + const typename Polynomial<PolySize>::intPolyType& hPoly, + const Polynomial<PolySize>& sPoly + ); + + +public: + + // Constructors + + //- Construct from dictionary + hPolynomialThermo(Istream& is); + + //- Construct as a named copy + inline hPolynomialThermo(const word&, const hPolynomialThermo&); + + + // Member Functions + + //- Heat capacity at constant pressure [J/(kmol K)] + inline scalar cp(const scalar T) const; + + //- Enthalpy [J/kmol] + inline scalar h(const scalar T) const; + + //- Sensible enthalpy [J/kmol] + inline scalar hs(const scalar T) const; + + //- Chemical enthalpy [J/kmol] + inline scalar hc() const; + + //- Entropy [J/(kmol K)] + inline scalar s(const scalar T) const; + + + // Member operators + + inline void operator+=(const hPolynomialThermo&); + inline void operator-=(const hPolynomialThermo&); + + + // Friend operators + + friend hPolynomialThermo operator+ <EquationOfState, PolySize> + ( + const hPolynomialThermo&, + const hPolynomialThermo& + ); + + friend hPolynomialThermo operator- <EquationOfState, PolySize> + ( + const hPolynomialThermo&, + const hPolynomialThermo& + ); + + friend hPolynomialThermo operator* <EquationOfState, PolySize> + ( + const scalar, + const hPolynomialThermo& + ); + + friend hPolynomialThermo operator== <EquationOfState, PolySize> + ( + const hPolynomialThermo&, + const hPolynomialThermo& + ); + + + // Ostream Operator + + friend Ostream& operator<< <EquationOfState, PolySize> + ( + Ostream&, + const hPolynomialThermo& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "hPolynomialThermoI.H" + +#ifdef NoRepository +# include "hPolynomialThermo.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H new file mode 100644 index 0000000000000000000000000000000000000000..1382c6f3ecea86c65370e60741630ad03d3eabab --- /dev/null +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H @@ -0,0 +1,249 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "hPolynomialThermo.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +inline Foam::hPolynomialThermo<EquationOfState, PolySize>::hPolynomialThermo +( + const EquationOfState& pt, + const scalar Hf, + const scalar Sf, + const Polynomial<PolySize>& cpPoly, + const typename Polynomial<PolySize>::intPolyType& dhPoly, + const Polynomial<PolySize>& sPoly +) +: + EquationOfState(pt), + Hf_(Hf), + Sf_(Sf), + cpPolynomial_(cpPoly), + dhPolynomial_(dhPoly), + sPolynomial_(sPoly) +{} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +inline Foam::hPolynomialThermo<EquationOfState, PolySize>::hPolynomialThermo +( + const word& name, + const hPolynomialThermo& pt +) +: + EquationOfState(name, pt), + Hf_(pt.Hf_), + Sf_(pt.Sf_), + cpPolynomial_(pt.cpPolynomial_), + dhPolynomial_(pt.dhPolynomial_), + sPolynomial_(pt.sPolynomial_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +inline Foam::scalar Foam::hPolynomialThermo<EquationOfState, PolySize>::cp +( + const scalar T +) const +{ + return cpPolynomial_.evaluate(T)*this->W(); +} + + +template<class EquationOfState, int PolySize> +inline Foam::scalar Foam::hPolynomialThermo<EquationOfState, PolySize>::h +( + const scalar T +) const +{ + return (dhPolynomial_.evaluate(T) + Hf_)*this->W(); +} + + +template<class EquationOfState, int PolySize> +inline Foam::scalar Foam::hPolynomialThermo<EquationOfState, PolySize>::hs +( + const scalar T +) const +{ + return dhPolynomial_.evaluate(T)*this->W(); +} + + +template<class EquationOfState, int PolySize> +inline Foam::scalar Foam::hPolynomialThermo<EquationOfState, PolySize>::hc() +const +{ + return Hf_*this->W(); +} + + +template<class EquationOfState, int PolySize> +inline Foam::scalar Foam::hPolynomialThermo<EquationOfState, PolySize>::s +( + const scalar T +) const +{ + return (sPolynomial_.evaluate(T) + Sf_)*this->W(); +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +inline void Foam::hPolynomialThermo<EquationOfState, PolySize>::operator+= +( + const hPolynomialThermo<EquationOfState, PolySize>& pt +) +{ + scalar molr1 = this->nMoles(); + + EquationOfState::operator+=(pt); + + molr1 /= this->nMoles(); + scalar molr2 = pt.nMoles()/this->nMoles(); + + Hf_ = molr1*Hf_ + molr2*pt.Hf_; + Sf_ = molr1*Sf_ + molr2*pt.Sf_; + cpPolynomial_ = molr1*cpPolynomial_ + molr2*pt.cpPolynomial_; + dhPolynomial_ = molr1*dhPolynomial_ + molr2*pt.dhPolynomial_; + sPolynomial_ = molr1*sPolynomial_ + molr2*pt.sPolynomial_; +} + + +template<class EquationOfState, int PolySize> +inline void Foam::hPolynomialThermo<EquationOfState, PolySize>::operator-= +( + const hPolynomialThermo<EquationOfState, PolySize>& pt +) +{ + scalar molr1 = this->nMoles(); + + EquationOfState::operator-=(pt); + + molr1 /= this->nMoles(); + scalar molr2 = pt.nMoles()/this->nMoles(); + + Hf_ = molr1*Hf_ - molr2*pt.Hf_; + Sf_ = molr1*Hf_ - molr2*pt.Sf_; + cpPolynomial_ = molr1*cpPolynomial_ - molr2*pt.cpPolynomial_; + dhPolynomial_ = molr1*dhPolynomial_ - molr2*pt.dhPolynomial_; + sPolynomial_ = molr1*sPolynomial_ - molr2*pt.sPolynomial_; +} + + +// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // + +template<class EquationOfState, int PolySize> +inline Foam::hPolynomialThermo<EquationOfState, PolySize> Foam::operator+ +( + const hPolynomialThermo<EquationOfState, PolySize>& pt1, + const hPolynomialThermo<EquationOfState, PolySize>& pt2 +) +{ + EquationOfState eofs + ( + static_cast<const EquationOfState&>(pt1) + + static_cast<const EquationOfState&>(pt2) + ); + + scalar molr1 = pt1.nMoles()/eofs.nMoles(); + scalar molr2 = pt2.nMoles()/eofs.nMoles(); + return hPolynomialThermo<EquationOfState, PolySize> + ( + eofs, + molr1*pt1.Hf_ + molr2*pt2.Hf_, + molr1*pt1.Sf_ + molr2*pt2.Sf_, + molr1*pt1.cpPolynomial_ + molr2*pt2.cpPolynomial_, + molr1*pt1.dhPolynomial_ + molr2*pt2.dhPolynomial_, + molr1*pt1.sPolynomial_ + molr2*pt2.sPolynomial_ + ); +} + + +template<class EquationOfState, int PolySize> +inline Foam::hPolynomialThermo<EquationOfState, PolySize> Foam::operator- +( + const hPolynomialThermo<EquationOfState, PolySize>& pt1, + const hPolynomialThermo<EquationOfState, PolySize>& pt2 +) +{ + EquationOfState eofs + ( + static_cast<const EquationOfState&>(pt1) + - static_cast<const EquationOfState&>(pt2) + ); + + scalar molr1 = pt1.nMoles()/eofs.nMoles(); + scalar molr2 = pt2.nMoles()/eofs.nMoles(); + return hPolynomialThermo<EquationOfState, PolySize> + ( + eofs, + molr1*pt1.Hf_ - molr2*pt2.Hf_, + molr1*pt1.Sf_ - molr2*pt2.Sf_, + molr1*pt1.cpPolynomial_ - molr2*pt2.cpPolynomial_, + molr1*pt1.dhPolynomial_ - molr2*pt2.dhPolynomial_, + molr1*pt1.sPolynomial_ - molr2*pt2.sPolynomial_ + ); +} + + +template<class EquationOfState, int PolySize> +inline Foam::hPolynomialThermo<EquationOfState, PolySize> Foam::operator* +( + const scalar s, + const hPolynomialThermo<EquationOfState, PolySize>& pt +) +{ + return hPolynomialThermo<EquationOfState, PolySize> + ( + s*static_cast<const EquationOfState&>(pt), + pt.Hf_, + pt.Sf_, + pt.cpPolynomial_, + pt.dhPolynomial_, + pt.sPolynomial_ + ); +} + + +template<class EquationOfState, int PolySize> +inline Foam::hPolynomialThermo<EquationOfState, PolySize> Foam::operator== +( + const hPolynomialThermo<EquationOfState, PolySize>& pt1, + const hPolynomialThermo<EquationOfState, PolySize>& pt2 +) +{ + return pt2 - pt1; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C new file mode 100644 index 0000000000000000000000000000000000000000..2744d4a97990960136447bbbda36ab1408c92def --- /dev/null +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C @@ -0,0 +1,65 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "polynomialTransport.H" +#include "IOstreams.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Thermo, int PolySize> +Foam::polynomialTransport<Thermo, PolySize>::polynomialTransport(Istream& is) +: + Thermo(is), + muPolynomial_("muPolynomial", is), + kappaPolynomial_("kappaPolynomial", is) +{} + + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +template<class Thermo, int PolySize> +Foam::Ostream& Foam::operator<< +( + Ostream& os, + const polynomialTransport<Thermo, PolySize>& pt +) +{ + os << static_cast<const Thermo&>(pt); + + os.check + ( + "Ostream& operator<<" + "(" + "Ostream&, " + "const polynomialTransport<Thermo, PolySize>&" + ")" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H new file mode 100644 index 0000000000000000000000000000000000000000..3ab3879e64a203ac3915828d4bb667a1172b7443 --- /dev/null +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H @@ -0,0 +1,206 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::polynomialTransport + +Description + Transport package using polynomial functions for mu and kappa + +SourceFiles + polynomialTransportI.H + polynomialTransport.C + +\*---------------------------------------------------------------------------*/ + +#ifndef polynomialTransport_H +#define polynomialTransport_H + +#include "Polynomial.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of friend functions and operators + +template<class Thermo, int PolySize> class polynomialTransport; + +template<class Thermo, int PolySize> +inline polynomialTransport<Thermo, PolySize> operator+ +( + const polynomialTransport<Thermo, PolySize>&, + const polynomialTransport<Thermo, PolySize>& +); + +template<class Thermo, int PolySize> +inline polynomialTransport<Thermo, PolySize> operator- +( + const polynomialTransport<Thermo, PolySize>&, + const polynomialTransport<Thermo, PolySize>& +); + +template<class Thermo, int PolySize> +inline polynomialTransport<Thermo, PolySize> operator* +( + const scalar, + const polynomialTransport<Thermo, PolySize>& +); + +template<class Thermo, int PolySize> +inline polynomialTransport<Thermo, PolySize> operator== +( + const polynomialTransport<Thermo, PolySize>&, + const polynomialTransport<Thermo, PolySize>& +); + +template<class Thermo, int PolySize> +Ostream& operator<< +( + Ostream&, + const polynomialTransport<Thermo, PolySize>& +); + + +/*---------------------------------------------------------------------------*\ + Class polynomialTransport Declaration +\*---------------------------------------------------------------------------*/ + +template<class Thermo, int PolySize> +class polynomialTransport +: + public Thermo +{ + // Private data + + //- Dynamic viscosity + Polynomial<PolySize> muPolynomial_; + + //- Thermal conductivity + Polynomial<PolySize> kappaPolynomial_; + + + // Private member functions + + //- Construct from components + inline polynomialTransport + ( + const Thermo& t, + const Polynomial<PolySize>& muPoly, + const Polynomial<PolySize>& kappaPoly + ); + + +public: + + // Constructors + + //- Construct as named copy + inline polynomialTransport(const word&, const polynomialTransport&); + + //- Construct from Istream + polynomialTransport(Istream& is); + + //- Construct and return a clone + inline autoPtr<polynomialTransport> clone() const; + + // Selector from Istream + inline static autoPtr<polynomialTransport> New(Istream& is); + + + // Member functions + + //- Dynamic viscosity [kg/ms] + inline scalar mu(const scalar T) const; + + //- Thermal conductivity [W/mK] + inline scalar kappa(const scalar T) const; + + //- Thermal diffusivity for enthalpy [kg/ms] + inline scalar alpha(const scalar T) const; + + // Species diffusivity + //inline scalar D(const scalar T) const; + + + // Member operators + + inline polynomialTransport& operator=(const polynomialTransport&); + + + // Friend operators + + friend polynomialTransport operator+ <Thermo, PolySize> + ( + const polynomialTransport&, + const polynomialTransport& + ); + + friend polynomialTransport operator- <Thermo, PolySize> + ( + const polynomialTransport&, + const polynomialTransport& + ); + + friend polynomialTransport operator* <Thermo, PolySize> + ( + const scalar, + const polynomialTransport& + ); + + friend polynomialTransport operator== <Thermo, PolySize> + ( + const polynomialTransport&, + const polynomialTransport& + ); + + + // Ostream Operator + + friend Ostream& operator<< <Thermo, PolySize> + ( + Ostream&, + const polynomialTransport& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "polynomialTransportI.H" + +#ifdef NoRepository +# include "polynomialTransport.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H new file mode 100644 index 0000000000000000000000000000000000000000..9e6e00e6e3c603146007caa7866e2e9aaf6751b1 --- /dev/null +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H @@ -0,0 +1,213 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "specie.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize>::polynomialTransport +( + const Thermo& t, + const Polynomial<PolySize>& muPoly, + const Polynomial<PolySize>& kappaPoly +) +: + Thermo(t), + muPolynomial_(muPoly), + kappaPolynomial_(kappaPoly) +{} + + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize>::polynomialTransport +( + const word& name, + const polynomialTransport& pt +) +: + Thermo(name, pt), + muPolynomial_(pt.muPolynomial_), + kappaPolynomial_(pt.kappaPolynomial_) +{} + + +template<class Thermo, int PolySize> +inline Foam::autoPtr<Foam::polynomialTransport<Thermo, PolySize> > +Foam::polynomialTransport<Thermo, PolySize>::clone() const +{ + return autoPtr<polynomialTransport<Thermo, PolySize> > + ( + new polynomialTransport<Thermo, PolySize>(*this) + ); +} + + +template<class Thermo, int PolySize> +inline Foam::autoPtr<Foam::polynomialTransport<Thermo, PolySize> > +Foam::polynomialTransport<Thermo, PolySize>::New(Istream& is) +{ + return autoPtr<polynomialTransport<Thermo, PolySize> > + ( + new polynomialTransport<Thermo, PolySize>(is) + ); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Thermo, int PolySize> +inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::mu +( + const scalar T +) const +{ + return muPolynomial_.evaluate(T); +} + + +template<class Thermo, int PolySize> +inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::kappa +( + const scalar T +) const +{ + return kappaPolynomial_.evaluate(T); +} + + +template<class Thermo, int PolySize> +inline Foam::scalar Foam::polynomialTransport<Thermo, PolySize>::alpha +( + const scalar T +) const +{ + scalar deltaT = T - specie::Tstd; + scalar CpBar = + (deltaT*(this->H(T) - this->H(specie::Tstd)) + this->Cp(T)) + /(sqr(deltaT) + 1); + + return kappa(T)/CpBar; +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize>& +Foam::polynomialTransport<Thermo, PolySize>::operator= +( + const polynomialTransport<Thermo, PolySize>& pt +) +{ + Thermo::operator=(pt); + + muPolynomial_ = pt.muPolynomial_; + kappaPolynomial_ = pt.kappaPolynomial_; + + return *this; +} + + +// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize> Foam::operator+ +( + const polynomialTransport<Thermo, PolySize>& pt1, + const polynomialTransport<Thermo, PolySize>& pt2 +) +{ + Thermo t + ( + static_cast<const Thermo&>(pt1) + static_cast<const Thermo&>(pt2) + ); + + + scalar molr1 = pt1.nMoles()/t.nMoles(); + scalar molr2 = pt2.nMoles()/t.nMoles(); + + return polynomialTransport<Thermo, PolySize> + ( + t, + molr1*pt1.muPolynomial_ + molr2*pt2.muPolynomial_, + molr1*pt1.kappaPolynomial_ + molr2*pt2.kappaPolynomial_ + ); +} + + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize> Foam::operator- +( + const polynomialTransport<Thermo, PolySize>& pt1, + const polynomialTransport<Thermo, PolySize>& pt2 +) +{ + Thermo t + ( + static_cast<const Thermo&>(pt1) - static_cast<const Thermo&>(pt2) + ); + + scalar molr1 = pt1.nMoles()/t.nMoles(); + scalar molr2 = pt2.nMoles()/t.nMoles(); + + return polynomialTransport<Thermo, PolySize> + ( + t, + molr1*pt1.muPolynomial_ - molr2*pt2.muPolynomial_, + molr1*pt1.kappaPolynomial_ - molr2*pt2.kappaPolynomial_ + ); +} + + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize> Foam::operator* +( + const scalar s, + const polynomialTransport<Thermo, PolySize>& pt +) +{ + return polynomialTransport<Thermo, PolySize> + ( + s*static_cast<const Thermo&>(pt), + pt.muPolynomial_, + pt.kappaPolynomial_ + ); +} + + +template<class Thermo, int PolySize> +inline Foam::polynomialTransport<Thermo, PolySize> Foam::operator== +( + const polynomialTransport<Thermo, PolySize>& pt1, + const polynomialTransport<Thermo, PolySize>& pt2 +) +{ + return pt2 - pt1; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/thermophysicalFunctions/APIfunctions/APIdiffCoefFunc/APIdiffCoefFunc.H b/src/thermophysicalModels/thermophysicalFunctions/APIfunctions/APIdiffCoefFunc/APIdiffCoefFunc.H index b24d250d49b52285b56fe398d1e4d6e5bf60e019..7f95e450e3e205d506c1d1dd9af1384a8c66c83a 100644 --- a/src/thermophysicalModels/thermophysicalFunctions/APIfunctions/APIdiffCoefFunc/APIdiffCoefFunc.H +++ b/src/thermophysicalModels/thermophysicalFunctions/APIfunctions/APIdiffCoefFunc/APIdiffCoefFunc.H @@ -47,7 +47,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class APIdiffCoefFunc Declaration + Class APIdiffCoefFunc Declaration \*---------------------------------------------------------------------------*/ class APIdiffCoefFunc @@ -59,6 +59,9 @@ class APIdiffCoefFunc // API vapour mass diffusivity function coefficients scalar a_, b_, wf_, wa_; + // Helper variables + scalar alpha_, beta_; + public: @@ -74,7 +77,9 @@ public: a_(a), b_(b), wf_(wf), - wa_(wa) + wa_(wa), + alpha_(sqrt(1/wf_ + 1/wa_)), + beta_(sqr((cbrt(a_) + cbrt(b_)))) {} //- Construct from Istream @@ -83,21 +88,21 @@ public: a_(readScalar(is)), b_(readScalar(is)), wf_(readScalar(is)), - wa_(readScalar(is)) + wa_(readScalar(is)), + alpha_(sqrt(1/wf_ + 1/wa_)), + beta_(sqr((cbrt(a_) + cbrt(b_)))) {} // Member Functions - //- API vapour mass diffusivity function + //- API vapour mass diffusivity function using properties from + // construction scalar f(scalar p, scalar T) const { - return - 3.6059e-3*(pow(1.8*T, 1.75))*sqrt(1/wf_ + 1/wa_) - /(p*sqr((cbrt(a_) + cbrt(b_)))); + return 3.6059e-3*(pow(1.8*T, 1.75))*alpha_/(p*beta_); } - //- Write the function coefficients void writeData(Ostream& os) const { diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C index 38a275aeb573e2603e2418bcf1b342397b350a80..a6b699d20d6fda74edceb157834b4f392049bce4 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.C @@ -45,25 +45,23 @@ namespace RASModels scalar mutRoughWallFunctionFvPatchScalarField::fnRough ( const scalar KsPlus, - const scalar Cs, - const scalar kappa + const scalar Cs ) const { - // Set deltaB based on non-dimensional roughness height - scalar deltaB = 0.0; + // Return fn based on non-dimensional roughness height + if (KsPlus < 90.0) { - deltaB = - 1.0/kappa - *log((KsPlus - 2.25)/87.75 + Cs*KsPlus) - *sin(0.4258*(log(KsPlus) - 0.811)); + return pow + ( + (KsPlus - 2.25)/87.75 + Cs*KsPlus, + sin(0.4258*(log(KsPlus) - 0.811)) + ); } else { - deltaB = 1.0/kappa*log(1.0 + Cs*KsPlus); + return (1.0 + Cs*KsPlus); } - - return exp(min(deltaB*kappa, 50.0)); } @@ -216,8 +214,8 @@ void mutRoughWallFunctionFvPatchScalarField::updateCoeffs() scalar yPlusLamNew = yPlusLam; if (KsPlus > 2.25) { - Edash = E/fnRough(KsPlus, Cs_[faceI], kappa); - yPlusLam = rasModel.yPlusLam(kappa, Edash); + Edash = E/fnRough(KsPlus, Cs_[faceI]); + yPlusLamNew = rasModel.yPlusLam(kappa, Edash); } if (debug) @@ -231,7 +229,9 @@ void mutRoughWallFunctionFvPatchScalarField::updateCoeffs() if (yPlus > yPlusLamNew) { - mutw[faceI] = muw[faceI]*(yPlus*kappa/log(Edash*yPlus) - 1); + mutw[faceI] = + muw[faceI] + *(yPlus*kappa/log(max(Edash*yPlus, 1+1e-4)) - 1); } else { diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H index 88209f4184e215053badbfe174afd321ff03f801..b12ad6bc5765937ccb7226bb9580f9605fa91b6a 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H +++ b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutRoughWallFunction/mutRoughWallFunctionFvPatchScalarField.H @@ -83,12 +83,7 @@ class mutRoughWallFunctionFvPatchScalarField // Private member functions //- Compute the roughness function - scalar fnRough - ( - const scalar KsPlus, - const scalar Cs, - const scalar kappa - ) const; + scalar fnRough(const scalar KsPlus, const scalar Cs) const; public: diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C index 7b6e14493e85f1d27cdf8d7e8a16a46606c82f69..afb08a5d52320014e214532e6da48e6ebaad1a90 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.C @@ -45,8 +45,7 @@ namespace RASModels scalar nutRoughWallFunctionFvPatchScalarField::fnRough ( const scalar KsPlus, - const scalar Cs, - const scalar kappa + const scalar Cs ) const { // Return fn based on non-dimensional roughness height @@ -205,7 +204,7 @@ void nutRoughWallFunctionFvPatchScalarField::updateCoeffs() if (KsPlus > 2.25) { - Edash = E/fnRough(KsPlus, Cs_[faceI], kappa); + Edash = E/fnRough(KsPlus, Cs_[faceI]); } if (yPlus > yPlusLam) diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H index 968c5c3f8f86612779651182cc3a6f733dd1ec92..3371cbaa6d396ccdcb7ef8aec11ca662c10882f2 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H +++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutRoughWallFunction/nutRoughWallFunctionFvPatchScalarField.H @@ -80,12 +80,7 @@ class nutRoughWallFunctionFvPatchScalarField // Private member functions //- Compute the roughness function - scalar fnRough - ( - const scalar KsPlus, - const scalar Cs, - const scalar kappa - ) const; + scalar fnRough(const scalar KsPlus, const scalar Cs) const; public: diff --git a/tutorials/basic/laplacianFoam/flange/constant/polyMesh/boundary b/tutorials/basic/laplacianFoam/flange/constant/polyMesh/boundary index c2b732e0e5fed98ab4b4bcf7888c8641d7937efd..c97383b613a17960eeb1dc2e49141439c8e3c066 100644 --- a/tutorials/basic/laplacianFoam/flange/constant/polyMesh/boundary +++ b/tutorials/basic/laplacianFoam/flange/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,6 +10,7 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/basic/potentialFoam/cylinder/constant/polyMesh/boundary b/tutorials/basic/potentialFoam/cylinder/constant/polyMesh/boundary index b336b81ded7aba0392e9febbdc15b3d7340d4ea7..057865c7ffa417ce9deaabef7ce0d5a894bc50fd 100644 --- a/tutorials/basic/potentialFoam/cylinder/constant/polyMesh/boundary +++ b/tutorials/basic/potentialFoam/cylinder/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,6 +10,7 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/basic/potentialFoam/pitzDaily/constant/polyMesh/boundary b/tutorials/basic/potentialFoam/pitzDaily/constant/polyMesh/boundary index 8eb7d98937fcdab8a13949fd6bdc743a0928e6d0..313dcceba1abd7b93d57320c4c674f1734692506 100644 --- a/tutorials/basic/potentialFoam/pitzDaily/constant/polyMesh/boundary +++ b/tutorials/basic/potentialFoam/pitzDaily/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,46 +10,43 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 5 ( -inlet -{ - type patch; - nFaces 30; - startFace 24170; -} - -outlet -{ - type patch; - nFaces 57; - startFace 24200; -} - -upperWall -{ - type wall; - nFaces 223; - startFace 24257; -} - -lowerWall -{ - type wall; - nFaces 250; - startFace 24480; -} - -frontAndBack -{ - type empty; - nFaces 24450; - startFace 24730; -} + inlet + { + type patch; + nFaces 30; + startFace 24170; + } + outlet + { + type patch; + nFaces 57; + startFace 24200; + } + upperWall + { + type wall; + nFaces 223; + startFace 24257; + } + lowerWall + { + type wall; + nFaces 250; + startFace 24480; + } + frontAndBack + { + type empty; + nFaces 24450; + startFace 24730; + } ) // ************************************************************************* // diff --git a/tutorials/basic/scalarTransportFoam/pitzDaily/constant/polyMesh/boundary b/tutorials/basic/scalarTransportFoam/pitzDaily/constant/polyMesh/boundary index 8eb7d98937fcdab8a13949fd6bdc743a0928e6d0..313dcceba1abd7b93d57320c4c674f1734692506 100644 --- a/tutorials/basic/scalarTransportFoam/pitzDaily/constant/polyMesh/boundary +++ b/tutorials/basic/scalarTransportFoam/pitzDaily/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,46 +10,43 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 5 ( -inlet -{ - type patch; - nFaces 30; - startFace 24170; -} - -outlet -{ - type patch; - nFaces 57; - startFace 24200; -} - -upperWall -{ - type wall; - nFaces 223; - startFace 24257; -} - -lowerWall -{ - type wall; - nFaces 250; - startFace 24480; -} - -frontAndBack -{ - type empty; - nFaces 24450; - startFace 24730; -} + inlet + { + type patch; + nFaces 30; + startFace 24170; + } + outlet + { + type patch; + nFaces 57; + startFace 24200; + } + upperWall + { + type wall; + nFaces 223; + startFace 24257; + } + lowerWall + { + type wall; + nFaces 250; + startFace 24480; + } + frontAndBack + { + type empty; + nFaces 24450; + startFace 24730; + } ) // ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/epsilon b/tutorials/combustion/XiFoam/les/pitzDaily/0/alphaSgs similarity index 81% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/epsilon rename to tutorials/combustion/XiFoam/les/pitzDaily/0/alphaSgs index ec63ed16726be65c6d5561d1b31ab88fd3ef8581..9a83c0337ed2a698047bce788505fcaf4fd037eb 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/epsilon +++ b/tutorials/combustion/XiFoam/les/pitzDaily/0/alphaSgs @@ -10,37 +10,37 @@ FoamFile version 2.0; format ascii; class volScalarField; - object epsilon; + object alphaSgs; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [0 2 -3 0 0 0 0]; +dimensions [1 -1 -1 0 0 0 0]; -internalField uniform 5390.5; +internalField uniform 0; boundaryField { - top + inlet { type zeroGradient; } - bottom + outlet { type zeroGradient; } - walls + upperWall { type zeroGradient; } - symmetry + lowerWall { - type symmetryPlane; + type zeroGradient; } - frontAndBack + frontAndBack { type empty; } diff --git a/tutorials/combustion/XiFoam/les/pitzDaily/constant/polyMesh/boundary b/tutorials/combustion/XiFoam/les/pitzDaily/constant/polyMesh/boundary index 8eb7d98937fcdab8a13949fd6bdc743a0928e6d0..313dcceba1abd7b93d57320c4c674f1734692506 100644 --- a/tutorials/combustion/XiFoam/les/pitzDaily/constant/polyMesh/boundary +++ b/tutorials/combustion/XiFoam/les/pitzDaily/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,46 +10,43 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 5 ( -inlet -{ - type patch; - nFaces 30; - startFace 24170; -} - -outlet -{ - type patch; - nFaces 57; - startFace 24200; -} - -upperWall -{ - type wall; - nFaces 223; - startFace 24257; -} - -lowerWall -{ - type wall; - nFaces 250; - startFace 24480; -} - -frontAndBack -{ - type empty; - nFaces 24450; - startFace 24730; -} + inlet + { + type patch; + nFaces 30; + startFace 24170; + } + outlet + { + type patch; + nFaces 57; + startFace 24200; + } + upperWall + { + type wall; + nFaces 223; + startFace 24257; + } + lowerWall + { + type wall; + nFaces 250; + startFace 24480; + } + frontAndBack + { + type empty; + nFaces 24450; + startFace 24730; + } ) // ************************************************************************* // diff --git a/tutorials/combustion/XiFoam/les/pitzDaily3D/0/alphaSgs b/tutorials/combustion/XiFoam/les/pitzDaily3D/0/alphaSgs new file mode 100644 index 0000000000000000000000000000000000000000..c5331748aea22d1d09e92cbd2d3387342f312a82 --- /dev/null +++ b/tutorials/combustion/XiFoam/les/pitzDaily3D/0/alphaSgs @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alphaSgs; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + inlet + { + type zeroGradient; + } + + outlet + { + type zeroGradient; + } + + upperWall + { + type zeroGradient; + } + + lowerWall + { + type zeroGradient; + } + + frontAndBack + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/combustion/XiFoam/Allclean b/tutorials/combustion/XiFoam/ras/Allclean similarity index 100% rename from tutorials/combustion/XiFoam/Allclean rename to tutorials/combustion/XiFoam/ras/Allclean diff --git a/tutorials/combustion/XiFoam/Allrun b/tutorials/combustion/XiFoam/ras/Allrun similarity index 100% rename from tutorials/combustion/XiFoam/Allrun rename to tutorials/combustion/XiFoam/ras/Allrun diff --git a/tutorials/combustion/dieselFoam/aachenBomb/0/alphat b/tutorials/combustion/dieselFoam/aachenBomb/0/alphat index 2684dd73c822be130389cc925a29ebd9cb627ec0..c56c4724ce2969ef2ccaa17e5b3344125efc1596 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/0/alphat +++ b/tutorials/combustion/dieselFoam/aachenBomb/0/alphat @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -23,7 +23,7 @@ boundaryField { walls { - type alphatWallFunction; + type compressible::alphatWallFunction; value uniform 0; } } diff --git a/tutorials/combustion/dieselFoam/aachenBomb/0/epsilon b/tutorials/combustion/dieselFoam/aachenBomb/0/epsilon index e9dd46eb33ab84ca1e8bab21d748bfc6f058750a..e38ed02784cfef654a658662ead0d66dd32c48a6 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/0/epsilon +++ b/tutorials/combustion/dieselFoam/aachenBomb/0/epsilon @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -23,7 +23,7 @@ boundaryField { walls { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 90; } } diff --git a/tutorials/combustion/dieselFoam/aachenBomb/0/k b/tutorials/combustion/dieselFoam/aachenBomb/0/k index 251a39ce81061432f904f98f80de677eb38ebce6..b037171c72f46447a17c3aa8a16e71f5ae3acc3b 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/0/k +++ b/tutorials/combustion/dieselFoam/aachenBomb/0/k @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -23,7 +23,7 @@ boundaryField { walls { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 1; } } diff --git a/tutorials/combustion/dieselFoam/aachenBomb/0/mut b/tutorials/combustion/dieselFoam/aachenBomb/0/mut index e687f9b8fa216ba2de2f97e045c11372525473ae..2750ce32ecd5ed962213674d95930ff9b34920c5 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/0/mut +++ b/tutorials/combustion/dieselFoam/aachenBomb/0/mut @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ diff --git a/tutorials/combustion/dieselFoam/aachenBomb/constant/chemistryProperties b/tutorials/combustion/dieselFoam/aachenBomb/constant/chemistryProperties index be340ec092624c3700ecdf023d551ed099f103da..72c8fd655e70457a8d5c5a2e6d71c6c8c111423e 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/constant/chemistryProperties +++ b/tutorials/combustion/dieselFoam/aachenBomb/constant/chemistryProperties @@ -15,9 +15,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +psiChemistryModel ODEChemistryModel<gasThermoPhysics>; + chemistry off; -chemistrySolver ODE; +chemistrySolver ode; initialChemicalTimeStep 1e-07; @@ -32,7 +34,7 @@ EulerImplicitCoeffs equilibriumRateLimiter off; } -ODECoeffs +odeCoeffs { ODESolver SIBS; eps 0.05; diff --git a/tutorials/combustion/dieselFoam/aachenBomb/constant/polyMesh/boundary b/tutorials/combustion/dieselFoam/aachenBomb/constant/polyMesh/boundary index 2e94e303b70438668052b23280a41adea47a0dd4..5e28555623fa8687c821f1ff8ff76939fe33007a 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/constant/polyMesh/boundary +++ b/tutorials/combustion/dieselFoam/aachenBomb/constant/polyMesh/boundary @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ diff --git a/tutorials/combustion/dieselFoam/aachenBomb/constant/thermophysicalProperties b/tutorials/combustion/dieselFoam/aachenBomb/constant/thermophysicalProperties index 24238233850126a97429b47c579583a711ef9122..f94afe7312e74472fc63442c3c4e59e0c6794e81 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/constant/thermophysicalProperties +++ b/tutorials/combustion/dieselFoam/aachenBomb/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hMixtureThermo<reactingMixture>; +thermoType hPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; CHEMKINFile "$FOAM_CASE/chemkin/chem.inp"; diff --git a/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary b/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary index 7a3a7294ecd5d61df7425180aabf09e9843da208..24684a3ecfde305ea8ba37ac041d8c3e75c1d87c 100644 --- a/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary +++ b/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,32 +10,31 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 3 ( -piston -{ - type wall; - nFaces 1326; - startFace 79522; -} - -liner -{ - type wall; - nFaces 2710; - startFace 80848; -} - -cylinderHead -{ - type wall; - nFaces 2184; - startFace 83558; -} + piston + { + type wall; + nFaces 1326; + startFace 79522; + } + liner + { + type wall; + nFaces 2710; + startFace 80848; + } + cylinderHead + { + type wall; + nFaces 2184; + startFace 83558; + } ) // ************************************************************************* // diff --git a/tutorials/combustion/engineFoam/kivaTest/system/controlDict b/tutorials/combustion/engineFoam/kivaTest/system/controlDict index 359d4d135af67717be49fb54cd02cb64b8b16c58..2ae209cb5f6c44f1723423ec922326436a2e7b58 100644 --- a/tutorials/combustion/engineFoam/kivaTest/system/controlDict +++ b/tutorials/combustion/engineFoam/kivaTest/system/controlDict @@ -11,10 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object controlDict; + object controlDict.1st; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +applicationClass engineFoam; + startFrom startTime; startTime -180; diff --git a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/constant/thermophysicalProperties b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/constant/thermophysicalProperties index 9081551c6f6942e27458d17f287b256ba4c3ea2f..6fff161f863eab88afe4fcca0e5ba1f5fcc980d8 100644 --- a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.96 1004.5 0 1.458e-06 110.4; diff --git a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/system/machines b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/system/machines deleted file mode 100644 index c1ebafec0159993aab2b1525f952e5b28e714776..0000000000000000000000000000000000000000 --- a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/system/machines +++ /dev/null @@ -1,8 +0,0 @@ -borg1 -borg2 -borg3 -borg4 -borg5 -borg6 -borg7 -borg8 diff --git a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/constant/thermophysicalProperties b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/constant/thermophysicalProperties index a4d934aeb2e5b8a50cb0e200272cff6f61f4483d..140131eb07a96a0fe4afdf9fe2dd261ceed10c8f 100644 --- a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/constant/thermophysicalProperties @@ -17,7 +17,7 @@ FoamFile Pr Pr [ 0 0 0 0 0 0 0 ] 0.72; -thermoType hThermo<pureMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>; mixture N2 1 28.01348 100 10000 1000 2.9525407 0.0013968838 -4.9262577e-07 7.8600091e-11 -4.6074978e-15 -923.93753 5.8718221 3.5309628 -0.0001236595 -5.0299339e-07 2.4352768e-09 -1.4087954e-12 -1046.9637 2.9674391 1.458e-06 110; diff --git a/tutorials/compressible/rhoCentralFoam/forwardStep/constant/thermophysicalProperties b/tutorials/compressible/rhoCentralFoam/forwardStep/constant/thermophysicalProperties index 841a143c18ed9bb76e2fa5d864cbdf9ca93fed50..41f4c6be09c194abc58193ca7b00c15564660992 100644 --- a/tutorials/compressible/rhoCentralFoam/forwardStep/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoCentralFoam/forwardStep/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture normalisedGas 1 11640.3 2.5 0 0 1; diff --git a/tutorials/compressible/rhoCentralFoam/obliqueShock/constant/thermophysicalProperties b/tutorials/compressible/rhoCentralFoam/obliqueShock/constant/thermophysicalProperties index 841a143c18ed9bb76e2fa5d864cbdf9ca93fed50..41f4c6be09c194abc58193ca7b00c15564660992 100644 --- a/tutorials/compressible/rhoCentralFoam/obliqueShock/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoCentralFoam/obliqueShock/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture normalisedGas 1 11640.3 2.5 0 0 1; diff --git a/tutorials/compressible/rhoCentralFoam/shockTube/constant/thermophysicalProperties b/tutorials/compressible/rhoCentralFoam/shockTube/constant/thermophysicalProperties index 919fec0ceab7d526193af6520876a6a75fe08f7a..613fd43883bcdefdfd3e4ec65f8d4a360a47b432 100644 --- a/tutorials/compressible/rhoCentralFoam/shockTube/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoCentralFoam/shockTube/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.96 1004.5 2.544e+06 0 1; diff --git a/tutorials/compressible/rhoCentralFoam/wedge15Ma5/constant/thermophysicalProperties b/tutorials/compressible/rhoCentralFoam/wedge15Ma5/constant/thermophysicalProperties index 841a143c18ed9bb76e2fa5d864cbdf9ca93fed50..41f4c6be09c194abc58193ca7b00c15564660992 100644 --- a/tutorials/compressible/rhoCentralFoam/wedge15Ma5/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoCentralFoam/wedge15Ma5/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture normalisedGas 1 11640.3 2.5 0 0 1; diff --git a/tutorials/compressible/rhoPimpleFoam/angledDuct/0/alphat b/tutorials/compressible/rhoPimpleFoam/angledDuct/0/alphat index f609fa6c14c41bba0ec2726af2cf56a9ca8c949a..dc2104f83c5ce3f90987cad077de403fcd15988e 100644 --- a/tutorials/compressible/rhoPimpleFoam/angledDuct/0/alphat +++ b/tutorials/compressible/rhoPimpleFoam/angledDuct/0/alphat @@ -23,22 +23,22 @@ boundaryField { front { - type alphatWallFunction; + type compressible::alphatWallFunction; value uniform 0; } back { - type alphatWallFunction; + type compressible::alphatWallFunction; value uniform 0; } wall { - type alphatWallFunction; + type compressible::alphatWallFunction; value uniform 0; } porosityWall { - type alphatWallFunction; + type compressible::alphatWallFunction; value uniform 0; } inlet diff --git a/tutorials/compressible/rhoPimpleFoam/angledDuct/0/epsilon b/tutorials/compressible/rhoPimpleFoam/angledDuct/0/epsilon index 502e0489570c5c063dd34ce656009712bd077300..e4dccfe57777d09934d55a61d67f94e2917585f0 100644 --- a/tutorials/compressible/rhoPimpleFoam/angledDuct/0/epsilon +++ b/tutorials/compressible/rhoPimpleFoam/angledDuct/0/epsilon @@ -23,27 +23,27 @@ boundaryField { front { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 200; } back { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 200; } wall { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 200; } porosityWall { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 200; } inlet { - type turbulentMixingLengthDissipationRateInlet; + type compressible::turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoPimpleFoam/angledDuct/0/k b/tutorials/compressible/rhoPimpleFoam/angledDuct/0/k index 6171b9506b8a48d2de911a5c485b6c2bd13d6028..36be49f2ea41fa4546f2b605b525f151f624a334 100644 --- a/tutorials/compressible/rhoPimpleFoam/angledDuct/0/k +++ b/tutorials/compressible/rhoPimpleFoam/angledDuct/0/k @@ -23,22 +23,22 @@ boundaryField { front { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 1; } back { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 1; } wall { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 1; } porosityWall { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 1; } inlet diff --git a/tutorials/compressible/rhoPimpleFoam/angledDuct/constant/thermophysicalProperties b/tutorials/compressible/rhoPimpleFoam/angledDuct/constant/thermophysicalProperties index bd1a6c1f0496c414f331f2d0c1357fd1918e36a8..a94ec3d442ef2ea46e7b3a863dd5512f05d8ae85 100644 --- a/tutorials/compressible/rhoPimpleFoam/angledDuct/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoPimpleFoam/angledDuct/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1007 0 1.4792e-06 116; diff --git a/tutorials/compressible/rhoPisoFoam/les/pitzDaily/constant/thermophysicalProperties b/tutorials/compressible/rhoPisoFoam/les/pitzDaily/constant/thermophysicalProperties index 7f85f2afd5e60654d526bf686b5f4f2819841dab..3c52e2545f8de88e10ecba0a455f73b2a3565e66 100644 --- a/tutorials/compressible/rhoPisoFoam/les/pitzDaily/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoPisoFoam/les/pitzDaily/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1000 0 1.8e-05 0.7; diff --git a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/epsilon b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/epsilon index 1b7c6c0d70a42a55f17e2b579fa12cf5403e1412..698ff247d3588ecf485750ed392cd0745e137d2c 100644 --- a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/epsilon +++ b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/epsilon @@ -23,13 +23,13 @@ boundaryField { movingWall { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 0; } fixedWalls { - type epsilonWallFunction; + type compressible::epsilonWallFunction; value uniform 0; } diff --git a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/k b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/k index 64ea0ca8fbd25e149a023c3c3ecee9af977197a8..8f645b088c807cbc6b2215416a42a7e5e316c791 100644 --- a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/k +++ b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/k @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 0 2 -2 0 0 0 0 ]; +dimensions [0 2 -2 0 0 0 0]; internalField uniform 0.00325; @@ -23,16 +23,14 @@ boundaryField { movingWall { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 0; } - fixedWalls { - type kQRWallFunction; + type compressible::kQRWallFunction; value uniform 0; } - frontAndBack { type empty; diff --git a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/mut b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/mut index 3aaa8e77f82971aa58a9b96e84e20178a824085a..a0f4c473102445c3741b8324de193086abc82af1 100644 --- a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/mut +++ b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/mut @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 1 -1 -1 0 0 0 0 ]; +dimensions [1 -1 -1 0 0 0 0]; internalField uniform 0; @@ -26,13 +26,11 @@ boundaryField type mutWallFunction; value uniform 0; } - fixedWalls { type mutWallFunction; value uniform 0; } - frontAndBack { type empty; diff --git a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/omega b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/omega index fa4f022f0140184baac96f3b5198908e796c1cf2..863c2292b647b2cee86d4fe26c990f3677ed9502 100644 --- a/tutorials/compressible/rhoPisoFoam/ras/cavity/0/omega +++ b/tutorials/compressible/rhoPisoFoam/ras/cavity/0/omega @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 0 0 -1 0 0 0 0 ]; +dimensions [0 0 -1 0 0 0 0]; internalField uniform 2.6; @@ -23,16 +23,14 @@ boundaryField { movingWall { - type omegaWallFunction; + type compressible::omegaWallFunction; value uniform 0; } - fixedWalls { - type omegaWallFunction; + type compressible::omegaWallFunction; value uniform 0; } - frontAndBack { type empty; diff --git a/tutorials/compressible/rhoPisoFoam/ras/cavity/constant/thermophysicalProperties b/tutorials/compressible/rhoPisoFoam/ras/cavity/constant/thermophysicalProperties index d02b85fec4397d8da50129dd6d2374b56619abe6..f7638810ff7a4d465637cea0b9f7caca2680d98f 100644 --- a/tutorials/compressible/rhoPisoFoam/ras/cavity/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoPisoFoam/ras/cavity/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1007 0 1.84e-05 0.7; diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/alphat b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..dc2104f83c5ce3f90987cad077de403fcd15988e --- /dev/null +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/alphat @@ -0,0 +1,57 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + front + { + type compressible::alphatWallFunction; + value uniform 0; + } + back + { + type compressible::alphatWallFunction; + value uniform 0; + } + wall + { + type compressible::alphatWallFunction; + value uniform 0; + } + porosityWall + { + type compressible::alphatWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon index 13cfc84a0ec1f4c5046a0e4d04d0b7a446a7d611..e0c4dcffbcfbaa46aba58a4bc0f5f0f8f72f3c7e 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon @@ -23,31 +23,31 @@ boundaryField { front { - type epsilonWallFunction; - value uniform 0; + type compressible::epsilonWallFunction; + value uniform 200; } back { - type epsilonWallFunction; - value uniform 0; + type compressible::epsilonWallFunction; + value uniform 200; } wall { - type epsilonWallFunction; - value uniform 0; + type compressible::epsilonWallFunction; + value uniform 200; } porosityWall { - type epsilonWallFunction; - value uniform 0; + type compressible::epsilonWallFunction; + value uniform 200; } inlet { - type turbulentMixingLengthDissipationRateInlet; + type compressible::turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k index 16c1e28fb894fe44a909cc4caa010fb591b74072..1243952ec2d5bc9a98375a7c5de17f4f406689c2 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k @@ -23,26 +23,26 @@ boundaryField { front { - type kQRWallFunction; - value uniform 0; + type compressible::kQRWallFunction; + value uniform 1; } back { - type kQRWallFunction; - value uniform 0; + type compressible::kQRWallFunction; + value uniform 1; } wall { - type kQRWallFunction; - value uniform 0; + type compressible::kQRWallFunction; + value uniform 1; } porosityWall { - type kQRWallFunction; - value uniform 0; + type compressible::kQRWallFunction; + value uniform 1; } inlet diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties index ab0fa0fe3c8b725dac44909a43c7849d66428e8c..81db5fe944aba427c44fb2a6289733bb6ef6eb44 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1007 0 1.4792e-06 116; diff --git a/tutorials/compressible/sonicFoam/Allrun b/tutorials/compressible/sonicFoam/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..4f1a1e464a13287c4b685a7fdc8fc94ae46230b9 --- /dev/null +++ b/tutorials/compressible/sonicFoam/Allrun @@ -0,0 +1,5 @@ +#!/bin/sh +set -x + +(cd laminar && ./Allrun) +(cd ras && ./Allrun) diff --git a/tutorials/compressible/sonicFoam/laminar/Allrun b/tutorials/compressible/sonicFoam/laminar/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..573ff3a12dff2b3e37cb14a13f0d7ed7454b3abf --- /dev/null +++ b/tutorials/compressible/sonicFoam/laminar/Allrun @@ -0,0 +1,22 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +# Get application name from directory +application=sonicFoam + +cases=" \ +forwardStep \ +shockTube \ +" +for case in $cases +do + (cd $case && runApplication blockMesh) +# + if [ "$case" = "shockTube" ] ; then + (cd $case && ./Allrun) + else + (cd $case && runApplication $application) + fi +# +done diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/thermophysicalProperties b/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..82d43de5709a190f9567de1b5d3e6b9abe8e119a --- /dev/null +++ b/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/thermophysicalProperties @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType ePsiThermo<pureMixture<constTransport<specieThermo<eConstThermo<perfectGas>>>>>; + +mixture air 1 11640.31 1.78571 0 0 0.7; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/turbulenceProperties b/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..c2c3b28a1b4e8f4a2cae55f58bd61f9b1a67b488 --- /dev/null +++ b/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes b/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes index 1c36c50aa67708935b325763ac50f49fc7fc4a44..6bebe35dfbbc69607c1b0588b7573526be914b21 100644 --- a/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes @@ -30,17 +30,19 @@ gradSchemes divSchemes { default none; - div(phi,U) Gauss limitedLinearV 1; + div(phi,U) Gauss upwind; div(phid,p) Gauss limitedLinear 1; div(phi,e) Gauss limitedLinear 1; + div(phiU,p) Gauss limitedLinear 1; + div((muEff*dev2(grad(U).T()))) Gauss linear 1; } laplacianSchemes { default none; - laplacian(mu,U) Gauss linear corrected; - laplacian(mu,e) Gauss linear corrected; laplacian((rho*(1|A(U))),p) Gauss linear corrected; + laplacian(muEff,U) Gauss linear corrected; + laplacian(alphaEff,e) Gauss linear corrected; } interpolationSchemes diff --git a/tutorials/compressible/sonicFoam/laminar/shockTube/constant/thermophysicalProperties b/tutorials/compressible/sonicFoam/laminar/shockTube/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..2560f39757b887a4b0539ac5a9e4972df349cf7b --- /dev/null +++ b/tutorials/compressible/sonicFoam/laminar/shockTube/constant/thermophysicalProperties @@ -0,0 +1,23 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType ePsiThermo<pureMixture<constTransport<specieThermo<eConstThermo<perfectGas>>>>>; + +mixture air 1 28.9 717.5 0 0 0.7; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/shockTube/constant/turbulenceProperties b/tutorials/compressible/sonicFoam/laminar/shockTube/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..c2c3b28a1b4e8f4a2cae55f58bd61f9b1a67b488 --- /dev/null +++ b/tutorials/compressible/sonicFoam/laminar/shockTube/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes b/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes index deef4abd2614ed5708f90773817385c711ea18e4..6bebe35dfbbc69607c1b0588b7573526be914b21 100644 --- a/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes @@ -33,14 +33,16 @@ divSchemes div(phi,U) Gauss upwind; div(phid,p) Gauss limitedLinear 1; div(phi,e) Gauss limitedLinear 1; + div(phiU,p) Gauss limitedLinear 1; + div((muEff*dev2(grad(U).T()))) Gauss linear 1; } laplacianSchemes { default none; - laplacian(mu,U) Gauss linear corrected; - laplacian(mu,e) Gauss linear corrected; laplacian((rho*(1|A(U))),p) Gauss linear corrected; + laplacian(muEff,U) Gauss linear corrected; + laplacian(alphaEff,e) Gauss linear corrected; } interpolationSchemes diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/thermophysicalProperties b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/thermophysicalProperties index 8e15891e509cc2f3819180595b2f41133983d22c..5580ffd632eb5654f28b94c1895a31d40aff2e8c 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/thermophysicalProperties +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/thermophysicalProperties @@ -15,9 +15,9 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType ePsiThermo<pureMixture<constTransport<specieThermo<eConstThermo<perfectGas>>>>>; -mixture air 1 28.9 1000 2.544e+06 1.8e-05 0.7; +mixture air 1 28.9 717.5 0 1.8e-05 0.7; // ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..3721a46a2ead37eb2bf10434bcde59afa9fe9bf6 --- /dev/null +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/controlDict b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/controlDict index ce2e9218c9147050f7603bc262f792b96c0dd5d6..aad6ecd97e30ebec71a08d33a00af3cdc2d8d691 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/controlDict +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/controlDict @@ -49,7 +49,12 @@ functions { type forceCoeffs; functionObjectLibs ( "libforces.so" ); - patches ( WALL10 ); + outputControl timeStep; + outputInterval 1; + patches + ( + WALL10 + ); pName p; UName U; log true; diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes index 0cab17b88eec287ffaaa417e472a94fefbc2d732..444443d62d3df4f18f9189082ba3d4f6b18c613c 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(R) Gauss linear; div(phid,p) Gauss limitedLinear 1; div(phiU,p) Gauss limitedLinear 1; - div(phi,h) Gauss limitedLinear 1; + div(phi,e) Gauss limitedLinear 1; div((muEff*dev2(grad(U).T()))) Gauss linear; } @@ -47,7 +47,7 @@ laplacianSchemes laplacian(DREff,R) Gauss linear limited 0.5; laplacian(DepsilonEff,epsilon) Gauss linear limited 0.5; laplacian((rho*(1|A(U))),p) Gauss linear limited 0.5; - laplacian(alphaEff,h) Gauss linear limited 0.5; + laplacian(alphaEff,e) Gauss linear limited 0.5; } interpolationSchemes @@ -63,7 +63,7 @@ snGradSchemes fluxRequired { default no; - p ; + p; } diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSolution b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSolution index a1782db6853bdb92132e5fc1a5e57cffb57a091f..d46dcd13cf44c7d474ea2f11965f7e2cc907cada 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSolution +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSolution @@ -41,7 +41,7 @@ solvers relTol 0; } - h + e { solver PBiCG; preconditioner DILU; diff --git a/tutorials/compressible/sonicFoam/ras/prism/constant/thermophysicalProperties b/tutorials/compressible/sonicFoam/ras/prism/constant/thermophysicalProperties index 754163e2a972e3860710533ee809e51d9c3a99d7..5580ffd632eb5654f28b94c1895a31d40aff2e8c 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/constant/thermophysicalProperties +++ b/tutorials/compressible/sonicFoam/ras/prism/constant/thermophysicalProperties @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -15,9 +15,9 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType ePsiThermo<pureMixture<constTransport<specieThermo<eConstThermo<perfectGas>>>>>; -mixture air 1 28.9 1300 2.544e+06 1.84e-05 0.7; +mixture air 1 28.9 717.5 0 1.8e-05 0.7; // ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties b/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..3721a46a2ead37eb2bf10434bcde59afa9fe9bf6 --- /dev/null +++ b/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes b/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes index 7b3c03466f4a90b221e27fd07136ba28a964021b..9737d97c289fa4fbab2e69809936f7e094fc7463 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(R) Gauss linear; div(phid,p) Gauss limitedLinear 1; div(phiU,p) Gauss limitedLinear 1; - div(phi,h) Gauss limitedLinear 1; + div(phi,e) Gauss limitedLinear 1; div((muEff*dev2(grad(U).T()))) Gauss linear; } @@ -47,7 +47,7 @@ laplacianSchemes laplacian(DREff,R) Gauss linear corrected; laplacian(DepsilonEff,epsilon) Gauss linear corrected; laplacian((rho*(1|A(U))),p) Gauss linear corrected; - laplacian(alphaEff,h) Gauss linear corrected; + laplacian(alphaEff,e) Gauss linear corrected; } interpolationSchemes @@ -63,7 +63,7 @@ snGradSchemes fluxRequired { default no; - p ; + p; } diff --git a/tutorials/compressible/sonicFoam/ras/prism/system/fvSolution b/tutorials/compressible/sonicFoam/ras/prism/system/fvSolution index 5341a980f476377d047e400880c6756dafccccc2..5ff77210a9690153b90dde73e1370197d85d7cbe 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/system/fvSolution +++ b/tutorials/compressible/sonicFoam/ras/prism/system/fvSolution @@ -41,7 +41,7 @@ solvers relTol 0; } - h + e { solver PBiCG; preconditioner DILU; diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/boundaryT b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/boundaryT new file mode 100644 index 0000000000000000000000000000000000000000..9afc247827516321ce0b5e52eb795aacee4423ca --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/boundaryT @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object boundaryT; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/boundaryU b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/boundaryU new file mode 100644 index 0000000000000000000000000000000000000000..b7117eafbc88a45b32ee2caf91af18ae22182dc7 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/boundaryU @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object boundaryU; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/dsmcRhoN b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/dsmcRhoN new file mode 100644 index 0000000000000000000000000000000000000000..e9eae893d481e09bfa8bd9c14da29e2a9d783d7d --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/dsmcRhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object dsmcRhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/fD b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/fD new file mode 100644 index 0000000000000000000000000000000000000000..0ec2aa7410f25dbefe5ffe80efad7750657881f5 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/fD @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object fD; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/iDof b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/iDof new file mode 100644 index 0000000000000000000000000000000000000000..626a947a110e1337a002592b4c1e83e80ac63e07 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/iDof @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object iDof; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/internalE b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/internalE new file mode 100644 index 0000000000000000000000000000000000000000..3dc30a0f2ec2d9c335764c66826d4e2863827da2 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/internalE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object internalE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/linearKE b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/linearKE new file mode 100644 index 0000000000000000000000000000000000000000..1d8b022dc9afe7adf9d56a39e09cded1901e6bf8 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/linearKE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object linearKE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/momentum b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/momentum new file mode 100644 index 0000000000000000000000000000000000000000..e35350692e7c33af9407f229a876a9006366b8cc --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/momentum @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object momentum; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -2 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/q b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/q new file mode 100644 index 0000000000000000000000000000000000000000..aae46273e982bd3c3495abaffc24ea89303b135d --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/q @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object q; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/rhoM b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/rhoM new file mode 100644 index 0000000000000000000000000000000000000000..8dc0b17f55699f616773087006ecc874b4acbc26 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/rhoM @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoM; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/rhoN b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/rhoN new file mode 100644 index 0000000000000000000000000000000000000000..038fd26de386704949e026bc29e577e24696f74e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/0/rhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + xPeriodic + { + type cyclic; + } + + yPeriodic + { + type cyclic; + } + + zPeriodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/Allclean b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..1cc972be26a9fa8c309f14c3c0d52659e62d236c --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf 0/lagrangian 0/dsmcSigmaTcRMax diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/Allrun b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..3c61ac798ec54d2bf1f7f6c8799de3e396ab53c9 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/Allrun @@ -0,0 +1,7 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication dsmcInitialise +runApplication dsmcFoam diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/dsmcProperties b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/dsmcProperties new file mode 100644 index 0000000000000000000000000000000000000000..395e69cbaa421127d0c60e7dd8bf126b94c60e4e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/dsmcProperties @@ -0,0 +1,77 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object dsmcProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +// General Properties +// ~~~~~~~~~~~~~~~~~~ + +nEquivalentParticles 1e12; + + +// Wall Interaction Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +WallInteractionModel SpecularReflection; + +SpecularReflectionCoeffs {} + +// Binary Collision Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +BinaryCollisionModel LarsenBorgnakkeVariableHardSphere; + +LarsenBorgnakkeVariableHardSphereCoeffs +{ + Tref 273; + relaxationCollisionNumber 5.0; +} + + +// Inflow Boundary Model +// ~~~~~~~~~~~~~~~~~~~~~ +InflowBoundaryModel NoInflow; + +NoInflowCoeffs {} + +// Molecular species +// ~~~~~~~~~~~~~~~~~ + +typeIdList (N2 O2); + +moleculeProperties +{ + N2 + { + mass 46.5e-27; + diameter 4.17e-10; + internalDegreesOfFreedom 2; + viscosityCoefficient 1.656e-5; + omega 0.74; + } + + O2 + { + mass 53.12e-27; + diameter 4.07e-10; + internalDegreesOfFreedom 2; + viscosityCoefficient 1.919e-5; + omega 0.77; + } +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..fc32e203da6c40ae08ff6677eaf6318988a1b364 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/polyMesh/blockMeshDict @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.01; + +vertices +( + (-5 -4 -4) + (5 -4 -4) + (5 4 -4) + (-5 4 -4) + (-5 -4 4) + (5 -4 4) + (5 4 4) + (-5 4 4) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (20 16 16) simpleGrading (1 1 1) +); + +patches +( + cyclic + xPeriodic + ( + (1 2 6 5) + (0 4 7 3) + ) + + cyclic + yPeriodic + ( + (2 3 7 6) + (0 1 5 4) + ) + + cyclic + zPeriodic + ( + (4 5 6 7) + (0 3 2 1) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/polyMesh/boundary b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..1a6e0ae58a917c86ccc62d907ad966c4ff8cecdc --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/constant/polyMesh/boundary @@ -0,0 +1,43 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + xPeriodic + { + type cyclic; + nFaces 512; + startFace 14464; + featureCos 0.9; + } + yPeriodic + { + type cyclic; + nFaces 640; + startFace 14976; + featureCos 0.9; + } + zPeriodic + { + type cyclic; + nFaces 640; + startFace 15616; + featureCos 0.9; + } +) + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/controlDict b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..2a3172775adfe838f4cd3fa5c1200a5ac2b23fdd --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/controlDict @@ -0,0 +1,124 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 1e-3; + +deltaT 1e-6; + +writeControl runTime; + +writeInterval 1e-4; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +functions +( + dsmcFields1 + { + type dsmcFields; + enabled on; + functionObjectLibs ( "libutilityFunctionObjects.so" ); + outputControl outputTime; + } + fieldAverage1 + { + type fieldAverage; + functionObjectLibs ( "libfieldFunctionObjects.so" ); + outputControl outputTime; + resetOnOutput off; + fields + ( + rhoN + { + mean on; + prime2Mean off; + base time; + } + rhoM + { + mean on; + prime2Mean off; + base time; + } + dsmcRhoN + { + mean on; + prime2Mean off; + base time; + } + momentum + { + mean on; + prime2Mean off; + base time; + } + linearKE + { + mean on; + prime2Mean off; + base time; + } + internalE + { + mean on; + prime2Mean off; + base time; + } + iDof + { + mean on; + prime2Mean off; + base time; + } + q + { + mean on; + prime2Mean off; + base time; + } + fD + { + mean on; + prime2Mean off; + base time; + } + ); + } +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/decomposeParDict b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/decomposeParDict similarity index 95% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/decomposeParDict rename to tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/decomposeParDict index 2b1855ea4634bda4d66c8129ce2d08d57a2fb0c9..77c30529ecfb004319a85c5dc2d05bbfe32dff38 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/decomposeParDict +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/decomposeParDict @@ -17,11 +17,11 @@ FoamFile numberOfSubdomains 4; -method metis; +method simple; simpleCoeffs { - n ( 4 1 1 ); + n ( 1 2 2 ); delta 0.001; } diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/dsmcInitialiseDict similarity index 84% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution rename to tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/dsmcInitialiseDict index 876c8c233f9dece81ca38c9186f66b783bae4ec9..c8ec236aa69ea5d841b4f00f73246960c6916ea4 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/dsmcInitialiseDict @@ -11,20 +11,19 @@ FoamFile format ascii; class dictionary; location "system"; - object fvSolution; + object dsmcInitialiseDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -solvers -{} - -PISO +numberDensities { - nCorrectors 2; - nNonOrthogonalCorrectors 0; - pRefCell 0; - pRefValue 0; -} + N2 0.777e20; + O2 0.223e20; +}; + +temperature 300; + +velocity (1950 0 0); // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSchemes b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/fvSchemes similarity index 76% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSchemes rename to tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/fvSchemes index f923afcfacf038c5cd521b7e67b1c11b4d535866..42fda7921ca0a70a5b1f415666f49d4d07befb7b 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSchemes +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/fvSchemes @@ -17,43 +17,37 @@ FoamFile ddtSchemes { - default Euler; + default none; } gradSchemes { - default Gauss linear; - grad(p) Gauss linear; + default none; } divSchemes { default none; - div(phi,U) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; } interpolationSchemes { - default linear; - interpolate(HbyA) linear; + default none; } snGradSchemes { - default corrected; + default none; } fluxRequired { default no; - p ; } diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdEquilibrationDict b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/fvSolution similarity index 91% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdEquilibrationDict rename to tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/fvSolution index 2dd296045bbd9676b0bf078bc53d2dc5e4958365..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdEquilibrationDict +++ b/tutorials/discreteMethods/dsmc/freeSpacePeriodic/system/fvSolution @@ -11,11 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdEquilibrationDict; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -equilibrationTargetTemperature 300; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/boundaryT b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/boundaryT new file mode 100644 index 0000000000000000000000000000000000000000..6bc3a516f0d2f1aa48d409cbbf8395422c840b64 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/boundaryT @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object boundaryT; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type fixedValue; + value uniform 300; + } + + inlet + { + type fixedValue; + value uniform 300; + } + + sides + { + type fixedValue; + value uniform 300; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/boundaryU b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/boundaryU new file mode 100644 index 0000000000000000000000000000000000000000..6da36fb365e6c59359906b491672040021b098f2 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/boundaryU @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object boundaryU; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + outlet + { + type fixedValue; + value uniform (1325 -352 823); + } + + inlet + { + type fixedValue; + value uniform (1325 -352 823); + } + + sides + { + type fixedValue; + value uniform (1325 -352 823); + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/dsmcRhoN b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/dsmcRhoN new file mode 100644 index 0000000000000000000000000000000000000000..022a5f973f6fbf7720f1aae69f889c7fd3a8b3f3 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/dsmcRhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object dsmcRhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/fD b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/fD new file mode 100644 index 0000000000000000000000000000000000000000..e2da50d9a45e5de9309a2ab4e5aefda91f48ec0e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/fD @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object fD; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/iDof b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/iDof new file mode 100644 index 0000000000000000000000000000000000000000..00ba74788aca028e4a424fa1f60a183e4fb7922a --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/iDof @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object iDof; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/internalE b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/internalE new file mode 100644 index 0000000000000000000000000000000000000000..4408c91430ae071b500cfdcd489c4c950b74ae2e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/internalE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object internalE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/interpolaterhoN b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/interpolaterhoN new file mode 100644 index 0000000000000000000000000000000000000000..a9fe596c4337a79927b0a77ef635a72b11a79173 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/interpolaterhoN @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class surfaceScalarField; + location "0"; + object interpolaterhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type calculated; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + sides + { + type calculated; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/linearKE b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/linearKE new file mode 100644 index 0000000000000000000000000000000000000000..691ab915aeee75db15d2e7eb5c8b546aa2983bed --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/linearKE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object linearKE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/momentum b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/momentum new file mode 100644 index 0000000000000000000000000000000000000000..a3e4a449ae32749d72ad412447dc2d5c0226fdea --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/momentum @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object momentum; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -2 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/q b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/q new file mode 100644 index 0000000000000000000000000000000000000000..5b4fcc23bf75d0e65697c6f3db845ec42d411051 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/q @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object q; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/rhoM b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/rhoM new file mode 100644 index 0000000000000000000000000000000000000000..9f2443cdbb2b856fbdece7a849f5e29fb1e3c714 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/rhoM @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoM; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/0/rhoN b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/rhoN new file mode 100644 index 0000000000000000000000000000000000000000..e99d2742a3098a506fbe4fcda5f7e18c271f629e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/0/rhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + outlet + { + type zeroGradient; + } + + inlet + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/Allclean b/tutorials/discreteMethods/dsmc/freeSpaceStream/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..1cc972be26a9fa8c309f14c3c0d52659e62d236c --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf 0/lagrangian 0/dsmcSigmaTcRMax diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/Allrun b/tutorials/discreteMethods/dsmc/freeSpaceStream/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..3c61ac798ec54d2bf1f7f6c8799de3e396ab53c9 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/Allrun @@ -0,0 +1,7 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication dsmcInitialise +runApplication dsmcFoam diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/dsmcProperties b/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/dsmcProperties new file mode 100644 index 0000000000000000000000000000000000000000..d4d67559c117cf4a092f48a2ecd424509a0d0914 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/dsmcProperties @@ -0,0 +1,87 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object dsmcProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +// General Properties +// ~~~~~~~~~~~~~~~~~~ + +nEquivalentParticles 1e12; + + +// Wall Interaction Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +WallInteractionModel MaxwellianThermal; + +MaxwellianThermalCoeffs {} + + +// Binary Collision Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +BinaryCollisionModel LarsenBorgnakkeVariableHardSphere; + +LarsenBorgnakkeVariableHardSphereCoeffs +{ + Tref 273; + relaxationCollisionNumber 5.0; +} + + +// Inflow Boundary Model +// ~~~~~~~~~~~~~~~~~~~~~ + +InflowBoundaryModel FreeStream; + +FreeStreamCoeffs +{ + numberDensities + { + N2 0.777e20; + O2 0.223e20; + }; +} + + +// Molecular species +// ~~~~~~~~~~~~~~~~~ + +typeIdList (N2 O2); + +moleculeProperties +{ + N2 + { + mass 46.5e-27; + diameter 4.17e-10; + internalDegreesOfFreedom 2; + viscosityCoefficient 1.656e-5; + omega 0.74; + } + + O2 + { + mass 53.12e-27; + diameter 4.07e-10; + internalDegreesOfFreedom 2; + viscosityCoefficient 1.919e-5; + omega 0.77; + } +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..9343042c3890e0751d912f76edea446f84d70c30 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/polyMesh/blockMeshDict @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.01; + +vertices +( + (-5 -4 -4) + (5 -4 -4) + (5 4 -4) + (-5 4 -4) + (-5 -4 4) + (5 -4 4) + (5 4 4) + (-5 4 4) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (20 16 16) simpleGrading (1 1 1) +); + +patches +( + patch + outlet + ( + (1 2 6 5) + ) + + patch + inlet + ( + (0 4 7 3) + ) + + patch + sides + ( + (2 3 7 6) + (0 1 5 4) + (4 5 6 7) + (0 3 2 1) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/polyMesh/boundary b/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..502b052a7ffd8630ceb3b449f005aecee7c05edc --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + outlet + { + type patch; + nFaces 256; + startFace 14464; + } + inlet + { + type patch; + nFaces 256; + startFace 14720; + } + sides + { + type patch; + nFaces 1280; + startFace 14976; + } +) + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/system/controlDict b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..f123a030860f2fd7374e5e6f19af066031e68cc5 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/controlDict @@ -0,0 +1,124 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 2e-2; + +deltaT 1e-6; + +writeControl runTime; + +writeInterval 1e-3; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +functions +( + dsmcFields1 + { + type dsmcFields; + enabled on; + functionObjectLibs ( "libutilityFunctionObjects.so" ); + outputControl outputTime; + } + fieldAverage1 + { + type fieldAverage; + functionObjectLibs ( "libfieldFunctionObjects.so" ); + outputControl outputTime; + resetOnOutput off; + fields + ( + rhoN + { + mean on; + prime2Mean off; + base time; + } + rhoM + { + mean on; + prime2Mean off; + base time; + } + dsmcRhoN + { + mean on; + prime2Mean off; + base time; + } + momentum + { + mean on; + prime2Mean off; + base time; + } + linearKE + { + mean on; + prime2Mean off; + base time; + } + internalE + { + mean on; + prime2Mean off; + base time; + } + iDof + { + mean on; + prime2Mean off; + base time; + } + q + { + mean on; + prime2Mean off; + base time; + } + fD + { + mean on; + prime2Mean off; + base time; + } + ); + } +); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/motorBike/system/decomposeParDict b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/decomposeParDict similarity index 83% rename from tutorials/mesh/snappyHexMesh/motorBike/system/decomposeParDict rename to tutorials/discreteMethods/dsmc/freeSpaceStream/system/decomposeParDict index c0de7923c6eef835d325647f9b074087c87add01..77c30529ecfb004319a85c5dc2d05bbfe32dff38 100644 --- a/tutorials/mesh/snappyHexMesh/motorBike/system/decomposeParDict +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/decomposeParDict @@ -15,31 +15,36 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -numberOfSubdomains 6; +numberOfSubdomains 4; -method hierarchical; +method simple; simpleCoeffs { - n ( 4 1 1 ); + n ( 1 2 2 ); delta 0.001; } hierarchicalCoeffs { - n ( 3 2 1 ); + n ( 1 1 1 ); delta 0.001; order xyz; } -manualCoeffs +metisCoeffs { - dataFile "cellDecomposition"; + processorWeights ( 1 1 1 1 ); } -metisCoeffs +manualCoeffs { + dataFile ""; } +distributed no; + +roots ( ); + // ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/freeSpaceStream/system/dsmcInitialiseDict b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/dsmcInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..b5cc93423253ea73ac94aaedd58c300082a08d71 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/dsmcInitialiseDict @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object dsmcInitialiseDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberDensities +{ + N2 0.777e20; + O2 0.223e20; +}; + +temperature 300; + +velocity (1325 -352 823); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSchemes b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/fvSchemes similarity index 76% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSchemes rename to tutorials/discreteMethods/dsmc/freeSpaceStream/system/fvSchemes index f923afcfacf038c5cd521b7e67b1c11b4d535866..42fda7921ca0a70a5b1f415666f49d4d07befb7b 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSchemes +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/fvSchemes @@ -17,43 +17,37 @@ FoamFile ddtSchemes { - default Euler; + default none; } gradSchemes { - default Gauss linear; - grad(p) Gauss linear; + default none; } divSchemes { default none; - div(phi,U) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; } interpolationSchemes { - default linear; - interpolate(HbyA) linear; + default none; } snGradSchemes { - default corrected; + default none; } fluxRequired { default no; - p ; } diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/mdSolution b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/fvSolution similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/mdSolution rename to tutorials/discreteMethods/dsmc/freeSpaceStream/system/fvSolution index dfef948901fc9407d740d27c3f58e12fc09f78c8..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/mdSolution +++ b/tutorials/discreteMethods/dsmc/freeSpaceStream/system/fvSolution @@ -11,13 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdSolution; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -integrationMethod verletLeapfrog; - -potentialEnergyLimit 5.256e-20; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/boundaryT b/tutorials/discreteMethods/dsmc/supersonicCorner/0/boundaryT new file mode 100644 index 0000000000000000000000000000000000000000..7b7fbd9188e6f8cd4052203c687de78be8ece6f1 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/boundaryT @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object boundaryT; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type fixedValue; + value uniform 300; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type fixedValue; + value uniform 1000; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/boundaryU b/tutorials/discreteMethods/dsmc/supersonicCorner/0/boundaryU new file mode 100644 index 0000000000000000000000000000000000000000..1c21f7372c5f4c4b1312995046cd9aa9cf1aa419 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/boundaryU @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object boundaryU; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + flow + { + type fixedValue; + value uniform (1936 0 0); + } + + entrance + { + type symmetryPlane; + } + + walls + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/dsmcRhoN b/tutorials/discreteMethods/dsmc/supersonicCorner/0/dsmcRhoN new file mode 100644 index 0000000000000000000000000000000000000000..21d83f0b9f634e8cd24cb80fb1978327759087bb --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/dsmcRhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object dsmcRhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/fD b/tutorials/discreteMethods/dsmc/supersonicCorner/0/fD new file mode 100644 index 0000000000000000000000000000000000000000..ae1df5d0114e5e2e3639632a9f3d220c660c9b76 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/fD @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object fD; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + flow + { + type calculated; + value uniform (0 0 0); + } + + entrance + { + type symmetryPlane; + } + + walls + { + type calculated; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/iDof b/tutorials/discreteMethods/dsmc/supersonicCorner/0/iDof new file mode 100644 index 0000000000000000000000000000000000000000..50c9624edd4051c04e53a804ba33d1b93865c261 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/iDof @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object iDof; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } + +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/internalE b/tutorials/discreteMethods/dsmc/supersonicCorner/0/internalE new file mode 100644 index 0000000000000000000000000000000000000000..51f1e04d8b3755fbbd6fc067b8420bf7034304ef --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/internalE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object internalE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/linearKE b/tutorials/discreteMethods/dsmc/supersonicCorner/0/linearKE new file mode 100644 index 0000000000000000000000000000000000000000..765956b135c36edd515b971b9967569b27ddfc14 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/linearKE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object linearKE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/momentum b/tutorials/discreteMethods/dsmc/supersonicCorner/0/momentum new file mode 100644 index 0000000000000000000000000000000000000000..1899e2e7c665f50bdf5694b385a34b439df38da3 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/momentum @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object momentum; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -2 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } + +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/q b/tutorials/discreteMethods/dsmc/supersonicCorner/0/q new file mode 100644 index 0000000000000000000000000000000000000000..51c1b8cdec3797bdbb05cae3b736935810cc240c --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/q @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object q; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type calculated; + value uniform 0; + + } + + entrance + { + type symmetryPlane; + } + + walls + { + type calculated; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/rhoM b/tutorials/discreteMethods/dsmc/supersonicCorner/0/rhoM new file mode 100644 index 0000000000000000000000000000000000000000..7f2d427a479cecad93dfb5de554c0a83c1b1d6d5 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/rhoM @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoM; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/0/rhoN b/tutorials/discreteMethods/dsmc/supersonicCorner/0/rhoN new file mode 100644 index 0000000000000000000000000000000000000000..98ffe8ca1e723aa85a7f493d783fa1b2b0bb8d1e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/0/rhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + entrance + { + type symmetryPlane; + } + + walls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/Allclean b/tutorials/discreteMethods/dsmc/supersonicCorner/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..5622060c8ee23c89d8743d2217de1c3b7381e6b0 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/Allclean @@ -0,0 +1,9 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf 0/lagrangian 0/dsmcSigmaTcRMax +rm -rf processor* +rm -f system/machines \ No newline at end of file diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/Allrun b/tutorials/discreteMethods/dsmc/supersonicCorner/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..402135df749b6f380b1c870897e27c053918afb4 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/Allrun @@ -0,0 +1,11 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication decomposePar +runParallel dsmcInitialise 4 system/machines +hostname > system/machines +runParallel dsmcFoam 4 system/machines +runApplication reconstructPar -noLagrangian + diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/constant/dsmcProperties b/tutorials/discreteMethods/dsmc/supersonicCorner/constant/dsmcProperties new file mode 100644 index 0000000000000000000000000000000000000000..2d950a4814d564bd56c7afc883ae2e1d1f652c75 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/constant/dsmcProperties @@ -0,0 +1,88 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object dsmcProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +// General Properties +// ~~~~~~~~~~~~~~~~~~ + +nEquivalentParticles 1.2e12; + + +// Wall Interaction Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +//WallInteractionModel SpecularReflection; +WallInteractionModel MaxwellianThermal; + +SpecularReflectionCoeffs {} + +MaxwellianThermalCoeffs {} + + +// Binary Collision Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +//BinaryCollisionModel VariableHardSphere; +BinaryCollisionModel LarsenBorgnakkeVariableHardSphere; + +VariableHardSphereCoeffs +{ + Tref 273; +} + +LarsenBorgnakkeVariableHardSphereCoeffs +{ + Tref 273; + relaxationCollisionNumber 5.0; +} + + +// Inflow Boundary Model +// ~~~~~~~~~~~~~~~~~~~~~ + +InflowBoundaryModel FreeStream; +//InflowBoundaryModel NoInflow; + +NoInflowCoeffs {} + +FreeStreamCoeffs +{ + numberDensities + { + Ar 1.0e20; + }; +} + + +// Molecular species +// ~~~~~~~~~~~~~~~~~ + +typeIdList (Ar); + +moleculeProperties +{ + Ar + { + mass 66.3e-27; + diameter 4.17e-10; + internalDegreesOfFreedom 0; + viscosityCoefficient 2.117e-5; + omega 0.81; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/dsmc/supersonicCorner/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..6b9aa389277a491baea403d7ee5e16a4a3add664 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/constant/polyMesh/blockMeshDict @@ -0,0 +1,83 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.01; + +vertices +( + (0 0 0) + (5 0 0) + (5 18 0) + (0 18 0) + (0 0 18) + (5 0 18) + (5 18 18) + (0 18 18) + (30 0 0) + (30 18 0) + (30 0 18) + (30 18 18) + +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (10 36 36) simpleGrading (1 1 1) + hex (1 8 9 2 5 10 11 6) (50 36 36) simpleGrading (1 1 1) +); + +patches +( + patch + flow + ( + (8 9 11 10) + (0 4 7 3) + (2 3 7 6) + (2 6 11 9) + (4 5 6 7) + (5 10 11 6) + ) + + symmetryPlane + entrance + ( + (0 1 5 4) + (0 3 2 1) + ) + + wall + walls + ( + (1 8 10 5) + (1 2 9 8) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/constant/polyMesh/boundary b/tutorials/discreteMethods/dsmc/supersonicCorner/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..87ffe1fea34bf9faaf2139d0208b367378d4cb50 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + flow + { + type patch; + nFaces 6912; + startFace 227664; + } + entrance + { + type symmetryPlane; + nFaces 720; + startFace 234576; + } + walls + { + type wall; + nFaces 3600; + startFace 235296; + } +) + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/system/controlDict b/tutorials/discreteMethods/dsmc/supersonicCorner/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..2e92a436f3be2f2352abd09dc95034e42ea55867 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/system/controlDict @@ -0,0 +1,124 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 0.025; + +deltaT 1e-6; + +writeControl runTime; + +writeInterval 1e-3; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +functions +( + dsmcFields1 + { + type dsmcFields; + enabled on; + functionObjectLibs ( "libutilityFunctionObjects.so" ); + outputControl outputTime; + } + fieldAverage1 + { + type fieldAverage; + functionObjectLibs ( "libfieldFunctionObjects.so" ); + outputControl outputTime; + resetOnOutput off; + fields + ( + rhoN + { + mean on; + prime2Mean off; + base time; + } + rhoM + { + mean on; + prime2Mean off; + base time; + } + dsmcRhoN + { + mean on; + prime2Mean off; + base time; + } + momentum + { + mean on; + prime2Mean off; + base time; + } + linearKE + { + mean on; + prime2Mean off; + base time; + } + internalE + { + mean on; + prime2Mean off; + base time; + } + iDof + { + mean on; + prime2Mean off; + base time; + } + q + { + mean on; + prime2Mean off; + base time; + } + fD + { + mean on; + prime2Mean off; + base time; + } + ); + } +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/system/decomposeParDict b/tutorials/discreteMethods/dsmc/supersonicCorner/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..bf8dffb737c91db0646cde4bd56a4fd0629c82b9 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/system/decomposeParDict @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +method simple; + +simpleCoeffs +{ + n ( 2 2 1 ); + delta 0.001; +} + +hierarchicalCoeffs +{ + n ( 1 1 1 ); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights ( 1 1 1 1 ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots ( ); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/supersonicCorner/system/dsmcInitialiseDict b/tutorials/discreteMethods/dsmc/supersonicCorner/system/dsmcInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..54774bfb88a21b624a707ea455139fa86b4d834a --- /dev/null +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/system/dsmcInitialiseDict @@ -0,0 +1,28 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object dsmcInitialiseDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberDensities +{ + Ar 1.0e20; +}; + +temperature 300; + +velocity (1936 0 0); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes b/tutorials/discreteMethods/dsmc/supersonicCorner/system/fvSchemes similarity index 72% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes rename to tutorials/discreteMethods/dsmc/supersonicCorner/system/fvSchemes index 2fa85964b7e2113902ff5be6f03334f6777d84b6..42fda7921ca0a70a5b1f415666f49d4d07befb7b 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/system/fvSchemes @@ -17,44 +17,37 @@ FoamFile ddtSchemes { - default Euler; + default none; } gradSchemes { - default Gauss linear; - grad(p) Gauss linear; + default none; } divSchemes { default none; - div(phi,U) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; - laplacian(diffusivity,cellMotionU) Gauss linear uncorrected; } interpolationSchemes { - default linear; - interpolate(HbyA) linear; + default none; } snGradSchemes { - default corrected; + default none; } fluxRequired { default no; - p ; } diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdSolution b/tutorials/discreteMethods/dsmc/supersonicCorner/system/fvSolution similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdSolution rename to tutorials/discreteMethods/dsmc/supersonicCorner/system/fvSolution index dfef948901fc9407d740d27c3f58e12fc09f78c8..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdSolution +++ b/tutorials/discreteMethods/dsmc/supersonicCorner/system/fvSolution @@ -11,13 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdSolution; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -integrationMethod verletLeapfrog; - -potentialEnergyLimit 5.256e-20; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/boundaryT b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/boundaryT new file mode 100644 index 0000000000000000000000000000000000000000..7aa7905710a606e8e72678e02d59887826ff8690 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/boundaryT @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object boundaryT; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type fixedValue; + value uniform 300; + } + + obstacle + { + type fixedValue; + value uniform 550; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // + diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/boundaryU b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/boundaryU new file mode 100644 index 0000000000000000000000000000000000000000..dfa4801d7000be60ae30e5df7eae230669c6c674 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/boundaryU @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object boundaryU; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + flow + { + type fixedValue; + value uniform (1736 0 0); + } + + obstacle + { + type fixedValue; + value uniform (0 0 0); + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/dsmcRhoN b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/dsmcRhoN new file mode 100644 index 0000000000000000000000000000000000000000..aa3f432f46e752d9fa2c5dfb6fa48acae998d595 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/dsmcRhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object dsmcRhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/fD b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/fD new file mode 100644 index 0000000000000000000000000000000000000000..85d8c061d08d0fcb845b785396bc62df0d9ef1eb --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/fD @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object fD; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type calculated; + value uniform (0 0 0); + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/iDof b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/iDof new file mode 100644 index 0000000000000000000000000000000000000000..542b42e13ad3ccab8803ed830c00a5a20eb98433 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/iDof @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object iDof; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/internalE b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/internalE new file mode 100644 index 0000000000000000000000000000000000000000..496e5afd331f009db8322ad39797d198181ff3d4 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/internalE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object internalE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/linearKE b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/linearKE new file mode 100644 index 0000000000000000000000000000000000000000..c52708ab4d2410adf5713f509dba421d66384afc --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/linearKE @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object linearKE; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/momentum b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/momentum new file mode 100644 index 0000000000000000000000000000000000000000..338ace9965dcaa4a102273cafa2d7efa1417978f --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/momentum @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object momentum; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -2 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/q b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/q new file mode 100644 index 0000000000000000000000000000000000000000..6e2a7fd4511edcf27b0d919741eebcd79d6798e8 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/q @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object q; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type calculated; + value uniform 0; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/rhoM b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/rhoM new file mode 100644 index 0000000000000000000000000000000000000000..2ab4a148b1b27cf318081d080f622353c4e1967c --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/rhoM @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoM; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/0/rhoN b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/rhoN new file mode 100644 index 0000000000000000000000000000000000000000..fa576a150c96e545742e6196b0eac499584fbd96 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/0/rhoN @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rhoN; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 -3 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + flow + { + type zeroGradient; + } + + obstacle + { + type zeroGradient; + } + + periodic + { + type cyclic; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/Allclean b/tutorials/discreteMethods/dsmc/wedge15Ma5/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..a81bd945995ae2476d7d49837ef74e909c5053c9 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/Allclean @@ -0,0 +1,10 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf 0/lagrangian 0/dsmcSigmaTcRMax +rm -rf processor* +rm -rf forces1 +rm -f system/machines \ No newline at end of file diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/Allrun b/tutorials/discreteMethods/dsmc/wedge15Ma5/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..402135df749b6f380b1c870897e27c053918afb4 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/Allrun @@ -0,0 +1,11 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication decomposePar +runParallel dsmcInitialise 4 system/machines +hostname > system/machines +runParallel dsmcFoam 4 system/machines +runApplication reconstructPar -noLagrangian + diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/dsmcProperties b/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/dsmcProperties new file mode 100644 index 0000000000000000000000000000000000000000..bd07689d19a53dcc80bd34dc6b13499797c5378b --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/dsmcProperties @@ -0,0 +1,89 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object dsmcProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +// General Properties +// ~~~~~~~~~~~~~~~~~~ + +nEquivalentParticles 5e12; + + +// Wall Interaction Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +WallInteractionModel MaxwellianThermal; + +MaxwellianThermalCoeffs {} + + +// Binary Collision Model +// ~~~~~~~~~~~~~~~~~~~~~~ + +BinaryCollisionModel LarsenBorgnakkeVariableHardSphere; + +LarsenBorgnakkeVariableHardSphereCoeffs +{ + Tref 273; + relaxationCollisionNumber 5.0; +} + + +// Inflow Boundary Model +// ~~~~~~~~~~~~~~~~~~~~~ + +InflowBoundaryModel FreeStream; + +NoInflowCoeffs {} + +FreeStreamCoeffs +{ + numberDensities + { + N2 0.777e20; + O2 0.223e20; + }; +} + + +// Molecular species +// ~~~~~~~~~~~~~~~~~ + +typeIdList (N2 O2); + +moleculeProperties +{ + N2 + { + mass 46.5e-27; + diameter 4.17e-10; + internalDegreesOfFreedom 2; + viscosityCoefficient 1.656e-5; + omega 0.74; + } + + O2 + { + mass 53.12e-27; + diameter 4.07e-10; + internalDegreesOfFreedom 2; + viscosityCoefficient 1.919e-5; + omega 0.77; + } +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..858a5357faec9992f7284e4e55ee3a8fd874d742 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/polyMesh/blockMeshDict @@ -0,0 +1,74 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (-0.15242 0 -0.05) + ( 0 0 -0.05) + ( 0.3048 0.081670913853 -0.05) + (-0.15242 0.3 -0.05) + ( 0 0.3 -0.05) + ( 0.3048 0.3 -0.05) + + (-0.15242 0 0.05) + ( 0 0 0.05) + ( 0.3048 0.081670913853 0.05) + (-0.15242 0.3 0.05) + ( 0 0.3 0.05) + ( 0.3048 0.3 0.05) + +); + +blocks +( + hex (0 1 4 3 6 7 10 9 ) (20 40 12) simpleGrading (1 1 1) + hex (1 2 5 4 7 8 11 10) (40 40 12) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + patch flow + ( + (0 6 9 3) + (2 5 11 8) + (0 1 7 6) + (3 9 10 4) + (4 10 11 5) + ) + wall obstacle + ( + (1 2 8 7) + ) + cyclic periodic + ( + (0 3 4 1) + (1 4 5 2) + (6 7 10 9) + (7 8 11 10) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/polyMesh/boundary b/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..5c089fb5b2b5fc9bf41e975d323a588a8c50291d --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/constant/polyMesh/boundary @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + flow + { + type patch; + nFaces 1920; + startFace 82800; + } + obstacle + { + type wall; + nFaces 480; + startFace 84720; + } + periodic + { + type cyclic; + nFaces 4800; + startFace 85200; + featureCos 0.9; + } +) + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/system/controlDict b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..b069a968567e38b9d2b079d3a33ee3621256362e --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/controlDict @@ -0,0 +1,139 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom latestTime; + +startTime 0; + +stopAt endTime; + +endTime 0.00125; +// endTime 0.01; + +deltaT 2e-6; + +writeControl runTime; + +writeInterval 1e-4; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +functions +( + dsmcFields1 + { + type dsmcFields; + enabled on; + functionObjectLibs ( "libutilityFunctionObjects.so" ); + outputControl outputTime; + } + + fieldAverage1 + { + type fieldAverage; + functionObjectLibs ( "libfieldFunctionObjects.so" ); + outputControl outputTime; + resetOnOutput off; + fields + ( + rhoN + { + mean on; + prime2Mean off; + base time; + } + rhoM + { + mean on; + prime2Mean off; + base time; + } + dsmcRhoN + { + mean on; + prime2Mean off; + base time; + } + momentum + { + mean on; + prime2Mean off; + base time; + } + linearKE + { + mean on; + prime2Mean off; + base time; + } + internalE + { + mean on; + prime2Mean off; + base time; + } + iDof + { + mean on; + prime2Mean off; + base time; + } + q + { + mean on; + prime2Mean off; + base time; + } + fD + { + mean on; + prime2Mean off; + base time; + } + ); + } + + forces1 + { + type forces; + enabled on; + functionObjectLibs ( "libforces.so" ); + outputControl outputTime; + patches ( obstacle ); + directForceDensity true; + fDName fDMean; + CofR ( 0 0 0 ); + log on; + } +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/system/decomposeParDict b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..a533085b04aff6c998b4ad26efe83d5d65920e43 --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/decomposeParDict @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +method simple; + +simpleCoeffs +{ + n ( 1 1 4 ); + delta 0.001; +} + +hierarchicalCoeffs +{ + n ( 1 1 1 ); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights ( 1 1 1 1 ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots ( ); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/motorBike/system/fvSolution b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/dsmcInitialiseDict similarity index 84% rename from tutorials/mesh/snappyHexMesh/motorBike/system/fvSolution rename to tutorials/discreteMethods/dsmc/wedge15Ma5/system/dsmcInitialiseDict index 876c8c233f9dece81ca38c9186f66b783bae4ec9..118c809b6f1cc8122ed391a2808a4eb984b4d836 100644 --- a/tutorials/mesh/snappyHexMesh/motorBike/system/fvSolution +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/dsmcInitialiseDict @@ -11,20 +11,19 @@ FoamFile format ascii; class dictionary; location "system"; - object fvSolution; + object dsmcInitialiseDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -solvers -{} - -PISO +numberDensities { - nCorrectors 2; - nNonOrthogonalCorrectors 0; - pRefCell 0; - pRefValue 0; -} + N2 0.777e20; + O2 0.223e20; +}; + +temperature 300; + +velocity (1736 0 0); // ************************************************************************* // diff --git a/tutorials/discreteMethods/dsmc/wedge15Ma5/system/fvSchemes b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..42fda7921ca0a70a5b1f415666f49d4d07befb7b --- /dev/null +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/fvSchemes @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default none; +} + +gradSchemes +{ + default none; +} + +divSchemes +{ + default none; +} + +laplacianSchemes +{ + default none; +} + +interpolationSchemes +{ + default none; +} + +snGradSchemes +{ + default none; +} + +fluxRequired +{ + default no; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/mdSolution b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/fvSolution similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/mdSolution rename to tutorials/discreteMethods/dsmc/wedge15Ma5/system/fvSolution index dfef948901fc9407d740d27c3f58e12fc09f78c8..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/mdSolution +++ b/tutorials/discreteMethods/dsmc/wedge15Ma5/system/fvSolution @@ -11,13 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdSolution; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -integrationMethod verletLeapfrog; - -potentialEnergyLimit 5.256e-20; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/blockMeshDict deleted file mode 100644 index ee03c904028a9b25f447b0cd74457e8a2439d6fb..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/blockMeshDict +++ /dev/null @@ -1,163 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object blockMeshDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -convertToMeters 0.25e-9; - -vertices -( - (0 0 0) //0 - (15 0 0) - (15 3 0) - (0 3 0) - (0 0 12) - (15 0 12) - (15 3 12) - (0 3 12) //7 - (22 0 0) - (22 3 0) - (22 0 12) - (22 3 12) //11 - (31 0 0) - (31 3 0) - (31 0 12) - (31 3 12) //15 - (20 9 0) - (17 9 0) - (20 9 12) - (17 9 12) //19 - (0 9 0) - (0 9 12) //21 - (31 9 0) - (31 9 12) //23 - (17 18 0) - (0 18 0) - (17 18 12) - (0 18 12) //27 - (31 18 0) - (20 18 0) - (31 18 12) - (20 18 12) //31 - (17 21 0) - (0 21 0) - (17 21 12) - (0 21 12) //35 - (31 21 0) - (20 21 0) - (31 21 12) - (20 21 12) //39 - (17 25 0) - (0 25 0) - (17 25 12) - (0 25 12) // 43 - (31 25 0) - (20 25 0) - (31 25 12) - (20 25 12) // 47 -); - -blocks -( - hex (0 1 2 3 4 5 6 7) bottomWall (15 3 6) simpleGrading (1 1 1) //1 - hex (1 8 9 2 5 10 11 6) bottomWall (3 3 6) simpleGrading (1 1 1) //2 - hex (2 9 16 17 6 11 18 19) bottomWall (3 6 6) simpleGrading (1 1 1) //3 - hex (8 12 13 9 10 14 15 11) bottomWall (9 3 6) simpleGrading (1 1 1) //4 - hex (3 2 17 20 7 6 19 21) liquid (15 6 6) simpleGrading (1 1 1) //5 - hex (20 17 24 25 21 19 26 27) liquid (15 9 6) simpleGrading (1 1 1) //6 - hex (25 24 32 33 27 26 34 35) liquid (15 3 6) simpleGrading (1 1 1) //6A - hex (17 16 29 24 19 18 31 26) liquid (3 9 6) simpleGrading (1 1 1) //7 - hex (16 22 28 29 18 23 30 31) liquid (9 9 6) simpleGrading (1 1 1) //8 - hex (29 28 36 37 31 30 38 39) liquid (9 3 6) simpleGrading (1 1 1) //8A - hex (9 13 22 16 11 15 23 18) liquid (9 6 6) simpleGrading (1 1 1) //9 - hex (33 32 40 41 35 34 42 43) topWall (15 3 6) simpleGrading (1 1 1) //10 - hex (32 37 45 40 34 39 47 42) topWall (3 3 6) simpleGrading (1 1 1) //11 - hex (24 29 37 32 26 31 39 34) topWall (3 3 6) simpleGrading (1 1 1) //12 - hex (37 36 44 45 39 38 46 47) topWall (9 3 6) simpleGrading (1 1 1) //13 -); - -patches -( - cyclic - periodicX - ( - (0 4 7 3) - (3 7 21 20) - (20 21 27 25) - (25 27 35 33) - (33 35 43 41) - (12 13 15 14) - (13 22 23 15) - (22 28 30 23) - (28 36 38 30) - (36 44 46 38) - ) - - cyclic - periodicZ - ( - (0 3 2 1) - (1 2 9 8) - (8 9 13 12) - (2 17 16 9) - (2 3 20 17) - (9 16 22 13) - (17 20 25 24) - (16 29 28 22) - (16 17 24 29) - (24 25 33 32) - (28 29 37 36) - (32 33 41 40) - (36 37 45 44) - (32 40 45 37) - (24 32 37 29) - (4 5 6 7) - (5 10 11 6) - (10 14 15 11) - (6 11 18 19) - (7 6 19 21) - (11 15 23 18) - (19 26 27 21) - (18 23 30 31) - (18 31 26 19) - (26 34 35 27) - (30 38 39 31) - (34 42 43 35) - (38 46 47 39) - (34 39 47 42) - (26 31 39 34) - ) - - wall - outerBoundaryBottom - ( - (0 1 5 4) - (1 8 10 5) - (8 12 14 10) - ) - - wall - outerBoundaryTop - ( - (40 41 43 42) - (44 45 47 46) - (40 42 47 45) - ) -); - -mergePatchPairs -( -); - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/molConfigDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/molConfigDict deleted file mode 100644 index 6bd9f1538e2c0723d9505442bdf2453015012738..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/molConfigDict +++ /dev/null @@ -1,64 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object molConfigDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -bottomWall -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( 0 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure FCC; - anchor ( 1.05e-09 3.18e-09 2.87e-09 ); - anchorSpecifies molecule; - tethered yes; - orientationAngles ( 30 0 0 ); -} - -liquid -{ - massDensity 1100; - temperature 250; - velocityDistribution maxwellian; - bulkVelocity ( 245 0 0 ); - id Ne; - mass 3.350996347e-26; - latticeStructure SC; - anchor ( 1.05e-09 3.18e-09 2.87e-09 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 45 0 0 ); -} - -topWall -{ - massDensity 1220; - temperature 200; - velocityDistribution maxwellian; - bulkVelocity ( 0 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure BCC; - anchor ( 1.05e-09 3.18e-09 2.87e-09 ); - anchorSpecifies corner; - tethered yes; - orientationAngles ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/potentialDict deleted file mode 100644 index 56a7bbee713bf0a24860dad6ad2e592c9e17f464..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/potentialDict +++ /dev/null @@ -1,104 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object potentialDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -removalOrder 2 ( Ne Ar ); - -pair -{ - Ar-Ar - { - pairPotential maitlandSmith; - rCut 1e-09; - rMin 1.5e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 7.5; - rm 3.756e-10; - epsilon 1.990108438e-21; - } - - energyScalingFunction doubleSigmoid; - doubleSigmoidCoeffs - { - shift1 9e-10; - scale1 -64771072; - shift2 9.7e-10; - scale2 -259084288; - } - - writeTables yes; - } - - Ar-Ne - { - pairPotential maitlandSmith; - rCut 9e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 4; - rm 3.48e-10; - epsilon 8.765026657e-22; - } - - energyScalingFunction shiftedForce; - writeTables yes; - } - - Ne-Ne - { - pairPotential maitlandSmith; - rCut 8e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 5; - rm 3.0739e-10; - epsilon 5.813260729e-22; - } - - energyScalingFunction shiftedForce; - writeTables yes; - } -} - -tether -{ - Ar - { - tetherPotential restrainedHarmonicSpring; - restrainedHarmonicSpringCoeffs - { - springConstant 0.1; - rR 1.2e-09; - } - } -} - -external -{ - gravity ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/molConfigDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/molConfigDict deleted file mode 100644 index 937130f4ac3ba22f29b727686566f27b6adfa45a..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/molConfigDict +++ /dev/null @@ -1,64 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object molConfigDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -sectionA -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( -250 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - -sectionB -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( -250 0 0 ); - id Ne; - mass 3.350917e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - -sectionC -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( -250 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/potentialDict deleted file mode 100644 index 0386a6994e0d9708901895788978e11f2d5bf453..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/potentialDict +++ /dev/null @@ -1,86 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object potentialDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -removalOrder 1 ( Ar ); - -pair -{ - Ar-Ar - { - pairPotential maitlandSmith; - rCut 1e-09; - rMin 1.5e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 7.5; - rm 3.756e-10; - epsilon 1.990108438e-21; - } - - energyScalingFunction doubleSigmoid; - doubleSigmoidCoeffs - { - shift1 9e-10; - scale1 -64771072; - shift2 9.7e-10; - scale2 -259084288; - } - - writeTables no; - } - - Ar-Ne - { - pairPotential maitlandSmith; - rCut 9e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 4; - rm 3.48e-10; - epsilon 8.765026657e-22; - } - - energyScalingFunction shiftedForce; - writeTables no; - } - - Ne-Ne - { - pairPotential maitlandSmith; - rCut 8e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 5; - rm 3.0739e-10; - epsilon 5.813260729e-22; - } - - energyScalingFunction shiftedForce; - writeTables no; - } -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean index 00dd874d7638805cf31b2c56b01b659e0792e1c4..d8245cb12bceacb3316f8f922262a9e911b9b155 100755 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean @@ -3,9 +3,20 @@ # Source tutorial clean functions . $WM_PROJECT_DIR/bin/tools/CleanFunctions -cd periodicCube - rm -rf 0 - rm -rf Ar-Ar - rm -rf constant/idList +cd periodicCubeArgon + rm -rf 0/* + rm -f Ar-Ar + rm -f electrostatic + rm -f constant/idList + rm -rf constant/polyMesh/sets + cleanCase +cd .. + +cd periodicCubeWater + rm -rf 0/* + rm -f O-O + rm -f electrostatic + rm -f constant/idList + rm -rf constant/polyMesh/sets cleanCase cd .. diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun index 0c590da09a8c91a0815034deba71b3d4d681e762..59649516d94c727094c0725e9dd028a7c0a864d1 100755 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun @@ -5,9 +5,14 @@ application="mdEquilibrationFoam" -cd periodicCube +cd periodicCubeArgon runApplication blockMesh - runApplication molConfig + runApplication mdInitialise runApplication $application cd .. +cd periodicCubeWater + runApplication blockMesh + runApplication mdInitialise + runApplication $application +cd .. \ No newline at end of file diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/molConfigDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/molConfigDict deleted file mode 100644 index 6f48e375e8c3ba101230631096b6ecd6df24a156..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/molConfigDict +++ /dev/null @@ -1,34 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object molConfigDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -liquid -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( 0 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/potentialDict deleted file mode 100644 index 1abf7b0e569b0a3b4dd0530d9c9f3ec332d43f6c..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/potentialDict +++ /dev/null @@ -1,65 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object potentialDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -removalOrder 1 ( Ar ); - -pair -{ - Ar-Ar - { - pairPotential azizChen; - rCut 1.2e-09; - rMin 1.5e-10; - dr 2e-14; - azizChenCoeffs - { - epsilon 1.97742255e-21; - rm 3.759e-10; - A 9502720; - alpha 16.345655; - C6 1.0914254; - C8 0.6002595; - C10 0.3700113; - D 1.4; - gamma 2; - } - - energyScalingFunction noScaling; - writeTables yes; - } -} - -tether -{ - Ar - { - tetherPotential restrainedHarmonicSpring; - restrainedHarmonicSpringCoeffs - { - springConstant 0.0277; - rR 1.2e-09; - } - } -} - -external -{ - gravity ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/moleculeProperties b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/moleculeProperties new file mode 100644 index 0000000000000000000000000000000000000000..567fce489ce0f0bd6805f2a72cb5001db238cbcd --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/moleculeProperties @@ -0,0 +1,36 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object moleculeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +Ar +{ + siteIds (Ar); + pairPotentialSiteIds (Ar); + siteReferencePositions + ( + (0 0 0) + ); + siteMasses + ( + 6.63352033e-26 + ); + siteCharges + ( + 0 + ); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..23a2ee9874ef09ad03276bbe470cc179802a227c --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/blockMeshDict @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 2.462491658e-9; + +vertices +( + (-1 -1 -1) + (1 -1 -1) + (1 1 -1) + (-1 1 -1) + (-1 -1 1) + (1 -1 1) + (1 1 1) + (-1 1 1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) liquid (12 12 12) simpleGrading (1 1 1) +); + +patches +( + cyclic + periodicX + ( + (1 2 6 5) + (0 4 7 3) + ) + + cyclic + periodicY + ( + (2 3 7 6) + (0 1 5 4) + ) + + cyclic + periodicZ + ( + (0 3 2 1) + (4 5 6 7) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/boundary b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/boundary similarity index 90% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/boundary rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/boundary index b3548de91cf4646aa6692d8e02914c5ed4755ff7..850c9baa1ec078697b17ec724c99578c6047e10d 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/boundary +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/controlDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/controlDict similarity index 92% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/controlDict rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/controlDict index f1052a4864fad271f58b2d6f62e0f3898d42c81d..76f7ed8a7ee4afac7f47fb4c97b4a42a01147053 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/controlDict +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/controlDict @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,7 +10,6 @@ FoamFile version 2.0; format ascii; class dictionary; - location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,5 +44,4 @@ runTimeModifiable yes; adjustTimeStep no; - // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/decomposeParDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..958e14c73370e57528f6fd38a15607b7ba3c2bcd --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/decomposeParDict @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 2; + +method simple; + +simpleCoeffs +{ + n (2 1 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights + ( + 1 + 3 + ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSchemes b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..42fda7921ca0a70a5b1f415666f49d4d07befb7b --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSchemes @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default none; +} + +gradSchemes +{ + default none; +} + +divSchemes +{ + default none; +} + +laplacianSchemes +{ + default none; +} + +interpolationSchemes +{ + default none; +} + +snGradSchemes +{ + default none; +} + +fluxRequired +{ + default no; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSolution b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..1e39435250fcc6c21b5ca292d31d085533ce9716 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSolution @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/c0_old b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdEquilibrationDict similarity index 88% rename from tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/c0_old rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdEquilibrationDict index 5fbe1c4c4b15e3608a0e45519f8bea631f0e42ec..bbdbb899ec8d9cd8de0b2329c76e18c55db5e73b 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/c0_old +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdEquilibrationDict @@ -9,15 +9,12 @@ FoamFile { version 2.0; format ascii; - class topoSet; - location "constant/polyMesh/sets"; - object c0_old; + class dictionary; + object mdEquilibrationDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -0 -( -) +targetTemperature 300.0; // ************************************************************************* // + diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdInitialiseDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..cb562f34a6c148531c9a243458edb24af24b5de7 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdInitialiseDict @@ -0,0 +1,44 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object molConfigDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Euler angles, expressed in degrees as phi, theta, psi, see +// http://mathworld.wolfram.com/EulerAngles.html + +liquid +{ + massDensity 1220; + temperature 300; + bulkVelocity (0.0 0.0 0.0); + latticeIds (Ar); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/potentialDict new file mode 100644 index 0000000000000000000000000000000000000000..190428f399ffe941ecd05be8492411c4497c5b6c --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/potentialDict @@ -0,0 +1,121 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +n| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object potentials; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Subdictionaries specifying types of intermolecular potential. +// Sub-sub dictionaries specify the potentials themselves. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Removal order + +// This is the order in which to remove overlapping pairs if more than one +// type of molecule is present. The most valuable molecule type is at the +// right hand end, the molecule that will be removed 1st is 1st on the list. +// Not all types need to be present, a molecule that is not present is +// automatically less valuable than any on the list. For molecules of the +// same type there is no control over which is removed. + +removalOrder ( Ar ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Potential Energy Limit + +// Maximum permissible pair energy allowed at startup. Used to remove +// overlapping molecules created during preprocessing. + +potentialEnergyLimit 1e-18; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Pair potentials + +// If there are r different type of molecules, and a pair force is required +// between all combinations, then there are C = r(r+1)/2 combinations, +// i.e. for r = {1,2,3,4}, C = {1,3,6,10} (sum of triangular numbers). + +// Pair potentials are specified by the combinaition of their ids, +// for MOLA and MOLB, "MOLA-MOLB" OR "MOLB-MOLA" is acceptable +// (strictly OR, both or neither is an error) + +pair +{ + Ar-Ar + { + pairPotential maitlandSmith; + rCut 1.0e-9; + rMin 0.15e-9; + dr 5e-14; + maitlandSmithCoeffs + { + m 13.0; + gamma 7.5; + rm 0.3756e-9; + epsilon 1.990108438e-21; + } + energyScalingFunction doubleSigmoid; + doubleSigmoidCoeffs + { + shift1 0.9e-9; + scale1 0.3e11; + shift2 0.97e-9; + scale2 1.2e11; + } + writeTables yes; + } + + electrostatic + { + pairPotential dampedCoulomb; + rCut 1.0e-9; + rMin 0.1e-9; + dr 2e-12; + dampedCoulombCoeffs + { + alpha 2e9; + } + energyScalingFunction shiftedForce; + writeTables yes; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tethering Potentials + +tether +{ + O + { + tetherPotential restrainedHarmonicSpring; + restrainedHarmonicSpringCoeffs + { + springConstant 0.277; + rR 1.2e-9; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// External Forces + +// Bulk external forces (namely gravity) will be specified as forces rather +// than potentials to allow their direction to be controlled. + +external +{ + gravity (0 0 0); +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/moleculeProperties b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/moleculeProperties new file mode 100644 index 0000000000000000000000000000000000000000..2486f3c146ba4495cb003f1912db45ff57b5aa55 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/moleculeProperties @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object moleculeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +water +{ + siteIds (H H O M); + pairPotentialSiteIds (O); + siteReferencePositions + ( + (7.56950327263661e-11 5.85882276618295e-11 0) + (-7.56950327263661e-11 5.85882276618295e-11 0) + (0 0 0) + (0 1.5e-11 0) + ); + siteMasses + ( + 1.67353255e-27 + 1.67353255e-27 + 2.6560176e-26 + 0 + ); + siteCharges + ( + 8.3313177324e-20 + 8.3313177324e-20 + 0 + -1.66626354648e-19 + ); +} + +water2 +{ + siteIds (H2 H2 O M2); + pairPotentialSiteIds (O); + siteReferencePositions + ( + (7.56950327263661e-11 5.85882276618295e-11 0) + (-7.56950327263661e-11 5.85882276618295e-11 0) + (0 0 0) + (0 1.5e-11 0) + ); + siteMasses + ( + 1.67353255e-27 + 1.67353255e-27 + 2.6560176e-26 + 0 + ); + siteCharges + ( + 8.3313177324e-20 + 8.3313177324e-20 + 0 + -1.66626354648e-19 + ); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..b78ecf45c974246d6545e6265c8e459946d467bf --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/blockMeshDict @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 2.10840e-9; + +vertices +( + (-1 -1 -1) + (1 -1 -1) + (1 1 -1) + (-1 1 -1) + (-1 -1 1) + (1 -1 1) + (1 1 1) + (-1 1 1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) liquid (12 12 11) simpleGrading (1 1 1) +); + +patches +( + cyclic + periodicX + ( + (1 2 6 5) + (0 4 7 3) + ) + + cyclic + periodicY + ( + (2 3 7 6) + (0 1 5 4) + ) + + cyclic + periodicZ + ( + (0 3 2 1) + (4 5 6 7) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/boundary b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/boundary similarity index 67% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/boundary rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/boundary index e9d933420b7298f5aa2fef9909433f031b113f5a..27cc5e87df98bf4826a1a86391e91fbf982a59f1 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/boundary +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -15,33 +15,28 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -4 +3 ( periodicX { type cyclic; - nFaces 288; - startFace 10710; + nFaces 264; + startFace 4344; featureCos 0.9; } - periodicZ + periodicY { type cyclic; - nFaces 1296; - startFace 10998; + nFaces 264; + startFace 4608; featureCos 0.9; } - outerBoundaryBottom - { - type wall; - nFaces 162; - startFace 12294; - } - outerBoundaryTop + periodicZ { - type wall; - nFaces 162; - startFace 12456; + type cyclic; + nFaces 288; + startFace 4872; + featureCos 0.9; } ) diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/controlDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/controlDict similarity index 86% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/controlDict rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/controlDict index c43b52a4489940816c201cd8c03c5ca1f7694a2e..51a42ecc0e828d90fd725f5c361eae36c95f5f15 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/controlDict +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/controlDict @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,7 +10,6 @@ FoamFile version 2.0; format ascii; class dictionary; - location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,13 +20,13 @@ startTime 0; stopAt endTime; -endTime 8e-11; +endTime 5e-12; -deltaT 1e-14; +deltaT 1e-15; writeControl runTime; -writeInterval 2e-12; +writeInterval 2e-13; purgeWrite 0; @@ -45,5 +44,4 @@ runTimeModifiable yes; adjustTimeStep no; - // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/decomposeParDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..e0302aafcc9b69d045a7b00b3a4a108a44973291 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/decomposeParDict @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 4; + +method simple; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights + ( + 1 + 3 + ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSchemes b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..42fda7921ca0a70a5b1f415666f49d4d07befb7b --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSchemes @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default none; +} + +gradSchemes +{ + default none; +} + +divSchemes +{ + default none; +} + +laplacianSchemes +{ + default none; +} + +interpolationSchemes +{ + default none; +} + +snGradSchemes +{ + default none; +} + +fluxRequired +{ + default no; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSolution b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..1e39435250fcc6c21b5ca292d31d085533ce9716 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSolution @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ +} + +// ************************************************************************* // diff --git a/tutorials/combustion/dieselFoam/aachenBomb/0/spray b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdEquilibrationDict similarity index 92% rename from tutorials/combustion/dieselFoam/aachenBomb/0/spray rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdEquilibrationDict index c5f9cb2f59b6a48c85af4caac770e05dca1f3c3e..de8cb745e1f62f9f76556059a8d34a750d5b808f 100644 --- a/tutorials/combustion/dieselFoam/aachenBomb/0/spray +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdEquilibrationDict @@ -10,11 +10,10 @@ FoamFile version 2.0; format ascii; class dictionary; - object spray; + object mdEquilibrationDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -( -) +targetTemperature 298; // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdInitialiseDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..ff1444ead5acf93663635513847686618cb704e5 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdInitialiseDict @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object molConfigDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Euler angles, expressed in degrees as phi, theta, psi, see +// http://mathworld.wolfram.com/EulerAngles.html + +liquid +{ + massDensity 980; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + water2 + water + water2 + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + (0 0.5 0.5) + (0.5 0 0.5) + (0.5 0.5 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/potentialDict new file mode 100644 index 0000000000000000000000000000000000000000..25b268e74c7e3e102b49eeaa23186dc47031e338 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/potentialDict @@ -0,0 +1,118 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object potentials; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Subdictionaries specifying types of intermolecular potential. +// Sub-sub dictionaries specify the potentials themselves. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Removal order + +// This is the order in which to remove overlapping pairs if more than one +// type of molecule is present. The most valuable molecule type is at the +// right hand end, the molecule that will be removed 1st is 1st on the list. +// Not all types need to be present, a molecule that is not present is +// automatically less valuable than any on the list. For molecules of the +// same type there is no control over which is removed. + +removalOrder ( water ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Potential Energy Limit + +// Maximum permissible pair energy allowed at startup. Used to remove +// overlapping molecules created during preprocessing. + +potentialEnergyLimit 1e-18; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Pair potentials + +// If a pair are not present here it is assumed that they do not interact. + +// Electrostatic pair interactions are not listed here - they are handled +// separately. + +// If there are r different type of molecules, and a pair force is required +// between all combinations, then there are C = r(r+1)/2 combinations, +// i.e. for r = {1,2,3,4}, C = {1,3,6,10} (sum of triangular numbers). + +// Pair potentials are specified by the combinaition of their ids, +// for MOLA and MOLB, "MOLA-MOLB" OR "MOLB-MOLA" is acceptable +// (strictly OR, both or neither will throw an error) + +pair +{ + O-O + { + pairPotential lennardJones; + rCut 1.0e-9; + rMin 0.1e-9; + dr 1e-13; + lennardJonesCoeffs + { + sigma 3.154e-10; + epsilon 1.07690722e-21; + } + energyScalingFunction noScaling; + writeTables yes; + } + + electrostatic + { + pairPotential dampedCoulomb; + rCut 1e-9; + rMin 2e-11; + dr 2e-12; + dampedCoulombCoeffs + { + alpha 2e9; + } + energyScalingFunction shiftedForce; + writeTables yes; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tethering Potentials + +tether +{ + O + { + tetherPotential restrainedHarmonicSpring; + restrainedHarmonicSpringCoeffs + { + springConstant 0.277; + rR 1.2e-9; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// External Forces + +// Bulk external forces (namely gravity) will be specified as forces rather +// than potentials to allow their direction to be controlled. + +external +{ + gravity (0 0 0); +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allclean b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allclean similarity index 57% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allclean rename to tutorials/discreteMethods/molecularDynamics/mdFoam/Allclean index 11f901ce8e07f87b4c4e41b1be30311c5ecd5589..7ff7776cb12c793a7bed32339e31b6ded3897549 100755 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allclean +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allclean @@ -3,14 +3,8 @@ # Source tutorial clean functions . $WM_PROJECT_DIR/bin/tools/CleanFunctions -cd constrictedChannel - rm -rf 0 - rm -rf Ar-Ar Ar-Ne Ne-Ne - rm -rf constant/idList - cleanCase -cd .. - cd nanoNozzle + rm -rf constant/polyMesh/sets rm -rf processor[0-9] cleanCase cd .. diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allrun b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allrun similarity index 60% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allrun rename to tutorials/discreteMethods/molecularDynamics/mdFoam/Allrun index 640ecd9bdc14899a37fe41bf908956b6623fa5f3..c756b2ca7e7a3d0ac97842edb011c9f6891abc98 100755 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allrun +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allrun @@ -3,13 +3,7 @@ # Source tutorial run functions . $WM_PROJECT_DIR/bin/tools/RunFunctions -application="gnemdFoam" - -cd constrictedChannel - runApplication blockMesh - runApplication molConfig - runApplication $application -cd .. +application="mdFoam" cd nanoNozzle runApplication blockMesh @@ -17,7 +11,7 @@ cd nanoNozzle runApplication decomposePar hostname > system/machines - runParallel molConfig 4 system/machines + runParallel mdInitialise 4 system/machines runParallel $application 4 system/machines runApplication reconstructPar diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/moleculeProperties b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/moleculeProperties new file mode 100644 index 0000000000000000000000000000000000000000..faf53865886ddd2133a0f6ad01f43d111d94c951 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/moleculeProperties @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object moleculeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +water +{ + siteIds (H H O M); + pairPotentialSiteIds (O); + siteReferencePositions + ( + (7.56950327263661e-11 5.85882276618295e-11 0) + (-7.56950327263661e-11 5.85882276618295e-11 0) + (0 0 0) + (0 1.5e-11 0) + ); + siteMasses + ( + 1.67353255e-27 + 1.67353255e-27 + 2.6560176e-26 + 0 + ); + siteCharges + ( + 8.3313177324e-20 + 8.3313177324e-20 + 0 + -1.66626354648e-19 + ); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/blockMeshDict similarity index 65% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/blockMeshDict rename to tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/blockMeshDict index 024f66a3838c1a7bd2348707c3fca7e080686015..bfd56736e27cc02fb354b8ce9de41ef67748dd03 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/blockMeshDict +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/blockMeshDict @@ -14,9 +14,9 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -convertToMeters 3e-9; +convertToMeters 3.2e-9; -vertices +vertices ( (0 0 0) (3.5 0 0) @@ -44,47 +44,19 @@ vertices (16 2.5 3.5) ); -blocks +blocks ( - hex (0 1 2 3 4 5 6 7) sectionA (16 15 15) simpleGrading (1 1 1) - hex (1 8 9 2 5 10 11 6) sectionA (16 15 15) simpleGrading (0.4 1 1) - hex (8 12 13 9 10 14 15 11) sectionB (16 15 15) simpleGrading (1 1 1) - hex (12 16 17 13 14 18 19 15) sectionC (11 15 15) simpleGrading (2.8 1 1) - hex (16 20 21 17 18 22 23 19) sectionC (16 15 15) simpleGrading (1 1 1) + hex (0 1 2 3 4 5 6 7) sectionA (20 16 16) simpleGrading (1 1 1) + hex (1 8 9 2 5 10 11 6) sectionA (20 16 16) simpleGrading (1 1 1) + hex (8 12 13 9 10 14 15 11) sectionB (29 16 16) simpleGrading (1 1 1) + hex (12 16 17 13 14 18 19 15) sectionC (17 16 16) simpleGrading (1 1 1) + hex (16 20 21 17 18 22 23 19) sectionC (20 16 16) simpleGrading (1 1 1) ); -edges -( - simpleSpline 12 16 - ( - (10.375 0.875 0.4) - (10.75 0.75 0) - (11.125 0.625 -0.4) - ) - - simpleSpline 14 18 - ( - (10.375 0.875 2.6) - (10.75 0.75 3) - (11.125 0.625 3.4) - ) - - simpleSpline 15 19 - ( - (10.375 2.125 2.6) - (10.75 2.25 3) - (11.125 2.375 3.4) - ) - - simpleSpline 13 17 - ( - (10.375 2.125 0.4) - (10.75 2.25 0) - (11.125 2.375 -0.4) - ) -); +edges +(); -patches +patches ( patch sectionAEnd @@ -92,12 +64,12 @@ patches (0 4 7 3) ) - patch + wall sectionCEnd ( (20 21 23 22) ) - + wall front ( @@ -107,7 +79,7 @@ patches (12 16 18 14) (16 20 22 18) ) - + wall back ( @@ -117,7 +89,7 @@ patches (13 15 19 17) (17 19 23 21) ) - + wall top ( @@ -127,7 +99,7 @@ patches (14 18 19 15) (18 22 23 19) ) - + wall bottom ( @@ -139,7 +111,7 @@ patches ) ); -mergePatchPairs +mergePatchPairs ( ); diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/boundary b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/boundary similarity index 66% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/boundary rename to tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/boundary index a58d17ed7f51a0b1d98167dadad04ec7b6a21c8b..8f1b5f6505e47c52d85bd170a7fae0d85f55ec1c 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/boundary +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -20,38 +20,38 @@ FoamFile sectionAEnd { type patch; - nFaces 225; - startFace 48150; + nFaces 256; + startFace 77760; } sectionCEnd { - type patch; - nFaces 225; - startFace 48375; + type wall; + nFaces 256; + startFace 78016; } front { type wall; - nFaces 1125; - startFace 48600; + nFaces 1696; + startFace 78272; } back { type wall; - nFaces 1125; - startFace 49725; + nFaces 1696; + startFace 79968; } top { type wall; - nFaces 1125; - startFace 50850; + nFaces 1696; + startFace 81664; } bottom { type wall; - nFaces 1125; - startFace 51975; + nFaces 1696; + startFace 83360; } ) diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/controlDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..51a42ecc0e828d90fd725f5c361eae36c95f5f15 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/controlDict @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 5e-12; + +deltaT 1e-15; + +writeControl runTime; + +writeInterval 2e-13; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 12; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/decomposeParDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..a3946a745f2169cea62449bd32b9365bd539cd69 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/decomposeParDict @@ -0,0 +1,66 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 4; + +method metis; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights + ( + 1 + 1 + 1 + 1 + ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSchemes b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..42fda7921ca0a70a5b1f415666f49d4d07befb7b --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSchemes @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default none; +} + +gradSchemes +{ + default none; +} + +divSchemes +{ + default none; +} + +laplacianSchemes +{ + default none; +} + +interpolationSchemes +{ + default none; +} + +snGradSchemes +{ + default none; +} + +fluxRequired +{ + default no; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSolution b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..1e39435250fcc6c21b5ca292d31d085533ce9716 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSolution @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdEquilibrationDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdEquilibrationDict new file mode 100644 index 0000000000000000000000000000000000000000..de8cb745e1f62f9f76556059a8d34a750d5b808f --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdEquilibrationDict @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object mdEquilibrationDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +targetTemperature 298; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdInitialiseDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..0d91d5a08b1413b4a02ccb5d22d096df67b3a500 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdInitialiseDict @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object molConfigDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Euler angles, expressed in degrees as phi, theta, psi, see +// http://mathworld.wolfram.com/EulerAngles.html + +sectionA +{ + massDensity 1004; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +sectionB +{ + massDensity 1004; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +sectionC +{ + massDensity 1004; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/potentialDict new file mode 100644 index 0000000000000000000000000000000000000000..25b268e74c7e3e102b49eeaa23186dc47031e338 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/potentialDict @@ -0,0 +1,118 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object potentials; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Subdictionaries specifying types of intermolecular potential. +// Sub-sub dictionaries specify the potentials themselves. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Removal order + +// This is the order in which to remove overlapping pairs if more than one +// type of molecule is present. The most valuable molecule type is at the +// right hand end, the molecule that will be removed 1st is 1st on the list. +// Not all types need to be present, a molecule that is not present is +// automatically less valuable than any on the list. For molecules of the +// same type there is no control over which is removed. + +removalOrder ( water ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Potential Energy Limit + +// Maximum permissible pair energy allowed at startup. Used to remove +// overlapping molecules created during preprocessing. + +potentialEnergyLimit 1e-18; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Pair potentials + +// If a pair are not present here it is assumed that they do not interact. + +// Electrostatic pair interactions are not listed here - they are handled +// separately. + +// If there are r different type of molecules, and a pair force is required +// between all combinations, then there are C = r(r+1)/2 combinations, +// i.e. for r = {1,2,3,4}, C = {1,3,6,10} (sum of triangular numbers). + +// Pair potentials are specified by the combinaition of their ids, +// for MOLA and MOLB, "MOLA-MOLB" OR "MOLB-MOLA" is acceptable +// (strictly OR, both or neither will throw an error) + +pair +{ + O-O + { + pairPotential lennardJones; + rCut 1.0e-9; + rMin 0.1e-9; + dr 1e-13; + lennardJonesCoeffs + { + sigma 3.154e-10; + epsilon 1.07690722e-21; + } + energyScalingFunction noScaling; + writeTables yes; + } + + electrostatic + { + pairPotential dampedCoulomb; + rCut 1e-9; + rMin 2e-11; + dr 2e-12; + dampedCoulombCoeffs + { + alpha 2e9; + } + energyScalingFunction shiftedForce; + writeTables yes; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tethering Potentials + +tether +{ + O + { + tetherPotential restrainedHarmonicSpring; + restrainedHarmonicSpringCoeffs + { + springConstant 0.277; + rR 1.2e-9; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// External Forces + +// Bulk external forces (namely gravity) will be specified as forces rather +// than potentials to allow their direction to be controlled. + +external +{ + gravity (0 0 0); +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T.org b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T.org new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T.org @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/U b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/U new file mode 100644 index 0000000000000000000000000000000000000000..0b6b191dab023e6aa4c9701188dd93252aeb7aa9 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/U @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + floor + { + type fixedValue; + value uniform (0 0 0); + } + + ceiling + { + type fixedValue; + value uniform (0 0 0); + } + + fixedWalls + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/pd b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/alphat similarity index 83% rename from tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/pd rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/alphat index 3a679ba63a51f43776afa9f72c8fe4e69e328aac..3bcb9c03b13cf7d96e3456eabea33e5f6d0ee8e1 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/pd +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/alphat @@ -10,11 +10,12 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + location "0"; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -2 0 0 0 0]; +dimensions [1 -1 -1 0 0 0 0]; internalField uniform 0; @@ -22,21 +23,20 @@ boundaryField { floor { - type fixedFluxBuoyantPressure; + type alphatWallFunction; value uniform 0; } - ceiling { - type fixedFluxBuoyantPressure; + type alphatWallFunction; value uniform 0; } - fixedWalls { - type fixedFluxBuoyantPressure; + type alphatWallFunction; value uniform 0; } } + // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon similarity index 59% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSolution rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon index 46670343363af32a79fcf7bd788316556b9de7d7..892d69375d9d5eab2aa804a87ee6661bbc1a9f06 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSolution +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -9,37 +9,33 @@ FoamFile { version 2.0; format ascii; - class dictionary; - location "system"; - object fvSolution; + class volScalarField; + location "0"; + object epsilon; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -solvers +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField { - p + floor { - solver PCG; - preconditioner DIC; - tolerance 1e-06; - relTol 0; + type epsilonWallFunction; + value uniform 0.01; } - - U + ceiling { - solver PBiCG; - preconditioner DILU; - tolerance 1e-05; - relTol 0; + type epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type epsilonWallFunction; + value uniform 0.01; } -} - -PISO -{ - nCorrectors 2; - nNonOrthogonalCorrectors 0; - pRefCell 0; - pRefValue 0; } diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon.old b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon.old new file mode 100644 index 0000000000000000000000000000000000000000..23851291dc60d3b0df3be887acfbeb0bb5067ef8 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k new file mode 100644 index 0000000000000000000000000000000000000000..38c2a542ef4c0c57799adb46dbd114f24947f474 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k.old b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k.old new file mode 100644 index 0000000000000000000000000000000000000000..4ec7f08960c175a6d955e2c1d3cfb98453524647 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type compressible::kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/nut b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..a81ad6b59fd8d4b8617763e08058fbb36b3b8aef --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/nut @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type nutWallFunction; + value uniform 0; + } + ceiling + { + type nutWallFunction; + value uniform 0; + } + fixedWalls + { + type nutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/pd b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/p similarity index 76% rename from tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/pd rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/p index 1841d7882f5c06e25080901cd800391c09d11868..502fb88dfaf0b335774fa4a45714c68078bec5ad 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/pd +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/p @@ -10,11 +10,11 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -2 0 0 0 0]; +dimensions [0 2 -2 0 0 0 0]; internalField uniform 0; @@ -22,25 +22,22 @@ boundaryField { floor { - type fixedFluxBuoyantPressure; + type buoyantPressure; + rho rhok; value uniform 0; } ceiling { - type fixedFluxBuoyantPressure; + type buoyantPressure; + rho rhok; value uniform 0; } fixedWalls { - type fixedFluxBuoyantPressure; - value uniform 0; - } - - box - { - type fixedFluxBuoyantPressure; + type buoyantPressure; + rho rhok; value uniform 0; } } diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allclean b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..83fcec83ecad6243fdfd74b8afb16acd55518f36 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +cp 0/T.org 0/T diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..92490b5b5ea392da192d42ec102f629c87c73e60 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allrun @@ -0,0 +1,10 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="buoyantBoussinesqPisoFoam" + +compileApplication ../../buoyantPisoFoam/hotRoom/setHotRoom +runApplication blockMesh +runApplication setHotRoom +runApplication $application diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/environmentalProperties b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/environmentalProperties similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/environmentalProperties rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/environmentalProperties diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/blockMeshDict similarity index 72% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/blockMeshDict rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/blockMeshDict index 187c2c7784d60dda7a64455a321799191e21c95e..fa2bb5c4c6e834caba8be30e1825ea1a45c22c92 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/blockMeshDict +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/blockMeshDict @@ -14,48 +14,47 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -convertToMeters 2.462491658e-9; +convertToMeters 1; -vertices +vertices ( - (-1 -1 -1) - (1 -1 -1) - (1 1 -1) - (-1 1 -1) - (-1 -1 1) - (1 -1 1) - (1 1 1) - (-1 1 1) + (0 0 0) + (10 0 0) + (10 5 0) + (0 5 0) + (0 0 10) + (10 0 10) + (10 5 10) + (0 5 10) ); -blocks +blocks ( - hex (0 1 2 3 4 5 6 7) liquid (12 12 12) simpleGrading (1 1 1) + hex (0 1 2 3 4 5 6 7) (20 10 20) simpleGrading (1 1 1) ); -patches +edges ( - cyclic - periodicX +); + +patches +( + wall floor ( - (1 2 6 5) - (0 4 7 3) + (1 5 4 0) ) - - cyclic - periodicY + wall ceiling ( - (2 3 7 6) - (0 1 5 4) + (3 7 6 2) ) - - cyclic - periodicZ + wall fixedWalls ( + (0 4 7 3) + (2 6 5 1) (0 3 2 1) (4 5 6 7) ) -) +); mergePatchPairs ( diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..0d4d0e498dae524c835cc1addc9707eb5af47fb3 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + floor + { + type wall; + nFaces 400; + startFace 11200; + } + ceiling + { + type wall; + nFaces 400; + startFace 11600; + } + fixedWalls + { + type wall; + nFaces 800; + startFace 12000; + } +) + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..f48fda19ccac705f76f1573b7ba40cce45abfd5b --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/transportProperties @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +// Laminar viscosity +nu nu [0 2 -1 0 0 0 0] 1e-05; + +// Thermal expansion coefficient +beta beta [0 0 0 -1 0 0 0] 3e-03; + +// Reference temperature +TRef TRef [0 0 0 1 0 0 0] 300; + +// Laminar Prandtl number +Pr Pr [0 0 0 0 0 0 0] 0.9; + +// Turbulent Prandtl number +Prt Prt [0 0 0 0 0 0 0] 0.7; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/controlDict similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/controlDict rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/controlDict index 46436871638186b4ead04e658ceeadd2579b9a5f..26a1219ee04433266c5a0540f5ecf239fc0d0f93 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/controlDict +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/controlDict @@ -21,19 +21,19 @@ startTime 0; stopAt endTime; -endTime 3e-11; +endTime 1000; -deltaT 1e-14; +deltaT 1; -writeControl runTime; +writeControl timeStep; -writeInterval 1e-12; +writeInterval 100; purgeWrite 0; writeFormat ascii; -writePrecision 12; +writePrecision 6; writeCompression uncompressed; @@ -45,5 +45,6 @@ runTimeModifiable yes; adjustTimeStep no; +maxCo 0.5; // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..6be8f0129f6c5ae27dae2d20c5e0cd28fcf26f12 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSchemes @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,T) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(kappaEff,T) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSolution similarity index 61% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSolution rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSolution index 46670343363af32a79fcf7bd788316556b9de7d7..7afa2f50aa9b1dc663a24bada8c0971be911c656 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSolution +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSolution @@ -21,7 +21,15 @@ solvers { solver PCG; preconditioner DIC; - tolerance 1e-06; + tolerance 1e-07; + relTol 0.1; + } + + pFinal + { + solver PCG; + preconditioner DIC; + tolerance 1e-07; relTol 0; } @@ -32,10 +40,43 @@ solvers tolerance 1e-05; relTol 0; } + + T + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } } PISO { + momentumPredictor yes; nCorrectors 2; nNonOrthogonalCorrectors 0; pRefCell 0; diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T.org b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T.org new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T.org @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/U b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/U new file mode 100644 index 0000000000000000000000000000000000000000..0b6b191dab023e6aa4c9701188dd93252aeb7aa9 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/U @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + floor + { + type fixedValue; + value uniform (0 0 0); + } + + ceiling + { + type fixedValue; + value uniform (0 0 0); + } + + fixedWalls + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/pd b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/alphat similarity index 83% rename from tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/pd rename to tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/alphat index 3a679ba63a51f43776afa9f72c8fe4e69e328aac..3bcb9c03b13cf7d96e3456eabea33e5f6d0ee8e1 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/pd +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/alphat @@ -10,11 +10,12 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + location "0"; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -2 0 0 0 0]; +dimensions [1 -1 -1 0 0 0 0]; internalField uniform 0; @@ -22,21 +23,20 @@ boundaryField { floor { - type fixedFluxBuoyantPressure; + type alphatWallFunction; value uniform 0; } - ceiling { - type fixedFluxBuoyantPressure; + type alphatWallFunction; value uniform 0; } - fixedWalls { - type fixedFluxBuoyantPressure; + type alphatWallFunction; value uniform 0; } } + // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..892d69375d9d5eab2aa804a87ee6661bbc1a9f06 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon.old b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon.old new file mode 100644 index 0000000000000000000000000000000000000000..23851291dc60d3b0df3be887acfbeb0bb5067ef8 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k new file mode 100644 index 0000000000000000000000000000000000000000..38c2a542ef4c0c57799adb46dbd114f24947f474 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k.old b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k.old new file mode 100644 index 0000000000000000000000000000000000000000..4ec7f08960c175a6d955e2c1d3cfb98453524647 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type compressible::kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/nut b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..a81ad6b59fd8d4b8617763e08058fbb36b3b8aef --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/nut @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type nutWallFunction; + value uniform 0; + } + ceiling + { + type nutWallFunction; + value uniform 0; + } + fixedWalls + { + type nutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/p b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/p new file mode 100644 index 0000000000000000000000000000000000000000..502fb88dfaf0b335774fa4a45714c68078bec5ad --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/p @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type buoyantPressure; + rho rhok; + value uniform 0; + } + + ceiling + { + type buoyantPressure; + rho rhok; + value uniform 0; + } + + fixedWalls + { + type buoyantPressure; + rho rhok; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allclean b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..83fcec83ecad6243fdfd74b8afb16acd55518f36 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +cp 0/T.org 0/T diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..628624c70292d70d593effaa1a4e9fc9e2281550 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun @@ -0,0 +1,10 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="buoyantBoussinesqSimpleFoam" + +compileApplication ../../buoyantPisoFoam/hotRoom/setHotRoom +runApplication blockMesh +runApplication setHotRoom +runApplication $application diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/environmentalProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..a866ff549fd799e63d2d6946a66cf3da14d092bd --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 -9.81 0 ); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..fa2bb5c4c6e834caba8be30e1825ea1a45c22c92 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/blockMeshDict @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (0 0 0) + (10 0 0) + (10 5 0) + (0 5 0) + (0 0 10) + (10 0 10) + (10 5 10) + (0 5 10) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (20 10 20) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + wall floor + ( + (1 5 4 0) + ) + wall ceiling + ( + (3 7 6 2) + ) + wall fixedWalls + ( + (0 4 7 3) + (2 6 5 1) + (0 3 2 1) + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..0d4d0e498dae524c835cc1addc9707eb5af47fb3 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + floor + { + type wall; + nFaces 400; + startFace 11200; + } + ceiling + { + type wall; + nFaces 400; + startFace 11600; + } + fixedWalls + { + type wall; + nFaces 800; + startFace 12000; + } +) + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..f48fda19ccac705f76f1573b7ba40cce45abfd5b --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +// Laminar viscosity +nu nu [0 2 -1 0 0 0 0] 1e-05; + +// Thermal expansion coefficient +beta beta [0 0 0 -1 0 0 0] 3e-03; + +// Reference temperature +TRef TRef [0 0 0 1 0 0 0] 300; + +// Laminar Prandtl number +Pr Pr [0 0 0 0 0 0 0] 0.9; + +// Turbulent Prandtl number +Prt Prt [0 0 0 0 0 0 0] 0.7; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/motorBike/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/controlDict similarity index 94% rename from tutorials/mesh/snappyHexMesh/motorBike/system/controlDict rename to tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/controlDict index ef80311ee11931792c1d637b6d45c5a9b75c24de..bfc52cf914e6d70563729bb9790dda8a20daaa70 100644 --- a/tutorials/mesh/snappyHexMesh/motorBike/system/controlDict +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/controlDict @@ -21,19 +21,19 @@ startTime 0; stopAt endTime; -endTime 100; +endTime 1000; deltaT 1; writeControl timeStep; -writeInterval 1; +writeInterval 100; purgeWrite 0; writeFormat ascii; -writePrecision 7; +writePrecision 6; writeCompression uncompressed; diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..b54bb8631600a594830b214816d8a858bcf83a02 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,T) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(kappaEff,T) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..429a10a7fdef11317fd88716d83302a85e16d099 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSolution @@ -0,0 +1,88 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0.01; + } + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + T + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; + pRefCell 0; + pRefValue 0; +} + +relaxationFactors +{ + rho 1; + p 0.7; + U 0.2; + T 0.7; + k 0.7; + epsilon 0.7; + R 0.7; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T new file mode 100644 index 0000000000000000000000000000000000000000..2f930360fd37896b527889abe6270f3643cca6e6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/T @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 265; + +boundaryField +{ + ground + { + type fixedValue; + value uniform 265; + } + + igloo_region0 + { + type fixedValue; + value uniform 265; + } + + twoFridgeFreezers_seal_0 + { + type fixedValue; + value uniform 303; + } + + twoFridgeFreezers_herring_1 + { + type fixedValue; + value uniform 303; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U new file mode 100644 index 0000000000000000000000000000000000000000..5d70f2a9c021a7c55ded01f6296f0113bb31029b --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/U @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + ground + { + type fixedValue; + value uniform (0 0 0); + } + + igloo_region0 + { + type fixedValue; + value uniform (0 0 0); + } + + twoFridgeFreezers_seal_0 + { + type fixedValue; + value uniform (0 0 0); + } + + twoFridgeFreezers_herring_1 + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/alphat b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..acdcda178a7d947cf732c6668ddf055b5bc51d05 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/alphat @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type alphatWallFunction; + value uniform 0; + } + + igloo_region0 + { + type alphatWallFunction; + value uniform 0; + } + + twoFridgeFreezers_seal_0 + { + type alphatWallFunction; + value uniform 0; + } + + twoFridgeFreezers_herring_1 + { + type alphatWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..0fa9bf60f265f63d0b0c957fc39f70ec920c8323 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/epsilon @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + ground + { + type epsilonWallFunction; + value uniform 0.01; + } + + igloo_region0 + { + type epsilonWallFunction; + value uniform 0.01; + } + + twoFridgeFreezers_seal_0 + { + type epsilonWallFunction; + value uniform 0.01; + } + + twoFridgeFreezers_herring_1 + { + type epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k new file mode 100644 index 0000000000000000000000000000000000000000..bd0cf46f0db295c3f0170202b33472417c20bca3 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/k @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + ground + { + type kQRWallFunction; + value uniform 0.1; + } + + igloo_region0 + { + type kQRWallFunction; + value uniform 0.1; + } + + twoFridgeFreezers_seal_0 + { + type kQRWallFunction; + value uniform 0.1; + } + + twoFridgeFreezers_herring_1 + { + type kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..e9e5f16e555dccc27b4fd7c11b0b4877afc1bb4f --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/nut @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type nutWallFunction; + value uniform 0; + } + + igloo_region0 + { + type nutWallFunction; + value uniform 0; + } + + twoFridgeFreezers_seal_0 + { + type nutWallFunction; + value uniform 0; + } + + twoFridgeFreezers_herring_1 + { + type nutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p new file mode 100644 index 0000000000000000000000000000000000000000..6835a61b1258dc947b0fcf662a11290acf90045f --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/0/p @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type buoyantPressure; + rho rhok; + value uniform 0; + } + + igloo_region0 + { + type buoyantPressure; + rho rhok; + value uniform 0; + } + + twoFridgeFreezers_seal_0 + { + type buoyantPressure; + rho rhok; + value uniform 0; + } + + twoFridgeFreezers_herring_1 + { + type buoyantPressure; + rho rhok; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/Allrun b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..79dc3f4b95e1f1dff9646fd6dd1ba9fa3bbae4ac --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/Allrun @@ -0,0 +1,9 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication snappyHexMesh -overwrite +runApplication setFields +runApplication buoyantBoussinesqSimpleFoam + diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/environmentalProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..8ecb2a440203a35f242328826e7484e672012712 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/environmentalProperties @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [0 1 -2 0 0 0 0] (0 0 -9.81); + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict similarity index 93% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict rename to tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict index d97dbb8e268c425f32326827a59e880e05e07eda..39d94d804fadab1df4f1ac72260fbd477d5f9204 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/polyMesh/blockMeshDict @@ -40,27 +40,32 @@ edges patches ( - patch maxY + empty maxY ( (3 7 6 2) ) - patch minX + + empty minX ( (0 4 7 3) ) - patch maxX + + empty maxX ( (2 6 5 1) ) - patch minY + + empty minY ( (1 5 4 0) ) - patch minZ + + wall ground ( (0 3 2 1) ) - patch maxZ + + empty maxZ ( (4 5 6 7) ) diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..f48fda19ccac705f76f1573b7ba40cce45abfd5b --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/transportProperties @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +// Laminar viscosity +nu nu [0 2 -1 0 0 0 0] 1e-05; + +// Thermal expansion coefficient +beta beta [0 0 0 -1 0 0 0] 3e-03; + +// Reference temperature +TRef TRef [0 0 0 1 0 0 0] 300; + +// Laminar Prandtl number +Pr Pr [0 0 0 0 0 0 0] 0.9; + +// Turbulent Prandtl number +Prt Prt [0 0 0 0 0 0 0] 0.7; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/triSurface/fridgeA.eMesh b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/triSurface/fridgeA.eMesh similarity index 100% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/triSurface/fridgeA.eMesh rename to tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/triSurface/fridgeA.eMesh diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..46e7cd00c334efd3d10a44f4e932cef57ccff22d --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 1000; + +deltaT 1; + +writeControl timeStep; + +writeInterval 100; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/decomposeParDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/decomposeParDict similarity index 100% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/system/decomposeParDict rename to tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/decomposeParDict diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..b54bb8631600a594830b214816d8a858bcf83a02 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,T) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(kappaEff,T) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..c2053ee47d6e6890ba5dc9b2e9041cdd7eb269d5 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSolution @@ -0,0 +1,88 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0.01; + } + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + T + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; + pRefCell 0; + pRefValue 0; +} + +relaxationFactors +{ + rho 1; + p 0.3; + U 0.7; + T 0.7; + k 0.7; + epsilon 0.7; + R 0.7; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict similarity index 97% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict rename to tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict index be30045c6d4d77a2bf014349a0e4890ff5d963bd..d31010ace7ef8ced9166f5e0bd4e2ec0ad4c347c 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/snappyHexMeshDict @@ -42,10 +42,13 @@ geometry min (0 0 0); max (1 1 1); } + fridgeFreezer { type searchableSurfaceCollection; - + + mergeSubRegions true; + freezer { surface box1; @@ -71,14 +74,17 @@ geometry } } } + twoFridgeFreezers { type searchableSurfaceCollection; - + + mergeSubRegions true; + seal { - surface fridgeFreezer; - scale (1.0 1.0 1.0); + surface box1; + scale (1.0 1.0 2.1); transform { type cartesian; @@ -89,8 +95,8 @@ geometry } herring { - surface fridgeFreezer; - scale (1.0 1.0 1.0); + surface box1; + scale (1.0 1.0 2.1); transform { type cartesian; @@ -244,6 +250,8 @@ snapControls // Settings for the layer addition. addLayersControls { + relativeSizes true; + // Per final patch (so not geometry!) the layer information layers { @@ -264,7 +272,7 @@ addLayersControls // is the // thickness of the layer furthest away from the wall. // Relative to undistorted size of cell outside layer. - finalLayerRatio 0.5; + finalLayerThickness 0.5; //- Minimum thickness of cell layer. If for any reason layer // cannot be above minThickness do not add layer. diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/alphat b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..5b9884a613ee886a95cb72e4cd55c77c0657e501 --- /dev/null +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/alphat @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type compressible::alphatWallFunction; + value uniform 0; + } + ceiling + { + type compressible::alphatWallFunction; + value uniform 0; + } + fixedWalls + { + type compressible::alphatWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/mut b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/mut new file mode 100644 index 0000000000000000000000000000000000000000..7c893682965996d4b4b48036a27527eeab2ebdf6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/mut @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object mut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type mutWallFunction; + value uniform 0; + } + ceiling + { + type mutWallFunction; + value uniform 0; + } + fixedWalls + { + type mutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/p b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/p index 10cf8ccf8e1db93392b06f55e43b51c5006cde71..349cfb544ecd2067ace69184f34c7414544584b0 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/p +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/0/p @@ -16,26 +16,26 @@ FoamFile dimensions [1 -1 -2 0 0 0 0]; -internalField uniform 100000; +internalField uniform 1e5; boundaryField { floor { - type calculated; - value uniform 100000; + type buoyantPressure; + value uniform 1e5; } ceiling { - type calculated; - value uniform 100000; + type buoyantPressure; + value uniform 1e5; } fixedWalls { - type calculated; - value uniform 100000; + type buoyantPressure; + value uniform 1e5; } } diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/constant/thermophysicalProperties b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/constant/thermophysicalProperties index f826516c2ebc44480f764103bbcc05c3f2e83efd..fb233e2de3b1b75cced36021ada8f28f58c58802 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/constant/thermophysicalProperties +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hRhoThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1000 0 1.8e-05 0.7; diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict index cb2e7470f67597540554a58b19942872bab68d34..26a1219ee04433266c5a0540f5ecf239fc0d0f93 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict @@ -21,9 +21,9 @@ startTime 0; stopAt endTime; -endTime 400; +endTime 1000; -deltaT 0.25; +deltaT 1; writeControl timeStep; diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSchemes index 583bf08e11cb06903ecea9b68ba94a197d2ebed3..35b5a3de97726aa485d4a2b0953e416448dbb7b3 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSchemes @@ -42,7 +42,7 @@ laplacianSchemes { default none; laplacian(muEff,U) Gauss linear corrected; - laplacian((rho*(1|A(U))),pd) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; laplacian(alphaEff,h) Gauss linear corrected; laplacian(DkEff,k) Gauss linear corrected; laplacian(DepsilonEff,epsilon) Gauss linear corrected; @@ -62,7 +62,7 @@ snGradSchemes fluxRequired { default no; - pd ; + p ; } diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSolution b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSolution index c7dcb8279da2f8d7c4afc7063a37071da1f38f73..ffe5b53f56aa268749c19d3ceede84925d35c365 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSolution +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/fvSolution @@ -25,7 +25,7 @@ solvers relTol 0; } - pd + p { solver PCG; preconditioner DIC; @@ -33,7 +33,7 @@ solvers relTol 0.1; } - pdFinal + pFinal { solver PCG; preconditioner DIC; diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/mut new file mode 100644 index 0000000000000000000000000000000000000000..7c893682965996d4b4b48036a27527eeab2ebdf6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/mut @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object mut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type mutWallFunction; + value uniform 0; + } + ceiling + { + type mutWallFunction; + value uniform 0; + } + fixedWalls + { + type mutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/p b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/p index 10cf8ccf8e1db93392b06f55e43b51c5006cde71..349cfb544ecd2067ace69184f34c7414544584b0 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/p +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/0/p @@ -16,26 +16,26 @@ FoamFile dimensions [1 -1 -2 0 0 0 0]; -internalField uniform 100000; +internalField uniform 1e5; boundaryField { floor { - type calculated; - value uniform 100000; + type buoyantPressure; + value uniform 1e5; } ceiling { - type calculated; - value uniform 100000; + type buoyantPressure; + value uniform 1e5; } fixedWalls { - type calculated; - value uniform 100000; + type buoyantPressure; + value uniform 1e5; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/constant/thermophysicalProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/constant/thermophysicalProperties index f826516c2ebc44480f764103bbcc05c3f2e83efd..6d55fcba3d7dd3a1e149ef0dd6f1582e917b7e7d 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/constant/thermophysicalProperties +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1000 0 1.8e-05 0.7; diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSchemes index 9dbebd21cbc1a0cd01091dde9e0cbcd63a459855..cb548b9d9fa88a28a17aefd4f99b9edeee80ea47 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSchemes @@ -41,7 +41,7 @@ laplacianSchemes { default none; laplacian(muEff,U) Gauss linear corrected; - laplacian((rho*(1|A(U))),pd) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; laplacian(alphaEff,h) Gauss linear corrected; laplacian(DkEff,k) Gauss linear corrected; laplacian(DepsilonEff,epsilon) Gauss linear corrected; @@ -61,7 +61,7 @@ snGradSchemes fluxRequired { default no; - pd ; + p ; } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSolution b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSolution index dfbfd6a27f1d095120342e7f47910f85b53f92c8..c543e875278062213cdf99ae620a9d1b1810c10f 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSolution +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRoom/system/fvSolution @@ -17,7 +17,7 @@ FoamFile solvers { - pd + p { solver PCG; preconditioner DIC; @@ -69,15 +69,15 @@ solvers SIMPLE { nNonOrthogonalCorrectors 0; - pdRefCell 0; - pdRefValue 0; + pRefCell 0; + pRefValue 1e5; } relaxationFactors { rho 1; - pd 0.3; - U 0.7; + p 0.7; + U 0.2; h 0.7; k 0.7; epsilon 0.7; diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p index f200e3eeb0f918f10cf34f5b87e5d04abd76b21d..f36884c5b2bea50659ca7ac526c853470f1aece7 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/0/p @@ -22,25 +22,25 @@ boundaryField { floor { - type calculated; + type buoyantPressure; value uniform 100000; } ceiling { - type calculated; + type buoyantPressure; value uniform 100000; } fixedWalls { - type calculated; + type buoyantPressure; value uniform 100000; } box { - type calculated; + type buoyantPressure; value uniform 100000; } } diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/radiationProperties b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/radiationProperties index d8bbfe7f595cd351683a08e8f1d8fe5974ea401d..5fc829b87cf5f1b92eaa88fe1ef7e7324601bbc1 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/radiationProperties +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/radiationProperties @@ -27,6 +27,9 @@ P1Coeffs { } +// Number of flow iterations per radiation iteration +solverFreq 1; + absorptionEmissionModel constantAbsorptionEmission; constantAbsorptionEmissionCoeffs diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/thermophysicalProperties b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/thermophysicalProperties index f826516c2ebc44480f764103bbcc05c3f2e83efd..6d55fcba3d7dd3a1e149ef0dd6f1582e917b7e7d 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/thermophysicalProperties +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1000 0 1.8e-05 0.7; diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSchemes index 2263c0977531361f056a900481ca7409854ed755..cd290308eb8752ef4ba6ef50fe5e3a17a2aba085 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSchemes @@ -41,7 +41,7 @@ laplacianSchemes { default none; laplacian(muEff,U) Gauss linear corrected; - laplacian((rho*(1|A(U))),pd) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; laplacian(alphaEff,h) Gauss linear corrected; laplacian(DkEff,k) Gauss linear corrected; laplacian(DepsilonEff,epsilon) Gauss linear corrected; @@ -62,7 +62,7 @@ snGradSchemes fluxRequired { default no; - pd ; + p; } diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSolution b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSolution index f6c1f9453a3985e9e77725582bd8f113f91cf78a..25a07616b314a40fd7a0dc43cfa299b9ec71f295 100644 --- a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSolution +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoom/system/fvSolution @@ -17,7 +17,7 @@ FoamFile solvers { - pd + p { solver PCG; preconditioner DIC; @@ -69,14 +69,14 @@ solvers SIMPLE { nNonOrthogonalCorrectors 0; - pdRefCell 0; - pdRefValue 0; + pRefCell 0; + pRefValue 0; } relaxationFactors { rho 1; - pd 0.3; + p 0.3; U 0.7; h 0.7; k 0.7; diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/G b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/G new file mode 100644 index 0000000000000000000000000000000000000000..cb9783649fe55f5f67032842ed34cefccd958808 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/G @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object G; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + + fixedWalls + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + + ceiling + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + + box + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/IDefault b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/IDefault new file mode 100644 index 0000000000000000000000000000000000000000..bbb4ec4ca347db87a2f6d153c8a75e30f9abb452 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/IDefault @@ -0,0 +1,32 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object IDefault; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ".*" + { + type greyDiffusiveRadiation; + T T; + emissivity 0.5; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/T b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/T new file mode 100644 index 0000000000000000000000000000000000000000..19ee7d9d08e1a184e767104e3384895d5ab2e4c0 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/T @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value uniform 300.0; + } + + ceiling + { + type fixedValue; + value uniform 300.0; + } + + fixedWalls + { + type zeroGradient; + } + + box + { + type fixedValue; + value uniform 500.0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/U b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/U new file mode 100644 index 0000000000000000000000000000000000000000..9a0eaf66b54cacbc5eed28bb9ed45cf51b8e8ba3 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/U @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + floor + { + type fixedValue; + value uniform (0 0 0); + } + + ceiling + { + type fixedValue; + value uniform (0 0 0); + } + + fixedWalls + { + type fixedValue; + value uniform (0 0 0); + } + + box + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/alphat b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..f11126d3f5379f99fbfa6dd2237ce2157f5189a9 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/alphat @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + box + { + type alphatWallFunction; + value uniform 0; + } + floor + { + type alphatWallFunction; + value uniform 0; + } + ceiling + { + type alphatWallFunction; + value uniform 0; + } + fixedWalls + { + type alphatWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/epsilon b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..d5e7b9cd0273d6d3e2024e42e6ec4aaac6be4986 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/epsilon @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [ 0 2 -3 0 0 0 0 ]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type compressible::epsilonWallFunction; + value uniform 0; + } + + ceiling + { + type compressible::epsilonWallFunction; + value uniform 0; + } + + fixedWalls + { + type compressible::epsilonWallFunction; + value uniform 0; + } + + box + { + type compressible::epsilonWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/k b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/k new file mode 100644 index 0000000000000000000000000000000000000000..5b206f8e4e379cbc9d5a2764071140549649d354 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/k @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [ 0 2 -2 0 0 0 0 ]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type compressible::kQRWallFunction; + value uniform 0; + } + + ceiling + { + type compressible::kQRWallFunction; + value uniform 0; + } + + fixedWalls + { + type compressible::kQRWallFunction; + value uniform 0; + } + + box + { + type compressible::kQRWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/mut b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/mut new file mode 100644 index 0000000000000000000000000000000000000000..c609cbf3d2c865212d20992980a9b59a349b9c68 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/mut @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object mut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [ 1 -1 -1 0 0 0 0 ]; + +internalField uniform 0; + +boundaryField +{ + box + { + type mutWallFunction; + value uniform 0; + } + + floor + { + type mutWallFunction; + value uniform 0; + } + + ceiling + { + type mutWallFunction; + value uniform 0; + } + + fixedWalls + { + type mutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p new file mode 100644 index 0000000000000000000000000000000000000000..f36884c5b2bea50659ca7ac526c853470f1aece7 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/0/p @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 100000; + +boundaryField +{ + floor + { + type buoyantPressure; + value uniform 100000; + } + + ceiling + { + type buoyantPressure; + value uniform 100000; + } + + fixedWalls + { + type buoyantPressure; + value uniform 100000; + } + + box + { + type buoyantPressure; + value uniform 100000; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/environmentalProperties b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..639bd90b066ffdac881dc8722b84c1bf39170e9d --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 0 -9.81 ); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..e69de20d9d6c7b3b86178f0f7d486dae976931ad --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/blockMeshDict @@ -0,0 +1,170 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + ( 0.0 0.0 0.0) + ( 0.5 0.0 0.0) + ( 1.5 0.0 0.0) + (10.0 0.0 0.0) + ( 0.0 0.5 0.0) + ( 0.5 0.5 0.0) + ( 1.5 0.5 0.0) + (10.0 0.5 0.0) + ( 0.0 1.5 0.0) + ( 0.5 1.5 0.0) + ( 1.5 1.5 0.0) + (10.0 1.5 0.0) + ( 0.0 6.0 0.0) + ( 0.5 6.0 0.0) + ( 1.5 6.0 0.0) + (10.0 6.0 0.0) + + ( 0.0 0.0 0.5) + ( 0.5 0.0 0.5) + ( 1.5 0.0 0.5) + (10.0 0.0 0.5) + ( 0.0 0.5 0.5) + ( 0.5 0.5 0.5) + ( 1.5 0.5 0.5) + (10.0 0.5 0.5) + ( 0.0 1.5 0.5) + ( 0.5 1.5 0.5) + ( 1.5 1.5 0.5) + (10.0 1.5 0.5) + ( 0.0 6.0 0.5) + ( 0.5 6.0 0.5) + ( 1.5 6.0 0.5) + (10.0 6.0 0.5) + + ( 0.0 0.0 2.0) + ( 0.5 0.0 2.0) + ( 1.5 0.0 2.0) + (10.0 0.0 2.0) + ( 0.0 0.5 2.0) + ( 0.5 0.5 2.0) + ( 1.5 0.5 2.0) + (10.0 0.5 2.0) + ( 0.0 1.5 2.0) + ( 0.5 1.5 2.0) + ( 1.5 1.5 2.0) + (10.0 1.5 2.0) + ( 0.0 6.0 2.0) + ( 0.5 6.0 2.0) + ( 1.5 6.0 2.0) + (10.0 6.0 2.0) +); + +blocks +( + hex ( 0 1 5 4 16 17 21 20) ( 5 5 5) simpleGrading (1 1 1) + hex ( 1 2 6 5 17 18 22 21) (10 5 5) simpleGrading (1 1 1) + hex ( 2 3 7 6 18 19 23 22) (80 5 5) simpleGrading (1 1 1) + hex ( 4 5 9 8 20 21 25 24) ( 5 10 5) simpleGrading (1 1 1) + hex ( 6 7 11 10 22 23 27 26) (80 10 5) simpleGrading (1 1 1) + hex ( 8 9 13 12 24 25 29 28) ( 5 40 5) simpleGrading (1 1 1) + hex ( 9 10 14 13 25 26 30 29) (10 40 5) simpleGrading (1 1 1) + hex (10 11 15 14 26 27 31 30) (80 40 5) simpleGrading (1 1 1) + + hex (16 17 21 20 32 33 37 36) ( 5 5 15) simpleGrading (1 1 1) + hex (17 18 22 21 33 34 38 37) (10 5 15) simpleGrading (1 1 1) + hex (18 19 23 22 34 35 39 38) (80 5 15) simpleGrading (1 1 1) + hex (20 21 25 24 36 37 41 40) ( 5 10 15) simpleGrading (1 1 1) + + hex (21 22 26 25 37 38 42 41) (10 10 15) simpleGrading (1 1 1) + + hex (22 23 27 26 38 39 43 42) (80 10 15) simpleGrading (1 1 1) + hex (24 25 29 28 40 41 45 44) ( 5 40 15) simpleGrading (1 1 1) + hex (25 26 30 29 41 42 46 45) (10 40 15) simpleGrading (1 1 1) + hex (26 27 31 30 42 43 47 46) (80 40 15) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + wall box + ( + ( 6 22 21 5) + (10 26 22 6) + ( 9 25 26 10) + ( 5 21 25 9) + (22 26 25 21) + ) + wall floor + ( + ( 1 5 4 0) + ( 2 6 5 1) + ( 3 7 6 2) + ( 5 9 8 4) + ( 7 11 10 6) + ( 9 13 12 8) + (10 14 13 9) + (11 15 14 10) + ) + wall ceiling + ( + (33 37 36 32) + (34 38 37 33) + (35 39 38 34) + (37 41 40 36) + (38 42 41 37) + (39 43 42 38) + (41 45 44 40) + (42 46 45 41) + (43 47 46 42) + ) + wall fixedWalls + ( + ( 1 17 16 0) + ( 2 18 17 1) + ( 3 19 18 2) + (17 33 32 16) + (18 34 33 17) + (19 35 34 18) + + ( 7 23 19 3) + (11 27 23 7) + (15 31 27 11) + (23 39 35 19) + (27 43 39 23) + (31 47 43 27) + + (14 30 31 15) + (13 29 30 14) + (12 28 29 13) + (30 46 47 31) + (29 45 46 30) + (28 44 45 29) + + ( 8 24 28 12) + ( 4 20 24 8) + ( 0 16 20 4) + (24 40 44 28) + (20 36 40 24) + (16 32 36 20) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..ab64c00e2818ae921e8d7797fd57ddc8e836a70c --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/polyMesh/boundary @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +4 +( + box + { + type wall; + nFaces 300; + startFace 303675; + } + floor + { + type wall; + nFaces 5125; + startFace 303975; + } + ceiling + { + type wall; + nFaces 5225; + startFace 309100; + } + fixedWalls + { + type wall; + nFaces 6000; + startFace 314325; + } +) + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/radiationProperties b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/radiationProperties new file mode 100644 index 0000000000000000000000000000000000000000..1521e119a1c03763e3ee05efd9afd3fc4579c46a --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/radiationProperties @@ -0,0 +1,59 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object radiationProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +radiation on; + +radiationModel fvDOM; + +noRadiation +{ +} + +P1Coeffs +{ +} + +fvDOMCoeffs +{ + nPhi 3; // azimuthal angles in PI/2 on X-Y.(from Y to X) + nTheta 5; // polar angles in PI (from Z to X-Y plane) + convergence 1e-3; // convergence criteria for radiation iteration + maxIter 10; // maximum number of iterations +} + +// Number of flow iterations per radiation iteration +solverFreq 10; + +absorptionEmissionModel constantAbsorptionEmission; + +constantAbsorptionEmissionCoeffs +{ + a a [ 0 -1 0 0 0 0 0 ] 0.01; + e e [ 0 -1 0 0 0 0 0 ] 0; + E E [ 1 -1 -3 0 0 0 0 ] 0; +} + +scatterModel constantScatter; + +constantScatterCoeffs +{ + sigma sigma [ 0 -1 0 0 0 0 0 ] 0; + C C [ 0 0 0 0 0 0 0 ] 0; +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/thermodynamicProperties b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties similarity index 79% rename from tutorials/compressible/sonicFoam/laminar/forwardStep/constant/thermodynamicProperties rename to tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties index c6bf31c073b282576473751b3d19f08f877cb84a..6d55fcba3d7dd3a1e149ef0dd6f1582e917b7e7d 100644 --- a/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/thermodynamicProperties +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/constant/thermophysicalProperties @@ -11,13 +11,15 @@ FoamFile format ascii; class dictionary; location "constant"; - object thermodynamicProperties; + object thermophysicalProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -Cv Cv [ 0 2 -2 -1 0 0 0 ] 1.78571; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; -R R [ 0 2 -2 -1 0 0 0 ] 0.714286; +mixture air 1 28.9 1000 0 1.8e-05 0.7; + +pRef 100000; // ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/controlDict similarity index 92% rename from tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict rename to tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/controlDict index ef80311ee11931792c1d637b6d45c5a9b75c24de..06eec5ead0b78d157eddd5c952c86b16a369c092 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/controlDict @@ -21,19 +21,19 @@ startTime 0; stopAt endTime; -endTime 100; +endTime 1000; deltaT 1; writeControl timeStep; -writeInterval 1; +writeInterval 100; purgeWrite 0; -writeFormat ascii; +writeFormat binary; -writePrecision 7; +writePrecision 6; writeCompression uncompressed; diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..ee909d216c664b3d7ac374a3cb0cb9b79754ac02 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSchemes @@ -0,0 +1,70 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,h) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div(Ji,Ii_h) Gauss linearUpwind Gauss linear; //Gauss upwind; + div((muEff*dev2(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(muEff,U) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; + laplacian(alphaEff,h) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; + laplacian(gammaRad,G) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSolution b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..685132185bffc4cc62e02c64eacc88582fbd3f4c --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleRadiationFoam/hotRadiationRoomFvDOM/system/fvSolution @@ -0,0 +1,92 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver GAMG; + tolerance 1e-06; + relTol 0.01; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + } + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + h + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + Ii + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; + pRefCell 0; + pRefValue 0; +} + +relaxationFactors +{ + rho 1.0; + p 0.3; + U 0.7; + h 0.7; + k 0.7; + epsilon 0.7; + "ILambda.*" 0.7; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/p b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/p index a98fc2825d0103495eea908d93fe1de81df15128..385ded3bb382650a44976dea9ec855adf5df7ebe 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/p +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/p @@ -16,40 +16,40 @@ FoamFile dimensions [1 -1 -2 0 0 0 0]; -internalField uniform 0; +internalField uniform 1e5; boundaryField { minX { - type calculated; - value uniform 0; + type buoyantPressure; + value 1e5; } maxX { - type calculated; - value uniform 0; + type buoyantPressure; + value 1e5; } minY { - type calculated; - value uniform 0; + type buoyantPressure; + value 1e5; } maxY { - type calculated; - value uniform 0; + type buoyantPressure; + value 1e5; } minZ { - type calculated; - value uniform 0; + type buoyantPressure; + value 1e5; } maxZ { - type calculated; - value uniform 0; + type buoyantPressure; + value 1e5; } } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun index f4374b6a93079b3971e9000714616bab0a1a0685..c3c4b5e504a38eb0b761783bd9d0dd0dd4c396eb 100755 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun @@ -15,13 +15,13 @@ runApplication splitMeshRegions -cellZones for i in bottomAir topAir heater leftSolid rightSolid do - changeDictionary -region $i + changeDictionary -region $i >& log.changeDictionary.$i done # remove fluid fields from solid regions (important for post-processing) for i in heater leftSolid rightSolid do - rm -f 0*/$i/{mut,alphat,epsilon,k,p,pd,U} + rm -f 0*/$i/{mut,alphat,epsilon,k,p,p,U} done # remove solid fields from fluid regions (important for post-processing) @@ -30,7 +30,26 @@ do rm -f 0*/$i/{cp,K} done -runApplication chtMultiRegionFoam + +#-- Run on single processor +#runApplication chtMultiRegionFoam + +# Decompose +for i in bottomAir topAir heater leftSolid rightSolid +do + decomposePar -region $i >& log.decomposePar.$i +done + +# Run +hostname > system/machines +runParallel chtMultiRegionFoam 4 system/machines + +# Reconstruct +for i in bottomAir topAir heater leftSolid rightSolid +do + reconstructPar -region $i >& log.reconstructPar.$i +done + echo echo "creating files for paraview post-processing" diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/thermophysicalProperties b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/thermophysicalProperties index 7eb3ee5b9f430e1429510ce0cf7063914b1f4f41..02fdc143ae4770b373a64bc74f3704da6d5ab69e 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/thermophysicalProperties +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/thermophysicalProperties @@ -14,7 +14,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1000 0 1.8e-05 0.7; diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/turbulenceProperties b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/turbulenceProperties index 07f85c68df22113b7c7747b89457597b0ea41d66..0efb448180f1ba26ac35d2dda07035e9ec6873f6 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/turbulenceProperties +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomAir/turbulenceProperties @@ -14,6 +14,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/polyMesh/boundary b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/polyMesh/boundary index 69a0952209dee387ae6cda9212a645086bba6b7a..73459cea0720d03956f9bd6cfb7f59f4d60a5d64 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/polyMesh/boundary +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/regionProperties b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/regionProperties index e72fde91a8b5918e35f833a9997d6ba34d496a92..4fc4b886687248dbf1cbc6b1d248c9e22b2d8ea2 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/regionProperties +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/regionProperties @@ -19,7 +19,4 @@ fluidRegionNames ( bottomAir topAir ); solidRegionNames ( heater leftSolid rightSolid ); -pRef 100000; - - // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/topAir/thermophysicalProperties b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/topAir/thermophysicalProperties deleted file mode 120000 index bd35030a13bd2a596bd156fcb37634090c0342a4..0000000000000000000000000000000000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/topAir/thermophysicalProperties +++ /dev/null @@ -1 +0,0 @@ -../bottomAir/thermophysicalProperties \ No newline at end of file diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/topAir/thermophysicalProperties b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/topAir/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..02fdc143ae4770b373a64bc74f3704da6d5ab69e --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/topAir/thermophysicalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; + +mixture air 1 28.9 1000 0 1.8e-05 0.7; + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/README b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/README index fd464e464c710813fac07db7d9ee31278ad58094..5a81b9a5708b0346c6cdd4bd2f6835feb3700bc1 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/README +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/README @@ -1,3 +1,3 @@ -fvSchemes and fvSolution are not used here -- added so that pre-processing activities can proceed +fvSolution is used for outer correctors specification. +fvSchemes is only so that pre-processing activities can proceed diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/changeDictionaryDict index 5f75f1a76ddf1691f69796712f10ba8a2ec10238..6c80174e3550fcc2163435f18ae6404a26615f1c 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/changeDictionaryDict @@ -16,6 +16,31 @@ FoamFile dictionaryReplacement { + boundary + { + bottomAir_to_leftSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion leftSolid; + samplePatch leftSolid_to_bottomAir; + } + bottomAir_to_rightSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion rightSolid; + samplePatch rightSolid_to_bottomAir; + } + bottomAir_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_bottomAir; + } + } + U { internalField uniform (0 0 0); @@ -62,8 +87,6 @@ dictionaryReplacement bottomAir_to_leftSolid { type solidWallMixedTemperatureCoupled; - neighbourRegionName leftSolid; - neighbourPatchName leftSolid_to_bottomAir; neighbourFieldName T; K K; value uniform 300; @@ -72,8 +95,6 @@ dictionaryReplacement bottomAir_to_heater { type solidWallMixedTemperatureCoupled; - neighbourRegionName heater; - neighbourPatchName heater_to_bottomAir; neighbourFieldName T; K K; value uniform 300; @@ -81,8 +102,6 @@ dictionaryReplacement bottomAir_to_rightSolid { type solidWallMixedTemperatureCoupled; - neighbourRegionName rightSolid; - neighbourPatchName rightSolid_to_bottomAir; neighbourFieldName T; K K; value uniform 300; @@ -205,101 +224,55 @@ dictionaryReplacement } } - pd - { - boundaryField - { - minX - { - type fixedFluxBuoyantPressure; - value 0; - } - maxX - { - type fixedFluxBuoyantPressure; - value 0; - } - minY - { - type fixedFluxBuoyantPressure; - value 0; - } - minZ - { - type fixedFluxBuoyantPressure; - value 0; - } - maxZ - { - type fixedFluxBuoyantPressure; - value 0; - } - bottomAir_to_leftSolid - { - type fixedFluxBuoyantPressure; - value 0; - } - bottomAir_to_heater - { - type fixedFluxBuoyantPressure; - value 0; - } - bottomAir_to_rightSolid - { - type fixedFluxBuoyantPressure; - value 0; - } - } - } - p { - internalField uniform 100000; + internalField uniform 1E5; + boundaryField { minX { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } maxX { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } minY { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } minZ { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } maxZ { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } - bottomAir_to_leftSolid { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } bottomAir_to_heater { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } bottomAir_to_rightSolid { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } } } + } // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSchemes index 9e792da55f1a212351fd1e5d2d26e2992642a502..5559e33626b9f62d129a9265641d3156edb4814d 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSchemes @@ -30,7 +30,7 @@ divSchemes { default none; div(phi,U) Gauss upwind; - div(phiU,p) Gauss upwind; + div(phiU,p) Gauss linear; div(phi,h) Gauss upwind; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; @@ -43,7 +43,7 @@ laplacianSchemes { default none; laplacian(muEff,U) Gauss linear limited 0.333; - laplacian((rho*(1|A(U))),pd) Gauss linear limited 0.333; + laplacian((rho*(1|A(U))),p) Gauss linear limited 0.333; laplacian(alphaEff,h) Gauss linear limited 0.333; laplacian(DkEff,k) Gauss linear limited 0.333; laplacian(DepsilonEff,epsilon) Gauss linear limited 0.333; @@ -63,7 +63,7 @@ snGradSchemes fluxRequired { default no; - pd; + p; } // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSolution b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSolution index 84839fe0ac905869edce0e444073487c84f3c61e..e0ecb9405c6ee97475280b790e95176ff3b61e41 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSolution +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomAir/fvSolution @@ -20,28 +20,14 @@ solvers { solver PCG preconditioner DIC; - tolerance 1e-6; + tolerance 1e-8; relTol 0; }; -// pd -// { -// solver PCG -// preconditioner DIC; -// tolerance 1e-6; -// relTol 0.1; -// }; -// pdFinal -// { -// solver PCG; -// preconditioner DIC; -// tolerance 1e-08; -// relTol 0; -// }; - pd + p { solver GAMG; - tolerance 1e-6; - relTol 0.1; + tolerance 1e-8; + relTol 0.01; smoother GaussSeidel; @@ -50,10 +36,10 @@ solvers agglomerator faceAreaPair; mergeLevels 1; }; - pdFinal + pFinal { solver GAMG; - tolerance 1e-6; + tolerance 1e-8; relTol 0; smoother GaussSeidel; @@ -70,32 +56,41 @@ solvers tolerance 1e-08; relTol 0; }; + h { solver PBiCG; preconditioner DILU; - tolerance 1e-06; + tolerance 1e-08; + relTol 0.1; + }; + hFinal + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; relTol 0; }; + k { solver PBiCG; preconditioner DILU; - tolerance 1e-06; + tolerance 1e-08; relTol 0; }; epsilon { solver PBiCG; preconditioner DILU; - tolerance 1e-06; + tolerance 1e-08; relTol 0; }; R { solver PBiCG; preconditioner DILU; - tolerance 1e-06; + tolerance 1e-08; relTol 0; }; } @@ -106,14 +101,23 @@ PISO nOuterCorrectors 1; nCorrectors 2; nNonOrthogonalCorrectors 1; - pdRefCell 0; - pdRefValue 0; + pRefPoint (-0.081 -0.0257 8.01); + pRefValue 1e5; +} + + +PIMPLE +{ + momentumPredictor on; + nCorrectors 2; + nNonOrthogonalCorrectors 0; } -//relaxationFactors -//{ -//// h 0.9; + +relaxationFactors +{ +// h 0.9; // U 0.9; -//} +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict index 2a5d32fc95549424c2cb293f12ff9656a8daf9c9..ba30afed2a2f13c7f5362edb583baa00576c8ab0 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict @@ -17,17 +17,17 @@ FoamFile startFrom latestTime; -startTime 0; +startTime 0.001; stopAt endTime; -endTime 180; +endTime 200; deltaT 0.001; writeControl adjustableRunTime; -writeInterval 5; +writeInterval 50; purgeWrite 0; diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/fvSolution b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/fvSolution index 78262ec2df008422f0817dc264bc8dab539bf568..50f28d672d7203b69ec909d90a6764a191c51631 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/fvSolution +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/fvSolution @@ -14,4 +14,9 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +PIMPLE +{ + nOuterCorrectors 1; +} + // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/changeDictionaryDict index 92038e31df8fd503518e3a30e581e9d16756227c..2bea6785224723f43db9cba91aaaf21d5ebf8998 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/changeDictionaryDict @@ -16,6 +16,38 @@ FoamFile dictionaryReplacement { + boundary + { + heater_to_bottomAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion bottomAir; + samplePatch bottomAir_to_heater; + } + heater_to_leftSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion leftSolid; + samplePatch leftSolid_to_heater; + } + heater_to_rightSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion rightSolid; + samplePatch rightSolid_to_heater; + } + heater_to_topAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion topAir; + samplePatch topAir_to_heater; + } + } + T { internalField uniform 300; @@ -40,8 +72,6 @@ dictionaryReplacement heater_to_bottomAir { type solidWallMixedTemperatureCoupled; - neighbourRegionName bottomAir; - neighbourPatchName bottomAir_to_heater; neighbourFieldName T; K K; value uniform 300; @@ -50,8 +80,6 @@ dictionaryReplacement heater_to_leftSolid { type solidWallMixedTemperatureCoupled; - neighbourRegionName leftSolid; - neighbourPatchName leftSolid_to_heater; neighbourFieldName T; K K; value uniform 300; @@ -59,8 +87,6 @@ dictionaryReplacement heater_to_rightSolid { type solidWallMixedTemperatureCoupled; - neighbourRegionName rightSolid; - neighbourPatchName rightSolid_to_heater; neighbourFieldName T; K K; value uniform 300; @@ -68,8 +94,6 @@ dictionaryReplacement heater_to_topAir { type solidWallMixedTemperatureCoupled; - neighbourRegionName topAir; - neighbourPatchName topAir_to_heater; neighbourFieldName T; K K; value uniform 300; diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/fvSolution b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/fvSolution index d1c768d4d4444eb6e1937e1840ddde4a19096376..342a7d4232540c1bcefb8362e4e638d7e9a3b9b0 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/fvSolution +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/heater/fvSolution @@ -30,4 +30,9 @@ PISO nNonOrthogonalCorrectors 1; } +PIMPLE +{ + nNonOrthogonalCorrectors 1; +} + // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/changeDictionaryDict index c30a9b5c4bb180f2b7541a0cbaefa68c62791b40..0fb3ee191c8a06de31849237b5bdd5499d40f8f0 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/changeDictionaryDict @@ -16,6 +16,31 @@ FoamFile dictionaryReplacement { + boundary + { + leftSolid_to_bottomAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion bottomAir; + samplePatch bottomAir_to_leftSolid; + } + leftSolid_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_leftSolid;; + } + leftSolid_to_topAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion topAir; + samplePatch topAir_to_leftSolid;; + } + } + T { internalField uniform 300; @@ -37,8 +62,6 @@ dictionaryReplacement leftSolid_to_bottomAir { type solidWallMixedTemperatureCoupled; - neighbourRegionName bottomAir; - neighbourPatchName bottomAir_to_leftSolid; neighbourFieldName T; K K; value uniform 300; @@ -47,8 +70,6 @@ dictionaryReplacement leftSolid_to_heater { type solidWallMixedTemperatureCoupled; - neighbourRegionName heater; - neighbourPatchName heater_to_leftSolid; neighbourFieldName T; K K; value uniform 300; @@ -56,8 +77,6 @@ dictionaryReplacement leftSolid_to_topAir { type solidWallMixedTemperatureCoupled; - neighbourRegionName topAir; - neighbourPatchName topAir_to_leftSolid; neighbourFieldName T; K K; value uniform 300; diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/leftSolid/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/changeDictionaryDict index 292f92f1d3b4efdd81831370545adc34357fd586..c3d6b08a0d147cef9d91a02a45036fadc4cfa59b 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/changeDictionaryDict @@ -16,6 +16,31 @@ FoamFile dictionaryReplacement { + boundary + { + rightSolid_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_rightSolid; + } + rightSolid_to_bottomAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion bottomAir; + samplePatch bottomAir_to_rightSolid; + } + rightSolid_to_topAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion topAir; + samplePatch topAir_to_rightSolid; + } + } + T { internalField uniform 300; @@ -37,8 +62,6 @@ dictionaryReplacement rightSolid_to_heater { type solidWallMixedTemperatureCoupled; - neighbourRegionName heater; - neighbourPatchName heater_to_rightSolid; neighbourFieldName T; K K; value uniform 300; @@ -46,8 +69,6 @@ dictionaryReplacement rightSolid_to_bottomAir { type solidWallMixedTemperatureCoupled; - neighbourRegionName bottomAir; - neighbourPatchName bottomAir_to_rightSolid; neighbourFieldName T; K K; value uniform 300; @@ -55,8 +76,6 @@ dictionaryReplacement rightSolid_to_topAir { type solidWallMixedTemperatureCoupled; - neighbourRegionName topAir; - neighbourPatchName topAir_to_rightSolid; neighbourFieldName T; K K; value uniform 300; diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/rightSolid/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict index e13083daa743d89571b74dfcac14d8605ea0b60b..a437f44d5d5cd79a7aa466342d7df83797b252db 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict @@ -16,6 +16,31 @@ FoamFile dictionaryReplacement { + boundary + { + topAir_to_leftSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion leftSolid; + samplePatch leftSolid_to_topAir; + } + topAir_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_topAir; + } + topAir_to_rightSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion rightSolid; + samplePatch rightSolid_to_topAir; + } + } + U { internalField uniform ( 0.01 0 0 ); @@ -63,8 +88,6 @@ dictionaryReplacement topAir_to_leftSolid { type solidWallMixedTemperatureCoupled; - neighbourRegionName leftSolid; - neighbourPatchName leftSolid_to_topAir; neighbourFieldName T; K K; value uniform 300; @@ -73,8 +96,6 @@ dictionaryReplacement topAir_to_heater { type solidWallMixedTemperatureCoupled; - neighbourRegionName heater; - neighbourPatchName heater_to_topAir; neighbourFieldName T; K K; value uniform 300; @@ -82,8 +103,6 @@ dictionaryReplacement topAir_to_rightSolid { type solidWallMixedTemperatureCoupled; - neighbourRegionName rightSolid; - neighbourPatchName rightSolid_to_topAir; neighbourFieldName T; K K; value uniform 300; @@ -204,109 +223,61 @@ dictionaryReplacement } } - pd + p { + internalField uniform 1E5; + boundaryField { minX { - type fixedFluxBuoyantPressure; - value 0; + type buoyantPressure; + value 1e5; } maxX { type waveTransmissive; - field pd; + //field p; phi phi; rho rho; psi psi; gamma 1.4; // cp/cv - fieldInf 0; + fieldInf 1e5; lInf 0.40; // double length of domain - value uniform 0; + value uniform 1e5; } minY { - type fixedFluxBuoyantPressure; - value 0; - } - - minZ - { - type fixedFluxBuoyantPressure; - value 0; - } - maxZ - { - type fixedFluxBuoyantPressure; - value 0; - } - - topAir_to_leftSolid - { - type fixedFluxBuoyantPressure; - value 0; + type buoyantPressure; + value 1e5; } - topAir_to_heater - { - type fixedFluxBuoyantPressure; - value 0; - } - topAir_to_rightSolid - { - type fixedFluxBuoyantPressure; - value 0; - } - } - } - - p - { - internalField uniform 100000; - boundaryField - { - minX - { - type calculated; - value uniform 100000; - } - maxX - { - type calculated; - value uniform 100000; - } - maxY - { - type calculated; - value uniform 100000; - } minZ { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } maxZ { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } topAir_to_leftSolid { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } topAir_to_heater { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } topAir_to_rightSolid { - type calculated; - value uniform 100000; + type buoyantPressure; + value 1e5; } } } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/MRFSimpleFoam.C b/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/MRFSimpleFoam.C index 241b6930fc533a640da3e2074eca1754de2bbcb6..9225fe4cb7c20e4456307054f6ade7afa7aec3d3 100644 --- a/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/MRFSimpleFoam.C +++ b/tutorials/incompressible/MRFSimpleFoam/MRFSimpleFoam/MRFSimpleFoam.C @@ -40,15 +40,14 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "createFields.H" + #include "initContinuityErrs.H" -# include "createTime.H" -# include "createMesh.H" -# include "createFields.H" -# include "initContinuityErrs.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -56,7 +55,7 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" + #include "readSIMPLEControls.H" p.storePrevIter(); @@ -101,7 +100,7 @@ int main(int argc, char *argv[]) } } -# include "continuityErrs.H" + #include "continuityErrs.H" // Explicitly relax pressure for momentum corrector p.relax(); diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/sets/rotor b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/sets/rotor deleted file mode 100644 index ac93c353c22b550408cbb8028a193ad8361cb72e..0000000000000000000000000000000000000000 --- a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/sets/rotor +++ /dev/null @@ -1,3045 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class faceSet; - object rotor; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -3024 -( -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 -813 -814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 -834 -835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 -847 -848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 -868 -869 -870 -871 -872 -873 -874 -875 -876 -877 -878 -879 -880 -881 -882 -883 -884 -885 -886 -887 -888 -889 -890 -891 -892 -893 -894 -895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 -917 -918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 -936 -937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 -954 -955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 -971 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -985 -986 -987 -988 -989 -990 -991 -992 -993 -994 -995 -996 -997 -998 -999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 -1016 -1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 -1025 -1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 -1041 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 -1068 -1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 -1077 -1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 -1086 -1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 -1108 -1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 -1139 -1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 -1158 -1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 -1172 -1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 -1181 -1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 -1223 -1224 -1225 -1226 -1227 -1228 -1229 -1230 -1231 -1232 -1233 -1234 -1235 -1236 -1237 -1238 -1239 -1240 -1241 -1242 -1243 -1244 -1245 -1246 -1247 -1248 -1249 -1250 -1251 -1252 -1253 -1254 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283 -1284 -1285 -1286 -1287 -1288 -1289 -1290 -1291 -1292 -1293 -1294 -1295 -1296 -1297 -1298 -1299 -1300 -1301 -1302 -1303 -1304 -1305 -1306 -1307 -1308 -1309 -1310 -1311 -1312 -1313 -1314 -1315 -1316 -1317 -1318 -1319 -1320 -1321 -1322 -1323 -1324 -1325 -1326 -1327 -1328 -1329 -1330 -1331 -1332 -1333 -1334 -1335 -1336 -1337 -1338 -1339 -1340 -1341 -1342 -1343 -1344 -1345 -1346 -1347 -1348 -1349 -1350 -1351 -1352 -1353 -1354 -1355 -1356 -1357 -1358 -1359 -1360 -1361 -1362 -1363 -1364 -1365 -1366 -1367 -1368 -1369 -1370 -1371 -1372 -1373 -1374 -1375 -1376 -1377 -1378 -1379 -1380 -1381 -1382 -1383 -1384 -1385 -1386 -1387 -1388 -1389 -1390 -1391 -1392 -1393 -1394 -1395 -1396 -1397 -1398 -1399 -1400 -1401 -1402 -1403 -1404 -1405 -1406 -1407 -1408 -1409 -1410 -1411 -1412 -1413 -1414 -1415 -1416 -1417 -1418 -1419 -1420 -1421 -1422 -1423 -1424 -1425 -1426 -1427 -1428 -1429 -1430 -1431 -1432 -1433 -1434 -1435 -1436 -1437 -1438 -1439 -1440 -1441 -1442 -1443 -1444 -1445 -1446 -1447 -1448 -1449 -1450 -1451 -1452 -1453 -1454 -1455 -1456 -1457 -1458 -1459 -1460 -1461 -1462 -1463 -1464 -1465 -1466 -1467 -1468 -1469 -1470 -1471 -1472 -1473 -1474 -1475 -1476 -1477 -1478 -1479 -1480 -1481 -1482 -1483 -1484 -1485 -1486 -1487 -1488 -1489 -1490 -1491 -1492 -1493 -1494 -1495 -1496 -1497 -1498 -1499 -1500 -1501 -1502 -1503 -1504 -1505 -1506 -1507 -1508 -1509 -1510 -1511 -1512 -1513 -1514 -1515 -1516 -1517 -1518 -1519 -1520 -1521 -1522 -1523 -1524 -1525 -1526 -1527 -1528 -1529 -1530 -1531 -1532 -1533 -1534 -1535 -1536 -1537 -1538 -1539 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 -1552 -1553 -1554 -1555 -1556 -1557 -1558 -1559 -1560 -1561 -1562 -1563 -1564 -1565 -1566 -1567 -1568 -1569 -1570 -1571 -1572 -1573 -1574 -1575 -1576 -1577 -1578 -1579 -1580 -1581 -1582 -1583 -1584 -1585 -1586 -1587 -1588 -1589 -1590 -1591 -1592 -1593 -1594 -1595 -1596 -1597 -1598 -1599 -1600 -1601 -1602 -1603 -1604 -1605 -1606 -1607 -1608 -1609 -1610 -1611 -1612 -1613 -1614 -1615 -1616 -1617 -1618 -1619 -1620 -1621 -1622 -1623 -1624 -1625 -1626 -1627 -1628 -1629 -1630 -1631 -1632 -1633 -1634 -1635 -1636 -1637 -1638 -1639 -1640 -1641 -1642 -1643 -1644 -1645 -1646 -1647 -1648 -1649 -1650 -1651 -1652 -1653 -1654 -1655 -1656 -1657 -1658 -1659 -1660 -1661 -1662 -1663 -1664 -1665 -1666 -1667 -1668 -1669 -1670 -1671 -1672 -1673 -1674 -1675 -1676 -1677 -1678 -1679 -1680 -1681 -1682 -1683 -1684 -1685 -1686 -1687 -1688 -1689 -1690 -1691 -1692 -1693 -1694 -1695 -1696 -1697 -1698 -1699 -1700 -1701 -1702 -1703 -1704 -1705 -1706 -1707 -1708 -1709 -1710 -1711 -1712 -1713 -1714 -1715 -1716 -1717 -1718 -1719 -1720 -1721 -1722 -1723 -1724 -1725 -1726 -1727 -1728 -1729 -1730 -1731 -1732 -1733 -1734 -1735 -1736 -1737 -1738 -1739 -1740 -1741 -1742 -1743 -1744 -1745 -1746 -1747 -1748 -1749 -1750 -1751 -1752 -1753 -1754 -1755 -1756 -1757 -1758 -1759 -1760 -1761 -1762 -1763 -1764 -1765 -1766 -1767 -1768 -1769 -1770 -1771 -1772 -1773 -1774 -1775 -1776 -1777 -1778 -1779 -1780 -1781 -1782 -1783 -1784 -1785 -1786 -1787 -1788 -1789 -1790 -1791 -1792 -1793 -1794 -1795 -1796 -1797 -1798 -1799 -1800 -1801 -1802 -1803 -1804 -1805 -1806 -1807 -1808 -1809 -1810 -1811 -1812 -1813 -1814 -1815 -1816 -1817 -1818 -1819 -1820 -1821 -1822 -1823 -1824 -1825 -1826 -1827 -1828 -1829 -1830 -1831 -1832 -1833 -1834 -1835 -1836 -1837 -1838 -1839 -1840 -1841 -1842 -1843 -1844 -1845 -1846 -1847 -1848 -1849 -1850 -1851 -1852 -1853 -1854 -1855 -1856 -1857 -1858 -1859 -1860 -1861 -1862 -1863 -1864 -1865 -1866 -1867 -1868 -1869 -1870 -1871 -1872 -1873 -1874 -1875 -1876 -1877 -1878 -1879 -1880 -1881 -1882 -1883 -1884 -1885 -1886 -1887 -1888 -1889 -1890 -1891 -1892 -1893 -1894 -1895 -1896 -1897 -1898 -1899 -1900 -1901 -1902 -1903 -1904 -1905 -1906 -1907 -1908 -1909 -1910 -1911 -1912 -1913 -1914 -1915 -1916 -1917 -1918 -1919 -1920 -1921 -1922 -1923 -1924 -1925 -1926 -1927 -1928 -1929 -1930 -1931 -1932 -1933 -1934 -1935 -1936 -1937 -1938 -1939 -1940 -1941 -1942 -1943 -1944 -1945 -1946 -1947 -1948 -1949 -1950 -1951 -1952 -1953 -1954 -1955 -1956 -1957 -1958 -1959 -1960 -1961 -1962 -1963 -1964 -1965 -1966 -1967 -1968 -1969 -1970 -1971 -1972 -1973 -1974 -1975 -1976 -1977 -1978 -1979 -1980 -1981 -1982 -1983 -1984 -1985 -1986 -1987 -1988 -1989 -1990 -1991 -1992 -1993 -1994 -1995 -1996 -1997 -1998 -1999 -2000 -2001 -2002 -2003 -2004 -2005 -2006 -2007 -2008 -2009 -2010 -2011 -2012 -2013 -2014 -2015 -2016 -2017 -2018 -2019 -2020 -2021 -2022 -2023 -2024 -2025 -2026 -2027 -2028 -2029 -2030 -2031 -2032 -2033 -2034 -2035 -2036 -2037 -2038 -2039 -2040 -2041 -2042 -2043 -2044 -2045 -2046 -2047 -2048 -2049 -2050 -2051 -2052 -2053 -2054 -2055 -2056 -2057 -2058 -2059 -2060 -2061 -2062 -2063 -2064 -2065 -2066 -2067 -2068 -2069 -2070 -2071 -2072 -2073 -2074 -2075 -2076 -2077 -2078 -2079 -2080 -2081 -2082 -2083 -2084 -2085 -2086 -2087 -2088 -2089 -2090 -2091 -2092 -2093 -2094 -2095 -2096 -2097 -2098 -2099 -2100 -2101 -2102 -2103 -2104 -2105 -2106 -2107 -2108 -2109 -2110 -2111 -2112 -2113 -2114 -2115 -2116 -2117 -2118 -2119 -2120 -2121 -2122 -2123 -2124 -2125 -2126 -2127 -2128 -2129 -2130 -2131 -2132 -2133 -2134 -2135 -2136 -2137 -2138 -2139 -2140 -2141 -2142 -2143 -2144 -2145 -2146 -2147 -2148 -2149 -2150 -2151 -2152 -2153 -2154 -2155 -2156 -2157 -2158 -2159 -2160 -2161 -2162 -2163 -2164 -2165 -2166 -2167 -2168 -2169 -2170 -2171 -2172 -2173 -2174 -2175 -2176 -2177 -2178 -2179 -2180 -2181 -2182 -2183 -2184 -2185 -2186 -2187 -2188 -2189 -2190 -2191 -2192 -2193 -2194 -2195 -2196 -2197 -2198 -2199 -2200 -2201 -2202 -2203 -2204 -2205 -2206 -2207 -2208 -2209 -2210 -2211 -2212 -2213 -2214 -2215 -2216 -2217 -2218 -2219 -2220 -2221 -2222 -2223 -2224 -2225 -2226 -2227 -2228 -2229 -2230 -2231 -2232 -2233 -2234 -2235 -2236 -2237 -2238 -2239 -2240 -2241 -2242 -2243 -2244 -2245 -2246 -2247 -2248 -2249 -2250 -2251 -2252 -2253 -2254 -2255 -2256 -2257 -2258 -2259 -2260 -2261 -2262 -2263 -2264 -2265 -2266 -2267 -2268 -2269 -2270 -2271 -2272 -2273 -2274 -2275 -2276 -2277 -2278 -2279 -2280 -2281 -2282 -2283 -2284 -2285 -2286 -2287 -2288 -2289 -2290 -2291 -2292 -2293 -2294 -2295 -2296 -2297 -2298 -2299 -2300 -2301 -2302 -2303 -2304 -2305 -2306 -2307 -2308 -2309 -2310 -2311 -2312 -2313 -2314 -2315 -2316 -2317 -2318 -2319 -2320 -2321 -2322 -2323 -2324 -2325 -2326 -2327 -2328 -2329 -2330 -2331 -2332 -2333 -2334 -2335 -2336 -2337 -2338 -2339 -2340 -2341 -2342 -2343 -2344 -2345 -2346 -2347 -2348 -2349 -2350 -2351 -2352 -2353 -2354 -2355 -2356 -2357 -2358 -2359 -2360 -2361 -2362 -2363 -2364 -2365 -2366 -2367 -2368 -2369 -2370 -2371 -2372 -2373 -2374 -2375 -2376 -2377 -2378 -2379 -2380 -2381 -2382 -2383 -2384 -2385 -2386 -2387 -2388 -2389 -2390 -2391 -2392 -2393 -2394 -2395 -2396 -2397 -2398 -2399 -2400 -2401 -2402 -2403 -2404 -2405 -2406 -2407 -2408 -2409 -2410 -2411 -2412 -2413 -2414 -2415 -2416 -2417 -2418 -2419 -2420 -2421 -2422 -2423 -2424 -2425 -2426 -2427 -2428 -2429 -2430 -2431 -2432 -2433 -2434 -2435 -2436 -2437 -2438 -2439 -2440 -2441 -2442 -2443 -2444 -2445 -2446 -2447 -2448 -2449 -2450 -2451 -2452 -2453 -2454 -2455 -2456 -2457 -2458 -2459 -2460 -2461 -2462 -2463 -2464 -2465 -2466 -2467 -2468 -2469 -2470 -2471 -2472 -2473 -2474 -2475 -2476 -2477 -2478 -2479 -2480 -2481 -2482 -2483 -2484 -2485 -2486 -2487 -2488 -2489 -2490 -2491 -2492 -2493 -2494 -2495 -2496 -2497 -2498 -2499 -2500 -2501 -2502 -2503 -2504 -2505 -2506 -2507 -2508 -2509 -2510 -2511 -2512 -2513 -2514 -2515 -2516 -2517 -2518 -2519 -2520 -2521 -2522 -2523 -2524 -2525 -2526 -2527 -2528 -2529 -2530 -2531 -2532 -2533 -2534 -2535 -2536 -2537 -2538 -2539 -2540 -2541 -2542 -2543 -2544 -2545 -2546 -2547 -2548 -2549 -2550 -2551 -2552 -2553 -2554 -2555 -2556 -2557 -2558 -2559 -2560 -2561 -2562 -2563 -2564 -2565 -2566 -2567 -2568 -2569 -2570 -2571 -2572 -2573 -2574 -2575 -2576 -2577 -2578 -2579 -2580 -2581 -2582 -2583 -2584 -2585 -2586 -2587 -2588 -2589 -2590 -2591 -2592 -2593 -2594 -2595 -2596 -2597 -2598 -2599 -2600 -2601 -2602 -2603 -2604 -2605 -2606 -2607 -2608 -2609 -2610 -2611 -2612 -2613 -2614 -2615 -2616 -2617 -2618 -2619 -2620 -2621 -2622 -2623 -2624 -2625 -2626 -2627 -2628 -2629 -2630 -2631 -2632 -2633 -2634 -2635 -2636 -2637 -2638 -2639 -2640 -2641 -2642 -2643 -2644 -2645 -2646 -2647 -2648 -2649 -2650 -2651 -2652 -2653 -2654 -2655 -2656 -2657 -2658 -2659 -2660 -2661 -2662 -2663 -2664 -2665 -2666 -2667 -2668 -2669 -2670 -2671 -2672 -2673 -2674 -2675 -2676 -2677 -2678 -2679 -2680 -2681 -2682 -2683 -2684 -2685 -2686 -2687 -2688 -2689 -2690 -2691 -2692 -2693 -2694 -2695 -2696 -2697 -2698 -2699 -2700 -2701 -2702 -2703 -2704 -2705 -2706 -2707 -2708 -2709 -2710 -2711 -2712 -2713 -2714 -2715 -2716 -2717 -2718 -2719 -2720 -2721 -2722 -2723 -2724 -2725 -2726 -2727 -2728 -2729 -2730 -2731 -2732 -2733 -2734 -2735 -2736 -2737 -2738 -2739 -2740 -2741 -2742 -2743 -2744 -2745 -2746 -2747 -2748 -2749 -2750 -2751 -2752 -2753 -2754 -2755 -2756 -2757 -2758 -2759 -2760 -2761 -2762 -2763 -2764 -2765 -2766 -2767 -2768 -2769 -2770 -2771 -2772 -2773 -2774 -2775 -2776 -2777 -2778 -2779 -2780 -2781 -2782 -2783 -2784 -2785 -2786 -2787 -2788 -2789 -2790 -2791 -2792 -2793 -2794 -2795 -2796 -2797 -2798 -2799 -2800 -2801 -2802 -2803 -2804 -2805 -2806 -2807 -2808 -2809 -2810 -2811 -2812 -2813 -2814 -2815 -2816 -2817 -2818 -2819 -2820 -2821 -2822 -2823 -2824 -2825 -2826 -2827 -2828 -2829 -2830 -2831 -2832 -2833 -2834 -2835 -2836 -2837 -2838 -2839 -2840 -2841 -2842 -2843 -2844 -2845 -2846 -2847 -2848 -2849 -2850 -2851 -2852 -2853 -2854 -2855 -2856 -2857 -2858 -2859 -2860 -2861 -2862 -2863 -2864 -2865 -2866 -2867 -2868 -2869 -2870 -2871 -2872 -2873 -2874 -2875 -2876 -2877 -2878 -2879 -2880 -2881 -2882 -2883 -2884 -2885 -2886 -2887 -2888 -2889 -2890 -2891 -2892 -2893 -2894 -2895 -2896 -2897 -2898 -2899 -2900 -2901 -2902 -2903 -2904 -2905 -2906 -2907 -2908 -2909 -2910 -2911 -2912 -2913 -2914 -2915 -2916 -2917 -2918 -2919 -2920 -2921 -2922 -2923 -2924 -2925 -2926 -2927 -2928 -2929 -2930 -2931 -2932 -2933 -2934 -2935 -2936 -2937 -2938 -2939 -2940 -2941 -2942 -2943 -2944 -2945 -2946 -2947 -2948 -2949 -2950 -2951 -2952 -2953 -2954 -2955 -2956 -2957 -2958 -2959 -2960 -2961 -2962 -2963 -2964 -2965 -2966 -2967 -2968 -2969 -2970 -2971 -2972 -2973 -2974 -2975 -2976 -2977 -2978 -2979 -2980 -2981 -2982 -2983 -2984 -2985 -2986 -2987 -2988 -2989 -2990 -2991 -2992 -2993 -2994 -2995 -2996 -2997 -2998 -2999 -3000 -3001 -3002 -3003 -3004 -3005 -3006 -3007 -3008 -3009 -3010 -3011 -3012 -3013 -3014 -3015 -3016 -3017 -3018 -3019 -3020 -3021 -3022 -3023 -) - -// ************************************************************************* // diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/sets/rotor_old b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/sets/rotor_old deleted file mode 100644 index 7d419e3061323b353f48d263893f5eeadb037f62..0000000000000000000000000000000000000000 --- a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/constant/polyMesh/sets/rotor_old +++ /dev/null @@ -1,6309 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class topoSet; - object rotor_old; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -6288 -( -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 -813 -814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 -834 -835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 -847 -848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 -868 -869 -870 -871 -872 -873 -874 -875 -876 -877 -878 -879 -880 -881 -882 -883 -884 -885 -886 -887 -888 -889 -890 -891 -892 -893 -894 -895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 -917 -918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 -936 -937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 -954 -955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 -971 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -985 -986 -987 -988 -989 -990 -991 -992 -993 -994 -995 -996 -997 -998 -999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 -1016 -1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 -1025 -1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 -1041 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 -1068 -1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 -1077 -1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 -1086 -1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 -1108 -1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 -1139 -1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 -1158 -1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 -1172 -1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 -1181 -1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 -1223 -1224 -1225 -1226 -1227 -1228 -1229 -1230 -1231 -1232 -1233 -1234 -1235 -1236 -1237 -1238 -1239 -1240 -1241 -1242 -1243 -1244 -1245 -1246 -1247 -1248 -1249 -1250 -1251 -1252 -1253 -1254 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283 -1284 -1285 -1286 -1287 -1288 -1289 -1290 -1291 -1292 -1293 -1294 -1295 -1296 -1297 -1298 -1299 -1300 -1301 -1302 -1303 -1304 -1305 -1306 -1307 -1308 -1309 -1310 -1311 -1312 -1313 -1314 -1315 -1316 -1317 -1318 -1319 -1320 -1321 -1322 -1323 -1324 -1325 -1326 -1327 -1328 -1329 -1330 -1331 -1332 -1333 -1334 -1335 -1336 -1337 -1338 -1339 -1340 -1341 -1342 -1343 -1344 -1345 -1346 -1347 -1348 -1349 -1350 -1351 -1352 -1353 -1354 -1355 -1356 -1357 -1358 -1359 -1360 -1361 -1362 -1363 -1364 -1365 -1366 -1367 -1368 -1369 -1370 -1371 -1372 -1373 -1374 -1375 -1376 -1377 -1378 -1379 -1380 -1381 -1382 -1383 -1384 -1385 -1386 -1387 -1388 -1389 -1390 -1391 -1392 -1393 -1394 -1395 -1396 -1397 -1398 -1399 -1400 -1401 -1402 -1403 -1404 -1405 -1406 -1407 -1408 -1409 -1410 -1411 -1412 -1413 -1414 -1415 -1416 -1417 -1418 -1419 -1420 -1421 -1422 -1423 -1424 -1425 -1426 -1427 -1428 -1429 -1430 -1431 -1432 -1433 -1434 -1435 -1436 -1437 -1438 -1439 -1440 -1441 -1442 -1443 -1444 -1445 -1446 -1447 -1448 -1449 -1450 -1451 -1452 -1453 -1454 -1455 -1456 -1457 -1458 -1459 -1460 -1461 -1462 -1463 -1464 -1465 -1466 -1467 -1468 -1469 -1470 -1471 -1472 -1473 -1474 -1475 -1476 -1477 -1478 -1479 -1480 -1481 -1482 -1483 -1484 -1485 -1486 -1487 -1488 -1489 -1490 -1491 -1492 -1493 -1494 -1495 -1496 -1497 -1498 -1499 -1500 -1501 -1502 -1503 -1504 -1505 -1506 -1507 -1508 -1509 -1510 -1511 -1512 -1513 -1514 -1515 -1516 -1517 -1518 -1519 -1520 -1521 -1522 -1523 -1524 -1525 -1526 -1527 -1528 -1529 -1530 -1531 -1532 -1533 -1534 -1535 -1536 -1537 -1538 -1539 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 -1552 -1553 -1554 -1555 -1556 -1557 -1558 -1559 -1560 -1561 -1562 -1563 -1564 -1565 -1566 -1567 -1568 -1569 -1570 -1571 -1572 -1573 -1574 -1575 -1576 -1577 -1578 -1579 -1580 -1581 -1582 -1583 -1584 -1585 -1586 -1587 -1588 -1589 -1590 -1591 -1592 -1593 -1594 -1595 -1596 -1597 -1598 -1599 -1600 -1601 -1602 -1603 -1604 -1605 -1606 -1607 -1608 -1609 -1610 -1611 -1612 -1613 -1614 -1615 -1616 -1617 -1618 -1619 -1620 -1621 -1622 -1623 -1624 -1625 -1626 -1627 -1628 -1629 -1630 -1631 -1632 -1633 -1634 -1635 -1636 -1637 -1638 -1639 -1640 -1641 -1642 -1643 -1644 -1645 -1646 -1647 -1648 -1649 -1650 -1651 -1652 -1653 -1654 -1655 -1656 -1657 -1658 -1659 -1660 -1661 -1662 -1663 -1664 -1665 -1666 -1667 -1668 -1669 -1670 -1671 -1672 -1673 -1674 -1675 -1676 -1677 -1678 -1679 -1680 -1681 -1682 -1683 -1684 -1685 -1686 -1687 -1688 -1689 -1690 -1691 -1692 -1693 -1694 -1695 -1696 -1697 -1698 -1699 -1700 -1701 -1702 -1703 -1704 -1705 -1706 -1707 -1708 -1709 -1710 -1711 -1712 -1713 -1714 -1715 -1716 -1717 -1718 -1719 -1720 -1721 -1722 -1723 -1724 -1725 -1726 -1727 -1728 -1729 -1730 -1731 -1732 -1733 -1734 -1735 -1736 -1737 -1738 -1739 -1740 -1741 -1742 -1743 -1744 -1745 -1746 -1747 -1748 -1749 -1750 -1751 -1752 -1753 -1754 -1755 -1756 -1757 -1758 -1759 -1760 -1761 -1762 -1763 -1764 -1765 -1766 -1767 -1768 -1769 -1770 -1771 -1772 -1773 -1774 -1775 -1776 -1777 -1778 -1779 -1780 -1781 -1782 -1783 -1784 -1785 -1786 -1787 -1788 -1789 -1790 -1791 -1792 -1793 -1794 -1795 -1796 -1797 -1798 -1799 -1800 -1801 -1802 -1803 -1804 -1805 -1806 -1807 -1808 -1809 -1810 -1811 -1812 -1813 -1814 -1815 -1816 -1817 -1818 -1819 -1820 -1821 -1822 -1823 -1824 -1825 -1826 -1827 -1828 -1829 -1830 -1831 -1832 -1833 -1834 -1835 -1836 -1837 -1838 -1839 -1840 -1841 -1842 -1843 -1844 -1845 -1846 -1847 -1848 -1849 -1850 -1851 -1852 -1853 -1854 -1855 -1856 -1857 -1858 -1859 -1860 -1861 -1862 -1863 -1864 -1865 -1866 -1867 -1868 -1869 -1870 -1871 -1872 -1873 -1874 -1875 -1876 -1877 -1878 -1879 -1880 -1881 -1882 -1883 -1884 -1885 -1886 -1887 -1888 -1889 -1890 -1891 -1892 -1893 -1894 -1895 -1896 -1897 -1898 -1899 -1900 -1901 -1902 -1903 -1904 -1905 -1906 -1907 -1908 -1909 -1910 -1911 -1912 -1913 -1914 -1915 -1916 -1917 -1918 -1919 -1920 -1921 -1922 -1923 -1924 -1925 -1926 -1927 -1928 -1929 -1930 -1931 -1932 -1933 -1934 -1935 -1936 -1937 -1938 -1939 -1940 -1941 -1942 -1943 -1944 -1945 -1946 -1947 -1948 -1949 -1950 -1951 -1952 -1953 -1954 -1955 -1956 -1957 -1958 -1959 -1960 -1961 -1962 -1963 -1964 -1965 -1966 -1967 -1968 -1969 -1970 -1971 -1972 -1973 -1974 -1975 -1976 -1977 -1978 -1979 -1980 -1981 -1982 -1983 -1984 -1985 -1986 -1987 -1988 -1989 -1990 -1991 -1992 -1993 -1994 -1995 -1996 -1997 -1998 -1999 -2000 -2001 -2002 -2003 -2004 -2005 -2006 -2007 -2008 -2009 -2010 -2011 -2012 -2013 -2014 -2015 -2016 -2017 -2018 -2019 -2020 -2021 -2022 -2023 -2024 -2025 -2026 -2027 -2028 -2029 -2030 -2031 -2032 -2033 -2034 -2035 -2036 -2037 -2038 -2039 -2040 -2041 -2042 -2043 -2044 -2045 -2046 -2047 -2048 -2049 -2050 -2051 -2052 -2053 -2054 -2055 -2056 -2057 -2058 -2059 -2060 -2061 -2062 -2063 -2064 -2065 -2066 -2067 -2068 -2069 -2070 -2071 -2072 -2073 -2074 -2075 -2076 -2077 -2078 -2079 -2080 -2081 -2082 -2083 -2084 -2085 -2086 -2087 -2088 -2089 -2090 -2091 -2092 -2093 -2094 -2095 -2096 -2097 -2098 -2099 -2100 -2101 -2102 -2103 -2104 -2105 -2106 -2107 -2108 -2109 -2110 -2111 -2112 -2113 -2114 -2115 -2116 -2117 -2118 -2119 -2120 -2121 -2122 -2123 -2124 -2125 -2126 -2127 -2128 -2129 -2130 -2131 -2132 -2133 -2134 -2135 -2136 -2137 -2138 -2139 -2140 -2141 -2142 -2143 -2144 -2145 -2146 -2147 -2148 -2149 -2150 -2151 -2152 -2153 -2154 -2155 -2156 -2157 -2158 -2159 -2160 -2161 -2162 -2163 -2164 -2165 -2166 -2167 -2168 -2169 -2170 -2171 -2172 -2173 -2174 -2175 -2176 -2177 -2178 -2179 -2180 -2181 -2182 -2183 -2184 -2185 -2186 -2187 -2188 -2189 -2190 -2191 -2192 -2193 -2194 -2195 -2196 -2197 -2198 -2199 -2200 -2201 -2202 -2203 -2204 -2205 -2206 -2207 -2208 -2209 -2210 -2211 -2212 -2213 -2214 -2215 -2216 -2217 -2218 -2219 -2220 -2221 -2222 -2223 -2224 -2225 -2226 -2227 -2228 -2229 -2230 -2231 -2232 -2233 -2234 -2235 -2236 -2237 -2238 -2239 -2240 -2241 -2242 -2243 -2244 -2245 -2246 -2247 -2248 -2249 -2250 -2251 -2252 -2253 -2254 -2255 -2256 -2257 -2258 -2259 -2260 -2261 -2262 -2263 -2264 -2265 -2266 -2267 -2268 -2269 -2270 -2271 -2272 -2273 -2274 -2275 -2276 -2277 -2278 -2279 -2280 -2281 -2282 -2283 -2284 -2285 -2286 -2287 -2288 -2289 -2290 -2291 -2292 -2293 -2294 -2295 -2296 -2297 -2298 -2299 -2300 -2301 -2302 -2303 -2304 -2305 -2306 -2307 -2308 -2309 -2310 -2311 -2312 -2313 -2314 -2315 -2316 -2317 -2318 -2319 -2320 -2321 -2322 -2323 -2324 -2325 -2326 -2327 -2328 -2329 -2330 -2331 -2332 -2333 -2334 -2335 -2336 -2337 -2338 -2339 -2340 -2341 -2342 -2343 -2344 -2345 -2346 -2347 -2348 -2349 -2350 -2351 -2352 -2353 -2354 -2355 -2356 -2357 -2358 -2359 -2360 -2361 -2362 -2363 -2364 -2365 -2366 -2367 -2368 -2369 -2370 -2371 -2372 -2373 -2374 -2375 -2376 -2377 -2378 -2379 -2380 -2381 -2382 -2383 -2384 -2385 -2386 -2387 -2388 -2389 -2390 -2391 -2392 -2393 -2394 -2395 -2396 -2397 -2398 -2399 -2400 -2401 -2402 -2403 -2404 -2405 -2406 -2407 -2408 -2409 -2410 -2411 -2412 -2413 -2414 -2415 -2416 -2417 -2418 -2419 -2420 -2421 -2422 -2423 -2424 -2425 -2426 -2427 -2428 -2429 -2430 -2431 -2432 -2433 -2434 -2435 -2436 -2437 -2438 -2439 -2440 -2441 -2442 -2443 -2444 -2445 -2446 -2447 -2448 -2449 -2450 -2451 -2452 -2453 -2454 -2455 -2456 -2457 -2458 -2459 -2460 -2461 -2462 -2463 -2464 -2465 -2466 -2467 -2468 -2469 -2470 -2471 -2472 -2473 -2474 -2475 -2476 -2477 -2478 -2479 -2480 -2481 -2482 -2483 -2484 -2485 -2486 -2487 -2488 -2489 -2490 -2491 -2492 -2493 -2494 -2495 -2496 -2497 -2498 -2499 -2500 -2501 -2502 -2503 -2504 -2505 -2506 -2507 -2508 -2509 -2510 -2511 -2512 -2513 -2514 -2515 -2516 -2517 -2518 -2519 -2520 -2521 -2522 -2523 -2524 -2525 -2526 -2527 -2528 -2529 -2530 -2531 -2532 -2533 -2534 -2535 -2536 -2537 -2538 -2539 -2540 -2541 -2542 -2543 -2544 -2545 -2546 -2547 -2548 -2549 -2550 -2551 -2552 -2553 -2554 -2555 -2556 -2557 -2558 -2559 -2560 -2561 -2562 -2563 -2564 -2565 -2566 -2567 -2568 -2569 -2570 -2571 -2572 -2573 -2574 -2575 -2576 -2577 -2578 -2579 -2580 -2581 -2582 -2583 -2584 -2585 -2586 -2587 -2588 -2589 -2590 -2591 -2592 -2593 -2594 -2595 -2596 -2597 -2598 -2599 -2600 -2601 -2602 -2603 -2604 -2605 -2606 -2607 -2608 -2609 -2610 -2611 -2612 -2613 -2614 -2615 -2616 -2617 -2618 -2619 -2620 -2621 -2622 -2623 -2624 -2625 -2626 -2627 -2628 -2629 -2630 -2631 -2632 -2633 -2634 -2635 -2636 -2637 -2638 -2639 -2640 -2641 -2642 -2643 -2644 -2645 -2646 -2647 -2648 -2649 -2650 -2651 -2652 -2653 -2654 -2655 -2656 -2657 -2658 -2659 -2660 -2661 -2662 -2663 -2664 -2665 -2666 -2667 -2668 -2669 -2670 -2671 -2672 -2673 -2674 -2675 -2676 -2677 -2678 -2679 -2680 -2681 -2682 -2683 -2684 -2685 -2686 -2687 -2688 -2689 -2690 -2691 -2692 -2693 -2694 -2695 -2696 -2697 -2698 -2699 -2700 -2701 -2702 -2703 -2704 -2705 -2706 -2707 -2708 -2709 -2710 -2711 -2712 -2713 -2714 -2715 -2716 -2717 -2718 -2719 -2720 -2721 -2722 -2723 -2724 -2725 -2726 -2727 -2728 -2729 -2730 -2731 -2732 -2733 -2734 -2735 -2736 -2737 -2738 -2739 -2740 -2741 -2742 -2743 -2744 -2745 -2746 -2747 -2748 -2749 -2750 -2751 -2752 -2753 -2754 -2755 -2756 -2757 -2758 -2759 -2760 -2761 -2762 -2763 -2764 -2765 -2766 -2767 -2768 -2769 -2770 -2771 -2772 -2773 -2774 -2775 -2776 -2777 -2778 -2779 -2780 -2781 -2782 -2783 -2784 -2785 -2786 -2787 -2788 -2789 -2790 -2791 -2792 -2793 -2794 -2795 -2796 -2797 -2798 -2799 -2800 -2801 -2802 -2803 -2804 -2805 -2806 -2807 -2808 -2809 -2810 -2811 -2812 -2813 -2814 -2815 -2816 -2817 -2818 -2819 -2820 -2821 -2822 -2823 -2824 -2825 -2826 -2827 -2828 -2829 -2830 -2831 -2832 -2833 -2834 -2835 -2836 -2837 -2838 -2839 -2840 -2841 -2842 -2843 -2844 -2845 -2846 -2847 -2848 -2849 -2850 -2851 -2852 -2853 -2854 -2855 -2856 -2857 -2858 -2859 -2860 -2861 -2862 -2863 -2864 -2865 -2866 -2867 -2868 -2869 -2870 -2871 -2872 -2873 -2874 -2875 -2876 -2877 -2878 -2879 -2880 -2881 -2882 -2883 -2884 -2885 -2886 -2887 -2888 -2889 -2890 -2891 -2892 -2893 -2894 -2895 -2896 -2897 -2898 -2899 -2900 -2901 -2902 -2903 -2904 -2905 -2906 -2907 -2908 -2909 -2910 -2911 -2912 -2913 -2914 -2915 -2916 -2917 -2918 -2919 -2920 -2921 -2922 -2923 -2924 -2925 -2926 -2927 -2928 -2929 -2930 -2931 -2932 -2933 -2934 -2935 -2936 -2937 -2938 -2939 -2940 -2941 -2942 -2943 -2944 -2945 -2946 -2947 -2948 -2949 -2950 -2951 -2952 -2953 -2954 -2955 -2956 -2957 -2958 -2959 -2960 -2961 -2962 -2963 -2964 -2965 -2966 -2967 -2968 -2969 -2970 -2971 -2972 -2973 -2974 -2975 -2976 -2977 -2978 -2979 -2980 -2981 -2982 -2983 -2984 -2985 -2986 -2987 -2988 -2989 -2990 -2991 -2992 -2993 -2994 -2995 -2996 -2997 -2998 -2999 -3000 -3001 -3002 -3003 -3004 -3005 -3006 -3007 -3008 -3009 -3010 -3011 -3012 -3013 -3014 -3015 -3016 -3017 -3018 -3019 -3020 -3021 -3022 -3023 -5952 -5953 -5954 -5955 -5956 -5957 -5958 -5959 -5960 -5961 -5962 -5963 -5964 -5965 -5966 -5967 -5968 -5969 -5970 -5971 -5972 -5973 -5974 -5975 -5976 -5977 -5978 -5979 -5980 -5981 -5982 -5983 -5984 -5985 -5986 -5987 -5988 -5989 -5990 -5991 -5992 -5993 -5994 -5995 -5996 -5997 -5998 -5999 -6000 -6001 -6002 -6003 -6004 -6005 -6006 -6007 -6008 -6009 -6010 -6011 -6012 -6013 -6014 -6015 -6016 -6017 -6018 -6019 -6020 -6021 -6022 -6023 -6024 -6025 -6026 -6027 -6028 -6029 -6030 -6031 -6032 -6033 -6034 -6035 -6036 -6037 -6038 -6039 -6040 -6041 -6042 -6043 -6044 -6045 -6046 -6047 -6048 -6049 -6050 -6051 -6052 -6053 -6054 -6055 -6056 -6057 -6058 -6059 -6060 -6061 -6062 -6063 -6064 -6065 -6066 -6067 -6068 -6069 -6070 -6071 -6072 -6073 -6074 -6075 -6076 -6077 -6078 -6079 -6080 -6081 -6082 -6083 -6084 -6085 -6086 -6087 -6088 -6089 -6090 -6091 -6092 -6093 -6094 -6095 -6096 -6097 -6098 -6099 -6100 -6101 -6102 -6103 -6104 -6105 -6106 -6107 -6108 -6109 -6110 -6111 -6112 -6113 -6114 -6115 -6116 -6117 -6118 -6119 -6120 -6121 -6122 -6123 -6124 -6125 -6126 -6127 -6128 -6129 -6130 -6131 -6132 -6133 -6134 -6135 -6136 -6137 -6138 -6139 -6140 -6141 -6142 -6143 -6336 -6337 -6338 -6339 -6340 -6341 -6342 -6343 -6344 -6345 -6346 -6347 -6348 -6349 -6350 -6351 -6352 -6353 -6354 -6355 -6356 -6357 -6358 -6359 -6360 -6361 -6362 -6363 -6364 -6365 -6366 -6367 -6368 -6369 -6370 -6371 -6372 -6373 -6374 -6375 -6376 -6377 -6378 -6379 -6380 -6381 -6382 -6383 -6384 -6385 -6386 -6387 -6388 -6389 -6390 -6391 -6392 -6393 -6394 -6395 -6396 -6397 -6398 -6399 -6400 -6401 -6402 -6403 -6404 -6405 -6406 -6407 -6408 -6409 -6410 -6411 -6412 -6413 -6414 -6415 -6416 -6417 -6418 -6419 -6420 -6421 -6422 -6423 -6424 -6425 -6426 -6427 -6428 -6429 -6430 -6431 -6432 -6433 -6434 -6435 -6436 -6437 -6438 -6439 -6440 -6441 -6442 -6443 -6444 -6445 -6446 -6447 -6448 -6449 -6450 -6451 -6452 -6453 -6454 -6455 -6456 -6457 -6458 -6459 -6460 -6461 -6462 -6463 -6464 -6465 -6466 -6467 -6468 -6469 -6470 -6471 -6472 -6473 -6474 -6475 -6476 -6477 -6478 -6479 -6480 -6481 -6482 -6483 -6484 -6485 -6486 -6487 -6488 -6489 -6490 -6491 -6492 -6493 -6494 -6495 -6496 -6497 -6498 -6499 -6500 -6501 -6502 -6503 -6504 -6505 -6506 -6507 -6508 -6509 -6510 -6511 -6512 -6513 -6514 -6515 -6516 -6517 -6518 -6519 -6520 -6521 -6522 -6523 -6524 -6525 -6526 -6527 -6528 -6529 -6530 -6531 -6532 -6533 -6534 -6535 -6536 -6537 -6538 -6539 -6540 -6541 -6542 -6543 -6544 -6545 -6546 -6547 -6548 -6549 -6550 -6551 -6552 -6553 -6554 -6555 -6556 -6557 -6558 -6559 -6560 -6561 -6562 -6563 -6564 -6565 -6566 -6567 -6568 -6569 -6570 -6571 -6572 -6573 -6574 -6575 -6576 -6577 -6578 -6579 -6580 -6581 -6582 -6583 -6584 -6585 -6586 -6587 -6588 -6589 -6590 -6591 -6592 -6593 -6594 -6595 -6596 -6597 -6598 -6599 -6600 -6601 -6602 -6603 -6604 -6605 -6606 -6607 -6608 -6609 -6610 -6611 -6612 -6613 -6614 -6615 -6616 -6617 -6618 -6619 -6620 -6621 -6622 -6623 -6624 -6625 -6626 -6627 -6628 -6629 -6630 -6631 -6632 -6633 -6634 -6635 -6636 -6637 -6638 -6639 -6640 -6641 -6642 -6643 -6644 -6645 -6646 -6647 -6648 -6649 -6650 -6651 -6652 -6653 -6654 -6655 -6656 -6657 -6658 -6659 -6660 -6661 -6662 -6663 -6664 -6665 -6666 -6667 -6668 -6669 -6670 -6671 -6672 -6673 -6674 -6675 -6676 -6677 -6678 -6679 -6680 -6681 -6682 -6683 -6684 -6685 -6686 -6687 -6688 -6689 -6690 -6691 -6692 -6693 -6694 -6695 -6696 -6697 -6698 -6699 -6700 -6701 -6702 -6703 -6704 -6705 -6706 -6707 -6708 -6709 -6710 -6711 -6712 -6713 -6714 -6715 -6716 -6717 -6718 -6719 -6720 -6721 -6722 -6723 -6724 -6725 -6726 -6727 -6728 -6729 -6730 -6731 -6732 -6733 -6734 -6735 -6736 -6737 -6738 -6739 -6740 -6741 -6742 -6743 -6744 -6745 -6746 -6747 -6748 -6749 -6750 -6751 -6752 -6753 -6754 -6755 -6756 -6757 -6758 -6759 -6760 -6761 -6762 -6763 -6764 -6765 -6766 -6767 -6768 -6769 -6770 -6771 -6772 -6773 -6774 -6775 -6776 -6777 -6778 -6779 -6780 -6781 -6782 -6783 -6784 -6785 -6786 -6787 -6788 -6789 -6790 -6791 -6792 -6793 -6794 -6795 -6796 -6797 -6798 -6799 -6800 -6801 -6802 -6803 -6804 -6805 -6806 -6807 -6808 -6809 -6810 -6811 -6812 -6813 -6814 -6815 -6816 -6817 -6818 -6819 -6820 -6821 -6822 -6823 -6824 -6825 -6826 -6827 -6828 -6829 -6830 -6831 -6832 -6833 -6834 -6835 -6836 -6837 -6838 -6839 -6840 -6841 -6842 -6843 -6844 -6845 -6846 -6847 -6848 -6849 -6850 -6851 -6852 -6853 -6854 -6855 -6856 -6857 -6858 -6859 -6860 -6861 -6862 -6863 -6864 -6865 -6866 -6867 -6868 -6869 -6870 -6871 -6872 -6873 -6874 -6875 -6876 -6877 -6878 -6879 -6880 -6881 -6882 -6883 -6884 -6885 -6886 -6887 -6888 -6889 -6890 -6891 -6892 -6893 -6894 -6895 -6896 -6897 -6898 -6899 -6900 -6901 -6902 -6903 -6904 -6905 -6906 -6907 -6908 -6909 -6910 -6911 -6912 -6913 -6914 -6915 -6916 -6917 -6918 -6919 -6920 -6921 -6922 -6923 -6924 -6925 -6926 -6927 -6928 -6929 -6930 -6931 -6932 -6933 -6934 -6935 -6936 -6937 -6938 -6939 -6940 -6941 -6942 -6943 -6944 -6945 -6946 -6947 -6948 -6949 -6950 -6951 -6952 -6953 -6954 -6955 -6956 -6957 -6958 -6959 -6960 -6961 -6962 -6963 -6964 -6965 -6966 -6967 -6968 -6969 -6970 -6971 -6972 -6973 -6974 -6975 -6976 -6977 -6978 -6979 -6980 -6981 -6982 -6983 -6984 -6985 -6986 -6987 -6988 -6989 -6990 -6991 -6992 -6993 -6994 -6995 -6996 -6997 -6998 -6999 -7000 -7001 -7002 -7003 -7004 -7005 -7006 -7007 -7008 -7009 -7010 -7011 -7012 -7013 -7014 -7015 -7016 -7017 -7018 -7019 -7020 -7021 -7022 -7023 -7024 -7025 -7026 -7027 -7028 -7029 -7030 -7031 -7032 -7033 -7034 -7035 -7036 -7037 -7038 -7039 -7040 -7041 -7042 -7043 -7044 -7045 -7046 -7047 -7048 -7049 -7050 -7051 -7052 -7053 -7054 -7055 -7056 -7057 -7058 -7059 -7060 -7061 -7062 -7063 -7064 -7065 -7066 -7067 -7068 -7069 -7070 -7071 -7072 -7073 -7074 -7075 -7076 -7077 -7078 -7079 -7080 -7081 -7082 -7083 -7084 -7085 -7086 -7087 -7088 -7089 -7090 -7091 -7092 -7093 -7094 -7095 -7096 -7097 -7098 -7099 -7100 -7101 -7102 -7103 -7104 -7105 -7106 -7107 -7108 -7109 -7110 -7111 -7112 -7113 -7114 -7115 -7116 -7117 -7118 -7119 -7120 -7121 -7122 -7123 -7124 -7125 -7126 -7127 -7128 -7129 -7130 -7131 -7132 -7133 -7134 -7135 -7136 -7137 -7138 -7139 -7140 -7141 -7142 -7143 -7144 -7145 -7146 -7147 -7148 -7149 -7150 -7151 -7152 -7153 -7154 -7155 -7156 -7157 -7158 -7159 -7160 -7161 -7162 -7163 -7164 -7165 -7166 -7167 -7168 -7169 -7170 -7171 -7172 -7173 -7174 -7175 -7176 -7177 -7178 -7179 -7180 -7181 -7182 -7183 -7184 -7185 -7186 -7187 -7188 -7189 -7190 -7191 -7192 -7193 -7194 -7195 -7196 -7197 -7198 -7199 -7200 -7201 -7202 -7203 -7204 -7205 -7206 -7207 -7208 -7209 -7210 -7211 -7212 -7213 -7214 -7215 -7216 -7217 -7218 -7219 -7220 -7221 -7222 -7223 -7224 -7225 -7226 -7227 -7228 -7229 -7230 -7231 -7232 -7233 -7234 -7235 -7236 -7237 -7238 -7239 -7240 -7241 -7242 -7243 -7244 -7245 -7246 -7247 -7248 -7249 -7250 -7251 -7252 -7253 -7254 -7255 -7256 -7257 -7258 -7259 -7260 -7261 -7262 -7263 -7264 -7265 -7266 -7267 -7268 -7269 -7270 -7271 -7272 -7273 -7274 -7275 -7276 -7277 -7278 -7279 -7280 -7281 -7282 -7283 -7284 -7285 -7286 -7287 -7288 -7289 -7290 -7291 -7292 -7293 -7294 -7295 -7296 -7297 -7298 -7299 -7300 -7301 -7302 -7303 -7304 -7305 -7306 -7307 -7308 -7309 -7310 -7311 -7312 -7313 -7314 -7315 -7316 -7317 -7318 -7319 -7320 -7321 -7322 -7323 -7324 -7325 -7326 -7327 -7328 -7329 -7330 -7331 -7332 -7333 -7334 -7335 -7336 -7337 -7338 -7339 -7340 -7341 -7342 -7343 -7344 -7345 -7346 -7347 -7348 -7349 -7350 -7351 -7352 -7353 -7354 -7355 -7356 -7357 -7358 -7359 -7360 -7361 -7362 -7363 -7364 -7365 -7366 -7367 -7368 -7369 -7370 -7371 -7372 -7373 -7374 -7375 -7376 -7377 -7378 -7379 -7380 -7381 -7382 -7383 -7384 -7385 -7386 -7387 -7388 -7389 -7390 -7391 -7392 -7393 -7394 -7395 -7396 -7397 -7398 -7399 -7400 -7401 -7402 -7403 -7404 -7405 -7406 -7407 -7408 -7409 -7410 -7411 -7412 -7413 -7414 -7415 -7416 -7417 -7418 -7419 -7420 -7421 -7422 -7423 -7424 -7425 -7426 -7427 -7428 -7429 -7430 -7431 -7432 -7433 -7434 -7435 -7436 -7437 -7438 -7439 -7440 -7441 -7442 -7443 -7444 -7445 -7446 -7447 -7448 -7449 -7450 -7451 -7452 -7453 -7454 -7455 -7456 -7457 -7458 -7459 -7460 -7461 -7462 -7463 -7464 -7465 -7466 -7467 -7468 -7469 -7470 -7471 -7472 -7473 -7474 -7475 -7476 -7477 -7478 -7479 -7480 -7481 -7482 -7483 -7484 -7485 -7486 -7487 -7488 -7489 -7490 -7491 -7492 -7493 -7494 -7495 -7496 -7497 -7498 -7499 -7500 -7501 -7502 -7503 -7504 -7505 -7506 -7507 -7508 -7509 -7510 -7511 -7512 -7513 -7514 -7515 -7516 -7517 -7518 -7519 -7520 -7521 -7522 -7523 -7524 -7525 -7526 -7527 -7528 -7529 -7530 -7531 -7532 -7533 -7534 -7535 -7536 -7537 -7538 -7539 -7540 -7541 -7542 -7543 -7544 -7545 -7546 -7547 -7548 -7549 -7550 -7551 -7552 -7553 -7554 -7555 -7556 -7557 -7558 -7559 -7560 -7561 -7562 -7563 -7564 -7565 -7566 -7567 -7568 -7569 -7570 -7571 -7572 -7573 -7574 -7575 -7576 -7577 -7578 -7579 -7580 -7581 -7582 -7583 -7584 -7585 -7586 -7587 -7588 -7589 -7590 -7591 -7592 -7593 -7594 -7595 -7596 -7597 -7598 -7599 -7600 -7601 -7602 -7603 -7604 -7605 -7606 -7607 -7608 -7609 -7610 -7611 -7612 -7613 -7614 -7615 -7616 -7617 -7618 -7619 -7620 -7621 -7622 -7623 -7624 -7625 -7626 -7627 -7628 -7629 -7630 -7631 -7632 -7633 -7634 -7635 -7636 -7637 -7638 -7639 -7640 -7641 -7642 -7643 -7644 -7645 -7646 -7647 -7648 -7649 -7650 -7651 -7652 -7653 -7654 -7655 -7656 -7657 -7658 -7659 -7660 -7661 -7662 -7663 -7664 -7665 -7666 -7667 -7668 -7669 -7670 -7671 -7672 -7673 -7674 -7675 -7676 -7677 -7678 -7679 -7680 -7681 -7682 -7683 -7684 -7685 -7686 -7687 -7688 -7689 -7690 -7691 -7692 -7693 -7694 -7695 -7696 -7697 -7698 -7699 -7700 -7701 -7702 -7703 -7704 -7705 -7706 -7707 -7708 -7709 -7710 -7711 -7712 -7713 -7714 -7715 -7716 -7717 -7718 -7719 -7720 -7721 -7722 -7723 -7724 -7725 -7726 -7727 -7728 -7729 -7730 -7731 -7732 -7733 -7734 -7735 -7736 -7737 -7738 -7739 -7740 -7741 -7742 -7743 -7744 -7745 -7746 -7747 -7748 -7749 -7750 -7751 -7752 -7753 -7754 -7755 -7756 -7757 -7758 -7759 -7760 -7761 -7762 -7763 -7764 -7765 -7766 -7767 -7768 -7769 -7770 -7771 -7772 -7773 -7774 -7775 -7776 -7777 -7778 -7779 -7780 -7781 -7782 -7783 -7784 -7785 -7786 -7787 -7788 -7789 -7790 -7791 -7792 -7793 -7794 -7795 -7796 -7797 -7798 -7799 -7800 -7801 -7802 -7803 -7804 -7805 -7806 -7807 -7808 -7809 -7810 -7811 -7812 -7813 -7814 -7815 -7816 -7817 -7818 -7819 -7820 -7821 -7822 -7823 -7824 -7825 -7826 -7827 -7828 -7829 -7830 -7831 -7832 -7833 -7834 -7835 -7836 -7837 -7838 -7839 -7840 -7841 -7842 -7843 -7844 -7845 -7846 -7847 -7848 -7849 -7850 -7851 -7852 -7853 -7854 -7855 -7856 -7857 -7858 -7859 -7860 -7861 -7862 -7863 -7864 -7865 -7866 -7867 -7868 -7869 -7870 -7871 -9408 -9409 -9410 -9411 -9412 -9413 -9414 -9415 -9416 -9417 -9418 -9419 -9420 -9421 -9422 -9423 -9424 -9425 -9426 -9427 -9428 -9429 -9430 -9431 -9432 -9433 -9434 -9435 -9436 -9437 -9438 -9439 -9440 -9441 -9442 -9443 -9444 -9445 -9446 -9447 -9448 -9449 -9450 -9451 -9452 -9453 -9454 -9455 -9456 -9457 -9458 -9459 -9460 -9461 -9462 -9463 -9464 -9465 -9466 -9467 -9468 -9469 -9470 -9471 -9472 -9473 -9474 -9475 -9476 -9477 -9478 -9479 -9480 -9481 -9482 -9483 -9484 -9485 -9486 -9487 -9488 -9489 -9490 -9491 -9492 -9493 -9494 -9495 -9496 -9497 -9498 -9499 -9500 -9501 -9502 -9503 -9504 -9505 -9506 -9507 -9508 -9509 -9510 -9511 -9512 -9513 -9514 -9515 -9516 -9517 -9518 -9519 -9520 -9521 -9522 -9523 -9524 -9525 -9526 -9527 -9528 -9529 -9530 -9531 -9532 -9533 -9534 -9535 -9536 -9537 -9538 -9539 -9540 -9541 -9542 -9543 -9544 -9545 -9546 -9547 -9548 -9549 -9550 -9551 -9552 -9553 -9554 -9555 -9556 -9557 -9558 -9559 -9560 -9561 -9562 -9563 -9564 -9565 -9566 -9567 -9568 -9569 -9570 -9571 -9572 -9573 -9574 -9575 -9576 -9577 -9578 -9579 -9580 -9581 -9582 -9583 -9584 -9585 -9586 -9587 -9588 -9589 -9590 -9591 -9592 -9593 -9594 -9595 -9596 -9597 -9598 -9599 -9600 -9601 -9602 -9603 -9604 -9605 -9606 -9607 -9608 -9609 -9610 -9611 -9612 -9613 -9614 -9615 -9616 -9617 -9618 -9619 -9620 -9621 -9622 -9623 -9624 -9625 -9626 -9627 -9628 -9629 -9630 -9631 -9632 -9633 -9634 -9635 -9636 -9637 -9638 -9639 -9640 -9641 -9642 -9643 -9644 -9645 -9646 -9647 -9648 -9649 -9650 -9651 -9652 -9653 -9654 -9655 -9656 -9657 -9658 -9659 -9660 -9661 -9662 -9663 -9664 -9665 -9666 -9667 -9668 -9669 -9670 -9671 -9672 -9673 -9674 -9675 -9676 -9677 -9678 -9679 -9680 -9681 -9682 -9683 -9684 -9685 -9686 -9687 -9688 -9689 -9690 -9691 -9692 -9693 -9694 -9695 -9696 -9697 -9698 -9699 -9700 -9701 -9702 -9703 -9704 -9705 -9706 -9707 -9708 -9709 -9710 -9711 -9712 -9713 -9714 -9715 -9716 -9717 -9718 -9719 -9720 -9721 -9722 -9723 -9724 -9725 -9726 -9727 -9728 -9729 -9730 -9731 -9732 -9733 -9734 -9735 -9736 -9737 -9738 -9739 -9740 -9741 -9742 -9743 -9744 -9745 -9746 -9747 -9748 -9749 -9750 -9751 -9752 -9753 -9754 -9755 -9756 -9757 -9758 -9759 -9760 -9761 -9762 -9763 -9764 -9765 -9766 -9767 -9768 -9769 -9770 -9771 -9772 -9773 -9774 -9775 -9776 -9777 -9778 -9779 -9780 -9781 -9782 -9783 -9784 -9785 -9786 -9787 -9788 -9789 -9790 -9791 -9792 -9793 -9794 -9795 -9796 -9797 -9798 -9799 -9800 -9801 -9802 -9803 -9804 -9805 -9806 -9807 -9808 -9809 -9810 -9811 -9812 -9813 -9814 -9815 -9816 -9817 -9818 -9819 -9820 -9821 -9822 -9823 -9824 -9825 -9826 -9827 -9828 -9829 -9830 -9831 -9832 -9833 -9834 -9835 -9836 -9837 -9838 -9839 -9840 -9841 -9842 -9843 -9844 -9845 -9846 -9847 -9848 -9849 -9850 -9851 -9852 -9853 -9854 -9855 -9856 -9857 -9858 -9859 -9860 -9861 -9862 -9863 -9864 -9865 -9866 -9867 -9868 -9869 -9870 -9871 -9872 -9873 -9874 -9875 -9876 -9877 -9878 -9879 -9880 -9881 -9882 -9883 -9884 -9885 -9886 -9887 -9888 -9889 -9890 -9891 -9892 -9893 -9894 -9895 -9896 -9897 -9898 -9899 -9900 -9901 -9902 -9903 -9904 -9905 -9906 -9907 -9908 -9909 -9910 -9911 -9912 -9913 -9914 -9915 -9916 -9917 -9918 -9919 -9920 -9921 -9922 -9923 -9924 -9925 -9926 -9927 -9928 -9929 -9930 -9931 -9932 -9933 -9934 -9935 -9936 -9937 -9938 -9939 -9940 -9941 -9942 -9943 -9944 -9945 -9946 -9947 -9948 -9949 -9950 -9951 -9952 -9953 -9954 -9955 -9956 -9957 -9958 -9959 -9960 -9961 -9962 -9963 -9964 -9965 -9966 -9967 -9968 -9969 -9970 -9971 -9972 -9973 -9974 -9975 -9976 -9977 -9978 -9979 -9980 -9981 -9982 -9983 -9984 -9985 -9986 -9987 -9988 -9989 -9990 -9991 -9992 -9993 -9994 -9995 -9996 -9997 -9998 -9999 -10000 -10001 -10002 -10003 -10004 -10005 -10006 -10007 -10008 -10009 -10010 -10011 -10012 -10013 -10014 -10015 -10016 -10017 -10018 -10019 -10020 -10021 -10022 -10023 -10024 -10025 -10026 -10027 -10028 -10029 -10030 -10031 -10032 -10033 -10034 -10035 -10036 -10037 -10038 -10039 -10040 -10041 -10042 -10043 -10044 -10045 -10046 -10047 -10048 -10049 -10050 -10051 -10052 -10053 -10054 -10055 -10056 -10057 -10058 -10059 -10060 -10061 -10062 -10063 -10064 -10065 -10066 -10067 -10068 -10069 -10070 -10071 -10072 -10073 -10074 -10075 -10076 -10077 -10078 -10079 -10080 -10081 -10082 -10083 -10084 -10085 -10086 -10087 -10088 -10089 -10090 -10091 -10092 -10093 -10094 -10095 -10096 -10097 -10098 -10099 -10100 -10101 -10102 -10103 -10104 -10105 -10106 -10107 -10108 -10109 -10110 -10111 -10112 -10113 -10114 -10115 -10116 -10117 -10118 -10119 -10120 -10121 -10122 -10123 -10124 -10125 -10126 -10127 -10128 -10129 -10130 -10131 -10132 -10133 -10134 -10135 -10136 -10137 -10138 -10139 -10140 -10141 -10142 -10143 -10144 -10145 -10146 -10147 -10148 -10149 -10150 -10151 -10152 -10153 -10154 -10155 -10156 -10157 -10158 -10159 -10160 -10161 -10162 -10163 -10164 -10165 -10166 -10167 -10168 -10169 -10170 -10171 -10172 -10173 -10174 -10175 -10176 -10177 -10178 -10179 -10180 -10181 -10182 -10183 -10184 -10185 -10186 -10187 -10188 -10189 -10190 -10191 -10192 -10193 -10194 -10195 -10196 -10197 -10198 -10199 -10200 -10201 -10202 -10203 -10204 -10205 -10206 -10207 -10208 -10209 -10210 -10211 -10212 -10213 -10214 -10215 -10216 -10217 -10218 -10219 -10220 -10221 -10222 -10223 -10224 -10225 -10226 -10227 -10228 -10229 -10230 -10231 -10232 -10233 -10234 -10235 -10236 -10237 -10238 -10239 -10240 -10241 -10242 -10243 -10244 -10245 -10246 -10247 -10248 -10249 -10250 -10251 -10252 -10253 -10254 -10255 -10256 -10257 -10258 -10259 -10260 -10261 -10262 -10263 -10264 -10265 -10266 -10267 -10268 -10269 -10270 -10271 -10272 -10273 -10274 -10275 -10276 -10277 -10278 -10279 -10280 -10281 -10282 -10283 -10284 -10285 -10286 -10287 -10288 -10289 -10290 -10291 -10292 -10293 -10294 -10295 -10296 -10297 -10298 -10299 -10300 -10301 -10302 -10303 -10304 -10305 -10306 -10307 -10308 -10309 -10310 -10311 -10312 -10313 -10314 -10315 -10316 -10317 -10318 -10319 -10320 -10321 -10322 -10323 -10324 -10325 -10326 -10327 -10328 -10329 -10330 -10331 -10332 -10333 -10334 -10335 -10336 -10337 -10338 -10339 -10340 -10341 -10342 -10343 -10344 -10345 -10346 -10347 -10348 -10349 -10350 -10351 -10352 -10353 -10354 -10355 -10356 -10357 -10358 -10359 -10360 -10361 -10362 -10363 -10364 -10365 -10366 -10367 -10368 -10369 -10370 -10371 -10372 -10373 -10374 -10375 -10376 -10377 -10378 -10379 -10380 -10381 -10382 -10383 -10384 -10385 -10386 -10387 -10388 -10389 -10390 -10391 -10392 -10393 -10394 -10395 -10396 -10397 -10398 -10399 -10400 -10401 -10402 -10403 -10404 -10405 -10406 -10407 -10408 -10409 -10410 -10411 -10412 -10413 -10414 -10415 -10416 -10417 -10418 -10419 -10420 -10421 -10422 -10423 -10424 -10425 -10426 -10427 -10428 -10429 -10430 -10431 -10432 -10433 -10434 -10435 -10436 -10437 -10438 -10439 -10440 -10441 -10442 -10443 -10444 -10445 -10446 -10447 -10448 -10449 -10450 -10451 -10452 -10453 -10454 -10455 -10456 -10457 -10458 -10459 -10460 -10461 -10462 -10463 -10464 -10465 -10466 -10467 -10468 -10469 -10470 -10471 -10472 -10473 -10474 -10475 -10476 -10477 -10478 -10479 -10480 -10481 -10482 -10483 -10484 -10485 -10486 -10487 -10488 -10489 -10490 -10491 -10492 -10493 -10494 -10495 -10496 -10497 -10498 -10499 -10500 -10501 -10502 -10503 -10504 -10505 -10506 -10507 -10508 -10509 -10510 -10511 -10512 -10513 -10514 -10515 -10516 -10517 -10518 -10519 -10520 -10521 -10522 -10523 -10524 -10525 -10526 -10527 -10528 -10529 -10530 -10531 -10532 -10533 -10534 -10535 -10536 -10537 -10538 -10539 -10540 -10541 -10542 -10543 -10544 -10545 -10546 -10547 -10548 -10549 -10550 -10551 -10552 -10553 -10554 -10555 -10556 -10557 -10558 -10559 -10560 -10561 -10562 -10563 -10564 -10565 -10566 -10567 -10568 -10569 -10570 -10571 -10572 -10573 -10574 -10575 -10576 -10577 -10578 -10579 -10580 -10581 -10582 -10583 -10584 -10585 -10586 -10587 -10588 -10589 -10590 -10591 -10592 -10593 -10594 -10595 -10596 -10597 -10598 -10599 -10600 -10601 -10602 -10603 -10604 -10605 -10606 -10607 -10608 -10609 -10610 -10611 -10612 -10613 -10614 -10615 -10616 -10617 -10618 -10619 -10620 -10621 -10622 -10623 -10624 -10625 -10626 -10627 -10628 -10629 -10630 -10631 -10632 -10633 -10634 -10635 -10636 -10637 -10638 -10639 -10640 -10641 -10642 -10643 -10644 -10645 -10646 -10647 -10648 -10649 -10650 -10651 -10652 -10653 -10654 -10655 -10656 -10657 -10658 -10659 -10660 -10661 -10662 -10663 -10664 -10665 -10666 -10667 -10668 -10669 -10670 -10671 -10672 -10673 -10674 -10675 -10676 -10677 -10678 -10679 -10680 -10681 -10682 -10683 -10684 -10685 -10686 -10687 -10688 -10689 -10690 -10691 -10692 -10693 -10694 -10695 -10696 -10697 -10698 -10699 -10700 -10701 -10702 -10703 -10704 -10705 -10706 -10707 -10708 -10709 -10710 -10711 -10712 -10713 -10714 -10715 -10716 -10717 -10718 -10719 -10720 -10721 -10722 -10723 -10724 -10725 -10726 -10727 -10728 -10729 -10730 -10731 -10732 -10733 -10734 -10735 -10736 -10737 -10738 -10739 -10740 -10741 -10742 -10743 -10744 -10745 -10746 -10747 -10748 -10749 -10750 -10751 -10752 -10753 -10754 -10755 -10756 -10757 -10758 -10759 -10760 -10761 -10762 -10763 -10764 -10765 -10766 -10767 -10768 -10769 -10770 -10771 -10772 -10773 -10774 -10775 -10776 -10777 -10778 -10779 -10780 -10781 -10782 -10783 -10784 -10785 -10786 -10787 -10788 -10789 -10790 -10791 -10792 -10793 -10794 -10795 -10796 -10797 -10798 -10799 -10800 -10801 -10802 -10803 -10804 -10805 -10806 -10807 -10808 -10809 -10810 -10811 -10812 -10813 -10814 -10815 -10816 -10817 -10818 -10819 -10820 -10821 -10822 -10823 -10824 -10825 -10826 -10827 -10828 -10829 -10830 -10831 -10832 -10833 -10834 -10835 -10836 -10837 -10838 -10839 -10840 -10841 -10842 -10843 -10844 -10845 -10846 -10847 -10848 -10849 -10850 -10851 -10852 -10853 -10854 -10855 -10856 -10857 -10858 -10859 -10860 -10861 -10862 -10863 -10864 -10865 -10866 -10867 -10868 -10869 -10870 -10871 -10872 -10873 -10874 -10875 -10876 -10877 -10878 -10879 -10880 -10881 -10882 -10883 -10884 -10885 -10886 -10887 -10888 -10889 -10890 -10891 -10892 -10893 -10894 -10895 -10896 -10897 -10898 -10899 -10900 -10901 -10902 -10903 -10904 -10905 -10906 -10907 -10908 -10909 -10910 -10911 -10912 -10913 -10914 -10915 -10916 -10917 -10918 -10919 -10920 -10921 -10922 -10923 -10924 -10925 -10926 -10927 -10928 -10929 -10930 -10931 -10932 -10933 -10934 -10935 -10936 -10937 -10938 -10939 -10940 -10941 -10942 -10943 -) - -// ************************************************************************* // diff --git a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/makeMesh b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/makeMesh index b0be10d8e5f2b0525cec8f23c93585fde73f5879..b4fc1a22ef1aa0decb5ae200a0ada926514b79ab 100755 --- a/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/makeMesh +++ b/tutorials/incompressible/MRFSimpleFoam/mixerVessel2D/makeMesh @@ -1,11 +1,13 @@ #!/bin/sh +set -x m4 < constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict -blockMesh -cellSet +blockMesh >& log.blockMesh +cellSet >& log.cellSet + #- MRF determines its own faceZone if not supplied #cp system/faceSetDict_rotorFaces system/faceSetDict #faceSet #cp system/faceSetDict_noBoundaryFaces system/faceSetDict #faceSet -setsToZones -noFlipMap +setsToZones -noFlipMap >& log.setsToZones diff --git a/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSolution b/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSolution index 486f7ad5fb2836444d68502c50b37e8c4e55b62a..ca87cfa23b842b53e1d7e75478f7e809c12c2083 100644 --- a/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSolution +++ b/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSolution @@ -58,9 +58,10 @@ solvers } } -PISO +PIMPLE { - nCorrectors 2; + nOuterCorrectors 2; + nCorrectors 1; nNonOrthogonalCorrectors 0; } diff --git a/tutorials/incompressible/pisoFoam/les/pitzDailyDirectMapped/constant/polyMesh/boundary b/tutorials/incompressible/pisoFoam/les/pitzDailyDirectMapped/constant/polyMesh/boundary index 4530c7b820cd84a5d66dfda299ca4ac6620a2c8b..0b56bb9f5e8be426cd22b962d4b254728ac55ab7 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDailyDirectMapped/constant/polyMesh/boundary +++ b/tutorials/incompressible/pisoFoam/les/pitzDailyDirectMapped/constant/polyMesh/boundary @@ -20,7 +20,7 @@ FoamFile ( inlet { - type directMapped; + type directMappedPatch; nFaces 30; startFace 27238; sampleMode nearestCell; diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/U b/tutorials/incompressible/simpleFoam/motorBike/0/U new file mode 100644 index 0000000000000000000000000000000000000000..e7777b5b82cefc522a75100dbc609479396263eb --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/U @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "initialConditions" + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform $flowVelocity; + +boundaryField +{ + #include "fixedInlet" + + outlet + { + type inletOutlet; + inletValue uniform (0 0 0); + value $internalField; + } + + lowerWall + { + type fixedValue; + value uniform (20 0 0); + } + + "motorBike_.*" + { + type fixedValue; + value uniform (0 0 0); + } + + #include "frontBackUpperPatches" +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/fixedInlet b/tutorials/incompressible/simpleFoam/motorBike/0/fixedInlet new file mode 100644 index 0000000000000000000000000000000000000000..6d094ec4aa6fbe1f7c48fe1380f9fd767ecebfd1 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/fixedInlet @@ -0,0 +1,15 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +inlet +{ + type fixedValue; + value $internalField; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/frontBackUpperPatches b/tutorials/incompressible/simpleFoam/motorBike/0/frontBackUpperPatches new file mode 100644 index 0000000000000000000000000000000000000000..f92c018ea17045e717f692ae9952a17f607a8fa5 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/frontBackUpperPatches @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +upperWall +{ + type slip; +} + +frontAndBack +{ + type slip; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/initialConditions b/tutorials/incompressible/simpleFoam/motorBike/0/initialConditions new file mode 100644 index 0000000000000000000000000000000000000000..f8ecb7d700ead76ea4776f565764429b8c745b01 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/initialConditions @@ -0,0 +1,15 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +flowVelocity (20 0 0); +pressure 0; +turbulentKE 0.24; +turbulentOmega 1.78; +#inputMode merge + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/k b/tutorials/incompressible/simpleFoam/motorBike/0/k new file mode 100644 index 0000000000000000000000000000000000000000..470670d9c1c5bfa1097585367bee9982c2c34ade --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/k @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "initialConditions" + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform $turbulentKE; + +#include "turbulentBoundaryField" + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/nut b/tutorials/incompressible/simpleFoam/motorBike/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..650811c0bd591588f095fb17f46320acee8351ad --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/nut @@ -0,0 +1,62 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + frontAndBack + { + type calculated; + value uniform 0; + } + + inlet + { + type calculated; + value uniform 0; + } + + outlet + { + type calculated; + value uniform 0; + } + + lowerWall + { + type nutWallFunction; + value uniform 0; + } + + upperWall + { + type calculated; + value uniform 0; + } + + "motorBike_.*" + { + type nutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/omega b/tutorials/incompressible/simpleFoam/motorBike/0/omega new file mode 100644 index 0000000000000000000000000000000000000000..c5c2f307c59dda17f7adcb1de81a6aedd0300602 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/omega @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "initialConditions" + +dimensions [0 0 -1 0 0 0 0]; + +internalField uniform $turbulentOmega; + +#include "turbulentBoundaryField" + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/p b/tutorials/incompressible/simpleFoam/motorBike/0/p new file mode 100644 index 0000000000000000000000000000000000000000..366e75b5c50f79c6e07c293b2ea4ca35ef1aeff1 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/p @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "initialConditions" + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform $pressure; + +boundaryField +{ + inlet + { + type zeroGradient; + } + + outlet + { + type fixedValue; + value $internalField; + } + + lowerWall + { + type zeroGradient; + } + + "motorBike_.*" + { + type zeroGradient; + } + + #include "frontBackUpperPatches" +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/0/turbulentBoundaryField b/tutorials/incompressible/simpleFoam/motorBike/0/turbulentBoundaryField new file mode 100644 index 0000000000000000000000000000000000000000..39fd6f16c15cfea5efbc1c2b7aecd239ccfbd80c --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/0/turbulentBoundaryField @@ -0,0 +1,33 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +boundaryField +{ + #include "fixedInlet" + + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + lowerWall + { + type kQRWallFunction; + } + + "motorBike_.*" + { + type kQRWallFunction; + } + + #include "frontBackUpperPatches" +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/Allrun b/tutorials/incompressible/simpleFoam/motorBike/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..7e6037f4cda17672f6eb05aa84677958521f8d7c --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/Allrun @@ -0,0 +1,8 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication snappyHexMesh -overwrite +runApplication simpleFoam + diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties b/tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..e9be8519b47fd95aeb13fe0eefb01471ec88d7ff --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties @@ -0,0 +1,200 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kOmegaSST; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +realizableKECoeffs +{ + Cmu 0.09; + A0 4.0; + C2 1.9; + alphak 1; + alphaEps 0.833333; +} + +kOmegaSSTCoeffs +{ + alphaK1 0.85034; + alphaK2 1.0; + alphaOmega1 0.5; + alphaOmega2 0.85616; + gamma1 0.5532; + gamma2 0.4403; + beta1 0.0750; + beta2 0.0828; + betaStar 0.09; + a1 0.31; + c1 10; + + Cmu 0.09; +} + +NonlinearKEShihCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphak 1; + alphaEps 0.76932; + A1 1.25; + A2 1000; + Ctau1 -4; + Ctau2 13; + Ctau3 -2; + alphaKsi 0.9; +} + +LienCubicKECoeffs +{ + C1 1.44; + C2 1.92; + alphak 1; + alphaEps 0.76923; + A1 1.25; + A2 1000; + Ctau1 -4; + Ctau2 13; + Ctau3 -2; + alphaKsi 0.9; +} + +QZetaCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphaZeta 0.76923; + anisotropic no; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphaEps 0.76923; +} + +LamBremhorstKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphaEps 0.76923; +} + +LienCubicKELowReCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphak 1; + alphaEps 0.76923; + A1 1.25; + A2 1000; + Ctau1 -4; + Ctau2 13; + Ctau3 -2; + alphaKsi 0.9; + Am 0.016; + Aepsilon 0.263; + Amu 0.00222; +} + +LienLeschzinerLowReCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + alphak 1; + alphaEps 0.76923; + Am 0.016; + Aepsilon 0.263; + Amu 0.00222; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + Cs 0.25; + Ceps 0.15; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaEps 0.76923; + alphaR 1.22; +} + +SpalartAllmarasCoeffs +{ + alphaNut 1.5; + Cb1 0.1355; + Cb2 0.622; + Cw2 0.3; + Cw3 2; + Cv1 7.1; + Cv2 5.0; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/blockMeshDict b/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..0b5b6428a6273ed9ed1b24f5b847c5617783999b --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/blockMeshDict @@ -0,0 +1,74 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.0 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +convertToMeters 1; + +vertices +( + (-5 -4 0) + (15 -4 0) + (15 4 0) + (-5 4 0) + (-5 -4 8) + (15 -4 8) + (15 4 8) + (-5 4 8) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (20 8 8) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + patch frontAndBack + ( + (3 7 6 2) + (1 5 4 0) + ) + patch inlet + ( + (0 4 7 3) + ) + patch outlet + ( + (2 6 5 1) + ) + wall lowerWall + ( + (0 3 2 1) + ) + patch upperWall + ( + (4 5 6 7) + ) +); + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/boundary b/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..7a2e8906845066b4a1bc85618d616d2b6e2b4fcb --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/boundary @@ -0,0 +1,454 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +72 +( + frontAndBack + { + type patch; + nFaces 320; + startFace 955219; + } + inlet + { + type patch; + nFaces 64; + startFace 955539; + } + outlet + { + type patch; + nFaces 64; + startFace 955603; + } + lowerWall + { + type wall; + nFaces 5330; + startFace 955667; + } + upperWall + { + type patch; + nFaces 160; + startFace 960997; + } + motorBike_frt-fairing:001%1 + { + type wall; + nFaces 9726; + startFace 961157; + } + motorBike_windshield:002%2 + { + type wall; + nFaces 86; + startFace 970883; + } + motorBike_rr-wh-rim:005%5 + { + type wall; + nFaces 186; + startFace 970969; + } + motorBike_rr-wh-rim:010%10 + { + type wall; + nFaces 355; + startFace 971155; + } + motorBike_fr-wh-rim:011%11 + { + type wall; + nFaces 594; + startFace 971510; + } + motorBike_fr-wh-brake-disk:012%12 + { + type wall; + nFaces 55; + startFace 972104; + } + motorBike_frame:016-shadow%13 + { + type wall; + nFaces 163; + startFace 972159; + } + motorBike_rear-susp:014%14 + { + type wall; + nFaces 1300; + startFace 972322; + } + motorBike_rear-susp:014-shadow%15 + { + type wall; + nFaces 166; + startFace 973622; + } + motorBike_frame:016%16 + { + type wall; + nFaces 21; + startFace 973788; + } + motorBike_rr-wh-rim:005-shadow%17 + { + type wall; + nFaces 25; + startFace 973809; + } + motorBike_rr-wh-chain-hub:022%22 + { + type wall; + nFaces 161; + startFace 973834; + } + motorBike_rearseat%24 + { + type wall; + nFaces 543; + startFace 973995; + } + motorBike_frt-fairing%25 + { + type wall; + nFaces 927; + startFace 974538; + } + motorBike_windshield%26 + { + type wall; + nFaces 821; + startFace 975465; + } + motorBike_headlights%27 + { + type wall; + nFaces 280; + startFace 976286; + } + motorBike_driversseat%28 + { + type wall; + nFaces 457; + startFace 976566; + } + motorBike_rear-body%29 + { + type wall; + nFaces 3081; + startFace 977023; + } + motorBike_fuel-tank%30 + { + type wall; + nFaces 1512; + startFace 980104; + } + motorBike_exhaust%31 + { + type wall; + nFaces 3516; + startFace 981616; + } + motorBike_rr-wh-rim%32 + { + type wall; + nFaces 2128; + startFace 985132; + } + motorBike_fr-mud-guard%33 + { + type wall; + nFaces 1096; + startFace 987260; + } + motorBike_fr-wh-rim%34 + { + type wall; + nFaces 954; + startFace 988356; + } + motorBike_fr-wh-brake-disk%35 + { + type wall; + nFaces 533; + startFace 989310; + } + motorBike_fr-brake-caliper%36 + { + type wall; + nFaces 199; + startFace 989843; + } + motorBike_fr-wh-tyre%37 + { + type wall; + nFaces 1855; + startFace 990042; + } + motorBike_hbars%38 + { + type wall; + nFaces 745; + startFace 991897; + } + motorBike_fr-forks%39 + { + type wall; + nFaces 1637; + startFace 992642; + } + motorBike_chain%40 + { + type wall; + nFaces 484; + startFace 994279; + } + motorBike_rr-wh-tyre%41 + { + type wall; + nFaces 3022; + startFace 994763; + } + motorBike_square-dial%42 + { + type wall; + nFaces 9; + startFace 997785; + } + motorBike_round-dial%43 + { + type wall; + nFaces 24; + startFace 997794; + } + motorBike_dial-holder%44 + { + type wall; + nFaces 120; + startFace 997818; + } + motorBike_rear-susp%45 + { + type wall; + nFaces 2050; + startFace 997938; + } + motorBike_rear-brake-lights%46 + { + type wall; + nFaces 75; + startFace 999988; + } + motorBike_rear-light-bracket%47 + { + type wall; + nFaces 226; + startFace 1000063; + } + motorBike_frame%48 + { + type wall; + nFaces 2849; + startFace 1000289; + } + motorBike_rear-mud-guard%49 + { + type wall; + nFaces 1177; + startFace 1003138; + } + motorBike_rear-susp-spring-damp%50 + { + type wall; + nFaces 138; + startFace 1004315; + } + motorBike_fairing-inner-plate%51 + { + type wall; + nFaces 551; + startFace 1004453; + } + motorBike_clutch-housing%52 + { + type wall; + nFaces 1199; + startFace 1005004; + } + motorBike_radiator%53 + { + type wall; + nFaces 51; + startFace 1006203; + } + motorBike_water-pipe%54 + { + type wall; + nFaces 112; + startFace 1006254; + } + motorBike_water-pump%55 + { + type wall; + nFaces 96; + startFace 1006366; + } + motorBike_engine%56 + { + type wall; + nFaces 2963; + startFace 1006462; + } + motorBike_rear-shock-link%57 + { + type wall; + nFaces 33; + startFace 1009425; + } + motorBike_rear-brake-fluid-pot-bracket%58 + { + type wall; + nFaces 63; + startFace 1009458; + } + motorBike_rear-brake-fluid-pot%59 + { + type wall; + nFaces 59; + startFace 1009521; + } + motorBike_footpeg%60 + { + type wall; + nFaces 103; + startFace 1009580; + } + motorBike_rr-wh-chain-hub%61 + { + type wall; + nFaces 160; + startFace 1009683; + } + motorBike_rear-brake-caliper%62 + { + type wall; + nFaces 158; + startFace 1009843; + } + motorBike_rider-helmet%65 + { + type wall; + nFaces 964; + startFace 1010001; + } + motorBike_rider-visor%66 + { + type wall; + nFaces 170; + startFace 1010965; + } + motorBike_rider-boots%67 + { + type wall; + nFaces 1657; + startFace 1011135; + } + motorBike_rider-gloves%68 + { + type wall; + nFaces 436; + startFace 1012792; + } + motorBike_rider-body%69 + { + type wall; + nFaces 7207; + startFace 1013228; + } + motorBike_frame:0%70 + { + type wall; + nFaces 52; + startFace 1020435; + } + motorBike_frt-fairing:001-shadow%74 + { + type wall; + nFaces 1340; + startFace 1020487; + } + motorBike_windshield-shadow%75 + { + type wall; + nFaces 111; + startFace 1021827; + } + motorBike_fr-mud-guard-shadow%81 + { + type wall; + nFaces 135; + startFace 1021938; + } + motorBike_fr-wh-brake-disk-shadow%83 + { + type wall; + nFaces 77; + startFace 1022073; + } + motorBike_rear-mud-guard-shadow%84 + { + type wall; + nFaces 143; + startFace 1022150; + } + motorBike_rear-susp-spring-damp-shadow%85 + { + type wall; + nFaces 15; + startFace 1022293; + } + motorBike_radiator-shadow%86 + { + type wall; + nFaces 12; + startFace 1022308; + } + motorBike_rear-shock-link-shadow%87 + { + type wall; + nFaces 7; + startFace 1022320; + } + motorBike_rear-brake-fluid-pot-bracket-shadow%88 + { + type wall; + nFaces 6; + startFace 1022327; + } + motorBike_rr-wh-chain-hub-shadow%89 + { + type wall; + nFaces 24; + startFace 1022333; + } +) + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/transportProperties b/tutorials/incompressible/simpleFoam/motorBike/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..c88ea15da7769291d18e4fcc034f97f7d90ca52c --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/constant/transportProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object transportProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +nu nu [0 2 -1 0 0 0 0] 1.5e-05; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/motorBike/constant/triSurface/motorBike.stl b/tutorials/incompressible/simpleFoam/motorBike/constant/triSurface/motorBike.stl similarity index 100% rename from tutorials/mesh/snappyHexMesh/motorBike/constant/triSurface/motorBike.stl rename to tutorials/incompressible/simpleFoam/motorBike/constant/triSurface/motorBike.stl diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..871d8e64aa5f27d5e8ae105b7f9bffa65a35652d --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties @@ -0,0 +1,174 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +turbulenceModel SpalartAllmaras; + +turbulence on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.0845; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.42; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.68; + alphak alphaK [ 0 0 0 0 0 0 0 ] 1.39; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 1.39; + eta0 eta0 [ 0 0 0 0 0 0 0 ] 4.38; + beta beta [ 0 0 0 0 0 0 0 ] 0.012; +} + +NonlinearKEShihCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphak alphak [ 0 0 0 0 0 0 0 ] 1; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76932; + A1 A1 [ 0 0 0 0 0 0 0 ] 1.25; + A2 A2 [ 0 0 0 0 0 0 0 ] 1000; + Ctau1 Ctau1 [ 0 0 0 0 0 0 0 ] -4; + Ctau2 Ctau2 [ 0 0 0 0 0 0 0 ] 13; + Ctau3 Ctau3 [ 0 0 0 0 0 0 0 ] -2; + alphaKsi alphaKsi [ 0 0 0 0 0 0 0 ] 0.9; +} + +LienCubicKECoeffs +{ + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphak alphak [ 0 0 0 0 0 0 0 ] 1; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; + A1 A1 [ 0 0 0 0 0 0 0 ] 1.25; + A2 A2 [ 0 0 0 0 0 0 0 ] 1000; + Ctau1 Ctau1 [ 0 0 0 0 0 0 0 ] -4; + Ctau2 Ctau2 [ 0 0 0 0 0 0 0 ] 13; + Ctau3 Ctau3 [ 0 0 0 0 0 0 0 ] -2; + alphaKsi alphaKsi [ 0 0 0 0 0 0 0 ] 0.9; +} + +QZetaCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphaZeta alphaZeta [ 0 0 0 0 0 0 0 ] 0.76923; + anisotropic no; +} + +LaunderSharmaKECoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; +} + +LamBremhorstKECoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; +} + +LienCubicKELowReCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphak alphak [ 0 0 0 0 0 0 0 ] 1; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; + A1 A1 [ 0 0 0 0 0 0 0 ] 1.25; + A2 A2 [ 0 0 0 0 0 0 0 ] 1000; + Ctau1 Ctau1 [ 0 0 0 0 0 0 0 ] -4; + Ctau2 Ctau2 [ 0 0 0 0 0 0 0 ] 13; + Ctau3 Ctau3 [ 0 0 0 0 0 0 0 ] -2; + alphaKsi alphaKsi [ 0 0 0 0 0 0 0 ] 0.9; + Am Am [ 0 0 0 0 0 0 0 ] 0.016; + Aepsilon Aepsilon [ 0 0 0 0 0 0 0 ] 0.263; + Amu Amu [ 0 0 0 0 0 0 0 ] 0.00222; +} + +LienLeschzinerLowReCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + alphak alphak [ 0 0 0 0 0 0 0 ] 1; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; + Am Am [ 0 0 0 0 0 0 0 ] 0.016; + Aepsilon Aepsilon [ 0 0 0 0 0 0 0 ] 0.263; + Amu Amu [ 0 0 0 0 0 0 0 ] 0.00222; +} + +LRRCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + Clrr1 Clrr1 [ 0 0 0 0 0 0 0 ] 1.8; + Clrr2 Clrr2 [ 0 0 0 0 0 0 0 ] 0.6; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + Cs Cs [ 0 0 0 0 0 0 0 ] 0.25; + Ceps Ceps [ 0 0 0 0 0 0 0 ] 0.15; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu Cmu [ 0 0 0 0 0 0 0 ] 0.09; + Clg1 Clg1 [ 0 0 0 0 0 0 0 ] 1.8; + Clg2 Clg2 [ 0 0 0 0 0 0 0 ] 0.6; + C1 C1 [ 0 0 0 0 0 0 0 ] 1.44; + C2 C2 [ 0 0 0 0 0 0 0 ] 1.92; + C1Ref C1Ref [ 0 0 0 0 0 0 0 ] 0.5; + C2Ref C2Ref [ 0 0 0 0 0 0 0 ] 0.3; + Cs Cs [ 0 0 0 0 0 0 0 ] 0.25; + Ceps Ceps [ 0 0 0 0 0 0 0 ] 0.15; + alphaEps alphaEps [ 0 0 0 0 0 0 0 ] 0.76923; + alphaR alphaR [ 0 0 0 0 0 0 0 ] 1.22; +} + +SpalartAllmarasCoeffs +{ + alphaNut alphaNut [ 0 0 0 0 0 0 0 ] 1.5; + Cb1 Cb1 [ 0 0 0 0 0 0 0 ] 0.1355; + Cb2 Cb2 [ 0 0 0 0 0 0 0 ] 0.622; + Cw2 Cw2 [ 0 0 0 0 0 0 0 ] 0.3; + Cw3 Cw3 [ 0 0 0 0 0 0 0 ] 2; + Cv1 Cv1 [ 0 0 0 0 0 0 0 ] 7.1; + Cv2 Cv2 [ 0 0 0 0 0 0 0 ] 5; +} + +wallFunctionCoeffs +{ + kappa kappa [ 0 0 0 0 0 0 0 ] 0.4187; + E E [ 0 0 0 0 0 0 0 ] 9; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/controlDict b/tutorials/incompressible/simpleFoam/motorBike/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..0fe34b6df670b430b48a3fa66524a9ed5e8cc5f8 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/system/controlDict @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application simpleFoam; + +startFrom latestTime; + +startTime 0; + +stopAt endTime; + +endTime 500; + +deltaT 1; + +writeControl timeStep; + +writeInterval 100; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression compressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/decomposeParDict b/tutorials/incompressible/simpleFoam/motorBike/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..cbcdf2d23a46a8963942ae1a90a3491a08a8cc08 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/system/decomposeParDict @@ -0,0 +1,65 @@ +// The FOAM Project // File: decomposeParDict +/* +------------------------------------------------------------------------------- + ========= | dictionary + \\ / | + \\ / | Name: decomposeParDict + \\ / | Family: FoamX configuration file + \\/ | + F ield | FOAM version: 2.1 + O peration | Product of Nabla Ltd. + A and | + M anipulation | Email: Enquiries@Nabla.co.uk +------------------------------------------------------------------------------- +*/ +// FoamX Case Dictionary. + +FoamFile +{ + version 2.0; + format ascii; + + root "/home/penfold/mattijs/foam/mattijs2.1/run/icoFoam"; + case "cavity"; + instance "system"; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 6; + +method hierarchical; +//method metis; +//method parMetis; + +simpleCoeffs +{ + n (4 1 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (3 2 1); + delta 0.001; + order xyz; +} + +manualCoeffs +{ + dataFile "cellDecomposition"; +} + +metisCoeffs +{ + //n (5 1 1); + //cellWeightsFile "constant/cellWeightsFile"; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes b/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..8b6d823cc462316399d3df66f7d2317e3f1c841a --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; + grad(U) Gauss linear; +// grad(U) cellLimited Gauss linear 1; +} + +divSchemes +{ + default none; + div(phi,U) Gauss linearUpwindV Gauss linear; + div(phi,k) Gauss upwind; + div(phi,omega) Gauss upwind; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear corrected; +// default Gauss linear limited 0.5; +// default Gauss linear limited 0.333; +} + +interpolationSchemes +{ + default linear; + interpolate(U) linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/fvSolution b/tutorials/incompressible/simpleFoam/motorBike/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..c0356c6b38a6cbc94b9b3755f34e4df1def6aad3 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/system/fvSolution @@ -0,0 +1,74 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver GAMG; + tolerance 1e-7; + relTol 0.1; + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + cacheAgglomeration on; + agglomerator faceAreaPair; + nCellsInCoarsestLevel 10; + mergeLevels 1; + }; + + U + { + solver smoothSolver; + smoother GaussSeidel; + tolerance 1e-8; + relTol 0.1; + nSweeps 1; + }; + + k + { + solver smoothSolver; + smoother GaussSeidel; + tolerance 1e-8; + relTol 0.1; + nSweeps 1; + }; + + omega + { + solver smoothSolver; + smoother GaussSeidel; + tolerance 1e-8; + relTol 0.1; + nSweeps 1; + }; +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; +} + +relaxationFactors +{ + p 0.3; + U 0.7; + k 0.7; + omega 0.7; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/snappyHexMeshDict b/tutorials/incompressible/simpleFoam/motorBike/system/snappyHexMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..1006a1e1b6a097c15e9a2b472b67595e1979fa09 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/system/snappyHexMeshDict @@ -0,0 +1,579 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.0 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object snappyHexMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Which of the steps to run +castellatedMesh true; +snap true; +addLayers true; + + +// Geometry. Definition of all surfaces. All surfaces are of class +// searchableSurface. +// Surfaces are used +// - to specify refinement for any mesh cell intersecting it +// - to specify refinement for any mesh cell inside/outside/near +// - to 'snap' the mesh boundary to the surface +geometry +{ + motorBike.stl + { + type triSurfaceMesh; + name motorBike; + } + + refinementBox + { + type searchableBox; + min (-1.0 -0.7 0.0); + max ( 8.0 0.7 2.5); + } +}; + + + +// Settings for the castellatedMesh generation. +castellatedMeshControls +{ + + // Refinement parameters + // ~~~~~~~~~~~~~~~~~~~~~ + + // While refining maximum number of cells per processor. This is basically + // the number of cells that fit on a processor. If you choose this too small + // it will do just more refinement iterations to obtain a similar mesh. + maxLocalCells 1000000; + + // Overall cell limit (approximately). Refinement will stop immediately + // upon reaching this number so a refinement level might not complete. + // Note that this is the number of cells before removing the part which + // is not 'visible' from the keepPoint. The final number of cells might + // actually be a lot less. + maxGlobalCells 2000000; + + // The surface refinement loop might spend lots of iterations refining just a + // few cells. This setting will cause refinement to stop if <= minimumRefine + // are selected for refinement. Note: it will at least do one iteration + // (unless the number of cells to refine is 0) + minRefinementCells 10; + + // Number of buffer layers between different levels. + // 1 means normal 2:1 refinement restriction, larger means slower + // refinement. + nCellsBetweenLevels 3; + + + + // Explicit feature edge refinement + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Specifies a level for any cell intersected by its edges. + // This is a featureEdgeMesh, read from constant/triSurface for now. + features + ( + //{ + // file "someLine.eMesh"; + // level 2; + //} + ); + + + + // Surface based refinement + // ~~~~~~~~~~~~~~~~~~~~~~~~ + + // Specifies two levels for every surface. The first is the minimum level, + // every cell intersecting a surface gets refined up to the minimum level. + // The second level is the maximum level. Cells that 'see' multiple + // intersections where the intersections make an + // angle > resolveFeatureAngle get refined up to the maximum level. + + refinementSurfaces + { + motorBike + { + // Surface-wise min and max refinement level + level (5 6); + } + } + + // Resolve sharp angles + resolveFeatureAngle 30; + + + // Region-wise refinement + // ~~~~~~~~~~~~~~~~~~~~~~ + + // Specifies refinement level for cells in relation to a surface. One of + // three modes + // - distance. 'levels' specifies per distance to the surface the + // wanted refinement level. The distances need to be specified in + // descending order. + // - inside. 'levels' is only one entry and only the level is used. All + // cells inside the surface get refined up to the level. The surface + // needs to be closed for this to be possible. + // - outside. Same but cells outside. + + refinementRegions + { + refinementBox + { + mode inside; + levels ((1E15 4)); + } + } + + + // Mesh selection + // ~~~~~~~~~~~~~~ + + // After refinement patches get added for all refinementSurfaces and + // all cells intersecting the surfaces get put into these patches. The + // section reachable from the locationInMesh is kept. + // NOTE: This point should never be on a face, always inside a cell, even + // after refinement. + locationInMesh (3 3 0.43); +} + + + +// Settings for the snapping. +snapControls +{ + //- Number of patch smoothing iterations before finding correspondence + // to surface + nSmoothPatch 3; + + //- Relative distance for points to be attracted by surface feature point + // or edge. True distance is this factor times local + // maximum edge length. + tolerance 4.0; + + //- Number of mesh displacement relaxation iterations. + nSolveIter 30; + + //- Maximum number of snapping relaxation iterations. Should stop + // before upon reaching a correct mesh. + nRelaxIter 5; +} + + + +// Settings for the layer addition. +addLayersControls +{ + // Per final patch (so not geometry!) the layer information + layers + { + minZ + { + nSurfaceLayers 1; + } + motorBike_frt-fairing:001%1 + { + nSurfaceLayers 1; + } + motorBike_windshield:002%2 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-rim:005%5 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-rim:010%10 + { + nSurfaceLayers 1; + } + motorBike_fr-wh-rim:011%11 + { + nSurfaceLayers 1; + } + motorBike_fr-wh-brake-disk:012%12 + { + nSurfaceLayers 1; + } + motorBike_frame:016-shadow%13 + { + nSurfaceLayers 1; + } + motorBike_rear-susp:014%14 + { + nSurfaceLayers 1; + } + motorBike_rear-susp:014-shadow%15 + { + nSurfaceLayers 1; + } + motorBike_frame:016%16 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-rim:005-shadow%17 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-chain-hub:022%22 + { + nSurfaceLayers 1; + } + motorBike_rearseat%24 + { + nSurfaceLayers 1; + } + motorBike_frt-fairing%25 + { + nSurfaceLayers 1; + } + motorBike_windshield%26 + { + nSurfaceLayers 1; + } + motorBike_headlights%27 + { + nSurfaceLayers 1; + } + motorBike_driversseat%28 + { + nSurfaceLayers 1; + } + motorBike_rear-body%29 + { + nSurfaceLayers 1; + } + motorBike_fuel-tank%30 + { + nSurfaceLayers 1; + } + motorBike_exhaust%31 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-rim%32 + { + nSurfaceLayers 1; + } + motorBike_fr-mud-guard%33 + { + nSurfaceLayers 1; + } + motorBike_fr-wh-rim%34 + { + nSurfaceLayers 1; + } + motorBike_fr-wh-brake-disk%35 + { + nSurfaceLayers 1; + } + motorBike_fr-brake-caliper%36 + { + nSurfaceLayers 1; + } + motorBike_fr-wh-tyre%37 + { + nSurfaceLayers 1; + } + motorBike_hbars%38 + { + nSurfaceLayers 1; + } + motorBike_fr-forks%39 + { + nSurfaceLayers 1; + } + motorBike_chain%40 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-tyre%41 + { + nSurfaceLayers 1; + } + motorBike_square-dial%42 + { + nSurfaceLayers 1; + } + motorBike_round-dial%43 + { + nSurfaceLayers 1; + } + motorBike_dial-holder%44 + { + nSurfaceLayers 1; + } + motorBike_rear-susp%45 + { + nSurfaceLayers 1; + } + motorBike_rear-brake-lights%46 + { + nSurfaceLayers 1; + } + motorBike_rear-light-bracket%47 + { + nSurfaceLayers 1; + } + motorBike_frame%48 + { + nSurfaceLayers 1; + } + motorBike_rear-mud-guard%49 + { + nSurfaceLayers 1; + } + motorBike_rear-susp-spring-damp%50 + { + nSurfaceLayers 1; + } + motorBike_fairing-inner-plate%51 + { + nSurfaceLayers 1; + } + motorBike_clutch-housing%52 + { + nSurfaceLayers 1; + } + motorBike_radiator%53 + { + nSurfaceLayers 1; + } + motorBike_water-pipe%54 + { + nSurfaceLayers 1; + } + motorBike_water-pump%55 + { + nSurfaceLayers 1; + } + motorBike_engine%56 + { + nSurfaceLayers 1; + } + motorBike_rear-shock-link%57 + { + nSurfaceLayers 1; + } + motorBike_rear-brake-fluid-pot-bracket%58 + { + nSurfaceLayers 1; + } + motorBike_rear-brake-fluid-pot%59 + { + nSurfaceLayers 1; + } + motorBike_footpeg%60 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-chain-hub%61 + { + nSurfaceLayers 1; + } + motorBike_rear-brake-caliper%62 + { + nSurfaceLayers 1; + } + motorBike_rider-helmet%65 + { + nSurfaceLayers 1; + } + motorBike_rider-visor%66 + { + nSurfaceLayers 1; + } + motorBike_rider-boots%67 + { + nSurfaceLayers 1; + } + motorBike_rider-gloves%68 + { + nSurfaceLayers 1; + } + motorBike_rider-body%69 + { + nSurfaceLayers 1; + } + motorBike_frame:0%70 + { + nSurfaceLayers 1; + } + motorBike_frt-fairing:001-shadow%74 + { + nSurfaceLayers 1; + } + motorBike_windshield-shadow%75 + { + nSurfaceLayers 1; + } + motorBike_fr-mud-guard-shadow%81 + { + nSurfaceLayers 1; + } + motorBike_fr-wh-brake-disk-shadow%83 + { + nSurfaceLayers 1; + } + motorBike_rear-mud-guard-shadow%84 + { + nSurfaceLayers 1; + } + motorBike_rear-susp-spring-damp-shadow%85 + { + nSurfaceLayers 1; + } + motorBike_radiator-shadow%86 + { + nSurfaceLayers 1; + } + motorBike_rear-shock-link-shadow%87 + { + nSurfaceLayers 1; + } + motorBike_rear-brake-fluid-pot-bracket-shadow%88 + { + nSurfaceLayers 1; + } + motorBike_rr-wh-chain-hub-shadow%89 + { + nSurfaceLayers 1; + } + } + + // Expansion factor for layer mesh + expansionRatio 1.0; + + //- Wanted thickness of final added cell layer. If multiple layers + // is the + // thickness of the layer furthest away from the wall. + // Relative to undistorted size of cell outside layer. + finalLayerRatio 0.3; + + //- Minimum thickness of cell layer. If for any reason layer + // cannot be above minThickness do not add layer. + // Relative to undistorted size of cell outside layer. + minThickness 0.1; + + //- If points get not extruded do nGrow layers of connected faces that are + // also not grown. This helps convergence of the layer addition process + // close to features. + nGrow 1; + + + // Advanced settings + + //- When not to extrude surface. 0 is flat surface, 90 is when two faces + // make straight angle. + featureAngle 30; + + //- Maximum number of snapping relaxation iterations. Should stop + // before upon reaching a correct mesh. + nRelaxIter 3; + + // Number of smoothing iterations of surface normals + nSmoothSurfaceNormals 1; + + // Number of smoothing iterations of interior mesh movement direction + nSmoothNormals 3; + + // Smooth layer thickness over surface patches + nSmoothThickness 10; + + // Stop layer growth on highly warped cells + maxFaceThicknessRatio 0.5; + + // Reduce layer growth where ratio thickness to medial + // distance is large + maxThicknessToMedialRatio 0.3; + + // Angle used to pick up medial axis points + minMedianAxisAngle 130; + + // Create buffer region for new layer terminations + nBufferCellsNoExtrude 0; +} + + + +// Generic mesh quality settings. At any undoable phase these determine +// where to undo. +meshQualityControls +{ + //- Maximum non-orthogonality allowed. Set to 180 to disable. + maxNonOrtho 65; + + //- Max skewness allowed. Set to <0 to disable. + maxBoundarySkewness 20; + maxInternalSkewness 4; + + //- Max concaveness allowed. Is angle (in degrees) below which concavity + // is allowed. 0 is straight face, <0 would be convex face. + // Set to 180 to disable. + maxConcave 80; + + //- Minimum projected area v.s. actual area. Set to -1 to disable. + minFlatness 0.5; + + //- Minimum pyramid volume. Is absolute volume of cell pyramid. + // Set to very negative number (e.g. -1E30) to disable. + minVol 1e-13; + + //- Minimum face area. Set to <0 to disable. + minArea -1; + + //- Minimum face twist. Set to <-1 to disable. dot product of face normal + //- and face centre triangles normal + minTwist 0.02; + + //- minimum normalised cell determinant + //- 1 = hex, <= 0 = folded or flattened illegal cell + minDeterminant 0.001; + + //- minFaceWeight (0 -> 0.5) + minFaceWeight 0.02; + + //- minVolRatio (0 -> 1) + minVolRatio 0.01; + + //must be >0 for Fluent compatibility + minTriangleTwist -1; + + + // Advanced + + //- Number of error distribution iterations + nSmoothScale 4; + //- amount to scale back displacement at error points + errorReduction 0.75; +} + + +// Advanced + +// Flags for optional output +// 0 : only write final meshes +// 1 : write intermediate meshes +// 2 : write volScalarField with cellLevel for postprocessing +// 4 : write current intersections as .obj files +debug 0; + + +// Merge tolerance. Is fraction of overall bounding box of initial mesh. +// Note: the write tolerance needs to be higher than this. +mergeTolerance 1E-6; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CH4 b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CH4 new file mode 100644 index 0000000000000000000000000000000000000000..5b0f18db0c6875dbc23ea4628dd8d379c60352e2 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CH4 @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object CH4; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.0; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/k b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CO similarity index 81% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/k rename to tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CO index b2e4f58aab813ed1f1ba9667db76c30d0ad49f1c..40eed00221bf5cab6f6a4b747c4cfd87995b47f5 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/k +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CO @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,13 +10,14 @@ FoamFile version 2.0; format ascii; class volScalarField; - object k; + location "0"; + object CO; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [0 2 -2 0 0 0 0]; +dimensions [0 0 0 0 0 0 0]; -internalField uniform 37.5; +internalField uniform 0.0; boundaryField { @@ -46,4 +47,5 @@ boundaryField } } + // ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CO2 b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CO2 new file mode 100644 index 0000000000000000000000000000000000000000..6afb84af406e6b1d6c1808bf0b48709a9ca5c72c --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/CO2 @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object CO2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.0; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/G b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/G new file mode 100644 index 0000000000000000000000000000000000000000..1fbaf23d4d1a6799f3214f3fce3c3ddb44b20155 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/G @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object G; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + top + { + type MarshakRadiation; + T T; + emissivity 1.0; + value uniform 0; + } + bottom + { + type MarshakRadiation; + T T; + emissivity 1.0; + value uniform 0; + } + walls + { + type MarshakRadiation; + T T; + emissivity 1.0; + value uniform 0; + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/H2 b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/H2 new file mode 100644 index 0000000000000000000000000000000000000000..c0632b8637eeb249ae07fff809a2982fe78d0895 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/H2 @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object H2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.0; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/H2O b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/H2O new file mode 100644 index 0000000000000000000000000000000000000000..39a64df509d548c4854c802acf92d15be3b4d271 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/H2O @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object H2O; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.0; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/N2 b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/N2 new file mode 100644 index 0000000000000000000000000000000000000000..8d98a27778df9c5d83935c86aad7018a14ea1524 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/N2 @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object N2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.79; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/O2 b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/O2 new file mode 100644 index 0000000000000000000000000000000000000000..2715a766861a21e627f8147b8f73343cacb582ee --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/O2 @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object O2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.21; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/T b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/T new file mode 100644 index 0000000000000000000000000000000000000000..9cfa5c9c23054721bc7d8f07d89b9524ac766cd5 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/T @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 400; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type fixedValue; + value uniform 400; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/U b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/U new file mode 100644 index 0000000000000000000000000000000000000000..b6c4c172b85c40b8cd9fab0b47b98f50ff1d83ac --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/U @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + top + { + type fixedValue; + value uniform (0 0 0); + } + bottom + { + type fixedValue; + value uniform (0 0 0); + } + walls + { + type fixedValue; + value uniform (0 0 0); + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..9fcf588c0c292537815ea7ef2c72563a85a14851 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 5390.5; + +boundaryField +{ + top + { + type compressible::epsilonWallFunction; + value uniform 5390.5; + } + bottom + { + type compressible::epsilonWallFunction; + value uniform 5390.5; + } + walls + { + type compressible::epsilonWallFunction; + value uniform 5390.5; + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k new file mode 100644 index 0000000000000000000000000000000000000000..9abb57fdb013a1d9dd1ac7859f9554dc0c642b71 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 37.5; + +boundaryField +{ + top + { + type compressible::kQRWallFunction; + value uniform 37.5; + } + bottom + { + type compressible::kQRWallFunction; + value uniform 37.5; + } + walls + { + type compressible::kQRWallFunction; + value uniform 37.5; + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/p b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/p new file mode 100644 index 0000000000000000000000000000000000000000..55edbea3d6a520edbeac996c3f63849072fc68b9 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/p @@ -0,0 +1,2551 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField nonuniform List<scalar> +2500 +( +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +100000 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +5e+05 +) +; + +boundaryField +{ + top + { + type zeroGradient; + } + bottom + { + type zeroGradient; + } + walls + { + type zeroGradient; + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/p.org b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/p.org new file mode 100644 index 0000000000000000000000000000000000000000..e716bc595b57c9309c03f85c8f87d57b8abf2022 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/p.org @@ -0,0 +1,51 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 100000; + +boundaryField +{ + top + { + type zeroGradient; + } + + bottom + { + type zeroGradient; + } + + walls + { + type zeroGradient; + } + + symmetry + { + type symmetryPlane; + } + + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/chem.inp b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/chem.inp new file mode 100644 index 0000000000000000000000000000000000000000..0e2a2580cac2df2a45ae23f51fd88749d506f2f3 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/chem.inp @@ -0,0 +1,11 @@ +ELEMENTS +O H C N +END +SPECIES +N2 O2 CH4 H2 CO2 H2O +END +REACTIONS + CH4 + 2 O2 => CO2 + 2 H2O 7.000E+12 0.00 20000 + H2 + 0.5 O2 => H2O 1.500E+14 0.00 20000 + +END diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/foam.dat b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/foam.dat new file mode 100644 index 0000000000000000000000000000000000000000..b3a1716ea5ce4bae7365586f328a2bfb0401d95e --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/foam.dat @@ -0,0 +1,32 @@ +( +CO2 CO2 1 44.01 + 0 5000 1000 + 3.85746 0.00441437 -2.21481e-06 5.2349e-10 -4.72084e-14 -48759.2 2.27164 + 2.35677 0.0089846 -7.12356e-06 2.45919e-09 -1.437e-13 -48372 9.90105 + 1.67212e-06 170.672 +CH4 CH4 1 16.043 + 0 5000 1000 + 0.0748515 0.0133909 -5.73286e-06 1.22293e-09 -1.01815e-13 -9468.34 18.4373 + 5.14988 -0.013671 4.91801e-05 -4.84743e-08 1.66694e-11 -10246.6 -4.6413 + 1.67212e-06 170.672 +H2 H2 1 2.01594 + 0 5000 1000 + 3.33728 -4.94025e-05 4.99457e-07 -1.79566e-10 2.00255e-14 -950.159 -3.20502 + 2.34433 0.00798052 -1.94782e-05 2.01572e-08 -7.37612e-12 -917.935 0.68301 + 1.67212e-06 170.672 +H2O H2O 1 18.0153 + 0 5000 1000 + 3.03399 0.00217692 -1.64073e-07 -9.7042e-11 1.68201e-14 -30004.3 4.96677 + 4.19864 -0.00203643 6.5204e-06 -5.48797e-09 1.77198e-12 -30293.7 -0.849032 + 1.67212e-06 170.672 +O2 O2 1 31.9988 + 0 5000 1000 + 3.28254 0.00148309 -7.57967e-07 2.09471e-10 -2.16718e-14 -1088.46 5.45323 + 3.78246 -0.00299673 9.8473e-06 -9.6813e-09 3.24373e-12 -1063.94 3.65768 + 1.67212e-06 170.672 +N2 N2 1 28.0134 + 0 5000 1000 + 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 + 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44485e-12 -1020.9 3.95037 + 1.67212e-06 170.672 +) diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/foam.inp b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/foam.inp new file mode 100644 index 0000000000000000000000000000000000000000..9473b7e8fabb566b85f949b468c737844f9318d9 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/foam.inp @@ -0,0 +1,22 @@ +species +6 +( +N2 +O2 +CH4 +H2 +CO2 +H2O +) +; + +reactions +2 +( +irreversibleArrheniusReaction + CH4 + 2O2^1.0 = CO2 + 2H2O^1.0 + (7e+06 0 10063.8) +irreversibleArrheniusReaction + H2 + 0.5O2^1.0 = H2O + (4.74342e+12 0 10063.8) +); diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/therm.dat b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/therm.dat new file mode 100644 index 0000000000000000000000000000000000000000..20792659cfd9fce124c0c83f297c356c811258f2 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/chemkin/therm.dat @@ -0,0 +1,3283 @@ +THERMO ALL + 200.000 1000.000 5000.000 +(CH2O)3 70590C 3H 6O 3 G 0200.00 4000.00 1500.00 1 + 0.01913678E+03 0.08578044E-01-0.08882060E-05-0.03574819E-08 0.06605143E-12 2 +-0.06560876E+06-0.08432507E+03-0.04662286E+02 0.06091547E+00-0.04710536E-03 3 + 0.01968843E-06-0.03563271E-10-0.05665404E+06 0.04525265E+03 4 +(CH3)2SICH2 61991H 8C 3SI 1 G 0200.00 2500.00 1500.00 1 + 0.01547852E+03 0.01065700E+00-0.01234345E-05-0.01293352E-07 0.02528715E-11 2 +-0.06693076E+04-0.05358884E+03 0.02027522E+02 0.04408673E+00-0.03370024E-03 3 + 0.01484466E-06-0.02830898E-10 0.03931454E+05 0.01815821E+03 4 +AL 62987AL 1 G 0200.00 5000.00 0600.00 1 + 0.02559589E+02-0.01063224E-02 0.07202828E-06-0.02121105E-09 0.02289429E-13 2 + 0.03890214E+06 0.05234522E+02 0.02736825E+02-0.05912374E-02-0.04033938E-05 3 + 0.02322343E-07-0.01705599E-10 0.03886795E+06 0.04363880E+02 4 +AL2H6 62987AL 2H 6 G 0200.00 1500.00 0600.00 1 + 0.02634884E+02 0.02135952E+00 0.03154151E-05-0.07684674E-07 0.02335832E-10 2 + 0.08871346E+05 0.09827515E+02-0.06800681E+02 0.05080744E+00 0.01039747E-03 3 +-0.01119582E-05 0.08459155E-09 0.01060537E+06 0.05554526E+03 4 +AL2ME6 62987AL 2C 6H 18 G 0200.00 1500.00 0600.00 1 + 0.01773147E+03 0.04935747E+00 0.01196854E-04-0.01639826E-06 0.04890867E-10 2 +-0.03855560E+06-0.05053298E+03-0.07159750E+01 0.01067109E+01 0.02117605E-03 3 +-0.02193212E-05 0.01644144E-08-0.03515546E+06 0.03890763E+03 4 +ALAS 62987AL 1AS 1 G 0200.00 1500.00 0600.00 1 + 0.04790027E+02-0.01908226E-03-0.01983390E-05 0.02239358E-08-0.06904706E-12 2 + 0.05259290E+06 0.03259703E+02 0.05047764E+02-0.06419947E-02-0.01432071E-04 3 + 0.04754391E-07-0.03297621E-10 0.05254264E+06 0.01985206E+02 4 +ALH 62987AL 1H 1 G 0200.00 5000.00 1000.00 1 + 0.03392644E+02 0.01215399E-01-0.04676595E-05 0.08691625E-09-0.06022669E-13 2 + 0.03006845E+06 0.02758899E+02 0.03071503E+02 0.02165549E-01-0.03275638E-04 3 + 0.04136984E-07-0.01877121E-10 0.03021221E+06 0.04548855E+02 4 +ALH2 62987AL 1H 2 G 0200.00 1500.00 0600.00 1 + 0.04486543E+02 0.03128832E-01-0.01969438E-05-0.01016030E-07 0.03497468E-11 2 + 0.01960959E+06 0.08167897E+01 0.02442137E+02 0.09915913E-01 0.02471083E-05 3 +-0.02119583E-06 0.01710234E-09 0.01997588E+06 0.01065270E+03 4 +ALH3 62987AL 1H 3 G 0200.00 1500.00 0600.00 1 + 0.04186838E+02 0.06159249E-01-0.03877593E-06-0.02061928E-07 0.06600276E-11 2 + 0.07908079E+05 0.05134396E+01 0.01008323E+02 0.01640324E+00 0.01976746E-04 3 +-0.03528558E-06 0.02753378E-09 0.08484656E+05 0.01585838E+03 4 +ALME 62987AL 1C 1H 3 G 0200.00 1500.00 0600.00 1 + 0.04662737E+02 0.07097939E-01 0.02520013E-05-0.02114863E-07 0.06097489E-11 2 + 0.08203228E+05 0.01769245E+02 0.02664176E+02 0.01324914E+00 0.02525848E-04 3 +-0.02394396E-06 0.01761855E-09 0.08574173E+05 0.01147449E+03 4 +ALME2 62987AL 1C 2H 6 G 0200.00 1500.00 0600.00 1 + 0.06481282E+02 0.01474605E+00 0.05816529E-05-0.04621347E-07 0.01396041E-10 2 + 0.03745072E+05-0.02603326E+02 0.09494573E+01 0.03206354E+00 0.06134021E-04 3 +-0.06500042E-06 0.04911485E-09 0.04761408E+05 0.02419465E+03 4 +ALME3 62987AL 1C 3H 9 G 0200.00 1500.00 0600.00 1 + 0.06654948E+02 0.02455144E+00 0.01176575E-04-0.07815023E-07 0.02255622E-10 2 +-0.01340952E+06-0.03454481E+02-0.07027567E+01 0.04682764E+00 0.01149903E-03 3 +-0.09160441E-06 0.06687294E-09-0.01203799E+06 0.03232771E+03 4 +AR 120186AR 1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.07453750E+04 0.04366001E+02 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.07453750E+04 0.04366001E+02 4 +AR+ 121286AR 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02864864E+02-0.01203573E-02-0.01065199E-06 0.09074839E-10-0.09623876E-14 2 + 0.01827230E+07 0.03543585E+02 0.02301341E+02 0.08035529E-02-0.01758806E-05 3 +-0.01781093E-08-0.08937268E-13 0.01829281E+07 0.06659358E+02 4 +AS 62987AS 1 G 0200.00 1500.00 0600.00 1 + 0.02617011E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.03720455E+06 0.06995524E+02 0.02617011E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.03720455E+06 0.06995524E+02 4 +AS2 62987AS 2 G 0200.00 1500.00 0600.00 1 + 0.04394201E+02 0.05389968E-02-0.02379401E-05-0.06541924E-09 0.05184186E-12 2 + 0.02235094E+06 0.04897919E+02 0.03682892E+02 0.03121811E-01-0.01074052E-04 3 +-0.05629472E-07 0.05178811E-10 0.02247356E+06 0.08283423E+02 4 +AS3 62987AS 3 G 0200.00 1500.00 0600.00 1 + 0.07404036E+02 0.07818426E-02-0.03918297E-05-0.05203629E-09 0.06291907E-12 2 + 0.03063825E+06-0.03417324E+02 0.06403142E+02 0.04477099E-01-0.01866642E-04 3 +-0.07394750E-07 0.07012753E-10 0.03080965E+06 0.01337136E+02 4 +AS4 62987AS 4 G 0200.00 1500.00 0600.00 1 + 0.09695766E+02 0.01306258E-01-0.05519564E-05-0.02150874E-08 0.01457935E-11 2 + 0.01571732E+06-0.01618870E+03 0.07853761E+02 0.07916509E-01-0.02329820E-04 3 +-0.01526312E-06 0.01377435E-09 0.01603629E+06-0.07409755E+02 4 +ASALME 62987AS 1AL 1C 1H 3G 0200.00 1500.00 0600.00 1 + 0.07127107E+02 0.07357864E-01 0.02300796E-06-0.02226399E-07 0.06927227E-11 2 + 0.03273438E+06-0.01847179E+02 0.04053423E+02 0.01726125E+00 0.01833498E-04 3 +-0.03386953E-06 0.02626981E-09 0.03329309E+06 0.01299665E+03 4 +ASALME2 62987AS 1AL 1C 2H 6G 0200.00 1500.00 0600.00 1 + 0.09909938E+02 0.01463850E+00 0.04118731E-05-0.04444658E-07 0.01329501E-10 2 + 0.02815111E+06-0.01523531E+03 0.04808530E+02 0.03067687E+00 0.05048001E-04 3 +-0.05908099E-06 0.04462290E-09 0.02908817E+06 0.09471621E+02 4 +ASGAET 62987AS 1GA 1C 2H 5G 0200.00 1500.00 0600.00 1 + 0.09081073E+02 0.01674632E+00 0.01283130E-05-0.05590436E-07 0.01781315E-10 2 + 0.03807443E+06-0.09142782E+02 0.06364698E+01 0.04382467E+00 0.06144686E-04 3 +-0.09491641E-06 0.07374198E-09 0.03960893E+06 0.03164673E+03 4 +ASGAET2 62987AS 1GA 1C 4H 10G 0200.00 1500.00 0600.00 1 + 0.01032429E+03 0.03073571E+00 0.01086335E-04-0.09971949E-07 0.02945979E-10 2 + 0.03039490E+06-0.01316402E+03-0.03539248E+01 0.06369772E+00 0.01359742E-03 3 +-0.01286142E-05 0.09572181E-09 0.03236903E+06 0.03865086E+03 4 +ASGAME 62987AS 1GA 1C 1H 3G 0200.00 1500.00 0600.00 1 + 0.07322183E+02 0.06995479E-01 0.01069351E-05-0.01995283E-07 0.06040446E-11 2 + 0.03949449E+06-0.07416680E+01 0.04877266E+02 0.01482559E+00 0.01652124E-04 3 +-0.02712058E-06 0.02080196E-09 0.03994071E+06 0.01107670E+03 4 +ASGAME2 62987AS 1GA 1C 2H 6G 0200.00 1500.00 0600.00 1 + 0.09352436E+02 0.01504820E+00 0.05157975E-05-0.04553518E-07 0.01348763E-10 2 + 0.03735856E+06-0.01218114E+03 0.04382076E+02 0.03056345E+00 0.05477067E-04 3 +-0.05834108E-06 0.04373509E-09 0.03827434E+06 0.01191111E+03 4 +ASGAMEH 62987AS 1GA 1C 1H 4G 0200.00 1500.00 0600.00 1 + 0.07842794E+02 0.09682097E-01 0.01060306E-05-0.02991402E-07 0.09382673E-11 2 + 0.04435297E+06-0.05093455E+02 0.03585119E+02 0.02336317E+00 0.02873356E-04 3 +-0.04737895E-06 0.03674461E-09 0.04512703E+06 0.01547160E+03 4 +ASH 62987AS 1H 1 G 0200.00 1500.00 0600.00 1 + 0.03219848E+02 0.01001250E-01-0.04874997E-08-0.01107653E-08-0.09254321E-13 2 + 0.03008176E+06 0.06647311E+02 0.03865843E+02-0.01157571E-01-0.03494372E-05 3 + 0.07079686E-07-0.06014028E-10 0.02996829E+06 0.03549869E+02 4 +ASH2 62987AS 1H 2 G 0200.00 1500.00 0600.00 1 + 0.03428307E+02 0.03181140E-01 0.01460484E-05-0.07937145E-08 0.01694414E-11 2 + 0.02010282E+06 0.02904703E+02 0.03778945E+02 0.01759233E-01 0.08070807E-05 3 + 0.02358763E-07-0.03043521E-10 0.02004862E+06 0.01272974E+02 4 +ASH3 62987AS 1H 3 G 0200.00 1500.00 0600.00 1 + 0.04172022E+02 0.04371323E-01 0.02177574E-05-0.01183264E-07 0.04536374E-11 2 + 0.06882916E+05 0.02803477E+02 0.09446356E+01 0.01508469E+00 0.01201696E-04 3 +-0.03397465E-06 0.02767656E-09 0.07459168E+05 0.01832268E+03 4 +ASME 62987AS 1C 1H 3 G 0200.00 1500.00 0600.00 1 + 0.04657260E+02 0.06976298E-01 0.02147557E-05-0.02101159E-07 0.06082150E-11 2 + 0.02806423E+06 0.03409835E+02 0.02625270E+02 0.01325242E+00 0.02441628E-04 3 +-0.02419567E-06 0.01786944E-09 0.02844080E+06 0.01327336E+03 4 +ASME2 62987AS 1C 2H 6 G 0200.00 1500.00 0600.00 1 + 0.05981395E+02 0.01521284E+00 0.06993355E-05-0.04721619E-07 0.01369912E-10 2 + 0.01467985E+06 0.01192741E+02 0.01390400E+02 0.02923331E+00 0.06598871E-04 3 +-0.05620560E-06 0.04130368E-09 0.01553302E+06 0.02349981E+03 4 +ASME3 62987AS 1C 3H 9 G 0200.00 1500.00 0600.00 1 + 0.06347764E+02 0.02466454E+00 0.01154629E-04-0.07877436E-07 0.02202225E-10 2 +-0.01617323E+05-0.06316786E+01 0.02667388E+01 0.04253171E+00 0.01165106E-03 3 +-0.07914706E-06 0.05603127E-09-0.04685540E+04 0.02904591E+03 4 +BE 81392BE 1 G 0200.00 5000.00 1000.00 1 + 0.02380618E+02 0.02339856E-02-0.01453949E-05 0.03111727E-09-0.01072959E-13 2 + 0.03868083E+06 0.02787792E+02 0.02403493E+02 0.06166087E-02-0.01321925E-04 3 + 0.01144806E-07-0.03437304E-11 0.03864894E+06 0.02549853E+02 4 +BE(S) 81392BE 1 S 0200.00 3000.00 1000.00 1 + 0.01898768E+02 0.01629382E-01-0.03547406E-05 0.01247349E-08-0.01578507E-12 2 +-0.06527011E+04-0.01020412E+03-0.09092963E+01 0.01585668E+00-0.02624182E-03 3 + 0.02044924E-06-0.05872448E-10-0.02390556E+04 0.02598871E+02 4 +BE2SIO4(S) 81392BE 2O 4SI 1 S 0200.00 3000.00 1000.00 1 + 0.01695617E+03 0.06266472E-01-0.02841325E-04 0.06379149E-08-0.04780890E-12 2 +-0.02614324E+07-0.09398438E+03-0.06380159E+02 0.09333352E+00-0.01415477E-02 3 + 0.01101948E-05-0.03462902E-09-0.02558671E+07 0.02162977E+03 4 +BE3B2O6(S) 81392B 2BE 3O 6 S 0200.00 3000.00 1000.00 1 + 0.02640267E+03 0.01142674E+00-0.03773479E-04 0.04332047E-08 0.02356543E-12 2 +-0.03849576E+07-0.01487137E+04-0.05230657E+02 0.01105769E+01-0.01614054E-02 3 + 0.01447797E-05-0.05420786E-09-0.03755957E+07 0.01490974E+03 4 +BE3N2(A) 81392BE 3N 2 S 0200.00 3000.00 1000.00 1 + 0.01097008E+03 0.06416846E-01-0.02938928E-04 0.04564651E-08-0.05509703E-13 2 +-0.07519767E+06-0.06231286E+03-0.08167547E+02 0.08515091E+00-0.01355569E-02 3 + 0.01060406E-05-0.03256815E-09-0.07110460E+06 0.03040606E+03 4 +BE3N2(L) 81392BE 3N 2 L 0200.00 4000.00 1000.00 1 + 0.01610468E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.06338252E+06-0.08701469E+03 0.01610468E+03 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.06338252E+06-0.08701468E+03 4 +BEAL2O4(S) 81392AL 2BE 1O 4 S 0200.00 2400.00 1000.00 1 + 0.01118219E+03 0.01677777E+00-0.06692989E-04-0.01497360E-07 0.01203700E-10 2 +-0.02810337E+07-0.06116527E+03-0.07257604E+02 0.01074554E+01-0.01713422E-02 3 + 0.01295274E-05-0.03740965E-09-0.02780832E+07 0.02383770E+03 4 +BEB2O4 81392B 2BE 1O 4 G 0200.00 5000.00 1000.00 1 + 0.01266018E+03 0.06883210E-01-0.02963169E-04 0.05694789E-08-0.04050458E-12 2 +-0.01672990E+07-0.03636876E+03 0.04012008E+02 0.03052847E+00-0.02571938E-03 3 + 0.09738810E-07-0.01450712E-10-0.01648983E+07 0.08399628E+02 4 +BEBO2 81392B 1BE 1O 2 G 0200.00 5000.00 1000.00 1 + 0.06831273E+02 0.03424464E-01-0.01471236E-04 0.02825118E-08-0.02008790E-12 2 +-0.06047559E+06-0.08730609E+02 0.02426203E+02 0.01572415E+00-0.01309160E-03 3 + 0.04244447E-07-0.02562806E-11-0.05929016E+06 0.01394744E+03 4 +BEBR 81392BE 1BR 1 G 0200.00 5000.00 1000.00 1 + 0.04166357E+02 0.04424462E-02-0.01713095E-05 0.03185381E-09-0.01964221E-13 2 + 0.01313080E+06 0.03473875E+02 0.03178756E+02 0.03144181E-01-0.01989189E-04 3 +-0.04871910E-08 0.06208255E-11 0.01337870E+06 0.08520506E+02 4 +BEBR2 81392BE 1BR 2 G 0200.00 5000.00 1000.00 1 + 0.06814040E+02 0.07848450E-02-0.03497501E-05 0.06885841E-09-0.04984129E-13 2 +-0.02974764E+06-0.06362110E+02 0.05216331E+02 0.05128972E-01-0.03678726E-04 3 + 0.08525872E-09 0.05611721E-11-0.02932967E+06 0.01847829E+02 4 +BEBR2(S) 81392BE 1BR 2 S 0200.00 1500.00 1000.00 1 + 0.07680161E+02 0.03193456E-01-0.02439097E-05-0.09487536E-08 0.03902210E-11 2 +-0.04528092E+06-0.03282152E+03 0.05659917E+02 0.08805599E-01-0.02790316E-04 3 +-0.04611400E-07 0.03007373E-10-0.04482571E+06-0.02263852E+03 4 +BECL 81392BE 1CL 1 G 0200.00 5000.00 1000.00 1 + 0.04072243E+02 0.05328307E-02-0.02146892E-05 0.04097687E-09-0.02774848E-13 2 + 0.05990792E+05 0.02639872E+02 0.03006275E+02 0.03385550E-01-0.02274674E-04 3 +-0.01333438E-08 0.04447782E-11 0.06271131E+05 0.08126810E+02 4 +BECL2 81392BE 1CL 2 G 0200.00 5000.00 1000.00 1 + 0.06656109E+02 0.09583935E-02-0.04248637E-05 0.08333911E-09-0.06016211E-13 2 +-0.04547842E+06-0.08159565E+02 0.04835084E+02 0.05899051E-01-0.04307799E-04 3 + 0.03113267E-08 0.05292957E-11-0.04499748E+06 0.01210616E+02 4 +BECL2(A) 81392BE 1CL 2 S 0200.00 1500.00 1000.00 1 + 0.08380054E+02 0.02572312E-01-0.07554892E-05-0.02368242E-08 0.01042547E-11 2 +-0.06177281E+06-0.03886076E+03 0.08074927E+01 0.03830225E+00-0.06255340E-03 3 + 0.04645940E-06-0.01295143E-09-0.06052883E+06-0.03683825E+02 4 +BECL2(B) 81392BE 1CL 2 S 0200.00 1500.00 1000.00 1 + 0.07791771E+02 0.02945389E-01-0.04237093E-05-0.05339604E-08 0.01505044E-11 2 +-0.06231958E+06-0.03656698E+03 0.03004424E+02 0.02353211E+00-0.03553037E-03 3 + 0.02706855E-06-0.08144728E-10-0.06136495E+06-0.01365758E+03 4 +BECLF 81392BE 1CL 1F 1 G 0200.00 5000.00 1000.00 1 + 0.06393787E+02 0.01234948E-01-0.05412476E-05 0.01053150E-08-0.07557553E-13 2 +-0.07104831E+06-0.07478512E+02 0.04405415E+02 0.06642228E-01-0.05154354E-04 3 + 0.01063175E-07 0.02287810E-11-0.07051262E+06 0.02777586E+02 4 +BEF 81392BE 1F 1 G 0200.00 5000.00 1000.00 1 + 0.03741370E+02 0.08524818E-02-0.03436428E-05 0.06466099E-09-0.04475089E-13 2 +-0.02167667E+06 0.02968223E+02 0.02905108E+02 0.02952099E-01-0.02747617E-04 3 + 0.01918800E-07-0.07179964E-11-0.02140972E+06 0.07407617E+02 4 +BEF2 81392BE 1F 2 G 0200.00 5000.00 1000.00 1 + 0.06008875E+02 0.01636431E-01-0.07094651E-05 0.01370220E-08-0.09780462E-13 2 +-0.09777056E+06-0.07723693E+02 0.03801759E+02 0.07737988E-01-0.06427724E-04 3 + 0.02097328E-07-0.01462695E-11-0.09717092E+06 0.03660784E+02 4 +BEF2(L) 81392BE 1F 2 L 0200.00 2000.00 1000.00 1 + 0.05976585E+02 0.04777009E-01-0.05064131E-05 0.05012404E-09 0.08570416E-13 2 +-0.01251277E+07-0.02873833E+03-0.05587355E+01 0.03423905E+00-0.05210078E-03 3 + 0.04099400E-06-0.01226767E-09-0.01239060E+07 0.02162308E+02 4 +BEH 81392BE 1H 1 G 0200.00 5000.00 1000.00 1 + 0.03103757E+02 0.01443026E-01-0.05486383E-05 0.09992518E-09-0.06823073E-13 2 + 0.03762032E+06 0.03113887E+02 0.03220220E+02 0.01660638E-01-0.03759811E-04 3 + 0.05403578E-07-0.02433378E-10 0.03762484E+06 0.02536116E+02 4 +BEH+ 81392BE 1H 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02935026E+02 0.01642881E-01-0.06606950E-05 0.01253854E-08-0.08322438E-13 2 + 0.01381605E+07 0.03342443E+02 0.03203174E+02 0.01918095E-01-0.04743515E-04 3 + 0.06392785E-07-0.02736265E-10 0.01380944E+07 0.01849186E+02 4 +BEH2 81392BE 1H 2 G 0200.00 5000.00 1000.00 1 + 0.03274395E+02 0.04312822E-01-0.01774785E-04 0.03298131E-08-0.02286391E-12 2 + 0.01367913E+06 0.03758700E+01 0.01761472E+02 0.08827701E-01-0.01241923E-03 3 + 0.01412574E-06-0.06176309E-10 0.01426447E+06 0.08573833E+02 4 +BEH2O2 81392BE 1H 2O 2 G 0200.00 5000.00 1000.00 1 + 0.07694718E+02 0.04893975E-01-0.01780895E-04 0.03055611E-08-0.02009121E-12 2 +-0.08403520E+06-0.01751820E+03 0.03118833E+02 0.01997183E+00-0.01673101E-03 3 + 0.03275766E-07 0.01457848E-10-0.08305301E+06 0.05128545E+02 4 +BEH2O2(A) 81392BE 1H 2O 2 S 0200.00 1000.00 1000.00 1 + 0.01357669E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01138925E+07-0.07369071E+03-0.07121292E+02 0.08378375E+00-0.01435144E-02 3 + 0.01164084E-05-0.03597983E-09-0.01091544E+07 0.02745148E+03 4 +BEH2O2(B) 81392BE 1H 2O 2 S 0200.00 1000.00 1000.00 1 + 0.01357669E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01142447E+07-0.07409333E+03-0.07121292E+02 0.08378375E+00-0.01435144E-02 3 + 0.01164084E-05-0.03597983E-09-0.01095066E+07 0.02704887E+03 4 +BEI 81392BE 1I 1 G 0200.00 5000.00 1000.00 1 + 0.04226574E+02 0.03948427E-02-0.01549696E-05 0.03023851E-09-0.01932301E-13 2 + 0.01912832E+06 0.04229493E+02 0.03358791E+02 0.02864276E-01-0.01889889E-04 3 +-0.04370942E-08 0.05986692E-11 0.01933641E+06 0.08627578E+02 4 +BEI2 81392BE 1I 2 G 0200.00 5000.00 1000.00 1 + 0.06974217E+02 0.06094573E-02-0.02739783E-05 0.05428767E-09-0.03948833E-13 2 +-0.09890086E+05-0.05063732E+02 0.05564008E+02 0.04472664E-01-0.03090745E-04 3 +-0.02609722E-08 0.06750777E-11-0.09529549E+05 0.02158152E+02 4 +BEI2(S) 81392BE 1I 2 S 0200.00 1500.00 1000.00 1 + 0.08868316E+02 0.02591978E-01-0.07796846E-05-0.02236952E-08 0.01016032E-11 2 +-0.02556556E+06-0.03709859E+03 0.01301872E+02 0.03830115E+00-0.06255080E-03 3 + 0.04645675E-06-0.01295046E-09-0.02432303E+06-0.01952190E+02 4 +BEN 81392BE 1N 1 G 0200.00 5000.00 1000.00 1 + 0.03799137E+02 0.08135072E-02-0.03271826E-05 0.06267597E-09-0.04443547E-13 2 + 0.05006582E+06 0.03013958E+02 0.02880282E+02 0.03157848E-01-0.02749300E-04 3 + 0.01549304E-07-0.04944407E-11 0.05034622E+06 0.07854857E+02 4 +BEO(A) 81392BE 1O 1 S 0200.00 3500.00 1000.00 1 + 0.04606101E+02 0.01465013E-01-0.09316989E-06-0.08839902E-09 0.01840163E-12 2 +-0.07492927E+06-0.02579358E+03-0.01187545E+01 0.01231168E+00-0.02298405E-04 3 +-0.09318502E-07 0.05331928E-10-0.07364786E+06-0.01151163E+02 4 +BEO(B) 81392BE 1O 1 S 0200.00 3500.00 1000.00 1 + 0.04606101E+02 0.01465013E-01-0.09316989E-06-0.08839902E-09 0.01840163E-12 2 +-0.07412403E+06-0.02545418E+03-0.01187545E+01 0.01231168E+00-0.02298405E-04 3 +-0.09318502E-07 0.05331928E-10-0.07284262E+06-0.08117651E+01 4 +BEOH 81392BE 1H 1O 1 G 0200.00 5000.00 1000.00 1 + 0.04580703E+02 0.02444079E-01-0.08794693E-05 0.01484750E-08-0.09530468E-13 2 +-0.01534682E+06-0.01819725E+02 0.02577868E+02 0.08977628E-01-0.07867956E-04 3 + 0.02536139E-07 0.06057864E-12-0.01489220E+06 0.08162645E+02 4 +BES(S) 81392BE 1S 1 S 0200.00 3000.00 1000.00 1 + 0.04944107E+02 0.03098929E-01-0.01308985E-04 0.02564670E-08-0.01377673E-12 2 +-0.03004408E+06-0.02521191E+03-0.03045166E+02 0.03934537E+00-0.06572406E-03 3 + 0.05230436E-06-0.01590377E-09-0.02854032E+06 0.01256033E+03 4 +BESO4(A) 81392BE 1O 4S 1 S 0200.00 2200.00 1000.00 1 + 0.02081235E+01 0.03035540E+00-0.07769396E-04-0.02942517E-07 0.01112249E-10 2 +-0.01455278E+07 0.02609183E+01-0.08960041E+02 0.01179726E+01-0.02438390E-02 3 + 0.02430177E-05-0.08722741E-09-0.01453005E+07 0.03410812E+03 4 +BESO4(B) 81392BE 1O 4S 1 S 0200.00 2200.00 1000.00 1 + 0.02081235E+01 0.03035540E+00-0.07769396E-04-0.02942517E-07 0.01112249E-10 2 +-0.01453939E+07 0.04157230E+01-0.08960041E+02 0.01179726E+01-0.02438390E-02 3 + 0.02430177E-05-0.08722741E-09-0.01451667E+07 0.03426292E+03 4 +BESO4(GAM) 81392BE 1O 4S 1 S 0200.00 2200.00 1000.00 1 + 0.02081235E+01 0.03035540E+00-0.07769396E-04-0.02942517E-07 0.01112249E-10 2 +-0.01430422E+07 0.03005051E+02-0.08960041E+02 0.01179726E+01-0.02438390E-02 3 + 0.02430177E-05-0.08722741E-09-0.01428148E+07 0.03685225E+03 4 +C 121086C 1 G 0200.00 5000.00 1000.00 1 + 0.02602087E+02-0.01787081E-02 0.09087041E-06-0.01149933E-09 0.03310844E-14 2 + 0.08542154E+06 0.04195177E+02 0.02498585E+02 0.08085777E-03-0.02697697E-05 3 + 0.03040729E-08-0.01106652E-11 0.08545878E+06 0.04753459E+02 4 +C(S) 121286C 1 S 0200.00 5000.00 1000.00 1 + 0.01490166E+02 0.01662126E-01-0.06687204E-05 0.01290880E-08-0.09205334E-13 2 +-0.07074019E+04-0.08717785E+02-0.06705661E+01 0.07181500E-01-0.05632921E-04 3 + 0.02142299E-07-0.04168562E-11-0.07339498E+03 0.02601596E+02 4 +C+ 120186C 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02511827E+02-0.01735978E-03 0.09504268E-07-0.02218852E-10 0.01862189E-14 2 + 0.02166772E+07 0.04286130E+02 0.02595384E+02-0.04068665E-02 0.06892367E-05 3 +-0.05266488E-08 0.01508338E-11 0.02166628E+07 0.03895730E+02 4 +C- 121686C 1E 1 G 0200.00 5000.00 1000.00 1 + 0.02990221E+02-0.09184596E-02 0.05055560E-05-0.07703410E-09 0.03163271E-13 2 + 0.06983931E+06 0.01259453E+02 0.02783903E+02-0.01774288E-01 0.03696761E-04 3 +-0.03066693E-07 0.08637622E-11 0.06998511E+06 0.02726281E+02 4 +C2 121286C 2 G 0200.00 5000.00 1000.00 1 + 0.04135979E+02 0.06531618E-03 0.01837099E-05-0.05295085E-09 0.04712137E-13 2 + 0.09967272E+06 0.07472923E+01 0.06996045E+02-0.07400602E-01 0.03234704E-04 3 + 0.04802535E-07-0.03295918E-10 0.09897487E+06-0.01386227E+03 4 +C2- 121286C 2E 1 G 0200.00 5000.00 1000.00 1 + 0.03796891E+02 0.02530050E-02 0.09709118E-06-0.01614804E-09-0.03212893E-15 2 + 0.05207981E+06 0.01658147E+02 0.03468012E+02-0.02352875E-02 0.01243912E-04 3 + 0.04705961E-08-0.08164274E-11 0.05231215E+06 0.03886699E+02 4 +C2CL3 40992C 2CL 3 G 0200.00 4000.00 1500.00 1 + 0.01183853E+03 0.09460851E-02-0.02920870E-05 0.03847024E-09-0.01539560E-13 2 + 0.02313143E+06-0.02891445E+03 0.04808647E+02 0.02212948E+00-0.02548847E-03 3 + 0.01372083E-06-0.02812663E-10 0.02514353E+06 0.07232629E+02 4 +C2CL5 40992C 2CL 5 G 0200.00 4000.00 1500.00 1 + 0.01775107E+03 0.09220800E-02-0.04852694E-05 0.01190373E-08-0.01100446E-12 2 +-0.02402768E+05-0.05545676E+03 0.06414346E+02 0.03867367E+00-0.04857935E-03 3 + 0.02734513E-06-0.05732891E-10 0.04697039E+04 0.01542036E+02 4 +C2CL6 40992C 2CL 6 G 0200.00 4000.00 1500.00 1 + 0.02021422E+03 0.01757648E-01-0.05881040E-05 0.08029739E-09-0.03958238E-13 2 +-0.02340156E+06-0.07096011E+03 0.07492710E+02 0.04318468E+00-0.05275048E-03 3 + 0.02947143E-06-0.06176554E-10-0.02006555E+06-0.06635582E+02 4 +C2F6 82489C 2F 6 G 0200.00 5000.00 1000.00 1 + 0.01602057E+03 0.06273007E-01-0.02797778E-04 0.05517547E-08-0.04004651E-12 2 +-0.01675654E+07-0.05519459E+03 0.03577448E+02 0.03913670E+00-0.02714862E-03 3 + 0.04348459E-08 0.04007135E-10-0.01642174E+07 0.09098384E+02 4 +C2H 81193C 2H 1 G 0200.00 4000.00 1000.00 1 + 0.03986367E+02 0.03143123E-01-0.01267243E-04 0.02924363E-08-0.02716320E-12 2 + 0.06655884E+06 0.01191063E+02 0.02737704E+02 0.08048446E-01-0.09244310E-04 3 + 0.06525259E-07-0.01939580E-10 0.06683813E+06 0.07300220E+02 4 +C2H2 121386C 2H 2 G 0200.00 5000.00 1000.00 1 + 0.04436770E+02 0.05376039E-01-0.01912817E-04 0.03286379E-08-0.02156710E-12 2 + 0.02566766E+06-0.02800338E+02 0.02013562E+02 0.01519045E+00-0.01616319E-03 3 + 0.09078992E-07-0.01912746E-10 0.02612444E+06 0.08805378E+02 4 +C2H3 12787C 2H 3 G 0200.00 5000.00 1000.00 1 + 0.05933468E+02 0.04017746E-01-0.03966740E-05-0.01441267E-08 0.02378644E-12 2 + 0.03185435E+06-0.08530313E+02 0.02459276E+02 0.07371476E-01 0.02109873E-04 3 +-0.01321642E-07-0.01184784E-10 0.03335225E+06 0.01155620E+03 4 +C2H4 121286C 2H 4 G 0200.00 5000.00 1000.00 1 + 0.03528419E+02 0.01148518E+00-0.04418385E-04 0.07844601E-08-0.05266848E-12 2 + 0.04428289E+05 0.02230389E+02-0.08614880E+01 0.02796163E+00-0.03388677E-03 3 + 0.02785152E-06-0.09737879E-10 0.05573046E+05 0.02421149E+03 4 +C2H5 12387C 2H 5 G 0200.00 5000.00 1000.00 1 + 0.07190480E+02 0.06484077E-01-0.06428065E-05-0.02347879E-08 0.03880877E-12 2 + 0.01067455E+06-0.01478089E+03 0.02690702E+02 0.08719133E-01 0.04419839E-04 3 + 0.09338703E-08-0.03927773E-10 0.01287040E+06 0.01213820E+03 4 +C2H6 121686C 2H 6 G 0200.00 4000.00 1000.00 1 + 0.04825938E+02 0.01384043E+00-0.04557259E-04 0.06724967E-08-0.03598161E-12 2 +-0.01271779E+06-0.05239507E+02 0.01462539E+02 0.01549467E+00 0.05780507E-04 3 +-0.01257832E-06 0.04586267E-10-0.01123918E+06 0.01443229E+03 4 +C2HCL 112989C 2H 1CL 1 G 0200.00 5000.00 1000.00 1 + 0.06295372E+02 0.03883113E-01-0.01506049E-04 0.02700003E-08-0.01830213E-12 2 + 0.02357279E+06-0.08137063E+02 0.03618443E+02 0.01331979E+00-0.01321822E-03 3 + 0.06092024E-07-0.08879026E-11 0.02415385E+06 0.05050645E+02 4 +C2HCL5 40992H 1C 2CL 5 G 0200.00 4000.00 1500.00 1 + 0.01897802E+03 0.02244275E-01-0.05864788E-05 0.02733950E-09 0.04934135E-13 2 +-0.02494887E+06-0.06578714E+03 0.05356044E+02 0.04176390E+00-0.04710787E-03 3 + 0.02550758E-06-0.05324478E-10-0.02079330E+06 0.04970258E+02 4 +C2N 121286C 2N 1 G 0200.00 5000.00 1000.00 1 + 0.06151561E+02 0.01511650E-01-0.06629362E-05 0.01286148E-08-0.09160830E-13 2 + 0.06484318E+06-0.08177850E+02 0.03498544E+02 0.08554433E-01-0.06288697E-04 3 + 0.08638478E-08 0.04915996E-11 0.06556611E+06 0.05548374E+02 4 +C2N2 121286C 2N 2 G 0200.00 5000.00 1000.00 1 + 0.06548003E+02 0.03984707E-01-0.01634216E-04 0.03038597E-08-0.02111069E-12 2 + 0.03490716E+06-0.09735790E+02 0.04265459E+02 0.01192257E+00-0.01342014E-03 3 + 0.09192297E-07-0.02778942E-10 0.03547888E+06 0.01713212E+02 4 +C2O 121286C 2O 1 G 0200.00 5000.00 1000.00 1 + 0.04849809E+02 0.02947585E-01-0.01090729E-04 0.01792562E-08-0.01115758E-12 2 + 0.03282055E+06-0.06453226E+01 0.03368851E+02 0.08241803E-01-0.08765145E-04 3 + 0.05569262E-07-0.01540009E-10 0.03317081E+06 0.06713314E+02 4 +C3 121286C 3 G 0200.00 5000.00 1000.00 1 + 0.03803710E+02 0.02253567E-01-0.07704535E-05 0.01316294E-08-0.08694264E-13 2 + 0.09736135E+06 0.06128063E+02 0.04345528E+02 0.01264466E-01-0.04652557E-04 3 + 0.08695856E-07-0.04243536E-10 0.09731403E+06 0.03519437E+02 4 +C3H2 102193H 2C 3 G 0150.00 4000.00 1000.00 1 + 0.07670981E+02 0.02748749E-01-0.04370943E-05-0.06455599E-09 0.01663887E-12 2 + 0.06259722E+06-0.01236890E+03 0.03166714E+02 0.02482572E+00-0.04591637E-03 3 + 0.04268019E-06-0.01482152E-09 0.06350421E+06 0.08869446E+02 4 +C3H2(S) 101993H 2C 3 G 0200.00 4000.00 1400.00 1 + 0.08351312E+02 0.02672278E-01-0.02129404E-05-0.01478218E-08 0.02583689E-12 2 + 0.06800690E+06-0.01950884E+03 0.04749475E+02 0.08520229E-01-0.01160268E-04 3 +-0.02494954E-07 0.09921004E-11 0.06939979E+06 0.05437792E+01 4 +C3H4 101993H 4C 3 G 0200.00 4000.00 1400.00 1 + 0.09776256E+02 0.05302138E-01-0.03701118E-05-0.03026386E-08 0.05089581E-12 2 + 0.01954972E+06-0.03077061E+03 0.02539831E+02 0.01633437E+00-0.01764950E-04 3 +-0.04647365E-07 0.01729131E-10 0.02251243E+06 0.09935702E+02 4 +C3H4C 101993H 4C 3 G 0200.00 4000.00 1400.00 1 + 0.09708652E+02 0.05344939E-01-0.03953553E-05-0.03111764E-08 0.05369406E-12 2 + 0.02967722E+06-0.03073273E+03 0.01056162E+02 0.01905236E+00-0.02317048E-04 3 +-0.05933690E-07 0.02307128E-10 0.03309110E+06 0.01761927E+03 4 +C3H4P 101993H 4C 3 G 0200.00 4000.00 1400.00 1 + 0.09768102E+02 0.05219151E-01-0.03753140E-05-0.02992191E-08 0.05107878E-12 2 + 0.01860277E+06-0.03020678E+03 0.03029730E+02 0.01498961E+00-0.01398500E-04 3 +-0.03969619E-07 0.01388217E-10 0.02148408E+06 0.08004594E+02 4 +C3H6 120186C 3H 6 G 0200.00 5000.00 1000.00 1 + 0.06732257E+02 0.01490834E+00-0.04949899E-04 0.07212022E-08-0.03766204E-12 2 +-0.09235703E+04-0.01331335E+03 0.01493307E+02 0.02092518E+00 0.04486794E-04 3 +-0.01668912E-06 0.07158146E-10 0.01074826E+05 0.01614534E+03 4 +C3H8 120186C 3H 8 G 0200.00 5000.00 1000.00 1 + 0.07525217E+02 0.01889034E+00-0.06283924E-04 0.09179373E-08-0.04812410E-12 2 +-0.01646455E+06-0.01784390E+03 0.08969208E+01 0.02668986E+00 0.05431425E-04 3 +-0.02126001E-06 0.09243330E-10-0.01395492E+06 0.01935533E+03 4 +C3O2 121286C 3O 2 G 0200.00 5000.00 1000.00 1 + 0.08098897E+02 0.05560040E-01-0.02312265E-04 0.04340709E-08-0.03036387E-12 2 +-0.01421435E+06-0.01521974E+03 0.04018127E+02 0.01836661E+00-0.01907148E-03 3 + 0.01185587E-06-0.03418748E-10-0.01312824E+06 0.05582084E+02 4 +C4 121286C 4 G 0200.00 5000.00 1000.00 1 + 0.06500180E+02 0.04228632E-01-0.01790718E-04 0.03404813E-08-0.02403978E-12 2 + 0.01143401E+07-0.01148889E+03 0.02343028E+02 0.01642981E+00-0.01527986E-03 3 + 0.07343826E-07-0.01582274E-10 0.01154538E+07 0.09826204E+02 4 +C4H 121686C 4H 1 G 0200.00 5000.00 1000.00 1 + 0.06242882E+02 0.06193683E-01-0.02085932E-04 0.03082203E-08-0.01636483E-12 2 + 0.07568019E+06-0.07210806E+02 0.05023247E+02 0.07092375E-01-0.06073762E-07 3 +-0.02275752E-07 0.08086994E-11 0.07623813E+06-0.06942594E+00 4 +C4H10 62090C 4H 10 G 0200.00 4000.00 1500.00 1 + 0.01998785E+03 0.01037281E+00-0.09610818E-05-0.04623018E-08 0.08202828E-12 2 +-0.02625571E+06-0.08837907E+03-0.02256618E+02 0.05881732E+00-0.04525783E-03 3 + 0.02037115E-06-0.04079458E-10-0.01760233E+06 0.03329595E+03 4 +C4H2 121686C 4H 2 G 0200.00 5000.00 1000.00 1 + 0.09031407E+02 0.06047253E-01-0.01948789E-04 0.02754863E-08-0.01385608E-12 2 + 0.05294736E+06-0.02385068E+03 0.04005192E+02 0.01981000E+00-0.09865877E-04 3 +-0.06635158E-07 0.06077413E-10 0.05424065E+06 0.01845737E+02 4 +C4H6 120186C 4H 6 G 0200.00 5000.00 1000.00 1 + 0.08046583E+02 0.01648525E+00-0.05522227E-04 0.08123593E-08-0.04295078E-12 2 + 0.01370130E+06-0.01800458E+03 0.03197108E+02 0.02025592E+00 0.06510192E-04 3 +-0.01658442E-06 0.06400282E-10 0.01571520E+06 0.09895660E+02 4 +C4H8 120386C 4H 8 G 0200.00 5000.00 1000.00 1 + 0.02053584E+02 0.03435051E+00-0.01588320E-03 0.03308966E-07-0.02536104E-11 2 +-0.02139723E+05 0.01554320E+03 0.01181138E+02 0.03085338E+00 0.05086525E-04 3 +-0.02465489E-06 0.01111019E-09-0.01790400E+05 0.02106247E+03 4 +C5 121286C 5 G 0200.00 5000.00 1000.00 1 + 0.08078081E+02 0.05743464E-01-0.02436405E-04 0.04638916E-08-0.03278910E-12 2 + 0.01147022E+07-0.01953024E+03 0.02115274E+02 0.02326332E+00-0.02109499E-03 3 + 0.09072734E-07-0.01540093E-10 0.01162738E+07 0.01097603E+03 4 +C5H 20387C 5H 1 G 0200.00 5000.00 1000.00 1 + 0.08695749E+02 0.06054301E-01-0.02016011E-04 0.02892893E-08-0.01470100E-12 2 + 0.09031069E+06-0.02101595E+03 0.01634825E+02 0.02509538E+00-0.01206636E-03 3 +-0.01046511E-06 0.08809988E-10 0.09212488E+06 0.01512194E+03 4 +C5H12 20387C 5H 12 G 0200.00 4000.00 1000.00 1 + 0.01667798E+03 0.02114483E+00-0.03533321E-04-0.05742202E-08 0.01515948E-11 2 +-0.02553670E+06-0.06372940E+03 0.01877908E+02 0.04121646E+00 0.01253234E-03 3 +-0.03701537E-06 0.01525569E-09-0.02003816E+06 0.01877257E+03 4 +C5H2 20587C 5H 2 G 0200.00 5000.00 1000.00 1 + 0.01132917E+03 0.07424057E-01-0.02628189E-04 0.04082541E-08-0.02301333E-12 2 + 0.07878706E+06-0.03617117E+03 0.03062322E+02 0.02709998E+00-0.01009170E-03 3 +-0.01272745E-06 0.09167219E-10 0.08114969E+06 0.07071078E+02 4 +C5H5 101993H 5C 5 G 0200.00 4000.00 1400.00 1 + 0.01531094E+03 0.07473806E-01-0.05837458E-05-0.04386651E-08 0.07696839E-12 2 + 0.02525890E+06-0.05951593E+03 0.01007316E+02 0.03189880E+00-0.04748189E-04 3 +-0.01102390E-06 0.04584681E-10 0.03047390E+06 0.01934168E+03 4 +C5H6 20387C 5H 6 G 0200.00 5000.00 1000.00 1 + 0.09689815E+02 0.01838262E+00-0.06264884E-04 0.09393377E-08-0.05087708E-12 2 + 0.01102124E+06-0.03122908E+03-0.03196739E+02 0.04081361E+00 0.06816505E-05 3 +-0.03137459E-06 0.01577223E-09 0.01529068E+06 0.03869939E+03 4 +C6H 121686C 6H 1 G 0200.00 5000.00 1000.00 1 + 0.01158735E+03 0.07295363E-01-0.02466008E-04 0.03407046E-08-0.01498185E-12 2 + 0.01031448E+07-0.03172578E+03 0.04769848E+02 0.02457279E+00-0.07561252E-04 3 +-0.01480691E-06 0.09768054E-10 0.01048523E+07 0.03241530E+02 4 +C6H10 20387C 6H 10 G 0200.00 5000.00 1000.00 1 + 0.01592777E+03 0.02374413E+00-0.06908672E-04 0.08109777E-08-0.02683123E-12 2 +-0.08642656E+05-0.06525186E+03-0.01394228E+02 0.04720693E+00 0.01196042E-03 3 +-0.04162896E-06 0.01740336E-09-0.02217790E+05 0.03129604E+03 4 +C6H14 20387C 6H 14 G 0200.00 4000.00 1000.00 1 + 0.02280472E+03 0.02097989E+00-0.03530674E-04-0.05466245E-08 0.01478950E-11 2 +-0.03073757E+06-0.09583162E+03 0.01836174E+02 0.05098461E+00 0.01259586E-03 3 +-0.04428362E-06 0.01872237E-09-0.02292750E+06 0.02088145E+03 4 +C6H2 121686C 6H 2 G 0200.00 5000.00 1000.00 1 + 0.01275652E+03 0.08034381E-01-0.02618215E-04 0.03725060E-08-0.01878851E-12 2 + 0.08075469E+06-0.04041263E+03 0.05751085E+02 0.02636720E+00-0.01166760E-03 3 +-0.01071450E-06 0.08790297E-10 0.08262013E+06-0.04335532E+02 4 +C6H3 20387C 6H 3 G 0200.00 5000.00 1000.00 1 + 0.01276118E+03 0.01038557E+00-0.03479193E-04 0.05109733E-08-0.02690965E-12 2 + 0.07477706E+06-0.03891745E+03 0.05007090E+02 0.02692852E+00-0.05919866E-04 3 +-0.01527233E-06 0.09408310E-10 0.07713200E+06 0.02225621E+02 4 +C6H4 111293H 4C 6 G 0200.00 4000.00 1000.00 1 + 0.01401625E+03 0.08242769E-01-0.08099664E-05-0.04654132E-08 0.08748122E-12 2 + 0.04410396E+06-0.05139376E+03 0.01520024E+02 0.02876611E+00 0.01417725E-04 3 +-0.01650589E-06 0.05873157E-10 0.04844894E+06 0.01719034E+03 4 +C6H5 82489C 6H 5 G 0200.00 4000.00 1000.00 1 + 0.01577589E+03 0.09651109E-01-0.09429416E-05-0.05469111E-08 0.01026522E-11 2 + 0.03302698E+06-0.06176280E+03 0.01143557E+01 0.03627325E+00 0.01158286E-04 3 +-0.02196965E-06 0.08463556E-10 0.03836054E+06 0.02380117E+03 4 +C6H5(L) 82489C 6H 5 G 0200.00 4000.00 1000.00 1 + 0.01721540E+03 0.08621068E-01-0.08221340E-05-0.04752164E-08 0.08844086E-12 2 + 0.06385819E+06-0.06139128E+03 0.04854269E+02 0.03031659E+00 0.01742893E-05 3 +-0.01811010E-06 0.07392511E-10 0.06798734E+06 0.05854935E+02 4 +C6H5O 82489C 6H 5O 1 G 0200.00 4000.00 1000.00 1 + 0.01822639E+03 0.01003985E+00-0.09915668E-05-0.05672804E-08 0.01068372E-11 2 +-0.02620846E+05-0.07361391E+03 0.01107497E+02 0.03956946E+00 0.08497295E-05 3 +-0.02436311E-06 0.09650660E-10 0.03159672E+05 0.01973496E+03 4 +C6H5OH 82489C 6H 6O 1 G 0200.00 4000.00 1000.00 1 + 0.01821633E+03 0.01142427E+00-0.01096684E-04-0.06427442E-08 0.01198893E-11 2 +-0.02053664E+06-0.07304234E+03 0.01391456E+02 0.03931958E+00 0.01777096E-04 3 +-0.02277673E-06 0.08309659E-10-0.01472181E+06 0.01917813E+03 4 +C6H6 20387C 6H 6 G 0200.00 5000.00 1000.00 1 + 0.01291074E+03 0.01723297E+00-0.05024211E-04 0.05893497E-08-0.01947521E-12 2 + 0.03664512E+05-0.05002699E+03-0.03138012E+02 0.04723103E+00-0.02962208E-04 3 +-0.03262819E-06 0.01718692E-09 0.08890031E+05 0.03657573E+03 4 +C6H7 82489C 6H 7 G 0200.00 4000.00 1000.00 1 + 0.01755221E+03 0.01227080E+00-0.01185742E-04-0.06959661E-08 0.01301326E-11 2 + 0.01624581E+06-0.07166589E+03 0.04639166E+01 0.03975928E+00 0.02529095E-04 3 +-0.02223792E-06 0.07557053E-10 0.02225169E+06 0.02235387E+03 4 +C8H 121686C 8H 1 G 0200.00 5000.00 1000.00 1 + 0.01474991E+03 0.09931501E-01-0.03374841E-04 0.04687593E-08-0.02073536E-12 2 + 0.01399448E+07-0.04892690E+03 0.04489508E+02 0.03521521E+00-0.01019390E-03 3 +-0.02197025E-06 0.01421416E-09 0.01425992E+07 0.03996225E+02 4 +C8H2 121686C 8H 2 G 0200.00 5000.00 1000.00 1 + 0.01568021E+03 0.01115461E+00-0.03724373E-04 0.05197891E-08-0.02375550E-12 2 + 0.01081123E+07-0.05571437E+03 0.04630427E+02 0.03937080E+00-0.01148035E-03 3 +-0.02562214E-06 0.01670791E-09 0.01108285E+07 0.08077425E+01 4 +CA 80792CA 1 G 0200.00 5000.00 1000.00 1 + 0.01636990E+02 0.01938281E-01-0.01464011E-04 0.04278257E-08-0.03581686E-12 2 + 0.02109799E+06 0.08990615E+02 0.01563120E+02 0.06228361E-01-0.01415732E-03 3 + 0.01323968E-06-0.04370569E-10 0.02092191E+06 0.08370537E+02 4 +CA(A) 81092CA 1 S 0200.00 1500.00 1000.00 1 + 0.03344424E+02-0.06129555E-04-0.02048549E-05 0.02199575E-08-0.06498067E-12 2 +-0.01020624E+05-0.01410880E+03 0.02492826E+02 0.03921280E-01-0.07242436E-04 3 + 0.05919276E-07-0.01802531E-10-0.08641901E+04-0.01010018E+03 4 +CA(B) 81092CA 1 S 0200.00 2000.00 1000.00 1 + 0.02149662E+02 0.02293734E-01 0.03948384E-05-0.01813978E-08 0.03060995E-12 2 +-0.06970589E+04-0.07862350E+02 0.02013343E+02 0.02718935E-01-0.01374494E-05 3 + 0.01528553E-08-0.06023681E-12-0.06613041E+04-0.07168449E+02 4 +CA(L) 81092CA 1 L 0200.00 3000.00 1000.00 1 + 0.03623553E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.02310016E+04-0.01455354E+03 0.03623553E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.02310016E+04-0.01455354E+03 4 +CA+ 80792CA 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02415423E+02 0.03140053E-02-0.03458031E-05 0.01350163E-08-0.01342160E-12 2 + 0.09252434E+06 0.05468189E+02 0.02276338E+02 0.01581988E-01-0.03878953E-04 3 + 0.03953701E-07-0.01427856E-10 0.09253536E+06 0.06008258E+02 4 +CA2 80792CA 2 G 0200.00 5000.00 1000.00 1 + 0.04174798E+02-0.07401838E-02 0.03131196E-05-0.05885577E-09 0.04296578E-13 2 + 0.04052221E+06 0.07582380E+02 0.05604867E+02-0.04044408E-01 0.02454638E-04 3 +-0.01495064E-08-0.01724184E-11 0.04008842E+06 0.01167234E+00 4 +CABR 80792BR 1CA 1 G 0200.00 5000.00 1000.00 1 + 0.04312008E+02 0.04246804E-02-0.02536360E-05 0.07082421E-09-0.05508239E-13 2 +-0.07242509E+05 0.05721414E+02 0.04004020E+02 0.01927770E-01-0.02749388E-04 3 + 0.01785012E-07-0.04190442E-11-0.07199987E+05 0.07125700E+02 4 +CABR2 80792BR 2CA 1 G 0200.00 5000.00 1000.00 1 + 0.07388434E+02 0.01393017E-02-0.06561619E-06 0.01342748E-09-0.09993272E-14 2 +-0.04852787E+06-0.04337760E+02 0.06902053E+02 0.01599316E-01-0.01154723E-04 3 +-0.02428795E-08 0.03707822E-11-0.04841873E+06-0.01900929E+02 4 +CABR2(S) 81292BR 2CA 1 S 0200.00 1500.00 1000.00 1 + 0.01076200E+03-0.02979247E-01 0.06950511E-05 0.03569778E-07-0.01382224E-10 2 +-0.08542235E+06-0.04524895E+03 0.05478536E+02 0.02209325E+00-0.04544460E-03 3 + 0.04176543E-06-0.01322726E-09-0.08447516E+06-0.02052538E+03 4 +CACL 80792CA 1CL 1 G 0200.00 5000.00 1000.00 1 + 0.04272197E+02 0.04612770E-02-0.02684554E-05 0.07233022E-09-0.05565813E-13 2 +-0.01387933E+06 0.04556153E+02 0.03810549E+02 0.02372144E-01-0.02939380E-04 3 + 0.01528166E-07-0.02396962E-11-0.01379994E+06 0.06742955E+02 4 +CACL2 80792CA 1CL 2 G 0200.00 5000.00 1000.00 1 + 0.07322969E+02 0.02201546E-02-0.01035664E-05 0.02117574E-09-0.01575201E-13 2 +-0.05893953E+06-0.06959426E+02 0.06595983E+02 0.02364235E-01-0.01611807E-04 3 +-0.04866457E-08 0.05973912E-11-0.05877467E+06-0.03308009E+02 4 +CACL2(S) 81092CA 1CL 2 S 0200.00 2000.00 1000.00 1 + 0.06749013E+02 0.03694542E-01-0.02199980E-05 0.01165549E-08-0.02193898E-12 2 +-0.09759255E+06-0.02629777E+03 0.05722155E+02 0.01836100E+00-0.03597296E-03 3 + 0.03173054E-06-0.09522563E-10-0.09798464E+06-0.02415730E+03 4 +CAF 80792CA 1F 1 G 0200.00 5000.00 1000.00 1 + 0.04150489E+02 0.05746086E-02-0.03081448E-05 0.07585468E-09-0.05641270E-13 2 +-0.03400290E+06 0.03725193E+02 0.03309446E+02 0.03419155E-01-0.03357208E-04 3 + 0.01004510E-07 0.01112627E-11-0.03382332E+06 0.07876121E+02 4 +CAF2 80792CA 1F 2 G 0200.00 5000.00 1000.00 1 + 0.06575083E+02 0.05172194E-02-0.02403804E-05 0.04876347E-09-0.03608526E-13 2 +-0.09641588E+06-0.04868362E+02 0.05023320E+02 0.04921285E-01-0.03129418E-04 3 +-0.01178313E-07 0.01260201E-10-0.09604913E+06 0.02984363E+02 4 +CAH2O2 81292CA 1H 2O 2 G 0200.00 5000.00 1000.00 1 + 0.08627170E+02 0.03353668E-01-0.01123553E-04 0.01801642E-08-0.01122696E-12 2 +-0.07617877E+06-0.01582838E+03 0.05634984E+02 0.01431225E+00-0.01160774E-03 3 + 0.02415328E-08 0.02445194E-10-0.07567777E+06-0.01510141E+02 4 +CAH2O2(S) 81292CA 1H 2O 2 S 0200.00 1000.00 1000.00 1 + 0.01418556E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01237066E+07-0.07268995E+03-0.07906910E+01 0.06795647E+00-0.01329918E-02 3 + 0.01211862E-05-0.04117456E-09-0.01204396E+07-0.07999789E+01 4 +CAI 80792CA 1I 1 G 0200.00 5000.00 1000.00 1 + 0.04316128E+02 0.04138589E-02-0.02776385E-05 0.08074141E-09-0.06592826E-13 2 +-0.01903879E+05 0.06725163E+02 0.04078205E+02 0.01812968E-01-0.02972846E-04 3 + 0.02225520E-07-0.06173497E-11-0.01881151E+05 0.07754936E+02 4 +CAI2 80792CA 1I 2 G 0200.00 5000.00 1000.00 1 + 0.07403366E+02 0.01208762E-02-0.05698306E-06 0.01167152E-09-0.08696049E-14 2 +-0.03328039E+06-0.02870204E+02 0.06975307E+02 0.01413683E-01-0.01046359E-04 3 +-0.01757655E-08 0.03111958E-11-0.03318450E+06-0.07269292E+01 4 +CAO 80792CA 1O 1 G 0200.00 5000.00 1000.00 1 + 0.08665723E+02-0.09857255E-01 0.07277137E-04-0.01813874E-07 0.01477538E-11 2 + 0.02566423E+05-0.02151985E+03 0.07277069E+02-0.02477194E+00 0.06313166E-03 3 +-0.06322423E-06 0.02200693E-09 0.03774998E+05-0.09934620E+02 4 +CAO(S) 81092CA 1O 1 S 0200.00 3600.00 1000.00 1 + 0.05184497E+02 0.01938337E-01-0.08932525E-05 0.02410689E-08-0.02389613E-12 2 +-0.07806390E+06-0.02562669E+03 0.02964466E+02 0.09464719E-01-0.07948131E-04 3 + 0.06517958E-08 0.01313902E-10-0.07762567E+06-0.01476156E+03 4 +CAOH 80792CA 1H 1O 1 G 0200.00 5000.00 1000.00 1 + 0.05164977E+02 0.01974644E-01-0.07757403E-05 0.01507385E-08-0.01048831E-12 2 +-0.02493597E+06-0.01690344E+02 0.03596803E+02 0.08182874E-01-0.07863515E-04 3 + 0.01974293E-07 0.06136755E-11-0.02469004E+06 0.05713983E+02 4 +CAOH+ 80792CA 1H 1O 1E -1G 0200.00 5000.00 1000.00 1 + 0.05293390E+02 0.01697953E-01-0.05704847E-05 0.09169199E-09-0.05724155E-13 2 + 0.04274157E+06-0.03041255E+02 0.03766022E+02 0.07251869E-01-0.05903957E-04 3 + 0.02063514E-08 0.01186538E-10 0.04300269E+06 0.04285959E+02 4 +CAS 80792CA 1S 1 G 0200.00 5000.00 1000.00 1 + 0.04077726E+02-0.02148896E-01 0.03595164E-04-0.01167272E-07 0.01101218E-11 2 + 0.01401038E+06 0.05797750E+02 0.05045918E+02-0.09248234E-01 0.03176027E-03 3 +-0.04007223E-06 0.01698112E-09 0.01355553E+06 0.08770679E+01 4 +CCL 40992C 1CL 1 G 0200.00 4000.00 1500.00 1 + 0.04306010E+02 0.01816861E-02-0.07184326E-06 0.01354479E-09-0.01002479E-13 2 + 0.05198808E+06 0.01558593E+02 0.02871441E+02 0.04709268E-01-0.05629052E-04 3 + 0.03086609E-07-0.06379756E-11 0.05237631E+06 0.08859373E+02 4 +CCL2 40992C 1CL 2 G 0200.00 4000.00 1500.00 1 + 0.06632435E+02 0.03558831E-02-0.01507592E-05 0.03116243E-09-0.02546496E-13 2 + 0.02443636E+06-0.06590137E+02 0.03329579E+02 0.01112853E+00-0.01375891E-03 3 + 0.07726329E-07-0.01624070E-10 0.02530408E+06 0.01010975E+03 4 +CCL2CCLO 40992C 2 O 1CL 3 G 0200.00 4000.00 1500.00 1 + 0.01497380E+03 0.09004180E-02-0.03714287E-05 0.05602716E-09-0.02392170E-13 2 +-0.01781718E+06-0.04510704E+03 0.05066114E+02 0.02846673E+00-0.03113001E-03 3 + 0.01605483E-06-0.03208502E-10-0.01474354E+06 0.06663101E+02 4 +CCL2CCLOH 53090C 2H 1O 1CL 3G 0200.00 5000.00 1500.00 1 + 0.01567259E+03 0.02218766E-01-0.04425239E-05 0.06261725E-10 0.03673507E-13 2 +-0.02855361E+06-0.05085224E+03 0.04602117E+02 0.03408842E+00-0.03836909E-03 3 + 0.02120271E-06-0.04527143E-10-0.02507945E+06 0.06859776E+02 4 +CCL2CH 40992H 1C 2CL 2 G 0200.00 4000.00 1500.00 1 + 0.01101223E+03 0.01364477E-01-0.03497001E-05 0.01107466E-09 0.03844298E-13 2 + 0.02706218E+06-0.02886258E+03 0.02961736E+02 0.02429423E+00-0.02731403E-03 3 + 0.01493184E-06-0.03162966E-10 0.02960233E+06 0.01317486E+03 4 +CCL2HOO 53090C 1H 1O 2CL 2G 0200.00 5000.00 1500.00 1 + 0.01273967E+03 0.01671789E-01-0.03280073E-05 0.09239024E-10 0.02183938E-13 2 +-0.05665041E+05-0.03552584E+03 0.03425417E+02 0.02745544E+00-0.02973832E-03 3 + 0.01588391E-06-0.03309428E-10-0.02675529E+05 0.01333474E+03 4 +CCL2OHCH2 53090C 2H 3O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01606355E+03 0.02856412E-01-0.05564238E-05 0.02056416E-09 0.02871365E-13 2 +-0.01756115E+06-0.05438455E+03 0.02870959E+02 0.04462273E+00-0.05377946E-03 3 + 0.03093185E-06-0.06719238E-10-0.01379636E+06 0.01305466E+03 4 +CCL2OHCHCL 53090C 2H 2O 1CL 3G 0200.00 5000.00 1500.00 1 + 0.01681474E+03 0.02433421E-01-0.04717311E-05 0.01595327E-09 0.02647197E-13 2 +-0.02217115E+06-0.05406904E+03 0.05487264E+02 0.03719540E+00-0.04391386E-03 3 + 0.02501465E-06-0.05417859E-10-0.01882134E+06 0.04237537E+02 4 +CCL3 40992C 1CL 3 G 0200.00 4000.00 1500.00 1 + 0.09375859E+02 0.05723237E-02-0.02242398E-05 0.04238666E-09-0.03174834E-13 2 + 0.05113147E+05-0.01813304E+03 0.04292822E+02 0.01682379E+00-0.02044420E-03 3 + 0.01135805E-06-0.02371493E-10 0.06477756E+05 0.07677874E+02 4 +CCL3CCLH2 53090C 2H 2CL 4 G 0200.00 5000.00 1500.00 1 + 0.01788619E+03 0.02281235E-01-0.04746598E-05 0.01962667E-09 0.02451768E-13 2 +-0.02496335E+06-0.06312883E+03 0.03463508E+02 0.04144805E+00-0.04421053E-03 3 + 0.02320525E-06-0.04772525E-10-0.02028144E+06 0.01275956E+03 4 +CCL3CCLO 40992C 2 O 1CL 4 G 0200.00 4000.00 1500.00 1 + 0.01687401E+03 0.01341876E-01-0.04555006E-05 0.07178333E-09-0.04348641E-13 2 +-0.03442278E+06-0.05295025E+03 0.06334167E+02 0.03461171E+00-0.04173791E-03 3 + 0.02324686E-06-0.04882451E-10-0.03152121E+06 0.07697654E+01 4 +CCL3CH2 53090C 2H 2CL 3 G 0200.00 5000.00 1500.00 1 + 0.01468243E+03 0.02202649E-01-0.03960690E-05 0.02319280E-10 0.03655521E-13 2 + 0.03875531E+05-0.04495230E+03 0.05008132E+02 0.03031103E+00-0.03453620E-03 3 + 0.01951049E-06-0.04245840E-10 0.06936588E+05 0.05474640E+02 4 +CCL3CHCL 53090C 2H 1CL 4 G 0200.00 5000.00 1500.00 1 + 0.01610198E+03 0.01597223E-01-0.04069892E-05 0.04158083E-09-0.01105635E-13 2 +-0.02318814E+04-0.04936573E+03 0.05761929E+02 0.03433482E+00-0.04163980E-03 3 + 0.02362341E-06-0.05054182E-10 0.02663920E+05 0.03399588E+02 4 +CCL3CHO 53090C 2H 1O 1CL 3G 0200.00 5000.00 1500.00 1 + 0.01532135E+03 0.01914228E-01-0.03622777E-05 0.05526564E-10 0.03016202E-13 2 +-0.02886499E+06-0.04774516E+03 0.05016867E+02 0.02961902E+00-0.03140321E-03 3 + 0.01666643E-06-0.03481662E-10-0.02544921E+06 0.06644422E+02 4 +CCL3OO 53090C 1O 2CL 3 G 0200.00 5000.00 1500.00 1 + 0.01473249E+03 0.08345102E-02-0.03627944E-05 0.07101159E-09-0.05165897E-13 2 +-0.05526644E+05-0.04381961E+03 0.04317420E+02 0.03486414E+00-0.04287094E-03 3 + 0.02371950E-06-0.04903871E-10-0.02855912E+05 0.08720693E+02 4 +CCL4 40992C 1CL 4 G 0200.00 4000.00 1500.00 1 + 0.01222570E+03 0.07440275E-02-0.03141658E-05 0.06499383E-09-0.05330319E-13 2 +-0.01439931E+06-0.03133566E+03 0.05107111E+02 0.02402469E+00-0.02980593E-03 3 + 0.01678331E-06-0.03535253E-10-0.01253198E+06 0.04640845E+02 4 +CCLH2OO 53090C 1H 2O 2CL 1G 0200.00 5000.00 1500.00 1 + 0.01131351E+03 0.02330645E-01-0.03546376E-05-0.02064087E-09 0.06154082E-13 2 +-0.04225590E+05-0.03183829E+03 0.01583541E+02 0.02745395E+00-0.02803155E-03 3 + 0.01491598E-06-0.03172720E-10-0.08340802E+04 0.01999023E+03 4 +CH 121286C 1H 1 G 0200.00 5000.00 1000.00 1 + 0.02196223E+02 0.02340381E-01-0.07058201E-05 0.09007582E-09-0.03855040E-13 2 + 0.07086723E+06 0.09178373E+02 0.03200202E+02 0.02072876E-01-0.05134431E-04 3 + 0.05733890E-07-0.01955533E-10 0.07045259E+06 0.03331588E+02 4 +CH+ 121286C 1H 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02753358E+02 0.01552900E-01-0.05368453E-05 0.08921772E-09-0.05416801E-13 2 + 0.01948467E+07 0.04654892E+02 0.03327207E+02 0.01347051E-01-0.03895861E-04 3 + 0.05129390E-07-0.02054576E-10 0.01946452E+07 0.01408474E+02 4 +CH2 120186C 1H 2 G 0250.00 4000.00 1000.00 1 + 0.03636408E+02 0.01933057E-01-0.01687016E-05-0.01009899E-08 0.01808256E-12 2 + 0.04534134E+06 0.02156561E+02 0.03762237E+02 0.01159819E-01 0.02489585E-05 3 + 0.08800836E-08-0.07332435E-11 0.04536791E+06 0.01712578E+02 4 +CH2(S) 31287C 1H 2 G 0200.00 4000.00 1000.00 1 + 0.03552889E+02 0.02066788E-01-0.01914116E-05-0.01104673E-08 0.02021350E-12 2 + 0.04984975E+06 0.01686570E+02 0.03971265E+02-0.01699089E-02 0.01025369E-04 3 + 0.02492551E-07-0.01981266E-10 0.04989368E+06 0.05753207E+00 4 +CH2CCL 53090C 2H 2CL 1 G 0200.00 5000.00 1500.00 1 + 0.09117805E+02 0.02336015E-01-0.03466390E-05-0.03584809E-09 0.08154328E-13 2 + 0.02697366E+06-0.02251742E+03 0.01553177E+02 0.02243159E+00-0.02366950E-03 3 + 0.01323270E-06-0.02931823E-10 0.02962339E+06 0.01769303E+03 4 +CH2CCL2 53090C 2H 2CL 2 G 0200.00 5000.00 1500.00 1 + 0.01169451E+03 0.02435982E-01-0.03733045E-05-0.01419412E-09 0.05199337E-13 2 +-0.04601975E+05-0.03547415E+03 0.01527166E+02 0.02983780E+00-0.03171097E-03 3 + 0.01728380E-06-0.03709638E-10-0.01173986E+05 0.01827540E+03 4 +CH2CCLOH 53090C 2H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01267601E+03 0.03201392E-01-0.04788878E-05-0.02136104E-09 0.07030796E-13 2 +-0.02402379E+06-0.04128498E+03 0.06647840E+01 0.03723168E+00-0.04115206E-03 3 + 0.02307135E-06-0.05021609E-10-0.02012318E+06 0.02165270E+03 4 +CH2CHCCH 82489C 4H 4 G 0200.00 4000.00 1000.00 1 + 0.01069777E+03 0.06982014E-01-0.06567747E-05-0.03884517E-08 0.07200946E-12 2 + 0.03034803E+06-0.03128430E+03 0.03233893E+02 0.01865634E+00 0.01270320E-04 3 +-0.09410096E-07 0.02956111E-10 0.03301097E+06 0.09922676E+02 4 +CH2CHCCH2 82489C 4H 5 G 0200.00 4000.00 1000.00 1 + 0.01199776E+03 0.07990580E-01-0.08098173E-05-0.04568733E-08 0.08636910E-12 2 + 0.03228493E+06-0.03528495E+03 0.03879443E+02 0.01997664E+00 0.01872777E-04 3 +-0.09306953E-07 0.02386116E-10 0.03526859E+06 0.09842152E+02 4 +CH2CHCH2 82489C 3H 5 G 0200.00 4000.00 1000.00 1 + 0.09651539E+02 0.08075596E-01-0.07965424E-05-0.04650696E-08 0.08603280E-12 2 + 0.01530096E+06-0.02686774E+03 0.02276486E+02 0.01985564E+00 0.01123842E-04 3 +-0.01014576E-06 0.03441342E-10 0.01789497E+06 0.01372515E+03 4 +CH2CHCHCH 82489C 4H 5 G 0200.00 4000.00 1000.00 1 + 0.01286597E+03 0.07943369E-01-0.08626466E-05-0.04655635E-08 0.08951131E-12 2 + 0.03783552E+06-0.04182502E+03 0.02995240E+02 0.02288456E+00 0.01975471E-04 3 +-0.01148245E-06 0.03197824E-10 0.04142218E+06 0.01289454E+03 4 +CH2CHCHCH2 120189C 4H 6 G 0200.00 4000.00 1000.00 1 + 0.01254437E+03 0.09596525E-01-0.09187012E-05-0.05429640E-08 0.01005364E-11 2 + 0.08597330E+05-0.04217451E+03 0.01931624E+02 0.02479030E+00 0.03018071E-04 3 +-0.01154686E-06 0.02586623E-10 0.01255468E+06 0.01701999E+03 4 +CH2CHCL 53090C 2H 3CL 1 G 0200.00 5000.00 1500.00 1 + 0.01029820E+03 0.03042926E-01-0.03881390E-05-0.04925565E-09 0.01005072E-12 2 +-0.02492899E+05-0.03108614E+03 0.01118026E+01 0.02796358E+00-0.02726559E-03 3 + 0.01463257E-06-0.03204075E-10 0.01287844E+05 0.02381617E+03 4 +CH2CL 53090C 1H 2CL 1 G 0200.00 5000.00 1500.00 1 + 0.06822515E+02 0.01659744E-01-0.02075515E-05-0.02793518E-09 0.05509087E-13 2 + 0.01080454E+06-0.01090504E+03 0.02419924E+02 0.01303317E+00-0.01356559E-03 3 + 0.07836108E-07-0.01800535E-10 0.01243112E+06 0.01269845E+03 4 +CH2CL2 112989C 1H 2CL 2 G 0200.00 5000.00 1000.00 1 + 0.05917327E+02 0.06762395E-01-0.02676163E-04 0.04856687E-08-0.03316974E-12 2 +-0.01385926E+06-0.03877739E+02 0.01423284E+02 0.02116658E+00-0.02178088E-03 3 + 0.01345873E-06-0.03811649E-10-0.01268664E+06 0.01893445E+03 4 +CH2CLCCL2 53090C 2H 2CL 3 G 0200.00 5000.00 1500.00 1 + 0.01438156E+03 0.02379635E-01-0.04167426E-05-0.02445116E-10 0.04499574E-13 2 +-0.02746720E+05-0.04351762E+03 0.03351194E+02 0.03297633E+00-0.03604139E-03 3 + 0.01977453E-06-0.04233823E-10 0.08620011E+04 0.01444760E+03 4 +CH2CLCCLO 53090C 2H 2O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01392027E+03 0.02589602E-01-0.04141892E-05-0.01643169E-09 0.06237174E-13 2 +-0.03517257E+06-0.04389503E+03 0.02705995E+02 0.03210128E+00-0.03357727E-03 3 + 0.01814310E-06-0.03890009E-10-0.03130905E+06 0.01566013E+03 4 +CH2CLCH2 53090C 2H 4CL 1 G 0200.00 5000.00 1500.00 1 + 0.01167011E+03 0.03554722E-01-0.04124241E-05-0.07276110E-09 0.01316756E-12 2 + 0.06201629E+05-0.03604549E+03 0.01635864E+02 0.02680201E+00-0.02491421E-03 3 + 0.01349235E-06-0.03046571E-10 0.01014294E+06 0.01864248E+03 4 +CH2CLCH2CL 53090C 2H 4CL 2 G 0200.00 5000.00 1500.00 1 + 0.01443143E+03 0.03836770E-01-0.05299122E-05-0.05165412E-09 0.01177636E-12 2 +-0.02296285E+06-0.05130124E+03-0.02436500E+01 0.04032574E+00-0.03956993E-03 3 + 0.02074245E-06-0.04412604E-10-0.01767830E+06 0.02741366E+03 4 +CH2CLCHCL 53090C 2H 3CL 2 G 0200.00 5000.00 1500.00 1 + 0.01295593E+03 0.03001689E-01-0.04165162E-05-0.03909055E-09 0.09041090E-13 2 + 0.09932077E+04-0.03925387E+03 0.02276185E+02 0.03011401E+00-0.03047664E-03 3 + 0.01654880E-06-0.03613198E-10 0.04836340E+05 0.01792166E+03 4 +CH2CLCHCL2 53090C 2H 3CL 3 G 0200.00 5000.00 1500.00 1 + 0.01618739E+03 0.03047681E-01-0.05011496E-05-0.01596701E-09 0.07107547E-13 2 +-0.02474417E+06-0.05695454E+03 0.01239011E+02 0.04148444E+00-0.04188654E-03 3 + 0.02163214E-06-0.04467364E-10-0.01960717E+06 0.02257856E+03 4 +CH2CLCHO 53090C 2H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01227955E+03 0.03320979E-01-0.04106710E-05-0.06199826E-09 0.01190594E-12 2 +-0.02678416E+06-0.03762356E+03 0.06553003E+01 0.02959046E+00-0.02635056E-03 3 + 0.01327545E-06-0.02838288E-10-0.02227005E+06 0.02576797E+03 4 +CH2CO 121686C 2H 2O 1 G 0200.00 5000.00 1000.00 1 + 0.06038817E+02 0.05804840E-01-0.01920954E-04 0.02794485E-08-0.01458868E-12 2 +-0.08583402E+05-0.07657581E+02 0.02974971E+02 0.01211871E+00-0.02345046E-04 3 +-0.06466685E-07 0.03905649E-10-0.07632637E+05 0.08673553E+02 4 +CH2F2 82489C 1H 2F 2 G 0200.00 5000.00 1000.00 1 + 0.04730052E+02 0.07997300E-01-0.03186045E-04 0.05801160E-08-0.03967925E-12 2 +-0.05637288E+06-0.04954843E+01 0.03669434E+01 0.02168917E+00-0.02441913E-03 3 + 0.01942310E-06-0.06978343E-10-0.05510103E+06 0.02202215E+03 4 +CH2HCO 110393O 1H 3C 2 G 0200.00 5000.00 1000.00 1 + 0.05975670E+02 0.08130591E-01-0.02743624E-04 0.04070304E-08-0.02176017E-12 2 + 0.04903218E+04-0.05045251E+02 0.03409062E+02 0.01073857E+00 0.01891492E-04 3 +-0.07158583E-07 0.02867385E-10 0.01521477E+05 0.09558290E+02 4 +CH2O 121286C 1H 2O 1 G 0200.00 5000.00 1000.00 1 + 0.02995606E+02 0.06681321E-01-0.02628955E-04 0.04737153E-08-0.03212517E-12 2 +-0.01532037E+06 0.06912572E+02 0.01652731E+02 0.01263144E+00-0.01888168E-03 3 + 0.02050031E-06-0.08413237E-10-0.01486540E+06 0.01378482E+03 4 +CH2OH 120186H 3C 1O 1 G 0250.00 4000.00 1000.00 1 + 0.06327520E+02 0.03608271E-01-0.03201547E-05-0.01938750E-08 0.03509705E-12 2 +-0.04474509E+05-0.08329366E+02 0.02862628E+02 0.01001527E+00-0.05285436E-05 3 +-0.05138540E-07 0.02246041E-10-0.03349679E+05 0.01039794E+03 4 +CH2OHCCL2 53090C 2H 3O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01602181E+03 0.02846352E-01-0.04974218E-05-0.02167450E-10 0.05246046E-13 2 +-0.01829579E+06-0.05402134E+03 0.01922940E+02 0.04158207E+00-0.04427505E-03 3 + 0.02343015E-06-0.04851868E-10-0.01375512E+06 0.02001902E+03 4 +CH2OHCHCL 53090C 2H 4O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01446298E+03 0.03569514E-01-0.05419118E-05-0.02862176E-09 0.08920560E-13 2 +-0.01475559E+06-0.04942815E+03 0.03505696E+01 0.04212749E+00-0.04493839E-03 3 + 0.02448187E-06-0.05236589E-10-0.01007314E+06 0.02495261E+03 4 +CH2SICL 40992H 2C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.09915966E+02 0.01896319E-01-0.03304238E-05-0.03882353E-09 0.01089169E-12 2 + 0.01906587E+06-0.02389137E+03 0.03514077E+02 0.01959495E+00-0.02147274E-03 3 + 0.01214017E-06-0.02691323E-10 0.02123280E+06 0.09882836E+02 4 +CH2SICL3 40992H 2C 1SI 1CL 3G 0200.00 4000.00 1500.00 1 + 0.01476240E+03 0.02289499E-01-0.04148337E-05-0.01526182E-09 0.07724698E-13 2 +-0.04947703E+06-0.04020475E+03 0.06718170E+02 0.02712662E+00-0.03168529E-03 3 + 0.01809641E-06-0.03938906E-10-0.04710183E+06 0.01167360E+02 4 +CH2SIH2CL 40992H 4C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01260561E+03 0.03468476E-01-0.04606434E-05-0.09748147E-09 0.02077681E-12 2 +-0.05748538E+05-0.03743183E+03 0.02426229E+02 0.03028056E+00-0.03039200E-03 3 + 0.01612599E-06-0.03425629E-10-0.02268891E+05 0.01657736E+03 4 +CH2SIHCL2 40992H 3C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01365092E+03 0.02909029E-01-0.04521180E-05-0.05274788E-09 0.01389320E-12 2 +-0.02781262E+06-0.03810353E+03 0.04180967E+02 0.03005761E+00-0.03288772E-03 3 + 0.01822025E-06-0.03925700E-10-0.02480330E+06 0.01134845E+03 4 +CH3 121286C 1H 3 G 0200.00 5000.00 1000.00 1 + 0.02844052E+02 0.06137974E-01-0.02230345E-04 0.03785161E-08-0.02452159E-12 2 + 0.01643781E+06 0.05452697E+02 0.02430443E+02 0.01112410E+00-0.01680220E-03 3 + 0.01621829E-06-0.05864953E-10 0.01642378E+06 0.06789794E+02 4 +CH3C(O)CL 53090C 2H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01240568E+03 0.03210496E-01-0.03737157E-05-0.06739592E-09 0.01219122E-12 2 +-0.03432420E+06-0.03909195E+03 0.02275117E+02 0.02518533E+00-0.02152420E-03 3 + 0.01084005E-06-0.02369191E-10-0.03024376E+06 0.01657016E+03 4 +CH3CC 82489C 3H 3 G 0200.00 4000.00 1000.00 1 + 0.07640221E+02 0.05233556E-01-0.05053635E-05-0.02919772E-08 0.05445700E-12 2 + 0.05909763E+06-0.01629573E+03 0.03798751E+02 0.08749062E-01 0.02523014E-04 3 +-0.01529373E-07-0.01410562E-10 0.06077425E+06 0.05989223E+02 4 +CH3CCCH2 82489C 4H 5 G 0200.00 4000.00 1000.00 1 + 0.01156506E+03 0.08030297E-01-0.07649450E-05-0.04476534E-08 0.08313260E-12 2 + 0.03256813E+06-0.03014066E+03 0.05068450E+02 0.01571747E+00 0.02968975E-04 3 +-0.04990587E-07-0.02984224E-11 0.03518855E+06 0.06791893E+02 4 +CH3CCCH3 120189C 4H 6 G 0200.00 4000.00 1000.00 1 + 0.01133658E+03 0.01005764E+00-0.09511323E-05-0.05660497E-08 0.01049451E-11 2 + 0.01547659E+06-0.03350867E+03 0.04077105E+02 0.01703159E+00 0.04707490E-04 3 +-0.03767240E-07-0.02066963E-10 0.01859757E+06 0.08444801E+02 4 +CH3CCH2 82489C 3H 5 G 0200.00 4000.00 1000.00 1 + 0.09101018E+02 0.07964168E-01-0.07884945E-05-0.04562036E-08 0.08529212E-12 2 + 0.02670680E+06-0.02150559E+03 0.03385811E+02 0.01404534E+00 0.03204127E-04 3 +-0.03824120E-07-0.09053742E-11 0.02909066E+06 0.01126649E+03 4 +CH3CCL 53090C 2H 3CL 1 G 0200.00 5000.00 1500.00 1 + 0.01023962E+03 0.02767116E-01-0.03228853E-05-0.05752548E-09 0.01043430E-12 2 + 0.02633607E+06-0.02806184E+03 0.01687397E+02 0.02164347E+00-0.01891466E-03 3 + 0.09699015E-07-0.02134580E-10 0.02975387E+06 0.01882236E+03 4 +CH3CCL2 53090C 2H 3CL 2 G 0200.00 5000.00 1500.00 1 + 0.01300035E+03 0.02940485E-01-0.03746456E-05-0.05040644E-09 0.01006332E-12 2 +-0.04228816E+04-0.03979863E+03 0.03213473E+02 0.02587378E+00-0.02419993E-03 3 + 0.01273817E-06-0.02788481E-10 0.03325663E+05 0.01333320E+03 4 +CH3CCL3 53090C 2H 3CL 3 G 0200.00 5000.00 1500.00 1 + 0.01637160E+03 0.02935021E-01-0.04836108E-05-0.01454723E-09 0.06731691E-13 2 +-0.02378095E+06-0.05941864E+03 0.02484363E+02 0.03909474E+00-0.04013637E-03 3 + 0.02110179E-06-0.04418213E-10-0.01902540E+06 0.01435603E+03 4 +CH3CCLO 53090C 2H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01240595E+03 0.03210266E-01-0.03736397E-05-0.06740236E-09 0.01219081E-12 2 +-0.03432283E+06-0.03909605E+03 0.02277402E+02 0.02517912E+00-0.02151632E-03 3 + 0.01083524E-06-0.02368079E-10-0.03024308E+06 0.01655556E+03 4 +CH3CH2CCH 120189C 4H 6 G 0200.00 4000.00 1000.00 1 + 0.01200695E+03 0.09576069E-01-0.08995018E-05-0.05369808E-08 0.09934174E-12 2 + 0.01729420E+06-0.03802692E+03 0.03726043E+02 0.02053493E+00 0.03021439E-04 3 +-0.08131813E-07 0.01095280E-10 0.02048821E+06 0.08538826E+02 4 +CH3CH2CH2C 62090C 4H 10 G 0200.00 4000.00 1500.00 1 + 0.02032597E+03 0.01025189E+00-0.09348665E-05-0.04706743E-08 0.08327283E-12 2 +-0.02590868E+06-0.08998431E+03-0.02544545E+02 0.05770712E+00-0.04104933E-03 3 + 0.01684742E-06-0.03176653E-10-0.01682847E+06 0.03586176E+03 4 +CH3CH2CL 53090C 2H 5CL 1 G 0200.00 5000.00 1500.00 1 + 0.01301118E+03 0.04448941E-01-0.05200473E-05-0.09119710E-09 0.01658842E-12 2 +-0.02013503E+06-0.04677847E+03-0.06981899E+01 0.03567705E+00-0.03230260E-03 3 + 0.01689622E-06-0.03727523E-10-0.01476054E+06 0.02802219E+03 4 +CH3CH2O 103190C 2H 5O 1 G 0200.00 4000.00 1500.00 1 + 0.01187115E+03 0.05390415E-01-0.04990159E-05-0.02399585E-08 0.04255456E-12 2 +-0.05950457E+05-0.03996585E+03 0.06904570E+01 0.02951398E+00-0.02245116E-03 3 + 0.01011600E-06-0.02044101E-10-0.01559918E+05 0.02130230E+03 4 +CH3CHCH 82489C 3H 5 G 0200.00 4000.00 1000.00 1 + 0.09209764E+02 0.07871413E-01-0.07724523E-05-0.04497357E-08 0.08377272E-12 2 + 0.02853967E+06-0.02232370E+03 0.03161863E+02 0.01518100E+00 0.02722659E-04 3 +-0.05177112E-07 0.05435286E-12 0.03095548E+06 0.01197973E+03 4 +CH3CHCL 53090C 2H 4CL 1 G 0200.00 5000.00 1500.00 1 + 0.01166291E+03 0.03539284E-01-0.03858423E-05-0.08186871E-09 0.01407549E-12 2 + 0.03696642E+05-0.03616108E+03 0.01903574E+02 0.02438193E+00-0.02062779E-03 3 + 0.01068382E-06-0.02414461E-10 0.07722870E+05 0.01768152E+03 4 +CH3CHCL2 53090C 2H 4CL 2 G 0200.00 5000.00 1500.00 1 + 0.01454311E+03 0.03772378E-01-0.05189301E-05-0.05141063E-09 0.01163076E-12 2 +-0.02277045E+06-0.05147426E+03 0.04510764E+01 0.03884901E+00-0.03832912E-03 3 + 0.02029502E-06-0.04357591E-10-0.01767234E+06 0.02414546E+03 4 +CH3CHOH 103190C 2H 5O 1 G 0200.00 4000.00 1500.00 1 + 0.01161148E+03 0.05173117E-01-0.04856685E-05-0.02202895E-08 0.03913721E-12 2 +-0.01248811E+06-0.03688213E+03 0.01415940E+02 0.02870648E+00-0.02373820E-03 3 + 0.01148886E-06-0.02391420E-10-0.08638718E+05 0.01844256E+03 4 +CH3CL 112989C 1H 3CL 1 G 0200.00 5000.00 1000.00 1 + 0.03633876E+02 0.08664625E-01-0.03343871E-04 0.05950130E-08-0.04001401E-12 2 +-0.01177659E+06 0.04430651E+02 0.04621901E+01 0.02068247E+00-0.02553133E-03 3 + 0.02160311E-06-0.07706816E-10-0.01093667E+06 0.02032977E+03 4 +CH3CO 120186C 2H 3O 1 G 0200.00 5000.00 1000.00 1 + 0.05612279E+02 0.08449886E-01-0.02854147E-04 0.04238376E-08-0.02268404E-12 2 +-0.05187863E+05-0.03274949E+02 0.03125278E+02 0.09778220E-01 0.04521448E-04 3 +-0.09009462E-07 0.03193718E-10-0.04108508E+05 0.01122885E+03 4 +CH3F 82489C 1H 3F 1 G 0200.00 5000.00 1000.00 1 + 0.03014978E+02 0.09314397E-01-0.03611697E-04 0.06443728E-08-0.04339594E-12 2 +-0.02977838E+06 0.06323815E+02 0.02600911E+01 0.02000788E+00-0.02662585E-03 3 + 0.02561177E-06-0.09935237E-10-0.02896233E+06 0.02031799E+03 4 +CH3HCO 120186C 2O 1H 4 G 0200.00 5000.00 1000.00 1 + 0.05868650E+02 0.01079424E+00-0.03645530E-04 0.05412912E-08-0.02896844E-12 2 +-0.02264569E+06-0.06012946E+02 0.02505695E+02 0.01336991E+00 0.04671953E-04 3 +-0.01128140E-06 0.04263566E-10-0.02124589E+06 0.01335089E+03 4 +CH3NO 103190C 1H 3N 1O 1G 0200.00 4000.00 1500.00 1 + 0.08820547E+02 0.03706233E-01-0.02894741E-05-0.01897910E-08 0.03237544E-12 2 + 0.05362862E+05-0.02213220E+03 0.02109955E+02 0.01517822E+00-0.07071789E-04 3 + 0.01510611E-07-0.01604204E-11 0.08293612E+05 0.01569702E+03 4 +CH3NO2 103190C 1H 3N 1O 2G 0200.00 4000.00 1500.00 1 + 0.01090158E+03 0.04326381E-01-0.04203548E-05-0.01893071E-08 0.03417444E-12 2 +-0.01370862E+06-0.03073183E+03 0.03224717E+01 0.02665147E+00-0.01930574E-03 3 + 0.07762620E-07-0.01398746E-10-0.09597527E+05 0.02726156E+03 4 +CH3O 121686C 1H 3O 1 G 0200.00 3000.00 1000.00 1 + 0.03770800E+02 0.07871497E-01-0.02656384E-04 0.03944431E-08-0.02112616E-12 2 + 0.01278325E+04 0.02929575E+02 0.02106204E+02 0.07216595E-01 0.05338472E-04 3 +-0.07377636E-07 0.02075611E-10 0.09786011E+04 0.01315218E+03 4 +CH3OCH3 103190C 2H 6O 1 G 0200.00 4000.00 1500.00 1 + 0.01228100E+03 0.06711031E-01-0.04726871E-05-0.03636409E-08 0.06084545E-12 2 +-0.02839743E+06-0.04434692E+03 0.01245246E+02 0.02381198E+00-0.08266949E-04 3 + 0.03068452E-08 0.01909248E-11-0.02335996E+06 0.01855817E+03 4 +CH3OCL 53090C 1H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01022518E+03 0.02780047E-01-0.03331582E-05-0.05437858E-09 0.01012799E-12 2 +-0.01172886E+06-0.02912014E+03 0.01575392E+02 0.02255642E+00-0.02052644E-03 3 + 0.01075312E-06-0.02371140E-10-0.08346834E+05 0.01804593E+03 4 +CH3OH 121686C 1H 4O 1 G 0200.00 5000.00 1000.00 1 + 0.04029061E+02 0.09376593E-01-0.03050254E-04 0.04358793E-08-0.02224723E-12 2 +-0.02615791E+06 0.02378196E+02 0.02660115E+02 0.07341508E-01 0.07170051E-04 3 +-0.08793194E-07 0.02390570E-10-0.02535348E+06 0.01123263E+03 4 +CH3ONO 103190C 1H 3N 1O 2G 0200.00 4000.00 1500.00 1 + 0.01136129E+03 0.04159349E-01-0.04145670E-05-0.01695140E-08 0.03028732E-12 2 +-0.01281482E+06-0.03545435E+03 0.01490345E+02 0.02645433E+00-0.02112332E-03 3 + 0.09414399E-07-0.01811205E-10-0.09125782E+05 0.01813766E+03 4 +CH3ONO2 103190C 1H 3N 1O 3G 0200.00 4000.00 1500.00 1 + 0.01436189E+03 0.04112243E-01-0.05113052E-05-0.01496436E-08 0.03012156E-12 2 +-0.01972440E+06-0.05131842E+03 0.07803354E+01 0.03454204E+00-0.02822328E-03 3 + 0.01232324E-06-0.02302164E-10-0.01465346E+06 0.02245752E+03 4 +CH3SICL 10891C 1H 3CL 1SI 1G 0200.00 4000.00 1500.00 1 + 0.01001981E+03 0.03098227E-01-0.03223524E-05-0.01222654E-08 0.02254960E-12 2 +-0.05427416E+05-0.02357211E+03 0.03485139E+02 0.01833182E+00-0.01573128E-03 3 + 0.07856310E-07-0.01670946E-10-0.02954042E+05 0.01186948E+03 4 +CH3SIH2SIH 10891C 2H 10SI 2 G 0200.00 4000.00 1500.00 1 + 0.02302241E+03 0.08819047E-01-0.08859755E-05-0.03700889E-08 0.06746256E-12 2 +-0.01577058E+06-0.09458104E+03 0.02492915E+02 0.05396367E+00-0.04281663E-03 3 + 0.01967585E-06-0.03981630E-10-0.07813141E+05 0.01758364E+03 4 +CH3SIH2SIH2CH3 61991H 10C 2SI 2 G 0200.00 2500.00 1500.00 1 + 0.01948332E+03 0.01195163E+00-0.02653155E-05-0.01489522E-07 0.03049901E-11 2 +-0.01405639E+06-0.07368209E+03 0.03129493E+02 0.05016930E+00-0.03522061E-03 3 + 0.01354295E-06-0.02274339E-10-0.08303932E+05 0.01426819E+03 4 +CH3SIHCL2 10891C 1CL 2H 4SI 1G 0200.00 4000.00 1500.00 1 + 0.01459367E+03 0.04005638E-01-0.04816391E-05-0.01336359E-08 0.02648177E-12 2 +-0.05325682E+06-0.04689839E+03 0.04156949E+02 0.02994072E+00-0.02797859E-03 3 + 0.01431829E-06-0.03010165E-10-0.04952345E+06 0.09043929E+02 4 +CH4 121286C 1H 4 G 0200.00 5000.00 1000.00 1 + 0.01683479E+02 0.01023724E+00-0.03875129E-04 0.06785585E-08-0.04503423E-12 2 +-0.01008079E+06 0.09623395E+02 0.07787415E+01 0.01747668E+00-0.02783409E-03 3 + 0.03049708E-06-0.01223931E-09-0.09825229E+05 0.01372219E+03 4 +CHCL 112989C 1H 1CL 1 G 0200.00 5000.00 1200.00 1 + 0.03216518E+02 0.05976969E-01-0.02918238E-04 0.05912801E-08-0.04297945E-12 2 + 0.03879839E+06 0.07793842E+02 0.02781263E+02 0.07805384E-01-0.01063711E-03 3 + 0.01065441E-06-0.03916797E-10 0.03916144E+06 0.01045515E+03 4 +CHCL2 40992H 1C 1CL 2 G 0200.00 4000.00 1500.00 1 + 0.06912875E+02 0.01251733E-01-0.01973086E-05-0.02153722E-09 0.05853635E-13 2 + 0.07229632E+05-0.07968135E+02 0.02809820E+02 0.01295936E+00-0.01392392E-03 3 + 0.07533319E-07-0.01588448E-10 0.08515305E+05 0.01343798E+03 4 +CHCL2CCL2 40992H 1C 2CL 4 G 0200.00 4000.00 1500.00 1 + 0.01530640E+03 0.02140772E-01-0.04619954E-05 0.08299157E-10 0.05236928E-13 2 +-0.01524306E+05-0.04358303E+03 0.04207169E+02 0.03437580E+00-0.03802411E-03 3 + 0.02026572E-06-0.04164115E-10 0.01811422E+05 0.01398021E+03 4 +CHCL2CCLO 40992H 1C 2 O 1CL 3G 0200.00 4000.00 1500.00 1 + 0.01488775E+03 0.02323698E-01-0.04365744E-05-0.01680889E-09 0.08613253E-13 2 +-0.03483792E+06-0.04504932E+03 0.04593886E+02 0.03118954E+00-0.03338775E-03 3 + 0.01763042E-06-0.03630728E-10-0.03160866E+06 0.08756166E+02 4 +CHCL2CH2 53090C 2H 3CL 2 G 0200.00 5000.00 1500.00 1 + 0.01306632E+03 0.02964322E-01-0.04303601E-05-0.03173131E-09 0.08244908E-13 2 + 0.04594697E+05-0.03814765E+03 0.02234889E+02 0.03152885E+00-0.03307990E-03 3 + 0.01825221E-06-0.03994163E-10 0.08375531E+05 0.01944506E+03 4 +CHCL2CHCL 53090C 2H 2CL 3 G 0200.00 5000.00 1500.00 1 + 0.01445051E+03 0.02336553E-01-0.04132107E-05-0.05243785E-11 0.04204775E-13 2 +-0.05183250E+04-0.04362699E+03 0.03789098E+02 0.03243338E+00-0.03598339E-03 3 + 0.01993302E-06-0.04287482E-10 0.02920910E+05 0.01221991E+03 4 +CHCL2CHCL2 53090C 2H 2CL 4 G 0200.00 5000.00 1500.00 1 + 0.01745859E+03 0.02484178E-01-0.05127803E-05 0.02266909E-09 0.02371932E-13 2 +-0.02510699E+06-0.06065213E+03 0.02711746E+02 0.04441279E+00-0.04905962E-03 3 + 0.02632472E-06-0.05466293E-10-0.02052421E+06 0.01624857E+03 4 +CHCL3 40992H 1C 1CL 3 G 0200.00 4000.00 1500.00 1 + 0.01034980E+03 0.01690302E-01-0.03209168E-05-0.09502160E-10 0.05845725E-13 2 +-0.01567029E+06-0.02558805E+03 0.02905633E+02 0.02315061E+00-0.02534675E-03 3 + 0.01356724E-06-0.02810882E-10-0.01339798E+06 0.01310749E+03 4 +CHCLCCL 40992H 1C 2CL 2 G 0200.00 4000.00 1500.00 1 + 0.01027647E+03 0.01733039E-01-0.03161161E-05-0.08153494E-10 0.05443014E-13 2 + 0.02418877E+06-0.02436862E+03 0.02625129E+02 0.02366908E+00-0.02583240E-03 3 + 0.01383374E-06-0.02870111E-10 0.02654214E+06 0.01545629E+03 4 +CHCLCCLOH 53090C 2H 2O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01412206E+03 0.02583764E-01-0.04576900E-05 0.05215675E-10 0.03521300E-13 2 +-0.02752482E+06-0.04544297E+03 0.02020547E+02 0.03810981E+00-0.04280147E-03 3 + 0.02343806E-06-0.04934735E-10-0.02385982E+06 0.01729375E+03 4 +CHCLCH 53090C 2H 2CL 1 G 0200.00 5000.00 1500.00 1 + 0.09924881E+02 0.01618108E-01-0.02995768E-05-0.09718417E-11 0.03296695E-13 2 + 0.02834312E+06-0.02704593E+03 0.01190122E+02 0.02432800E+00-0.02555965E-03 3 + 0.01375158E-06-0.02941848E-10 0.03138157E+06 0.01944186E+03 4 +CHCLCHCL 53090C 2H 2CL 2 G 0200.00 5000.00 1500.00 1 + 0.01163648E+03 0.02461981E-01-0.03900520E-05-0.01521677E-09 0.05853766E-13 2 +-0.05593248E+05-0.03507354E+03 0.01054340E+02 0.03076645E+00-0.03252549E-03 3 + 0.01763454E-06-0.03774444E-10-0.02006846E+05 0.02094011E+03 4 +CHCLCHOH 53090C 2H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01285464E+03 0.03107712E-01-0.04837735E-05-0.02088657E-09 0.07393125E-13 2 +-0.02505588E+06-0.04274804E+03-0.02073397E+01 0.03868022E+00-0.04104567E-03 3 + 0.02211252E-06-0.04680556E-10-0.02074261E+06 0.02608356E+03 4 +CHCLOH 53090C 1H 2O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.09427376E+02 0.01722643E-01-0.02912707E-05-0.03765845E-10 0.03354461E-13 2 +-0.01224575E+06-0.02330123E+03 0.01319372E+02 0.02406119E+00-0.02560105E-03 3 + 0.01356738E-06-0.02812530E-10-0.09640457E+05 0.01925640E+03 4 +CHCLOHCH2 53090C 2H 4O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01438435E+03 0.03552541E-01-0.05033147E-05-0.04051247E-09 0.01001172E-12 2 +-0.01383899E+06-0.04819745E+03 0.01473757E+02 0.03764188E+00-0.03898776E-03 3 + 0.02112109E-06-0.04543830E-10-0.09395106E+05 0.02033823E+03 4 +CHCLOHCHCL 53090C 2H 3O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01567240E+03 0.02970040E-01-0.04827588E-05-0.01366600E-09 0.06500296E-13 2 +-0.01896002E+06-0.05132923E+03 0.02626025E+02 0.03856175E+00-0.04091474E-03 3 + 0.02190241E-06-0.04603080E-10-0.01468188E+06 0.01735864E+03 4 +CHF 82489C 1H 1F 1 G 0200.00 5000.00 1000.00 1 + 0.04242812E+02 0.02066316E-01-0.06527951E-05 0.01388700E-08-0.01213336E-12 2 + 0.01355982E+06 0.01680197E+02 0.03029061E+02 0.04850873E-01-0.04971679E-04 3 + 0.05277968E-07-0.02403154E-10 0.01401435E+06 0.08324101E+02 4 +CHF3 82489C 1H 1F 3 G 0200.00 5000.00 1000.00 1 + 0.06834333E+02 0.06248731E-01-0.02575750E-04 0.04809112E-08-0.03352074E-12 2 +-0.08663771E+06-0.01062741E+03 0.08725142E+01 0.02308432E+00-0.02123718E-03 3 + 0.01114428E-06-0.02909229E-10-0.08496391E+06 0.02021499E+03 4 +CHOHCLCCL2 53090C 2H 2O 1CL 3G 0200.00 5000.00 1500.00 1 + 0.01681824E+03 0.02450153E-01-0.04706624E-05 0.01313263E-09 0.03046283E-13 2 +-0.02253368E+06-0.05396958E+03 0.04216444E+02 0.03898554E+00-0.04360467E-03 3 + 0.02374677E-06-0.04984764E-10-0.01867017E+06 0.01152520E+03 4 +CHSICL 40992H 1C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.08205361E+02 0.01092172E-01-0.02021812E-05-0.04611367E-10 0.03306854E-13 2 + 0.04201323E+06-0.01240589E+03 0.04575767E+02 0.01266147E+00-0.01507699E-03 3 + 0.08704482E-07-0.01902710E-10 0.04304864E+06 0.06132926E+02 4 +CHSICL2 40992H 1C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01071823E+03 0.01148355E-01-0.02625783E-05 0.01567972E-09 0.01085455E-13 2 + 0.01124882E+06-0.02053734E+03 0.05945817E+02 0.01709681E+00-0.02135360E-03 3 + 0.01252863E-06-0.02749860E-10 0.01253413E+06 0.03573691E+02 4 +CHSICL3 40992H 1C 1SI 1CL 3G 0200.00 4000.00 1500.00 1 + 0.01359698E+03 0.01283679E-01-0.03320724E-05 0.03292615E-09-0.05463635E-14 2 +-0.02236189E+06-0.03349768E+03 0.07368467E+02 0.02227384E+00-0.02809218E-03 3 + 0.01644147E-06-0.03590729E-10-0.02071740E+06-0.02118077E+02 4 +CHSIH2CL 40992H 3C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01142815E+03 0.02475732E-01-0.03864817E-05-0.04667547E-09 0.01222497E-12 2 + 0.02085332E+06-0.03033129E+03 0.02869509E+02 0.02622702E+00-0.02794178E-03 3 + 0.01516891E-06-0.03231519E-10 0.02364000E+06 0.01462055E+03 4 +CHSIHCL 40992H 2C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.09716450E+02 0.01691882E-01-0.02846288E-05-0.02130090E-09 0.06948758E-13 2 + 0.03056780E+06-0.02079822E+03 0.04045980E+02 0.01850072E+00-0.02095734E-03 3 + 0.01185107E-06-0.02580401E-10 0.03232392E+06 0.08632908E+02 4 +CHSIHCL2 40992H 2C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01246646E+03 0.01911555E-01-0.03687550E-05-0.05466318E-10 0.05749803E-13 2 +-0.09679288E+04-0.03163481E+03 0.04853917E+02 0.02509790E+00-0.02916486E-03 3 + 0.01649649E-06-0.03563598E-10 0.01297543E+05 0.07606296E+02 4 +CL 42189CL 1 G 0200.00 5000.00 1000.00 1 + 0.02920237E+02-0.03597985E-02 0.01294294E-05-0.02162776E-09 0.01376517E-13 2 + 0.01371338E+06 0.03262690E+02 0.02381577E+02 0.08891079E-02 0.04070476E-05 3 +-0.02168943E-07 0.01160827E-10 0.01383999E+06 0.06021818E+02 4 +CL(CH3)SICH2 40992H 5C 2SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01496923E+03 0.05605854E-01-0.06191278E-05-0.02134591E-08 0.03977673E-12 2 +-0.01304066E+06-0.05036296E+03 0.02980753E+02 0.03627511E+00-0.03428566E-03 3 + 0.01799146E-06-0.03853029E-10-0.08814405E+05 0.01362870E+03 4 +CL2 42189CL 2 G 0200.00 5000.00 1000.00 1 + 0.04274587E+02 0.03717337E-02-0.01893490E-05 0.05337465E-09-0.05057602E-13 2 +-0.01331149E+05 0.02256947E+02 0.03439587E+02 0.02870774E-01-0.02385871E-04 3 + 0.02892918E-08 0.02915057E-11-0.01131787E+05 0.06471359E+02 4 +CL2CCCL2 40992C 2CL 4 G 0200.00 4000.00 1500.00 1 + 0.01440000E+03 0.01269397E-01-0.03525286E-05 0.04493620E-09-0.02348053E-13 2 +-0.08039017E+05-0.04321878E+03 0.05557831E+02 0.02778255E+00-0.03176769E-03 3 + 0.01706054E-06-0.03492940E-10-0.05495042E+05 0.02293508E+02 4 +CL2CCHCL 40992H 1C 2CL 3 G 0200.00 4000.00 1500.00 1 + 0.01278204E+03 0.02068630E-01-0.03764411E-05-0.09077792E-10 0.06116574E-13 2 +-0.06934337E+05-0.03655991E+03 0.03457684E+02 0.02848717E+00-0.03070062E-03 3 + 0.01624951E-06-0.03341401E-10-0.04047205E+05 0.01206381E+03 4 +CL2CCHO 40992H 1C 2 O 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01294627E+03 0.02168144E-01-0.04244587E-05-0.03590986E-09 0.01220303E-12 2 +-0.01144361E+06-0.03783814E+03 0.03400952E+02 0.02760695E+00-0.02843245E-03 3 + 0.01470263E-06-0.03017427E-10-0.08287517E+05 0.01257321E+03 4 +CL2CHOH 53090C 1H 2O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01129114E+03 0.02286704E-01-0.03461513E-05-0.01814480E-09 0.05661342E-13 2 +-0.03803060E+06-0.03079831E+03 0.02619078E+02 0.02601286E+00-0.02784252E-03 3 + 0.01528682E-06-0.03294008E-10-0.03513998E+06 0.01492462E+03 4 +CL2CO 40992C 1 O 1CL 2 G 0200.00 4000.00 1500.00 1 + 0.08764773E+02 0.08919938E-02-0.02237590E-05 0.01486621E-09 0.09630870E-14 2 +-0.02973390E+06-0.01732025E+03 0.03460242E+02 0.01632331E+00-0.01828304E-03 3 + 0.09805656E-07-0.02024319E-10-0.02813622E+06 0.01019127E+03 4 +CL2COH 53090C 1O 1H 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01026215E+03 0.01316796E-01-0.02754008E-05 0.01630771E-09 0.06472563E-14 2 +-0.01511655E+06-0.02298315E+03 0.03800719E+02 0.02204678E+00-0.02673857E-03 3 + 0.01531854E-06-0.03305323E-10-0.01332053E+06 0.09915879E+02 4 +CL2HCO 53090C 1H 1O 1CL 2G 0200.00 5000.00 1500.00 1 + 0.01051838E+03 0.01499316E-01-0.02927670E-05 0.07898750E-10 0.01988433E-13 2 +-0.06272394E+05-0.02634097E+03 0.02241202E+02 0.02456990E+00-0.02682371E-03 3 + 0.01443170E-06-0.03023080E-10-0.03624526E+05 0.01703508E+03 4 +CL2SI(CH3)2 40992H 6C 2SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01890988E+03 0.06245385E-01-0.06370532E-05-0.02508388E-08 0.04589637E-12 2 +-0.06523166E+06-0.06829627E+03 0.05958770E+02 0.03632045E+00-0.03098078E-03 3 + 0.01545683E-06-0.03292671E-10-0.06031232E+06 0.01996401E+02 4 +CL2SI(CH3)CH2 40992H 5C 2SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01795078E+03 0.05155757E-01-0.06049094E-05-0.01717793E-08 0.03355529E-12 2 +-0.03961749E+06-0.05949218E+03 0.05993815E+02 0.03621806E+00-0.03546358E-03 3 + 0.01906128E-06-0.04137511E-10-0.03541814E+06 0.04216162E+02 4 +CL2SICH2 40992H 2C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01186709E+03 0.02689241E-01-0.04231139E-05-0.05555102E-09 0.01367174E-12 2 +-0.02169965E+06-0.03225026E+03 0.04111900E+02 0.02637445E+00-0.02985130E-03 3 + 0.01679309E-06-0.03625511E-10-0.01940307E+06 0.07695176E+02 4 +CL2SICH3 40992H 3C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01285090E+03 0.03239360E-01-0.03774509E-05-0.01111777E-08 0.02163712E-12 2 +-0.03164727E+06-0.03531424E+03 0.05273286E+02 0.02205797E+00-0.02049425E-03 3 + 0.01060061E-06-0.02257829E-10-0.02891555E+06 0.05340218E+02 4 +CL2SISI 40992SI 2CL 2 G 0200.00 4000.00 1500.00 1 + 0.09706403E+02 0.03323652E-02-0.01679851E-05 0.04061274E-09-0.03746093E-13 2 + 0.01334060E+06-0.01565614E+03 0.06576632E+02 0.01105568E+00-0.01422816E-03 3 + 0.08199114E-07-0.01752833E-10 0.01412004E+06 0.06538601E-02 4 +CL2SISICL 40992SI 2CL 3 G 0200.00 4000.00 1500.00 1 + 0.01304318E+03-0.01847658E-03-0.02187635E-05 0.08817012E-09-0.01004063E-12 2 +-0.01640770E+06-0.02832289E+03 0.08389457E+02 0.01629172E+00-0.02138192E-03 3 + 0.01207431E-06-0.02508349E-10-0.01534318E+06-0.05268396E+02 4 +CL2SISICL2 40992SI 2CL 4 G 0200.00 4000.00 1500.00 1 + 0.01620538E+03 0.08400587E-04-0.02457560E-05 0.08992196E-09-0.09639101E-13 2 +-0.05343016E+06-0.04193027E+03 0.01077595E+03 0.01717615E+00-0.02131386E-03 3 + 0.01172528E-06-0.02417202E-10-0.05196762E+06-0.01431634E+03 4 +CL3CCO 81092C 2O 1CL 3 G 0200.00 5000.00 1400.00 1 + 0.01383246E+03 0.01240141E-01-0.03510210E-05 0.04103960E-09-0.01475220E-13 2 + 0.07499342E+07-0.03691505E+03 0.05016825E+02 0.02899350E+00-0.03563990E-03 3 + 0.02082488E-06-0.04661957E-10 0.07524076E+07 0.08141487E+02 4 +CL3CO 53090C 1O 1CL 3 G 0200.00 5000.00 1500.00 1 + 0.01208526E+03 0.07759038E-02-0.02700075E-05 0.04346263E-09-0.02671642E-13 2 +-0.06464079E+05-0.03099432E+03 0.04548646E+02 0.02463303E+00-0.02974898E-03 3 + 0.01647154E-06-0.03433021E-10-0.04416522E+05 0.07360693E+02 4 +CL3COH 53090C 1O 1H 1CL 3G 0200.00 5000.00 1500.00 1 + 0.01285985E+03 0.01588083E-01-0.03377500E-05 0.02031362E-09 0.08017922E-14 2 +-0.03807818E+06-0.03561945E+03 0.04269172E+02 0.02791723E+00-0.03272753E-03 3 + 0.01828272E-06-0.03882978E-10-0.03558880E+06 0.08521096E+02 4 +CL3SICH3 40992H 3C 1SI 1CL 3G 0200.00 4000.00 1500.00 1 + 0.01572988E+03 0.03373817E-01-0.04472970E-05-0.09359551E-09 0.01995442E-12 2 +-0.07539927E+06-0.05017697E+03 0.06708039E+02 0.02724465E+00-0.02730290E-03 3 + 0.01457864E-06-0.03116460E-10-0.07231476E+06-0.02328694E+02 4 +CL3SISI 40992SI 2CL 3 G 0200.00 4000.00 1500.00 1 + 0.01263015E+03 0.04310339E-02-0.02248369E-05 0.05573034E-09-0.05229996E-13 2 +-0.01723335E+06-0.02767933E+03 0.08429942E+02 0.01496243E+00-0.01942087E-03 3 + 0.01125326E-06-0.02414611E-10-0.01619796E+06-0.06711706E+02 4 +CL3SISICL 40992SI 2CL 4 G 0200.00 4000.00 1500.00 1 + 0.01503498E+03 0.05376136E-02-0.02788507E-05 0.06889626E-09-0.06454867E-13 2 +-0.05496076E+06-0.03460735E+03 0.09721335E+02 0.01889709E+00-0.02451039E-03 3 + 0.01419597E-06-0.03045164E-10-0.05364875E+06-0.08073287E+02 4 +CLCCCL 40992C 2CL 2 G 0200.00 4000.00 1500.00 1 + 0.09105373E+02 0.09281996E-02-0.01948371E-05 0.01590377E-10 0.02472937E-13 2 + 0.02507216E+06-0.02072870E+03 0.05118707E+02 0.01243668E+00-0.01386540E-03 3 + 0.07609302E-07-0.01615959E-10 0.02631398E+06 0.03298777E+00 4 +CLCCO 53090C 2O 1CL 1 G 0200.00 5000.00 1500.00 1 + 0.09368609E+02 0.03733935E-02-0.01286981E-05 0.01206469E-09 0.09220283E-15 2 + 0.01762808E+06-0.02046752E+03 0.04417443E+02 0.01129365E+00-0.01013488E-03 3 + 0.04661357E-07-0.09098661E-11 0.01952423E+06 0.06539246E+02 4 +CLCH2OH 53090C 1H 3O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.09750194E+02 0.02974385E-01-0.03450482E-05-0.06010047E-09 0.01089784E-12 2 +-0.03248678E+06-0.02345467E+03 0.08330910E+01 0.02358999E+00-0.02137297E-03 3 + 0.01105808E-06-0.02402402E-10-0.02905351E+06 0.02503745E+03 4 +CLCO 40992C 1 O 1CL 1 G 0200.00 4000.00 1500.00 1 + 0.06134827E+02 0.05369294E-02-0.07583742E-06-0.01514557E-09 0.03376080E-13 2 +-0.05363338E+05-0.03198172E+02 0.04790425E+02 0.03165209E-01-0.02098201E-04 3 + 0.07703306E-08-0.01346351E-11-0.04812905E+05 0.04257480E+02 4 +CLCOH 53090C 1H 1O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.07642908E+02 0.01507814E-01-0.02651581E-05-0.01466785E-09 0.04797316E-13 2 +-0.02511908E+05-0.01405046E+03 0.02037663E+02 0.01733328E+00-0.01936443E-03 3 + 0.01099366E-06-0.02427341E-10-0.06596141E+04 0.01538422E+03 4 +CLH2CO 53090C 1H 2O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.09104530E+02 0.02130629E-01-0.02994563E-05-0.02733652E-09 0.06437597E-13 2 +-0.05255641E+05-0.02258799E+03 0.08437505E+01 0.02258903E+00-0.02217447E-03 3 + 0.01165204E-06-0.02487574E-10-0.02264707E+05 0.02176388E+03 4 +CLHCO 40992H 1C 1 O 1CL 1G 0200.00 4000.00 1500.00 1 + 0.07132409E+02 0.01686027E-01-0.02034320E-05-0.05804520E-09 0.01152902E-12 2 +-0.02522232E+06-0.01150137E+03 0.02378612E+02 0.01278870E+00-0.01094130E-03 3 + 0.05089666E-07-0.09985544E-11-0.02348305E+06 0.01417749E+03 4 +CLO 40992 O 1CL 1 G 0200.00 4000.00 1500.00 1 + 0.04320627E+02 0.01730970E-02-0.07157875E-06 0.01424639E-09-0.01115543E-13 2 + 0.01328601E+06 0.01764362E+02 0.02918696E+02 0.04664857E-01-0.05654826E-04 3 + 0.03131108E-07-0.06515478E-11 0.01365989E+06 0.08877238E+02 4 +CLOCL 53090O 1CL 2 G 0200.00 5000.00 1500.00 1 + 0.06635186E+02 0.03284434E-02-0.01225328E-05 0.02123621E-09-0.01404377E-13 2 + 0.07672352E+05-0.06410996E+02 0.03397880E+02 0.01080127E+00-0.01324655E-03 3 + 0.07392960E-07-0.01546583E-10 0.08527797E+05 0.09981834E+02 4 +CLOO 40992 O 2CL 1 G 0200.00 4000.00 1500.00 1 + 0.06500858E+02 0.04259430E-02-0.01471496E-05 0.02312042E-09-0.01357033E-13 2 + 0.01465068E+06-0.05831007E+02 0.03097113E+02 0.01088530E+00-0.01274586E-03 3 + 0.06909658E-07-0.01419679E-10 0.01560137E+06 0.01159355E+03 4 +CLSI(CH3)2 40992H 6C 2SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01602072E+03 0.06121766E-01-0.05697358E-05-0.02685516E-08 0.04764446E-12 2 +-0.02023771E+06-0.05448286E+03 0.04366292E+02 0.03146501E+00-0.02442313E-03 3 + 0.01155763E-06-0.02441972E-10-0.01561856E+06 0.09415220E+02 4 +CLSI(CH3)2CH2 40992H 8C 3SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.02115100E+03 0.08018265E-01-0.07924248E-05-0.03295050E-08 0.05955233E-12 2 +-0.02795355E+06-0.07954995E+03 0.05283182E+02 0.04510586E+00-0.03881938E-03 3 + 0.01972924E-06-0.04266615E-10-0.02191153E+06 0.06553031E+02 4 +CLSI(CH3)3 40992H 9C 3SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.02209311E+03 0.09120019E-01-0.08258094E-05-0.04093090E-08 0.07203542E-12 2 +-0.05338834E+06-0.08746922E+03 0.05151450E+02 0.04536455E+00-0.03440035E-03 3 + 0.01610968E-06-0.03411234E-10-0.04659624E+06 0.05658041E+02 4 +CLSICH3 40992H 3C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01002062E+03 0.03097435E-01-0.03221687E-05-0.01222123E-08 0.02253457E-12 2 +-0.05623578E+05-0.02357626E+03 0.03485850E+02 0.01832800E+00-0.01572477E-03 3 + 0.07852071E-07-0.01669997E-10-0.03149803E+05 0.01186709E+03 4 +CLSISI 40992SI 2CL 1 G 0200.00 4000.00 1500.00 1 + 0.06847303E+02 0.01844250E-02-0.09793979E-06 0.02440659E-09-0.02287823E-13 2 + 0.04772443E+06-0.03339368E+02 0.05234557E+02 0.05788035E-01-0.07516996E-04 3 + 0.04356402E-07-0.09346885E-11 0.04811932E+06 0.04702599E+02 4 +CLSISICL 40992SI 2CL 2 G 0200.00 4000.00 1500.00 1 + 0.01008343E+03-0.01216815E-02-0.01555866E-05 0.07247150E-09-0.08633006E-13 2 + 0.01376083E+06-0.01644862E+03 0.07022588E+02 0.01136420E+00-0.01558778E-03 3 + 0.08961882E-07-0.01874769E-10 0.01437523E+06-0.01570360E+02 4 +CN 121286C 1N 1 G 0200.00 5000.00 1000.00 1 + 0.03720120E+02 0.01518351E-02 0.01987381E-05-0.03798371E-09 0.01328230E-13 2 + 0.05111626E+06 0.02888597E+02 0.03663204E+02-0.01156529E-01 0.02163409E-04 3 + 0.01854208E-08-0.08214695E-11 0.05128118E+06 0.03739016E+02 4 +CN+ 121286C 1N 1E -1 G 0200.00 5000.00 1000.00 1 + 0.03701463E+02 0.07482931E-02-0.01790173E-05 0.02366368E-09-0.01437037E-13 2 + 0.02155966E+07 0.04108678E+02 0.03118657E+02 0.01553258E-01-0.09487764E-05 3 + 0.01479501E-07-0.09096763E-11 0.02158512E+07 0.07456254E+02 4 +CN- 121286C 1N 1E 1 G 0200.00 5000.00 1000.00 1 + 0.02981277E+02 0.01464773E-01-0.05672737E-05 0.01017623E-08-0.06870931E-13 2 + 0.06346098E+05 0.06171693E+02 0.03278995E+02 0.01464192E-01-0.03925899E-04 3 + 0.05629875E-07-0.02473497E-10 0.06279509E+05 0.04568972E+02 4 +CN2 121686C 1N 2 G 0200.00 5000.00 1000.00 1 + 0.05567064E+02 0.02100501E-01-0.09010517E-05 0.01718572E-08-0.01206255E-12 2 + 0.05489968E+06-0.05630054E+02 0.03039964E+02 0.08812105E-01-0.07605508E-04 3 + 0.03554357E-07-0.08746100E-11 0.05563268E+06 0.07555298E+02 4 +CNN 121286C 1N 2 G 0200.00 5000.00 1000.00 1 + 0.04785930E+02 0.02559554E-01-0.01003133E-04 0.01807149E-08-0.01227383E-12 2 + 0.06870411E+06-0.02953957E+01 0.03524436E+02 0.07271923E-01-0.08272698E-04 3 + 0.05628705E-07-0.01641576E-10 0.06899647E+06 0.05932445E+02 4 +CNO 103190C 1N 1O 1 G 0200.00 4000.00 1500.00 1 + 0.06328598E+02 0.07390401E-02-0.01110761E-05-0.01846498E-09 0.04400816E-13 2 + 0.04683387E+06-0.09091839E+02 0.03819863E+02 0.06416255E-01-0.05303312E-04 3 + 0.02308211E-07-0.04256414E-11 0.04775979E+06 0.04507300E+02 4 +CO 121286C 1O 1 G 0200.00 5000.00 1000.00 1 + 0.03025078E+02 0.01442689E-01-0.05630828E-05 0.01018581E-08-0.06910952E-13 2 +-0.01426835E+06 0.06108218E+02 0.03262452E+02 0.01511941E-01-0.03881755E-04 3 + 0.05581944E-07-0.02474951E-10-0.01431054E+06 0.04848897E+02 4 +CO2 121286C 1O 2 G 0200.00 5000.00 1000.00 1 + 0.04453623E+02 0.03140169E-01-0.01278411E-04 0.02393997E-08-0.01669033E-12 2 +-0.04896696E+06-0.09553959E+01 0.02275725E+02 0.09922072E-01-0.01040911E-03 3 + 0.06866687E-07-0.02117280E-10-0.04837314E+06 0.01018849E+03 4 +CO2- 121286C 1O 2E 1 G 0200.00 5000.00 1000.00 1 + 0.04610574E+02 0.02532962E-01-0.01070165E-04 0.02026771E-08-0.01424958E-12 2 +-0.05479882E+06 0.01449630E+02 0.02637077E+02 0.07803230E-01-0.08196187E-04 3 + 0.06537897E-07-0.02520220E-10-0.05416773E+06 0.01188955E+03 4 +COS 121286C 1O 1S 1 G 0200.00 5000.00 1000.00 1 + 0.05191925E+02 0.02506123E-01-0.01024396E-04 0.01943914E-08-0.01370800E-12 2 +-0.01846210E+06-0.02825755E+02 0.02858531E+02 0.09515458E-01-0.08884915E-04 3 + 0.04220994E-07-0.08557340E-11-0.01785145E+06 0.09081989E+02 4 +CS 121686C 1S 1 G 0200.00 5000.00 1000.00 1 + 0.03737431E+02 0.08180451E-02-0.03178918E-05 0.05356801E-09-0.02886195E-13 2 + 0.03247725E+06 0.03576557E+02 0.02938623E+02 0.02724352E-01-0.02397707E-04 3 + 0.01689501E-07-0.06665050E-11 0.03273992E+06 0.07848720E+02 4 +CS2 121286C 1S 2 G 0200.00 5000.00 1000.00 1 + 0.05930515E+02 0.01813645E-01-0.07492172E-05 0.01445892E-08-0.01032638E-12 2 + 0.01205117E+06-0.06093910E+02 0.03566139E+02 0.08374928E-01-0.06835704E-04 3 + 0.02091214E-07-0.06737193E-12 0.01268848E+06 0.06085967E+02 4 +CSICL 40992C 1SI 1CL 1 G 0200.00 4000.00 1500.00 1 + 0.06817655E+02 0.02139344E-02-0.01117811E-05 0.02768133E-09-0.02593011E-13 2 + 0.07133105E+06-0.04934821E+02 0.04809756E+02 0.07155653E-01-0.09274105E-04 3 + 0.05368218E-07-0.01150991E-10 0.07182609E+06 0.05089754E+02 4 +CSICL2 40992C 1SI 1CL 2 G 0200.00 4000.00 1500.00 1 + 0.09603536E+02 0.04212005E-02-0.02008617E-05 0.04653654E-09-0.04174779E-13 2 + 0.04167197E+06-0.01686119E+03 0.05482765E+02 0.01432904E+00-0.01824531E-03 3 + 0.01044588E-06-0.02224179E-10 0.04271677E+06 0.03823593E+02 4 +CSICL3 40992C 1SI 1CL 3 G 0200.00 4000.00 1500.00 1 + 0.01250544E+03 0.05339218E-02-0.02588613E-05 0.06075307E-09-0.05497769E-13 2 + 0.04346089E+04-0.02851950E+03 0.07246579E+02 0.01837148E+00-0.02348583E-03 3 + 0.01347935E-06-0.02874547E-10 0.01760441E+05-0.02151092E+02 4 +CSIH2CL 40992H 2C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01027485E+03 0.01774759E-01-0.03308189E-05-0.01554251E-09 0.07008815E-13 2 + 0.04915449E+06-0.02589174E+03 0.02180376E+02 0.02405210E+00-0.02551666E-03 3 + 0.01345591E-06-0.02782039E-10 0.05175432E+06 0.01659754E+03 4 +CSIHCL 40992H 1C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.08584251E+02 0.09503299E-02-0.01990512E-05 0.07276089E-11 0.02697011E-13 2 + 0.05701632E+06-0.01616263E+03 0.04195792E+02 0.01336658E+00-0.01458110E-03 3 + 0.07822924E-07-0.01632113E-10 0.05839343E+06 0.06755654E+02 4 +CSIHCL2 40992H 1C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01133022E+03 0.01200867E-01-0.03112842E-05 0.02565133E-09 0.05146234E-14 2 + 0.02764986E+06-0.02737920E+03 0.04205701E+02 0.02278870E+00-0.02653546E-03 3 + 0.01465130E-06-0.03083816E-10 0.02972624E+06 0.09294144E+02 4 +DIOXANE 103190C 4H 8O 2 G 0200.00 4000.00 1500.00 1 + 0.02168170E+03 0.01049644E+00-0.01053878E-04-0.04473945E-08 0.08168288E-12 2 +-0.04922005E+06-0.09955139E+03-0.05862900E+02 0.07081444E+00-0.05458695E-03 3 + 0.02315148E-06-0.04289514E-10-0.03876477E+06 0.05061959E+03 4 +E 120186E 1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.07453749E+04-0.01173403E+03 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.07453750E+04-0.01173403E+03 4 +F 121286F 1 G 0200.00 5000.00 1000.00 1 + 0.02687459E+02-0.02010358E-02 0.08597957E-06-0.01644974E-09 0.01166160E-13 2 + 0.08722883E+05 0.03882212E+02 0.02913905E+02-0.07336339E-02 0.05571015E-05 3 +-0.02666871E-08 0.08643255E-12 0.08651201E+05 0.02677115E+02 4 +F2 121286F 2 G 0200.00 5000.00 1000.00 1 + 0.04018308E+02 0.06221479E-02-0.02420845E-05 0.04742076E-09-0.03418141E-13 2 +-0.01300713E+05 0.01126327E+02 0.02940287E+02 0.03491492E-01-0.02458208E-04 3 + 0.01837073E-08 0.02850917E-11-0.01010430E+05 0.06694194E+02 4 +F2SINH 42489SI 1N 1F 2H 1G 0200.00 3000.00 1000.00 1 + 0.01004830E+03 0.01983144E-01-0.02703169E-05-0.01767853E-08 0.04444368E-12 2 +-0.07739741E+06-0.02303889E+03 0.04951547E+02 0.01329636E+00-0.02098648E-04 3 +-0.01007276E-06 0.05552286E-10-0.07597541E+06 0.03690891E+02 4 +F3SIN 22790F 3SI 1N 1 G 0200.00 4000.00 1000.00 1 + 0.01151242E+03 0.01115029E-01-0.01605465E-05-0.05271933E-09 0.01160900E-12 2 +-0.01045919E+07-0.02981224E+03 0.06028419E+02 0.01278681E+00-0.01878856E-04 3 +-0.09695426E-07 0.05184848E-10-0.01029950E+07-0.08217831E+01 4 +FNNF 42489F 2N 2 G 0200.00 3000.00 1000.00 1 + 0.07255211E+02 0.02274410E-01-0.02793346E-05-0.02203844E-08 0.05359234E-12 2 + 0.06360353E+05-0.01094248E+03 0.03127143E+02 0.01057134E+00-0.09746112E-05 3 +-0.07208357E-07 0.03567978E-10 0.07615831E+05 0.01107465E+03 4 +FNO3 121286F 1N 1O 3 G 0200.00 5000.00 1000.00 1 + 0.09176275E+02 0.04219072E-01-0.01835576E-04 0.03553718E-08-0.02541078E-12 2 +-0.02118639E+05-0.01934397E+03 0.02985786E+02 0.02094642E+00-0.01652733E-03 3 + 0.04318770E-07 0.01660784E-11-0.04237215E+04 0.01266793E+03 4 +FO 121286F 1O 1 G 0200.00 5000.00 1000.00 1 + 0.03913735E+02 0.07210714E-02-0.02796614E-05 0.05337821E-09-0.03720184E-13 2 + 0.01180141E+06 0.03346368E+02 0.02879578E+02 0.03399121E-01-0.02572855E-04 3 + 0.07422381E-08-0.04328053E-12 0.01209663E+06 0.08738887E+02 4 +FO2 121286F 1O 2 G 0200.00 5000.00 1000.00 1 + 0.05678971E+02 0.01442455E-01-0.06229546E-05 0.01199612E-08-0.08543416E-13 2 +-0.03861836E+04-0.01941812E+02 0.03872542E+02 0.06409974E-01-0.05517785E-04 3 + 0.02232771E-07-0.03876157E-11 0.01157076E+04 0.07406950E+02 4 +FSIN 42489SI 1N 1F 1 G 0200.00 3000.00 1000.00 1 + 0.06269572E+02 0.06747867E-02-0.01241976E-05-0.04970158E-09 0.01424452E-12 2 + 0.02533350E+06-0.04201141E+02 0.04269969E+02 0.05298358E-01-0.01103802E-04 3 +-0.03962805E-07 0.02282982E-10 0.02587238E+06 0.06215038E+02 4 +GA 62987GA 1 G 0200.00 1500.00 0600.00 1 + 0.02679919E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.03368804E+06 0.06788109E+02 0.02679919E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.03368804E+06 0.06788109E+02 4 +GA2H6 62987GA 2H 6 G 0200.00 1500.00 0600.00 1 + 0.06016247E+02 0.01788370E+00-0.01204229E-05-0.06487881E-07 0.02075367E-10 2 + 0.01312548E+06-0.05228030E+02-0.03914561E+02 0.04965434E+00 0.07401904E-04 3 +-0.01124137E-05 0.08726339E-09 0.01493079E+06 0.04274883E+03 4 +GAAS 62987GA 1AS 1 G 0200.00 1500.00 0600.00 1 + 0.04471149E+02 0.04238449E-02-0.02279405E-05-0.04441172E-10 0.02618952E-12 2 + 0.04313359E+06 0.06212471E+02 0.03967474E+02 0.02318966E-01-0.01145452E-04 3 +-0.03411431E-07 0.03365821E-10 0.04321919E+06 0.08599628E+02 4 +GAAS(3,C) 62987GA 3AS 3 G 0200.00 1500.00 0600.00 1 + 0.01485247E+03 0.02959435E-01-0.07124246E-05-0.05316048E-08 0.01287321E-11 2 + 0.01191262E+07-0.03514144E+03 0.01470189E+03 0.03827728E-01-0.02945747E-04 3 + 0.02465370E-07-0.01520598E-10 0.01191496E+07-0.03445955E+03 4 +GAAS(3,L) 62987GA 3AS 3 G 0200.00 1500.00 0600.00 1 + 0.01356850E+03 0.02802435E-01-0.07969918E-05-0.06437098E-08 0.01560255E-11 2 + 0.01248005E+07-0.01381063E+03 0.01341276E+03 0.03617689E-01-0.02726209E-04 3 + 0.01877183E-07-0.01259178E-10 0.01248265E+07-0.01309195E+03 4 +GAAS(5,C) 62987GA 5AS 5 G 0200.00 1500.00 0600.00 1 + 0.02573672E+03 0.05523956E-01-0.01203468E-04-0.01043743E-07 0.02528931E-11 2 + 0.01721381E+07-0.08254488E+03 0.02546512E+03 0.07014337E-01-0.04881356E-04 3 + 0.03825484E-07-0.02450420E-10 0.01721819E+07-0.08130267E+03 4 +GAAS(5,L) 62987GA 5AS 5 G 0200.00 1500.00 0600.00 1 + 0.03045793E+03 0.05403152E-01-0.01649477E-04-0.09968842E-08 0.02413154E-11 2 + 0.02020691E+07-0.07768010E+03 0.03015255E+03 0.07234394E-01-0.06497994E-04 3 + 0.05559585E-07-0.03339653E-10 0.02021151E+07-0.07630866E+03 4 +GAET 62987GA 1C 2H 5 G 0200.00 1500.00 0600.00 1 + 0.05932970E+02 0.01342454E+00 0.04110518E-05-0.04286069E-07 0.01238710E-10 2 + 0.06504863E+05 0.03090838E+02 0.01846399E+02 0.02592050E+00 0.05522394E-04 3 +-0.04977960E-06 0.03654362E-09 0.07264445E+05 0.02294639E+03 4 +GAET2 62987GA 1C 4H 10 G 0200.00 1500.00 0600.00 1 + 0.07213832E+02 0.03055228E+00 0.01249451E-04-0.09990274E-07 0.02881966E-10 2 +-0.01392119E+05-0.07795098E+00-0.02162930E+02 0.05892512E+00 0.01447145E-03 3 +-0.01168602E-05 0.08526654E-09 0.03561841E+04 0.04552626E+03 4 +GAET3 62987GA 1C 6H 15 G 0200.00 1500.00 0600.00 1 + 0.08436453E+02 0.04804950E+00 0.02119157E-04-0.01581685E-06 0.04571178E-10 2 +-0.01346996E+06-0.06196490E+02-0.06544289E+02 0.09332246E+00 0.02364121E-03 3 +-0.01874104E-05 0.01367721E-08-0.01067659E+06 0.06666796E+03 4 +GAH 62987GA 1H 1 G 0200.00 1500.00 0600.00 1 + 0.03232142E+02 0.01343247E-01-0.04325499E-06-0.02791841E-08 0.04973590E-12 2 + 0.02656060E+06 0.05947896E+02 0.03524579E+02 0.03386213E-02-0.02064014E-05 3 + 0.03220999E-07-0.02936132E-10 0.02651074E+06 0.04554067E+02 4 +GAH2 62987GA 1H 2 G 0200.00 1500.00 0600.00 1 + 0.03762385E+02 0.03210792E-01 0.02180096E-06-0.08908393E-08 0.02219063E-11 2 + 0.01936647E+06 0.05783398E+02 0.03559710E+02 0.03676742E-01 0.06484499E-05 3 +-0.03109349E-07 0.01585414E-10 0.01940976E+06 0.06803082E+02 4 +GAH3 62987GA 1H 3 G 0200.00 1500.00 0600.00 1 + 0.03345476E+02 0.06399313E-01 0.01122996E-05-0.02065900E-07 0.05780202E-11 2 + 0.01228185E+06 0.06394842E+02 0.01726154E+02 0.01124739E+00 0.02447527E-04 3 +-0.02026314E-06 0.01447000E-09 0.01258620E+06 0.01428445E+03 4 +GAME 62987GA 1C 1H 3 G 0200.00 1500.00 0600.00 1 + 0.04809857E+02 0.06824207E-01 0.02258235E-05-0.02018341E-07 0.05736453E-11 2 + 0.07558677E+05 0.02595904E+02 0.03054537E+02 0.01218640E+00 0.02332213E-04 3 +-0.02121866E-06 0.01544226E-09 0.07885869E+05 0.01112878E+03 4 +GAME2 62987GA 1C 2H 6 G 0200.00 1500.00 0600.00 1 + 0.07068373E+02 0.01421602E+00 0.05120694E-05-0.04421986E-07 0.01309641E-10 2 + 0.05453790E+05-0.04173960E+02 0.02257655E+02 0.02916446E+00 0.05669861E-04 3 +-0.05709755E-06 0.04268905E-09 0.06341297E+05 0.01915435E+03 4 +GAME3 62987GA 1C 3H 9 G 0200.00 1500.00 0600.00 1 + 0.08410636E+02 0.02262803E+00 0.01043019E-04-0.07049611E-07 0.02015308E-10 2 +-0.09087271E+05-0.01072250E+03 0.02120239E+02 0.04161029E+00 0.09959505E-04 3 +-0.07846792E-06 0.05693396E-09-0.07911968E+05 0.01988516E+03 4 +H 120186H 1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.02547163E+06-0.04601176E+01 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.02547163E+06-0.04601176E+01 4 +H(CH3)SICH2 61991H 6C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01254527E+03 0.07143719E-01-0.01146987E-05-0.08100963E-08 0.01568740E-11 2 + 0.07723628E+05-0.04075435E+03 0.01206249E+02 0.03587271E+00-0.02971970E-03 3 + 0.01379675E-06-0.02695736E-10 0.01156328E+06 0.01956017E+03 4 +H+ 120186H 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.01840334E+07-0.01153862E+02 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.01840334E+07-0.01153862E+02 4 +H- 120186H 1E 1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.01596104E+06-0.01152449E+02 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.01596104E+06-0.01152449E+02 4 +H2 121286H 2 G 0200.00 5000.00 1000.00 1 + 0.02991423E+02 0.07000644E-02-0.05633829E-06-0.09231578E-10 0.01582752E-13 2 +-0.08350340E+04-0.01355110E+02 0.03298124E+02 0.08249442E-02-0.08143015E-05 3 +-0.09475434E-09 0.04134872E-11-0.01012521E+05-0.03294094E+02 4 +H2ALME 62987AL 1C 1H 5 G 0200.00 1500.00 0600.00 1 + 0.04898410E+02 0.01358223E+00 0.02611459E-05-0.04575170E-07 0.01384802E-10 2 + 0.08743072E+04-0.01113117E+02-0.06283259E+01 0.03089531E+00 0.05774090E-04 3 +-0.06488033E-06 0.04907111E-09 0.01889334E+05 0.02565779E+03 4 +H2ASME 62987AS 1C 1H 5 G 0200.00 1500.00 0600.00 1 + 0.05686213E+02 0.02154422E+00 0.08185248E-05-0.07069951E-07 0.02101522E-10 2 + 0.09331084E+05-0.06513957E+02-0.02113506E+02 0.04564229E+00 0.09983227E-04 3 +-0.09399697E-06 0.07014021E-09 0.01077170E+06 0.03132611E+03 4 +H2C4O 120189H 2C 4O 1 G 0200.00 4000.00 1000.00 1 + 0.01026888E+03 0.04896164E-01-0.04885081E-05-0.02708566E-08 0.05107013E-12 2 + 0.02346903E+06-0.02815985E+03 0.04810971E+02 0.01313999E+00 0.09865073E-05 3 +-0.06120720E-07 0.01640003E-10 0.02545803E+06 0.02113424E+02 4 +H2CCC 102093H 2C 3 G 0200.00 4000.00 1400.00 1 + 0.08266525E+02 0.02728619E-01-0.02160829E-05-0.01515161E-08 0.02641695E-12 2 + 0.07757192E+06-0.01864937E+03 0.04212193E+02 0.08954521E-01-0.01050721E-04 3 +-0.02578513E-07 0.09722836E-11 0.07922349E+06 0.04134299E+02 4 +H2CCC(S) 102093H 2C 3 G 0200.00 4000.00 1400.00 1 + 0.07904213E+02 0.02907464E-01-0.02219731E-05-0.01620844E-08 0.02796013E-12 2 + 0.06385167E+06-0.01810882E+03 0.03794178E+02 0.08761049E-01-0.07975878E-05 3 +-0.02308045E-07 0.07911151E-11 0.06563580E+06 0.05264196E+02 4 +H2CCCCCH 101993H 3C 5 G 0200.00 4000.00 1400.00 1 + 0.01440736E+03 0.04424058E-01-0.03618245E-05-0.02456408E-08 0.04327859E-12 2 + 0.05896103E+06-0.04775145E+03 0.07441421E+02 0.01585165E+00-0.02219895E-04 3 +-0.04928038E-07 0.01984559E-10 0.06162266E+06-0.09047891E+02 4 +H2CCCCH 82489C 4H 3 G 0200.00 4000.00 1000.00 1 + 0.01131409E+03 0.05014414E-01-0.05350445E-05-0.02825309E-08 0.05403279E-12 2 + 0.05181211E+06-0.03062434E+03 0.06545799E+02 0.01242477E+00 0.05603226E-05 3 +-0.05631141E-07 0.01665218E-10 0.05352503E+06-0.04264082E+02 4 +H2CCCCH2 82489C 4H 4 G 0200.00 4000.00 1000.00 1 + 0.01062083E+03 0.07199370E-01-0.06806234E-05-0.04021185E-08 0.07378498E-12 2 + 0.03358798E+06-0.03193583E+03 0.03849007E+02 0.01713169E+00 0.01644270E-04 3 +-0.07761590E-07 0.01947860E-10 0.03608372E+06 0.05732121E+02 4 +H2CCCH 82489C 3H 3 G 0200.00 4000.00 1000.00 1 + 0.08831047E+02 0.04357195E-01-0.04109067E-05-0.02368723E-08 0.04376520E-12 2 + 0.03847420E+06-0.02177919E+03 0.04754200E+02 0.01108028E+00 0.02793323E-05 3 +-0.05479212E-07 0.01949629E-10 0.03988883E+06 0.05854549E+01 4 +H2CCCLO 53090C 2H 2O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01240462E+03 0.02067658E-01-0.03889952E-05-0.03138121E-10 0.04625008E-13 2 +-0.01114503E+06-0.03928723E+03 0.01680422E+02 0.03020642E+00-0.03234256E-03 3 + 0.01779343E-06-0.03877221E-10-0.07395297E+05 0.01777265E+03 4 +H2CCH(SICL2H) 40992H 4C 2SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01680247E+03 0.04516342E-01-0.05794312E-05-0.01367868E-08 0.02833862E-12 2 +-0.04037858E+06-0.05763375E+03 0.03640801E+02 0.03803764E+00-0.03641732E-03 3 + 0.01855101E-06-0.03834642E-10-0.03581475E+06 0.01252145E+03 4 +H2CCH2OH 103190C 2H 5O 1 G 0200.00 4000.00 1500.00 1 + 0.01144956E+03 0.05249185E-01-0.04887850E-05-0.02243250E-08 0.03973360E-12 2 +-0.07554972E+05-0.03426083E+03 0.01304406E+02 0.02873214E+00-0.02387448E-03 3 + 0.01166988E-06-0.02450027E-10-0.03718933E+05 0.02078756E+03 4 +H2CCHO 103190C 2H 3O 1 G 0200.00 4000.00 1500.00 1 + 0.09710060E+02 0.03854966E-01-0.04677825E-05-0.01505179E-08 0.02941428E-12 2 +-0.02692492E+05-0.02810566E+03 0.02802205E+01 0.02740311E+00-0.02554683E-03 3 + 0.01306679E-06-0.02750425E-10 0.06682648E+04 0.02239731E+03 4 +H2CCHSI 61991H 3C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.09386889E+02 0.03941784E-01-0.01316150E-05-0.04081553E-08 0.07971026E-12 2 + 0.04528924E+06-0.02340680E+03 0.01645904E+02 0.02461474E+00-0.02252401E-03 3 + 0.01105892E-06-0.02209069E-10 0.04779814E+06 0.01738303E+03 4 +H2CCHSIH 61991H 4C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01039415E+03 0.04987864E-01-0.01480904E-05-0.05650110E-08 0.01139073E-11 2 + 0.03263919E+06-0.02930385E+03 0.01989225E+02 0.02637566E+00-0.02197547E-03 3 + 0.09982490E-07-0.01893595E-10 0.03544082E+06 0.01531216E+03 4 +H2CCHSIH2 61991H 5C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01289871E+03 0.05366252E-01-0.02345064E-05-0.05622057E-08 0.01143224E-11 2 + 0.02373919E+06-0.04346106E+03 0.04606628E+01 0.03824847E+00-0.03490747E-03 3 + 0.01656684E-06-0.03180820E-10 0.02773639E+06 0.02208512E+03 4 +H2CCHSIH3 61991H 6C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01249653E+03 0.07666553E-01-0.02075339E-05-0.09569749E-08 0.01987112E-11 2 + 0.04799029E+05-0.04174850E+03 0.07686183E+01 0.03576322E+00-0.02634364E-03 3 + 0.01032868E-06-0.01717329E-10 0.08811836E+05 0.02100703E+03 4 +H2CLSICH3 40992H 5C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01354344E+03 0.04577293E-01-0.04988032E-05-0.01758807E-08 0.03311232E-12 2 +-0.03126783E+06-0.04541432E+03 0.02142669E+02 0.03103477E+00-0.02660368E-03 3 + 0.01286599E-06-0.02646554E-10-0.02699973E+06 0.01636317E+03 4 +H2CLSISICL3 40992H 2SI 2CL 4 G 0200.00 4000.00 1500.00 1 + 0.01871701E+03 0.01924360E-01-0.04472779E-05 0.02003132E-09 0.03268818E-13 2 +-0.08047111E+06-0.05817685E+03 0.08945602E+02 0.03068227E+00-0.03483212E-03 3 + 0.01910354E-06-0.04027623E-10-0.07751434E+06-0.07537633E+02 4 +H2CN 41687H 2C 1N 1 G 0200.00 4000.00 1000.00 1 + 0.05209703E+02 0.02969291E-01-0.02855589E-05-0.01635550E-08 0.03043259E-12 2 + 0.02767711E+06-0.04444478E+02 0.02851661E+02 0.05695233E-01 0.01071140E-04 3 +-0.01622612E-07-0.02351108E-11 0.02863782E+06 0.08992751E+02 4 +H2CNCH2 103190C 2H 4N 1 G 0200.00 4000.00 1500.00 1 + 0.01065385E+03 0.05191287E-01-0.05816522E-05-0.02206912E-08 0.04101341E-12 2 + 0.02345063E+06-0.03469895E+03-0.01203076E+01 0.03225369E+00-0.02968723E-03 3 + 0.01527290E-06-0.03242500E-10 0.02728820E+06 0.02297042E+03 4 +H2CNCH2O 103190C 2H 4N 1O 1G 0200.00 4000.00 1500.00 1 + 0.01327652E+03 0.04830938E-01-0.04858949E-05-0.02009495E-08 0.03640181E-12 2 + 0.01624962E+06-0.04713094E+03-0.01978522E+01 0.03341279E+00-0.02432022E-03 3 + 0.09438643E-07-0.01604050E-10 0.02141154E+06 0.02658265E+03 4 +H2CNCHO 103190C 2H 3N 1O 1G 0200.00 4000.00 1500.00 1 + 0.01196792E+03 0.03915428E-01-0.03860933E-05-0.01696877E-08 0.03041050E-12 2 +-0.05902236E+05-0.03958545E+03 0.01096066E+02 0.02577215E+00-0.01711630E-03 3 + 0.05880104E-07-0.08956774E-11-0.01612063E+05 0.02032528E+03 4 +H2CNH 41687C 1H 3N 1 G 0200.00 4000.00 1000.00 1 + 0.05221589E+02 0.04748526E-01-0.04179159E-05-0.02606612E-08 0.04703140E-12 2 + 0.08657219E+05-0.04500776E+02 0.02365879E+02 0.06780570E-01 0.02423000E-04 3 +-0.06157824E-08-0.01615097E-10 0.09971141E+05 0.01230718E+03 4 +H2CNNHO 103190C 1H 3N 2O 1G 0200.00 4000.00 1500.00 1 + 0.01157754E+03 0.04489180E-01-0.05033233E-05-0.01651066E-08 0.03069139E-12 2 + 0.01986783E+06-0.03656958E+03 0.05954945E+01 0.03239559E+00-0.02993966E-03 3 + 0.01489054E-06-0.03022863E-10 0.02364485E+06 0.02192790E+03 4 +H2CNNO 103190C 1H 2N 2O 1G 0200.00 4000.00 1500.00 1 + 0.01016234E+03 0.03065936E-01-0.03082820E-05-0.01194424E-08 0.02169867E-12 2 + 0.02494088E+06-0.02762275E+03 0.02498334E+02 0.01993009E+00-0.01557879E-03 3 + 0.06838956E-07-0.01313250E-10 0.02786476E+06 0.01417025E+03 4 +H2CNNO2 41687H 2C 1N 2O 2G 0200.00 4000.00 1000.00 1 + 0.01140794E+03 0.04564542E-01-0.04600304E-05-0.02513539E-08 0.04782211E-12 2 + 0.01242142E+06-0.03165238E+03 0.03534317E+02 0.01811272E+00 0.02394018E-05 3 +-0.01080024E-06 0.04222725E-10 0.01509006E+06 0.01131138E+03 4 +H2CNO 103190C 1H 2N 1O 1G 0200.00 4000.00 1500.00 1 + 0.08485639E+02 0.02633277E-01-0.03017498E-05-0.08341916E-09 0.01593977E-12 2 + 0.01716434E+06-0.02052156E+03 0.01045856E+02 0.02126494E+00-0.01962754E-03 3 + 0.09659592E-07-0.01941069E-10 0.01974611E+06 0.01919718E+03 4 +H2CNO2 103190C 1H 2N 1O 2G 0200.00 4000.00 1500.00 1 + 0.01127481E+03 0.02584711E-01-0.03934331E-05-0.05614969E-09 0.01392400E-12 2 + 0.01360470E+06-0.03461951E+03 0.01165696E+02 0.02890490E+00-0.02817663E-03 3 + 0.01387569E-06-0.02727595E-10 0.01694546E+06 0.01888293E+03 4 +H2CONO 103190C 1H 2N 1O 2G 0200.00 4000.00 1500.00 1 + 0.01075754E+03 0.02983288E-01-0.04123564E-05-0.08096724E-09 0.01720195E-12 2 + 0.01230253E+06-0.02976009E+03 0.02120026E+02 0.02709056E+00-0.02799616E-03 3 + 0.01479145E-06-0.03074997E-10 0.01504327E+06 0.01546092E+03 4 +H2GAET 62987GA 1C 2H 7 G 0200.00 1500.00 0600.00 1 + 0.07187273E+02 0.01867211E+00 0.06156157E-05-0.06027764E-07 0.01797524E-10 2 +-0.04232757E+05-0.04686699E+02 0.04124020E+01 0.03972972E+00 0.07979140E-04 3 +-0.08059234E-06 0.06040387E-09-0.02983932E+05 0.02816148E+03 4 +H2GAME 62987GA 1C 1H 5 G 0200.00 1500.00 0600.00 1 + 0.05831604E+02 0.01222872E+00 0.03033669E-05-0.03956941E-07 0.01225452E-10 2 + 0.05189255E+05-0.04446614E+02 0.05251130E+01 0.02904695E+00 0.04844148E-04 3 +-0.06097646E-06 0.04672763E-09 0.06158712E+05 0.02122149E+03 4 +H2NF 42489H 2N 1F 1 G 0200.00 3000.00 1000.00 1 + 0.04143658E+02 0.03805135E-01-0.02771153E-05-0.03589717E-08 0.07589549E-12 2 +-0.04891486E+05 0.02309362E+02 0.02597863E+02 0.05882104E-01 0.04938351E-05 3 +-0.01948600E-07 0.03634003E-11-0.04301253E+05 0.01098289E+03 4 +H2NNO 103190H 2N 2O 1 G 0200.00 4000.00 1500.00 1 + 0.07759737E+02 0.03025701E-01-0.02888916E-05-0.01262990E-08 0.02195026E-12 2 + 0.05894193E+05-0.01647713E+03 0.02088916E+02 0.01684997E+00-0.01428977E-03 3 + 0.06830147E-07-0.01368985E-10 0.07907340E+05 0.01394381E+03 4 +H2NO 102290H 2N 1O 1 G 0200.00 4000.00 1500.00 1 + 0.05673346E+02 0.02298837E-01-0.01774446E-05-0.01103482E-08 0.01859762E-12 2 + 0.05569325E+05-0.06153540E+02 0.02530590E+02 0.08596035E-01-0.05471030E-04 3 + 0.02276249E-07-0.04648073E-11 0.06868030E+05 0.01126651E+03 4 +H2NOH 103190H 3N 1O 1 G 0200.00 4000.00 1500.00 1 + 0.06764633E+02 0.03047036E-01-0.02777798E-05-0.01250487E-08 0.02191094E-12 2 +-0.09026701E+05-0.01269845E+03 0.01407003E+02 0.01658498E+00-0.01463594E-03 3 + 0.07318354E-07-0.01511897E-10-0.07158596E+05 0.01589649E+03 4 +H2O 20387H 2O 1 G 0200.00 5000.00 1000.00 1 + 0.02672146E+02 0.03056293E-01-0.08730260E-05 0.01200996E-08-0.06391618E-13 2 +-0.02989921E+06 0.06862817E+02 0.03386842E+02 0.03474982E-01-0.06354696E-04 3 + 0.06968581E-07-0.02506588E-10-0.03020811E+06 0.02590233E+02 4 +H2O(L) 120186H 2O 1 L 0273.15 1000.00 1000.00 1 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.00000000E+00 0.00000000E+00 0.01271278E+03-0.01766279E+00-0.02255666E-03 3 + 0.02082091E-05-0.02407861E-08-0.03748320E+06-0.05911535E+03 4 +H2O(S) 120186H 2O 1 S 0200.00 0273.15 0273.15 1 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.00000000E+00 0.00000000E+00-0.03926933E+00 0.01692042E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.03594958E+06 0.05693378E+01 4 +H2O2 120186H 2O 2 G 0200.00 5000.00 1000.00 1 + 0.04573167E+02 0.04336136E-01-0.01474689E-04 0.02348904E-08-0.01431654E-12 2 +-0.01800696E+06 0.05011370E+01 0.03388754E+02 0.06569226E-01-0.01485013E-05 3 +-0.04625806E-07 0.02471515E-10-0.01766315E+06 0.06785363E+02 4 +H2S 121286H 2S 1 G 0200.00 5000.00 1000.00 1 + 0.02883147E+02 0.03827835E-01-0.01423398E-04 0.02497999E-08-0.01660273E-12 2 +-0.03480743E+05 0.07258162E+02 0.03071029E+02 0.05578261E-01-0.01030967E-03 3 + 0.01201953E-06-0.04838370E-10-0.03559826E+05 0.05935226E+02 4 +H2SI(CH3)2 61991H 8C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01362000E+03 0.01024457E+00-0.01528107E-05-0.01329179E-07 0.02717974E-11 2 +-0.01781386E+06-0.04695844E+03 0.02005893E+02 0.03638380E+00-0.02273374E-03 3 + 0.07691266E-07-0.01156681E-10-0.01364280E+06 0.01583265E+03 4 +H2SI(CH3)CH2 61991H 7C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01388829E+03 0.07937538E-01-0.01559644E-05-0.09324826E-08 0.01847251E-11 2 + 0.06767195E+05-0.04464997E+03 0.01980449E+02 0.03727036E+00-0.02944759E-03 3 + 0.01312558E-06-0.02507859E-10 0.01087973E+06 0.01898102E+03 4 +H2SI(NH2)2 22790SI 1H 6N 2 G 0200.00 4000.00 1000.00 1 + 0.01302179E+03 0.06465444E-01-0.05816746E-05-0.03484493E-08 0.06340675E-12 2 +-0.02357071E+06-0.04132570E+03 0.05615307E+02 0.02079854E+00-0.09999530E-05 3 +-0.01288525E-06 0.06091866E-10-0.02126283E+06-0.01615658E+02 4 +H2SIC 61991H 2C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.07319671E+02 0.01729952E-01-0.01346466E-05-0.01450487E-08 0.03000643E-12 2 + 0.08125478E+06-0.01320432E+03 0.02408167E+02 0.01437372E+00-0.01331203E-03 3 + 0.06387472E-07-0.01244523E-10 0.08289031E+06 0.01283748E+03 4 +H2SICCH 61991H 3C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01091422E+03 0.03001577E-01-0.01622344E-05-0.02466767E-08 0.04595260E-12 2 + 0.04137118E+06-0.03153165E+03 0.02952641E+02 0.02407857E+00-0.02313898E-03 3 + 0.01172227E-06-0.02393835E-10 0.04400800E+06 0.01054929E+03 4 +H2SICH 61991H 3C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.08489276E+02 0.02348812E-01-0.01091163E-05-0.02027972E-08 0.03759264E-12 2 + 0.04973382E+06-0.01845097E+03 0.03442743E+02 0.01542521E+00-0.01429096E-03 3 + 0.07252204E-07-0.01507009E-10 0.05145786E+06 0.08363421E+02 4 +H2SICH2 61991H 4C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.09303939E+02 0.04006038E-01-0.09702324E-06-0.03997739E-08 0.07350215E-12 2 + 0.01649066E+06-0.02623845E+03 0.01049782E+02 0.02562277E+00-0.02324392E-03 3 + 0.01142315E-06-0.02295441E-10 0.01922778E+06 0.01743860E+03 4 +H2SICH3 61991H 5C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.08991115E+02 0.06006339E-01-0.01118591E-05-0.07745983E-08 0.01594429E-11 2 + 0.01270233E+06-0.02218700E+03 0.02094419E+02 0.02127010E+00-0.01294390E-03 3 + 0.04156964E-07-0.05854213E-11 0.01520143E+06 0.01518517E+03 4 +H2SIN 22790H 2SI 1N 1 G 0200.00 4000.00 1000.00 1 + 0.06826533E+02 0.02125460E-01-0.02343132E-05-0.01166339E-08 0.02277273E-12 2 + 0.07253673E+06-0.01052162E+03 0.03549344E+02 0.07311005E-01 0.03249026E-05 3 +-0.03682945E-07 0.01121511E-10 0.07370656E+06 0.07565329E+02 4 +H2SINH 42489SI 1N 1H 3 G 0200.00 3000.00 1000.00 1 + 0.06588295E+02 0.04903194E-01-0.04944720E-05-0.05014630E-08 0.01139470E-11 2 + 0.01809794E+06-0.09522970E+02 0.02822196E+02 0.01245518E+00-0.08350819E-05 3 +-0.07411814E-07 0.03579019E-10 0.01923616E+06 0.01054783E+03 4 +H2SINH2 42489SI 1N 1H 4 G 0200.00 3000.00 1000.00 1 + 0.07392047E+02 0.05476841E-01-0.04453276E-05-0.05236661E-08 0.01138390E-11 2 + 0.01136858E+06-0.01138050E+03 0.04053223E+02 0.01182231E+00-0.04348128E-05 3 +-0.06225818E-07 0.02798829E-10 0.01241971E+06 0.06562033E+02 4 +H2SINH3 121386SI 1H 5N 1 G 0200.00 4000.00 1000.00 1 + 0.08711392E+02 0.05909106E-01-0.05436615E-05-0.03248350E-08 0.05960257E-12 2 + 0.08441694E+05-0.01933470E+03 0.04269730E+02 0.01125224E+00 0.01951722E-04 3 +-0.03578373E-07-0.08372202E-12 0.01022204E+06 0.05876736E+02 4 +H2SISIH2 42489SI 2H 4 G 0200.00 3000.00 1000.00 1 + 0.08986817E+02 0.05405047E-01-0.05214022E-05-0.05313742E-08 0.01188727E-11 2 + 0.02832748E+06-0.02004478E+03 0.05133186E+02 0.01252855E+00-0.04620421E-05 3 +-0.06606075E-07 0.02864345E-10 0.02956915E+06 0.07605133E+01 4 +H3ASGAET3 62987AS 1GA 1C 6H 18G 0200.00 1500.00 0600.00 1 + 0.08508501E+02 0.05632369E+00 0.02524140E-04-0.01861451E-06 0.05372403E-10 2 +-0.01085517E+06-0.03399858E+02-0.08974745E+02 0.01090516E+01 0.02811457E-03 3 +-0.02195513E-05 0.01599734E-08-0.07592761E+05 0.08165459E+03 4 +H3ASGAME3 62987AS 1GA 1C 3H 12G 0200.00 1500.00 0600.00 1 + 0.01125499E+03 0.03159753E+00 0.01177904E-04-0.01013352E-06 0.02947356E-10 2 +-0.07280344E+05-0.02238730E+03 0.01267161E+02 0.06214586E+00 0.01385631E-03 3 +-0.01220044E-05 0.08982019E-09-0.05425619E+05 0.02613306E+03 4 +H3CONHO 103190C 1H 4N 1O 2G 0200.00 4000.00 1500.00 1 + 0.01249270E+03 0.04773900E-01-0.04717255E-05-0.01987935E-08 0.03599460E-12 2 +-0.02354754E+05-0.03945442E+03 0.01930733E+02 0.02865910E+00-0.02313063E-03 3 + 0.01068402E-06-0.02139376E-10 0.01638891E+05 0.01796108E+03 4 +H3SIC 61991H 3C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.08536022E+02 0.02944748E-01-0.01752614E-05-0.03061316E-08 0.06463710E-12 2 + 0.07066730E+06-0.02041360E+03 0.01037017E+02 0.02192253E+00-0.01926062E-03 3 + 0.08725014E-07-0.01615505E-10 0.07315849E+06 0.01939904E+03 4 +H3SICCH 61991H 4C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01193845E+03 0.04298239E-01-0.01882154E-05-0.04212272E-08 0.08245783E-12 2 + 0.02161639E+06-0.03978125E+03 0.01692389E+02 0.03078862E+00-0.02808630E-03 3 + 0.01359918E-06-0.02690423E-10 0.02503587E+06 0.01453670E+03 4 +H3SICH 61991H 4C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.09747808E+02 0.03532863E-01-0.01540271E-05-0.03539077E-08 0.06992248E-12 2 + 0.04253036E+06-0.02504347E+03 0.01710027E+02 0.02413212E+00-0.02164005E-03 3 + 0.01035470E-06-0.02035579E-10 0.04522928E+06 0.01762908E+03 4 +H3SICH2 61991H 5C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.01050164E+03 0.04907525E-01-0.01523178E-05-0.05436598E-08 0.01082455E-11 2 + 0.01632252E+06-0.02911264E+03 0.01199673E+02 0.02828259E+00-0.02394311E-03 3 + 0.01103518E-06-0.02125819E-10 0.01948167E+06 0.02041804E+03 4 +H3SICH3 61991H 6C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.01022214E+03 0.07221275E-01-0.01482544E-05-0.09419140E-08 0.01956175E-11 2 +-0.08301660E+05-0.03163487E+03 0.01240228E+02 0.02729962E+00-0.01707597E-03 3 + 0.05502474E-07-0.07521465E-11-0.05090007E+05 0.01692759E+03 4 +H3SIN 22790H 3SI 1N 1 G 0200.00 4000.00 1000.00 1 + 0.07964213E+02 0.03355633E-01-0.03579695E-05-0.01889818E-08 0.03650912E-12 2 + 0.01148697E+07-0.01924110E+03 0.02790629E+02 0.01134566E+00 0.08321879E-05 3 +-0.05845045E-07 0.01685969E-10 0.01167357E+07 0.09384630E+02 4 +H3SINH 42489SI 1N 1H 4 G 0200.00 3000.00 1000.00 1 + 0.07697340E+02 0.05657943E-01-0.05209306E-05-0.05617966E-08 0.01263502E-11 2 + 0.02282005E+06-0.01330379E+03 0.02778390E+02 0.01510711E+00-0.06734261E-05 3 +-0.08928515E-07 0.04115347E-10 0.02435913E+06 0.01309386E+03 4 +H3SISIH 111191H 4SI 2 G 0200.00 4000.00 1500.00 1 + 0.01127202E+03 0.02538145E-01-0.02998472E-05-0.09465367E-09 0.01855053E-12 2 + 0.03297169E+06-0.03264598E+03 0.03698707E+02 0.01870180E+00-0.01430704E-03 3 + 0.06005836E-07-0.01116293E-10 0.03590825E+06 0.08825191E+02 4 +H3SISIH3 42489SI 2H 6 G 0200.00 3000.00 1000.00 1 + 0.01068273E+03 0.08221416E-01-0.08096035E-05-0.08337975E-08 0.01908205E-11 2 + 0.05316920E+05-0.03082188E+03 0.03898290E+02 0.01977415E+00 0.01791014E-05 3 +-0.01033168E-06 0.03931699E-10 0.07621719E+05 0.06227022E+02 4 +HALME 62987AL 1C 1H 4 G 0200.00 1500.00 0600.00 1 + 0.04812273E+02 0.01029645E+00 0.02582808E-05-0.03323597E-07 0.09884584E-11 2 + 0.01176673E+06 0.09557062E+01 0.01118789E+02 0.02180038E+00 0.04120785E-04 3 +-0.04366690E-06 0.03273825E-09 0.01244736E+06 0.01886107E+03 4 +HALME2 62987AL 1C 2H 7 G 0200.00 1500.00 0600.00 1 + 0.05705172E+02 0.01924317E+00 0.06377855E-05-0.06346800E-07 0.01896800E-10 2 +-0.06049865E+05-0.06331378E+01-0.01494261E+02 0.04158568E+00 0.08686772E-04 3 +-0.08604142E-06 0.06447653E-09-0.04722517E+05 0.03427725E+03 4 +HASALME 62987AS 1AL 1C 1H 4G 0200.00 1500.00 0600.00 1 + 0.06956539E+02 0.01061278E+00 0.02440154E-05-0.03297737E-07 0.01020004E-10 2 + 0.02582506E+06-0.08625792E+01 0.02544859E+02 0.02465795E+00 0.03677808E-04 3 +-0.05008894E-06 0.03848384E-09 0.02663010E+06 0.02046859E+03 4 +HASGAET 62987AS 1GA 1C 2H 6G 0200.00 1500.00 0600.00 1 + 0.06336445E+02 0.02340603E+00 0.09066638E-05-0.07519059E-07 0.01828115E-10 2 + 0.03184605E+06 0.05812180E+02 0.05642724E+02 0.02296739E+00 0.01094867E-03 3 +-0.02449038E-06 0.09602701E-10 0.03204718E+06 0.09675533E+02 4 +HASGAME 62987AS 1GA 1C 1H 4G 0200.00 1500.00 0600.00 1 + 0.07507970E+02 0.09277900E-01 0.01891932E-05-0.02769887E-07 0.07996070E-11 2 + 0.03253908E+06-0.01422608E+02 0.04859127E+02 0.01750423E+00 0.02831996E-04 3 +-0.03107937E-06 0.02299468E-09 0.03302941E+06 0.01142952E+03 4 +HASME 62987AS 1C 1H 4 G 0200.00 1500.00 0600.00 1 + 0.05753261E+02 0.01841813E+00 0.07493313E-05-0.05919917E-07 0.01726247E-10 2 + 0.01880057E+06-0.05360325E+02-0.01575095E+01 0.03649094E+00 0.08332940E-04 3 +-0.07234666E-06 0.05330928E-09 0.01989792E+06 0.02335316E+03 4 +HASME2 62987AS 1C 2H 7 G 0200.00 1500.00 0600.00 1 + 0.05850437E+02 0.01841766E+00 0.08066845E-05-0.05868715E-07 0.01726428E-10 2 + 0.06450535E+05 0.03909152E+01-0.02908405E+01 0.03729577E+00 0.08335855E-04 3 +-0.07455611E-06 0.05527881E-09 0.07587766E+05 0.03020451E+03 4 +HCCCHCCH 101993H 3C 5 G 0200.00 4000.00 1400.00 1 + 0.01412247E+03 0.04593411E-01-0.03738175E-05-0.02574329E-08 0.04539160E-12 2 + 0.06249257E+06-0.04722335E+03 0.06854796E+02 0.01699404E+00-0.02582284E-04 3 +-0.05488765E-07 0.02281481E-10 0.06515364E+06-0.07133854E+02 4 +HCCCL 40992H 1C 2CL 1 G 0200.00 4000.00 1500.00 1 + 0.07743241E+02 0.01618655E-01-0.02465935E-05-0.02909336E-09 0.07522752E-13 2 + 0.02472494E+06-0.01686593E+03 0.02969338E+02 0.01583152E+00-0.01787078E-03 3 + 0.01017728E-06-0.02231985E-10 0.02620733E+06 0.07906791E+02 4 +HCCHCCH 82489C 4H 3 G 0200.00 4000.00 1000.00 1 + 0.01075274E+03 0.05381153E-01-0.05549638E-05-0.03052266E-08 0.05761740E-12 2 + 0.06121419E+06-0.02973025E+03 0.04153882E+02 0.01726287E+00-0.02389374E-05 3 +-0.01018700E-06 0.04340505E-10 0.06338071E+06 0.06036507E+02 4 +HCCO 32387H 1C 2O 1 G 0200.00 4000.00 1000.00 1 + 0.06758073E+02 0.02000400E-01-0.02027607E-05-0.01041132E-08 0.01965165E-12 2 + 0.01901513E+06-0.09071262E+02 0.05047965E+02 0.04453478E-01 0.02268283E-05 3 +-0.01482095E-07 0.02250742E-11 0.01965892E+06 0.04818439E+01 4 +HCCOH 32387H 2C 2O 1 G 0200.00 4000.00 1000.00 1 + 0.07328324E+02 0.03336416E-01-0.03024705E-05-0.01781106E-08 0.03245168E-12 2 + 0.07598258E+05-0.01401214E+03 0.03899465E+02 0.09701075E-01-0.03119309E-05 3 +-0.05537732E-07 0.02465732E-10 0.08701190E+05 0.04491875E+02 4 +HCCSICL2H 40992H 2C 2SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01480501E+03 0.02600965E-01-0.04631204E-05-0.02401379E-09 0.09812397E-13 2 +-0.02163059E+06-0.04610236E+03 0.04846840E+02 0.03181717E+00-0.03572068E-03 3 + 0.01983339E-06-0.04248036E-10-0.01856223E+06 0.05613645E+02 4 +HCL 42189CL 1H 1 G 0200.00 5000.00 1000.00 1 + 0.02755335E+02 0.01473581E-01-0.04971254E-05 0.08108658E-09-0.05072063E-13 2 +-0.01191806E+06 0.06515116E+02 0.03338534E+02 0.01268207E-01-0.03666917E-04 3 + 0.04703992E-07-0.01836011E-10-0.01213151E+06 0.03193555E+02 4 +HCL2SICH3 40992H 4C 1SI 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01459366E+03 0.04006211E-01-0.04818700E-05-0.01336338E-08 0.02648821E-12 2 +-0.05346984E+06-0.04689795E+03 0.04155299E+02 0.02995026E+00-0.02799546E-03 3 + 0.01433046E-06-0.03013208E-10-0.04973616E+06 0.09051815E+02 4 +HCL2SISICL2H 40992H 2SI 2CL 4 G 0200.00 4000.00 1500.00 1 + 0.01863092E+03 0.01991871E-01-0.04703153E-05 0.02393378E-09 0.02997096E-13 2 +-0.07983306E+06-0.05812192E+03 0.08215700E+02 0.03290751E+00-0.03764294E-03 3 + 0.02071053E-06-0.04369767E-10-0.07671145E+06-0.04245506E+02 4 +HCLCCCLO 40992H 1C 2 O 1CL 2G 0200.00 4000.00 1500.00 1 + 0.01282877E+03 0.02295631E-01-0.04601887E-05-0.02941710E-09 0.01148412E-12 2 +-0.01481358E+06-0.03708152E+03 0.03082763E+02 0.03013466E+00-0.03298082E-03 3 + 0.01776354E-06-0.03720337E-10-0.01177928E+06 0.01372635E+03 4 +HCLCCHO 53090C 2H 2O 1CL 1G 0200.00 5000.00 1500.00 1 + 0.01228193E+03 0.02136310E-01-0.03756942E-05-0.01347374E-09 0.05834907E-13 2 +-0.08447210E+05-0.03860056E+03 0.01544662E+02 0.02882431E+00-0.02921314E-03 3 + 0.01557811E-06-0.03358528E-10-0.04546644E+05 0.01905110E+03 4 +HCLSI(CH3)2 40992H 7C 2SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01779932E+03 0.06864497E-01-0.06677913E-05-0.02916791E-08 0.05251096E-12 2 +-0.04235416E+06-0.06627844E+03 0.03428693E+02 0.03880542E+00-0.03118298E-03 3 + 0.01483918E-06-0.03097758E-10-0.03676770E+06 0.01220014E+03 4 +HCLSI(CH3)CH2 40992H 6C 2SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01684996E+03 0.05769153E-01-0.06362653E-05-0.02117805E-08 0.04004912E-12 2 +-0.01692029E+06-0.05821970E+03 0.03518672E+02 0.03868692E+00-0.03578989E-03 3 + 0.01856940E-06-0.03976975E-10-0.01207708E+06 0.01340137E+03 4 +HCLSICH2 40992H 3C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01094639E+03 0.03063482E-01-0.04057563E-05-0.07933510E-09 0.01649546E-12 2 +-0.03161099E+05-0.03101113E+03 0.02331473E+02 0.02712338E+00-0.02843577E-03 3 + 0.01542443E-06-0.03288710E-10-0.03745104E+04 0.01417701E+03 4 +HCLSICH3 40992H 4C 1SI 1CL 1G 0200.00 4000.00 1500.00 1 + 0.01183446E+03 0.03802168E-01-0.04054360E-05-0.01478932E-08 0.02756845E-12 2 +-0.09669808E+05-0.03413556E+03 0.03061496E+02 0.02418432E+00-0.02072566E-03 3 + 0.01016711E-06-0.02124115E-10-0.06367089E+05 0.01342892E+03 4 +HCLSISI 40992H 1SI 2CL 1 G 0200.00 4000.00 1500.00 1 + 0.08766356E+02 0.08352699E-02-0.01828719E-05 0.04227080E-10 0.01924493E-13 2 + 0.03066829E+06-0.01515527E+03 0.05006777E+02 0.01170423E+00-0.01308663E-03 3 + 0.07173085E-07-0.01520111E-10 0.03183531E+06 0.04414009E+02 4 +HCN 110193H 1C 1N 1 G 0200.00 4000.00 1000.00 1 + 0.03426457E+02 0.03924190E-01-0.01601138E-04 0.03161966E-08-0.02432850E-12 2 + 0.01485552E+06 0.03607795E+02 0.02417787E+02 0.09031856E-01-0.01107727E-03 3 + 0.07980141E-07-0.02311141E-10 0.01501044E+06 0.08222891E+02 4 +HCNH 41687C 1H 2N 1 G 0200.00 4000.00 1000.00 1 + 0.04923293E+02 0.03332897E-01-0.03370897E-05-0.01901619E-08 0.03531825E-12 2 + 0.03132669E+06-0.01632509E+02 0.02759456E+02 0.06103387E-01 0.07713149E-05 3 +-0.02063094E-07 0.01931920E-11 0.03217247E+06 0.01057489E+03 4 +HCNO 120186H 1C 1N 1O 1G 0250.00 4000.00 1000.00 1 + 0.06692412E+02 0.02368360E-01-0.02371510E-05-0.01275503E-08 0.02407137E-12 2 + 0.01694737E+06-0.01245434E+03 0.03184859E+02 0.09752316E-01-0.01280203E-04 3 +-0.06163104E-07 0.03226275E-10 0.01797907E+06 0.06123844E+02 4 +HCO 121286H 1C 1O 1 G 0200.00 5000.00 1000.00 1 + 0.03557271E+02 0.03345573E-01-0.01335006E-04 0.02470573E-08-0.01713851E-12 2 + 0.03916324E+05 0.05552299E+02 0.02898330E+02 0.06199147E-01-0.09623084E-04 3 + 0.01089825E-06-0.04574885E-10 0.04159922E+05 0.08983614E+02 4 +HCO+ 121286H 1C 1O 1E -1G 0200.00 5000.00 1000.00 1 + 0.03692074E+02 0.03454732E-01-0.01316524E-04 0.02323551E-08-0.01554132E-12 2 + 0.09890941E+06 0.02330722E+02 0.02496483E+02 0.08690658E-01-0.01060445E-03 3 + 0.07882791E-07-0.02418385E-10 0.09915097E+06 0.08048178E+02 4 +HCOOH 103190C 1H 2O 2 G 0200.00 4000.00 1500.00 1 + 0.07959698E+02 0.03024532E-01-0.03434242E-05-0.01326767E-08 0.02520240E-12 2 +-0.05027445E+06-0.01872208E+03 0.09326031E+01 0.01891002E+00-0.01554964E-03 3 + 0.07290031E-07-0.01483695E-10-0.04760071E+06 0.01950653E+03 4 +HE 120186HE 1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.07453750E+04 0.09153489E+01 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.07453750E+04 0.09153488E+01 4 +HE+ 120186HE 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02500000E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.02853427E+07 0.01608405E+02 0.02500000E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.02853427E+07 0.01608405E+02 4 +HF 121286H 1F 1 G 0200.00 5000.00 1000.00 1 + 0.02956767E+02 0.07721015E-02-0.09899833E-06-0.04993521E-10 0.01429331E-13 2 +-0.03361061E+06 0.04011673E+02 0.03431841E+02 0.04404166E-02-0.08828452E-05 3 + 0.06574516E-08-0.02055910E-12-0.03381977E+06 0.01238270E+02 4 +HG2BR2(S) 81292BR 2HG 2 S 0200.00 1500.00 1000.00 1 + 0.01131527E+03 0.05176237E-01-0.09149018E-05-0.01774353E-07 0.08208311E-11 2 +-0.02812664E+06-0.03960847E+03 0.09176256E+02 0.01716637E+00-0.02379101E-03 3 + 0.01656353E-06-0.04492058E-10-0.02787921E+06-0.03016915E+03 4 +HG2CL2(S) 81292CL 2HG 2 S 0200.00 1500.00 1000.00 1 + 0.01170237E+03 0.03242224E-01-0.01018772E-05-0.03745899E-08 0.04682208E-12 2 +-0.03555571E+06-0.04461773E+03 0.01002375E+03 0.01031694E+00-0.01160577E-03 3 + 0.08123549E-07-0.02343515E-10-0.03522627E+06-0.03658009E+03 4 +HG2F2(S) 81292F 2HG 2 S 0200.00 1500.00 1000.00 1 + 0.01156086E+03 0.03513290E-01-0.04228193E-06-0.06265655E-08 0.01191005E-11 2 +-0.06207291E+06-0.04780613E+03 0.01035013E+03 0.06139501E-01-0.03674693E-05 3 +-0.03011902E-07 0.01414143E-10-0.06172955E+06-0.04143495E+03 4 +HG2I2(S) 81292HG 2I 2 S 0200.00 1500.00 1000.00 1 + 0.01104021E+03 0.05724188E-01-0.09515335E-05-0.02149612E-07 0.09793057E-11 2 +-0.01777374E+06-0.03535439E+03 0.09788829E+02 0.01440390E+00-0.01844748E-03 3 + 0.01180869E-06-0.02911372E-10-0.01774167E+06-0.03032197E+03 4 +HGAET 62987GA 1C 2H 6 G 0200.00 1500.00 0600.00 1 + 0.06580152E+02 0.01610132E+00 0.05009546E-05-0.05185148E-07 0.01524085E-10 2 + 0.08765131E+05-0.04046067E+01 0.01163284E+02 0.03282213E+00 0.06765717E-04 3 +-0.06509541E-06 0.04835807E-09 0.09767174E+05 0.02588269E+03 4 +HGAET2 62987GA 1C 4H 11 G 0200.00 1500.00 0600.00 1 + 0.06511306E+02 0.02819754E+00 0.01418751E-04-0.09000947E-07 0.02572894E-10 2 +-0.04482180E+05 0.04709022E+02-0.01486576E+02 0.05217640E+00 0.01356342E-03 3 +-0.01011982E-05 0.07319854E-09-0.02985242E+05 0.04364749E+03 4 +HGAME 62987GA 1C 1H 4 G 0200.00 1500.00 0600.00 1 + 0.05318279E+02 0.09490931E-01 0.02277164E-05-0.03005070E-07 0.09037830E-11 2 + 0.01253534E+06-0.01065710E+01 0.01784750E+02 0.02058861E+00 0.03548509E-04 3 +-0.04111927E-06 0.03108978E-09 0.01318422E+06 0.01700702E+03 4 +HGAME2 62987GA 1C 2H 7 G 0200.00 1500.00 0600.00 1 + 0.06759398E+02 0.01426103E+00-0.01174024E-05-0.05001401E-07 0.01502785E-10 2 +-0.01473265E+05-0.02967135E+02 0.09039155E+01 0.03264779E+00 0.05389244E-04 3 +-0.06814504E-06 0.05150323E-09-0.03978242E+04 0.02539305E+03 4 +HGBR 81292BR 1HG 1 G 0200.00 5000.00 1000.00 1 + 0.04470182E+02 0.01740022E-02-0.01782286E-06 0.03639776E-10-0.02699461E-14 2 + 0.01118634E+06 0.07116504E+02 0.04325519E+02 0.06429246E-02-0.04527797E-05 3 + 0.04543436E-09 0.06863204E-12 0.01121730E+06 0.07833202E+02 4 +HGCL2 81292CL 2HG 1 G 0200.00 5000.00 1000.00 1 + 0.07251462E+02 0.03082143E-02-0.01447555E-05 0.02958294E-09-0.02201214E-13 2 +-0.01981231E+06-0.06061846E+02 0.06249130E+02 0.03221573E-01-0.02109668E-04 3 +-0.07713536E-08 0.08526178E-11-0.01958242E+06-0.01015613E+02 4 +HGCL2(S) 81292CL 2HG 1 S 0200.00 1500.00 1000.00 1 + 0.07750329E+02 0.03529253E-01 0.03886646E-06-0.08307839E-08 0.02781535E-11 2 +-0.03009787E+06-0.02772331E+03 0.07611778E+02 0.05084911E-01-0.02887606E-04 3 + 0.09093899E-08 0.04734468E-12-0.03015054E+06-0.02738100E+03 4 +HGF2 81292F 2HG 1 G 0200.00 5000.00 1000.00 1 + 0.06970407E+02 0.06373497E-02-0.02938029E-05 0.05925826E-09-0.04366956E-13 2 +-0.03751535E+06-0.08137829E+02 0.05155538E+02 0.05733727E-01-0.03667157E-04 3 +-0.01223692E-07 0.01370429E-10-0.03707844E+06 0.01073098E+02 4 +HGF2(S) 81292F 2HG 1 S 0200.00 2000.00 1000.00 1 + 0.08322627E+02 0.02317361E-01 0.02103511E-05-0.09665973E-09 0.01631405E-12 2 +-0.05342179E+06-0.03414006E+03 0.08250103E+02 0.02543387E-01-0.07218619E-06 3 + 0.08044224E-09-0.03175138E-12-0.05340276E+06-0.03377085E+03 4 +HGH 81292H 1HG 1 G 0200.00 5000.00 1000.00 1 + 0.03674353E+02 0.01116618E-01-0.03728888E-05 0.07077644E-09-0.04984356E-13 2 + 0.02745200E+06 0.04954799E+02 0.02859969E+02 0.03217363E-01-0.02993410E-04 3 + 0.02267118E-07-0.08671660E-11 0.02771287E+06 0.09273314E+02 4 +HGI 81292HG 1I 1 G 0200.00 5000.00 1000.00 1 + 0.04487935E+02 0.03041356E-02-0.07219846E-07 0.01468881E-10-0.01089820E-14 2 + 0.01470042E+06 0.08086309E+02 0.04411734E+02 0.05799910E-02-0.03475217E-05 3 + 0.01593090E-08-0.01730073E-12 0.01471610E+06 0.08458668E+02 4 +HGO 81292HG 1O 1 G 0200.00 5000.00 1000.00 1 + 0.04192036E+02 0.04176084E-02-0.01658976E-05 0.03318185E-09-0.02429647E-13 2 + 0.03713110E+05 0.04621457E+02 0.03235991E+02 0.03067171E-01-0.01992628E-04 3 +-0.04378690E-08 0.06018341E-11 0.03950193E+05 0.09495331E+02 4 +HGO(S) 81292HG 1O 1 S 0200.00 1000.00 1000.00 1 + 0.07146808E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01350616E+06-0.03327734E+03 0.02854835E+02 0.01115052E+00-0.01160794E-03 3 + 0.06126729E-07-0.01377341E-10-0.01217635E+06-0.01067390E+03 4 +HMEGAET 62987GA 1C 3H 9 G 0200.00 1500.00 0600.00 1 + 0.07025463E+02 0.02564787E+00 0.09619100E-05-0.08403699E-07 0.02488960E-10 2 +-0.01361377E+05-0.03319484E+02-0.02079143E+02 0.05373076E+00 0.01181036E-03 3 +-0.01099855E-05 0.08189554E-09 0.03216961E+04 0.04086070E+03 4 +HN(OH)2 103190H 3N 1O 2 G 0200.00 4000.00 1500.00 1 + 0.09963640E+02 0.02864737E-01-0.03812930E-05-0.07443356E-09 0.01610124E-12 2 +-0.01662184E+06-0.02871770E+03 0.03244199E+01 0.02850544E+00-0.02753934E-03 3 + 0.01337294E-06-0.02571777E-10-0.01354499E+06 0.02201480E+03 4 +HN3 82687H 1N 3 G 0200.00 4000.00 1000.00 1 + 0.06023015E+02 0.02454362E-01-0.02404279E-05-0.01322973E-08 0.02474146E-12 2 + 0.03394051E+06-0.07015537E+02 0.03621003E+02 0.06030785E-01 0.04054460E-05 3 +-0.02545271E-07 0.06174280E-11 0.03482373E+06 0.06333769E+02 4 +HNC 92392H 1C 1N 1 G 0200.00 5000.00 1500.00 1 + 0.05283464E+02 0.01092476E-01-0.01170865E-05-0.02308672E-09 0.03950673E-13 2 + 0.02012958E+06-0.06388218E+02 0.03592377E+02 0.05561340E-01-0.05936823E-04 3 + 0.03782329E-07-0.09365092E-11 0.02079803E+06 0.02732160E+02 4 +HNCN 62790C 1H 1N 2 G 0200.00 4000.00 1500.00 1 + 0.07251951E+02 0.01587363E-01-0.01995579E-05-0.04841944E-09 0.09908280E-13 2 + 0.03563666E+06-0.01312080E+03 0.02951908E+02 0.01245028E+00-0.01161611E-03 3 + 0.05786108E-07-0.01175004E-10 0.03712483E+06 0.09811426E+02 4 +HNCNH 62790C 1H 2N 2 G 0200.00 4000.00 1500.00 1 + 0.08374143E+02 0.02366143E-01-0.03502324E-05-0.04391102E-09 0.01096859E-12 2 + 0.01461088E+06-0.02107393E+03 0.01001985E+02 0.02464016E+00-0.02759770E-03 3 + 0.01532472E-06-0.03268280E-10 0.01679368E+06 0.01694325E+03 4 +HNCO 110193H 1C 1N 1O 1G 0200.00 4000.00 1400.00 1 + 0.06545307E+02 0.01965760E-01-0.01562664E-05-0.01074318E-08 0.01874680E-12 2 +-0.01664773E+06-0.01003880E+03 0.03858467E+02 0.06390342E-01-0.09016628E-05 3 +-0.01898224E-07 0.07651380E-11-0.01562343E+06 0.04882493E+02 4 +HNF 42489H 1N 1F 1 G 0200.00 3000.00 1000.00 1 + 0.04133219E+02 0.01912057E-01-0.01625330E-05-0.01726461E-08 0.03743691E-12 2 + 0.01467052E+06 0.03292122E+02 0.03249761E+02 0.03261818E-01 0.04355642E-06 3 +-0.01100277E-07 0.02926757E-11 0.01499126E+06 0.08187434E+02 4 +HNF2 42489H 1N 1F 2 G 0200.00 3000.00 1000.00 1 + 0.05704866E+02 0.03049897E-01-0.02826803E-05-0.02923185E-08 0.06551055E-12 2 +-0.09107488E+05-0.03941332E+02 0.02572812E+02 0.08762144E-01-0.02326921E-05 3 +-0.05000826E-07 0.02143838E-10-0.08086760E+05 0.01300681E+03 4 +HNNHO 103190H 2N 2O 1 G 0200.00 4000.00 1500.00 1 + 0.07462348E+02 0.03113521E-01-0.02614534E-05-0.01394601E-08 0.02363352E-12 2 + 0.07517607E+05-0.01619293E+03 0.07974964E+01 0.01693171E+00-0.01141086E-03 3 + 0.04201242E-07-0.06926417E-11 0.01010665E+06 0.02038765E+03 4 +HNNO 103190H 1N 2O 1 G 0200.00 4000.00 1500.00 1 + 0.06991217E+02 0.01875970E-01-0.02124584E-05-0.06710472E-09 0.01230508E-12 2 + 0.02497566E+06-0.01123523E+03 0.02238298E+02 0.01359200E+00-0.01179873E-03 3 + 0.05392971E-07-0.01010859E-10 0.02660259E+06 0.01413679E+03 4 +HNNONO 10891H 1N 3O 2 G 0200.00 4000.00 1500.00 1 + 0.01246747E+03 0.02018438E-01-0.03674474E-05-0.03459117E-09 0.01090810E-12 2 + 0.02452278E+06-0.03868309E+03 0.02642670E+02 0.02625418E+00-0.02477878E-03 3 + 0.01184374E-06-0.02298757E-10 0.02793182E+06 0.01383705E+03 4 +HNO 121286H 1N 1O 1 G 0200.00 5000.00 1000.00 1 + 0.03615144E+02 0.03212486E-01-0.01260337E-04 0.02267298E-08-0.01536236E-12 2 + 0.01066191E+06 0.04810264E+02 0.02784403E+02 0.06609646E-01-0.09300223E-04 3 + 0.09437980E-07-0.03753146E-10 0.01091878E+06 0.09035629E+02 4 +HNO2 103190H 1N 1O 2 G 0200.00 4000.00 1500.00 1 + 0.06479630E+02 0.01995274E-01-0.01740387E-05-0.09695872E-09 0.01701480E-12 2 +-0.09999271E+05-0.01067286E+03 0.01934838E+02 0.01010036E+00-0.04964616E-04 3 + 0.08701120E-08-0.02324135E-13-0.08105484E+05 0.01473250E+03 4 +HNO3 121286H 1N 1O 3 G 0200.00 5000.00 1000.00 1 + 0.07003845E+02 0.05811493E-01-0.02333789E-04 0.04288814E-08-0.02959385E-12 2 +-0.01889952E+06-0.01047863E+03 0.01353185E+02 0.02220025E+00-0.01978812E-03 3 + 0.08773908E-07-0.01658384E-10-0.01738563E+06 0.01851868E+03 4 +HNOH 102290H 2N 1O 1 G 0200.00 4000.00 1500.00 1 + 0.06396134E+02 0.01821067E-01-0.01870892E-05-0.07844472E-09 0.01444855E-12 2 + 0.07859615E+05-0.01040479E+03 0.02125274E+02 0.01066282E+00-0.07602589E-04 3 + 0.03081642E-07-0.05726498E-11 0.09553544E+05 0.01309672E+03 4 +HO2 20387H 1O 2 G 0200.00 5000.00 1000.00 1 + 0.04072191E+02 0.02131296E-01-0.05308145E-05 0.06112269E-09-0.02841165E-13 2 +-0.01579727E+04 0.03476029E+02 0.02979963E+02 0.04996697E-01-0.03790997E-04 3 + 0.02354192E-07-0.08089024E-11 0.01762274E+04 0.09222724E+02 4 +HOCH2OH 103190C 1H 4O 2 G 0200.00 4000.00 1500.00 1 + 0.01089048E+03 0.04000443E-01-0.04729597E-05-0.01295970E-08 0.02552658E-12 2 +-0.05347440E+06-0.03540623E+03-0.06548874E+01 0.03377715E+00-0.03157595E-03 3 + 0.01532216E-06-0.02994259E-10-0.04963411E+06 0.02579207E+03 4 +HOCL 40992H 1 O 1CL 1 G 0200.00 4000.00 1500.00 1 + 0.04953150E+02 0.01100053E-01-0.01256296E-05-0.03349951E-09 0.06464506E-13 2 +-0.01114737E+06-0.06838384E+01 0.02861399E+02 0.07134484E-01-0.07311028E-04 3 + 0.03980236E-07-0.08506421E-11-0.01049306E+06 0.01021485E+03 4 +HOCN 110193H 1C 1N 1O 1G 0200.00 4000.00 1400.00 1 + 0.06022112E+02 0.01929530E-01-0.01455029E-05-0.01045811E-08 0.01794814E-12 2 +-0.04040321E+05-0.05866433E+02 0.03789424E+02 0.05387981E-01-0.06518270E-05 3 +-0.01420164E-07 0.05367969E-11-0.03135335E+05 0.06667052E+02 4 +HOCO 103190C 1H 1O 2 G 0200.00 4000.00 1500.00 1 + 0.07517634E+02 0.01259029E-01-0.01910901E-05-0.03136391E-09 0.07547673E-13 2 +-0.02634121E+06-0.01448392E+03 0.02285122E+02 0.01351435E+00-0.01160407E-03 3 + 0.05047011E-07-0.09032231E-11-0.02448416E+06 0.01367874E+03 4 +HONO 31787H 1N 1O 2 G 0200.00 5000.00 1000.00 1 + 0.05486893E+02 0.04218065E-01-0.01649143E-04 0.02971877E-08-0.02021148E-12 2 +-0.01126865E+06-0.02997002E+02 0.02290413E+02 0.01409922E+00-0.01367872E-03 3 + 0.07498780E-07-0.01876905E-10-0.01043195E+06 0.01328077E+03 4 +HONO2 103190H 1N 1O 3 G 0200.00 4000.00 1500.00 1 + 0.09756148E+02 0.01900948E-01-0.03240020E-05-0.03976639E-09 0.01100334E-12 2 +-0.01942244E+06-0.02690023E+03 0.07877668E+01 0.02382329E+00-0.02205964E-03 3 + 0.01034048E-06-0.01972857E-10-0.01630442E+06 0.02108964E+03 4 +HSI(CH3)2 61991H 7C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01220942E+03 0.09173338E-01-0.01186653E-05-0.01188590E-07 0.02418110E-11 2 + 0.03781464E+05-0.03668250E+03 0.02568267E+02 0.03071446E+00-0.01863911E-03 3 + 0.06210373E-07-0.09376544E-11 0.07271919E+05 0.01551808E+03 4 +HSI(CH3)2CH2 61991H 9C 3SI 1 G 0200.00 2500.00 1500.00 1 + 0.01723999E+03 0.01101475E+00-0.01546410E-05-0.01338650E-07 0.02653453E-11 2 +-0.02842083E+05-0.06077749E+03 0.03367732E+02 0.04430759E+00-0.03246598E-03 3 + 0.01379387E-06-0.02586752E-10 0.02041653E+05 0.01367000E+03 4 +HSI(CH3)3 61991H 10C 3SI 1 G 0200.00 2500.00 1500.00 1 + 0.01689903E+03 0.01338224E+00-0.01538243E-05-0.01746233E-07 0.03550375E-11 2 +-0.02740327E+06-0.06121112E+03 0.03224459E+02 0.04373614E+00-0.02597404E-03 3 + 0.08415742E-07-0.01236561E-10-0.02243583E+06 0.01289306E+03 4 +HSI(NH2)2 22790SI 1H 5N 2 G 0200.00 4000.00 1000.00 1 + 0.01171677E+03 0.05339021E-01-0.04667824E-05-0.02824087E-08 0.05080916E-12 2 +-0.01264169E+05-0.03245118E+03 0.06289699E+02 0.01675060E+00-0.01520878E-04 3 +-0.01070065E-06 0.05538641E-10 0.03154771E+04-0.03746008E+02 4 +HSI(NH2)3 22790SI 1H 7N 3 G 0200.00 4000.00 1000.00 1 + 0.01661406E+03 0.07395874E-01-0.06440010E-05-0.03918887E-08 0.07045959E-12 2 +-0.03859547E+06-0.05865318E+03 0.07070983E+02 0.02754435E+00-0.02603669E-04 3 +-0.01874567E-06 0.09778511E-10-0.03582658E+06-0.08209675E+02 4 +HSIC 61991H 1C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.05849544E+02 0.07628346E-02-0.09974130E-06-0.03811586E-09 0.08581471E-13 2 + 0.09097438E+06-0.04862062E+02 0.03761288E+02 0.06108070E-01-0.05721172E-04 3 + 0.02805116E-07-0.05597709E-11 0.09168219E+06 0.06236756E+02 4 +HSICCH 61991H 2C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.09098096E+02 0.02292999E-01-0.01278589E-05-0.01869017E-08 0.03514532E-12 2 + 0.04933532E+06-0.02153271E+03 0.03799881E+02 0.01633703E+00-0.01551299E-03 3 + 0.07880591E-07-0.01619982E-10 0.05109468E+06 0.06475363E+02 4 +HSICH2 61991H 3C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.08641686E+02 0.02535259E-01-0.01532829E-05-0.02418416E-08 0.04870000E-12 2 + 0.03962671E+06-0.02128790E+03 0.02376883E+02 0.01822864E+00-0.01641260E-03 3 + 0.07937691E-07-0.01590356E-10 0.04179768E+06 0.01215211E+03 4 +HSICH3 61991H 4C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.07578257E+02 0.05000398E-01-0.08706991E-06-0.06516750E-08 0.01344446E-11 2 + 0.02138075E+06-0.01438961E+03 0.02658293E+02 0.01547950E+00-0.08319889E-04 3 + 0.02184355E-07-0.02302844E-11 0.02319822E+06 0.01240552E+03 4 +HSICL 121986SI 1H 1CL 1 G 0200.00 2000.00 1000.00 1 + 0.04900628E+02 0.01981752E-01-0.03634647E-05-0.02285211E-08 0.07633527E-12 2 + 0.06914634E+05 0.01377004E+02 0.03072748E+02 0.09057843E-01-0.01159134E-03 3 + 0.08310477E-07-0.02483000E-10 0.07324210E+05 0.01033490E+03 4 +HSIN 22790H 1SI 1N 1 G 0200.00 4000.00 1000.00 1 + 0.05746590E+02 0.01167119E-01-0.01360742E-05-0.05908617E-09 0.01174696E-12 2 + 0.04484671E+06-0.05931788E+02 0.04865176E+02 0.01775119E-01 0.04890870E-05 3 + 0.03922383E-08-0.07913276E-11 0.04526353E+06-0.07134509E+01 4 +HSINH 42489SI 1H 2N 1 G 0200.00 3000.00 1000.00 1 + 0.06493435E+02 0.02567980E-01-0.03126526E-05-0.02577467E-08 0.06216479E-12 2 + 0.04035934E+06-0.07830112E+02 0.03566343E+02 0.08446736E-01-0.07699952E-05 3 +-0.05270970E-07 0.02581065E-10 0.04124904E+06 0.07780791E+02 4 +HSINH2 42489SI 1N 1H 3 G 0200.00 3000.00 1000.00 1 + 0.06177894E+02 0.04689964E-01-0.03583294E-05-0.04457980E-08 0.09379187E-12 2 + 0.01091277E+06-0.07006672E+02 0.02716144E+02 0.01204278E+00-0.09827195E-05 3 +-0.07408477E-07 0.03789792E-10 0.01190771E+06 0.01126252E+03 4 +HSISICL 40992H 1SI 2CL 1 G 0200.00 4000.00 1500.00 1 + 0.09242357E+02 0.07265211E-02-0.02039730E-05-0.03559737E-10 0.04236577E-13 2 + 0.03651789E+06-0.01714597E+03 0.05753464E+02 0.01000321E+00-0.01097056E-03 3 + 0.06117942E-07-0.01351102E-10 0.03773825E+06 0.01395110E+02 4 +I*C3H7 120186C 3H 7 G 0200.00 5000.00 1000.00 1 + 0.08063369E+02 0.01574488E+00-0.05182392E-04 0.07477245E-08-0.03854422E-12 2 + 0.05313871E+05-0.02192647E+03 0.01713300E+02 0.02542616E+00 0.01580808E-04 3 +-0.01821286E-06 0.08827710E-10 0.07535809E+05 0.01297901E+03 4 +K 81092K 1 G 0200.00 5000.00 1000.00 1 + 0.02563720E+02-0.01453656E-02 0.01223794E-05-0.05337797E-09 0.01196251E-12 2 + 0.09958933E+05 0.04689090E+02 0.02599395E+02-0.06665192E-02 0.01537419E-04 3 +-0.01462701E-07 0.04917226E-11 0.09968534E+05 0.04606125E+02 4 +K(L) 81092K 1 L 0200.00 2000.00 1000.00 1 + 0.03274152E+02-0.08858241E-03 0.03862458E-05 0.01524701E-08-0.07158116E-12 2 +-0.05365253E+04-0.09686786E+02 0.04883188E+02-0.05109876E-01 0.08368289E-04 3 +-0.07183867E-07 0.02694974E-10-0.01014822E+05-0.01801753E+03 4 +K+ 81092K 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02500252E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.06110476E+06 0.04335097E+02 0.02500252E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.06110476E+06 0.04335097E+02 4 +K2 81092K 2 G 0200.00 5000.00 1000.00 1 + 0.04493744E+02 0.02561175E-02-0.03738461E-07 0.07392168E-11-0.05314252E-15 2 + 0.01393386E+06 0.04344696E+02 0.04445378E+02 0.04507960E-02-0.02923572E-05 3 + 0.01874060E-08-0.04441270E-12 0.01394330E+06 0.04577300E+02 4 +K2B4O7(S) 81292B 4K 2O 7 S 0200.00 2000.00 1000.00 1 + 0.02241821E+03 0.01632758E+00-0.03423961E-04-0.01996427E-07 0.07329643E-11 2 +-0.04092750E+07-0.01095459E+04-0.02998519E+02 0.01131803E+01-0.01363625E-02 3 + 0.07498933E-06-0.01475027E-09-0.04041216E+07 0.01385206E+03 4 +K2B6O10(S) 81292B 6K 2O 10 S 0200.00 2000.00 1000.00 1 + 0.03118760E+03 0.02605101E+00-0.07109914E-04-0.01524101E-07 0.08605891E-11 2 +-0.05702715E+07-0.01601394E+04 0.08964822E+02 0.01355307E+01-0.02844741E-02 3 + 0.03136564E-05-0.01242126E-08-0.05641143E+07-0.05121922E+03 4 +K2B8O13(S) 81292B 8K 2O 13 S 0200.00 2000.00 1000.00 1 + 0.04112535E+03 0.02714051E+00 0.01343626E-04-0.04965544E-07 0.09664300E-11 2 +-0.07315279E+07-0.02135898E+04 0.02800687E+03 0.02363518E+00 0.05436592E-03 3 +-0.04802017E-06 0.07622581E-10-0.07248984E+07-0.01332889E+04 4 +K2CO3(S) 81292C 1K 2O 3 S 0200.00 2000.00 1000.00 1 + 0.01170935E+03 0.01041619E+00 0.01020812E-04-0.05155670E-08 0.09388472E-12 2 +-0.01424670E+07-0.05154899E+03 0.06680495E+02 0.03154875E+00-0.03258348E-03 3 + 0.02341080E-06-0.06331882E-10-0.01414994E+07-0.02751031E+03 4 +K2H2O2 81292H 2K 2O 2 G 0200.00 5000.00 1000.00 1 + 0.09476007E+02 0.05520012E-01-0.02003512E-04 0.03416984E-08-0.02230089E-12 2 +-0.08204786E+06-0.01665546E+03 0.06069657E+02 0.01657159E+00-0.01641134E-03 3 + 0.09628012E-07-0.02546013E-10-0.08118152E+06 0.05625929E+01 4 +K2O(S) 81092K 2O 1 S 0200.00 2000.00 1000.00 1 + 0.09200109E+02 0.04813529E-01-0.01018656E-04 0.08972973E-08-0.02121417E-11 2 +-0.04671154E+06-0.04264142E+03 0.02640315E+02 0.04577225E+00-0.09349357E-03 3 + 0.08921012E-06-0.03044898E-09-0.04583697E+06-0.01392763E+03 4 +K2O2(S) 81092K 2O 2 S 0200.00 2000.00 1000.00 1 + 0.01094138E+03 0.06102309E-01 0.08639951E-05-0.02383978E-08 0.01021959E-12 2 +-0.06335114E+06-0.05099447E+03 0.08940024E+02 0.01225014E+00-0.08065365E-04 3 + 0.07182271E-07-0.02627561E-10-0.06277485E+06-0.04066683E+03 4 +K2SO4 81092K 2O 4S 1 G 0200.00 5000.00 1000.00 1 + 0.01526056E+03 0.04272701E-01-0.01902870E-04 0.03745009E-08-0.02710228E-12 2 +-0.01368994E+07-0.04548655E+03 0.06620770E+02 0.02753542E+00-0.01909671E-03 3 +-0.04668391E-08 0.03385142E-10-0.01346318E+07-0.01043411E+02 4 +K2SO4(A) 81092K 2O 4S 1 S 0200.00 1200.00 1000.00 1 + 0.01112054E+03 0.01688473E+00 0.02694884E-04-0.06810694E-07 0.03326950E-10 2 +-0.01771853E+07-0.04766545E+03 0.05610137E+02 0.05334319E+00-0.08680538E-03 3 + 0.08485600E-06-0.02978756E-09-0.01763645E+07-0.02358624E+03 4 +K2SO4(B) 81092K 2O 4S 1 S 0200.00 1500.00 1000.00 1 + 0.01400625E+03 0.08639256E-01 0.01734839E-04-0.01101018E-07 0.02493181E-11 2 +-0.01758863E+07-0.05931899E+03 0.01384030E+03 0.09154258E-01 0.01580722E-04 3 +-0.01673984E-07 0.06273504E-11-0.01758589E+07-0.05851410E+03 4 +K3CL6AL(S) 81292AL 1CL 6K 3 S 0200.00 2000.00 1000.00 1 + 0.02692199E+03 0.01202448E+00 0.05058586E-06-0.02459252E-07 0.06112274E-11 2 +-0.02602720E+07-0.01118533E+04 0.02756025E+03 0.01980910E-01 0.02914285E-03 3 +-0.03306608E-06 0.01153111E-09-0.02601182E+07-0.01132925E+04 4 +K3CL9AL2(S) 81292AL 2CL 9K 3 S 0200.00 1500.00 1000.00 1 + 0.04789960E+03-0.03698524E-01 0.01208277E-04 0.06439299E-07-0.01714364E-10 2 +-0.03594776E+07-0.02186357E+04 0.03685728E+03 0.02754220E-01 0.05087779E-03 3 +-0.06808868E-06 0.02773367E-09-0.03554758E+07-0.01561649E+04 4 +K3F6AL(S) 81292AL 1F 6K 3 S 0200.00 2000.00 1000.00 1 + 0.02557611E+03 0.01452585E+00-0.02005301E-04-0.01843642E-07 0.05259736E-11 2 +-0.04090259E+07-0.01172057E+04 0.01633462E+03 0.05150368E+00-0.07128115E-03 3 + 0.06274052E-06-0.02251868E-09-0.04067185E+07-0.07147460E+03 4 +KBF4 81292B 1F 4K 1 G 0200.00 5000.00 1000.00 1 + 0.01230182E+03 0.04142506E-01-0.01820830E-04 0.03550730E-08-0.02552394E-12 2 +-0.01910389E+07-0.03449073E+03 0.05358002E+02 0.02295803E+00-0.01721231E-03 3 + 0.02466718E-07 0.01382599E-10-0.01891819E+07 0.01299769E+02 4 +KBO2 81292B 1K 1O 2 G 0200.00 5000.00 1000.00 1 + 0.07506115E+02 0.02663024E-01-0.01134505E-04 0.02165299E-08-0.01532624E-12 2 +-0.08364206E+06-0.08262075E+02 0.04636629E+02 0.01088843E+00-0.09865937E-04 3 + 0.04481115E-07-0.09043993E-11-0.08286314E+06 0.06500684E+02 4 +KBO2(S) 81292B 1K 1O 2 S 0200.00 2000.00 1000.00 1 + 0.07971486E+02 0.06730890E-01-0.01544574E-04-0.09972352E-08 0.04052630E-11 2 +-0.01227148E+07-0.03858371E+03 0.01603821E+02 0.03275175E+00-0.04757948E-03 3 + 0.03848067E-06-0.01269093E-09-0.01212629E+07-0.07486101E+02 4 +KBR 81292BR 1K 1 G 0200.00 5000.00 1000.00 1 + 0.04458711E+02 0.01473836E-02-0.02499466E-06 0.05161851E-10-0.03875234E-14 2 +-0.02300303E+06 0.04657488E+02 0.04270624E+02 0.07398923E-02-0.05320569E-05 3 +-0.05894879E-10 0.01133094E-11-0.02296215E+06 0.05593031E+02 4 +KBR(L) 81292BR 1K 1 L 0200.00 2500.00 1000.00 1 + 0.08404630E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.04779214E+06-0.03519115E+03 0.08404630E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.04779214E+06-0.03519115E+03 4 +KBR(S) 81292BR 1K 1 S 0200.00 1500.00 1000.00 1 +-0.05170830E+02 0.01746852E+00 0.01013392E-04-0.07494241E-07 0.02378879E-10 2 +-0.04495981E+06 0.03946532E+03 0.05431605E+02 0.03845234E-01-0.03455247E-04 3 +-0.09685064E-09 0.02470977E-10-0.04912882E+06-0.02040493E+03 4 +KCL 81092CL 1K 1 G 0200.00 5000.00 1000.00 1 + 0.04434967E+02 0.01726721E-02-0.03865868E-06 0.07943251E-10-0.05932801E-14 2 +-0.02716306E+06 0.03398542E+02 0.04149517E+02 0.01039142E-01-0.07034589E-05 3 +-0.01200715E-08 0.02112008E-11-0.02709960E+06 0.04826011E+02 4 +KCL(L) 81092CL 1K 1 L 0200.00 2000.00 1000.00 1 + 0.08852542E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.05337392E+06-0.04001344E+03 0.08852542E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.05337392E+06-0.04001344E+03 4 +KCL(S) 81092CL 1K 1 S 0200.00 1500.00 1000.00 1 + 0.01391136E+01 0.07749002E-01 0.02100056E-04-0.01960861E-07 0.03813962E-12 2 +-0.05188544E+06 0.09020889E+02 0.05818812E+02-0.05778791E-02 0.09593293E-04 3 +-0.01468548E-06 0.07916702E-10-0.05429399E+06-0.02336092E+03 4 +KCL4AL(S) 81292AL 1CL 4K 1 S 0200.00 2000.00 1000.00 1 + 0.02311946E+03 0.01525936E-01-0.06380630E-06-0.04176163E-08 0.01306884E-11 2 +-0.01521618E+07-0.01113391E+04 0.01753111E+03-0.03647218E-01 0.03673018E-03 3 +-0.03613268E-06 0.09813280E-10-0.01492592E+07-0.07647553E+03 4 +KCLO4(S) 81092CL 1K 1O 4 S 0200.00 1500.00 1000.00 1 + 0.01704025E+03 0.06660737E-01-0.06016704E-05 0.09785776E-08-0.05059647E-11 2 +-0.05676480E+06-0.08085843E+03-0.08468085E+02 0.01228758E+01-0.02129487E-02 3 + 0.01790606E-05-0.05694776E-09-0.05181381E+06 0.04005509E+03 4 +KCN 81092C 1K 1N 1 G 0200.00 5000.00 1000.00 1 + 0.05842749E+02 0.01653475E-01-0.06722096E-05 0.01241081E-08-0.08573718E-13 2 + 0.07711161E+05-0.03406482E+02 0.05315387E+02 0.03936776E-01-0.05387426E-04 3 + 0.04814072E-07-0.01739264E-10 0.07842257E+05-0.08199391E+01 4 +KCN(L) 81092C 1K 1N 1 L 0200.00 3000.00 1000.00 1 + 0.09058883E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01522798E+06-0.03545687E+03 0.09058883E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.01522798E+06-0.03545687E+03 4 +KCN(S) 81092C 1K 1N 1 S 0200.00 2000.00 1000.00 1 + 0.07894013E+02 0.02150449E-02-0.01621315E-05 0.06831993E-09-0.01060712E-12 2 +-0.01600422E+06-0.02964975E+03 0.08115453E+02-0.08847082E-02 0.01981085E-04 3 +-0.01804607E-07 0.05974163E-11-0.01604356E+06-0.03067895E+03 4 +KF 81292F 1K 1 G 0200.00 5000.00 1000.00 1 + 0.04357120E+02 0.02586241E-02-0.08236973E-06 0.01676907E-09-0.01243132E-13 2 +-0.04063861E+06 0.02285054E+02 0.03798984E+02 0.01885430E-01-0.01210870E-04 3 +-0.03741075E-08 0.04494632E-11-0.04051013E+06 0.05095577E+02 4 +KF(L) 81292F 1K 1 L 0200.00 3000.00 1000.00 1 + 0.08656265E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.06927377E+06-0.04118344E+03 0.08656265E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.06927377E+06-0.04118343E+03 4 +KF(S) 81292F 1K 1 S 0200.00 2000.00 1000.00 1 + 0.03272299E+01 0.08993195E-01-0.03094381E-06-0.02624963E-07 0.07101532E-11 2 +-0.06804909E+06 0.05309298E+02 0.06190467E+02-0.05622034E-01 0.02294401E-03 3 +-0.02818213E-06 0.01204436E-09-0.07014057E+06-0.02637925E+03 4 +KH 81092H 1K 1 G 0200.00 5000.00 1000.00 1 + 0.03968138E+02 0.07086924E-02-0.02618517E-05 0.05096044E-09-0.03655452E-13 2 + 0.01350120E+06 0.08027413E+01 0.02900121E+02 0.03518317E-01-0.02544774E-04 3 + 0.04599961E-08 0.01286229E-11 0.01379667E+06 0.06342766E+02 4 +KH(S) 81092H 1K 1 S 0200.00 1500.00 1000.00 1 + 0.05864564E+02 0.01204909E-01 0.02825877E-06 0.03559937E-08-0.02515747E-11 2 +-0.09079129E+05-0.02848776E+03 0.05248775E+01 0.02016870E+00-0.02768125E-03 3 + 0.02024240E-06-0.06052568E-10-0.07796234E+05-0.01890097E+02 4 +KI 81092I 1K 1 G 0200.00 5000.00 1000.00 1 + 0.04470767E+02 0.01359027E-02-0.01768799E-06 0.03648327E-10-0.02733674E-14 2 +-0.01644198E+06 0.05528315E+02 0.04327901E+02 0.05945793E-02-0.04409470E-05 3 + 0.04559572E-09 0.06522621E-12-0.01641095E+06 0.06237795E+02 4 +KI(L) 81092I 1K 1 L 0200.00 2500.00 1000.00 1 + 0.08706593E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.04022598E+06-0.03588112E+03 0.08706593E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.04022598E+06-0.03588112E+03 4 +KI(S) 81092I 1K 1 S 0200.00 2000.00 1000.00 1 + 0.01442913E+02 0.09802845E-01-0.01380615E-04-0.02325573E-07 0.07600708E-11 2 +-0.03988335E+06 0.02717618E+02 0.05114120E+02 0.08508960E-01-0.02212545E-03 3 + 0.02836093E-06-0.01155892E-09-0.04120049E+06-0.01812497E+03 4 +KO 81092K 1O 1 G 0200.00 5000.00 1000.00 1 + 0.04400291E+02 0.02386787E-02-0.05880047E-06 0.01206713E-09-0.09006961E-14 2 + 0.07217110E+05 0.03434775E+02 0.03985333E+02 0.01469353E-01-0.09479054E-05 3 +-0.02419141E-08 0.03264700E-11 0.07311120E+05 0.05517902E+02 4 +KO- 81092K 1O 1E 1 G 0200.00 5000.00 1000.00 1 + 0.04394805E+02 0.02418371E-02-0.06146423E-06 0.01255348E-09-0.09326869E-14 2 +-0.01794565E+06 0.02053687E+02 0.03961007E+02 0.01526099E-01-0.09806386E-05 3 +-0.02666917E-08 0.03470232E-11-0.01784737E+06 0.04231682E+02 4 +KO2(S) 81092K 1O 2 S 0200.00 1500.00 1000.00 1 + 0.01049310E+03 0.01397618E-01-0.06976643E-05 0.03477427E-08-0.01222708E-11 2 +-0.03767516E+06-0.04607321E+03 0.04023244E+02 0.02903561E+00-0.04812416E-03 3 + 0.03816613E-06-0.01168231E-09-0.03635805E+06-0.01502191E+03 4 +KOH 81092H 1K 1O 1 G 0200.00 2000.00 1000.00 1 + 0.09996477E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.05262511E+06-0.04533806E+03 0.09996477E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.05262511E+06-0.04533805E+03 4 +KOH+ 81092H 1K 1O 1E -1G 0200.00 5000.00 1000.00 1 + 0.05583889E+02 0.01372118E-01-0.04239710E-05 0.06231942E-09-0.03548772E-13 2 + 0.05821436E+06-0.02017959E+02 0.05036081E+02 0.04278173E-01-0.04213406E-04 3 + 0.01114253E-07 0.03757057E-11 0.05823345E+06 0.03093667E+01 4 +ME2GAET 62987GA 1C 4H 11 G 0200.00 1500.00 0600.00 1 + 0.07174541E+02 0.03235532E+00 0.01495199E-04-0.01048226E-06 0.03053962E-10 2 +-0.06383914E+05-0.02026765E+02-0.03218207E+02 0.06398884E+00 0.01554552E-03 3 +-0.01284710E-05 0.09441259E-09-0.04451897E+05 0.04848091E+03 4 +MEGAET 62987GA 1C 3H 8 G 0200.00 1500.00 0600.00 1 + 0.06600990E+02 0.02284791E+00 0.01013375E-04-0.07318046E-07 0.02140197E-10 2 + 0.04071593E+05 0.05239052E+01-0.08169937E+01 0.04554296E+00 0.01053133E-03 3 +-0.09079987E-06 0.06700564E-09 0.05448005E+05 0.03655502E+03 4 +MEGAET2 62987GA 1C 5H 13 G 0200.00 1500.00 0600.00 1 + 0.08123156E+02 0.03978908E+00 0.01690979E-04-0.01308415E-06 0.03852599E-10 2 +-0.08091057E+05-0.05039992E+02-0.05607499E+02 0.08187357E+00 0.01920530E-03 3 +-0.01678979E-05 0.01243354E-08-0.05546688E+05 0.06163371E+03 4 +MG 81292MG 1 G 0200.00 5000.00 1000.00 1 + 0.02392633E+02 0.02085925E-02-0.01269898E-05 0.02553204E-09-0.04502495E-14 2 + 0.01704914E+06 0.04211876E+02 0.02416375E+02 0.05325518E-02-0.01135514E-04 3 + 0.09757325E-08-0.02898280E-11 0.01701992E+06 0.03983786E+02 4 +MG(L) 81292MG 1 L 0200.00 2500.00 1000.00 1 + 0.02664314E+02 0.01304526E-01-0.07547418E-07 0.06776047E-10-0.01436523E-13 2 + 0.02234430E+04-0.01047801E+03 0.02161491E+02 0.04242991E-01-0.06464607E-04 3 + 0.06116790E-07-0.02090033E-10 0.02996028E+04-0.08229090E+02 4 +MG(S) 81292MG 1 S 0200.00 2000.00 1000.00 1 + 0.02318547E+02 0.01929427E-01-0.01682130E-05 0.04131403E-09-0.01669293E-13 2 +-0.07634172E+04-0.09802473E+02 0.01505637E+02 0.09217769E-01-0.01955590E-03 3 + 0.02020331E-06-0.07251403E-10-0.07226661E+04-0.06689818E+02 4 +MG+ 81292MG 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02504405E+02-0.08920014E-04 0.06671727E-07-0.02081615E-10 0.02311490E-14 2 + 0.01064936E+07 0.04292208E+02 0.02498282E+02 0.01465863E-03-0.03808341E-06 3 + 0.04118195E-09-0.01573362E-12 0.01064953E+07 0.04322873E+02 4 +MG2 81292MG 2 G 0200.00 5000.00 1000.00 1 + 0.03671278E+02-0.02125120E-02 0.01013096E-05-0.02144628E-09 0.01719351E-13 2 + 0.03362331E+06 0.08548934E+02 0.04345606E+02-0.02080614E-01 0.01110301E-04 3 + 0.08675645E-08-0.07025087E-11 0.03346530E+06 0.05134171E+02 4 +MG2BR4 81292BR 4MG 2 G 0200.00 5000.00 1000.00 1 + 0.01577579E+03 0.02832096E-02-0.01343784E-05 0.02764443E-09-0.02066139E-13 2 +-0.09710095E+06-0.03457961E+03 0.01476089E+03 0.03361559E-01-0.02433120E-04 3 +-0.05502974E-08 0.08111758E-11-0.09687714E+06-0.02950851E+03 4 +MG2C3(S) 81292C 3MG 2 S 0200.00 2500.00 1000.00 1 + 0.01239169E+03 0.04624400E-01-0.02484800E-04 0.08656213E-08-0.01151950E-11 2 + 0.05393315E+05-0.06051988E+03-0.01026610E+02 0.07016433E+00-0.01240220E-02 3 + 0.01009934E-05-0.03082738E-09 0.07664551E+05 0.01701243E+02 4 +MG2F4 81292F 4MG 2 G 0200.00 5000.00 1000.00 1 + 0.01441927E+03 0.01917749E-01-0.08894670E-05 0.01801607E-08-0.01331627E-12 2 +-0.02113316E+07-0.04283410E+03 0.08770948E+02 0.01784847E+00-0.01109718E-03 3 +-0.04603306E-07 0.04695460E-10-0.02099919E+07-0.01422645E+03 4 +MGAL2O4(S) 81292AL 2MG 1O 4 S 0200.00 2800.00 1000.00 1 + 0.01495895E+03 0.08818509E-01-0.03160711E-04 0.01013391E-07-0.01228526E-11 2 +-0.02817956E+07-0.07811436E+03-0.04868005E+02 0.01055641E+01-0.01821902E-02 3 + 0.01481432E-05-0.04514191E-09-0.02784436E+07 0.01382603E+03 4 +MGB2(S) 81292B 2MG 1 S 0200.00 2000.00 1000.00 1 + 0.06619755E+02 0.01322195E-01 0.04697857E-05 0.03681802E-08-0.01739753E-11 2 +-0.01346401E+06-0.03460640E+03 0.04176086E+02 0.06396544E-01-0.05616456E-04 3 + 0.07092297E-07-0.03442529E-10-0.01255609E+06-0.02118159E+03 4 +MGBR 81292BR 1MG 1 G 0200.00 5000.00 1000.00 1 + 0.04385933E+02 0.01975075E-02-0.06117347E-06 0.01027103E-09-0.03876260E-14 2 +-0.05584836E+05 0.04357095E+02 0.03932960E+02 0.01518559E-01-0.09413456E-05 3 +-0.03806534E-08 0.04026288E-11-0.05481871E+05 0.06634707E+02 4 +MGBR2 81292BR 2MG 1 G 0200.00 5000.00 1000.00 1 + 0.07282371E+02 0.02671005E-02-0.01246470E-05 0.02534839E-09-0.01878437E-13 2 +-0.03865522E+06-0.05463838E+02 0.06436183E+02 0.02723204E-01-0.01828290E-04 3 +-0.05509276E-08 0.06681264E-11-0.03845914E+06-0.01198273E+02 4 +MGBR2+ 81292BR 2MG 1E -1 G 0200.00 5000.00 1000.00 1 + 0.07317323E+02 0.02252288E-02-0.01039562E-05 0.02025280E-09-0.01333602E-13 2 + 0.08575141E+06-0.03144653E+02 0.06600891E+02 0.02322271E-01-0.01575443E-04 3 +-0.04621806E-08 0.05719750E-11 0.08591576E+06 0.04604670E+01 4 +MGC2(S) 81292C 2MG 1 S 0200.00 2500.00 1000.00 1 + 0.07427011E+02 0.02786444E-01-0.01500518E-04 0.05235992E-08-0.06981197E-12 2 + 0.08069270E+05-0.03697419E+03-0.06510206E+01 0.04230993E+00-0.07491559E-03 3 + 0.06109534E-06-0.01867195E-09 0.09434739E+05 0.04708862E+01 4 +MGCL 81292CL 1MG 1 G 0200.00 5000.00 1000.00 1 + 0.04335941E+02 0.02574531E-02-0.09346352E-06 0.01898185E-09-0.01405830E-13 2 +-0.06564693E+05 0.03214818E+02 0.03708081E+02 0.02069048E-01-0.01328293E-04 3 +-0.04347061E-08 0.05033764E-11-0.06418555E+05 0.06382778E+02 4 +MGCL2 81292CL 2MG 1 G 0200.00 5000.00 1000.00 1 + 0.07176871E+02 0.03917414E-02-0.01814155E-05 0.03670114E-09-0.02710187E-13 2 +-0.04941693E+06-0.07830507E+02 0.06000831E+02 0.03745347E-01-0.02447708E-04 3 +-0.07873749E-08 0.09100925E-11-0.04913880E+06-0.01880677E+02 4 +MGCL2(S) 81292CL 2MG 1 S 0200.00 2000.00 1000.00 1 + 0.08460549E+02 0.02204761E-01-0.06316590E-05 0.02617815E-08-0.05082748E-12 2 +-0.07983216E+06-0.03816537E+03 0.04852236E+02 0.02102714E+00-0.03667994E-03 3 + 0.03032449E-06-0.09279303E-10-0.07928891E+06-0.02175204E+03 4 +MGCO3(S) 81292C 1MG 1O 3 S 0200.00 1000.00 1000.00 1 + 0.01585340E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01402924E+07-0.08639698E+03 0.01344667E+02 0.03695912E+00-0.04452165E-03 3 + 0.03181716E-06-0.09745892E-10-0.01354278E+07-0.09041713E+02 4 +MGF 81292F 1MG 1 G 0200.00 5000.00 1000.00 1 + 0.04166004E+02 0.04434929E-02-0.01720072E-05 0.03280565E-09-0.02190876E-13 2 +-0.02980270E+06 0.02577443E+02 0.03172942E+02 0.03157075E-01-0.02008009E-04 3 +-0.04636928E-08 0.06097890E-11-0.02955269E+06 0.07654193E+02 4 +MGF2 81292F 2MG 1 G 0200.00 5000.00 1000.00 1 + 0.06314408E+02 0.08013760E-02-0.03622602E-05 0.07202929E-09-0.05250556E-13 2 +-0.08944590E+06-0.05637362E+02 0.04365511E+02 0.06150098E-01-0.04077014E-04 3 +-0.07490467E-08 0.01130754E-10-0.08895505E+06 0.04323487E+02 4 +MGF2(S) 81292F 2MG 1 S 0200.00 2000.00 1000.00 1 + 0.08170168E+02 0.02353222E-01-0.01060785E-04 0.02392788E-08-0.01594861E-12 2 +-0.01379692E+07-0.04083052E+03 0.01762995E+02 0.03056669E+00-0.04933989E-03 3 + 0.03778577E-06-0.01108964E-09-0.01367476E+07-0.01039233E+03 4 +MGF2+ 81292F 2MG 1E -1 G 0200.00 5000.00 1000.00 1 + 0.06819974E+02 0.08267521E-02-0.03871799E-05 0.07864547E-09-0.05589085E-13 2 + 0.06903427E+06-0.08313943E+02 0.04782002E+02 0.06580736E-01-0.04470059E-04 3 +-0.08656625E-08 0.01305586E-10 0.06953005E+06 0.02038302E+02 4 +MGH 81292H 1MG 1 G 0200.00 5000.00 1000.00 1 + 0.03501857E+02 0.01196289E-01-0.04870483E-05 0.09616032E-09-0.06566165E-13 2 + 0.01915847E+06 0.02762077E+02 0.02929127E+02 0.02881565E-01-0.03702138E-04 3 + 0.03761425E-07-0.01569289E-10 0.01935649E+06 0.05809553E+02 4 +MGH2(S) 81292H 2MG 1 S 0200.00 2000.00 1000.00 1 + 0.04503751E+02 0.05009365E-01-0.07076169E-05-0.09321345E-08 0.03016174E-11 2 +-0.01106837E+06-0.02418625E+03-0.09052193E+00 0.01938007E+00-0.01936573E-03 3 + 0.01164904E-06-0.03397887E-10-0.09845471E+05-0.07606392E+01 4 +MGH2O2 81292H 2MG 1O 2 G 0200.00 5000.00 1000.00 1 + 0.08302454E+02 0.03712996E-01-0.01279645E-04 0.02102831E-08-0.01337217E-12 2 +-0.07153173E+06-0.01640682E+03 0.04724303E+02 0.01611746E+00-0.01291007E-03 3 + 0.05703660E-08 0.02430663E-10-0.07085783E+06 0.09898885E+01 4 +MGH2O2(S) 81292H 2MG 1O 2 S 0200.00 1000.00 1000.00 1 + 0.01381001E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01162998E+07-0.07323205E+03-0.04220693E+02 0.07726916E+00-0.01383568E-02 3 + 0.01155986E-05-0.03648025E-09-0.01123883E+07 0.01381610E+03 4 +MGN 81292MG 1N 1 G 0200.00 5000.00 1000.00 1 + 0.04177825E+02 0.04387980E-02-0.01726040E-05 0.03444124E-09-0.02516521E-13 2 + 0.03340716E+06 0.02969357E+02 0.03200092E+02 0.03139739E-01-0.02045035E-04 3 +-0.04125930E-08 0.05937391E-11 0.03365107E+06 0.07958522E+02 4 +MGO(S) 81292MG 1O 1 S 0200.00 4000.00 1000.00 1 + 0.04857470E+02 0.01952289E-01-0.08605956E-05 0.02101340E-08-0.01886027E-12 2 +-0.07394488E+06-0.02524503E+03 0.01971740E+02 0.01095483E+00-0.08169910E-04 3 +-0.06359402E-08 0.02019714E-10-0.07332016E+06-0.01088662E+03 4 +MGOH 81292H 1MG 1O 1 G 0200.00 5000.00 1000.00 1 + 0.05156858E+02 0.01849251E-01-0.06339213E-05 0.01026031E-08-0.06282974E-13 2 +-0.02145938E+06-0.02774689E+02 0.03347871E+02 0.08101305E-01-0.06443066E-04 3 + 0.02006805E-08 0.01261718E-10-0.02111816E+06 0.06024177E+02 4 +MGOH+ 81292H 1MG 1O 1E -1G 0200.00 5000.00 1000.00 1 + 0.05171484E+02 0.01835998E-01-0.06314934E-05 0.01036229E-08-0.06583402E-13 2 + 0.06865354E+06-0.03526109E+02 0.03383351E+02 0.08055572E-01-0.06452790E-04 3 + 0.02400212E-08 0.01246873E-10 0.06898753E+06 0.05158118E+02 4 +MGS 81292MG 1S 1 G 0200.00 5000.00 1000.00 1 + 0.01071331E+03-0.06086042E-01 0.02390833E-04-0.04174042E-08 0.02737530E-12 2 + 0.01317442E+06-0.03521998E+03 0.03789723E+02-0.03985028E-01 0.02217192E-03 3 +-0.01858825E-06 0.03239714E-10 0.01635406E+06 0.05868810E+02 4 +MGS(S) 81292MG 1S 1 S 0200.00 3000.00 1000.00 1 + 0.05581918E+02 0.08031267E-02-0.01812239E-05 0.04113088E-09-0.02798069E-13 2 +-0.04331716E+06-0.02607368E+03 0.04076152E+02 0.07088011E-01-0.09604458E-04 3 + 0.06056009E-07-0.01373560E-10-0.04304232E+06-0.01890776E+03 4 +MGSO4(S) 81292MG 1O 4S 1 S 0200.00 2500.00 1000.00 1 + 0.08845820E+02 0.01221900E+00-0.02141897E-04-0.09580988E-08 0.02954552E-11 2 +-0.01549512E+07-0.04302983E+03 0.02258418E+02 0.04788929E+00-0.07110586E-03 3 + 0.05630850E-06-0.01709008E-09-0.01540505E+07-0.01345647E+03 4 +N 120186N 1 G 0200.00 5000.00 1000.00 1 + 0.02450268E+02 0.01066146E-02-0.07465337E-06 0.01879652E-09-0.01025984E-13 2 + 0.05611604E+06 0.04448758E+02 0.02503071E+02-0.02180018E-03 0.05420529E-06 3 +-0.05647560E-09 0.02099904E-12 0.05609890E+06 0.04167566E+02 4 +N*C3H7 120186C 3H 7 G 0200.00 5000.00 1000.00 1 + 0.07978291E+02 0.01576113E+00-0.05173243E-04 0.07443892E-08-0.03824978E-12 2 + 0.07579402E+05-0.01935611E+03 0.01922537E+02 0.02478927E+00 0.01810249E-04 3 +-0.01783266E-06 0.08582996E-10 0.09713281E+05 0.01399271E+03 4 +N2 121286N 2 G 0200.00 5000.00 1000.00 1 + 0.02926640E+02 0.01487977E-01-0.05684761E-05 0.01009704E-08-0.06753351E-13 2 +-0.09227977E+04 0.05980528E+02 0.03298677E+02 0.01408240E-01-0.03963222E-04 3 + 0.05641515E-07-0.02444855E-10-0.01020900E+05 0.03950372E+02 4 +N2H2 121286N 2H 2 G 0200.00 5000.00 1000.00 1 + 0.03371185E+02 0.06039968E-01-0.02303854E-04 0.04062789E-08-0.02713144E-12 2 + 0.02418172E+06 0.04980585E+02 0.01617999E+02 0.01306312E+00-0.01715712E-03 3 + 0.01605608E-06-0.06093639E-10 0.02467526E+06 0.01379467E+03 4 +N2H3 120186N 2H 3 G 0200.00 5000.00 1000.00 1 + 0.04441846E+02 0.07214271E-01-0.02495684E-04 0.03920565E-08-0.02298950E-12 2 + 0.01664221E+06-0.04275205E+01 0.03174204E+02 0.04715907E-01 0.01334867E-03 3 +-0.01919685E-06 0.07487564E-10 0.01727270E+06 0.07557224E+02 4 +N2H4 121286N 2H 4 G 0200.00 5000.00 1000.00 1 + 0.04977317E+02 0.09595519E-01-0.03547639E-04 0.06124299E-08-0.04029795E-12 2 + 0.09341219E+05-0.02962990E+02 0.06442606E+00 0.02749730E+00-0.02899451E-03 3 + 0.01745240E-06-0.04422282E-10 0.01045192E+06 0.02127789E+03 4 +N2H4(L) 90589H 4N 2 L 0200.00 0600.00 0450.00 1 + 0.08890683E+02 0.08330343E-01 0.04945549E-04-0.04909251E-08-0.03355824E-10 2 + 0.03032250E+05-0.03871433E+03 0.09047444E+02 0.09241592E-01 0.02263547E-04 3 +-0.08952247E-07 0.01486863E-09 0.02970393E+05-0.03974034E+03 4 +N2O 121286N 2O 1 G 0200.00 5000.00 1000.00 1 + 0.04718977E+02 0.02873714E-01-0.01197496E-04 0.02250552E-08-0.01575337E-12 2 + 0.08165811E+05-0.01657250E+02 0.02543058E+02 0.09492193E-01-0.09792775E-04 3 + 0.06263845E-07-0.01901826E-10 0.08765100E+05 0.09511222E+02 4 +N2O+ 121286N 2O 1E -1 G 0200.00 5000.00 1000.00 1 + 0.05398516E+02 0.02249478E-01-0.09577057E-05 0.01823193E-08-0.01284422E-12 2 + 0.01584851E+07-0.03733146E+02 0.03187228E+02 0.08350714E-01-0.07894549E-04 3 + 0.04597445E-07-0.01381075E-10 0.01591279E+07 0.07779426E+02 4 +N2O4 121286N 2O 4 G 0200.00 5000.00 1000.00 1 + 0.01048220E+03 0.05972272E-01-0.02564044E-04 0.04916885E-08-0.03490969E-12 2 +-0.02849989E+05-0.02612289E+03 0.03624593E+02 0.02474708E+00-0.02172875E-03 3 + 0.09927104E-07-0.02222817E-10-0.09128241E+04 0.09457174E+02 4 +N3 121286N 3 G 0200.00 5000.00 1000.00 1 + 0.05208505E+02 0.02444507E-01-0.01038941E-04 0.01977417E-08-0.01395644E-12 2 + 0.04796178E+06-0.03612756E+02 0.02882219E+02 0.08930338E-01-0.08539038E-04 3 + 0.05045585E-07-0.01521248E-10 0.04863468E+06 0.08481757E+02 4 +NA 80792NA 1 G 0200.00 5000.00 1000.00 1 + 0.02574480E+02-0.01605880E-02 0.01250641E-05-0.04516576E-09 0.06941745E-13 2 + 0.01219129E+06 0.03830900E+02 0.02591348E+02-0.05961520E-02 0.01327651E-04 3 +-0.01211123E-07 0.03890067E-11 0.01220642E+06 0.03841789E+02 4 +NA(L) 81092NA 1 L 0200.00 2000.00 1000.00 1 + 0.04030581E+02-0.01320419E-01 0.04136604E-05 0.05486936E-08-0.01916626E-11 2 +-0.07899189E+04-0.01548589E+03 0.04682137E+02-0.03624112E-01 0.04776195E-04 3 +-0.03871514E-07 0.01518150E-10-0.09807172E+04-0.01881830E+03 4 +NA+ 80792NA 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02500252E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.07260903E+06 0.03538490E+02 0.02500252E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.07260904E+06 0.03538490E+02 4 +NA2 80792NA 2 G 0200.00 5000.00 1000.00 1 + 0.04480669E+02 0.02178011E-02-0.01102830E-06 0.02208498E-10-0.01614866E-14 2 + 0.01519313E+06 0.02073203E+02 0.04369675E+02 0.05850265E-02-0.03825359E-05 3 + 0.08752245E-09 0.02980178E-12 0.01521703E+06 0.02622521E+02 4 +NA2B4O7(S) 81292B 4NA 2O 7 S 0200.00 2000.00 1000.00 1 + 0.02061542E+03 0.01728323E+00-0.04016503E-04-0.07600982E-08 0.05580242E-11 2 +-0.04014288E+07-0.01006093E+04 0.01430907E+02 0.01167214E+01-0.02000861E-02 3 + 0.01698028E-05-0.05418888E-09-0.03982982E+07-0.01265829E+03 4 +NA2B6O10(S) 81292B 6NA 2O 10 S 0200.00 2000.00 1000.00 1 + 0.02989617E+03 0.03053411E+00-0.02146684E-04-0.04458443E-07 0.09406424E-11 2 +-0.05638429E+07-0.01571271E+04 0.09347958E+02 0.08948274E+00-0.01024848E-02 3 + 0.01015647E-05-0.04314482E-09-0.05570116E+07-0.04828430E+03 4 +NA2C2N2 81292C 2N 2NA 2 G 0200.00 5000.00 1000.00 1 + 0.01253426E+03 0.03485206E-01-0.01426483E-04 0.02648455E-08-0.01838071E-12 2 +-0.05033986E+05-0.03087649E+03 0.01092445E+03 0.09724206E-01-0.01190420E-03 3 + 0.08942515E-07-0.02847524E-10-0.04654688E+05-0.02294170E+03 4 +NA2F2 80792F 2NA 2 G 0200.00 5000.00 1000.00 1 + 0.09265403E+02 0.09044011E-02-0.04233919E-05 0.08630666E-09-0.06408558E-13 2 +-0.01047310E+07-0.01880290E+03 0.06422050E+02 0.09031559E-01-0.05593408E-04 3 +-0.02581729E-07 0.02547837E-10-0.01040718E+07-0.04453081E+02 4 +NA2H2O2 80792H 2NA 2O 2 G 0200.00 5000.00 1000.00 1 + 0.09347846E+02 0.05678318E-01-0.02077824E-04 0.03568716E-08-0.02342868E-12 2 +-0.07634945E+06-0.01850110E+03 0.05441492E+02 0.01814821E+00-0.01733029E-03 3 + 0.09077551E-07-0.02055174E-10-0.07536770E+06 0.01240430E+02 4 +NA2O(L) 81092NA 2O 1 L 0200.00 3000.00 1000.00 1 + 0.01258178E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.04859891E+06-0.06066678E+03 0.01258178E+03 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.04859891E+06-0.06066677E+03 4 +NA2O(S) 81092NA 2O 1 S 0200.00 2000.00 1000.00 1 + 0.08804423E+02 0.03253428E-01-0.03530522E-05-0.04324117E-08 0.01394574E-11 2 +-0.05257507E+06-0.04209654E+03 0.04776964E+02 0.01483269E+00-0.01052247E-03 3 + 0.01278469E-07 0.01046187E-10-0.05155651E+06-0.02156737E+03 4 +NA2O2 81092NA 2O 2 S 0200.00 2500.00 1000.00 1 + 0.01382402E+03-0.03556455E-02 0.02837263E-05-0.09701692E-09 0.01205762E-12 2 +-0.06583802E+06-0.06789536E+03 0.08035418E+02 0.05983777E-01 0.01935571E-03 3 +-0.03410482E-06 0.01439706E-09-0.06395152E+06-0.03604480E+03 4 +NA2SO4 80792NA 2O 4S 1 G 0200.00 5000.00 1000.00 1 + 0.01506456E+03 0.04508233E-01-0.02011474E-04 0.03963989E-08-0.02871466E-12 2 +-0.01296053E+07-0.04683857E+03 0.05752581E+02 0.02964118E+00-0.02035211E-03 3 +-0.01073243E-07 0.03960597E-10-0.01271767E+07 0.01016246E+02 4 +NA2SO4(D) 81092NA 2O 4S 1 S 0200.00 1500.00 1000.00 1 + 0.01062092E+03 0.01179912E+00 0.03608537E-04-0.03424054E-09-0.09650399E-11 2 +-0.01684493E+07-0.04191208E+03 0.01187237E+03 0.04287018E+00-0.09072926E-03 3 + 0.09042235E-06-0.02940634E-09-0.01707163E+07-0.05750085E+03 4 +NA2SO4(i) 81092NA 2O 4S 1 S 0200.00 1500.00 1000.00 1 + 0.01711668E+03 0.05878399E-01 0.01196697E-04 0.01676018E-08-0.02640822E-11 2 +-0.01714447E+07-0.07997372E+03 0.01674756E+03 0.01133662E+00-0.01526634E-03 3 + 0.01819548E-06-0.06918027E-10-0.01714932E+07-0.07899648E+03 4 +NA2SO4(iii) 81092NA 2O 4S 1 S 0200.00 1000.00 1000.00 1 + 0.03701786E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01854858E+07-0.02084472E+04 0.01413394E+03-0.01694491E+00 0.09403022E-03 3 +-0.07815722E-06 0.02395583E-09-0.01707247E+07-0.06037737E+03 4 +NA2SO4(iv) 81092NA 2O 4S 1 S 0200.00 1000.00 1000.00 1 + 0.02590382E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01779857E+07-0.01365608E+04 0.05917499E+02 0.04507074E+00-0.05672574E-03 3 + 0.04596655E-06-0.01432523E-09-0.01702527E+07-0.02694892E+03 4 +NA2SO4(v) 81092NA 2O 4S 1 S 0200.00 1000.00 1000.00 1 + 0.02590382E+03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.01780169E+07-0.01366284E+04 0.05917499E+02 0.04507074E+00-0.05672574E-03 3 + 0.04596655E-06-0.01432523E-09-0.01702840E+07-0.02701654E+03 4 +NA3CL6AL(S) 81292AL 1CL 6NA 3 S 0200.00 2000.00 1000.00 1 + 0.02863182E+03 0.08169580E-01 0.01787040E-05-0.09984084E-08 0.01787581E-11 2 +-0.02473307E+07-0.01246570E+04 0.02610594E+03 0.09148861E-01 0.09743193E-04 3 +-0.01296166E-06 0.04124132E-10-0.02462808E+07-0.01099689E+04 4 +NA3F6AL(S) 81292AL 1F 6NA 3 S 0200.00 1200.00 1000.00 1 + 0.01867366E+03 0.02426805E+00 0.01311169E-04-0.01223061E-06 0.06326451E-10 2 +-0.04056682E+07-0.08492075E+03 0.01182130E+03 0.07831376E+00-0.01387551E-02 3 + 0.01331742E-05-0.04620547E-09-0.04049948E+07-0.05693419E+03 4 +NABH4(S) 81292B 1H 4NA 1 S 0200.00 2000.00 1000.00 1 + 0.08204329E+02 0.01008304E+00-0.01032261E-04-0.02815504E-07 0.09005147E-11 2 +-0.02614390E+06-0.03790153E+03 0.08076391E+02 0.05407829E-01 0.01208139E-03 3 +-0.01450540E-06 0.04279918E-10-0.02580298E+06-0.03584760E+03 4 +NABO2 81092B 1NA 1O 2 G 0200.00 5000.00 1000.00 1 + 0.07449052E+02 0.02730088E-01-0.01165145E-04 0.02226924E-08-0.01578063E-12 2 +-0.08056425E+06-0.09194809E+02 0.04413702E+02 0.01144045E+00-0.01021892E-03 3 + 0.04340556E-07-0.07548787E-11-0.07974780E+06 0.06401325E+02 4 +NABO2(S) 81292B 1NA 1O 2 S 0200.00 2000.00 1000.00 1 + 0.07820448E+02 0.06702746E-01-0.01488126E-04-0.01033983E-07 0.04130615E-11 2 +-0.01203511E+07-0.03848530E+03 0.01695994E+02 0.03131723E+00-0.04453876E-03 3 + 0.03572163E-06-0.01178195E-09-0.01189335E+07-0.08471359E+02 4 +NABR 81092BR 1NA 1 G 0200.00 5000.00 1000.00 1 + 0.04424304E+02 0.01887477E-02-0.04500799E-06 0.09226701E-10-0.06871650E-14 2 +-0.01865205E+06 0.03707466E+02 0.04097639E+02 0.01170972E-01-0.07798224E-05 3 +-0.01611608E-08 0.02489549E-11-0.01857889E+06 0.05343556E+02 4 +NABR(L) 81292BR 1NA 1 L 0200.00 2500.00 1000.00 1 + 0.07498742E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 +-0.04305332E+06-0.03017306E+03 0.07498742E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00-0.04305333E+06-0.03017306E+03 4 +NABR(S) 81292BR 1NA 1 S 0200.00 2000.00 1000.00 1 + 0.05741811E+02 0.01766697E-01-0.01899553E-05 0.01473021E-09 0.01715605E-12 2 +-0.04526151E+06-0.02279248E+03 0.04706446E+02 0.08010188E-01-0.01346175E-03 3 + 0.01196933E-06-0.03873765E-10-0.04513442E+06-0.01826015E+03 4 +NACH 80792C 1N 1NA 1 G 0200.00 5000.00 1000.00 1 + 0.05791865E+02 0.01708993E-01-0.06965832E-05 0.01288980E-08-0.08921502E-13 2 + 0.09496355E+05-0.04320624E+02 0.05123989E+02 0.04411283E-01-0.05682223E-04 3 + 0.04664804E-07-0.01593603E-10 0.09657925E+05-0.01032367E+02 4 +NACL 81092CL 1NA 1 G 0200.00 5000.00 1000.00 1 + 0.04393820E+02 0.02153336E-02-0.06198756E-06 0.01266879E-09-0.09427806E-14 2 +-0.02315864E+06 0.02486064E+02 0.03953003E+02 0.01514187E-01-0.09819465E-05 3 +-0.02807090E-08 0.03543574E-11-0.02305831E+06 0.04701214E+02 4 +NACL(S) 81092CL 1NA 1 S 0200.00 1500.00 1000.00 1 + 0.07639640E+02-0.03933726E-01 0.02071020E-04 0.04233998E-07-0.02204761E-10 2 +-0.05163684E+06-0.03397957E+03 0.04982695E+02 0.05432908E-01-0.07698454E-04 3 + 0.06300821E-07-0.01211800E-10-0.05112201E+06-0.02104512E+03 4 +NACL4AL(S) 81292AL 1CL 4NA 1 S 0200.00 2000.00 1000.00 1 + 0.02138498E+03 0.03252454E-01-0.01769716E-05-0.07072990E-08 0.01928080E-11 2 +-0.01447874E+07-0.01021539E+04 0.01588411E+03 0.04527768E-01 0.02409928E-03 3 +-0.03108224E-06 0.01051706E-09-0.01424874E+07-0.07002475E+03 4 +NACN 81092C 1N 1NA 1 G 0200.00 5000.00 1000.00 1 + 0.05791865E+02 0.01708993E-01-0.06965832E-05 0.01288980E-08-0.08921502E-13 2 + 0.09496355E+05-0.04320624E+02 0.05123989E+02 0.04411283E-01-0.05682223E-04 3 + 0.04664804E-07-0.01593603E-10 0.09657925E+05-0.01032367E+02 4 +NACN(S) 81292C 1N 1NA 1 S 0200.00 2000.00 1000.00 1 + 0.08137501E+02 0.03044670E-02-0.01811052E-05 0.08281245E-09-0.01435891E-12 2 +-0.01334049E+06-0.03217693E+03 0.08239171E+02-0.05281579E-03 0.03829305E-05 3 +-0.03800801E-08 0.01401136E-11-0.01336670E+06-0.03268830E+03 4 +NAF 80792F 1NA 1 G 0200.00 5000.00 1000.00 1 + 0.04289078E+02 0.03377828E-02-0.01184403E-05 0.02398348E-09-0.01772778E-13 2 +-0.03626513E+06 0.01538309E+02 0.03532346E+02 0.02495132E-01-0.01587195E-04 3 +-0.04836335E-08 0.05739804E-11-0.03608573E+06 0.05367920E+02 4 +NAF2- 81092F 2NA 1E 1 G 0200.00 5000.00 1000.00 1 + 0.07032279E+02 0.05655084E-02-0.02615340E-05 0.05285863E-09-0.03900402E-13 2 +-0.08272088E+06-0.01028459E+03 0.05382830E+02 0.05231638E-01-0.03350411E-04 3 +-0.01169983E-07 0.01291137E-10-0.08232816E+06-0.01928436E+02 4 +NAF4AL 81092AL 1F 4NA 1 G 0200.00 5000.00 1000.00 1 + 0.01407161E+03 0.02285303E-01-0.01043457E-04 0.02090484E-08-0.01532874E-12 2 +-0.02260449E+07-0.04013149E+03 0.08103421E+02 0.01881143E+00-0.01205279E-03 3 +-0.03477927E-07 0.04123038E-10-0.02245760E+07-0.09731781E+02 4 +NAH 80792H 1NA 1 G 0200.00 5000.00 1000.00 1 + 0.03818649E+02 0.08597439E-02-0.03202059E-05 0.06146711E-09-0.04364567E-13 2 + 0.01368120E+06 0.04367959E+01 0.02864363E+02 0.03308582E-01-0.02753919E-04 3 + 0.01399522E-07-0.04032581E-11 0.01396756E+06 0.05450493E+02 4 +NAI(S) 81292I 1NA 1 S 0200.00 2000.00 1000.00 1 + 0.05987605E+02 0.01342139E-01-0.03807255E-06 0.01660138E-09-0.06066889E-13 2 +-0.03648630E+06-0.02270427E+03 0.05407032E+02 0.04235908E-01-0.05679955E-04 3 + 0.04941357E-07-0.01602135E-10-0.03638396E+06-0.02000921E+03 4 +NAO 80792NA 1O 1 G 0200.00 5000.00 1000.00 1 + 0.04349803E+02 0.02849959E-02-0.08615992E-06 0.01754054E-09-0.01301677E-13 2 + 0.08731694E+05 0.02618339E+02 0.03765728E+02 0.01980031E-01-0.01256303E-04 3 +-0.03909831E-08 0.04664039E-11 0.08866889E+05 0.05562273E+02 4 +NAO- 80792NA 1O 1E 1 G 0200.00 5000.00 1000.00 1 + 0.04343846E+02 0.02955424E-02-0.08923111E-06 0.01813572E-09-0.01343290E-13 2 +-0.01592823E+06 0.01245911E+02 0.03740064E+02 0.02044313E-01-0.01291719E-04 3 +-0.04080754E-08 0.04823669E-11-0.01578820E+06 0.04290303E+02 4 +NAO2(S) 81092NA 1O 2 S 0200.00 2000.00 1000.00 1 + 0.07379480E+02 0.04377048E-01 0.06355202E-05-0.03238946E-08 0.06014399E-12 2 +-0.03376432E+06-0.02946090E+03 0.07236605E+02 0.04751740E-01 0.03458707E-05 3 +-0.02971627E-08 0.09124652E-12-0.03372514E+06-0.02872050E+03 4 +NAO2AL(S) 81292AL 1NA 1O 2 S 0200.00 3000.00 1000.00 1 + 0.09963634E+02 0.02329677E-01-0.08188510E-07 0.02070425E-09-0.02306699E-12 2 +-0.01394255E+07-0.04932653E+03 0.03669741E+02 0.02226343E+00-0.01558734E-03 3 +-0.03446683E-07 0.05383614E-10-0.01381199E+07-0.01818990E+03 4 +NAOH 80792H 1NA 1O 1 G 0200.00 5000.00 1000.00 1 + 0.05527852E+02 0.01420623E-01-0.04439615E-05 0.06635639E-09-0.03866820E-13 2 +-0.02545869E+06-0.04374785E+02 0.04727895E+02 0.05001262E-01-0.04534391E-04 3 + 0.07051240E-08 0.06671123E-11-0.02537947E+06-0.07649678E+01 4 +NAOH(L) 81092H 1NA 1O 1 L 0200.00 2500.00 1000.00 1 + 0.01061400E+03-0.03116447E-02-0.02964198E-05 0.05475463E-09 0.01021178E-12 2 +-0.05327943E+06-0.05120959E+03 0.01079389E+03-0.08545728E-02 0.03780039E-05 3 +-0.03848777E-08 0.01384542E-11-0.05332840E+06-0.05213201E+03 4 +NAOH+ 80792H 1NA 1O 1E -1G 0200.00 5000.00 1000.00 1 + 0.05570452E+02 0.01387979E-01-0.04311444E-05 0.06372652E-09-0.03648954E-13 2 + 0.07985595E+06-0.02878876E+02 0.04974624E+02 0.04424591E-01-0.04296418E-04 3 + 0.01067747E-07 0.04168198E-11 0.07988680E+06-0.03068088E+01 4 +NCN 103190C 1N 2 G 0200.00 4000.00 1500.00 1 + 0.06652121E+02 0.06108034E-02-0.01389727E-05 0.02695549E-10 0.01669944E-13 2 + 0.05172403E+06-0.01138517E+03 0.03101270E+02 0.09981674E-01-0.09920701E-04 3 + 0.04758919E-07-0.08968626E-11 0.05285757E+06 0.07317579E+02 4 +NCO 110193C 1N 1O 1 G 0200.00 4000.00 1400.00 1 + 0.06072346E+02 0.09227829E-02-0.09845574E-06-0.04764123E-09 0.09090445E-13 2 + 0.01359820E+06-0.08507293E+02 0.03359593E+02 0.05393239E-01-0.08144585E-05 3 +-0.01912868E-07 0.07836794E-11 0.01462809E+06 0.06549694E+02 4 +NF 121286N 1F 1 G 0200.00 5000.00 1000.00 1 + 0.03862177E+02 0.07551806E-02-0.03044943E-05 0.05874447E-09-0.04187479E-13 2 + 0.02867243E+06 0.03457233E+02 0.02871947E+02 0.03312193E-01-0.02691159E-04 3 + 0.01121951E-07-0.02475131E-11 0.02896257E+06 0.08640247E+02 4 +NFO 121286N 1F 1O 1 G 0200.00 5000.00 1000.00 1 + 0.05174520E+02 0.01938472E-01-0.08222701E-05 0.01564291E-08-0.01104497E-12 2 +-0.09670935E+05-0.05352461E+01 0.03352307E+02 0.07229966E-01-0.06951137E-04 3 + 0.03828526E-07-0.01023558E-10-0.09167035E+05 0.08854189E+02 4 +NFO2 121286N 1F 1O 2 G 0200.00 5000.00 1000.00 1 + 0.06816857E+02 0.03462640E-01-0.01492216E-04 0.02869665E-08-0.02041857E-12 2 +-0.01560262E+06-0.09320129E+02 0.02447529E+02 0.01544110E+00-0.01300595E-03 3 + 0.04856383E-07-0.06852266E-11-0.01439400E+06 0.01328360E+03 4 +NH 31387H 1N 1 G 0200.00 5000.00 1000.00 1 + 0.02760249E+02 0.01375346E-01-0.04451914E-05 0.07692792E-09-0.05017592E-13 2 + 0.04207828E+06 0.05857199E+02 0.03339758E+02 0.01253009E-01-0.03491646E-04 3 + 0.04218812E-07-0.01557618E-10 0.04185047E+06 0.02507181E+02 4 +NH2 121686N 1H 2 G 0200.00 5000.00 1000.00 1 + 0.02961311E+02 0.02932699E-01-0.09063600E-05 0.01617257E-08-0.01204200E-12 2 + 0.02191977E+06 0.05777878E+02 0.03432493E+02 0.03299540E-01-0.06613600E-04 3 + 0.08590947E-07-0.03572047E-10 0.02177228E+06 0.03090111E+02 4 +NH3 121386N 1H 3 G 0200.00 5000.00 1000.00 1 + 0.02461904E+02 0.06059166E-01-0.02004977E-04 0.03136003E-08-0.01938317E-12 2 +-0.06493270E+05 0.07472097E+02 0.02204352E+02 0.01011476E+00-0.01465265E-03 3 + 0.01447235E-06-0.05328509E-10-0.06525488E+05 0.08127138E+02 4 +NNH 120186N 2H 1 G 0250.00 4000.00 1000.00 1 + 0.04415342E+02 0.01614388E-01-0.01632894E-05-0.08559846E-09 0.01614791E-12 2 + 0.02788029E+06 0.09042888E+01 0.03501344E+02 0.02053587E-01 0.07170410E-05 3 + 0.04921348E-08-0.09671170E-11 0.02833347E+06 0.06391837E+02 4 +NO 121286N 1O 1 G 0200.00 5000.00 1000.00 1 + 0.03245435E+02 0.01269138E-01-0.05015890E-05 0.09169283E-09-0.06275419E-13 2 + 0.09800840E+05 0.06417294E+02 0.03376542E+02 0.01253063E-01-0.03302751E-04 3 + 0.05217810E-07-0.02446263E-10 0.09817961E+05 0.05829590E+02 4 +NO+ 121286N 1O 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02914889E+02 0.01499335E-01-0.05727972E-05 0.01017777E-08-0.06825390E-13 2 + 0.01181869E+07 0.06844346E+02 0.03297349E+02 0.01422890E-01-0.04007441E-04 3 + 0.05670551E-07-0.02446972E-10 0.01180834E+07 0.04749948E+02 4 +NO2 121286N 1O 2 G 0200.00 5000.00 1000.00 1 + 0.04682859E+02 0.02462429E-01-0.01042259E-04 0.01976902E-08-0.01391717E-12 2 + 0.02261292E+05 0.09885985E+01 0.02670600E+02 0.07838501E-01-0.08063865E-04 3 + 0.06161715E-07-0.02320150E-10 0.02896291E+05 0.01161207E+03 4 +NO2- 121286N 1O 2E 1 G 0200.00 5000.00 1000.00 1 + 0.05043114E+02 0.02166428E-01-0.09455454E-05 0.01816314E-08-0.01238394E-12 2 +-0.02621554E+06-0.01445905E+02 0.02448586E+02 0.08982507E-01-0.07853431E-04 3 + 0.03927277E-07-0.01071694E-10-0.02545097E+06 0.01213060E+03 4 +NO3 121286N 1O 3 G 0200.00 5000.00 1000.00 1 + 0.07120307E+02 0.03246228E-01-0.01431613E-04 0.02797053E-08-0.02013008E-12 2 + 0.05864479E+05-0.01213730E+03 0.01221076E+02 0.01878797E+00-0.01344321E-03 3 + 0.01274601E-07 0.01354060E-10 0.07473144E+05 0.01840203E+03 4 +O 120186O 1 G 0200.00 5000.00 1000.00 1 + 0.02542060E+02-0.02755062E-03-0.03102803E-07 0.04551067E-10-0.04368052E-14 2 + 0.02923080E+06 0.04920308E+02 0.02946429E+02-0.01638166E-01 0.02421032E-04 3 +-0.01602843E-07 0.03890696E-11 0.02914764E+06 0.02963995E+02 4 +O+ 121286O 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02501869E+02-0.06107262E-04 0.07324307E-07-0.03438353E-10 0.05506408E-14 2 + 0.01879553E+07 0.04372827E+02 0.02499273E+02 0.05820598E-04-0.01120922E-06 3 + 0.08232109E-10-0.01916378E-13 0.01879557E+07 0.04384826E+02 4 +O- 90589O 1E 1 G 0200.00 5000.00 1000.00 1 + 0.02559581E+02-0.07147888E-03 0.03301804E-06-0.06660944E-10 0.04900727E-14 2 + 0.01148935E+06 0.04426187E+02 0.02747263E+02-0.05724860E-02 0.02712548E-05 3 + 0.02691512E-08-0.02002357E-11 0.01144395E+06 0.03469852E+02 4 +O2 121386O 2 G 0200.00 5000.00 1000.00 1 + 0.03697578E+02 0.06135197E-02-0.01258842E-05 0.01775281E-09-0.01136435E-13 2 +-0.01233930E+05 0.03189166E+02 0.03212936E+02 0.01127486E-01-0.05756150E-05 3 + 0.01313877E-07-0.08768554E-11-0.01005249E+05 0.06034738E+02 4 +O2- 121286O 2E 1 G 0200.00 5000.00 1000.00 1 + 0.03883013E+02 0.07407872E-02-0.02961776E-05 0.05724305E-09-0.04086548E-13 2 +-0.07121644E+05 0.02658212E+02 0.02872292E+02 0.03359716E-01-0.02664886E-04 3 + 0.09807524E-08-0.01670957E-11-0.06829094E+05 0.07938373E+02 4 +O3 121286O 3 G 0200.00 5000.00 1000.00 1 + 0.05429371E+02 0.01820380E-01-0.07705607E-05 0.01499293E-08-0.01075563E-12 2 + 0.01523527E+06-0.03266387E+02 0.02462609E+02 0.09582781E-01-0.07087359E-04 3 + 0.01363368E-07 0.02969647E-11 0.01606152E+06 0.01214187E+03 4 +OC(OH)2 103190C 1H 2O 3 G 0200.00 4000.00 1500.00 1 + 0.01143196E+03 0.02555103E-01-0.04326538E-05-0.05781341E-09 0.01545461E-12 2 +-0.07904865E+06-0.03657201E+03 0.03540332E+01 0.03042528E+00-0.02939616E-03 3 + 0.01452934E-06-0.02906245E-10-0.07522630E+06 0.02250923E+03 4 +OCHCHO 103190C 2H 2O 2 G 0200.00 4000.00 1500.00 1 + 0.01056843E+03 0.02907353E-01-0.03452401E-05-0.01037593E-08 0.02042135E-12 2 +-0.02952623E+06-0.03104084E+03 0.01863564E+02 0.02298297E+00-0.01917997E-03 3 + 0.08558604E-07-0.01612346E-10-0.02634847E+06 0.01601674E+03 4 +OCHNNHO 103190C 1H 2N 2O 2G 0200.00 4000.00 1500.00 1 + 0.01241397E+03 0.04091551E-01-0.04547841E-05-0.01752324E-08 0.03271472E-12 2 +-0.06754774E+05-0.04078722E+03 0.01405275E+02 0.02776281E+00-0.02088466E-03 3 + 0.08550259E-07-0.01543486E-10-0.02537631E+05 0.01937723E+03 4 +OH 121286O 1H 1 G 0200.00 5000.00 1000.00 1 + 0.02882730E+02 0.01013974E-01-0.02276877E-05 0.02174684E-09-0.05126305E-14 2 + 0.03886888E+05 0.05595712E+02 0.03637266E+02 0.01850910E-02-0.01676165E-04 3 + 0.02387203E-07-0.08431442E-11 0.03606782E+05 0.01358860E+02 4 +OH+ 121286O 1H 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02719059E+02 0.01508571E-01-0.05029369E-05 0.08261952E-09-0.04947453E-13 2 + 0.01576341E+07 0.06234536E+02 0.03326979E+02 0.01345786E-01-0.03777168E-04 3 + 0.04687750E-07-0.01780982E-10 0.01574029E+07 0.02744042E+02 4 +OH- 121286O 1H 1E 1 G 0200.00 5000.00 1000.00 1 + 0.02846205E+02 0.01041835E-01-0.02416851E-05 0.02483215E-09-0.07775605E-14 2 +-0.01807280E+06 0.04422712E+02 0.03390038E+02 0.07922381E-02-0.01943430E-04 3 + 0.02001770E-07-0.05702087E-11-0.01830494E+06 0.01249892E+02 4 +ONHNHO 103190H 2N 2O 2 G 0200.00 4000.00 1500.00 1 + 0.01005510E+03 0.03525461E-01-0.03868362E-05-0.01298654E-08 0.02398500E-12 2 + 0.07381692E+05-0.02950581E+03 0.07815142E+01 0.02605711E+00-0.02264714E-03 3 + 0.01049925E-06-0.02012847E-10 0.01062778E+06 0.02017946E+03 4 +ONHNOH 103190H 2N 2O 2 G 0200.00 4000.00 1500.00 1 + 0.01120874E+03 0.02650303E-01-0.03760644E-05-0.06355768E-09 0.01466251E-12 2 +-0.05721250E+05-0.03476475E+03 0.01053271E+02 0.02809676E+00-0.02637380E-03 3 + 0.01270757E-06-0.02478550E-10-0.02244769E+05 0.01937011E+03 4 +S 121286S 1 G 0200.00 5000.00 1000.00 1 + 0.02902148E+02-0.05484546E-02 0.02764576E-05-0.05017115E-09 0.03150685E-13 2 + 0.03249423E+06 0.03838471E+02 0.03187329E+02-0.01595776E-01 0.02005531E-04 3 +-0.01507081E-07 0.04931282E-11 0.03242259E+06 0.02414441E+02 4 +S(L) 120186S 1 L 0388.36 2000.00 1000.00 1 + 0.03603667E+02 0.09903341E-02-0.01011441E-04 0.04053633E-08-0.05667914E-12 2 +-0.08453839E+04-0.01634471E+03-0.01270631E+03 0.09072521E+00-0.01695179E-02 3 + 0.01307064E-05-0.03527615E-09 0.01234607E+05 0.05621016E+03 4 +S(S) 120186S 1 S 0200.00 0388.36 0388.36 1 + 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.00000000E+00 0.00000000E+00-0.05063703E+02 0.02881935E-01-0.02133020E-03 3 + 0.08478786E-05-0.01734497E-07 0.07148263E+04 0.02871407E+03 4 +S+ 121286S 1E -1 G 0200.00 5000.00 1000.00 1 + 0.02404600E+02 0.02410909E-02-0.02041780E-05 0.06592945E-09-0.05756939E-13 2 + 0.01535223E+07 0.05924256E+02 0.02366101E+02 0.09130767E-02-0.02140284E-04 3 + 0.02076178E-07-0.07133859E-11 0.01535091E+07 0.05993094E+02 4 +S-TRIAZINE 41687C 3N 3H 3 G 0200.00 4000.00 1000.00 1 + 0.01303617E+03 0.07711820E-01-0.07724374E-05-0.04385191E-08 0.08298992E-12 2 + 0.02251663E+06-0.04777676E+03 0.04493492E+01 0.02728306E+00 0.02309305E-04 3 +-0.01496844E-06 0.04546753E-10 0.02703032E+06 0.02178518E+03 4 +S2 121386S 2 G 0200.00 5000.00 1000.00 1 + 0.03904443E+02 0.06925733E-02-0.01233097E-05 0.08783809E-11 0.01374662E-13 2 + 0.01425693E+06 0.04956834E+02 0.03157673E+02 0.03099480E-01-0.01560746E-04 3 +-0.01357891E-07 0.01137444E-10 0.01439187E+06 0.08596062E+02 4 +SH 121286S 1H 1 G 0200.00 5000.00 1000.00 1 + 0.03053810E+02 0.01258884E-01-0.04249169E-05 0.06929591E-09-0.04281691E-13 2 + 0.01588225E+06 0.05973551E+02 0.04133327E+02-0.03787893E-02-0.02777854E-04 3 + 0.05370112E-07-0.02394006E-10 0.01555862E+06 0.01611535E+01 4 +SI 32989SI 1 G 0200.00 4000.00 1000.00 1 + 0.02775846E+02-0.06213257E-02 0.04843696E-05-0.01275615E-08 0.01134482E-12 2 + 0.05339791E+06 0.04543298E+02 0.03113515E+02-0.02330991E-01 0.03518531E-04 3 +-0.02417573E-07 0.06391902E-11 0.05335062E+06 0.03009719E+02 4 +SI(CH3)2 61991H 6C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.01092572E+03 0.07986807E-01-0.09096208E-06-0.01014552E-07 0.02037989E-11 2 + 0.01132561E+06-0.02834187E+03 0.02308663E+02 0.02773810E+00-0.01799333E-03 3 + 0.06733023E-07-0.01154743E-10 0.01442892E+06 0.01819319E+03 4 +SI(CH3)3 61991H 9C 3SI 1 G 0200.00 2500.00 1500.00 1 + 0.01536389E+03 0.01242119E+00-0.01189769E-05-0.01630302E-07 0.03308576E-11 2 +-0.05218398E+05-0.05088962E+03 0.03907073E+02 0.03734813E+00-0.02072025E-03 3 + 0.06180575E-07-0.08429605E-11-0.01002462E+05 0.01138100E+03 4 +SI(CH3)3CH2 61991H 11C 4SI 1 G 0200.00 2500.00 1500.00 1 + 0.02061565E+03 0.01408136E+00-0.01497876E-05-0.01748111E-07 0.03468780E-11 2 +-0.01240235E+06-0.07596671E+03 0.05258771E+02 0.04995369E+00-0.03393958E-03 3 + 0.01367592E-06-0.02513506E-10-0.06886708E+05 0.06814728E+02 4 +SI(CH3)4 61991H 12C 4SI 1 G 0200.00 2500.00 1500.00 1 + 0.02023461E+03 0.01648004E+00-0.01486572E-05-0.02161245E-07 0.04377236E-11 2 +-0.03702410E+06-0.07661021E+03 0.05009315E+02 0.04952953E+00-0.02745875E-03 3 + 0.08231031E-07-0.01137614E-10-0.03140314E+06 0.06187860E+02 4 +SI(L) 90589SI 1 L 0200.00 4500.00 1000.00 1 + 0.03271263E+02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2 + 0.04855058E+05-0.01329054E+03 0.03271263E+02 0.00000000E+00 0.00000000E+00 3 + 0.00000000E+00 0.00000000E+00 0.04855059E+05-0.01329054E+03 4 +SI(NH2)3 42489SI 1N 3H 6 G 0200.00 3000.00 1000.00 1 + 0.01406550E+03 0.07581744E-01-0.05168510E-05-0.06743626E-08 0.01397926E-11 2 +-0.01414403E+06-0.04063874E+03 0.07598413E+02 0.02435266E+00-0.04296202E-04 3 +-0.01756007E-06 0.01050102E-09-0.01265343E+06-0.07808647E+02 4 +SI(NH2)4 22790SI 1N 4H 8 G 0200.00 4000.00 1000.00 1 + 0.02032107E+03 0.08289798E-01-0.07077612E-05-0.04340724E-08 0.07747068E-12 2 +-0.05389855E+06-0.07730464E+03 0.08454529E+02 0.03465772E+00-0.04266782E-04 3 +-0.02495363E-06 0.01365466E-09-0.05061518E+06-0.01514301E+03 4 +SI(S) 90589SI 1 S 0200.00 2500.00 1000.00 1 + 0.02530275E+02 0.08522433E-02-0.03223469E-05 0.01280821E-08-0.01850849E-12 2 +-0.08395197E+04-0.01251478E+03 0.05746418E+01 0.01026485E+00-0.01775346E-03 3 + 0.01457500E-06-0.04491292E-10-0.04969951E+04-0.03400243E+02 4 +SI2 111191SI 2 G 0200.00 4000.00 1500.00 1 + 0.04402888E+02 0.01154530E-02-0.06005177E-06 0.01469072E-09-0.01357408E-13 2 + 0.07199220E+06 0.02340066E+02 0.03439839E+02 0.03440171E-01-0.04437681E-04 3 + 0.02559961E-07-0.05474618E-11 0.07222934E+06 0.07148545E+02 4 +SI2C 112989C 1SI 2 G 0200.00 5000.00 1000.00 1 + 0.06334110E+02 0.01210252E-01-0.06798289E-05 0.02244433E-08-0.02280178E-12 2 + 0.06227189E+06-0.07770097E+02 0.04157246E+02 0.07031825E-01-0.07263033E-04 3 + 0.04633583E-07-0.01493448E-10 0.06292421E+06 0.03635126E+02 4 +SI2CL5 40992SI 2CL 5 G 0200.00 4000.00 1500.00 1 + 0.01800427E+03 0.05920529E-02-0.03159743E-05 0.07962538E-09-0.07553642E-13 2 +-0.08208587E+06-0.04815622E+03 0.01218195E+03 0.02086930E+00-0.02723261E-03 3 + 0.01583266E-06-0.03404617E-10-0.08066122E+06-0.01913372E+03 4 +SI2CL5H 40992H 1SI 2CL 5 G 0200.00 4000.00 1500.00 1 + 0.01977366E+03 0.01346980E-01-0.04241463E-05 0.05994784E-09-0.03079337E-13 2 +-0.01018307E+07-0.05982624E+03 0.01104810E+03 0.02909474E+00-0.03536307E-03 3 + 0.01998957E-06-0.04259074E-10-0.09941194E+06-0.01536396E+03 4 +SI2CL6 40992SI 2CL 6 G 0200.00 4000.00 1500.00 1 + 0.02095456E+03 0.06904584E-02-0.03881968E-05 0.01014163E-08-0.09844696E-13 2 +-0.01238540E+07-0.06426893E+03 0.01372380E+03 0.02622361E+00-0.03460508E-03 3 + 0.02024950E-06-0.04371480E-10-0.01221143E+07-0.02834094E+03 4 +SI2F6 42489SI 2F 6 G 0200.00 3000.00 1000.00 1 + 0.01830048E+03 0.02868753E-01-0.04545577E-05-0.02497900E-08 0.06630658E-12 2 +-0.02928185E+07-0.05760425E+03 0.09998134E+02 0.02170314E+00-0.03875092E-04 3 +-0.01670252E-06 0.09407529E-10-0.02905483E+07-0.01422886E+03 4 +SI2H2 111191H 2SI 2 G 0200.00 4000.00 1500.00 1 + 0.08099063E+02 0.01294220E-01-0.02447198E-05-0.01449512E-09 0.05867240E-13 2 + 0.04476428E+06-0.01877323E+03 0.09668390E+01 0.01932959E+00-0.01825422E-03 3 + 0.08404012E-07-0.01537228E-10 0.04712241E+06 0.01907609E+03 4 +SI2H3 90589SI 2H 3 G 0200.00 2000.00 1000.00 1 + 0.07257627E+02 0.05123860E-01-0.07633465E-05-0.06662471E-08 0.02053053E-11 2 + 0.05062055E+06-0.01031413E+03 0.03335404E+02 0.02155615E+00-0.02933937E-03 3 + 0.02287785E-06-0.07272827E-10 0.05146157E+06 0.08656853E+02 4 +SI2H5 90589SI 2H 5 G 0200.00 2000.00 1000.00 1 + 0.08451010E+02 0.09286371E-01-0.01091183E-04-0.01442367E-07 0.04250825E-11 2 + 0.02472719E+06-0.01710331E+03 0.01578848E+02 0.03549383E+00-0.04267511E-03 3 + 0.03059177E-06-0.09360425E-10 0.02630550E+06 0.01672073E+03 4 +SI2H6 90589SI 2H 6 G 0200.00 2000.00 1000.00 1 + 0.08882090E+02 0.01151395E+00-0.01216216E-04-0.01905086E-07 0.05542379E-11 2 + 0.05967242E+05-0.02265611E+03 0.05301921E+01 0.04184056E+00-0.04685249E-03 3 + 0.03179525E-06-0.09484526E-10 0.07950598E+05 0.01880453E+03 4 +SI3 32989SI 3 G 0200.00 4000.00 1000.00 1 + 0.07021585E+02 0.06981538E-02-0.04818729E-05 0.01720754E-08-0.01927025E-12 2 + 0.07429956E+06-0.08179233E+02 0.05312161E+02 0.05920181E-01-0.05075225E-04 3 + 0.05303866E-08 0.07031630E-11 0.07469502E+06 0.04036452E+01 4 +SI3H8 90589SI 3H 8 G 0200.00 2000.00 1000.00 1 + 0.01342277E+03 0.01563632E+00-0.01936565E-04-0.02388330E-07 0.07120030E-11 2 + 0.09165887E+05-0.04163000E+03 0.06319791E+01 0.06412995E+00-0.07772444E-03 3 + 0.05486969E-06-0.01646097E-09 0.01209258E+06 0.02133318E+03 4 +SI3N4(A) 42589N 4SI 3 S 0200.00 3000.00 1000.00 1 + 0.09667453E+02 0.01192721E+00-0.01709282E-04-0.01084607E-07 0.02713018E-11 2 +-0.09324734E+06-0.04556492E+03 0.06631384E+02 0.02293929E+00-0.02152876E-03 3 + 0.01766237E-06-0.06632215E-10-0.09241684E+06-0.03021795E+03 4 +SIC 112989C 1SI 1 G 0200.00 5000.00 1000.00 1 + 0.05024270E+02-0.04920894E-02 0.03109315E-05-0.06901344E-09 0.05215735E-13 2 + 0.08531026E+06-0.02478798E+02 0.02427812E+02 0.09551934E-01-0.02796633E-04 3 +-0.01360012E-06 0.09196323E-10 0.08546512E+06 0.09179253E+02 4 +SIC(B) 112989C 1SI 1 S 0200.00 4000.00 1000.00 1 + 0.03548057E+02 0.03636817E-01-0.01734873E-04 0.03912869E-08-0.03337953E-12 2 +-0.01018858E+06-0.01967253E+03-0.03551396E+01 0.01599881E+00-0.01393327E-03 3 + 0.03314914E-07 0.07825957E-11-0.09294352E+05-0.01515388E+01 4 +SIC2 112989C 2SI 1 G 0200.00 5000.00 1000.00 1 + 0.05753726E+02 0.02067546E-01-0.01132535E-04 0.03106456E-08-0.02799937E-12 2 + 0.07200461E+06-0.05294927E+02 0.03647725E+02 0.08765100E-01-0.01079869E-03 3 + 0.07974287E-07-0.02617042E-10 0.07258578E+06 0.05481050E+02 4 +SICCH 61991H 1C 2SI 1 G 0200.00 2500.00 1500.00 1 + 0.08229114E+02 0.01220783E-01-0.01179375E-05-0.03293923E-09 0.02957217E-13 2 + 0.06029046E+06-0.01793033E+03 0.03946147E+02 0.01353938E+00-0.01476061E-03 3 + 0.08141935E-07-0.01743041E-10 0.06163490E+06 0.04400106E+02 4 +SICH 61991H 1C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.06212049E+02 0.05590981E-02-0.07015929E-06 0.03497540E-09-0.01203199E-12 2 + 0.06044180E+06-0.08520574E+02 0.03822068E+02 0.07938745E-01-0.09707239E-04 3 + 0.05877454E-07-0.01338338E-10 0.06118631E+06 0.03835953E+02 4 +SICH2 61991H 2C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.06246250E+02 0.02147775E-01-0.06406396E-06-0.02067218E-08 0.03841890E-12 2 + 0.03490992E+06-0.08995611E+02 0.02794283E+02 0.01138805E+00-0.01041700E-03 3 + 0.05368052E-07-0.01132779E-10 0.03606279E+06 0.09246714E+02 4 +SICH3 61991H 3C 1SI 1 G 0200.00 2500.00 1500.00 1 + 0.06681751E+02 0.03837387E-01-0.06162348E-06-0.04678285E-08 0.09346313E-12 2 + 0.03472013E+06-0.01022379E+03 0.02444652E+02 0.01367883E+00-0.09266249E-04 3 + 0.03704818E-07-0.06763833E-11 0.03624755E+06 0.01263619E+03 4 +SICL 121986SI 1CL 1 G 0200.00 2000.00 1000.00 1 + 0.04258460E+02 0.04020317E-02-0.02888145E-05 0.01009777E-08-0.01411012E-12 2 + 0.01775614E+06 0.04134521E+02 0.03096406E+02 0.05738623E-01-0.09740903E-04 3 + 0.07643597E-07-0.02279179E-10 0.01796795E+06 0.09603212E+02 4 +SICL2 121986SI 1CL 2 G 0200.00 2000.00 1000.00 1 + 0.06491205E+02 0.08242384E-02-0.05767737E-05 0.01972405E-08-0.02713757E-12 2 +-0.02232408E+06-0.03570531E+02 0.03826666E+02 0.01308296E+00-0.02234087E-03 3 + 0.01760742E-06-0.05267404E-10-0.02183869E+06 0.08965448E+02 4 +SICL2H2 121986SI 1H 2CL 2 G 0200.00 2000.00 1000.00 1 + 0.07727079E+02 0.05034189E-01-0.01095746E-04-0.04419587E-08 0.01631124E-11 2 +-0.04028605E+06-0.01170816E+03 0.01100209E+02 0.03262362E+00-0.04691995E-03 3 + 0.03494565E-06-0.01036285E-09-0.03892087E+06 0.02022693E+03 4 +SICL3 121986SI 1CL 3 G 0200.00 2000.00 1000.00 1 + 0.09098097E+02 0.01405353E-01-0.09317005E-05 0.02982296E-08-0.03822011E-12 2 +-0.04140193E+06-0.01455012E+03 0.04485691E+02 0.02241754E+00-0.03794196E-03 3 + 0.02973183E-06-0.08861335E-10-0.04055264E+06 0.07198771E+02 4 +SICL3CH2CH 10891C 2CL 3H 5SI 1G 0200.00 4000.00 1500.00 1 + 0.02087242E+03 0.05492755E-01-0.06829558E-05-0.01876697E-08 0.03787112E-12 2 +-0.07972510E+06-0.07741949E+03 0.04624781E+02 0.04378379E+00-0.03850522E-03 3 + 0.01844376E-06-0.03709272E-10-0.07377043E+06 0.01029869E+03 4 +SICL3H 121986SI 1H 1CL 3 G 0200.00 2000.00 1000.00 1 + 0.09663121E+02 0.03563368E-01-0.01214911E-04-0.01609009E-09 0.05641710E-12 2 +-0.06295557E+06-0.01894777E+03 0.02883770E+02 0.03308241E+00-0.05169241E-03 3 + 0.03949918E-06-0.01172104E-09-0.06163323E+06 0.01337466E+03 4 +SICL4 121986SI 1CL 4 G 0200.00 2000.00 1000.00 1 + 0.01170938E+03 0.01972092E-01-0.01269077E-04 0.03900188E-08-0.04756468E-12 2 +-0.08347808E+06-0.02791153E+03 0.05252110E+02 0.03122067E+00-0.05254593E-03 3 + 0.04102707E-06-0.01219907E-09-0.08228177E+06 0.02575727E+02 4 +SICLH3 121986SI 1H 3CL 1 G 0200.00 2000.00 1000.00 1 + 0.05964238E+02 0.06278087E-01-0.08205635E-05-0.09280558E-08 0.02796643E-11 2 +-0.01854309E+06-0.06395305E+02 0.05057173E+01 0.02703378E+00-0.03301474E-03 3 + 0.02302732E-06-0.06778703E-10-0.01730819E+06 0.02043167E+03 4 +SIF 42489SI 1F 1 G 0200.00 3000.00 1000.00 1 + 0.04120067E+02 0.03548821E-02-0.07200222E-06-0.02190434E-09 0.06764591E-13 2 +-0.07561378E+05 0.02784246E+02 0.03144948E+02 0.02588557E-01-0.05795912E-05 3 +-0.01807279E-07 0.01041172E-10-0.07294439E+05 0.07876774E+02 4 +SIF(NH2)2 22790SI 1F 1N 2H 4G 0200.00 4000.00 1000.00 1 + 0.01287944E+03 0.04598535E-01-0.04004441E-05-0.02374189E-08 0.04255211E-12 2 +-0.05238279E+06-0.03653418E+03 0.07210094E+02 0.01764698E+00-0.02542060E-04 3 +-0.01242214E-06 0.06989787E-10-0.05086706E+06-0.07024622E+02 4 +SIF(NH2)3 42489SI 1N 3H 6F 1G 0200.00 3000.00 1000.00 1 + 0.01611180E+03 0.08329222E-01-0.06023787E-05-0.07470125E-08 0.01570731E-11 2 +-0.09137007E+06-0.05098123E+03 0.08388268E+02 0.02746622E+00-0.04455675E-04 3 +-0.01955733E-06 0.01140721E-09-0.08947806E+06-0.01138178E+03 4 +SIF2 42489SI 1F 2 G 0200.00 3000.00 1000.00 1 + 0.06142470E+02 0.07807974E-02-0.01339312E-05-0.06264839E-09 0.01725138E-12 2 +-0.07744042E+06-0.04712327E+02 0.03845345E+02 0.06038465E-01-0.01167732E-04 3 +-0.04579554E-07 0.02607414E-10-0.07681634E+06 0.07272984E+02 4 +SIF2(NH2)2 42489SI 1N 2H 4F 2G 0200.00 3000.00 1000.00 1 + 0.01441477E+03 0.06110646E-01-0.04871145E-05-0.05455935E-08 0.01172714E-11 2 +-0.01292757E+07-0.04308682E+03 0.07634268E+02 0.02315843E+00-0.04193827E-04 3 +-0.01715351E-06 0.01016462E-09-0.01276410E+07-0.08419031E+02 4 +SIF2N 42489SI 1N 1F 2 G 0200.00 3000.00 1000.00 1 + 0.08687337E+02 0.01193488E-01-0.01992661E-05-0.09951334E-09 0.02704383E-12 2 +-0.03463832E+06-0.01494053E+03 0.05102583E+02 0.09456606E-01-0.01819383E-04 3 +-0.07309616E-07 0.04178902E-10-0.03367294E+06 0.03734424E+02 4 +SIF2NH2 42489SI 1N 1F 2H 2G 0200.00 3000.00 1000.00 1 + 0.09872415E+02 0.03722112E-01-0.03271338E-05-0.03321674E-08 0.07293692E-12 2 +-0.08751628E+06-0.01899096E+03 0.05890444E+02 0.01285128E+00-0.01863556E-04 3 +-0.08718963E-07 0.04848951E-10-0.08644527E+06 0.01756163E+02 4 +SIF3 42489SI 1F 3 G 0200.00 3000.00 1000.00 1 + 0.08524790E+02 0.01323792E-01-0.02104279E-05-0.01149504E-08 0.03055301E-12 2 +-0.01223522E+07-0.01550234E+03 0.04662868E+02 0.01008788E+00-0.01805544E-04 3 +-0.07769299E-07 0.04377852E-10-0.01212965E+07 0.04672966E+02 4 +SIF3NH 42489SI 1N 1F 3H 1G 0200.00 3000.00 1000.00 1 + 0.01163766E+03 0.02880769E-01-0.03357310E-05-0.02584594E-08 0.06162371E-12 2 +-0.01295891E+07-0.02590718E+03 0.06013822E+02 0.01597729E+00-0.02791466E-04 3 +-0.01214120E-06 0.06927415E-10-0.01280974E+07 0.03316771E+02 4 +SIF3NH2 42489SI 1N 1F 3H 2G 0200.00 3000.00 1000.00 1 + 0.01210964E+03 0.04383282E-01-0.04142245E-05-0.03989090E-08 0.08958954E-12 2 +-0.01641768E+07-0.03046928E+03 0.06229403E+02 0.01778015E+00-0.02612304E-04 3 +-0.01267243E-06 0.07044556E-10-0.01625849E+07 0.02045441E+01 4 +SIF3NHSIH3 42489SI 2N 1H 4F 3G 0200.00 3000.00 1000.00 1 + 0.01669941E+03 0.07789785E-01-0.08110570E-05-0.07650199E-08 0.01773956E-11 2 +-0.01673412E+07-0.05080007E+03 0.06216046E+02 0.02939330E+00-0.02717745E-04 3 +-0.01982878E-06 0.01002768E-09-0.01642282E+07 0.04858261E+02 4 +SIF3NSIH3 42489SI 2N 1H 3F 3G 0200.00 3000.00 1000.00 1 + 0.01599146E+03 0.06371086E-01-0.07256824E-05-0.06292690E-08 0.01495157E-11 2 +-0.01331158E+07-0.04495265E+03 0.06404372E+02 0.02601982E+00-0.02491543E-04 3 +-0.01769542E-06 0.08919883E-10-0.01302520E+07 0.06002945E+02 4 +SIF4 41389F 4SI 1 G 0200.00 2000.00 1000.00 1 + 0.09985301E+02 0.03532637E-01-0.01197378E-04-0.01036549E-08 0.08661585E-12 2 +-0.01977200E+07-0.02472644E+03 0.02147416E+02 0.03402219E+00-0.04756874E-03 3 + 0.03252196E-06-0.08819304E-10-0.01960449E+07 0.01346315E+03 4 +SIFH3 42489SI 1F 1H 3 G 0200.00 3000.00 1000.00 1 + 0.06799678E+02 0.04747086E-01-0.04767067E-05-0.04814665E-08 0.01107761E-11 2 +-0.04577024E+06-0.01261433E+03 0.02032190E+02 0.01341363E+00-0.02806381E-05 3 +-0.07803291E-07 0.03337474E-10-0.04421627E+06 0.01318768E+03 4 +SIFNH 42489SI 1N 1F 1H 1G 0200.00 3000.00 1000.00 1 + 0.07163299E+02 0.01521325E-01-0.01536337E-05-0.01195933E-08 0.02684100E-12 2 +-0.09065496E+05-0.06764144E+02 0.05390691E+02 0.06071319E-01-0.01359490E-04 3 +-0.04267435E-07 0.02603154E-10-0.08644237E+05 0.02272065E+02 4 +SIFNH2 22790F 1SI 1N 1H 2G 0200.00 4000.00 1000.00 1 + 0.08017582E+02 0.03209103E-01-0.03361364E-05-0.01796537E-08 0.03385552E-12 2 +-0.04313426E+06-0.01487024E+03 0.04214050E+02 0.01105423E+00-0.01014725E-04 3 +-0.07143728E-07 0.03634923E-10-0.04200629E+06 0.05318890E+02 4 +SIH 121986SI 1H 1 G 0200.00 2000.00 1000.00 1 + 0.03110430E+02 0.01094946E-01 0.02898629E-06-0.02745104E-08 0.07051799E-12 2 + 0.04516898E+06 0.04193487E+02 0.03836010E+02-0.02702657E-01 0.06849070E-04 3 +-0.05424184E-07 0.01472131E-10 0.04507593E+06 0.09350778E+01 4 +SIH2 42489SI 1H 2 G 0200.00 3000.00 1000.00 1 + 0.04142390E+02 0.02150191E-01-0.02190730E-05-0.02073725E-08 0.04741018E-12 2 + 0.03110484E+06 0.02930745E+01 0.03475092E+02 0.02139338E-01 0.07672306E-05 3 + 0.05217668E-08-0.09898824E-11 0.03147397E+06 0.04436585E+02 4 +SIH2CL 121986SI 1H 2CL 1 G 0200.00 2000.00 1000.00 1 + 0.05555902E+02 0.04046479E-01-0.06581751E-05-0.05027548E-08 0.01599110E-11 2 + 0.01912428E+05-0.01906890E+02 0.01699256E+02 0.01961407E+00-0.02622973E-03 3 + 0.01936417E-06-0.05846399E-10 0.02743662E+05 0.01683133E+03 4 +SIH2F 42489SI 1F 1H 2 G 0200.00 3000.00 1000.00 1 + 0.06020399E+02 0.03074040E-01-0.03248887E-05-0.03052243E-08 0.07098090E-12 2 +-0.02347670E+06-0.05919595E+02 0.02782566E+02 0.09148257E-01-0.04186788E-05 3 +-0.05388971E-07 0.02412133E-10-0.02244201E+06 0.01152854E+03 4 +SIH2F2 42489SI 1H 2F 2 G 0200.00 3000.00 1000.00 1 + 0.07997762E+02 0.03911538E-01-0.04222679E-05-0.03913812E-08 0.09171569E-12 2 +-0.09682880E+06-0.01622400E+03 0.02701455E+02 0.01456545E+00-0.01163300E-04 3 +-0.09685830E-07 0.04769591E-10-0.09522440E+06 0.01200689E+03 4 +SIH3 42489SI 1H 3 G 0200.00 3000.00 1000.00 1 + 0.05015906E+02 0.03732750E-01-0.03609053E-05-0.03729193E-08 0.08468490E-12 2 + 0.02190233E+06-0.04291368E+02 0.02946733E+02 0.06466764E-01 0.05991653E-05 3 +-0.02218413E-07 0.03052670E-11 0.02270173E+06 0.07347948E+02 4 +SIH3NH2 42489SI 1N 1H 5 G 0200.00 3000.00 1000.00 1 + 0.08109945E+02 0.07215753E-01-0.06052251E-05-0.07086088E-08 0.01557864E-11 2 +-0.08999782E+05-0.01651650E+03 0.02936348E+02 0.01674704E+00-0.03232859E-05 3 +-0.09171970E-07 0.03979516E-10-0.07334716E+05 0.01141437E+03 4 +SIH3NHSIH3 42489SI 2N 1H 7 G 0200.00 3000.00 1000.00 1 + 0.01265296E+03 0.01066748E+00-0.01007336E-04-0.01081222E-07 0.02452364E-11 2 +-0.01249721E+06-0.03441428E+03 0.02468750E+02 0.02940255E+00-0.06248179E-05 3 +-0.01731462E-06 0.07545261E-10-0.09209690E+05 0.02059560E+03 4 +SIH3NSIH3 42489SI 2N 1H 6 G 0200.00 3000.00 1000.00 1 + 0.01201462E+03 0.09187517E-01-0.09159516E-05-0.09380967E-08 0.02156435E-11 2 + 0.01965066E+06-0.02978186E+03 0.02827574E+02 0.02580647E+00-0.04200478E-05 3 +-0.01503859E-06 0.06388325E-10 0.02265351E+06 0.01997012E+03 4 +SIH3SIH2CH3 111391H 8C 1SI 2 G 0200.00 4000.00 1500.00 1 + 0.01886736E+03 0.06449996E-01-0.06896411E-05-0.02584789E-08 0.04830521E-12 2 +-0.06620909E+05-0.07374424E+03 0.02132164E+02 0.04348657E+00-0.03495608E-03 3 + 0.01588231E-06-0.03150773E-10-0.02040937E+04 0.01752930E+03 4 +SIH4 121386SI 1H 4 G 0200.00 4000.00 1000.00 1 + 0.06893874E+02 0.04030501E-01-0.04183314E-05-0.02291395E-08 0.04384766E-12 2 + 0.01107037E+05-0.01749117E+03 0.02475167E+02 0.09003721E-01 0.02185394E-04 3 +-0.02681423E-07-0.06621081E-11 0.02925488E+05 0.07751015E+02 4 +SIHCL2 121986SI 1H 1CL 2 G 0200.00 2000.00 1000.00 1 + 0.07229734E+02 0.02869206E-01-0.08849876E-05-0.07495866E-09 0.05752338E-12 2 +-0.01971399E+06-0.07052663E+02 0.02368353E+02 0.02401088E+00-0.03717220E-03 3 + 0.02851998E-06-0.08530494E-10-0.01875884E+06 0.01614587E+03 4 +SIHF 42489SI 1F 1H 1 G 0200.00 3000.00 1000.00 1 + 0.05073509E+02 0.01533279E-01-0.01840659E-05-0.01440038E-08 0.03452517E-12 2 +-0.01973880E+06-0.01079507E+02 0.03223728E+02 0.04981221E-01-0.03173051E-05 3 +-0.02822231E-07 0.01247832E-10-0.01914168E+06 0.08906423E+02 4 +SIHF2 42489SI 1H 1F 2 G 0200.00 3000.00 1000.00 1 + 0.07216536E+02 0.02253240E-01-0.02737472E-05-0.02173460E-08 0.05255331E-12 2 +-0.07280241E+06-0.09783487E+02 0.03377237E+02 0.01036607E+00-0.01239082E-04 3 +-0.07267982E-07 0.03794989E-10-0.07168358E+06 0.01052189E+03 4 +SIHF3 42489SI 1H 1F 3 G 0200.00 3000.00 1000.00 1 + 0.09363567E+02 0.02947556E-01-0.03577633E-05-0.02858224E-08 0.06915729E-12 2 +-0.01486074E+07-0.02169453E+03 0.03918053E+02 0.01463917E+00-0.01856070E-04 3 +-0.01058200E-06 0.05617543E-10-0.01470439E+07 0.07024261E+02 4 +SIN 42489SI 1N 1 G 0200.00 3000.00 1000.00 1 + 0.04122909E+02 0.03521458E-02-0.07161081E-06-0.02154956E-09 0.06667571E-13 2 + 0.05683927E+06 0.02389838E+02 0.03149182E+02 0.02584376E-01-0.05804625E-05 3 +-0.01805627E-07 0.01041095E-10 0.05710564E+06 0.07474389E+02 4 +SINH 42489SI 1N 1H 1 G 0200.00 3000.00 1000.00 1 + 0.04928801E+02 0.01628624E-01-0.01367197E-05-0.01390460E-08 0.02998969E-12 2 + 0.01767790E+06-0.02823472E+02 0.03166975E+02 0.05805823E-01-0.09524443E-05 3 +-0.03991893E-07 0.02283188E-10 0.01813561E+06 0.06298440E+02 4 +SINH2 42489SI 1N 1H 2 G 0200.00 3000.00 1000.00 1 + 0.05186436E+02 0.03016656E-01-0.02165476E-05-0.02722658E-08 0.05706182E-12 2 + 0.02270508E+06-0.01242140E+02 0.03362770E+02 0.07261176E-01-0.08721233E-05 3 +-0.04400014E-07 0.02419532E-10 0.02318446E+06 0.08223867E+02 4 +SN 121286S 1N 1 G 0200.00 5000.00 1000.00 1 + 0.03888287E+02 0.06778427E-02-0.02725309E-05 0.05135927E-09-0.03593836E-13 2 + 0.03044496E+06 0.04194291E+02 0.03407346E+02 0.01797887E-01-0.02018970E-04 3 + 0.02107857E-07-0.09527592E-11 0.03062373E+06 0.06821481E+02 4 +SO 121286S 1O 1 G 0200.00 5000.00 1000.00 1 + 0.04021078E+02 0.02584856E-02 0.08948142E-06-0.03580145E-09 0.03228430E-13 2 +-0.07119620E+04 0.03452523E+02 0.03080401E+02 0.01803106E-01 0.06705022E-05 3 +-0.02069005E-07 0.08514657E-11-0.03986163E+04 0.08581028E+02 4 +SO2 121286S 1O 2 G 0200.00 5000.00 1000.00 1 + 0.05254498E+02 0.01978545E-01-0.08204226E-05 0.01576383E-08-0.01120451E-12 2 +-0.03756886E+06-0.01146056E+02 0.02911439E+02 0.08103022E-01-0.06906710E-04 3 + 0.03329016E-07-0.08777121E-11-0.03687882E+06 0.01111740E+03 4 +SO3 121286S 1O 3 G 0200.00 5000.00 1000.00 1 + 0.07050668E+02 0.03246560E-01-0.01408897E-04 0.02721535E-08-0.01942365E-12 2 +-0.05020668E+06-0.01106443E+03 0.02575283E+02 0.01515092E+00-0.01229872E-03 3 + 0.04240257E-07-0.05266812E-11-0.04894411E+06 0.01219512E+03 4 +CH2* L S/93C 1H 2 00 00G 200.000 3500.000 1000.000 1 + 2.29203842E+00 4.65588637E-03-2.01191947E-06 4.17906000E-10-3.39716365E-14 2 + 5.09259997E+04 8.62650169E+00 4.19860411E+00-2.36661419E-03 8.23296220E-06 3 +-6.68815981E-09 1.94314737E-12 5.04968163E+04-7.69118967E-01 9.93967200E+03 4 +C2H3O T04/83O 1H 3C 2 0G 200.000 5000.000 1 + 0.59756699E+01 0.81305914E-02-0.27436245E-05 0.40703041E-09-0.21760171E-13 2 + 0.49032178E+03-0.50320879E+01 0.34090624E+01 0.10738574E-01 0.18914925E-05 3 + 0.71585831E-08 0.28673851E-11 0.15214766E+04 0.95714535E+01 0.30474436E+04 4 +PC3H4 40687C 3H 4 G 0200.00 5000.00 1000.00 1 + 0.05511034E+02 0.01246956E+00-0.04814165E-04 0.08573769E-08-0.05771561E-12 2 + 0.01961967E+06-0.01079475E+03 0.06271447E+01 0.03116179E+00-0.03747664E-03 3 + 0.02964118E-06-0.09987382E-10 0.02083493E+06 0.01346880E+03 4 +n-C4H3 HW /94C 4H 3 0 0G 200.000 3000.000 1 + 0.54328279E+01 0.16860981E-01-0.94313109E-05 0.25703895E-08-0.27456309E-12 2 + 0.61600680E+05-0.15673981E+01-0.31684113E+00 0.46912100E-01-0.68093810E-04 3 + 0.53179921E-07-0.16523005E-10 0.62476199E+05 0.24622559E+02 4 +i-C4H3 AB1/93C 4H 3 0 0G 200.000 3000.000 1 + 0.90978165E+01 0.92207119E-02-0.33878441E-05 0.49160498E-09-0.14529780E-13 2 + 0.56600574E+05-0.19802597E+02 0.20830412E+01 0.40834274E-01-0.62159685E-04 3 + 0.51679358E-07-0.17029184E-10 0.58005129E+05 0.13617462E+02 4 +n-C4H5 HW /94C 4H 5 0 0G 200.000 3000.000 1 + 0.98501978E+01 0.10779008E-01-0.13672125E-05-0.77200535E-09 0.18366314E-12 2 + 0.38840301E+05-0.26001846E+02 0.16305321E+00 0.39830137E-01-0.34000128E-04 3 + 0.15147233E-07-0.24665825E-11 0.41429766E+05 0.23536163E+02 4 +i-C4H5 HW /94C 4H 5 0 0G 200.000 3000.000 1 + 0.10229092E+02 0.94850138E-02-0.90406445E-07-0.12596100E-08 0.24781468E-12 2 + 0.34642812E+05-0.28564529E+02-0.19932900E-01 0.38005672E-01-0.27559450E-04 3 + 0.77835551E-08 0.40209383E-12 0.37496223E+05 0.24394241E+02 4 +C4H612 A 8/83C 4H 6 0 0G 200. 3000. 1000.0 1 + 0.1781557E 02 -0.4257502E-02 0.1051185E-04 -0.4473844E-08 0.5848138E-12 2 + 0.1267342E 05 -0.6982662E 02 0.1023467E 01 0.3495919E-01 -0.2200905E-04 3 + 0.6942272E-08 -0.7879187E-12 0.1811799E 05 0.1975066E 02 0.1950807E+05 4 +A1 HW /94C 6H 6 0 0G 200.000 3000.000 1 + 0.17246994E+02 0.38420164E-02 0.82776232E-05-0.48961120E-08 0.76064545E-12 2 + 0.26646055E+04-0.71945175E+02-0.48998680E+01 0.59806932E-01-0.36710087E-04 3 + 0.32740399E-08 0.37600886E-11 0.91824570E+04 0.44095642E+02 4 +C5H3 20387C 5H 3 G 0200.00 5000.00 1000.00 1 + 0.01078762E+03 0.09539619E-01-0.03206745E-04 0.04733323E-08-0.02512135E-12 2 + 0.06392904E+06-0.03005444E+03 0.04328720E+02 0.02352480E+00-0.05856723E-04 3 +-0.01215449E-06 0.07726478E-10 0.06588531E+06 0.04173259E+02 4 +l-C6H4 HW /94C 6H 4 0 0G 200.000 3000.000 1 + 0.12715182E+02 0.13839662E-01-0.43765440E-05 0.31541636E-09 0.46619026E-13 2 + 0.57031148E+05-0.39464600E+02 0.29590225E+00 0.58053318E-01-0.67766756E-04 3 + 0.43376762E-07-0.11418864E-10 0.60001371E+05 0.22318970E+02 4 +n-C6H5 HW /94C 6H 5 0 0G 200.000 3000.000 1 + 0.16070068E+02 0.81899539E-02 0.17325165E-05-0.20624185E-08 0.36292345E-12 2 + 0.64616867E+05-0.56163742E+02-0.61135769E+00 0.65082610E-01-0.78262397E-04 3 + 0.53030828E-07-0.14946683E-10 0.68805375E+05 0.27635468E+02 4 +A1- HW /94C 6H 5 0 0G 200.000 3000.000 1 + 0.14493439E+02 0.75712688E-02 0.37894542E-05-0.30769500E-08 0.51347820E-12 2 + 0.33189977E+05-0.54288940E+02-0.49076147E+01 0.59790771E-01-0.45639827E-04 3 + 0.14964993E-07-0.91767826E-12 0.38733410E+05 0.46567780E+02 4 +c-C6H4 HW /94C 6H 4 0 0G 200.000 3000.000 1 + 0.13849209E+02 0.78807920E-02 0.18243836E-05-0.21169166E-08 0.37459977E-12 2 + 0.47446340E+05-0.50404953E+02-0.30991268E+01 0.54030564E-01-0.40839004E-04 3 + 0.10738837E-07 0.98078490E-12 0.52205711E+05 0.37415207E+02 4 +l-C6H6 HW /94C 6H 6 0 0G 200.000 3000.000 1 + 0.10874918E+02 0.23293324E-01-0.94495535E-05 0.16255329E-08-0.84771200E-13 2 + 0.36224055E+05-0.30326756E+02 0.59114441E-01 0.55723339E-01-0.43485274E-04 3 + 0.14487391E-07-0.52512541E-12 0.39042688E+05 0.24796795E+02 4 +n-C6H7 HW /94C 6H 7 0 0G 200.000 3000.000 1 + 0.22577469E+02-0.30737517E-02 0.14225234E-04-0.69880848E-08 0.10232874E-11 2 + 0.41228980E+05-0.91568619E+02 0.13248032E+00 0.57103366E-01-0.43712644E-04 3 + 0.15538603E-07-0.12976356E-11 0.47730512E+05 0.25339081E+02 4 +c-C6H7 HW /94C 6H 7 0 0G 200.000 3000.000 1 + 0.19996841E+02 0.11189543E-02 0.11649756E-04-0.62779471E-08 0.94939508E-12 2 + 0.16730059E+05-0.83746933E+02-0.30328493E+01 0.50804518E-01-0.69150292E-05 3 +-0.29715974E-07 0.16296353E-10 0.23895383E+05 0.38909180E+02 4 +C6H8 HW /94C 6H 8 0 0G 200.000 3000.000 1 + 0.28481979E+02-0.15702948E-01 0.26771697E-04-0.11780109E-07 0.16573427E-11 2 + 0.93346445E+04-0.12500226E+03 0.15850439E+01 0.40215142E-01 0.78439543E-05 3 +-0.38761325E-07 0.18545207E-10 0.17949613E+05 0.19112625E+02 4 +i-C6H5 HW /94C 6H 5 0 0G 200.000 3000.000 1 + 0.22501663E+02-0.81009977E-02 0.15955695E-04-0.72310371E-08 0.10310424E-11 2 + 0.58473410E+05-0.91224777E+02-0.78585434E+00 0.60221825E-01-0.62890264E-04 3 + 0.36310730E-07-0.87000259E-11 0.64942270E+05 0.28658905E+02 4 +i-C6H7 HW /94C 6H 7 0 0G 200.000 3000.000 1 + 0.20481506E+02 0.79439697E-03 0.11450761E-04-0.60991177E-08 0.91756724E-12 2 + 0.37728426E+05-0.81812073E+02-0.17099094E+01 0.62486034E-01-0.54290707E-04 3 + 0.26959682E-07-0.58999090E-11 0.44086621E+05 0.33344772E+02 4 +A1C2H HW /94C 8H 6 0 0G 200.000 3000.000 1 + 0.24090759E+02 0.78232400E-03 0.11453964E-04-0.61620504E-08 0.93346685E-12 2 + 0.27429445E+05-0.10499631E+03-0.52645016E+01 0.84511042E-01-0.76597848E-04 3 + 0.33216978E-07-0.47673063E-11 0.35566242E+05 0.46378815E+02 4 +A1C2H- HW /94C 8H 5 0 0G 200.000 3000.000 1 + 0.12359501E+02 0.25453357E-01-0.10606554E-04 0.18914603E-08-0.10630622E-12 2 + 0.60930461E+05-0.40900208E+02-0.44495859E+01 0.76995067E-01-0.66617038E-04 3 + 0.25038682E-07-0.19756601E-11 0.65225926E+05 0.44427948E+02 4 +n-A1C2H2 HW /94C 8H 7 0 0G 200.000 3000.000 1 + 0.30433151E+02-0.13965182E-01 0.25416972E-04-0.11354174E-07 0.16092050E-11 2 + 0.35738719E+05-0.13416492E+03-0.44899931E+01 0.78750789E-01-0.62376959E-04 3 + 0.21952140E-07-0.16960955E-11 0.45902949E+05 0.47980759E+02 4 +i-A1C2H2 HW /94C 8H 7 0 0G 200.000 3000.000 1 + 0.24365524E+02 0.11262144E-02 0.12931670E-04-0.69641146E-08 0.10540145E-11 2 + 0.33549121E+05-0.10462067E+03-0.25971584E+01 0.63454390E-01-0.20852312E-04 3 +-0.22604624E-07 0.15112869E-10 0.41707375E+05 0.37893417E+02 4 +A1C2H* HW /94C 8H 5 0 0G 200.000 3000.000 1 + 0.28686157E+02-0.13869863E-01 0.22721186E-04-0.99882271E-08 0.14085851E-11 2 + 0.56047309E+05-0.12750334E+03-0.29324217E+01 0.66043675E-01-0.39500475E-04 3 +-0.31830381E-08 0.85300387E-11 0.65324043E+05 0.38058685E+02 4 +A1C2H3 HW /94C 8H 8 0 0G 200.000 3000.000 1 + 0.11303213E+02 0.33709887E-01-0.13208885E-04 0.21140962E-08-0.87311377E-13 2 + 0.11725388E+05-0.34737919E+02-0.38678493E+01 0.67947865E-01-0.25230333E-04 3 +-0.18017145E-07 0.12998470E-10 0.16200269E+05 0.45271770E+02 4 +A1C2H3* HW /94C 8H 7 0 0G 200.000 3000.000 1 + 0.11563599E+02 0.30210810E-01-0.11545593E-04 0.17302320E-08-0.52379765E-13 2 + 0.40498492E+05-0.34882965E+02-0.38868685E+01 0.68168961E-01-0.34805875E-04 3 +-0.56410254E-08 0.80714758E-11 0.44941359E+05 0.45943188E+02 4 +A1C2HC2H2 HW /94C 10H 7 0 0G 200.000 3000.000 1 + 0.37523422E+02-0.17028838E-01 0.28777416E-04-0.12719674E-07 0.17976818E-11 2 + 0.61041488E+05-0.17188731E+03-0.63184557E+01 0.11657917E+00-0.13638573E-03 3 + 0.88823526E-07-0.24348468E-10 0.72977062E+05 0.52624207E+02 4 +A1C2H)2 HW /94C 10H 6 0 0G 200.000 3000.000 1 + 0.39766785E+02-0.24939798E-01 0.34210185E-04-0.14473258E-07 0.20104023E-11 2 + 0.50136750E+05-0.18657632E+03-0.75570364E+01 0.12159592E+00-0.15138849E-03 3 + 0.10287488E-06-0.28950911E-10 0.62914168E+05 0.55213287E+02 4 +A2-1 HW /94C 10H 7 0 0G 200.000 3000.000 1 + 0.38380905E+02-0.23157451E-01 0.35479272E-04-0.15395457E-07 0.21609069E-11 2 + 0.32698469E+05-0.18106512E+03-0.85287294E+01 0.10334599E+00-0.91922702E-04 3 + 0.43147448E-07-0.85738135E-11 0.46335004E+05 0.63342224E+02 4 +A2-2 HW /94C 10H 7 0 0G 200.000 3000.000 1 + 0.37326401E+02-0.20478070E-01 0.33183067E-04-0.14576987E-07 0.20569137E-11 2 + 0.32840301E+05-0.17537704E+03-0.38448524E+01 0.70514679E-01-0.93748040E-05 3 +-0.44051607E-07 0.24267865E-10 0.45627656E+05 0.43582001E+02 4 +A2 HW /94C 10H 8 0 0G 200.000 3000.000 1 + 0.36468643E+02-0.15419513E-01 0.30160038E-04-0.13700120E-07 0.19582730E-11 2 + 0.35091445E+04-0.17329489E+03-0.94505043E+01 0.11137849E+00-0.10345667E-03 3 + 0.52800392E-07-0.11804439E-10 0.16695594E+05 0.65187668E+02 4 +naphthyne HW /94C 10H 6 0 0G 200.000 3000.000 1 + 0.37680222E+02-0.23843173E-01 0.34590019E-04-0.14841252E-07 0.20744023E-11 2 + 0.45771934E+05-0.17676088E+03-0.68131294E+01 0.96868336E-01-0.87982247E-04 3 + 0.41858918E-07-0.82716637E-11 0.58661090E+05 0.54849548E+02 4 +A2C2H2 HW /94C 12H 9 0 0G 200.000 3000.000 1 + 0.38449295E+02-0.62794946E-02 0.24404828E-04-0.11968822E-07 0.17586878E-11 2 + 0.41090176E+05-0.17668623E+03-0.78516331E+01 0.12104863E+00-0.10531662E-03 3 + 0.46280483E-07-0.77963885E-11 0.54316234E+05 0.63654388E+02 4 +A2C2HA HW /94C 12H 8 0 0G 200.000 3000.000 1 + 0.49453674E+02-0.33857111E-01 0.46505607E-04-0.19681195E-07 0.27340769E-11 2 + 0.26851051E+05-0.23933099E+03-0.11530450E+02 0.14741433E+00-0.17302344E-03 3 + 0.11500390E-06-0.32709183E-10 0.43793129E+05 0.74391754E+02 4 +A2C2HB HW /94C 12H 8 0 0G 200.000 3000.000 1 + 0.18184774E+02 0.41343965E-01-0.17302822E-04 0.31004770E-08-0.17580817E-12 2 + 0.36171543E+05-0.73466003E+02-0.68233256E+01 0.11382083E+00-0.88584900E-04 3 + 0.25930856E-07 0.80712824E-12 0.42797719E+05 0.54592098E+02 4 +A2C2HA* HW /94C 12H 7 0 0G 200.000 3000.000 1 + 0.36614349E+02-0.60314685E-02 0.21614964E-04-0.10579910E-07 0.15563124E-11 2 + 0.60723898E+05-0.17026691E+03-0.84175968E+01 0.12391680E+00-0.12250672E-03 3 + 0.64071344E-07-0.13889583E-10 0.73248562E+05 0.61893204E+02 4 +A2C2HB* HW /94C 12H 7 0 0G 200.000 3000.000 1 + 0.44933517E+02-0.26026871E-01 0.38589074E-04-0.16646357E-07 0.23321310E-11 2 + 0.57926637E+05-0.21417279E+03-0.11824737E+02 0.14904183E+00-0.18618468E-03 3 + 0.13129460E-06-0.39145326E-10 0.73385375E+05 0.76273834E+02 4 +A2C2H)2 HW /94C 14H 8 0 0G 200.000 3000.000 1 + 0.23671062E+02 0.42137049E-01-0.17596645E-04 0.31081251E-08-0.16805216E-12 2 + 0.77926273E+05-0.99615448E+02-0.63029008E+01 0.13745695E+00-0.13055481E-03 3 + 0.60730663E-07-0.10178345E-10 0.85489430E+05 0.51891548E+02 4 +A2HR5 HW /94C 12H 9 0 0G 200.000 3000.000 1 + 0.51227890E+02-0.36250230E-01 0.50296483E-04-0.21346413E-07 0.29698119E-11 2 + 0.32111648E+05-0.25061665E+03-0.92796507E+01 0.11707741E+00-0.78334211E-04 3 + 0.10778407E-07 0.66555260E-11 0.50063973E+05 0.66712509E+02 4 +A2R5 HW /94C 12H 8 0 0G 200.000 3000.000 1 + 0.45883698E+02-0.27226903E-01 0.41569336E-04-0.18047093E-07 0.25351396E-11 2 + 0.13394574E+05-0.22304584E+03-0.97011614E+01 0.12019449E+00-0.98907694E-04 3 + 0.37240884E-07-0.41124578E-11 0.29601926E+05 0.66970596E+02 4 +A3-4 HW /94C 14H 9 0 0G 200.000 3000.000 1 + 0.55788879E+02-0.37930615E-01 0.53528085E-04-0.22830790E-07 0.31841231E-11 2 + 0.32605633E+05-0.27378882E+03-0.11266616E+02 0.14216852E+00-0.12632679E-03 3 + 0.58348800E-07-0.11184283E-10 0.52141961E+05 0.75774780E+02 4 +A3-1 HW /94C 14H 9 0 0G 200.000 3000.000 1 + 0.51812469E+02-0.28380312E-01 0.45409150E-04-0.19924162E-07 0.28118107E-11 2 + 0.34357359E+05-0.25257889E+03-0.73971558E+01 0.11464679E+00-0.57456185E-04 3 +-0.14070547E-07 0.16005933E-10 0.52239715E+05 0.59582397E+02 4 +A3 HW /94C 14H 10 0 0G 200.000 3000.000 1 + 0.55916473E+02-0.35253201E-01 0.52522926E-04-0.22672634E-07 0.31770584E-11 2 + 0.32654609E+04-0.27604980E+03-0.12275226E+02 0.15032256E+00-0.13862801E-03 3 + 0.69376767E-07-0.15105445E-10 0.23030492E+05 0.78889145E+02 4 +A3C2H2 HW /94C 16H 11 0 0G 200.000 3000.000 1 + 0.47582428E+02-0.12822752E-02 0.25647692E-04-0.13378838E-07 0.20086545E-11 2 + 0.46191215E+05-0.22653258E+03-0.95893555E+01 0.15080631E+00-0.11617327E-03 3 + 0.36814228E-07-0.12802901E-11 0.62701906E+05 0.71309311E+02 4 +A3C2H HW /94C 16H 10 0 0G 200.000 3000.000 1 + 0.52165146E+02-0.13197318E-01 0.34353056E-04-0.16283892E-07 0.23677362E-11 2 + 0.34235055E+05-0.25406651E+03-0.11602674E+02 0.16824394E+00-0.16432030E-03 3 + 0.86394380E-07-0.19310567E-10 0.52172836E+05 0.75515366E+02 4 +A4H HW /94C 16H 11 0 0G 200.000 3000.000 1 + 0.53775238E+02-0.15681151E-01 0.38488797E-04-0.18134241E-07 0.26325071E-11 2 + 0.24154484E+05-0.26532764E+03-0.12209255E+02 0.15599608E+00-0.11474930E-03 3 + 0.30214796E-07 0.18287498E-11 0.43453211E+05 0.79503540E+02 4 +A4 HW /94C 16H 10 0 0G 200.000 3000.000 1 + 0.58017273E+02-0.29164989E-01 0.48728383E-04-0.21593682E-07 0.30609786E-11 2 + 0.43451016E+04-0.29017163E+03-0.13759249E+02 0.16772294E+00-0.15500121E-03 3 + 0.75759544E-07-0.15674045E-10 0.24996187E+05 0.82853027E+02 4 +A4- HW /94C 16H 9 0 0G 200.000 3000.000 1 + 0.22088816E+02 0.53355407E-01-0.22329932E-04 0.39479620E-08-0.21313176E-12 2 + 0.45200934E+05-0.96724930E+02-0.96258593E+01 0.13385314E+00-0.77600773E-04 3 +-0.36330547E-08 0.13855670E-10 0.54171852E+05 0.68499725E+02 4 +P2 HW /94C 12H 10 0 0G 200.000 3000.000 1 + 0.50761871E+02-0.34501564E-01 0.50293413E-04-0.21559579E-07 0.30097192E-11 2 + 0.21538867E+04-0.24670712E+03-0.10283234E+02 0.12428707E+00-0.95990268E-04 3 + 0.32294793E-07-0.23045229E-11 0.20165258E+05 0.72707947E+02 4 +P2- HW /94C 12H 9 0 0G 200.000 3000.000 1 + 0.44711853E+02-0.22851825E-01 0.39102117E-04-0.17352100E-07 0.24579375E-11 2 + 0.33714000E+05-0.21220692E+03-0.11851097E+02 0.13545156E+00-0.13310938E-03 3 + 0.73769911E-07-0.18193003E-10 0.49878781E+05 0.81107361E+02 4 +P2-H HW /94C 12H 11 0 0G 200.000 3000.000 1 + 0.41542511E+02-0.83502531E-02 0.29097937E-04-0.14148299E-07 0.20728341E-11 2 + 0.22772937E+05-0.19578616E+03-0.99978790E+01 0.12279570E+00-0.80112615E-04 3 + 0.11102152E-07 0.64273890E-11 0.37960410E+05 0.74195984E+02 4 +C5H4OH L 8/89C 5H 5O 1 0G 200.000 6000.000 1 + 0.13367912d+02 0.15205785d-01-0.54592258d-05 0.88134866d-09-0.52774454d-13 2 + 0.38411506d+04-0.45920839d+02-0.12822236d+01 0.49041160d-01-0.13688997d-04 3 +-0.29133858d-07 0.19006964d-10 0.80087098d+04 0.30798358d+02 0.96365992d+04 4 +C5H5O L 7/89C 5O 1H 5 0G 200.000 6000.000 1 + 0.12606422d+02 0.16747260d-01-0.61098574d-05 0.99676557d-09-0.60113201d-13 2 + 0.39313455d+04-0.42604277d+02 0.23042835d+00 0.32322691d-01 0.28900443d-04 3 +-0.70679977d-07 0.33406891d-10 0.80753082d+04 0.25330974d+02 4 +C5H4O P 1/93C 5H 4O 1 0G 200.000 3000.000 1 + 0.47927242E+01 0.29221680E-01-0.15997486E-04 0.42069049E-08-0.42815179E-12 2 + 0.22849286E+04-0.30131893E+01-0.23915355E+01 0.47363680E-01-0.30728171E-04 3 + 0.78031552E-08-0.25145729E-12 0.43740152E+04 0.34594337E+02 4 +C7H16 P10/95C 7H 16 0 0G 200.000 5000.000 1391.000 1 + 2.22148969e+01 3.47675750e-02-1.18407129e-05 1.83298478e-09-1.06130266e-13 2 +-3.42760081e+04-9.23040196e+01-1.26836187e+00 8.54355820e-02-5.25346786e-05 3 + 1.62945721e-08-2.02394925e-12-2.56586565e+04 3.53732912e+01 4 +C7H15-1 2/10/95 C 7H 15 0 0G 200.000 5000.000 1391.000 1 + 2.17940709e+01 3.26280243e-02-1.11138244e-05 1.72067148e-09-9.96366999e-14 2 +-9.20938221e+03-8.64954311e+01-4.99570406e-01 8.08826467e-02-5.00532754e-05 3 + 1.56549308e-08-1.96616227e-12-1.04590223e+03 3.46564011e+01 4 +C7H15-2 2/10/95 C 7H 15 0 0G 200.000 5000.000 1391.000 1 + 2.16368842e+01 3.23324804e-02-1.09273807e-05 1.68357060e-09-9.71774091e-14 2 +-1.05873616e+04-8.52209653e+01-3.79155767e-02 7.56726570e-02-4.07473634e-05 3 + 9.32678943e-09-4.92360745e-13-2.35605303e+03 3.37321506e+01 4 +C4H9 P10/84C 4.H 9. 0. 0.G 200.000 6000.000 1 + 9.43040607E+00 2.34271349E-02-8.53599182E-06 1.39748355E-09-8.44057456E-14 2 + 2.14214862E+03-2.42207994E+01 3.54885235E+00 1.78747638E-02 5.00782825E-05 3 +-7.94475071E-08 3.35802354E-11 4.74011588E+03 1.11849382E+01 6.89397210E+03 4 +C3H7 N-L 9/84C 3H 7 0 0G 200.000 5000.000 1 + 0.77026987E 01 0.16044203E-01-0.52833220E-05 0.76298590E-09-0.39392284E-13 2 + 0.82984336E 04-0.15480180E 02 0.10515518E 01 0.25991980E-01 0.23800540E-05 3 +-0.19609569E-07 0.93732470E-11 0.10631863E 05 0.21122559E 02 0.12087447E 05 4 +C7H15O2 7/23/98 C 7.H 15.O 2. 0.G 200.000 5000.000 1 + 2.49023689e+01 3.50716920e-02-1.20440306e-05 1.87464822e-09-1.08947791e-13 2 +-2.82976050e+04-9.73923542e+01 2.37499334e+00 8.34651906e-02-5.13897320e-05 3 + 1.64217662e-08-2.19505216e-12-1.99237961e+04 2.53067342e+01 4 +C7H14O2H 7/23/98 C 7.H 15.O 2. 0.G 200.000 5000.000 1 + 2.70028807e+01 3.22272216e-02-1.09366516e-05 1.68977918e-09-9.77321946e-14 2 +-2.27229231e+04-1.06332170e+02 2.49875186e+00 8.32443344e-02-4.85933986e-05 3 + 1.28927950e-08-1.09878385e-12-1.36530733e+04 2.73754005e+01 4 +C7H14O2HO2 7/23/98 C 7.H 15.O 4. 0.G 200.000 5000.000 1 + 3.23937788e+01 3.33911097e-02-1.15672104e-05 1.81146023e-09-1.05739941e-13 2 +-4.36321048e+04-1.32597311e+02 3.84933185e+00 9.45955097e-02-5.94934121e-05 3 + 1.78836457e-08-2.00618696e-12-3.32051631e+04 2.25912030e+01 4 +C7KET12 7/23/98 C 7.H 14.O 3. 0.G 200.000 5000.000 1 + 2.97472906e+01 3.06622294e-02-1.05563590e-05 1.64627343e-09-9.58171675e-14 2 +-5.66856828e+04-1.22432490e+02 5.82433697e-01 1.01207869e-01-7.65855996e-05 3 + 3.00738606e-08-4.82902792e-12-4.68054419e+04 3.33331449e+01 4 +C7KET21 2/10/95 C 7.H 14.O 3. 0.G 200.000 5000.000 1382.000 1 + 2.80512936e+01 3.27356029e-02-1.14107044e-05 1.79404506e-09-1.05002142e-13 2 +-5.89640173e+04-1.11392338e+02 4.19023030e+00 8.43118237e-02-5.44315814e-05 3 + 1.85837721e-08-2.72768938e-12-5.00570382e+04 1.85783455e+01 4 +C5H11CHO 2/29/96 C 6H 12O 1 0G 200.000 5000.000 1 + 1.98891043e+01 2.71869340e-02-9.27391515e-06 1.43744158e-09-8.33090761e-14 2 +-3.97523444e+04-7.60741671e+01 1.37517192e+00 6.65669689e-02-4.04423050e-05 3 + 1.23836270e-08-1.52905857e-12-3.28740986e+04 2.48343934e+01 4 +C5H11CO 2/29/96 C 6.H 11.O 1. 0.G 200.000 5000.000 1 + 1.94783812e+01 2.50466029e-02-8.54861346e-06 1.32557944e-09-7.68503296e-14 2 +-2.07923937e+04-7.21995578e+01 2.14479069e+00 6.17863563e-02-3.74134690e-05 3 + 1.13283795e-08-1.36917698e-12-1.43451172e+04 2.23128045e+01 4 +C5H11 T03/97C 5.H 11. 0. 0.G 200.000 5000.000 1 + 1.13324106E+01 3.03659897E-02-1.13934480E-05 1.99539733E-09-1.32825012E-13 2 +-5.95299959E+03-3.13564905E+01 3.57867617E+00 3.04236365E-02 3.27768270E-05 3 +-5.86453147E-08 2.39315107E-11-2.60420265E+03 1.42591121E+01 6.68760000E+03 4 +CH3O2 L 1/84C 1H 3O 2N 0G 200.000 5000.00 1 + 0.66812963E 01 0.80057271E-02-0.27188507E-05 0.40631365E-09-0.21927725E-13 2 + 0.52621851E 03-0.99423847E 01 0.20986490E 01 0.15786357E-01 0.75683261E-07 3 +-0.11274587E-07 0.56665133E-11 0.20695879E 04 0.15007068E 02 4 +CH4O2 T11/96C 1H 4O 2 0G 200.000 6000.000 1 + 6.86907934E+00 1.00840883E-02-3.66515947E-06 5.96302681E-10-3.58894156E-14 2 +-1.98402231E+04-1.24951986E+01 3.72654981E+00 7.51851847E-03 2.35970425E-05 3 +-3.52694507E-08 1.42757614E-11-1.83982011E+04 6.52443362E+00-1.68074366E+04 4 +C6H12 2/14/95 C 6.H 12.O 0. 0.G 200.000 5000.000 1 + 1.78337529e+01 2.67377658e-02-9.10036773e-06 1.40819768e-09-8.15124244e-14 2 +-1.42062860e+04-6.83818851e+01-1.35275205e+00 6.98655426e-02-4.59408022e-05 3 + 1.56967343e-08-2.21296175e-12-7.34368617e+03 3.53120691e+01 4 +C3H5 BUR 92C 3H 5O 0N 0G 200.000 6000.000 1 + 6.54761132E+00 1.33152246E-02-4.78333100E-06 7.71949814E-10-4.61930808E-14 2 + 1.72714707E+04-9.27486841E+00 3.78794693E+00 9.48414335E-03 2.42343368E-05 3 +-3.65604010E-08 1.48592356E-11 1.86261218E+04 7.82822499E+00 2.03259122E+04 4 +CH3CHO L 8/88C 2H 4O 1 G 200.000 6000.000 1000.000 1 + 0.54041108E+01 0.11723059E-01-0.42263137E-05 0.68372451E-09-0.40984863E-13 2 +-0.22593122E+05-0.34807917E+01 0.47294595E+01-0.31932858E-02 0.47534921E-04 3 +-0.57458611E-07 0.21931112E-10-0.21572878E+05 0.41030159E+01 4 +C3H3 BUR 92C 3H 3O 0N 0G 200.000 6000.000 1 + 6.64175821E+00 8.08587428E-03-2.84787887E-06 4.53525977E-10-2.68879815E-14 2 + 3.89793699E+04-1.04004255E+01 1.82840766E+00 2.37839036E-02-2.19228176E-05 3 + 1.00067444E-08-1.38984644E-12 4.01863058E+04 1.38447957E+01 4.16139977E+04 4 +C4H3 L 9/89C 4H 3O 0N 0G 200.000 6000.000 1 + 0.84762079E+01 0.88782327E-02-0.30328412E-05 0.47358302E-09-0.27716627E-13 2 + 0.54756540E+05-0.17170551E+02 0.24173247E+01 0.24104782E-01-0.12813470E-04 3 +-0.28606237E-08 0.39194527E-11 0.56506476E+05 0.14471107E+02 0.58181574E+05 4 +CH2CHO SAND86O 1H 3C 2 G 200.000 5000.000 1000.000 1 + 0.05975670E+02 0.08130591E-01-0.02743624E-04 0.04070304E-08-0.02176017E-12 2 + 0.04903218E+04-0.05045251E+02 0.03409062E+02 0.10738574E-01 0.01891492E-04 3 +-0.07158583E-07 0.02867385E-10 0.15214766E+04 0.09558290E+02 4 +END diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..907214c9f88bfcbb7588a24963aa40f42a944036 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties @@ -0,0 +1,60 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ +} + +LaunderSharmaKECoeffs +{ +} + +LRRCoeffs +{ +} + +LaunderGibsonRSTMCoeffs +{ +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/chemistryProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/chemistryProperties new file mode 100644 index 0000000000000000000000000000000000000000..e2b9a595b5ba44d4910abfc165727a737243a2f1 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/chemistryProperties @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +psiChemistryModel ODEChemistryModel<gasThermoPhysics>; + +chemistry on; + +turbulentReaction on; + +chemistrySolver ode; + +initialChemicalTimeStep 1e-07; + +sequentialCoeffs +{ + cTauChem 0.001; + equilibriumRateLimiter off; +} + +EulerImplicitCoeffs +{ + cTauChem 0.05; + equilibriumRateLimiter off; +} + +odeCoeffs +{ + ODESolver SIBS; + eps 0.05; + scale 1; +} + +Cmix Cmix [ 0 0 0 0 0 0 0 ] 1; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Positions b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Positions new file mode 100644 index 0000000000000000000000000000000000000000..a5cc78c32e2afdc616102f8f61788b2aeed5407c --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Positions @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + location ""; + class vectorField; + object coalCloudPositions; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +( +(0.005 0.5 0.05) +(0.010 0.5 0.05) +(0.015 0.5 0.05) +(0.020 0.5 0.05) +(0.025 0.5 0.05) +(0.030 0.5 0.05) +(0.035 0.5 0.05) +(0.040 0.5 0.05) +(0.045 0.5 0.05) +(0.005 0.6 0.05) +(0.010 0.6 0.05) +(0.015 0.6 0.05) +(0.020 0.6 0.05) +(0.025 0.6 0.05) +(0.030 0.6 0.05) +(0.035 0.6 0.05) +(0.040 0.6 0.05) +(0.045 0.6 0.05) +(0.005 0.7 0.05) +(0.010 0.7 0.05) +(0.015 0.7 0.05) +(0.020 0.7 0.05) +(0.025 0.7 0.05) +(0.030 0.7 0.05) +(0.035 0.7 0.05) +(0.040 0.7 0.05) +(0.045 0.7 0.05) +) +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties new file mode 100644 index 0000000000000000000000000000000000000000..7fcb35b37cdbb0c9869e1f8609128292b10628be --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties @@ -0,0 +1,163 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object coalCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +InjectionModel ManualInjection; + +DragModel SphereDrag; + +DispersionModel StochasticDispersionRAS; + +PatchInteractionModel StandardWallInteraction; + +HeatTransferModel RanzMarshall; + +CompositionModel SingleMixtureFraction; + +PhaseChangeModel LiquidEvaporation; + +DevolatilisationModel ConstantRateDevolatilisation; + +SurfaceReactionModel COxidationDiffusionLimitedRate; + +PostProcessingModel none; + +radiation on; + +coupled true; + +cellValueSourceCorrection on; + +parcelTypeId 1; + +constantProperties +{ + rhoMin rhoMin [ 1 -3 0 0 0 ] 1e-15; + TMin TMin [ 0 0 0 1 0 ] 200; + pMin pMin [ 1 -1 2 0 0 ] 1000; + minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; + rho0 rho0 [ 1 -3 0 0 0 ] 1000; + T0 T0 [ 0 0 0 1 0 ] 300; + cp0 cp0 [ 0 2 -2 -1 0 ] 4187; + epsilon0 epsilon0 [ 0 0 0 0 0 ] 1; + f0 f0 [ 0 0 0 0 0 ] 0.5; + Tvap Tvap [ 0 0 0 1 0 ] 400; + LDevol LDevol [ 0 0 0 0 0 ] 0; + hRetentionCoeff hRetentionCoeff [ 0 0 0 0 0 ] 1; + constantVolume true; +} + +interpolationSchemes +{ + rho cell; + U cellPointFace; + mu cell; + T cell; + Cp cell; + p cell; +} + +integrationSchemes +{ + U Euler; + T Analytical; +} + +particleForces +{ + gravity on; + virtualMass off; + pressureGradient off; +} + +ManualInjectionCoeffs +{ + massTotal massTotal [ 1 0 0 0 0 ] 0.0001; + parcelBasisType mass; + SOI 0; + positionsFile "coalCloud1Positions"; + U0 ( 0 -10 0 ); + parcelPDF + { + pdfType RosinRammler; + RosinRammlerPDF + { + minValue 5e-06; + maxValue 0.0005; + d ( 5e-05 ); + n ( 0.5 ); + } + } +} + +StandardWallInteractionCoeffs +{ + e e [ 0 0 0 0 0 ] 1; + mu mu [ 0 0 0 0 0 ] 0; +} + +RanzMarshallCoeffs +{ + Pr Pr [ 0 0 0 0 0 ] 0.7; +} + +SingleMixtureFractionCoeffs +{ + phases + ( + gas + { + CH4 0.604; + H2 0.099; + CO2 0.297; + } + liquid + { + H2O 1; + } + solid + { + ash 0.136304; + C 0.863696; + } + ); + YGasTot0 0.211; + YLiquidTot0 0.026; + YSolidTot0 0.763; +} + +LiquidEvaporationCoeffs +{ + activeLiquids + ( + H2O + ); +} + +ConstantRateDevolatilisationCoeffs +{ + A0 A0 [ 0 0 -1 0 0 ] 12; + volatileResidualCoeff 0.001; +} + +COxidationDiffusionLimitedRateCoeffs +{ + Sb Sb [ 0 0 0 0 0 ] 1; + D D [ 0 2 -1 0 0 ] 1.5e-05; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/enthalpySourceProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/enthalpySourceProperties new file mode 100644 index 0000000000000000000000000000000000000000..9c1295cc93c7296b01b2e4f6a974827096d94134 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/enthalpySourceProperties @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object enthalpySourceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +active yes; + +cellSource sphereToCell; + +volumeType absolute; + +timeStart 0.15; + +duration 0.1; + +onValue 10000; + +offValue 0; + +sphereToCellCoeffs +{ + centre ( 0.125 0.375 0.05 ); + radius 0.005; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/environmentalProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..4baaea2a25ae33b74c1a57066d6bb1db10704eea --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 -9.81 0 ); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties new file mode 100644 index 0000000000000000000000000000000000000000..a76ed5115f88135a593f6a2cfa45a9ffe1e740a5 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties @@ -0,0 +1,104 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object limestoneCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +InjectionModel ManualInjection; + +DragModel SphereDrag; + +DispersionModel StochasticDispersionRAS; + +PatchInteractionModel StandardWallInteraction; + +HeatTransferModel RanzMarshall; + +PostProcessingModel none; + +radiation on; + +coupled true; + +cellValueSourceCorrection on; + +parcelTypeId 2; + +constantProperties +{ + rhoMin rhoMin [ 1 -3 0 0 0 ] 1e-15; + TMin TMin [ 0 0 0 1 0 ] 200; + minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; + rho0 rho0 [ 1 -3 0 0 0 ] 2500; + T0 T0 [ 0 0 0 1 0 ] 300; + cp0 cp0 [ 0 2 -2 -1 0 ] 900; + epsilon0 epsilon0 [ 0 0 0 0 0 ] 1; + f0 f0 [ 0 0 0 0 0 ] 0.5; +} + +interpolationSchemes +{ + rho cell; + mu cell; + U cellPoint; + Cp cell; + T cell; +} + +integrationSchemes +{ + U Euler; + T Analytical; +} + +particleForces +{ + gravity on; + virtualMass off; + pressureGradient off; +} + +ManualInjectionCoeffs +{ + massTotal massTotal [ 1 0 0 0 0 ] 0.0001; + parcelBasisType mass; + SOI 0; + positionsFile "limestonePositions"; + U0 ( 0 0 0 ); + parcelPDF + { + pdfType RosinRammler; + RosinRammlerPDF + { + minValue 5e-06; + maxValue 0.000565; + d ( 4.8e-05 ); + n ( 0.5 ); + } + } +} + +StandardWallInteractionCoeffs +{ + e e [ 0 0 0 0 0 ] 1; + mu mu [ 0 0 0 0 0 ] 0; +} + +RanzMarshallCoeffs +{ + Pr Pr [ 0 0 0 0 0 ] 0.7; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestonePositions b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestonePositions new file mode 100644 index 0000000000000000000000000000000000000000..e94ef685103857f451b00d39634f4f78df18509e --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestonePositions @@ -0,0 +1,37 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + location ""; + class vectorField; + object limestonePositions; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +( +(0.0075 0.55 0.05) +(0.0125 0.55 0.05) +(0.0175 0.55 0.05) +(0.0225 0.55 0.05) +(0.0275 0.55 0.05) +(0.0325 0.55 0.05) +(0.0375 0.55 0.05) +(0.0425 0.55 0.05) +(0.0475 0.55 0.05) +(0.0075 0.45 0.05) +(0.0125 0.45 0.05) +(0.0175 0.45 0.05) +(0.0225 0.45 0.05) +(0.0275 0.45 0.05) +(0.0325 0.45 0.05) +(0.0375 0.45 0.05) +(0.0425 0.45 0.05) +(0.0475 0.45 0.05) +) +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..fd9096e9524642d771a3cdc3d21957a9c13a55fc --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict @@ -0,0 +1,88 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant/polyMesh"; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1.0; + +vertices +( + (0 0 0) + (0.05 0 0) + (0.05 0.5 0) + (0 0.5 0) + (0 0 0.1) + (0.05 0 0.1) + (0.05 0.5 0.1) + (0 0.5 0.1) + (0.5 0 0) + (0.5 0.5 0) + (0.5 0 0.1) + (0.5 0.5 0.1) + (0.05 1 0) + (0 1 0) + (0.05 1 0.1) + (0 1 0.1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (5 50 1) simpleGrading (1 1 1) + hex (1 8 9 2 5 10 11 6) (40 50 1) simpleGrading (1 1 1) + hex (3 2 12 13 7 6 14 15) (5 50 1) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + wall top + ( + (13 15 14 12) + ) + wall bottom + ( + (0 1 5 4) + (1 8 10 5) + ) + wall walls + ( + (8 9 11 10) + (9 2 6 11) + (2 12 14 6) + ) + symmetryPlane symmetry + ( + (4 7 3 0) + (7 15 13 3) + ) + empty frontAndBack + ( + (0 3 2 1) + (3 13 12 2) + (1 2 9 8) + (5 6 7 4) + (6 14 15 7) + (10 11 6 5) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/radiationProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/radiationProperties new file mode 100644 index 0000000000000000000000000000000000000000..8fbbdfa7202105d49a104735d2501e55b0c25f4d --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/radiationProperties @@ -0,0 +1,73 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object radiationProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +radiation on; + +solverFreq 1; + +radiationModel P1; + +noRadiation +{ +} + +P1Coeffs +{ + C C [ 0 0 0 0 0 0 0 ] 0; +} + +absorptionEmissionModel binaryAbsorptionEmission; + +binaryAbsorptionEmissionCoeffs +{ + model1 + { + absorptionEmissionModel constantAbsorptionEmission; + constantAbsorptionEmissionCoeffs + { + a a [ 0 -1 0 0 0 0 0 ] 0.5; + e e [ 0 -1 0 0 0 0 0 ] 0.5; + E E [ 1 -1 -3 0 0 0 0 ] 0; + } + } + model2 + { + absorptionEmissionModel cloudAbsorptionEmission; + cloudAbsorptionEmissionCoeffs + { + cloudNames + ( + coalCloud1 + limestoneCloud1 + ); + } + } +} + +scatterModel cloudScatter; + +cloudScatterCoeffs +{ + cloudNames + ( + coalCloud1 + limestoneCloud1 + ); +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/thermophysicalProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..9a18bc51f13e8d8bfe6116c2e54507bf20ceffa0 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/thermophysicalProperties @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; + +chemistryReader foamChemistryReader; + +foamChemistryThermoFile "$FOAM_CASE/chemkin/foam.dat"; + +foamChemistryFile "$FOAM_CASE/chemkin/foam.inp"; + +inertSpecie N2; + +liquidComponents +( + H2O +); + +H2O H2O defaultCoeffs; + +solidComponents +( + C + ash +); + +C C defaultCoeffs; + +ash ash defaultCoeffs; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..78f28eca604be4d8fc94d38d23ae0cbb679b18fb --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/controlDict b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..50cd97415e2827afb6d1ef6cca3d46ef50788b72 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/controlDict @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application coalChemistryFoam; + +startFrom latestTime; + +startTime 0; + +stopAt endTime; + +endTime 0.5; + +deltaT 0.0001; + +writeControl adjustableRunTime; + +writeInterval 0.0025; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 1.0; + +maxDeltaT 1; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/decomposeParDict b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..e9784a98d78f4c2d7f0435a759a78ad3f30a0226 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/decomposeParDict @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +method metis; + +simpleCoeffs +{ + n ( 2 2 1 ); + delta 0.001; +} + +hierarchicalCoeffs +{ + n ( 1 1 1 ); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights ( 1 1 1 1 ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots ( ); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..99267208eae1f5130781bee35206d73e203fc64a --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phid,p) Gauss upwind; + div(phiU,p) Gauss linear; + div(phi,h) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(U) Gauss linear; + div((muEff*dev2(grad(U).T()))) Gauss linear; + div(phi,Yi_h) Gauss upwind; +} + +laplacianSchemes +{ + default Gauss linear corrected; + laplacian(muEff,U) Gauss linear corrected; + laplacian(mut,U) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; + laplacian(alphaEff,h) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSolution b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..08e0c7a037ab36453b3c30cae21fa61bef32c837 --- /dev/null +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSolution @@ -0,0 +1,143 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + rho + { + solver PCG; + preconditioner DIC; + tolerance 1e-05; + relTol 0; + }; + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + p + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + G + { + solver PCG; + preconditioner DIC; + tolerance 1e-05; + relTol 0; + }; + Yi + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + CO2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + O2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + N2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + CH4 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + H2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + H2O + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + CO + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + h + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; +} + +PISO +{ + transonic yes; + nCorrectors 2; + nNonOrthogonalCorrectors 0; + momentumPredictor yes; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G new file mode 100644 index 0000000000000000000000000000000000000000..67b9372a4c833e5cb37a1784aa59daa2fd9ffb0e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G @@ -0,0 +1,59 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object G; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + inlet + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/pd b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/H2O similarity index 73% rename from tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/pd rename to tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/H2O index dbfc6661058517618c784bf060911ebe265b98c9..6ab71d183d314c4c8382de0b8163a07698a0e468 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/pd +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/H2O @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: 1.5.x | | \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -10,47 +10,45 @@ FoamFile version 2.0; format ascii; class volScalarField; - object p; + location "0"; + object H2O; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -2 0 0 0 0]; +dimensions [0 0 0 0 0 0 0]; internalField uniform 0; boundaryField { - minX + walls { type zeroGradient; - value uniform 0; } - maxX + inlet { type fixedValue; value uniform 0; } - - minY + outlet { type zeroGradient; - value uniform 0; } - maxY + cycLeft { - type zeroGradient; + type cyclic; value uniform 0; } - minZ + cycRight { - type zeroGradient; + type cyclic; value uniform 0; } - maxZ + frontAndBack { - type zeroGradient; - value uniform 0; + type empty; } } + // ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/N2 b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/N2 new file mode 100644 index 0000000000000000000000000000000000000000..67821f8aba70a97b41c4bd07f990c5c478eb721e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/N2 @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object N2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.79; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0.79; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.79; + } + cycRight + { + type cyclic; + value uniform 0.79; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/O2 b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/O2 new file mode 100644 index 0000000000000000000000000000000000000000..af16fd7a8f19fa4773d71180162a5d4f770b7a95 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/O2 @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object O2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.21; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0.21; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.21; + } + cycRight + { + type cyclic; + value uniform 0.21; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/T b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/T new file mode 100644 index 0000000000000000000000000000000000000000..b03d0dbaa27890d0e183110582183068747425b3 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/T @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 350; + +boundaryField +{ + walls + { + type fixedValue; + value uniform 400; + } + inlet + { + type fixedValue; + value uniform 350; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + } + cycRight + { + type cyclic; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/U b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/U new file mode 100644 index 0000000000000000000000000000000000000000..58adc402f91bb3c19cfcf119b40ec2bb3798f1a2 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/U @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + walls + { + type fixedValue; + value uniform (0 0 0); + } + inlet + { + type fixedValue; + value uniform (5 0 0); + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + } + cycRight + { + type cyclic; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/alphat b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/alphat new file mode 100644 index 0000000000000000000000000000000000000000..f298ca2ef79c4a4bf795c89ed7b22a9783eddd1e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/alphat @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type compressible::alphatWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/epsilon b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..529618d2afbba64ffaa99f8f4c6963eaf77895f9 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/epsilon @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.0449; + +boundaryField +{ + walls + { + type compressible::epsilonWallFunction; + value uniform 0.0449; + } + inlet + { + type fixedValue; + value uniform 0.0449; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.0449; + } + cycRight + { + type cyclic; + value uniform 0.0449; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/k b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/k new file mode 100644 index 0000000000000000000000000000000000000000..eed0dcdd366eab874e4fb2dc3ba7e5c542e35b76 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/k @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.0938; + +boundaryField +{ + walls + { + type compressible::kQRWallFunction; + value uniform 0.0938; + } + inlet + { + type fixedValue; + value uniform 0.0938; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.0938; + } + cycRight + { + type cyclic; + value uniform 0.0938; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/mut b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/mut new file mode 100644 index 0000000000000000000000000000000000000000..0ad81e27201c3bcec3bbf206d5abfa4617fc6e28 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/mut @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object mut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type mutWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/p b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/p new file mode 100644 index 0000000000000000000000000000000000000000..55f9cd7aee3de50282b8c4417d9ba21173ddcbe9 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/p @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 100000; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type zeroGradient; + } + outlet + { + type fixedValue; + value uniform 100000; + } + cycLeft + { + type cyclic; + value uniform 100000; + } + cycRight + { + type cyclic; + value uniform 100000; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/G b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/G new file mode 100644 index 0000000000000000000000000000000000000000..67b9372a4c833e5cb37a1784aa59daa2fd9ffb0e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/G @@ -0,0 +1,59 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object G; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + inlet + { + type MarshakRadiation; + T T; + emissivity 1; + value uniform 0; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/H2O b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/H2O new file mode 100644 index 0000000000000000000000000000000000000000..6ab71d183d314c4c8382de0b8163a07698a0e468 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/H2O @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object H2O; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/N2 b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/N2 new file mode 100644 index 0000000000000000000000000000000000000000..67821f8aba70a97b41c4bd07f990c5c478eb721e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/N2 @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object N2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.79; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0.79; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.79; + } + cycRight + { + type cyclic; + value uniform 0.79; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/O2 b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/O2 new file mode 100644 index 0000000000000000000000000000000000000000..af16fd7a8f19fa4773d71180162a5d4f770b7a95 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/O2 @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object O2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.21; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0.21; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.21; + } + cycRight + { + type cyclic; + value uniform 0.21; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/T b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/T new file mode 100644 index 0000000000000000000000000000000000000000..b03d0dbaa27890d0e183110582183068747425b3 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/T @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 350; + +boundaryField +{ + walls + { + type fixedValue; + value uniform 400; + } + inlet + { + type fixedValue; + value uniform 350; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + } + cycRight + { + type cyclic; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/U b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/U new file mode 100644 index 0000000000000000000000000000000000000000..58adc402f91bb3c19cfcf119b40ec2bb3798f1a2 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/U @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + walls + { + type fixedValue; + value uniform (0 0 0); + } + inlet + { + type fixedValue; + value uniform (5 0 0); + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + } + cycRight + { + type cyclic; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/alphat b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..f298ca2ef79c4a4bf795c89ed7b22a9783eddd1e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/alphat @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type compressible::alphatWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/epsilon b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..529618d2afbba64ffaa99f8f4c6963eaf77895f9 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/epsilon @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.0449; + +boundaryField +{ + walls + { + type compressible::epsilonWallFunction; + value uniform 0.0449; + } + inlet + { + type fixedValue; + value uniform 0.0449; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.0449; + } + cycRight + { + type cyclic; + value uniform 0.0449; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/k b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/k new file mode 100644 index 0000000000000000000000000000000000000000..eed0dcdd366eab874e4fb2dc3ba7e5c542e35b76 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/k @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.0938; + +boundaryField +{ + walls + { + type compressible::kQRWallFunction; + value uniform 0.0938; + } + inlet + { + type fixedValue; + value uniform 0.0938; + } + outlet + { + type zeroGradient; + } + cycLeft + { + type cyclic; + value uniform 0.0938; + } + cycRight + { + type cyclic; + value uniform 0.0938; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/mut b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/mut new file mode 100644 index 0000000000000000000000000000000000000000..0ad81e27201c3bcec3bbf206d5abfa4617fc6e28 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/mut @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object mut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type mutWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + cycLeft + { + type cyclic; + value uniform 0; + } + cycRight + { + type cyclic; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/p b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/p new file mode 100644 index 0000000000000000000000000000000000000000..55f9cd7aee3de50282b8c4417d9ba21173ddcbe9 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0/p @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 100000; + +boundaryField +{ + walls + { + type zeroGradient; + } + inlet + { + type zeroGradient; + } + outlet + { + type fixedValue; + value uniform 100000; + } + cycLeft + { + type cyclic; + value uniform 100000; + } + cycRight + { + type cyclic; + value uniform 100000; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allclean b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..9ded4bdec6e16903b476bd71ca332bf8af748d0e --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allclean @@ -0,0 +1,16 @@ +#!/bin/sh +set -x + +# remove old cell sets +rm -rf constant/polyMesh/sets +foamClearPolyMesh + +# remove old time folders +rm -rf 0 *[1-9]* + +# remove old log files +rm -f log* + +# copy 0.org to 0 +cp -r 0.org 0 + diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..701d55dc28c462b8cc7a2743861adff59feafc64 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun @@ -0,0 +1,24 @@ +#!/bin/sh + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="porousExplicitSourceReactingParcelFoam" + +# create mesh +runApplication blockMesh + +# create sets +setSet -batch system/sets.setSet >& log.setSet1 + +# convert sets to zones +setsToZones -noFlipMap >& log.setsToZones + +# create the first cyclic - lhs of porous zone +unset FOAM_SETNAN +createBaffles cycLeft cycLeft -overwrite >& log.createBaffles1 + +# create the second cyclic - rhs of porous zone +createBaffles cycRight cycRight -overwrite >& log.createBaffles2 + +runApplication $application diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/RASProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..71270c8d7cdd49831a45d2e34e2020fb49265ed1 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/RASProperties @@ -0,0 +1,169 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + // Cmu + Cmu 0.09; + // C1 + C1 1.44; + // C2 + C2 1.92; + // C3 + C3 -0.33; + // alphah + alphah 1; + // alphak + alphak 1; + // alphaEps + alphaEps 0.76923; +} + +// RNG k-epsilon model coefficients +RNGkEpsilonCoeffs +{ + // Cmu + Cmu 0.0845; + // C1 + C1 1.42; + // C2 + C2 1.68; + // C3 + C3 -0.33; + // alphah + alphah 1; + // alphak + alphak 1.39; + // alphaEps + alphaEps 1.39; + // eta0 + eta0 4.38; + // beta + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + // Cmu + Cmu 0.09; + // C1 + C1 1.44; + // C2 + C2 1.92; + // C3 + C3 -0.33; + // alphah + alphah 1; + // alphak + alphak 1; + // alphaEps + alphaEps 0.76923; +} + +// Launder-Reece-Rodi RSTM with wall functions model coefficients +LRRCoeffs +{ + // Cmu + Cmu 0.09; + // Clrr1 + Clrr1 1.8; + // Clrr2 + Clrr2 0.6; + // C1 + C1 1.44; + // C2 + C2 1.92; + // Cs + Cs 0.25; + // Ceps + Ceps 0.15; + // alphah + alphah 1; + // alphaEps + alphaEps 0.76923; + // alphaR + alphaR 1.22; +} + +LaunderGibsonRSTMCoeffs +{ + // Cmu + Cmu 0.09; + // Clg1 + Clg1 1.8; + // Clg2 + Clg2 0.6; + // C1 + C1 1.44; + // C2 + C2 1.92; + // C1Ref + C1Ref 0.5; + // C2Ref + C2Ref 0.3; + // Cs + Cs 0.25; + // Ceps + Ceps 0.15; + // alphah + alphah 1; + // alphaEps + alphaEps 0.76923; + // alphaR + alphaR 1.22; +} + +kOmegaSSTCoeffs +{ + alphaK1 0.85034; + alphaK2 1.0; + alphaOmega1 0.5; + alphaOmega2 0.85616; + gamma1 0.5532; + gamma2 0.4403; + beta1 0.0750; + beta2 0.0828; + betaStar 0.09; + a1 0.31; + c1 10; + + Cmu 0.09; + + alphah 1; +} + +wallFunctionCoeffs +{ + // kappa + kappa 0.4187; + // E + E 9; + // Prt + Prt 1; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/chemistryProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/chemistryProperties new file mode 100644 index 0000000000000000000000000000000000000000..9123a87ab7d2aad3c5f07fc31d6ce381b056d0f8 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/chemistryProperties @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +rhoChemistryModel ODEChemistryModel<icoPoly8ThermoPhysics>; + +chemistry off; + +turbulentReaction off; + +chemistrySolver ode; + +initialChemicalTimeStep 1e-07; + +sequentialCoeffs +{ + cTauChem 0.001; + equilibriumRateLimiter off; +} + +EulerImplicitCoeffs +{ + cTauChem 0.05; + equilibriumRateLimiter off; +} + +odeCoeffs +{ + ODESolver RK; + eps 0.05; + scale 1; +} + +Cmix Cmix [ 0 0 0 0 0 0 0 ] 1; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/environmentalProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..e5124f24528a9aefc741713cd06a11917107de2a --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 0 0 ); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/parcelInjectionProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/parcelInjectionProperties new file mode 100644 index 0000000000000000000000000000000000000000..529c8f0749c2c38e599d0dca625759435cf48f72 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/parcelInjectionProperties @@ -0,0 +1,26 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object scalarListList; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// x y z u v w d rho mDot T cp Y0..YN +( + (0.1 0.32 0.0 0.5 0.25 0.0 0.001 1000 0.2 300 4200 1.0) + (0.1 0.44 0.0 0.5 0.1 0.0 0.001 1000 0.2 300 4200 1.0) + (0.1 0.56 0.0 0.5 -0.1.0 0.0 0.001 1000 0.2 300 4200 1.0) + (0.1 0.68 0.0 0.5 -0.25 0.0 0.001 1000 0.2 300 4200 1.0) +); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/particleTrackProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/particleTrackProperties new file mode 100644 index 0000000000000000000000000000000000000000..1dcc0258d537ffe209e6ce5ea19a7a6a31a6536c --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/particleTrackProperties @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object particleTrackProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +cloudName reactingCloud1; + +sampleFrequency 1; + +maxPositions 1000000; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/pointMassSourcesProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/pointMassSourcesProperties new file mode 100644 index 0000000000000000000000000000000000000000..063399d211d5ed531385d746779244fe2a970c8f --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/pointMassSourcesProperties @@ -0,0 +1,34 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object pointMassSourcesProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +active false; + +pointSources +( + source1 + { + timeStart 0.2; + duration 2.0; + location (2.75 0.5 0); + fieldData + ( + (H2O 0.01) + ); + } +); + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/polyMesh/blockMeshDict b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..99b6b4f9111a08de5ed52c51e4ea6908a0dfbfde --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/polyMesh/blockMeshDict @@ -0,0 +1,113 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant/polyMesh"; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (0.00 0.25 0) // 0 + (1.00 0.25 0) // 1 + (1.25 0.00 0) // 2 + (2.25 0.00 0) // 3 + (2.50 0.25 0) // 4 + (4.00 0.25 0) // 5 + + (4.00 0.75 0) // 6 + (2.50 0.75 0) // 7 + (2.25 1.00 0) // 8 + (1.25 1.00 0) // 9 + (1.00 0.75 0) // 10 + (0.00 0.75 0) // 11 + + + (0.00 0.25 0.1) // 12 + (1.00 0.25 0.1) // 13 + (1.25 0.00 0.1) // 14 + (2.25 0.00 0.1) // 15 + (2.50 0.25 0.1) // 16 + (4.00 0.25 0.1) // 17 + + (4.00 0.75 0.1) // 18 + (2.50 0.75 0.1) // 19 + (2.25 1.00 0.1) // 20 + (1.25 1.00 0.1) // 21 + (1.00 0.75 0.1) // 22 + (0.00 0.75 0.1) // 23 +); + +blocks +( + hex ( 0 1 10 11 12 13 22 23) (20 20 1) simpleGrading (1 1 1) + hex ( 1 2 9 10 13 14 21 22) ( 8 20 1) simpleGrading (1 1 1) + hex ( 2 3 8 9 14 15 20 21) (20 20 1) simpleGrading (1 1 1) + hex ( 3 4 7 8 15 16 19 20) ( 8 20 1) simpleGrading (1 1 1) + hex ( 4 5 6 7 16 17 18 19) (30 20 1) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + wall walls + ( + ( 0 1 13 12) + ( 1 2 14 13) + ( 2 3 15 14) + ( 3 4 16 15) + ( 4 5 17 16) + ( 6 7 19 18) + ( 7 8 20 19) + ( 8 9 21 20) + ( 9 10 22 21) + (10 11 23 22) + ) + + patch inlet + ( + (11 0 12 23) + ) + + patch outlet + ( + ( 5 6 18 17) + ) + + cyclic cycLeft + () + + cyclic cycRight + () + + empty frontAndBack + ( + ( 0 11 10 1) + ( 1 10 9 2) + ( 2 9 8 3) + ( 3 8 7 4) + ( 4 7 6 5) + (12 13 22 23) + (13 14 21 22) + (14 15 20 21) + (15 16 19 20) + (16 17 18 19) + ) +); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/porousZones b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/porousZones new file mode 100644 index 0000000000000000000000000000000000000000..d4881e37faef085bf267cf142da01aff1055a12f --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/porousZones @@ -0,0 +1,36 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object porousZones; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +( + filter // name of cell zone + { + coordinateSystem + { + e1 (1 0 0); + e2 (0 1 0); + } + + Darcy + { + d d [0 -2 0 0 0 0 0] (500000 -1000 -1000); + f f [0 -1 0 0 0 0 0] (0 0 0); + } + } +) + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/radiationProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/radiationProperties new file mode 100644 index 0000000000000000000000000000000000000000..19c0ae1defc736d068c0f5f29ac120c4d50efb48 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/radiationProperties @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object radiationProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +radiation off; + +radiationModel none; + +solverFreq 10; + +noRadiationCoeffs +{ +} + +P1Coeffs +{ + C C [ 0 0 0 0 0 0 0 ] 0; +} + +absorptionEmissionModel binaryAbsorptionEmission; + +binaryAbsorptionEmissionCoeffs +{ + model1 + { + absorptionEmissionModel constantAbsorptionEmission; + constantAbsorptionEmissionCoeffs + { + a a [ 0 -1 0 0 0 0 0 ] 0.5; + e e [ 0 -1 0 0 0 0 0 ] 0.5; + E E [ 1 -1 -3 0 0 0 0 ] 0; + } + } + model2 + { + absorptionEmissionModel cloudAbsorptionEmission; + cloudAbsorptionEmissionCoeffs + { + cloudNames ( coalCloud1 limestoneCloud1 ); + } + } +} + +scatterModel cloudScatter; + +cloudScatterCoeffs +{ + cloudNames ( coalCloud1 limestoneCloud1 ); +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactingCloud1Positions b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactingCloud1Positions new file mode 100644 index 0000000000000000000000000000000000000000..6d19cbc19bad9ca1c5c8ba0b7c51cd24b0778b37 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactingCloud1Positions @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class vectorField; + location "constant"; + object reactingCloud1Positions; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +( +(0.002 0.002 0.00005) +(0.004 0.002 0.00005) +(0.006 0.002 0.00005) +(0.008 0.002 0.00005) +(0.010 0.002 0.00005) +(0.002 0.004 0.00005) +(0.004 0.004 0.00005) +(0.006 0.004 0.00005) +(0.008 0.004 0.00005) +(0.010 0.004 0.00005) +(0.002 0.006 0.00005) +(0.004 0.006 0.00005) +(0.006 0.006 0.00005) +(0.008 0.006 0.00005) +(0.010 0.006 0.00005) +(0.002 0.008 0.00005) +(0.004 0.008 0.00005) +(0.006 0.008 0.00005) +(0.008 0.008 0.00005) +(0.010 0.008 0.00005) +(0.002 0.010 0.00005) +(0.004 0.010 0.00005) +(0.006 0.010 0.00005) +(0.008 0.010 0.00005) +(0.010 0.010 0.00005) +) +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactingCloud1Properties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactingCloud1Properties new file mode 100644 index 0000000000000000000000000000000000000000..76e55a95ea9d854c439e0880f8f9548284ad34d6 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactingCloud1Properties @@ -0,0 +1,167 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object reactingCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +InjectionModel ReactingLookupTableInjection; + +DragModel SphereDrag; + +DispersionModel none; + +PatchInteractionModel LocalInteraction; + +HeatTransferModel RanzMarshall; + +CompositionModel SinglePhaseMixture; + +PhaseChangeModel LiquidEvaporation; + +PostProcessingModel PatchPostProcessing; + +radiation off; + +coupled true; + +cellValueSourceCorrection on; + +parcelTypeId 1; + +constantProperties +{ + rhoMin rhoMin [ 1 -3 0 0 0 ] 1e-15; + TMin TMin [ 0 0 0 1 0 ] 200; + pMin pMin [ 1 -1 2 0 0 ] 1000; + rho0 rho0 [ 1 -3 0 0 0 ] 1000; + minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; + T0 T0 [ 0 0 0 1 0 ] 300; + cp0 cp0 [ 0 2 -2 -1 0 ] 4100; + epsilon0 epsilon0 [ 0 0 0 0 0 ] 1; + f0 f0 [ 0 0 0 0 0 ] 0.5; + Tvap Tvap [ 0 0 0 1 0 ] 273; + constantVolume false; +} + +interpolationSchemes +{ + rho cell; + U cellPointFace; + mu cell; + T cell; + Cp cell; + p cell; +} + +integrationSchemes +{ + U Euler; + T Analytical; +} + +particleForces +{ + gravity on; + virtualMass off; + pressureGradient off; +} + +ManualInjectionCoeffs +{ + massTotal massTotal [ 1 0 0 0 0 ] 1e-2; + parcelBasisType mass; + SOI 0; + positionsFile "reactingCloud1Positions"; + U0 ( 0 0 0 ); + parcelPDF + { + pdfType uniform; + uniformPDF + { + minValue 1e-04; + maxValue 1e-04; + } + } +} + +ReactingLookupTableInjectionCoeffs +{ + massTotal massTotal [ 1 0 0 0 0 ] 1e-2; + parcelBasisType mass; + SOI 0.5; + inputFile "parcelInjectionProperties"; + duration 1.0; + parcelsPerSecond 250; +} + + +StandardWallInteractionCoeffs +{ + e e [ 0 0 0 0 0 ] 1; + mu mu [ 0 0 0 0 0 ] 0; +} + +LocalInteractionCoeffs +{ + patches + ( + walls + { + e 1; + mu 0; + } + cycLeft + { + e 1; + mu 0; + } + ); +} + +RanzMarshallCoeffs +{ + Pr Pr [ 0 0 0 0 0 ] 0.7; +} + +SinglePhaseMixtureCoeffs +{ + phases + ( + liquid + { + H2O 1; + } + ); +} + +LiquidEvaporationCoeffs +{ + activeLiquids + ( + H2O + ); +} + +PatchPostProcessingCoeffs +{ + maxStoredParcels 20; + + patches + ( + cycLeft + ); +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactions b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactions new file mode 100644 index 0000000000000000000000000000000000000000..45f51fa38f951d4b102156822f97ba53ee005efb --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/reactions @@ -0,0 +1,10 @@ +species +( + N2 + O2 + H2O +); + +reactions +( +); diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/thermo.incompressiblePoly b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/thermo.incompressiblePoly new file mode 100644 index 0000000000000000000000000000000000000000..4ca40c05fb3aacf603b749e1f3630ca8cb5bc778 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/thermo.incompressiblePoly @@ -0,0 +1,143 @@ +( +N2 N2 1 28.0134 + rhoPolynomial + ( + 3.88E+000 + -1.64E-002 + 3.18E-005 + -2.89E-008 + 9.90E-012 + 0 + 0 + 0 + ) + 0.0 // Heat of formation + 0.0 // Standard entropy + cpPolynomial + ( + 2.75E+004 + 1.12E+001 + -3.12E-002 + 4.45E-005 + -1.92E-008 + 0 + 0 + 0 + ) + muPolynomial + ( + 1.54E-006 + 6.15E-008 + -1.81E-011 + 0 + 0 + 0 + 0 + 0 + ) + kappaPolynomial + ( + 3.15E-003 + 8.49E-005 + -1.25E-008 + 0 + 0 + 0 + 0 + 0 + ) +O2 O2 1 31.9988 + rhoPolynomial + ( + 4.43E+000 + -1.87E-002 + 3.64E-005 + -3.30E-008 + 1.13E-011 + 0 + 0 + 0 + ) + 0.0 // Heat of formation + 0.0 // Standard entropy + cpPolynomial + ( + 2.67E+004 + 9.93E+000 + -7.09E-003 + 1.45E-005 + -9.13E-009 + 0 + 0 + 0 + ) + muPolynomial + ( + 1.54E-006 + 6.15E-008 + -1.81E-011 + 0 + 0 + 0 + 0 + 0 + ) + kappaPolynomial + ( + 2.09E-004 + 8.52E-005 + -1.49E-008 + 0 + 0 + 0 + 0 + 0 + ) +H2O H2O 1 18.0153 + rhoPolynomial + ( + 2.49E+000 + -1.05E-002 + 2.03E-005 + -1.84E-008 + 6.28E-012 + 0 + 0 + 0 + ) + -241.8 // Heat of formation + 0.0 // Standard entropy + cpPolynomial + ( + 2.85E+004 + 2.63E+001 + -4.63E-002 + 5.11E-005 + -1.83E-008 + 0 + 0 + 0 + ) + muPolynomial + ( + 1.54E-006 + 6.15E-008 + -1.81E-011 + 0 + 0 + 0 + 0 + 0 + ) + kappaPolynomial + ( + 3.79E-003 + 1.53E-004 + -1.22E-008 + 0 + 0 + 0 + 0 + 0 + ) +) diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/thermophysicalProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..5946130cbb6911e7d29b6e602c4baa5419711155 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/thermophysicalProperties @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hRhoMixtureThermo<reactingMixture<icoPoly8ThermoPhysics>>; + +chemistryReader foamChemistryReader; + +foamChemistryFile "$FOAM_CASE/constant/reactions"; + +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.incompressiblePoly"; + +liquidComponents +( + H2O +); +H2O H2O defaultCoeffs; + +solidComponents +( +); + +inertSpecie N2; + + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/turbulenceProperties b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..47c046d714367bdde68f84c32fdf37498961915b --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/constant/turbulenceProperties @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/cellSetDict b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/cellSetDict new file mode 100644 index 0000000000000000000000000000000000000000..42393046f74652f8a8f671aac5d75b5b0504df03 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/cellSetDict @@ -0,0 +1,32 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object cellSetDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +name filter; + +action new; + +topoSetSources +( + // Cells with cell centre within box + boxToCell + { + box (1.5 -1 -1) (2 1 1); + } +); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/controlDict b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..a1aa89cd091f1ff7050767fd9afc25fdabc216b7 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/controlDict @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 5; + +deltaT 0.001; + +writeControl adjustableRunTime; + +writeInterval 0.1; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 1.0; + +maxDeltaT 1; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/decomposeParDict b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..c8ec7396879b1092049262bdd17752ccecf8f8bf --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/decomposeParDict @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +method metis; + +preserveFaceZones +( + cycLeft + cycRight +); + +simpleCoeffs +{ + n ( 2 2 1 ); + delta 0.001; +} + +hierarchicalCoeffs +{ + n ( 1 1 1 ); + delta 0.001; + order xyz; +} + +metisCoeffs +{} + +manualCoeffs +{ + dataFile ""; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/fvSchemes b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..99267208eae1f5130781bee35206d73e203fc64a --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/fvSchemes @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phid,p) Gauss upwind; + div(phiU,p) Gauss linear; + div(phi,h) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(U) Gauss linear; + div((muEff*dev2(grad(U).T()))) Gauss linear; + div(phi,Yi_h) Gauss upwind; +} + +laplacianSchemes +{ + default Gauss linear corrected; + laplacian(muEff,U) Gauss linear corrected; + laplacian(mut,U) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; + laplacian(alphaEff,h) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/fvSolution b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..e01611490e05bff98b886adef03b424b5e8f8569 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/fvSolution @@ -0,0 +1,153 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + rho + { + solver PCG; + preconditioner DIC; + tolerance 1e-05; + relTol 0; + }; + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + p + { + solver GAMG; + tolerance 0; + relTol 0.1; + + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + + cacheAgglomeration true; + + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + pFinal + { + solver GAMG; + tolerance 1e-6; + relTol 0; + + smoother GaussSeidel; + nPreSweeps 0; + nPostSweeps 2; + + cacheAgglomeration true; + + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + G + { + solver PCG; + preconditioner DIC; + tolerance 1e-05; + relTol 0; + }; + Yi + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + O2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + N2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + H2O + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + }; + h + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; +} + +PISO +{ + transonic no; + nOuterCorrectors 1; + nCorrectors 2; + nNonOrthogonalCorrectors 0; + momentumPredictor yes; +// nUCorrectors 2; +} + +additional +{ + dpdt true; + hWork true; + eWork true; +} + +relaxationFactors +{ +/* + U 1; + k 1; + kepsilon 1; + h 1; + rho 1; + p 1; +*/ +} + +// ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/sets.setSet b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/sets.setSet new file mode 100644 index 0000000000000000000000000000000000000000..b6137ed52b04b0259a4cc4c5617c95a634d14e12 --- /dev/null +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/system/sets.setSet @@ -0,0 +1,10 @@ +cellSet filter new boxToCell (1.5 -10 -10) (2 10 10) +cellSet leftFluid new boxToCell (-10 -10 -10) (1.5 10 10) +cellSet rightFluid new boxToCell (2 -1 -1) (10 10 10) + +faceSet cycLeft new cellToFace filter all +faceSet cycLeft subset cellToFace leftFluid all + +faceSet cycRight new cellToFace filter all +faceSet cycRight subset cellToFace rightFluid all + diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/G b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/G new file mode 100644 index 0000000000000000000000000000000000000000..fa160e6bb38aee4a10d101cb0dfe2a75b7f5693a --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/G @@ -0,0 +1,37 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object G; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type MarshakRadiation; + T T; + emissivity 1.0; + value uniform 0; + } + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/H2O b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/H2O new file mode 100644 index 0000000000000000000000000000000000000000..a5001202eaca379918e2ebd0908ea999240d9948 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/H2O @@ -0,0 +1,36 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object H2O; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.0; + +boundaryField +{ + walls + { + type zeroGradient; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/N2 b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/N2 new file mode 100644 index 0000000000000000000000000000000000000000..61a0a0cd9dbcc3734588bd1bc951f94d506d2c13 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/N2 @@ -0,0 +1,36 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object N2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.79; + +boundaryField +{ + walls + { + type zeroGradient; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/O2 b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/O2 new file mode 100644 index 0000000000000000000000000000000000000000..3927d8183c89e4e1d0f46210e2f16249c2a27f33 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/O2 @@ -0,0 +1,36 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object O2; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.21; + +boundaryField +{ + walls + { + type zeroGradient; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/T b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/T new file mode 100644 index 0000000000000000000000000000000000000000..4a49016ccd8379e5d47f5178f6a15f918e9b816f --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/T @@ -0,0 +1,35 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + location "0"; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 400; + +boundaryField +{ + walls + { + type fixedValue; + value uniform 400; + } + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/U b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/U new file mode 100644 index 0000000000000000000000000000000000000000..2b02dd199a657910b74a6c5b6368595cfe4103f9 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/U @@ -0,0 +1,35 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + location "0"; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + walls + { + type fixedValue; + value uniform (0 0 0); + } + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/p b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/p new file mode 100644 index 0000000000000000000000000000000000000000..9563def1f1e547eb01ecf34203eeea0580b46f2e --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/0/p @@ -0,0 +1,34 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 100000; + +boundaryField +{ + walls + { + type zeroGradient; + } + frontAndBack + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/chem.inp b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/chem.inp new file mode 100644 index 0000000000000000000000000000000000000000..e1c66808259097c7678e10a52072760041181bec --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/chem.inp @@ -0,0 +1,6 @@ +ELEMENTS +O H N +END +SPECIES +N2 O2 H2O +END diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/foam.dat b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/foam.dat new file mode 100644 index 0000000000000000000000000000000000000000..36ef32431218784d9c10aa1609870debbbbb5924 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/foam.dat @@ -0,0 +1,17 @@ +( +O2 O2 1 31.9988 + 200 5000 1000 + 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 + 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 + 1.67212e-06 170.672 +H2O H2O 1 18.0153 + 200 5000 1000 + 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 + 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 + 1.67212e-06 170.672 +N2 N2 1 28.0134 + 200 5000 1000 + 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 + 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 + 1.67212e-06 170.672 +) diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/foam.inp b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/foam.inp new file mode 100644 index 0000000000000000000000000000000000000000..80d66f62c04dbc0e5638ad8912f02619e526e7be --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/foam.inp @@ -0,0 +1,11 @@ +species +( + O2 + H2O + N2 +) +; + +reactions +( +); diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/therm.dat b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/therm.dat new file mode 100644 index 0000000000000000000000000000000000000000..2a896be3987daf9b20db6bff6b4f7c67b8c6e4c8 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/chemkin/therm.dat @@ -0,0 +1,15 @@ +THERMO ALL + 200.000 1000.000 5000.000 +H2O 20387H 2O 1 G 0200.00 5000.00 1000.00 1 + 0.02672146E+02 0.03056293E-01-0.08730260E-05 0.01200996E-08-0.06391618E-13 2 +-0.02989921E+06 0.06862817E+02 0.03386842E+02 0.03474982E-01-0.06354696E-04 3 + 0.06968581E-07-0.02506588E-10-0.03020811E+06 0.02590233E+02 4 +N2 121286N 2 G 0200.00 5000.00 1000.00 1 + 0.02926640E+02 0.01487977E-01-0.05684761E-05 0.01009704E-08-0.06753351E-13 2 +-0.09227977E+04 0.05980528E+02 0.03298677E+02 0.01408240E-01-0.03963222E-04 3 + 0.05641515E-07-0.02444855E-10-0.01020900E+05 0.03950372E+02 4 +O2 121386O 2 G 0200.00 5000.00 1000.00 1 + 0.03697578E+02 0.06135197E-02-0.01258842E-05 0.01775281E-09-0.01136435E-13 2 +-0.01233930E+05 0.03189166E+02 0.03212936E+02 0.01127486E-01-0.05756150E-05 3 + 0.01313877E-07-0.08768554E-11-0.01005249E+05 0.06034738E+02 4 +END diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/chemistryProperties b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/chemistryProperties new file mode 100644 index 0000000000000000000000000000000000000000..cbffc12e84975d2b2e7be95277458e5042f53ea7 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/chemistryProperties @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +psiChemistryModel ODEChemistryModel<gasThermoPhysics>; + +chemistry off; + +turbulentReaction off; + +chemistrySolver ode; + +initialChemicalTimeStep 1e-07; + +sequentialCoeffs +{ + cTauChem 0.001; +} + +EulerImplicitCoeffs +{ + cTauChem 0.05; + equilibriumRateLimiter off; +} + +odeCoeffs +{ + ODESolver RK; + eps 0.05; + scale 1; +} + +Cmix Cmix [ 0 0 0 0 0 0 0 ] 1; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/environmentalProperties b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..e5124f24528a9aefc741713cd06a11917107de2a --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 0 0 ); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/polyMesh/blockMeshDict b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..68e44fead41bca4eccc385d092ad5a424c0b37f9 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/polyMesh/blockMeshDict @@ -0,0 +1,61 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant/polyMesh"; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.001; + +vertices +( + ( 0 0 0) + (12 0 0) + (12 12 0) + ( 0 12 0) + ( 0 0 1) + (12 0 1) + (12 12 1) + ( 0 12 1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + wall walls + ( + (3 7 6 2) + (0 4 7 3) + (2 6 5 1) + (1 5 4 0) + ) + empty frontAndBack + ( + (0 3 2 1) + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/radiationProperties b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/radiationProperties new file mode 100644 index 0000000000000000000000000000000000000000..ca03722b1cc634848a57607c2583bbf86f60461a --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/radiationProperties @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object radiationProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +radiation off; + +radiationModel none; + +solverFreq 10; + +noRadiation +{ +} + +P1Coeffs +{ + C C [ 0 0 0 0 0 0 0 ] 0; +} + +absorptionEmissionModel binaryAbsorptionEmission; + +binaryAbsorptionEmissionCoeffs +{ + model1 + { + absorptionEmissionModel constantAbsorptionEmission; + constantAbsorptionEmissionCoeffs + { + a a [ 0 -1 0 0 0 0 0 ] 0.5; + e e [ 0 -1 0 0 0 0 0 ] 0.5; + E E [ 1 -1 -3 0 0 0 0 ] 0; + } + } + model2 + { + absorptionEmissionModel cloudAbsorptionEmission; + cloudAbsorptionEmissionCoeffs + { + cloudNames ( coalCloud1 limestoneCloud1 ); + } + } +} + +scatterModel cloudScatter; + +cloudScatterCoeffs +{ + cloudNames ( coalCloud1 limestoneCloud1 ); +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/reactingCloud1Positions b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/reactingCloud1Positions new file mode 100644 index 0000000000000000000000000000000000000000..6d19cbc19bad9ca1c5c8ba0b7c51cd24b0778b37 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/reactingCloud1Positions @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class vectorField; + location "constant"; + object reactingCloud1Positions; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +( +(0.002 0.002 0.00005) +(0.004 0.002 0.00005) +(0.006 0.002 0.00005) +(0.008 0.002 0.00005) +(0.010 0.002 0.00005) +(0.002 0.004 0.00005) +(0.004 0.004 0.00005) +(0.006 0.004 0.00005) +(0.008 0.004 0.00005) +(0.010 0.004 0.00005) +(0.002 0.006 0.00005) +(0.004 0.006 0.00005) +(0.006 0.006 0.00005) +(0.008 0.006 0.00005) +(0.010 0.006 0.00005) +(0.002 0.008 0.00005) +(0.004 0.008 0.00005) +(0.006 0.008 0.00005) +(0.008 0.008 0.00005) +(0.010 0.008 0.00005) +(0.002 0.010 0.00005) +(0.004 0.010 0.00005) +(0.006 0.010 0.00005) +(0.008 0.010 0.00005) +(0.010 0.010 0.00005) +) +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/reactingCloud1Properties new file mode 100644 index 0000000000000000000000000000000000000000..6a53da3143fdf612841edcd3042fd4a4f2b68737 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/reactingCloud1Properties @@ -0,0 +1,128 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object reactingCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +InjectionModel ManualInjection; + +DragModel SphereDrag; + +DispersionModel none; + +PatchInteractionModel StandardWallInteraction; + +HeatTransferModel RanzMarshall; + +CompositionModel SinglePhaseMixture; + +PhaseChangeModel LiquidEvaporation; + +PostProcessingModel none; + +radiation off; + +coupled true; + +cellValueSourceCorrection on; + +parcelTypeId 1; + +constantProperties +{ + rhoMin rhoMin [ 1 -3 0 0 0 ] 1e-15; + TMin TMin [ 0 0 0 1 0 ] 200; + pMin pMin [ 1 -1 2 0 0 ] 1000; + rho0 rho0 [ 1 -3 0 0 0 ] 1000; + minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; + T0 T0 [ 0 0 0 1 0 ] 300; + cp0 cp0 [ 0 2 -2 -1 0 ] 4187; + epsilon0 epsilon0 [ 0 0 0 0 0 ] 1; + f0 f0 [ 0 0 0 0 0 ] 0.5; + Tvap Tvap [ 0 0 0 1 0 ] 273; + constantVolume false; +} + +interpolationSchemes +{ + rho cell; + U cellPointFace; + mu cell; + T cell; + Cp cell; + p cell; +} + +integrationSchemes +{ + U Euler; + T Analytical; +} + +particleForces +{ + gravity on; + virtualMass off; + pressureGradient off; +} + +ManualInjectionCoeffs +{ + massTotal massTotal [ 1 0 0 0 0 ] 1e-8; + parcelBasisType mass; + SOI 0; + positionsFile "reactingCloud1Positions"; + U0 ( 0 0 0 ); + parcelPDF + { + pdfType uniform; + uniformPDF + { + minValue 1e-04; + maxValue 1e-04; + } + } +} + +StandardWallInteractionCoeffs +{ + e e [ 0 0 0 0 0 ] 1; + mu mu [ 0 0 0 0 0 ] 0; +} + +RanzMarshallCoeffs +{ + Pr Pr [ 0 0 0 0 0 ] 0.7; +} + +SinglePhaseMixtureCoeffs +{ + phases + ( + liquid + { + H2O 1; + } + ); +} + +LiquidEvaporationCoeffs +{ + activeLiquids + ( + H2O + ); +} + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/thermophysicalProperties b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..6e80104f13cf28f82be1e2f96f7bde1019e2039c --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/thermophysicalProperties @@ -0,0 +1,39 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hPsiMixtureThermo<reactingMixture<gasThermoPhysics>>; + +chemistryReader foamChemistryReader; + +foamChemistryFile "$FOAM_CASE/chemkin/foam.inp"; + +foamChemistryThermoFile "$FOAM_CASE/chemkin/foam.dat"; + +liquidComponents +( + H2O +); + +solidComponents +(); + +inertSpecie N2; + +H2O H2O defaultCoeffs; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/turbulenceProperties b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..974e568fa84afa295d535b90a50fdb79826892b7 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/controlDict b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..fb4a4c45a761f802494c7437a226768a67cce452 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/controlDict @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 1; + +deltaT 0.001; + +writeControl adjustableRunTime; + +writeInterval 0.1; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 10; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 0.3; + +maxDeltaT 1e-3; + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/decomposeParDict b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..e9784a98d78f4c2d7f0435a759a78ad3f30a0226 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/decomposeParDict @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +method metis; + +simpleCoeffs +{ + n ( 2 2 1 ); + delta 0.001; +} + +hierarchicalCoeffs +{ + n ( 1 1 1 ); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights ( 1 1 1 1 ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots ( ); + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/fvSchemes b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..99267208eae1f5130781bee35206d73e203fc64a --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/fvSchemes @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phid,p) Gauss upwind; + div(phiU,p) Gauss linear; + div(phi,h) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(U) Gauss linear; + div((muEff*dev2(grad(U).T()))) Gauss linear; + div(phi,Yi_h) Gauss upwind; +} + +laplacianSchemes +{ + default Gauss linear corrected; + laplacian(muEff,U) Gauss linear corrected; + laplacian(mut,U) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; + laplacian((rho*(1|A(U))),p) Gauss linear corrected; + laplacian(alphaEff,h) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/fvSolution b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..294428ed7bf29edbbb1b08f5ae8ceba909903285 --- /dev/null +++ b/tutorials/lagrangian/reactingParcelFoam/evaporationTest/system/fvSolution @@ -0,0 +1,143 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + rho + { + solver PCG; + preconditioner DIC; + tolerance 1e-05; + relTol 0; + } + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + p + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + G + { + solver PCG; + preconditioner DIC; + tolerance 1e-05; + relTol 0; + } + Yi + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + CO2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + O2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + N2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + CH4 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + H2 + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + H2O + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + CO + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + h + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } +} + +PISO +{ + transonic yes; + nCorrectors 2; + nNonOrthogonalCorrectors 0; + momentumPredictor yes; +} + + +// ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/files b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/files similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/files rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/files diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/options b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/options similarity index 82% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/options rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/options index cffe6f344a148d8b60b35ccb42990542b8c1cfcc..2f17d01ffb408994955aba9bdbc6836635eec207 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/options +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/Make/options @@ -4,9 +4,10 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustion/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ -llagrangian \ @@ -15,7 +16,7 @@ EXE_LIBS = \ -lmeshTools \ -lthermophysicalFunctions \ -lbasicThermophysicalModels \ - -lcombustionThermophysicalModels \ + -lreactionThermophysicalModels \ -lspecie \ -lradiation \ -lcompressibleRASModels \ diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/UEqn.H b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/UEqn.H similarity index 82% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/UEqn.H rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/UEqn.H index 4d58a14da89574c12d4162e343f98eba5cf7085f..5f2e597a152ef5c08f811d1f374326db15a7ed2a 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/UEqn.H +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/UEqn.H @@ -4,8 +4,8 @@ + fvm::div(phi, U) + turbulence->divDevRhoReff(U) == - thermoCloud1.SU1() - + kinematicCloud1.SU1() + thermoCloud1.SU() + + kinematicCloud1.SU() + rho.dimensionedInternalField()*g ); diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createClouds.H b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createClouds.H similarity index 88% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createClouds.H rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createClouds.H index bdf17e19efcdb715b5f7da5c01e96052ae41645f..ff41634a4ef48e45c45841861a35d08dd35a0f9e 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createClouds.H +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createClouds.H @@ -5,7 +5,7 @@ rho, U, g, - thermo() + thermo ); Info<< "Constructing kinematicCloud1" << endl; @@ -14,7 +14,7 @@ "kinematicCloud1", rho, U, - thermo().mu(), + thermo.mu(), g ); diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createFields.H b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createFields.H similarity index 78% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createFields.H rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createFields.H index b07398a0314073ca5d677d4e7fc25362463dc03b..cebd44cfd4041042584f6706484083b3a4dad9b0 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createFields.H +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/createFields.H @@ -1,13 +1,14 @@ Info<< "Reading thermophysical properties\n" << endl; - autoPtr<basicThermo> thermo + autoPtr<basicPsiThermo> pThermo ( - basicThermo::New(mesh) + basicPsiThermo::New(mesh) ); + basicPsiThermo& thermo = pThermo(); - volScalarField& p = thermo->p(); - volScalarField& h = thermo->h(); - const volScalarField& psi = thermo->psi(); + volScalarField& p = thermo.p(); + volScalarField& h = thermo.h(); + const volScalarField& psi = thermo.psi(); volScalarField rho ( @@ -19,7 +20,7 @@ IOobject::NO_READ, IOobject::AUTO_WRITE ), - thermo->rho() + thermo.rho() ); Info<< "\nReading field U\n" << endl; @@ -48,7 +49,7 @@ rho, U, phi, - thermo() + thermo ) ); diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/hEqn.H b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/hEqn.H similarity index 80% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/hEqn.H rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/hEqn.H index 5359c9c2cecae01b52923ff14943cc4a1373d598..2b3b60ce980cd23324343c7647de47caba0658cf 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/hEqn.H +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/hEqn.H @@ -6,12 +6,12 @@ - fvm::laplacian(turbulence->alphaEff(), h) == DpDt - + thermoCloud1.Sh1() + + thermoCloud1.Sh() ); hEqn.relax(); hEqn.solve(); - thermo->correct(); + thermo.correct(); } diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/pEqn.H b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/pEqn.H similarity index 92% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/pEqn.H rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/pEqn.H index b506245034010d76f0ad0fb87dd22c8b559f5597..9443f909a356699185bfbc8497cf46e26fd1ed3b 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/pEqn.H +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/pEqn.H @@ -1,4 +1,4 @@ -rho = thermo->rho(); +rho = thermo.rho(); volScalarField rUA = 1.0/UEqn.A(); U = rUA*UEqn.H(); @@ -8,7 +8,7 @@ if (transonic) surfaceScalarField phid ( "phid", - fvc::interpolate(thermo->psi()) + fvc::interpolate(psi) *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) @@ -35,8 +35,8 @@ if (transonic) else { phi = - fvc::interpolate(rho)* - ( + fvc::interpolate(rho) + *( (fvc::interpolate(U) & mesh.Sf()) + fvc::ddtPhiCorr(rUA, rho, U, phi) ); diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam.C b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam.C similarity index 74% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam.C rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam.C index 1082636303c6891d00c76806b9d085de7b097980..77715fd48c1905eb01642ddefb02aaac1338e0db 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam.C +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam/rhoPisoTwinParcelFoam.C @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "basicThermo.H" +#include "basicPsiThermo.H" #include "turbulenceModel.H" #include "basicThermoCloud.H" @@ -41,62 +41,59 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" -# include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "createFields.H" + #include "createClouds.H" + #include "readPISOControls.H" + #include "initContinuityErrs.H" + #include "readTimeControls.H" + #include "compressibleCourantNo.H" + #include "setInitialDeltaT.H" -# include "createTime.H" -# include "createMesh.H" -# include "readEnvironmentalProperties.H" -# include "createFields.H" -# include "createClouds.H" -# include "readPISOControls.H" -# include "initContinuityErrs.H" -# include "readTimeControls.H" -# include "compressibleCourantNo.H" -# include "setInitialDeltaT.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { -# include "readTimeControls.H" -# include "readPISOControls.H" -# include "compressibleCourantNo.H" -# include "setDeltaT.H" + #include "readTimeControls.H" + #include "readPISOControls.H" + #include "compressibleCourantNo.H" + #include "setDeltaT.H" runTime++; Info<< "Time = " << runTime.timeName() << nl << endl; - Info<< "Evolving thermoCloud1" << endl; thermoCloud1.evolve(); thermoCloud1.info(); - Info<< "Evolving kinematicCloud1" << endl; kinematicCloud1.evolve(); kinematicCloud1.info(); -# include "rhoEqn.H" + #include "rhoEqn.H" // --- PIMPLE loop for (int ocorr=1; ocorr<=nOuterCorr; ocorr++) { -# include "UEqn.H" + #include "UEqn.H" // --- PISO loop for (int corr=1; corr<=nCorr; corr++) { -# include "hEqn.H" -# include "pEqn.H" + #include "hEqn.H" + #include "pEqn.H" } } turbulence->correct(); - rho = thermo->rho(); + rho = thermo.rho(); runTime.write(); diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/G b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/G similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/G rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/G diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/T b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/T similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/T rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/T diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/U b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/U similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/U rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/U diff --git a/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/epsilon b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..9fcf588c0c292537815ea7ef2c72563a85a14851 --- /dev/null +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/epsilon @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 5390.5; + +boundaryField +{ + top + { + type compressible::epsilonWallFunction; + value uniform 5390.5; + } + bottom + { + type compressible::epsilonWallFunction; + value uniform 5390.5; + } + walls + { + type compressible::epsilonWallFunction; + value uniform 5390.5; + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/k b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/k new file mode 100644 index 0000000000000000000000000000000000000000..9abb57fdb013a1d9dd1ac7859f9554dc0c642b71 --- /dev/null +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/k @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 37.5; + +boundaryField +{ + top + { + type compressible::kQRWallFunction; + value uniform 37.5; + } + bottom + { + type compressible::kQRWallFunction; + value uniform 37.5; + } + walls + { + type compressible::kQRWallFunction; + value uniform 37.5; + } + symmetry + { + type symmetryPlane; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/p b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/p similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/p rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/0/p diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/RASProperties b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/RASProperties similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/RASProperties rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/RASProperties diff --git a/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/environmentalProperties b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..a866ff549fd799e63d2d6946a66cf3da14d092bd --- /dev/null +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 -9.81 0 ); + + +// ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Positions b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Positions similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Positions rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Positions diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties similarity index 78% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties index 4a7f8b7b2b5d0f5f7c8e979a07185eb634c9a8c5..93a7d43a9deb93b410aec659c9c4672a2ac54c4f 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/kinematicCloud1Properties @@ -21,20 +21,27 @@ DragModel SphereDrag; DispersionModel StochasticDispersionRAS; -WallInteractionModel StandardWallInteraction; +PatchInteractionModel StandardWallInteraction; -minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; - -rho0 rho0 [ 1 -3 0 0 0 ] 5000; +PostProcessingModel none; coupled true; +cellValueSourceCorrection on; + parcelTypeId 2; +constantProperties +{ + rhoMin rhoMin [ 1 -3 0 0 0 ] 1e-15; + minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; + rho0 rho0 [ 1 -3 0 0 0 ] 5000; +} + interpolationSchemes { rho cell; - U cellPointFace; + U cellPoint; mu cell; } @@ -43,12 +50,19 @@ integrationSchemes U Euler; } +particleForces +{ + gravity on; + virtualMass off; + pressureGradient off; +} + ManualInjectionCoeffs { - parcelBasisType mass; massTotal massTotal [ 1 0 0 0 0 ] 0.0002; + parcelBasisType mass; SOI 0; - positionsFile kinematicCloud1Positions; + positionsFile "kinematicCloud1Positions"; U0 ( 0 0 0 ); parcelPDF { @@ -70,29 +84,10 @@ ConeInjectionCoeffs position ( 0.25 0.25 0.05 ); direction ( 0 -1 0 ); parcelsPerSecond 10000; - volumeFlowRate Constant; - volumeFlowRateCoeffs - { - value 0.01; - } - - Umag Constant; - UmagCoeffs - { - value 50; - } - - thetaInner Constant; - thetaInnerCoeffs - { - value 0; - } - - thetaOuter Constant; - thetaOuterCoeffs - { - value 30; - } + volumeFlowRate Constant 0.01; + Umag Constant 50; + thetaInner Constant 0; + thetaOuter Constant 30; parcelPDF { diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/blockMeshDict diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/boundary b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/boundary similarity index 88% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/boundary rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/boundary index b8848e2d9cd3e1dbe2fa2a9aabe159a7108753f7..b130d7bc0aa5e48e9a785745d71564a71ac9a626 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/boundary +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,6 +10,7 @@ FoamFile version 2.0; format ascii; class polyBoundaryMesh; + location "constant/polyMesh"; object boundary; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Positions b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Positions similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Positions rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Positions diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Properties b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Properties similarity index 73% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Properties rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Properties index fd752a082c9d60ef27277908ec50e7bf425a3970..ea9f237fb590ab5d94a7fecdfbff7d631037b782 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Properties +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermoCloud1Properties @@ -21,33 +21,37 @@ DragModel SphereDrag; DispersionModel StochasticDispersionRAS; -WallInteractionModel StandardWallInteraction; +PatchInteractionModel StandardWallInteraction; HeatTransferModel RanzMarshall; -radiation off; - -minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; - -rho0 rho0 [ 1 -3 0 0 0 ] 2500; - -T0 T0 [ 0 0 0 1 0 ] 300; +PostProcessingModel none; -cp0 cp0 [ 0 2 -2 -1 0 ] 900; - -epsilon0 epsilon0 [ 0 0 0 0 0 ] 1; - -f0 f0 [ 0 0 0 0 0 ] 0.5; +radiation off; coupled true; +cellValueSourceCorrection on; + parcelTypeId 1; +constantProperties +{ + rhoMin rhoMin [ 1 -3 0 0 0 ] 1e-15; + TMin TMin [ 0 0 0 1 0 ] 200; + minParticleMass minParticleMass [ 1 0 0 0 0 ] 1e-15; + rho0 rho0 [ 1 -3 0 0 0 ] 2500; + T0 T0 [ 0 0 0 1 0 ] 300; + cp0 cp0 [ 0 2 -2 -1 0 ] 900; + epsilon0 epsilon0 [ 0 0 0 0 0 ] 1; + f0 f0 [ 0 0 0 0 0 ] 0.5; +} + interpolationSchemes { rho cell; - U cellPointFace; mu cell; + U cellPoint; T cell; Cp cell; } @@ -58,12 +62,19 @@ integrationSchemes T Analytical; } +particleForces +{ + gravity on; + virtualMass off; + pressureGradient off; +} + ManualInjectionCoeffs { massTotal massTotal [ 1 0 0 0 0 ] 0.0001; parcelBasisType mass; SOI 0; - positionsFile thermoCloud1Positions; + positionsFile "thermoCloud1Positions"; U0 ( 0 0 0 ); parcelPDF { diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermophysicalProperties b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermophysicalProperties similarity index 90% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermophysicalProperties rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermophysicalProperties index d02b85fec4397d8da50129dd6d2374b56619abe6..f7638810ff7a4d465637cea0b9f7caca2680d98f 100644 --- a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermophysicalProperties +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/thermophysicalProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; mixture air 1 28.9 1007 0 1.84e-05 0.7; diff --git a/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/turbulenceProperties b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..78f28eca604be4d8fc94d38d23ae0cbb679b18fb --- /dev/null +++ b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/constant/turbulenceProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType RASModel; + + +// ************************************************************************* // diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/controlDict b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/controlDict similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/controlDict rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/controlDict diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/decomposeParDict diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSchemes b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSchemes similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSchemes rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSchemes diff --git a/tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSolution b/tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSolution similarity index 100% rename from tutorials/Lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSolution rename to tutorials/lagrangian/rhoPisoTwinParcelFoam/simplifiedSiwek/system/fvSolution diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/0/pointDisplacement b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/0/pointDisplacement new file mode 100644 index 0000000000000000000000000000000000000000..5ffe633e920154cef1f96201e351f496c7a5d85b --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/0/pointDisplacement @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root "/home/hunt2/mattijs/OpenFOAM/mattijs-1.4/run/testLoop1.4/moveMesh"; + case "cone"; + instance "0"; + local ""; + + class pointVectorField; + object pointMotionU; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 0 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + maxZ + { + type fixedValue; + value uniform (0 0 0); + } + + minZ + { + type surfaceDisplacement; + value uniform (0 0 0); + + // Clip displacement to surface by max deltaT*velocity. + velocity (10 10 10); + + geometry + { + AcrossRiver.stl + { + type triSurfaceMesh; + } + }; + + // Find projection with surface: + // fixedNormal : intersections along prespecified direction + // pointNormal : intersections along current pointNormal of patch + // nearest : nearest point on surface + // Other + projectMode fixedNormal; + + // if fixedNormal : normal + projectDirection (0 0 1); + + //- -1 or component to knock out before doing projection + wedgePlane -1; + + //- Points that should remain fixed + //frozenPointsZone fixedPointsZone; + } + +// minZ +// { +// type surfaceSlipDisplacement; +// geometry +// { +// hellskull.stl +// { +// type triSurfaceMesh; +// } +// }; +// +// followMode fixedNormal; +// +// projectDirection (0 0 1); +// +// //- -1 or component to knock out before doing projection +// wedgePlane -1; +// +// //- Points that should remain fixed +// //frozenPointsZone fixedPointsZone; +// } + + maxX + { + type slip; + } + + minX + { + type slip; + } + + minY + { + type slip; + } + + maxY + { + type slip; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/dynamicMeshDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/dynamicMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..65894a796caaf1962610c6b42de10f9558625237 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/dynamicMeshDict @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object motionProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dynamicFvMesh dynamicMotionSolverFvMesh; + +motionSolverLibs ("libfvMotionSolvers.so"); + +solver displacementSBRStress; //displacementLaplacian; //displacementSBRStress; +diffusivity quadratic quadratic inverseDistance 1(minZ); + +//solver velocityComponentLaplacian z; +//diffusivity uniform; +//diffusivity directional (1 200 0); +// diffusivity motionDirectional (1 1000 0); +// diffusivity file motionDiffusivity; +diffusivity quadratic inverseDistance 1(minZ); +// diffusivity exponential 2000 inverseDistance 1(movingWall); + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/blockMeshDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..9f348cb6e7ca3be15559a5b0b8fc75040342c787 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/blockMeshDict @@ -0,0 +1,82 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.0 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +convertToMeters 1; + +vertices +( + ( 659531 4.7513e+06 1028) + ( 659531 4.7513e+06 2100) + ( 662381 4.7513e+06 2100) + ( 662381 4.7513e+06 1028) + ( 659531 4.75454e+06 1028) + ( 659531 4.75454e+06 2100) + ( 662381 4.75454e+06 2100) + ( 662381 4.75454e+06 1028) +); +blocks +( + hex (0 1 2 3 4 5 6 7) (20 60 60) simpleGrading (10.0 1 1) +); + + +edges +( +); + +patches +( + wall maxX + ( + (3 7 6 2) + ) + wall minZ + ( + (0 4 7 3) + ) + wall maxZ + ( + (2 6 5 1) + ) + wall minX + ( + (1 5 4 0) + ) + wall minY + ( + (0 3 2 1) + ) + wall maxY + ( + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/boundary b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..9afeb87c10f1682e87741c684a769070dc28dddb --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/boundary @@ -0,0 +1,58 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +6 +( + maxX + { + type wall; + nFaces 1200; + startFace 210000; + } + minZ + { + type wall; + nFaces 3600; + startFace 211200; + } + maxZ + { + type wall; + nFaces 3600; + startFace 214800; + } + minX + { + type wall; + nFaces 1200; + startFace 218400; + } + minY + { + type wall; + nFaces 1200; + startFace 219600; + } + maxY + { + type wall; + nFaces 1200; + startFace 220800; + } +) + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/transportProperties b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..7aed29e935555a12f3b45025d985ca1888dea38a --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/transportProperties @@ -0,0 +1,28 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +nu nu [0 2 -1 0 0 0 0] 0.01; + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/ACROSSCYN.JPG b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/ACROSSCYN.JPG new file mode 100644 index 0000000000000000000000000000000000000000..259c021d0b422dd5846c9d8c365afe4ca74682b9 Binary files /dev/null and b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/ACROSSCYN.JPG differ diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossCyn.XYZ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossCyn.XYZ new file mode 100644 index 0000000000000000000000000000000000000000..9a23da569b73ee8ecccc63d23ff7ace9a1939c84 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossCyn.XYZ @@ -0,0 +1,10573 @@ + 659501 4751301 955 + 659501 4751331 957 + 659501 4751361 960 + 659501 4751391 963 + 659501 4751421 968 + 659501 4751451 973 + 659501 4751481 977 + 659501 4751511 982 + 659501 4751541 987 + 659501 4751571 991 + 659501 4751601 992 + 659501 4751631 992 + 659501 4751661 993 + 659501 4751691 993 + 659501 4751721 993 + 659501 4751751 993 + 659501 4751781 993 + 659501 4751811 992 + 659501 4751841 991 + 659501 4751871 989 + 659501 4751901 987 + 659501 4751931 985 + 659501 4751961 984 + 659501 4751991 981 + 659501 4752021 979 + 659501 4752051 978 + 659501 4752081 976 + 659501 4752111 964 + 659501 4752141 947 + 659501 4752171 928 + 659501 4752201 909 + 659501 4752231 896 + 659501 4752261 889 + 659501 4752291 883 + 659501 4752321 878 + 659501 4752351 875 + 659501 4752381 872 + 659501 4752411 870 + 659501 4752441 869 + 659501 4752471 868 + 659501 4752501 867 + 659501 4752531 866 + 659501 4752561 866 + 659501 4752591 865 + 659501 4752621 864 + 659501 4752651 863 + 659501 4752681 863 + 659501 4752711 862 + 659501 4752741 862 + 659501 4752771 862 + 659501 4752801 861 + 659501 4752831 860 + 659501 4752861 858 + 659501 4752891 856 + 659501 4752921 855 + 659501 4752951 854 + 659501 4752981 854 + 659501 4753011 853 + 659501 4753041 851 + 659501 4753071 851 + 659501 4753101 850 + 659501 4753131 850 + 659501 4753161 849 + 659501 4753191 847 + 659501 4753221 842 + 659501 4753251 825 + 659501 4753281 809 + 659501 4753311 809 + 659501 4753341 809 + 659501 4753371 809 + 659501 4753401 809 + 659501 4753431 809 + 659501 4753461 809 + 659501 4753491 827 + 659501 4753521 845 + 659501 4753551 847 + 659501 4753581 848 + 659501 4753611 848 + 659501 4753641 848 + 659501 4753671 849 + 659501 4753701 850 + 659501 4753731 850 + 659501 4753761 851 + 659501 4753791 852 + 659501 4753821 853 + 659501 4753851 863 + 659501 4753881 875 + 659501 4753911 878 + 659501 4753941 879 + 659501 4753971 881 + 659501 4754001 882 + 659501 4754031 887 + 659501 4754061 898 + 659501 4754091 917 + 659501 4754121 938 + 659501 4754151 953 + 659501 4754181 953 + 659501 4754211 953 + 659501 4754241 953 + 659501 4754271 953 + 659501 4754301 953 + 659501 4754331 955 + 659501 4754361 954 + 659501 4754391 954 + 659501 4754421 953 + 659501 4754451 953 + 659501 4754481 953 + 659501 4754511 953 + 659501 4754541 953 + 659531 4751301 955 + 659531 4751331 958 + 659531 4751361 961 + 659531 4751391 966 + 659531 4751421 969 + 659531 4751451 973 + 659531 4751481 976 + 659531 4751511 981 + 659531 4751541 986 + 659531 4751571 991 + 659531 4751601 992 + 659531 4751631 992 + 659531 4751661 994 + 659531 4751691 994 + 659531 4751721 994 + 659531 4751751 994 + 659531 4751781 994 + 659531 4751811 993 + 659531 4751841 991 + 659531 4751871 990 + 659531 4751901 987 + 659531 4751931 986 + 659531 4751961 984 + 659531 4751991 982 + 659531 4752021 981 + 659531 4752051 979 + 659531 4752081 976 + 659531 4752111 962 + 659531 4752141 944 + 659531 4752171 928 + 659531 4752201 911 + 659531 4752231 897 + 659531 4752261 888 + 659531 4752291 882 + 659531 4752321 877 + 659531 4752351 875 + 659531 4752381 872 + 659531 4752411 870 + 659531 4752441 869 + 659531 4752471 868 + 659531 4752501 867 + 659531 4752531 866 + 659531 4752561 865 + 659531 4752591 864 + 659531 4752621 863 + 659531 4752651 863 + 659531 4752681 862 + 659531 4752711 861 + 659531 4752741 861 + 659531 4752771 861 + 659531 4752801 860 + 659531 4752831 859 + 659531 4752861 858 + 659531 4752891 856 + 659531 4752921 855 + 659531 4752951 854 + 659531 4752981 853 + 659531 4753011 852 + 659531 4753041 852 + 659531 4753071 852 + 659531 4753101 851 + 659531 4753131 850 + 659531 4753161 849 + 659531 4753191 847 + 659531 4753221 835 + 659531 4753251 809 + 659531 4753281 809 + 659531 4753311 809 + 659531 4753341 809 + 659531 4753371 809 + 659531 4753401 809 + 659531 4753431 809 + 659531 4753461 809 + 659531 4753491 833 + 659531 4753521 850 + 659531 4753551 850 + 659531 4753581 849 + 659531 4753611 849 + 659531 4753641 848 + 659531 4753671 849 + 659531 4753701 849 + 659531 4753731 850 + 659531 4753761 851 + 659531 4753791 852 + 659531 4753821 853 + 659531 4753851 865 + 659531 4753881 878 + 659531 4753911 883 + 659531 4753941 881 + 659531 4753971 883 + 659531 4754001 884 + 659531 4754031 890 + 659531 4754061 896 + 659531 4754091 913 + 659531 4754121 934 + 659531 4754151 953 + 659531 4754181 953 + 659531 4754211 953 + 659531 4754241 953 + 659531 4754271 954 + 659531 4754301 955 + 659531 4754331 953 + 659531 4754361 954 + 659531 4754391 954 + 659531 4754421 954 + 659531 4754451 953 + 659531 4754481 953 + 659531 4754511 953 + 659531 4754541 953 + 659561 4751301 956 + 659561 4751331 959 + 659561 4751361 962 + 659561 4751391 967 + 659561 4751421 970 + 659561 4751451 973 + 659561 4751481 976 + 659561 4751511 981 + 659561 4751541 986 + 659561 4751571 991 + 659561 4751601 992 + 659561 4751631 993 + 659561 4751661 994 + 659561 4751691 995 + 659561 4751721 995 + 659561 4751751 996 + 659561 4751781 995 + 659561 4751811 994 + 659561 4751841 993 + 659561 4751871 991 + 659561 4751901 991 + 659561 4751931 989 + 659561 4751961 986 + 659561 4751991 984 + 659561 4752021 982 + 659561 4752051 979 + 659561 4752081 974 + 659561 4752111 959 + 659561 4752141 942 + 659561 4752171 926 + 659561 4752201 911 + 659561 4752231 897 + 659561 4752261 887 + 659561 4752291 882 + 659561 4752321 877 + 659561 4752351 875 + 659561 4752381 872 + 659561 4752411 870 + 659561 4752441 868 + 659561 4752471 868 + 659561 4752501 867 + 659561 4752531 866 + 659561 4752561 865 + 659561 4752591 864 + 659561 4752621 863 + 659561 4752651 862 + 659561 4752681 862 + 659561 4752711 861 + 659561 4752741 860 + 659561 4752771 860 + 659561 4752801 859 + 659561 4752831 859 + 659561 4752861 857 + 659561 4752891 856 + 659561 4752921 855 + 659561 4752951 854 + 659561 4752981 853 + 659561 4753011 852 + 659561 4753041 852 + 659561 4753071 853 + 659561 4753101 853 + 659561 4753131 852 + 659561 4753161 850 + 659561 4753191 847 + 659561 4753221 831 + 659561 4753251 809 + 659561 4753281 809 + 659561 4753311 809 + 659561 4753341 809 + 659561 4753371 809 + 659561 4753401 809 + 659561 4753431 809 + 659561 4753461 825 + 659561 4753491 841 + 659561 4753521 855 + 659561 4753551 852 + 659561 4753581 848 + 659561 4753611 848 + 659561 4753641 848 + 659561 4753671 848 + 659561 4753701 849 + 659561 4753731 850 + 659561 4753761 851 + 659561 4753791 852 + 659561 4753821 854 + 659561 4753851 865 + 659561 4753881 878 + 659561 4753911 884 + 659561 4753941 881 + 659561 4753971 885 + 659561 4754001 888 + 659561 4754031 889 + 659561 4754061 894 + 659561 4754091 911 + 659561 4754121 931 + 659561 4754151 953 + 659561 4754181 953 + 659561 4754211 953 + 659561 4754241 953 + 659561 4754271 954 + 659561 4754301 955 + 659561 4754331 954 + 659561 4754361 955 + 659561 4754391 954 + 659561 4754421 954 + 659561 4754451 953 + 659561 4754481 953 + 659561 4754511 953 + 659561 4754541 953 + 659591 4751301 958 + 659591 4751331 959 + 659591 4751361 963 + 659591 4751391 967 + 659591 4751421 970 + 659591 4751451 974 + 659591 4751481 977 + 659591 4751511 982 + 659591 4751541 987 + 659591 4751571 991 + 659591 4751601 993 + 659591 4751631 995 + 659591 4751661 996 + 659591 4751691 997 + 659591 4751721 997 + 659591 4751751 997 + 659591 4751781 997 + 659591 4751811 996 + 659591 4751841 994 + 659591 4751871 993 + 659591 4751901 992 + 659591 4751931 990 + 659591 4751961 988 + 659591 4751991 986 + 659591 4752021 984 + 659591 4752051 980 + 659591 4752081 970 + 659591 4752111 957 + 659591 4752141 941 + 659591 4752171 925 + 659591 4752201 909 + 659591 4752231 893 + 659591 4752261 887 + 659591 4752291 882 + 659591 4752321 878 + 659591 4752351 875 + 659591 4752381 872 + 659591 4752411 869 + 659591 4752441 868 + 659591 4752471 868 + 659591 4752501 867 + 659591 4752531 866 + 659591 4752561 865 + 659591 4752591 864 + 659591 4752621 863 + 659591 4752651 862 + 659591 4752681 861 + 659591 4752711 861 + 659591 4752741 860 + 659591 4752771 859 + 659591 4752801 859 + 659591 4752831 857 + 659591 4752861 856 + 659591 4752891 855 + 659591 4752921 854 + 659591 4752951 853 + 659591 4752981 852 + 659591 4753011 852 + 659591 4753041 853 + 659591 4753071 854 + 659591 4753101 854 + 659591 4753131 854 + 659591 4753161 853 + 659591 4753191 844 + 659591 4753221 826 + 659591 4753251 809 + 659591 4753281 809 + 659591 4753311 809 + 659591 4753341 809 + 659591 4753371 809 + 659591 4753401 809 + 659591 4753431 815 + 659591 4753461 832 + 659591 4753491 848 + 659591 4753521 855 + 659591 4753551 852 + 659591 4753581 848 + 659591 4753611 848 + 659591 4753641 848 + 659591 4753671 848 + 659591 4753701 849 + 659591 4753731 850 + 659591 4753761 851 + 659591 4753791 852 + 659591 4753821 854 + 659591 4753851 864 + 659591 4753881 876 + 659591 4753911 879 + 659591 4753941 881 + 659591 4753971 885 + 659591 4754001 891 + 659591 4754031 892 + 659591 4754061 891 + 659591 4754091 909 + 659591 4754121 930 + 659591 4754151 953 + 659591 4754181 953 + 659591 4754211 953 + 659591 4754241 953 + 659591 4754271 954 + 659591 4754301 955 + 659591 4754331 955 + 659591 4754361 954 + 659591 4754391 954 + 659591 4754421 954 + 659591 4754451 954 + 659591 4754481 954 + 659591 4754511 953 + 659591 4754541 953 + 659621 4751301 961 + 659621 4751331 962 + 659621 4751361 965 + 659621 4751391 968 + 659621 4751421 971 + 659621 4751451 974 + 659621 4751481 978 + 659621 4751511 982 + 659621 4751541 987 + 659621 4751571 991 + 659621 4751601 994 + 659621 4751631 997 + 659621 4751661 998 + 659621 4751691 998 + 659621 4751721 997 + 659621 4751751 998 + 659621 4751781 998 + 659621 4751811 997 + 659621 4751841 995 + 659621 4751871 994 + 659621 4751901 993 + 659621 4751931 991 + 659621 4751961 989 + 659621 4751991 986 + 659621 4752021 984 + 659621 4752051 978 + 659621 4752081 966 + 659621 4752111 950 + 659621 4752141 937 + 659621 4752171 915 + 659621 4752201 906 + 659621 4752231 895 + 659621 4752261 888 + 659621 4752291 882 + 659621 4752321 878 + 659621 4752351 874 + 659621 4752381 871 + 659621 4752411 869 + 659621 4752441 868 + 659621 4752471 867 + 659621 4752501 867 + 659621 4752531 866 + 659621 4752561 865 + 659621 4752591 863 + 659621 4752621 862 + 659621 4752651 861 + 659621 4752681 861 + 659621 4752711 860 + 659621 4752741 860 + 659621 4752771 859 + 659621 4752801 858 + 659621 4752831 857 + 659621 4752861 856 + 659621 4752891 855 + 659621 4752921 854 + 659621 4752951 853 + 659621 4752981 852 + 659621 4753011 853 + 659621 4753041 854 + 659621 4753071 854 + 659621 4753101 855 + 659621 4753131 854 + 659621 4753161 852 + 659621 4753191 836 + 659621 4753221 809 + 659621 4753251 809 + 659621 4753281 809 + 659621 4753311 809 + 659621 4753341 809 + 659621 4753371 809 + 659621 4753401 809 + 659621 4753431 822 + 659621 4753461 839 + 659621 4753491 853 + 659621 4753521 855 + 659621 4753551 852 + 659621 4753581 848 + 659621 4753611 848 + 659621 4753641 848 + 659621 4753671 848 + 659621 4753701 849 + 659621 4753731 850 + 659621 4753761 851 + 659621 4753791 852 + 659621 4753821 853 + 659621 4753851 862 + 659621 4753881 872 + 659621 4753911 878 + 659621 4753941 881 + 659621 4753971 884 + 659621 4754001 891 + 659621 4754031 894 + 659621 4754061 891 + 659621 4754091 908 + 659621 4754121 930 + 659621 4754151 953 + 659621 4754181 953 + 659621 4754211 953 + 659621 4754241 953 + 659621 4754271 953 + 659621 4754301 954 + 659621 4754331 955 + 659621 4754361 954 + 659621 4754391 954 + 659621 4754421 954 + 659621 4754451 954 + 659621 4754481 954 + 659621 4754511 953 + 659621 4754541 953 + 659651 4751301 961 + 659651 4751331 963 + 659651 4751361 967 + 659651 4751391 969 + 659651 4751421 972 + 659651 4751451 975 + 659651 4751481 978 + 659651 4751511 982 + 659651 4751541 987 + 659651 4751571 991 + 659651 4751601 994 + 659651 4751631 998 + 659651 4751661 999 + 659651 4751691 999 + 659651 4751721 998 + 659651 4751751 999 + 659651 4751781 999 + 659651 4751811 998 + 659651 4751841 996 + 659651 4751871 995 + 659651 4751901 993 + 659651 4751931 992 + 659651 4751961 989 + 659651 4751991 986 + 659651 4752021 981 + 659651 4752051 971 + 659651 4752081 957 + 659651 4752111 945 + 659651 4752141 931 + 659651 4752171 914 + 659651 4752201 900 + 659651 4752231 894 + 659651 4752261 888 + 659651 4752291 882 + 659651 4752321 878 + 659651 4752351 874 + 659651 4752381 871 + 659651 4752411 869 + 659651 4752441 868 + 659651 4752471 867 + 659651 4752501 866 + 659651 4752531 866 + 659651 4752561 865 + 659651 4752591 864 + 659651 4752621 862 + 659651 4752651 861 + 659651 4752681 860 + 659651 4752711 860 + 659651 4752741 859 + 659651 4752771 859 + 659651 4752801 858 + 659651 4752831 857 + 659651 4752861 856 + 659651 4752891 855 + 659651 4752921 854 + 659651 4752951 853 + 659651 4752981 853 + 659651 4753011 853 + 659651 4753041 854 + 659651 4753071 854 + 659651 4753101 854 + 659651 4753131 854 + 659651 4753161 843 + 659651 4753191 827 + 659651 4753221 809 + 659651 4753251 809 + 659651 4753281 809 + 659651 4753311 809 + 659651 4753341 809 + 659651 4753371 809 + 659651 4753401 816 + 659651 4753431 831 + 659651 4753461 848 + 659651 4753491 857 + 659651 4753521 855 + 659651 4753551 852 + 659651 4753581 848 + 659651 4753611 848 + 659651 4753641 848 + 659651 4753671 849 + 659651 4753701 850 + 659651 4753731 850 + 659651 4753761 850 + 659651 4753791 851 + 659651 4753821 852 + 659651 4753851 857 + 659651 4753881 867 + 659651 4753911 876 + 659651 4753941 880 + 659651 4753971 885 + 659651 4754001 892 + 659651 4754031 894 + 659651 4754061 897 + 659651 4754091 907 + 659651 4754121 933 + 659651 4754151 953 + 659651 4754181 953 + 659651 4754211 953 + 659651 4754241 953 + 659651 4754271 953 + 659651 4754301 954 + 659651 4754331 955 + 659651 4754361 955 + 659651 4754391 954 + 659651 4754421 954 + 659651 4754451 954 + 659651 4754481 954 + 659651 4754511 954 + 659651 4754541 954 + 659681 4751301 960 + 659681 4751331 963 + 659681 4751361 968 + 659681 4751391 970 + 659681 4751421 972 + 659681 4751451 975 + 659681 4751481 978 + 659681 4751511 982 + 659681 4751541 987 + 659681 4751571 991 + 659681 4751601 995 + 659681 4751631 998 + 659681 4751661 1000 + 659681 4751691 1000 + 659681 4751721 999 + 659681 4751751 1000 + 659681 4751781 999 + 659681 4751811 998 + 659681 4751841 997 + 659681 4751871 995 + 659681 4751901 994 + 659681 4751931 992 + 659681 4751961 989 + 659681 4751991 986 + 659681 4752021 983 + 659681 4752051 965 + 659681 4752081 945 + 659681 4752111 934 + 659681 4752141 918 + 659681 4752171 910 + 659681 4752201 900 + 659681 4752231 892 + 659681 4752261 887 + 659681 4752291 882 + 659681 4752321 878 + 659681 4752351 874 + 659681 4752381 871 + 659681 4752411 869 + 659681 4752441 868 + 659681 4752471 867 + 659681 4752501 867 + 659681 4752531 866 + 659681 4752561 865 + 659681 4752591 863 + 659681 4752621 862 + 659681 4752651 861 + 659681 4752681 861 + 659681 4752711 860 + 659681 4752741 859 + 659681 4752771 859 + 659681 4752801 858 + 659681 4752831 857 + 659681 4752861 856 + 659681 4752891 855 + 659681 4752921 854 + 659681 4752951 853 + 659681 4752981 853 + 659681 4753011 853 + 659681 4753041 854 + 659681 4753071 854 + 659681 4753101 854 + 659681 4753131 847 + 659681 4753161 831 + 659681 4753191 809 + 659681 4753221 809 + 659681 4753251 809 + 659681 4753281 809 + 659681 4753311 809 + 659681 4753341 809 + 659681 4753371 809 + 659681 4753401 822 + 659681 4753431 837 + 659681 4753461 852 + 659681 4753491 856 + 659681 4753521 855 + 659681 4753551 851 + 659681 4753581 848 + 659681 4753611 848 + 659681 4753641 850 + 659681 4753671 852 + 659681 4753701 851 + 659681 4753731 851 + 659681 4753761 850 + 659681 4753791 851 + 659681 4753821 852 + 659681 4753851 853 + 659681 4753881 863 + 659681 4753911 872 + 659681 4753941 879 + 659681 4753971 885 + 659681 4754001 899 + 659681 4754031 895 + 659681 4754061 898 + 659681 4754091 907 + 659681 4754121 936 + 659681 4754151 953 + 659681 4754181 953 + 659681 4754211 953 + 659681 4754241 954 + 659681 4754271 953 + 659681 4754301 954 + 659681 4754331 955 + 659681 4754361 955 + 659681 4754391 954 + 659681 4754421 955 + 659681 4754451 954 + 659681 4754481 954 + 659681 4754511 954 + 659681 4754541 954 + 659711 4751301 959 + 659711 4751331 963 + 659711 4751361 968 + 659711 4751391 970 + 659711 4751421 972 + 659711 4751451 975 + 659711 4751481 978 + 659711 4751511 982 + 659711 4751541 986 + 659711 4751571 991 + 659711 4751601 994 + 659711 4751631 998 + 659711 4751661 1000 + 659711 4751691 1001 + 659711 4751721 1001 + 659711 4751751 1000 + 659711 4751781 999 + 659711 4751811 998 + 659711 4751841 997 + 659711 4751871 995 + 659711 4751901 994 + 659711 4751931 991 + 659711 4751961 989 + 659711 4751991 987 + 659711 4752021 980 + 659711 4752051 959 + 659711 4752081 939 + 659711 4752111 923 + 659711 4752141 911 + 659711 4752171 903 + 659711 4752201 896 + 659711 4752231 891 + 659711 4752261 887 + 659711 4752291 883 + 659711 4752321 877 + 659711 4752351 874 + 659711 4752381 871 + 659711 4752411 869 + 659711 4752441 868 + 659711 4752471 867 + 659711 4752501 867 + 659711 4752531 866 + 659711 4752561 865 + 659711 4752591 864 + 659711 4752621 863 + 659711 4752651 862 + 659711 4752681 861 + 659711 4752711 860 + 659711 4752741 859 + 659711 4752771 858 + 659711 4752801 858 + 659711 4752831 857 + 659711 4752861 856 + 659711 4752891 855 + 659711 4752921 854 + 659711 4752951 853 + 659711 4752981 854 + 659711 4753011 853 + 659711 4753041 854 + 659711 4753071 854 + 659711 4753101 849 + 659711 4753131 833 + 659711 4753161 818 + 659711 4753191 809 + 659711 4753221 809 + 659711 4753251 809 + 659711 4753281 809 + 659711 4753311 809 + 659711 4753341 809 + 659711 4753371 809 + 659711 4753401 828 + 659711 4753431 843 + 659711 4753461 853 + 659711 4753491 857 + 659711 4753521 855 + 659711 4753551 851 + 659711 4753581 848 + 659711 4753611 850 + 659711 4753641 854 + 659711 4753671 853 + 659711 4753701 853 + 659711 4753731 852 + 659711 4753761 852 + 659711 4753791 852 + 659711 4753821 852 + 659711 4753851 853 + 659711 4753881 856 + 659711 4753911 868 + 659711 4753941 876 + 659711 4753971 881 + 659711 4754001 893 + 659711 4754031 893 + 659711 4754061 897 + 659711 4754091 907 + 659711 4754121 937 + 659711 4754151 953 + 659711 4754181 953 + 659711 4754211 953 + 659711 4754241 953 + 659711 4754271 954 + 659711 4754301 954 + 659711 4754331 955 + 659711 4754361 955 + 659711 4754391 955 + 659711 4754421 954 + 659711 4754451 954 + 659711 4754481 954 + 659711 4754511 954 + 659711 4754541 954 + 659741 4751301 961 + 659741 4751331 964 + 659741 4751361 968 + 659741 4751391 970 + 659741 4751421 972 + 659741 4751451 974 + 659741 4751481 977 + 659741 4751511 981 + 659741 4751541 985 + 659741 4751571 989 + 659741 4751601 993 + 659741 4751631 998 + 659741 4751661 1000 + 659741 4751691 1001 + 659741 4751721 1001 + 659741 4751751 1001 + 659741 4751781 1000 + 659741 4751811 999 + 659741 4751841 997 + 659741 4751871 996 + 659741 4751901 994 + 659741 4751931 993 + 659741 4751961 991 + 659741 4751991 987 + 659741 4752021 978 + 659741 4752051 958 + 659741 4752081 937 + 659741 4752111 915 + 659741 4752141 906 + 659741 4752171 899 + 659741 4752201 892 + 659741 4752231 889 + 659741 4752261 886 + 659741 4752291 883 + 659741 4752321 877 + 659741 4752351 874 + 659741 4752381 872 + 659741 4752411 870 + 659741 4752441 869 + 659741 4752471 868 + 659741 4752501 867 + 659741 4752531 866 + 659741 4752561 865 + 659741 4752591 864 + 659741 4752621 863 + 659741 4752651 862 + 659741 4752681 861 + 659741 4752711 860 + 659741 4752741 859 + 659741 4752771 858 + 659741 4752801 858 + 659741 4752831 857 + 659741 4752861 856 + 659741 4752891 856 + 659741 4752921 855 + 659741 4752951 855 + 659741 4752981 855 + 659741 4753011 854 + 659741 4753041 855 + 659741 4753071 854 + 659741 4753101 842 + 659741 4753131 822 + 659741 4753161 809 + 659741 4753191 809 + 659741 4753221 809 + 659741 4753251 809 + 659741 4753281 809 + 659741 4753311 809 + 659741 4753341 809 + 659741 4753371 817 + 659741 4753401 832 + 659741 4753431 846 + 659741 4753461 854 + 659741 4753491 855 + 659741 4753521 855 + 659741 4753551 852 + 659741 4753581 848 + 659741 4753611 852 + 659741 4753641 854 + 659741 4753671 854 + 659741 4753701 853 + 659741 4753731 853 + 659741 4753761 852 + 659741 4753791 852 + 659741 4753821 853 + 659741 4753851 853 + 659741 4753881 853 + 659741 4753911 861 + 659741 4753941 869 + 659741 4753971 875 + 659741 4754001 879 + 659741 4754031 885 + 659741 4754061 892 + 659741 4754091 906 + 659741 4754121 937 + 659741 4754151 953 + 659741 4754181 953 + 659741 4754211 953 + 659741 4754241 953 + 659741 4754271 954 + 659741 4754301 954 + 659741 4754331 955 + 659741 4754361 955 + 659741 4754391 955 + 659741 4754421 954 + 659741 4754451 954 + 659741 4754481 954 + 659741 4754511 954 + 659741 4754541 954 + 659771 4751301 968 + 659771 4751331 966 + 659771 4751361 969 + 659771 4751391 970 + 659771 4751421 972 + 659771 4751451 974 + 659771 4751481 977 + 659771 4751511 980 + 659771 4751541 984 + 659771 4751571 988 + 659771 4751601 993 + 659771 4751631 998 + 659771 4751661 1000 + 659771 4751691 1002 + 659771 4751721 1002 + 659771 4751751 1001 + 659771 4751781 1000 + 659771 4751811 999 + 659771 4751841 998 + 659771 4751871 997 + 659771 4751901 995 + 659771 4751931 993 + 659771 4751961 991 + 659771 4751991 986 + 659771 4752021 975 + 659771 4752051 953 + 659771 4752081 933 + 659771 4752111 915 + 659771 4752141 904 + 659771 4752171 897 + 659771 4752201 891 + 659771 4752231 888 + 659771 4752261 885 + 659771 4752291 882 + 659771 4752321 878 + 659771 4752351 875 + 659771 4752381 873 + 659771 4752411 871 + 659771 4752441 869 + 659771 4752471 868 + 659771 4752501 867 + 659771 4752531 866 + 659771 4752561 865 + 659771 4752591 864 + 659771 4752621 863 + 659771 4752651 862 + 659771 4752681 861 + 659771 4752711 860 + 659771 4752741 859 + 659771 4752771 857 + 659771 4752801 857 + 659771 4752831 857 + 659771 4752861 857 + 659771 4752891 856 + 659771 4752921 856 + 659771 4752951 856 + 659771 4752981 855 + 659771 4753011 855 + 659771 4753041 854 + 659771 4753071 852 + 659771 4753101 839 + 659771 4753131 821 + 659771 4753161 809 + 659771 4753191 809 + 659771 4753221 809 + 659771 4753251 809 + 659771 4753281 809 + 659771 4753311 809 + 659771 4753341 809 + 659771 4753371 819 + 659771 4753401 834 + 659771 4753431 849 + 659771 4753461 856 + 659771 4753491 854 + 659771 4753521 854 + 659771 4753551 853 + 659771 4753581 852 + 659771 4753611 853 + 659771 4753641 854 + 659771 4753671 854 + 659771 4753701 854 + 659771 4753731 853 + 659771 4753761 853 + 659771 4753791 853 + 659771 4753821 853 + 659771 4753851 854 + 659771 4753881 854 + 659771 4753911 854 + 659771 4753941 859 + 659771 4753971 867 + 659771 4754001 873 + 659771 4754031 880 + 659771 4754061 890 + 659771 4754091 905 + 659771 4754121 928 + 659771 4754151 953 + 659771 4754181 953 + 659771 4754211 953 + 659771 4754241 954 + 659771 4754271 954 + 659771 4754301 955 + 659771 4754331 955 + 659771 4754361 955 + 659771 4754391 955 + 659771 4754421 955 + 659771 4754451 954 + 659771 4754481 954 + 659771 4754511 954 + 659771 4754541 954 + 659801 4751301 968 + 659801 4751331 967 + 659801 4751361 968 + 659801 4751391 970 + 659801 4751421 973 + 659801 4751451 975 + 659801 4751481 978 + 659801 4751511 981 + 659801 4751541 984 + 659801 4751571 989 + 659801 4751601 994 + 659801 4751631 998 + 659801 4751661 1000 + 659801 4751691 1002 + 659801 4751721 1002 + 659801 4751751 1002 + 659801 4751781 1001 + 659801 4751811 1000 + 659801 4751841 999 + 659801 4751871 997 + 659801 4751901 996 + 659801 4751931 994 + 659801 4751961 991 + 659801 4751991 985 + 659801 4752021 970 + 659801 4752051 947 + 659801 4752081 927 + 659801 4752111 909 + 659801 4752141 899 + 659801 4752171 895 + 659801 4752201 890 + 659801 4752231 887 + 659801 4752261 885 + 659801 4752291 882 + 659801 4752321 878 + 659801 4752351 876 + 659801 4752381 873 + 659801 4752411 871 + 659801 4752441 870 + 659801 4752471 868 + 659801 4752501 867 + 659801 4752531 866 + 659801 4752561 865 + 659801 4752591 864 + 659801 4752621 863 + 659801 4752651 862 + 659801 4752681 861 + 659801 4752711 860 + 659801 4752741 858 + 659801 4752771 856 + 659801 4752801 857 + 659801 4752831 856 + 659801 4752861 856 + 659801 4752891 856 + 659801 4752921 855 + 659801 4752951 855 + 659801 4752981 855 + 659801 4753011 854 + 659801 4753041 853 + 659801 4753071 847 + 659801 4753101 839 + 659801 4753131 820 + 659801 4753161 809 + 659801 4753191 809 + 659801 4753221 809 + 659801 4753251 809 + 659801 4753281 809 + 659801 4753311 809 + 659801 4753341 809 + 659801 4753371 822 + 659801 4753401 837 + 659801 4753431 852 + 659801 4753461 854 + 659801 4753491 854 + 659801 4753521 854 + 659801 4753551 854 + 659801 4753581 854 + 659801 4753611 854 + 659801 4753641 854 + 659801 4753671 855 + 659801 4753701 854 + 659801 4753731 854 + 659801 4753761 853 + 659801 4753791 854 + 659801 4753821 854 + 659801 4753851 854 + 659801 4753881 854 + 659801 4753911 854 + 659801 4753941 854 + 659801 4753971 860 + 659801 4754001 868 + 659801 4754031 878 + 659801 4754061 892 + 659801 4754091 902 + 659801 4754121 928 + 659801 4754151 953 + 659801 4754181 953 + 659801 4754211 953 + 659801 4754241 953 + 659801 4754271 954 + 659801 4754301 955 + 659801 4754331 955 + 659801 4754361 955 + 659801 4754391 955 + 659801 4754421 955 + 659801 4754451 954 + 659801 4754481 955 + 659801 4754511 954 + 659801 4754541 955 + 659831 4751301 969 + 659831 4751331 968 + 659831 4751361 967 + 659831 4751391 970 + 659831 4751421 973 + 659831 4751451 976 + 659831 4751481 979 + 659831 4751511 982 + 659831 4751541 986 + 659831 4751571 990 + 659831 4751601 995 + 659831 4751631 999 + 659831 4751661 1001 + 659831 4751691 1002 + 659831 4751721 1002 + 659831 4751751 1002 + 659831 4751781 1001 + 659831 4751811 1001 + 659831 4751841 999 + 659831 4751871 998 + 659831 4751901 998 + 659831 4751931 996 + 659831 4751961 991 + 659831 4751991 982 + 659831 4752021 966 + 659831 4752051 942 + 659831 4752081 921 + 659831 4752111 909 + 659831 4752141 900 + 659831 4752171 894 + 659831 4752201 890 + 659831 4752231 886 + 659831 4752261 883 + 659831 4752291 880 + 659831 4752321 878 + 659831 4752351 875 + 659831 4752381 873 + 659831 4752411 871 + 659831 4752441 870 + 659831 4752471 868 + 659831 4752501 867 + 659831 4752531 866 + 659831 4752561 865 + 659831 4752591 864 + 659831 4752621 863 + 659831 4752651 862 + 659831 4752681 861 + 659831 4752711 859 + 659831 4752741 856 + 659831 4752771 854 + 659831 4752801 855 + 659831 4752831 855 + 659831 4752861 855 + 659831 4752891 855 + 659831 4752921 855 + 659831 4752951 854 + 659831 4752981 854 + 659831 4753011 850 + 659831 4753041 840 + 659831 4753071 833 + 659831 4753101 829 + 659831 4753131 820 + 659831 4753161 809 + 659831 4753191 809 + 659831 4753221 809 + 659831 4753251 809 + 659831 4753281 809 + 659831 4753311 809 + 659831 4753341 809 + 659831 4753371 827 + 659831 4753401 838 + 659831 4753431 853 + 659831 4753461 854 + 659831 4753491 854 + 659831 4753521 854 + 659831 4753551 854 + 659831 4753581 854 + 659831 4753611 855 + 659831 4753641 855 + 659831 4753671 855 + 659831 4753701 855 + 659831 4753731 854 + 659831 4753761 854 + 659831 4753791 854 + 659831 4753821 854 + 659831 4753851 855 + 659831 4753881 855 + 659831 4753911 854 + 659831 4753941 854 + 659831 4753971 854 + 659831 4754001 861 + 659831 4754031 872 + 659831 4754061 886 + 659831 4754091 898 + 659831 4754121 923 + 659831 4754151 953 + 659831 4754181 953 + 659831 4754211 953 + 659831 4754241 953 + 659831 4754271 954 + 659831 4754301 954 + 659831 4754331 955 + 659831 4754361 955 + 659831 4754391 955 + 659831 4754421 955 + 659831 4754451 955 + 659831 4754481 954 + 659831 4754511 955 + 659831 4754541 955 + 659861 4751301 969 + 659861 4751331 968 + 659861 4751361 967 + 659861 4751391 969 + 659861 4751421 974 + 659861 4751451 977 + 659861 4751481 980 + 659861 4751511 983 + 659861 4751541 988 + 659861 4751571 992 + 659861 4751601 997 + 659861 4751631 999 + 659861 4751661 1001 + 659861 4751691 1002 + 659861 4751721 1003 + 659861 4751751 1003 + 659861 4751781 1002 + 659861 4751811 1002 + 659861 4751841 1001 + 659861 4751871 1000 + 659861 4751901 999 + 659861 4751931 997 + 659861 4751961 988 + 659861 4751991 975 + 659861 4752021 954 + 659861 4752051 934 + 659861 4752081 916 + 659861 4752111 906 + 659861 4752141 899 + 659861 4752171 891 + 659861 4752201 888 + 659861 4752231 885 + 659861 4752261 881 + 659861 4752291 878 + 659861 4752321 876 + 659861 4752351 874 + 659861 4752381 872 + 659861 4752411 871 + 659861 4752441 869 + 659861 4752471 868 + 659861 4752501 867 + 659861 4752531 866 + 659861 4752561 865 + 659861 4752591 864 + 659861 4752621 863 + 659861 4752651 862 + 659861 4752681 861 + 659861 4752711 859 + 659861 4752741 855 + 659861 4752771 853 + 659861 4752801 854 + 659861 4752831 854 + 659861 4752861 854 + 659861 4752891 854 + 659861 4752921 853 + 659861 4752951 849 + 659861 4752981 842 + 659861 4753011 834 + 659861 4753041 824 + 659861 4753071 816 + 659861 4753101 809 + 659861 4753131 809 + 659861 4753161 809 + 659861 4753191 809 + 659861 4753221 809 + 659861 4753251 809 + 659861 4753281 809 + 659861 4753311 809 + 659861 4753341 816 + 659861 4753371 828 + 659861 4753401 839 + 659861 4753431 853 + 659861 4753461 854 + 659861 4753491 854 + 659861 4753521 854 + 659861 4753551 855 + 659861 4753581 855 + 659861 4753611 855 + 659861 4753641 856 + 659861 4753671 855 + 659861 4753701 855 + 659861 4753731 855 + 659861 4753761 855 + 659861 4753791 855 + 659861 4753821 855 + 659861 4753851 855 + 659861 4753881 855 + 659861 4753911 855 + 659861 4753941 854 + 659861 4753971 854 + 659861 4754001 858 + 659861 4754031 866 + 659861 4754061 879 + 659861 4754091 894 + 659861 4754121 908 + 659861 4754151 950 + 659861 4754181 951 + 659861 4754211 953 + 659861 4754241 953 + 659861 4754271 954 + 659861 4754301 954 + 659861 4754331 955 + 659861 4754361 955 + 659861 4754391 955 + 659861 4754421 955 + 659861 4754451 955 + 659861 4754481 955 + 659861 4754511 955 + 659861 4754541 955 + 659891 4751301 970 + 659891 4751331 969 + 659891 4751361 967 + 659891 4751391 969 + 659891 4751421 975 + 659891 4751451 978 + 659891 4751481 981 + 659891 4751511 985 + 659891 4751541 989 + 659891 4751571 994 + 659891 4751601 998 + 659891 4751631 1000 + 659891 4751661 1002 + 659891 4751691 1002 + 659891 4751721 1003 + 659891 4751751 1002 + 659891 4751781 1003 + 659891 4751811 1003 + 659891 4751841 1002 + 659891 4751871 1001 + 659891 4751901 999 + 659891 4751931 994 + 659891 4751961 983 + 659891 4751991 965 + 659891 4752021 945 + 659891 4752051 924 + 659891 4752081 911 + 659891 4752111 903 + 659891 4752141 895 + 659891 4752171 890 + 659891 4752201 887 + 659891 4752231 883 + 659891 4752261 880 + 659891 4752291 877 + 659891 4752321 875 + 659891 4752351 873 + 659891 4752381 871 + 659891 4752411 870 + 659891 4752441 869 + 659891 4752471 868 + 659891 4752501 867 + 659891 4752531 866 + 659891 4752561 864 + 659891 4752591 864 + 659891 4752621 863 + 659891 4752651 862 + 659891 4752681 861 + 659891 4752711 858 + 659891 4752741 854 + 659891 4752771 852 + 659891 4752801 847 + 659891 4752831 847 + 659891 4752861 846 + 659891 4752891 844 + 659891 4752921 841 + 659891 4752951 832 + 659891 4752981 826 + 659891 4753011 819 + 659891 4753041 809 + 659891 4753071 809 + 659891 4753101 809 + 659891 4753131 809 + 659891 4753161 809 + 659891 4753191 809 + 659891 4753221 809 + 659891 4753251 809 + 659891 4753281 809 + 659891 4753311 809 + 659891 4753341 817 + 659891 4753371 830 + 659891 4753401 845 + 659891 4753431 854 + 659891 4753461 854 + 659891 4753491 855 + 659891 4753521 855 + 659891 4753551 855 + 659891 4753581 856 + 659891 4753611 856 + 659891 4753641 856 + 659891 4753671 856 + 659891 4753701 856 + 659891 4753731 856 + 659891 4753761 856 + 659891 4753791 856 + 659891 4753821 855 + 659891 4753851 856 + 659891 4753881 856 + 659891 4753911 856 + 659891 4753941 856 + 659891 4753971 856 + 659891 4754001 858 + 659891 4754031 860 + 659891 4754061 872 + 659891 4754091 884 + 659891 4754121 900 + 659891 4754151 933 + 659891 4754181 953 + 659891 4754211 953 + 659891 4754241 953 + 659891 4754271 953 + 659891 4754301 954 + 659891 4754331 955 + 659891 4754361 955 + 659891 4754391 955 + 659891 4754421 956 + 659891 4754451 955 + 659891 4754481 955 + 659891 4754511 955 + 659891 4754541 955 + 659921 4751301 970 + 659921 4751331 969 + 659921 4751361 967 + 659921 4751391 970 + 659921 4751421 975 + 659921 4751451 979 + 659921 4751481 982 + 659921 4751511 986 + 659921 4751541 990 + 659921 4751571 995 + 659921 4751601 999 + 659921 4751631 1001 + 659921 4751661 1002 + 659921 4751691 1002 + 659921 4751721 1003 + 659921 4751751 1003 + 659921 4751781 1004 + 659921 4751811 1003 + 659921 4751841 1002 + 659921 4751871 1001 + 659921 4751901 998 + 659921 4751931 992 + 659921 4751961 972 + 659921 4751991 956 + 659921 4752021 934 + 659921 4752051 919 + 659921 4752081 908 + 659921 4752111 899 + 659921 4752141 893 + 659921 4752171 889 + 659921 4752201 885 + 659921 4752231 882 + 659921 4752261 879 + 659921 4752291 876 + 659921 4752321 875 + 659921 4752351 873 + 659921 4752381 871 + 659921 4752411 869 + 659921 4752441 868 + 659921 4752471 867 + 659921 4752501 866 + 659921 4752531 865 + 659921 4752561 864 + 659921 4752591 863 + 659921 4752621 862 + 659921 4752651 862 + 659921 4752681 861 + 659921 4752711 858 + 659921 4752741 855 + 659921 4752771 854 + 659921 4752801 847 + 659921 4752831 839 + 659921 4752861 828 + 659921 4752891 828 + 659921 4752921 824 + 659921 4752951 819 + 659921 4752981 814 + 659921 4753011 809 + 659921 4753041 809 + 659921 4753071 809 + 659921 4753101 809 + 659921 4753131 809 + 659921 4753161 809 + 659921 4753191 809 + 659921 4753221 809 + 659921 4753251 809 + 659921 4753281 809 + 659921 4753311 809 + 659921 4753341 823 + 659921 4753371 840 + 659921 4753401 851 + 659921 4753431 854 + 659921 4753461 855 + 659921 4753491 855 + 659921 4753521 856 + 659921 4753551 856 + 659921 4753581 856 + 659921 4753611 857 + 659921 4753641 857 + 659921 4753671 857 + 659921 4753701 857 + 659921 4753731 857 + 659921 4753761 857 + 659921 4753791 857 + 659921 4753821 857 + 659921 4753851 857 + 659921 4753881 857 + 659921 4753911 857 + 659921 4753941 857 + 659921 4753971 857 + 659921 4754001 859 + 659921 4754031 859 + 659921 4754061 864 + 659921 4754091 877 + 659921 4754121 894 + 659921 4754151 922 + 659921 4754181 951 + 659921 4754211 953 + 659921 4754241 953 + 659921 4754271 953 + 659921 4754301 954 + 659921 4754331 955 + 659921 4754361 955 + 659921 4754391 955 + 659921 4754421 955 + 659921 4754451 955 + 659921 4754481 955 + 659921 4754511 955 + 659921 4754541 955 + 659951 4751301 971 + 659951 4751331 969 + 659951 4751361 967 + 659951 4751391 971 + 659951 4751421 976 + 659951 4751451 979 + 659951 4751481 983 + 659951 4751511 986 + 659951 4751541 990 + 659951 4751571 995 + 659951 4751601 999 + 659951 4751631 1001 + 659951 4751661 1002 + 659951 4751691 1003 + 659951 4751721 1003 + 659951 4751751 1003 + 659951 4751781 1003 + 659951 4751811 1004 + 659951 4751841 1002 + 659951 4751871 1000 + 659951 4751901 996 + 659951 4751931 988 + 659951 4751961 963 + 659951 4751991 945 + 659951 4752021 927 + 659951 4752051 913 + 659951 4752081 907 + 659951 4752111 898 + 659951 4752141 891 + 659951 4752171 887 + 659951 4752201 883 + 659951 4752231 880 + 659951 4752261 877 + 659951 4752291 876 + 659951 4752321 874 + 659951 4752351 872 + 659951 4752381 870 + 659951 4752411 868 + 659951 4752441 868 + 659951 4752471 867 + 659951 4752501 866 + 659951 4752531 865 + 659951 4752561 864 + 659951 4752591 863 + 659951 4752621 861 + 659951 4752651 861 + 659951 4752681 859 + 659951 4752711 857 + 659951 4752741 855 + 659951 4752771 854 + 659951 4752801 845 + 659951 4752831 838 + 659951 4752861 822 + 659951 4752891 814 + 659951 4752921 813 + 659951 4752951 809 + 659951 4752981 809 + 659951 4753011 809 + 659951 4753041 809 + 659951 4753071 809 + 659951 4753101 809 + 659951 4753131 809 + 659951 4753161 809 + 659951 4753191 809 + 659951 4753221 809 + 659951 4753251 809 + 659951 4753281 809 + 659951 4753311 809 + 659951 4753341 836 + 659951 4753371 851 + 659951 4753401 854 + 659951 4753431 855 + 659951 4753461 856 + 659951 4753491 856 + 659951 4753521 857 + 659951 4753551 857 + 659951 4753581 857 + 659951 4753611 857 + 659951 4753641 858 + 659951 4753671 858 + 659951 4753701 858 + 659951 4753731 858 + 659951 4753761 858 + 659951 4753791 858 + 659951 4753821 858 + 659951 4753851 858 + 659951 4753881 858 + 659951 4753911 858 + 659951 4753941 858 + 659951 4753971 858 + 659951 4754001 859 + 659951 4754031 859 + 659951 4754061 860 + 659951 4754091 872 + 659951 4754121 888 + 659951 4754151 903 + 659951 4754181 923 + 659951 4754211 953 + 659951 4754241 952 + 659951 4754271 953 + 659951 4754301 954 + 659951 4754331 954 + 659951 4754361 955 + 659951 4754391 956 + 659951 4754421 955 + 659951 4754451 955 + 659951 4754481 955 + 659951 4754511 955 + 659951 4754541 956 + 659981 4751301 972 + 659981 4751331 969 + 659981 4751361 967 + 659981 4751391 972 + 659981 4751421 977 + 659981 4751451 980 + 659981 4751481 983 + 659981 4751511 987 + 659981 4751541 990 + 659981 4751571 995 + 659981 4751601 998 + 659981 4751631 1000 + 659981 4751661 1002 + 659981 4751691 1003 + 659981 4751721 1003 + 659981 4751751 1003 + 659981 4751781 1003 + 659981 4751811 1003 + 659981 4751841 1002 + 659981 4751871 1000 + 659981 4751901 995 + 659981 4751931 982 + 659981 4751961 958 + 659981 4751991 938 + 659981 4752021 921 + 659981 4752051 911 + 659981 4752081 901 + 659981 4752111 896 + 659981 4752141 890 + 659981 4752171 884 + 659981 4752201 882 + 659981 4752231 879 + 659981 4752261 876 + 659981 4752291 875 + 659981 4752321 874 + 659981 4752351 872 + 659981 4752381 870 + 659981 4752411 869 + 659981 4752441 868 + 659981 4752471 867 + 659981 4752501 866 + 659981 4752531 864 + 659981 4752561 863 + 659981 4752591 862 + 659981 4752621 861 + 659981 4752651 860 + 659981 4752681 858 + 659981 4752711 855 + 659981 4752741 853 + 659981 4752771 853 + 659981 4752801 854 + 659981 4752831 841 + 659981 4752861 823 + 659981 4752891 813 + 659981 4752921 809 + 659981 4752951 809 + 659981 4752981 809 + 659981 4753011 809 + 659981 4753041 809 + 659981 4753071 809 + 659981 4753101 809 + 659981 4753131 809 + 659981 4753161 809 + 659981 4753191 809 + 659981 4753221 815 + 659981 4753251 820 + 659981 4753281 822 + 659981 4753311 832 + 659981 4753341 846 + 659981 4753371 854 + 659981 4753401 856 + 659981 4753431 856 + 659981 4753461 857 + 659981 4753491 857 + 659981 4753521 857 + 659981 4753551 857 + 659981 4753581 858 + 659981 4753611 858 + 659981 4753641 858 + 659981 4753671 858 + 659981 4753701 859 + 659981 4753731 859 + 659981 4753761 859 + 659981 4753791 859 + 659981 4753821 859 + 659981 4753851 859 + 659981 4753881 859 + 659981 4753911 859 + 659981 4753941 859 + 659981 4753971 859 + 659981 4754001 859 + 659981 4754031 859 + 659981 4754061 860 + 659981 4754091 865 + 659981 4754121 877 + 659981 4754151 891 + 659981 4754181 912 + 659981 4754211 938 + 659981 4754241 953 + 659981 4754271 953 + 659981 4754301 954 + 659981 4754331 954 + 659981 4754361 955 + 659981 4754391 956 + 659981 4754421 955 + 659981 4754451 955 + 659981 4754481 955 + 659981 4754511 956 + 659981 4754541 956 + 660011 4751301 972 + 660011 4751331 970 + 660011 4751361 967 + 660011 4751391 973 + 660011 4751421 977 + 660011 4751451 981 + 660011 4751481 984 + 660011 4751511 987 + 660011 4751541 990 + 660011 4751571 995 + 660011 4751601 998 + 660011 4751631 1000 + 660011 4751661 1002 + 660011 4751691 1003 + 660011 4751721 1003 + 660011 4751751 1004 + 660011 4751781 1003 + 660011 4751811 1003 + 660011 4751841 1001 + 660011 4751871 998 + 660011 4751901 991 + 660011 4751931 975 + 660011 4751961 951 + 660011 4751991 937 + 660011 4752021 920 + 660011 4752051 910 + 660011 4752081 900 + 660011 4752111 894 + 660011 4752141 890 + 660011 4752171 883 + 660011 4752201 880 + 660011 4752231 878 + 660011 4752261 876 + 660011 4752291 875 + 660011 4752321 873 + 660011 4752351 872 + 660011 4752381 871 + 660011 4752411 869 + 660011 4752441 868 + 660011 4752471 867 + 660011 4752501 865 + 660011 4752531 864 + 660011 4752561 862 + 660011 4752591 861 + 660011 4752621 861 + 660011 4752651 859 + 660011 4752681 857 + 660011 4752711 854 + 660011 4752741 854 + 660011 4752771 856 + 660011 4752801 847 + 660011 4752831 831 + 660011 4752861 815 + 660011 4752891 809 + 660011 4752921 809 + 660011 4752951 809 + 660011 4752981 809 + 660011 4753011 809 + 660011 4753041 809 + 660011 4753071 809 + 660011 4753101 809 + 660011 4753131 809 + 660011 4753161 809 + 660011 4753191 822 + 660011 4753221 825 + 660011 4753251 834 + 660011 4753281 843 + 660011 4753311 848 + 660011 4753341 854 + 660011 4753371 861 + 660011 4753401 860 + 660011 4753431 858 + 660011 4753461 858 + 660011 4753491 858 + 660011 4753521 858 + 660011 4753551 858 + 660011 4753581 858 + 660011 4753611 859 + 660011 4753641 859 + 660011 4753671 859 + 660011 4753701 860 + 660011 4753731 860 + 660011 4753761 860 + 660011 4753791 860 + 660011 4753821 860 + 660011 4753851 860 + 660011 4753881 860 + 660011 4753911 860 + 660011 4753941 859 + 660011 4753971 859 + 660011 4754001 860 + 660011 4754031 860 + 660011 4754061 860 + 660011 4754091 861 + 660011 4754121 871 + 660011 4754151 884 + 660011 4754181 902 + 660011 4754211 924 + 660011 4754241 953 + 660011 4754271 953 + 660011 4754301 954 + 660011 4754331 954 + 660011 4754361 955 + 660011 4754391 955 + 660011 4754421 956 + 660011 4754451 955 + 660011 4754481 956 + 660011 4754511 957 + 660011 4754541 956 + 660041 4751301 974 + 660041 4751331 971 + 660041 4751361 971 + 660041 4751391 975 + 660041 4751421 978 + 660041 4751451 981 + 660041 4751481 984 + 660041 4751511 987 + 660041 4751541 990 + 660041 4751571 994 + 660041 4751601 998 + 660041 4751631 1000 + 660041 4751661 1002 + 660041 4751691 1003 + 660041 4751721 1003 + 660041 4751751 1004 + 660041 4751781 1004 + 660041 4751811 1002 + 660041 4751841 1000 + 660041 4751871 996 + 660041 4751901 984 + 660041 4751931 964 + 660041 4751961 943 + 660041 4751991 930 + 660041 4752021 916 + 660041 4752051 909 + 660041 4752081 899 + 660041 4752111 891 + 660041 4752141 883 + 660041 4752171 881 + 660041 4752201 879 + 660041 4752231 877 + 660041 4752261 876 + 660041 4752291 874 + 660041 4752321 873 + 660041 4752351 872 + 660041 4752381 871 + 660041 4752411 869 + 660041 4752441 868 + 660041 4752471 866 + 660041 4752501 864 + 660041 4752531 863 + 660041 4752561 862 + 660041 4752591 861 + 660041 4752621 861 + 660041 4752651 859 + 660041 4752681 858 + 660041 4752711 856 + 660041 4752741 856 + 660041 4752771 854 + 660041 4752801 840 + 660041 4752831 821 + 660041 4752861 809 + 660041 4752891 809 + 660041 4752921 809 + 660041 4752951 809 + 660041 4752981 809 + 660041 4753011 809 + 660041 4753041 809 + 660041 4753071 809 + 660041 4753101 809 + 660041 4753131 820 + 660041 4753161 828 + 660041 4753191 833 + 660041 4753221 840 + 660041 4753251 844 + 660041 4753281 852 + 660041 4753311 856 + 660041 4753341 860 + 660041 4753371 861 + 660041 4753401 861 + 660041 4753431 860 + 660041 4753461 859 + 660041 4753491 859 + 660041 4753521 859 + 660041 4753551 859 + 660041 4753581 860 + 660041 4753611 860 + 660041 4753641 860 + 660041 4753671 860 + 660041 4753701 860 + 660041 4753731 861 + 660041 4753761 861 + 660041 4753791 861 + 660041 4753821 861 + 660041 4753851 861 + 660041 4753881 861 + 660041 4753911 860 + 660041 4753941 860 + 660041 4753971 860 + 660041 4754001 860 + 660041 4754031 861 + 660041 4754061 862 + 660041 4754091 861 + 660041 4754121 866 + 660041 4754151 877 + 660041 4754181 894 + 660041 4754211 913 + 660041 4754241 950 + 660041 4754271 953 + 660041 4754301 953 + 660041 4754331 954 + 660041 4754361 955 + 660041 4754391 955 + 660041 4754421 955 + 660041 4754451 955 + 660041 4754481 956 + 660041 4754511 957 + 660041 4754541 956 + 660071 4751301 976 + 660071 4751331 973 + 660071 4751361 973 + 660071 4751391 975 + 660071 4751421 978 + 660071 4751451 981 + 660071 4751481 984 + 660071 4751511 987 + 660071 4751541 990 + 660071 4751571 994 + 660071 4751601 998 + 660071 4751631 1000 + 660071 4751661 1002 + 660071 4751691 1003 + 660071 4751721 1004 + 660071 4751751 1003 + 660071 4751781 1004 + 660071 4751811 1002 + 660071 4751841 1000 + 660071 4751871 994 + 660071 4751901 979 + 660071 4751931 959 + 660071 4751961 946 + 660071 4751991 926 + 660071 4752021 912 + 660071 4752051 905 + 660071 4752081 900 + 660071 4752111 893 + 660071 4752141 884 + 660071 4752171 880 + 660071 4752201 878 + 660071 4752231 876 + 660071 4752261 875 + 660071 4752291 874 + 660071 4752321 873 + 660071 4752351 871 + 660071 4752381 870 + 660071 4752411 870 + 660071 4752441 868 + 660071 4752471 867 + 660071 4752501 863 + 660071 4752531 861 + 660071 4752561 861 + 660071 4752591 861 + 660071 4752621 861 + 660071 4752651 860 + 660071 4752681 859 + 660071 4752711 859 + 660071 4752741 859 + 660071 4752771 854 + 660071 4752801 834 + 660071 4752831 816 + 660071 4752861 809 + 660071 4752891 809 + 660071 4752921 809 + 660071 4752951 809 + 660071 4752981 809 + 660071 4753011 809 + 660071 4753041 809 + 660071 4753071 809 + 660071 4753101 822 + 660071 4753131 834 + 660071 4753161 842 + 660071 4753191 851 + 660071 4753221 854 + 660071 4753251 854 + 660071 4753281 856 + 660071 4753311 859 + 660071 4753341 861 + 660071 4753371 862 + 660071 4753401 861 + 660071 4753431 861 + 660071 4753461 860 + 660071 4753491 859 + 660071 4753521 859 + 660071 4753551 860 + 660071 4753581 860 + 660071 4753611 861 + 660071 4753641 861 + 660071 4753671 860 + 660071 4753701 861 + 660071 4753731 862 + 660071 4753761 862 + 660071 4753791 862 + 660071 4753821 863 + 660071 4753851 863 + 660071 4753881 862 + 660071 4753911 861 + 660071 4753941 860 + 660071 4753971 861 + 660071 4754001 861 + 660071 4754031 861 + 660071 4754061 862 + 660071 4754091 863 + 660071 4754121 866 + 660071 4754151 872 + 660071 4754181 890 + 660071 4754211 908 + 660071 4754241 945 + 660071 4754271 953 + 660071 4754301 953 + 660071 4754331 954 + 660071 4754361 956 + 660071 4754391 955 + 660071 4754421 955 + 660071 4754451 956 + 660071 4754481 956 + 660071 4754511 957 + 660071 4754541 957 + 660101 4751301 977 + 660101 4751331 975 + 660101 4751361 974 + 660101 4751391 975 + 660101 4751421 978 + 660101 4751451 981 + 660101 4751481 984 + 660101 4751511 987 + 660101 4751541 990 + 660101 4751571 994 + 660101 4751601 998 + 660101 4751631 1000 + 660101 4751661 1002 + 660101 4751691 1003 + 660101 4751721 1003 + 660101 4751751 1004 + 660101 4751781 1003 + 660101 4751811 1001 + 660101 4751841 999 + 660101 4751871 992 + 660101 4751901 975 + 660101 4751931 956 + 660101 4751961 940 + 660101 4751991 925 + 660101 4752021 912 + 660101 4752051 905 + 660101 4752081 895 + 660101 4752111 888 + 660101 4752141 883 + 660101 4752171 878 + 660101 4752201 876 + 660101 4752231 876 + 660101 4752261 875 + 660101 4752291 874 + 660101 4752321 873 + 660101 4752351 871 + 660101 4752381 869 + 660101 4752411 869 + 660101 4752441 868 + 660101 4752471 867 + 660101 4752501 864 + 660101 4752531 861 + 660101 4752561 861 + 660101 4752591 861 + 660101 4752621 860 + 660101 4752651 860 + 660101 4752681 861 + 660101 4752711 861 + 660101 4752741 862 + 660101 4752771 852 + 660101 4752801 829 + 660101 4752831 809 + 660101 4752861 809 + 660101 4752891 809 + 660101 4752921 809 + 660101 4752951 809 + 660101 4752981 809 + 660101 4753011 809 + 660101 4753041 809 + 660101 4753071 819 + 660101 4753101 837 + 660101 4753131 850 + 660101 4753161 854 + 660101 4753191 856 + 660101 4753221 858 + 660101 4753251 858 + 660101 4753281 858 + 660101 4753311 860 + 660101 4753341 861 + 660101 4753371 862 + 660101 4753401 862 + 660101 4753431 861 + 660101 4753461 860 + 660101 4753491 859 + 660101 4753521 859 + 660101 4753551 860 + 660101 4753581 861 + 660101 4753611 862 + 660101 4753641 861 + 660101 4753671 861 + 660101 4753701 861 + 660101 4753731 862 + 660101 4753761 863 + 660101 4753791 864 + 660101 4753821 865 + 660101 4753851 866 + 660101 4753881 864 + 660101 4753911 861 + 660101 4753941 860 + 660101 4753971 861 + 660101 4754001 861 + 660101 4754031 861 + 660101 4754061 862 + 660101 4754091 864 + 660101 4754121 867 + 660101 4754151 872 + 660101 4754181 888 + 660101 4754211 907 + 660101 4754241 943 + 660101 4754271 953 + 660101 4754301 953 + 660101 4754331 954 + 660101 4754361 955 + 660101 4754391 955 + 660101 4754421 955 + 660101 4754451 957 + 660101 4754481 957 + 660101 4754511 957 + 660101 4754541 957 + 660131 4751301 978 + 660131 4751331 976 + 660131 4751361 975 + 660131 4751391 975 + 660131 4751421 977 + 660131 4751451 980 + 660131 4751481 984 + 660131 4751511 986 + 660131 4751541 990 + 660131 4751571 995 + 660131 4751601 999 + 660131 4751631 1001 + 660131 4751661 1002 + 660131 4751691 1003 + 660131 4751721 1003 + 660131 4751751 1003 + 660131 4751781 1002 + 660131 4751811 999 + 660131 4751841 995 + 660131 4751871 986 + 660131 4751901 964 + 660131 4751931 952 + 660131 4751961 935 + 660131 4751991 923 + 660131 4752021 910 + 660131 4752051 904 + 660131 4752081 893 + 660131 4752111 884 + 660131 4752141 881 + 660131 4752171 877 + 660131 4752201 876 + 660131 4752231 875 + 660131 4752261 874 + 660131 4752291 873 + 660131 4752321 872 + 660131 4752351 871 + 660131 4752381 869 + 660131 4752411 869 + 660131 4752441 868 + 660131 4752471 867 + 660131 4752501 864 + 660131 4752531 863 + 660131 4752561 862 + 660131 4752591 862 + 660131 4752621 861 + 660131 4752651 861 + 660131 4752681 861 + 660131 4752711 861 + 660131 4752741 856 + 660131 4752771 838 + 660131 4752801 825 + 660131 4752831 809 + 660131 4752861 809 + 660131 4752891 809 + 660131 4752921 809 + 660131 4752951 809 + 660131 4752981 809 + 660131 4753011 809 + 660131 4753041 821 + 660131 4753071 837 + 660131 4753101 853 + 660131 4753131 861 + 660131 4753161 857 + 660131 4753191 859 + 660131 4753221 861 + 660131 4753251 860 + 660131 4753281 860 + 660131 4753311 861 + 660131 4753341 861 + 660131 4753371 863 + 660131 4753401 863 + 660131 4753431 861 + 660131 4753461 860 + 660131 4753491 860 + 660131 4753521 860 + 660131 4753551 861 + 660131 4753581 861 + 660131 4753611 862 + 660131 4753641 862 + 660131 4753671 862 + 660131 4753701 862 + 660131 4753731 863 + 660131 4753761 864 + 660131 4753791 866 + 660131 4753821 867 + 660131 4753851 869 + 660131 4753881 865 + 660131 4753911 861 + 660131 4753941 860 + 660131 4753971 860 + 660131 4754001 860 + 660131 4754031 861 + 660131 4754061 863 + 660131 4754091 864 + 660131 4754121 867 + 660131 4754151 872 + 660131 4754181 887 + 660131 4754211 907 + 660131 4754241 940 + 660131 4754271 953 + 660131 4754301 953 + 660131 4754331 954 + 660131 4754361 955 + 660131 4754391 956 + 660131 4754421 956 + 660131 4754451 957 + 660131 4754481 957 + 660131 4754511 957 + 660131 4754541 957 + 660161 4751301 981 + 660161 4751331 978 + 660161 4751361 977 + 660161 4751391 978 + 660161 4751421 978 + 660161 4751451 981 + 660161 4751481 983 + 660161 4751511 986 + 660161 4751541 989 + 660161 4751571 994 + 660161 4751601 998 + 660161 4751631 1000 + 660161 4751661 1002 + 660161 4751691 1003 + 660161 4751721 1003 + 660161 4751751 1004 + 660161 4751781 1001 + 660161 4751811 998 + 660161 4751841 991 + 660161 4751871 976 + 660161 4751901 957 + 660161 4751931 942 + 660161 4751961 931 + 660161 4751991 919 + 660161 4752021 908 + 660161 4752051 900 + 660161 4752081 891 + 660161 4752111 883 + 660161 4752141 880 + 660161 4752171 877 + 660161 4752201 875 + 660161 4752231 875 + 660161 4752261 874 + 660161 4752291 873 + 660161 4752321 872 + 660161 4752351 870 + 660161 4752381 869 + 660161 4752411 869 + 660161 4752441 869 + 660161 4752471 867 + 660161 4752501 865 + 660161 4752531 864 + 660161 4752561 863 + 660161 4752591 862 + 660161 4752621 861 + 660161 4752651 859 + 660161 4752681 860 + 660161 4752711 855 + 660161 4752741 845 + 660161 4752771 829 + 660161 4752801 817 + 660161 4752831 809 + 660161 4752861 809 + 660161 4752891 809 + 660161 4752921 809 + 660161 4752951 809 + 660161 4752981 809 + 660161 4753011 830 + 660161 4753041 839 + 660161 4753071 851 + 660161 4753101 861 + 660161 4753131 860 + 660161 4753161 859 + 660161 4753191 861 + 660161 4753221 862 + 660161 4753251 861 + 660161 4753281 861 + 660161 4753311 862 + 660161 4753341 863 + 660161 4753371 863 + 660161 4753401 863 + 660161 4753431 861 + 660161 4753461 861 + 660161 4753491 860 + 660161 4753521 860 + 660161 4753551 861 + 660161 4753581 862 + 660161 4753611 863 + 660161 4753641 863 + 660161 4753671 863 + 660161 4753701 863 + 660161 4753731 864 + 660161 4753761 865 + 660161 4753791 867 + 660161 4753821 869 + 660161 4753851 867 + 660161 4753881 861 + 660161 4753911 860 + 660161 4753941 860 + 660161 4753971 860 + 660161 4754001 860 + 660161 4754031 861 + 660161 4754061 863 + 660161 4754091 864 + 660161 4754121 866 + 660161 4754151 870 + 660161 4754181 885 + 660161 4754211 908 + 660161 4754241 942 + 660161 4754271 953 + 660161 4754301 954 + 660161 4754331 955 + 660161 4754361 956 + 660161 4754391 956 + 660161 4754421 957 + 660161 4754451 958 + 660161 4754481 957 + 660161 4754511 958 + 660161 4754541 957 + 660191 4751301 983 + 660191 4751331 982 + 660191 4751361 981 + 660191 4751391 981 + 660191 4751421 981 + 660191 4751451 981 + 660191 4751481 983 + 660191 4751511 985 + 660191 4751541 989 + 660191 4751571 992 + 660191 4751601 997 + 660191 4751631 999 + 660191 4751661 1001 + 660191 4751691 1002 + 660191 4751721 1003 + 660191 4751751 1003 + 660191 4751781 1001 + 660191 4751811 997 + 660191 4751841 986 + 660191 4751871 966 + 660191 4751901 946 + 660191 4751931 935 + 660191 4751961 926 + 660191 4751991 915 + 660191 4752021 910 + 660191 4752051 901 + 660191 4752081 890 + 660191 4752111 882 + 660191 4752141 879 + 660191 4752171 876 + 660191 4752201 875 + 660191 4752231 875 + 660191 4752261 874 + 660191 4752291 873 + 660191 4752321 872 + 660191 4752351 871 + 660191 4752381 870 + 660191 4752411 870 + 660191 4752441 869 + 660191 4752471 868 + 660191 4752501 866 + 660191 4752531 864 + 660191 4752561 862 + 660191 4752591 861 + 660191 4752621 860 + 660191 4752651 859 + 660191 4752681 857 + 660191 4752711 855 + 660191 4752741 851 + 660191 4752771 835 + 660191 4752801 809 + 660191 4752831 809 + 660191 4752861 809 + 660191 4752891 809 + 660191 4752921 809 + 660191 4752951 809 + 660191 4752981 828 + 660191 4753011 847 + 660191 4753041 854 + 660191 4753071 856 + 660191 4753101 858 + 660191 4753131 859 + 660191 4753161 860 + 660191 4753191 861 + 660191 4753221 862 + 660191 4753251 863 + 660191 4753281 863 + 660191 4753311 863 + 660191 4753341 864 + 660191 4753371 864 + 660191 4753401 864 + 660191 4753431 862 + 660191 4753461 861 + 660191 4753491 860 + 660191 4753521 861 + 660191 4753551 862 + 660191 4753581 863 + 660191 4753611 863 + 660191 4753641 863 + 660191 4753671 864 + 660191 4753701 864 + 660191 4753731 864 + 660191 4753761 864 + 660191 4753791 865 + 660191 4753821 868 + 660191 4753851 865 + 660191 4753881 861 + 660191 4753911 860 + 660191 4753941 860 + 660191 4753971 860 + 660191 4754001 860 + 660191 4754031 862 + 660191 4754061 863 + 660191 4754091 864 + 660191 4754121 866 + 660191 4754151 869 + 660191 4754181 884 + 660191 4754211 911 + 660191 4754241 949 + 660191 4754271 954 + 660191 4754301 954 + 660191 4754331 955 + 660191 4754361 957 + 660191 4754391 957 + 660191 4754421 958 + 660191 4754451 958 + 660191 4754481 958 + 660191 4754511 957 + 660191 4754541 957 + 660221 4751301 985 + 660221 4751331 983 + 660221 4751361 983 + 660221 4751391 983 + 660221 4751421 982 + 660221 4751451 982 + 660221 4751481 982 + 660221 4751511 984 + 660221 4751541 987 + 660221 4751571 990 + 660221 4751601 994 + 660221 4751631 997 + 660221 4751661 999 + 660221 4751691 1001 + 660221 4751721 1003 + 660221 4751751 1002 + 660221 4751781 1001 + 660221 4751811 996 + 660221 4751841 983 + 660221 4751871 966 + 660221 4751901 948 + 660221 4751931 934 + 660221 4751961 925 + 660221 4751991 909 + 660221 4752021 900 + 660221 4752051 893 + 660221 4752081 884 + 660221 4752111 882 + 660221 4752141 879 + 660221 4752171 877 + 660221 4752201 876 + 660221 4752231 875 + 660221 4752261 874 + 660221 4752291 873 + 660221 4752321 872 + 660221 4752351 871 + 660221 4752381 870 + 660221 4752411 870 + 660221 4752441 869 + 660221 4752471 868 + 660221 4752501 866 + 660221 4752531 864 + 660221 4752561 862 + 660221 4752591 861 + 660221 4752621 861 + 660221 4752651 861 + 660221 4752681 861 + 660221 4752711 862 + 660221 4752741 859 + 660221 4752771 835 + 660221 4752801 809 + 660221 4752831 809 + 660221 4752861 809 + 660221 4752891 809 + 660221 4752921 809 + 660221 4752951 809 + 660221 4752981 827 + 660221 4753011 844 + 660221 4753041 855 + 660221 4753071 859 + 660221 4753101 860 + 660221 4753131 861 + 660221 4753161 861 + 660221 4753191 862 + 660221 4753221 862 + 660221 4753251 863 + 660221 4753281 864 + 660221 4753311 865 + 660221 4753341 865 + 660221 4753371 866 + 660221 4753401 865 + 660221 4753431 863 + 660221 4753461 861 + 660221 4753491 861 + 660221 4753521 861 + 660221 4753551 862 + 660221 4753581 863 + 660221 4753611 864 + 660221 4753641 865 + 660221 4753671 865 + 660221 4753701 865 + 660221 4753731 865 + 660221 4753761 865 + 660221 4753791 864 + 660221 4753821 863 + 660221 4753851 862 + 660221 4753881 861 + 660221 4753911 861 + 660221 4753941 860 + 660221 4753971 860 + 660221 4754001 860 + 660221 4754031 862 + 660221 4754061 863 + 660221 4754091 864 + 660221 4754121 866 + 660221 4754151 868 + 660221 4754181 883 + 660221 4754211 906 + 660221 4754241 940 + 660221 4754271 954 + 660221 4754301 956 + 660221 4754331 957 + 660221 4754361 957 + 660221 4754391 959 + 660221 4754421 958 + 660221 4754451 959 + 660221 4754481 958 + 660221 4754511 958 + 660221 4754541 957 + 660251 4751301 987 + 660251 4751331 984 + 660251 4751361 984 + 660251 4751391 985 + 660251 4751421 984 + 660251 4751451 983 + 660251 4751481 983 + 660251 4751511 983 + 660251 4751541 985 + 660251 4751571 989 + 660251 4751601 991 + 660251 4751631 995 + 660251 4751661 997 + 660251 4751691 999 + 660251 4751721 1001 + 660251 4751751 1001 + 660251 4751781 1000 + 660251 4751811 995 + 660251 4751841 981 + 660251 4751871 963 + 660251 4751901 944 + 660251 4751931 930 + 660251 4751961 918 + 660251 4751991 907 + 660251 4752021 899 + 660251 4752051 893 + 660251 4752081 886 + 660251 4752111 882 + 660251 4752141 879 + 660251 4752171 877 + 660251 4752201 876 + 660251 4752231 875 + 660251 4752261 874 + 660251 4752291 873 + 660251 4752321 871 + 660251 4752351 870 + 660251 4752381 870 + 660251 4752411 869 + 660251 4752441 869 + 660251 4752471 868 + 660251 4752501 866 + 660251 4752531 864 + 660251 4752561 862 + 660251 4752591 861 + 660251 4752621 862 + 660251 4752651 862 + 660251 4752681 863 + 660251 4752711 863 + 660251 4752741 855 + 660251 4752771 832 + 660251 4752801 809 + 660251 4752831 809 + 660251 4752861 809 + 660251 4752891 809 + 660251 4752921 809 + 660251 4752951 809 + 660251 4752981 824 + 660251 4753011 842 + 660251 4753041 855 + 660251 4753071 861 + 660251 4753101 861 + 660251 4753131 861 + 660251 4753161 862 + 660251 4753191 862 + 660251 4753221 863 + 660251 4753251 864 + 660251 4753281 866 + 660251 4753311 866 + 660251 4753341 867 + 660251 4753371 867 + 660251 4753401 866 + 660251 4753431 864 + 660251 4753461 862 + 660251 4753491 862 + 660251 4753521 863 + 660251 4753551 864 + 660251 4753581 865 + 660251 4753611 865 + 660251 4753641 865 + 660251 4753671 866 + 660251 4753701 866 + 660251 4753731 866 + 660251 4753761 866 + 660251 4753791 865 + 660251 4753821 864 + 660251 4753851 863 + 660251 4753881 862 + 660251 4753911 861 + 660251 4753941 860 + 660251 4753971 860 + 660251 4754001 860 + 660251 4754031 861 + 660251 4754061 863 + 660251 4754091 864 + 660251 4754121 866 + 660251 4754151 868 + 660251 4754181 881 + 660251 4754211 902 + 660251 4754241 936 + 660251 4754271 953 + 660251 4754301 956 + 660251 4754331 958 + 660251 4754361 959 + 660251 4754391 959 + 660251 4754421 959 + 660251 4754451 959 + 660251 4754481 958 + 660251 4754511 958 + 660251 4754541 957 + 660281 4751301 988 + 660281 4751331 987 + 660281 4751361 987 + 660281 4751391 987 + 660281 4751421 987 + 660281 4751451 987 + 660281 4751481 986 + 660281 4751511 986 + 660281 4751541 988 + 660281 4751571 989 + 660281 4751601 990 + 660281 4751631 992 + 660281 4751661 996 + 660281 4751691 998 + 660281 4751721 999 + 660281 4751751 999 + 660281 4751781 997 + 660281 4751811 992 + 660281 4751841 975 + 660281 4751871 960 + 660281 4751901 942 + 660281 4751931 930 + 660281 4751961 916 + 660281 4751991 907 + 660281 4752021 901 + 660281 4752051 893 + 660281 4752081 886 + 660281 4752111 882 + 660281 4752141 879 + 660281 4752171 877 + 660281 4752201 876 + 660281 4752231 875 + 660281 4752261 874 + 660281 4752291 873 + 660281 4752321 871 + 660281 4752351 870 + 660281 4752381 869 + 660281 4752411 869 + 660281 4752441 868 + 660281 4752471 867 + 660281 4752501 866 + 660281 4752531 865 + 660281 4752561 865 + 660281 4752591 864 + 660281 4752621 864 + 660281 4752651 863 + 660281 4752681 862 + 660281 4752711 856 + 660281 4752741 847 + 660281 4752771 828 + 660281 4752801 809 + 660281 4752831 809 + 660281 4752861 809 + 660281 4752891 809 + 660281 4752921 809 + 660281 4752951 809 + 660281 4752981 821 + 660281 4753011 841 + 660281 4753041 857 + 660281 4753071 862 + 660281 4753101 861 + 660281 4753131 862 + 660281 4753161 863 + 660281 4753191 863 + 660281 4753221 863 + 660281 4753251 864 + 660281 4753281 866 + 660281 4753311 868 + 660281 4753341 868 + 660281 4753371 869 + 660281 4753401 867 + 660281 4753431 866 + 660281 4753461 865 + 660281 4753491 865 + 660281 4753521 866 + 660281 4753551 867 + 660281 4753581 867 + 660281 4753611 866 + 660281 4753641 866 + 660281 4753671 866 + 660281 4753701 867 + 660281 4753731 867 + 660281 4753761 866 + 660281 4753791 866 + 660281 4753821 865 + 660281 4753851 864 + 660281 4753881 863 + 660281 4753911 862 + 660281 4753941 861 + 660281 4753971 860 + 660281 4754001 860 + 660281 4754031 861 + 660281 4754061 862 + 660281 4754091 863 + 660281 4754121 865 + 660281 4754151 868 + 660281 4754181 880 + 660281 4754211 902 + 660281 4754241 937 + 660281 4754271 953 + 660281 4754301 956 + 660281 4754331 958 + 660281 4754361 960 + 660281 4754391 960 + 660281 4754421 959 + 660281 4754451 959 + 660281 4754481 958 + 660281 4754511 958 + 660281 4754541 957 + 660311 4751301 990 + 660311 4751331 989 + 660311 4751361 989 + 660311 4751391 990 + 660311 4751421 990 + 660311 4751451 990 + 660311 4751481 989 + 660311 4751511 989 + 660311 4751541 990 + 660311 4751571 990 + 660311 4751601 990 + 660311 4751631 991 + 660311 4751661 994 + 660311 4751691 996 + 660311 4751721 998 + 660311 4751751 997 + 660311 4751781 995 + 660311 4751811 991 + 660311 4751841 972 + 660311 4751871 957 + 660311 4751901 938 + 660311 4751931 924 + 660311 4751961 913 + 660311 4751991 905 + 660311 4752021 899 + 660311 4752051 891 + 660311 4752081 886 + 660311 4752111 883 + 660311 4752141 879 + 660311 4752171 877 + 660311 4752201 876 + 660311 4752231 875 + 660311 4752261 874 + 660311 4752291 873 + 660311 4752321 871 + 660311 4752351 870 + 660311 4752381 869 + 660311 4752411 869 + 660311 4752441 869 + 660311 4752471 868 + 660311 4752501 867 + 660311 4752531 866 + 660311 4752561 865 + 660311 4752591 864 + 660311 4752621 864 + 660311 4752651 862 + 660311 4752681 861 + 660311 4752711 845 + 660311 4752741 836 + 660311 4752771 825 + 660311 4752801 809 + 660311 4752831 809 + 660311 4752861 809 + 660311 4752891 809 + 660311 4752921 809 + 660311 4752951 809 + 660311 4752981 817 + 660311 4753011 832 + 660311 4753041 855 + 660311 4753071 862 + 660311 4753101 861 + 660311 4753131 862 + 660311 4753161 863 + 660311 4753191 863 + 660311 4753221 864 + 660311 4753251 865 + 660311 4753281 866 + 660311 4753311 868 + 660311 4753341 869 + 660311 4753371 869 + 660311 4753401 869 + 660311 4753431 868 + 660311 4753461 867 + 660311 4753491 868 + 660311 4753521 868 + 660311 4753551 869 + 660311 4753581 868 + 660311 4753611 867 + 660311 4753641 867 + 660311 4753671 867 + 660311 4753701 867 + 660311 4753731 868 + 660311 4753761 867 + 660311 4753791 867 + 660311 4753821 866 + 660311 4753851 865 + 660311 4753881 864 + 660311 4753911 863 + 660311 4753941 861 + 660311 4753971 861 + 660311 4754001 860 + 660311 4754031 860 + 660311 4754061 861 + 660311 4754091 863 + 660311 4754121 865 + 660311 4754151 868 + 660311 4754181 878 + 660311 4754211 902 + 660311 4754241 938 + 660311 4754271 953 + 660311 4754301 956 + 660311 4754331 958 + 660311 4754361 960 + 660311 4754391 960 + 660311 4754421 959 + 660311 4754451 959 + 660311 4754481 958 + 660311 4754511 958 + 660311 4754541 957 + 660341 4751301 992 + 660341 4751331 991 + 660341 4751361 990 + 660341 4751391 991 + 660341 4751421 992 + 660341 4751451 991 + 660341 4751481 991 + 660341 4751511 991 + 660341 4751541 991 + 660341 4751571 991 + 660341 4751601 991 + 660341 4751631 990 + 660341 4751661 992 + 660341 4751691 995 + 660341 4751721 997 + 660341 4751751 996 + 660341 4751781 994 + 660341 4751811 989 + 660341 4751841 967 + 660341 4751871 952 + 660341 4751901 935 + 660341 4751931 922 + 660341 4751961 912 + 660341 4751991 904 + 660341 4752021 899 + 660341 4752051 893 + 660341 4752081 888 + 660341 4752111 883 + 660341 4752141 880 + 660341 4752171 877 + 660341 4752201 876 + 660341 4752231 875 + 660341 4752261 874 + 660341 4752291 873 + 660341 4752321 872 + 660341 4752351 870 + 660341 4752381 870 + 660341 4752411 870 + 660341 4752441 869 + 660341 4752471 868 + 660341 4752501 867 + 660341 4752531 866 + 660341 4752561 865 + 660341 4752591 864 + 660341 4752621 863 + 660341 4752651 862 + 660341 4752681 854 + 660341 4752711 838 + 660341 4752741 828 + 660341 4752771 818 + 660341 4752801 809 + 660341 4752831 809 + 660341 4752861 809 + 660341 4752891 809 + 660341 4752921 809 + 660341 4752951 809 + 660341 4752981 809 + 660341 4753011 826 + 660341 4753041 845 + 660341 4753071 857 + 660341 4753101 859 + 660341 4753131 861 + 660341 4753161 862 + 660341 4753191 863 + 660341 4753221 863 + 660341 4753251 865 + 660341 4753281 866 + 660341 4753311 866 + 660341 4753341 868 + 660341 4753371 868 + 660341 4753401 869 + 660341 4753431 869 + 660341 4753461 868 + 660341 4753491 868 + 660341 4753521 869 + 660341 4753551 869 + 660341 4753581 868 + 660341 4753611 868 + 660341 4753641 868 + 660341 4753671 868 + 660341 4753701 868 + 660341 4753731 868 + 660341 4753761 868 + 660341 4753791 868 + 660341 4753821 867 + 660341 4753851 867 + 660341 4753881 867 + 660341 4753911 865 + 660341 4753941 864 + 660341 4753971 862 + 660341 4754001 861 + 660341 4754031 861 + 660341 4754061 861 + 660341 4754091 863 + 660341 4754121 865 + 660341 4754151 867 + 660341 4754181 876 + 660341 4754211 899 + 660341 4754241 937 + 660341 4754271 953 + 660341 4754301 956 + 660341 4754331 958 + 660341 4754361 960 + 660341 4754391 960 + 660341 4754421 959 + 660341 4754451 959 + 660341 4754481 958 + 660341 4754511 958 + 660341 4754541 957 + 660371 4751301 993 + 660371 4751331 992 + 660371 4751361 992 + 660371 4751391 993 + 660371 4751421 993 + 660371 4751451 993 + 660371 4751481 992 + 660371 4751511 992 + 660371 4751541 992 + 660371 4751571 992 + 660371 4751601 992 + 660371 4751631 991 + 660371 4751661 992 + 660371 4751691 994 + 660371 4751721 996 + 660371 4751751 995 + 660371 4751781 994 + 660371 4751811 986 + 660371 4751841 968 + 660371 4751871 953 + 660371 4751901 938 + 660371 4751931 925 + 660371 4751961 914 + 660371 4751991 907 + 660371 4752021 901 + 660371 4752051 895 + 660371 4752081 890 + 660371 4752111 883 + 660371 4752141 880 + 660371 4752171 877 + 660371 4752201 876 + 660371 4752231 875 + 660371 4752261 874 + 660371 4752291 873 + 660371 4752321 872 + 660371 4752351 871 + 660371 4752381 870 + 660371 4752411 869 + 660371 4752441 868 + 660371 4752471 867 + 660371 4752501 866 + 660371 4752531 866 + 660371 4752561 865 + 660371 4752591 864 + 660371 4752621 862 + 660371 4752651 859 + 660371 4752681 844 + 660371 4752711 835 + 660371 4752741 825 + 660371 4752771 809 + 660371 4752801 809 + 660371 4752831 809 + 660371 4752861 809 + 660371 4752891 809 + 660371 4752921 809 + 660371 4752951 809 + 660371 4752981 809 + 660371 4753011 823 + 660371 4753041 840 + 660371 4753071 853 + 660371 4753101 856 + 660371 4753131 860 + 660371 4753161 863 + 660371 4753191 863 + 660371 4753221 863 + 660371 4753251 862 + 660371 4753281 864 + 660371 4753311 865 + 660371 4753341 866 + 660371 4753371 867 + 660371 4753401 867 + 660371 4753431 868 + 660371 4753461 868 + 660371 4753491 869 + 660371 4753521 869 + 660371 4753551 869 + 660371 4753581 868 + 660371 4753611 868 + 660371 4753641 869 + 660371 4753671 869 + 660371 4753701 869 + 660371 4753731 869 + 660371 4753761 869 + 660371 4753791 869 + 660371 4753821 868 + 660371 4753851 868 + 660371 4753881 869 + 660371 4753911 868 + 660371 4753941 866 + 660371 4753971 864 + 660371 4754001 863 + 660371 4754031 863 + 660371 4754061 862 + 660371 4754091 863 + 660371 4754121 865 + 660371 4754151 867 + 660371 4754181 875 + 660371 4754211 899 + 660371 4754241 937 + 660371 4754271 953 + 660371 4754301 956 + 660371 4754331 958 + 660371 4754361 960 + 660371 4754391 960 + 660371 4754421 959 + 660371 4754451 959 + 660371 4754481 958 + 660371 4754511 958 + 660371 4754541 957 + 660401 4751301 994 + 660401 4751331 994 + 660401 4751361 994 + 660401 4751391 994 + 660401 4751421 994 + 660401 4751451 994 + 660401 4751481 994 + 660401 4751511 994 + 660401 4751541 993 + 660401 4751571 994 + 660401 4751601 993 + 660401 4751631 992 + 660401 4751661 994 + 660401 4751691 994 + 660401 4751721 995 + 660401 4751751 994 + 660401 4751781 993 + 660401 4751811 984 + 660401 4751841 965 + 660401 4751871 951 + 660401 4751901 935 + 660401 4751931 924 + 660401 4751961 913 + 660401 4751991 906 + 660401 4752021 899 + 660401 4752051 893 + 660401 4752081 888 + 660401 4752111 884 + 660401 4752141 880 + 660401 4752171 877 + 660401 4752201 876 + 660401 4752231 875 + 660401 4752261 874 + 660401 4752291 873 + 660401 4752321 872 + 660401 4752351 871 + 660401 4752381 870 + 660401 4752411 869 + 660401 4752441 867 + 660401 4752471 867 + 660401 4752501 866 + 660401 4752531 866 + 660401 4752561 865 + 660401 4752591 864 + 660401 4752621 862 + 660401 4752651 857 + 660401 4752681 840 + 660401 4752711 830 + 660401 4752741 823 + 660401 4752771 809 + 660401 4752801 809 + 660401 4752831 809 + 660401 4752861 809 + 660401 4752891 809 + 660401 4752921 809 + 660401 4752951 809 + 660401 4752981 809 + 660401 4753011 818 + 660401 4753041 829 + 660401 4753071 843 + 660401 4753101 851 + 660401 4753131 856 + 660401 4753161 862 + 660401 4753191 862 + 660401 4753221 862 + 660401 4753251 861 + 660401 4753281 862 + 660401 4753311 863 + 660401 4753341 864 + 660401 4753371 866 + 660401 4753401 866 + 660401 4753431 868 + 660401 4753461 868 + 660401 4753491 868 + 660401 4753521 869 + 660401 4753551 869 + 660401 4753581 869 + 660401 4753611 869 + 660401 4753641 869 + 660401 4753671 869 + 660401 4753701 869 + 660401 4753731 869 + 660401 4753761 870 + 660401 4753791 869 + 660401 4753821 869 + 660401 4753851 869 + 660401 4753881 869 + 660401 4753911 869 + 660401 4753941 868 + 660401 4753971 866 + 660401 4754001 865 + 660401 4754031 864 + 660401 4754061 863 + 660401 4754091 864 + 660401 4754121 866 + 660401 4754151 867 + 660401 4754181 875 + 660401 4754211 899 + 660401 4754241 936 + 660401 4754271 953 + 660401 4754301 956 + 660401 4754331 958 + 660401 4754361 960 + 660401 4754391 960 + 660401 4754421 960 + 660401 4754451 959 + 660401 4754481 959 + 660401 4754511 958 + 660401 4754541 958 + 660431 4751301 996 + 660431 4751331 996 + 660431 4751361 995 + 660431 4751391 996 + 660431 4751421 996 + 660431 4751451 996 + 660431 4751481 995 + 660431 4751511 995 + 660431 4751541 995 + 660431 4751571 995 + 660431 4751601 994 + 660431 4751631 994 + 660431 4751661 995 + 660431 4751691 995 + 660431 4751721 995 + 660431 4751751 994 + 660431 4751781 993 + 660431 4751811 980 + 660431 4751841 961 + 660431 4751871 947 + 660431 4751901 931 + 660431 4751931 921 + 660431 4751961 913 + 660431 4751991 905 + 660431 4752021 897 + 660431 4752051 891 + 660431 4752081 886 + 660431 4752111 883 + 660431 4752141 880 + 660431 4752171 878 + 660431 4752201 876 + 660431 4752231 875 + 660431 4752261 874 + 660431 4752291 873 + 660431 4752321 871 + 660431 4752351 871 + 660431 4752381 870 + 660431 4752411 869 + 660431 4752441 866 + 660431 4752471 864 + 660431 4752501 864 + 660431 4752531 865 + 660431 4752561 865 + 660431 4752591 863 + 660431 4752621 862 + 660431 4752651 856 + 660431 4752681 838 + 660431 4752711 825 + 660431 4752741 809 + 660431 4752771 809 + 660431 4752801 809 + 660431 4752831 809 + 660431 4752861 809 + 660431 4752891 809 + 660431 4752921 809 + 660431 4752951 809 + 660431 4752981 809 + 660431 4753011 809 + 660431 4753041 823 + 660431 4753071 833 + 660431 4753101 839 + 660431 4753131 846 + 660431 4753161 857 + 660431 4753191 863 + 660431 4753221 862 + 660431 4753251 861 + 660431 4753281 861 + 660431 4753311 862 + 660431 4753341 863 + 660431 4753371 865 + 660431 4753401 865 + 660431 4753431 866 + 660431 4753461 868 + 660431 4753491 868 + 660431 4753521 869 + 660431 4753551 869 + 660431 4753581 869 + 660431 4753611 869 + 660431 4753641 869 + 660431 4753671 870 + 660431 4753701 870 + 660431 4753731 870 + 660431 4753761 870 + 660431 4753791 870 + 660431 4753821 869 + 660431 4753851 869 + 660431 4753881 869 + 660431 4753911 869 + 660431 4753941 869 + 660431 4753971 868 + 660431 4754001 867 + 660431 4754031 865 + 660431 4754061 864 + 660431 4754091 865 + 660431 4754121 866 + 660431 4754151 868 + 660431 4754181 875 + 660431 4754211 895 + 660431 4754241 935 + 660431 4754271 953 + 660431 4754301 956 + 660431 4754331 958 + 660431 4754361 960 + 660431 4754391 960 + 660431 4754421 960 + 660431 4754451 959 + 660431 4754481 959 + 660431 4754511 958 + 660431 4754541 958 + 660461 4751301 997 + 660461 4751331 997 + 660461 4751361 997 + 660461 4751391 997 + 660461 4751421 997 + 660461 4751451 997 + 660461 4751481 997 + 660461 4751511 997 + 660461 4751541 996 + 660461 4751571 996 + 660461 4751601 996 + 660461 4751631 995 + 660461 4751661 995 + 660461 4751691 994 + 660461 4751721 994 + 660461 4751751 993 + 660461 4751781 992 + 660461 4751811 977 + 660461 4751841 962 + 660461 4751871 948 + 660461 4751901 931 + 660461 4751931 918 + 660461 4751961 908 + 660461 4751991 900 + 660461 4752021 894 + 660461 4752051 890 + 660461 4752081 886 + 660461 4752111 883 + 660461 4752141 881 + 660461 4752171 878 + 660461 4752201 876 + 660461 4752231 875 + 660461 4752261 874 + 660461 4752291 873 + 660461 4752321 871 + 660461 4752351 870 + 660461 4752381 869 + 660461 4752411 867 + 660461 4752441 862 + 660461 4752471 862 + 660461 4752501 861 + 660461 4752531 862 + 660461 4752561 864 + 660461 4752591 864 + 660461 4752621 862 + 660461 4752651 853 + 660461 4752681 836 + 660461 4752711 822 + 660461 4752741 809 + 660461 4752771 809 + 660461 4752801 809 + 660461 4752831 809 + 660461 4752861 809 + 660461 4752891 809 + 660461 4752921 809 + 660461 4752951 809 + 660461 4752981 809 + 660461 4753011 809 + 660461 4753041 809 + 660461 4753071 818 + 660461 4753101 824 + 660461 4753131 832 + 660461 4753161 846 + 660461 4753191 857 + 660461 4753221 861 + 660461 4753251 861 + 660461 4753281 858 + 660461 4753311 861 + 660461 4753341 862 + 660461 4753371 865 + 660461 4753401 866 + 660461 4753431 869 + 660461 4753461 868 + 660461 4753491 870 + 660461 4753521 869 + 660461 4753551 869 + 660461 4753581 870 + 660461 4753611 869 + 660461 4753641 870 + 660461 4753671 870 + 660461 4753701 870 + 660461 4753731 870 + 660461 4753761 870 + 660461 4753791 870 + 660461 4753821 870 + 660461 4753851 870 + 660461 4753881 869 + 660461 4753911 869 + 660461 4753941 869 + 660461 4753971 869 + 660461 4754001 868 + 660461 4754031 867 + 660461 4754061 865 + 660461 4754091 866 + 660461 4754121 866 + 660461 4754151 868 + 660461 4754181 875 + 660461 4754211 897 + 660461 4754241 933 + 660461 4754271 953 + 660461 4754301 955 + 660461 4754331 958 + 660461 4754361 960 + 660461 4754391 960 + 660461 4754421 960 + 660461 4754451 959 + 660461 4754481 959 + 660461 4754511 958 + 660461 4754541 958 + 660491 4751301 998 + 660491 4751331 998 + 660491 4751361 998 + 660491 4751391 998 + 660491 4751421 998 + 660491 4751451 998 + 660491 4751481 998 + 660491 4751511 998 + 660491 4751541 997 + 660491 4751571 997 + 660491 4751601 997 + 660491 4751631 996 + 660491 4751661 996 + 660491 4751691 995 + 660491 4751721 994 + 660491 4751751 993 + 660491 4751781 992 + 660491 4751811 983 + 660491 4751841 967 + 660491 4751871 948 + 660491 4751901 932 + 660491 4751931 919 + 660491 4751961 910 + 660491 4751991 902 + 660491 4752021 893 + 660491 4752051 889 + 660491 4752081 886 + 660491 4752111 884 + 660491 4752141 881 + 660491 4752171 878 + 660491 4752201 876 + 660491 4752231 875 + 660491 4752261 874 + 660491 4752291 873 + 660491 4752321 871 + 660491 4752351 870 + 660491 4752381 869 + 660491 4752411 866 + 660491 4752441 862 + 660491 4752471 860 + 660491 4752501 859 + 660491 4752531 861 + 660491 4752561 863 + 660491 4752591 863 + 660491 4752621 863 + 660491 4752651 854 + 660491 4752681 835 + 660491 4752711 820 + 660491 4752741 813 + 660491 4752771 817 + 660491 4752801 809 + 660491 4752831 809 + 660491 4752861 809 + 660491 4752891 809 + 660491 4752921 809 + 660491 4752951 809 + 660491 4752981 809 + 660491 4753011 809 + 660491 4753041 809 + 660491 4753071 809 + 660491 4753101 809 + 660491 4753131 820 + 660491 4753161 829 + 660491 4753191 844 + 660491 4753221 854 + 660491 4753251 856 + 660491 4753281 855 + 660491 4753311 860 + 660491 4753341 863 + 660491 4753371 866 + 660491 4753401 869 + 660491 4753431 869 + 660491 4753461 869 + 660491 4753491 869 + 660491 4753521 870 + 660491 4753551 870 + 660491 4753581 870 + 660491 4753611 871 + 660491 4753641 870 + 660491 4753671 871 + 660491 4753701 871 + 660491 4753731 871 + 660491 4753761 871 + 660491 4753791 871 + 660491 4753821 871 + 660491 4753851 871 + 660491 4753881 871 + 660491 4753911 871 + 660491 4753941 870 + 660491 4753971 870 + 660491 4754001 869 + 660491 4754031 868 + 660491 4754061 866 + 660491 4754091 866 + 660491 4754121 866 + 660491 4754151 868 + 660491 4754181 875 + 660491 4754211 898 + 660491 4754241 930 + 660491 4754271 953 + 660491 4754301 955 + 660491 4754331 958 + 660491 4754361 960 + 660491 4754391 960 + 660491 4754421 960 + 660491 4754451 959 + 660491 4754481 959 + 660491 4754511 958 + 660491 4754541 958 + 660521 4751301 999 + 660521 4751331 999 + 660521 4751361 999 + 660521 4751391 999 + 660521 4751421 999 + 660521 4751451 999 + 660521 4751481 999 + 660521 4751511 999 + 660521 4751541 998 + 660521 4751571 997 + 660521 4751601 997 + 660521 4751631 996 + 660521 4751661 996 + 660521 4751691 995 + 660521 4751721 994 + 660521 4751751 993 + 660521 4751781 993 + 660521 4751811 978 + 660521 4751841 963 + 660521 4751871 946 + 660521 4751901 930 + 660521 4751931 919 + 660521 4751961 910 + 660521 4751991 902 + 660521 4752021 894 + 660521 4752051 889 + 660521 4752081 885 + 660521 4752111 883 + 660521 4752141 880 + 660521 4752171 878 + 660521 4752201 876 + 660521 4752231 875 + 660521 4752261 874 + 660521 4752291 872 + 660521 4752321 871 + 660521 4752351 870 + 660521 4752381 869 + 660521 4752411 866 + 660521 4752441 864 + 660521 4752471 862 + 660521 4752501 856 + 660521 4752531 859 + 660521 4752561 861 + 660521 4752591 861 + 660521 4752621 863 + 660521 4752651 854 + 660521 4752681 836 + 660521 4752711 819 + 660521 4752741 820 + 660521 4752771 828 + 660521 4752801 821 + 660521 4752831 809 + 660521 4752861 809 + 660521 4752891 809 + 660521 4752921 809 + 660521 4752951 809 + 660521 4752981 809 + 660521 4753011 809 + 660521 4753041 809 + 660521 4753071 809 + 660521 4753101 809 + 660521 4753131 809 + 660521 4753161 809 + 660521 4753191 826 + 660521 4753221 838 + 660521 4753251 843 + 660521 4753281 849 + 660521 4753311 860 + 660521 4753341 862 + 660521 4753371 865 + 660521 4753401 867 + 660521 4753431 869 + 660521 4753461 868 + 660521 4753491 869 + 660521 4753521 869 + 660521 4753551 870 + 660521 4753581 870 + 660521 4753611 871 + 660521 4753641 870 + 660521 4753671 871 + 660521 4753701 871 + 660521 4753731 871 + 660521 4753761 872 + 660521 4753791 872 + 660521 4753821 872 + 660521 4753851 871 + 660521 4753881 871 + 660521 4753911 871 + 660521 4753941 871 + 660521 4753971 870 + 660521 4754001 869 + 660521 4754031 868 + 660521 4754061 867 + 660521 4754091 866 + 660521 4754121 867 + 660521 4754151 868 + 660521 4754181 873 + 660521 4754211 894 + 660521 4754241 926 + 660521 4754271 953 + 660521 4754301 955 + 660521 4754331 957 + 660521 4754361 960 + 660521 4754391 960 + 660521 4754421 960 + 660521 4754451 959 + 660521 4754481 959 + 660521 4754511 958 + 660521 4754541 958 + 660551 4751301 1001 + 660551 4751331 1000 + 660551 4751361 1000 + 660551 4751391 1000 + 660551 4751421 1000 + 660551 4751451 1000 + 660551 4751481 1000 + 660551 4751511 1000 + 660551 4751541 999 + 660551 4751571 998 + 660551 4751601 997 + 660551 4751631 997 + 660551 4751661 996 + 660551 4751691 996 + 660551 4751721 995 + 660551 4751751 993 + 660551 4751781 992 + 660551 4751811 977 + 660551 4751841 959 + 660551 4751871 945 + 660551 4751901 930 + 660551 4751931 915 + 660551 4751961 907 + 660551 4751991 900 + 660551 4752021 891 + 660551 4752051 887 + 660551 4752081 884 + 660551 4752111 882 + 660551 4752141 880 + 660551 4752171 877 + 660551 4752201 876 + 660551 4752231 875 + 660551 4752261 874 + 660551 4752291 872 + 660551 4752321 870 + 660551 4752351 869 + 660551 4752381 868 + 660551 4752411 866 + 660551 4752441 864 + 660551 4752471 862 + 660551 4752501 855 + 660551 4752531 854 + 660551 4752561 855 + 660551 4752591 852 + 660551 4752621 851 + 660551 4752651 847 + 660551 4752681 835 + 660551 4752711 821 + 660551 4752741 830 + 660551 4752771 837 + 660551 4752801 825 + 660551 4752831 814 + 660551 4752861 809 + 660551 4752891 809 + 660551 4752921 809 + 660551 4752951 809 + 660551 4752981 809 + 660551 4753011 809 + 660551 4753041 809 + 660551 4753071 809 + 660551 4753101 809 + 660551 4753131 809 + 660551 4753161 809 + 660551 4753191 817 + 660551 4753221 824 + 660551 4753251 831 + 660551 4753281 838 + 660551 4753311 854 + 660551 4753341 862 + 660551 4753371 864 + 660551 4753401 865 + 660551 4753431 867 + 660551 4753461 867 + 660551 4753491 868 + 660551 4753521 869 + 660551 4753551 870 + 660551 4753581 870 + 660551 4753611 871 + 660551 4753641 871 + 660551 4753671 871 + 660551 4753701 871 + 660551 4753731 871 + 660551 4753761 871 + 660551 4753791 871 + 660551 4753821 872 + 660551 4753851 872 + 660551 4753881 872 + 660551 4753911 872 + 660551 4753941 871 + 660551 4753971 871 + 660551 4754001 870 + 660551 4754031 869 + 660551 4754061 867 + 660551 4754091 866 + 660551 4754121 867 + 660551 4754151 867 + 660551 4754181 872 + 660551 4754211 889 + 660551 4754241 918 + 660551 4754271 951 + 660551 4754301 955 + 660551 4754331 957 + 660551 4754361 959 + 660551 4754391 960 + 660551 4754421 960 + 660551 4754451 959 + 660551 4754481 959 + 660551 4754511 958 + 660551 4754541 958 + 660581 4751301 1002 + 660581 4751331 1001 + 660581 4751361 1001 + 660581 4751391 1001 + 660581 4751421 1001 + 660581 4751451 1001 + 660581 4751481 1001 + 660581 4751511 1000 + 660581 4751541 999 + 660581 4751571 999 + 660581 4751601 998 + 660581 4751631 997 + 660581 4751661 997 + 660581 4751691 996 + 660581 4751721 995 + 660581 4751751 993 + 660581 4751781 991 + 660581 4751811 974 + 660581 4751841 957 + 660581 4751871 941 + 660581 4751901 926 + 660581 4751931 913 + 660581 4751961 905 + 660581 4751991 896 + 660581 4752021 890 + 660581 4752051 886 + 660581 4752081 884 + 660581 4752111 882 + 660581 4752141 880 + 660581 4752171 878 + 660581 4752201 877 + 660581 4752231 876 + 660581 4752261 874 + 660581 4752291 871 + 660581 4752321 870 + 660581 4752351 868 + 660581 4752381 866 + 660581 4752411 864 + 660581 4752441 862 + 660581 4752471 858 + 660581 4752501 852 + 660581 4752531 844 + 660581 4752561 843 + 660581 4752591 838 + 660581 4752621 837 + 660581 4752651 836 + 660581 4752681 830 + 660581 4752711 827 + 660581 4752741 843 + 660581 4752771 845 + 660581 4752801 829 + 660581 4752831 816 + 660581 4752861 809 + 660581 4752891 809 + 660581 4752921 809 + 660581 4752951 809 + 660581 4752981 809 + 660581 4753011 809 + 660581 4753041 809 + 660581 4753071 809 + 660581 4753101 809 + 660581 4753131 809 + 660581 4753161 809 + 660581 4753191 809 + 660581 4753221 813 + 660581 4753251 820 + 660581 4753281 832 + 660581 4753311 846 + 660581 4753341 861 + 660581 4753371 863 + 660581 4753401 864 + 660581 4753431 866 + 660581 4753461 867 + 660581 4753491 868 + 660581 4753521 869 + 660581 4753551 870 + 660581 4753581 870 + 660581 4753611 872 + 660581 4753641 871 + 660581 4753671 871 + 660581 4753701 872 + 660581 4753731 871 + 660581 4753761 871 + 660581 4753791 871 + 660581 4753821 871 + 660581 4753851 871 + 660581 4753881 871 + 660581 4753911 872 + 660581 4753941 872 + 660581 4753971 871 + 660581 4754001 869 + 660581 4754031 869 + 660581 4754061 867 + 660581 4754091 867 + 660581 4754121 867 + 660581 4754151 867 + 660581 4754181 871 + 660581 4754211 887 + 660581 4754241 925 + 660581 4754271 949 + 660581 4754301 955 + 660581 4754331 958 + 660581 4754361 959 + 660581 4754391 960 + 660581 4754421 960 + 660581 4754451 959 + 660581 4754481 959 + 660581 4754511 959 + 660581 4754541 958 + 660611 4751301 1002 + 660611 4751331 1002 + 660611 4751361 1003 + 660611 4751391 1002 + 660611 4751421 1003 + 660611 4751451 1002 + 660611 4751481 1002 + 660611 4751511 1001 + 660611 4751541 1000 + 660611 4751571 999 + 660611 4751601 999 + 660611 4751631 998 + 660611 4751661 997 + 660611 4751691 996 + 660611 4751721 994 + 660611 4751751 993 + 660611 4751781 986 + 660611 4751811 968 + 660611 4751841 948 + 660611 4751871 939 + 660611 4751901 924 + 660611 4751931 912 + 660611 4751961 903 + 660611 4751991 892 + 660611 4752021 889 + 660611 4752051 887 + 660611 4752081 884 + 660611 4752111 882 + 660611 4752141 881 + 660611 4752171 879 + 660611 4752201 878 + 660611 4752231 876 + 660611 4752261 874 + 660611 4752291 871 + 660611 4752321 869 + 660611 4752351 866 + 660611 4752381 863 + 660611 4752411 861 + 660611 4752441 856 + 660611 4752471 849 + 660611 4752501 844 + 660611 4752531 839 + 660611 4752561 838 + 660611 4752591 838 + 660611 4752621 837 + 660611 4752651 830 + 660611 4752681 828 + 660611 4752711 835 + 660611 4752741 850 + 660611 4752771 850 + 660611 4752801 831 + 660611 4752831 820 + 660611 4752861 818 + 660611 4752891 809 + 660611 4752921 809 + 660611 4752951 809 + 660611 4752981 809 + 660611 4753011 809 + 660611 4753041 809 + 660611 4753071 809 + 660611 4753101 809 + 660611 4753131 809 + 660611 4753161 809 + 660611 4753191 809 + 660611 4753221 809 + 660611 4753251 809 + 660611 4753281 825 + 660611 4753311 839 + 660611 4753341 854 + 660611 4753371 860 + 660611 4753401 862 + 660611 4753431 867 + 660611 4753461 869 + 660611 4753491 869 + 660611 4753521 869 + 660611 4753551 870 + 660611 4753581 870 + 660611 4753611 871 + 660611 4753641 871 + 660611 4753671 872 + 660611 4753701 872 + 660611 4753731 872 + 660611 4753761 872 + 660611 4753791 871 + 660611 4753821 871 + 660611 4753851 871 + 660611 4753881 871 + 660611 4753911 871 + 660611 4753941 871 + 660611 4753971 871 + 660611 4754001 869 + 660611 4754031 869 + 660611 4754061 867 + 660611 4754091 867 + 660611 4754121 867 + 660611 4754151 867 + 660611 4754181 872 + 660611 4754211 886 + 660611 4754241 912 + 660611 4754271 941 + 660611 4754301 954 + 660611 4754331 959 + 660611 4754361 960 + 660611 4754391 960 + 660611 4754421 960 + 660611 4754451 960 + 660611 4754481 959 + 660611 4754511 959 + 660611 4754541 958 + 660641 4751301 1002 + 660641 4751331 1003 + 660641 4751361 1003 + 660641 4751391 1004 + 660641 4751421 1004 + 660641 4751451 1004 + 660641 4751481 1003 + 660641 4751511 1002 + 660641 4751541 1001 + 660641 4751571 1000 + 660641 4751601 1000 + 660641 4751631 998 + 660641 4751661 997 + 660641 4751691 996 + 660641 4751721 994 + 660641 4751751 992 + 660641 4751781 978 + 660641 4751811 965 + 660641 4751841 949 + 660641 4751871 939 + 660641 4751901 926 + 660641 4751931 914 + 660641 4751961 904 + 660641 4751991 893 + 660641 4752021 890 + 660641 4752051 887 + 660641 4752081 884 + 660641 4752111 882 + 660641 4752141 881 + 660641 4752171 880 + 660641 4752201 878 + 660641 4752231 876 + 660641 4752261 874 + 660641 4752291 871 + 660641 4752321 868 + 660641 4752351 863 + 660641 4752381 861 + 660641 4752411 854 + 660641 4752441 851 + 660641 4752471 846 + 660641 4752501 842 + 660641 4752531 846 + 660641 4752561 852 + 660641 4752591 851 + 660641 4752621 843 + 660641 4752651 832 + 660641 4752681 836 + 660641 4752711 846 + 660641 4752741 855 + 660641 4752771 852 + 660641 4752801 832 + 660641 4752831 828 + 660641 4752861 825 + 660641 4752891 818 + 660641 4752921 809 + 660641 4752951 809 + 660641 4752981 809 + 660641 4753011 809 + 660641 4753041 809 + 660641 4753071 809 + 660641 4753101 809 + 660641 4753131 809 + 660641 4753161 809 + 660641 4753191 809 + 660641 4753221 809 + 660641 4753251 809 + 660641 4753281 815 + 660641 4753311 831 + 660641 4753341 840 + 660641 4753371 850 + 660641 4753401 859 + 660641 4753431 865 + 660641 4753461 869 + 660641 4753491 871 + 660641 4753521 870 + 660641 4753551 871 + 660641 4753581 871 + 660641 4753611 871 + 660641 4753641 871 + 660641 4753671 872 + 660641 4753701 872 + 660641 4753731 872 + 660641 4753761 873 + 660641 4753791 873 + 660641 4753821 873 + 660641 4753851 872 + 660641 4753881 871 + 660641 4753911 871 + 660641 4753941 870 + 660641 4753971 870 + 660641 4754001 870 + 660641 4754031 869 + 660641 4754061 867 + 660641 4754091 867 + 660641 4754121 867 + 660641 4754151 867 + 660641 4754181 872 + 660641 4754211 885 + 660641 4754241 907 + 660641 4754271 943 + 660641 4754301 958 + 660641 4754331 960 + 660641 4754361 960 + 660641 4754391 960 + 660641 4754421 960 + 660641 4754451 960 + 660641 4754481 959 + 660641 4754511 959 + 660641 4754541 958 + 660671 4751301 1002 + 660671 4751331 1004 + 660671 4751361 1004 + 660671 4751391 1004 + 660671 4751421 1005 + 660671 4751451 1005 + 660671 4751481 1005 + 660671 4751511 1004 + 660671 4751541 1003 + 660671 4751571 1001 + 660671 4751601 1000 + 660671 4751631 999 + 660671 4751661 998 + 660671 4751691 996 + 660671 4751721 995 + 660671 4751751 992 + 660671 4751781 981 + 660671 4751811 967 + 660671 4751841 955 + 660671 4751871 945 + 660671 4751901 930 + 660671 4751931 915 + 660671 4751961 905 + 660671 4751991 897 + 660671 4752021 891 + 660671 4752051 888 + 660671 4752081 885 + 660671 4752111 883 + 660671 4752141 881 + 660671 4752171 880 + 660671 4752201 878 + 660671 4752231 877 + 660671 4752261 874 + 660671 4752291 870 + 660671 4752321 867 + 660671 4752351 863 + 660671 4752381 860 + 660671 4752411 862 + 660671 4752441 853 + 660671 4752471 844 + 660671 4752501 852 + 660671 4752531 859 + 660671 4752561 863 + 660671 4752591 856 + 660671 4752621 845 + 660671 4752651 838 + 660671 4752681 844 + 660671 4752711 854 + 660671 4752741 858 + 660671 4752771 850 + 660671 4752801 836 + 660671 4752831 840 + 660671 4752861 834 + 660671 4752891 828 + 660671 4752921 809 + 660671 4752951 809 + 660671 4752981 809 + 660671 4753011 809 + 660671 4753041 809 + 660671 4753071 809 + 660671 4753101 809 + 660671 4753131 809 + 660671 4753161 809 + 660671 4753191 809 + 660671 4753221 809 + 660671 4753251 809 + 660671 4753281 809 + 660671 4753311 818 + 660671 4753341 829 + 660671 4753371 840 + 660671 4753401 853 + 660671 4753431 862 + 660671 4753461 868 + 660671 4753491 869 + 660671 4753521 871 + 660671 4753551 871 + 660671 4753581 871 + 660671 4753611 871 + 660671 4753641 872 + 660671 4753671 872 + 660671 4753701 873 + 660671 4753731 873 + 660671 4753761 874 + 660671 4753791 874 + 660671 4753821 873 + 660671 4753851 873 + 660671 4753881 873 + 660671 4753911 872 + 660671 4753941 871 + 660671 4753971 870 + 660671 4754001 869 + 660671 4754031 869 + 660671 4754061 867 + 660671 4754091 867 + 660671 4754121 867 + 660671 4754151 867 + 660671 4754181 871 + 660671 4754211 886 + 660671 4754241 910 + 660671 4754271 944 + 660671 4754301 961 + 660671 4754331 960 + 660671 4754361 960 + 660671 4754391 960 + 660671 4754421 960 + 660671 4754451 960 + 660671 4754481 959 + 660671 4754511 958 + 660671 4754541 958 + 660701 4751301 1000 + 660701 4751331 1003 + 660701 4751361 1005 + 660701 4751391 1005 + 660701 4751421 1006 + 660701 4751451 1006 + 660701 4751481 1006 + 660701 4751511 1005 + 660701 4751541 1004 + 660701 4751571 1002 + 660701 4751601 1001 + 660701 4751631 1000 + 660701 4751661 998 + 660701 4751691 997 + 660701 4751721 996 + 660701 4751751 993 + 660701 4751781 981 + 660701 4751811 967 + 660701 4751841 955 + 660701 4751871 943 + 660701 4751901 927 + 660701 4751931 915 + 660701 4751961 904 + 660701 4751991 897 + 660701 4752021 892 + 660701 4752051 889 + 660701 4752081 886 + 660701 4752111 884 + 660701 4752141 882 + 660701 4752171 880 + 660701 4752201 878 + 660701 4752231 877 + 660701 4752261 874 + 660701 4752291 870 + 660701 4752321 867 + 660701 4752351 865 + 660701 4752381 863 + 660701 4752411 859 + 660701 4752441 847 + 660701 4752471 852 + 660701 4752501 861 + 660701 4752531 864 + 660701 4752561 865 + 660701 4752591 856 + 660701 4752621 843 + 660701 4752651 841 + 660701 4752681 847 + 660701 4752711 861 + 660701 4752741 859 + 660701 4752771 850 + 660701 4752801 846 + 660701 4752831 849 + 660701 4752861 849 + 660701 4752891 832 + 660701 4752921 809 + 660701 4752951 809 + 660701 4752981 809 + 660701 4753011 809 + 660701 4753041 809 + 660701 4753071 820 + 660701 4753101 818 + 660701 4753131 809 + 660701 4753161 809 + 660701 4753191 809 + 660701 4753221 809 + 660701 4753251 809 + 660701 4753281 809 + 660701 4753311 809 + 660701 4753341 819 + 660701 4753371 832 + 660701 4753401 844 + 660701 4753431 853 + 660701 4753461 861 + 660701 4753491 865 + 660701 4753521 869 + 660701 4753551 869 + 660701 4753581 870 + 660701 4753611 870 + 660701 4753641 872 + 660701 4753671 872 + 660701 4753701 873 + 660701 4753731 874 + 660701 4753761 874 + 660701 4753791 874 + 660701 4753821 874 + 660701 4753851 874 + 660701 4753881 874 + 660701 4753911 874 + 660701 4753941 873 + 660701 4753971 870 + 660701 4754001 869 + 660701 4754031 868 + 660701 4754061 867 + 660701 4754091 867 + 660701 4754121 868 + 660701 4754151 867 + 660701 4754181 871 + 660701 4754211 888 + 660701 4754241 907 + 660701 4754271 940 + 660701 4754301 955 + 660701 4754331 957 + 660701 4754361 959 + 660701 4754391 960 + 660701 4754421 960 + 660701 4754451 959 + 660701 4754481 959 + 660701 4754511 958 + 660701 4754541 958 + 660731 4751301 998 + 660731 4751331 1003 + 660731 4751361 1005 + 660731 4751391 1006 + 660731 4751421 1006 + 660731 4751451 1006 + 660731 4751481 1006 + 660731 4751511 1006 + 660731 4751541 1004 + 660731 4751571 1002 + 660731 4751601 1001 + 660731 4751631 1000 + 660731 4751661 998 + 660731 4751691 999 + 660731 4751721 997 + 660731 4751751 993 + 660731 4751781 978 + 660731 4751811 964 + 660731 4751841 953 + 660731 4751871 941 + 660731 4751901 928 + 660731 4751931 913 + 660731 4751961 903 + 660731 4751991 897 + 660731 4752021 892 + 660731 4752051 889 + 660731 4752081 886 + 660731 4752111 884 + 660731 4752141 882 + 660731 4752171 880 + 660731 4752201 878 + 660731 4752231 876 + 660731 4752261 874 + 660731 4752291 871 + 660731 4752321 869 + 660731 4752351 866 + 660731 4752381 862 + 660731 4752411 853 + 660731 4752441 852 + 660731 4752471 860 + 660731 4752501 864 + 660731 4752531 867 + 660731 4752561 863 + 660731 4752591 852 + 660731 4752621 842 + 660731 4752651 843 + 660731 4752681 850 + 660731 4752711 863 + 660731 4752741 859 + 660731 4752771 853 + 660731 4752801 859 + 660731 4752831 862 + 660731 4752861 848 + 660731 4752891 825 + 660731 4752921 809 + 660731 4752951 809 + 660731 4752981 809 + 660731 4753011 809 + 660731 4753041 831 + 660731 4753071 839 + 660731 4753101 835 + 660731 4753131 831 + 660731 4753161 809 + 660731 4753191 809 + 660731 4753221 809 + 660731 4753251 809 + 660731 4753281 809 + 660731 4753311 809 + 660731 4753341 809 + 660731 4753371 826 + 660731 4753401 833 + 660731 4753431 845 + 660731 4753461 855 + 660731 4753491 861 + 660731 4753521 865 + 660731 4753551 867 + 660731 4753581 868 + 660731 4753611 871 + 660731 4753641 873 + 660731 4753671 873 + 660731 4753701 873 + 660731 4753731 874 + 660731 4753761 874 + 660731 4753791 875 + 660731 4753821 875 + 660731 4753851 875 + 660731 4753881 875 + 660731 4753911 875 + 660731 4753941 875 + 660731 4753971 873 + 660731 4754001 870 + 660731 4754031 869 + 660731 4754061 868 + 660731 4754091 867 + 660731 4754121 868 + 660731 4754151 868 + 660731 4754181 874 + 660731 4754211 889 + 660731 4754241 904 + 660731 4754271 937 + 660731 4754301 954 + 660731 4754331 956 + 660731 4754361 959 + 660731 4754391 960 + 660731 4754421 960 + 660731 4754451 959 + 660731 4754481 959 + 660731 4754511 958 + 660731 4754541 958 + 660761 4751301 1002 + 660761 4751331 1004 + 660761 4751361 1006 + 660761 4751391 1006 + 660761 4751421 1006 + 660761 4751451 1006 + 660761 4751481 1007 + 660761 4751511 1006 + 660761 4751541 1004 + 660761 4751571 1003 + 660761 4751601 1002 + 660761 4751631 1001 + 660761 4751661 1000 + 660761 4751691 1000 + 660761 4751721 997 + 660761 4751751 989 + 660761 4751781 972 + 660761 4751811 960 + 660761 4751841 949 + 660761 4751871 939 + 660761 4751901 924 + 660761 4751931 912 + 660761 4751961 901 + 660761 4751991 897 + 660761 4752021 892 + 660761 4752051 891 + 660761 4752081 886 + 660761 4752111 884 + 660761 4752141 882 + 660761 4752171 881 + 660761 4752201 879 + 660761 4752231 877 + 660761 4752261 877 + 660761 4752291 873 + 660761 4752321 869 + 660761 4752351 866 + 660761 4752381 862 + 660761 4752411 852 + 660761 4752441 855 + 660761 4752471 863 + 660761 4752501 866 + 660761 4752531 864 + 660761 4752561 856 + 660761 4752591 846 + 660761 4752621 842 + 660761 4752651 847 + 660761 4752681 854 + 660761 4752711 860 + 660761 4752741 859 + 660761 4752771 860 + 660761 4752801 863 + 660761 4752831 862 + 660761 4752861 845 + 660761 4752891 823 + 660761 4752921 809 + 660761 4752951 809 + 660761 4752981 809 + 660761 4753011 809 + 660761 4753041 835 + 660761 4753071 854 + 660761 4753101 847 + 660761 4753131 839 + 660761 4753161 809 + 660761 4753191 809 + 660761 4753221 809 + 660761 4753251 809 + 660761 4753281 809 + 660761 4753311 809 + 660761 4753341 809 + 660761 4753371 818 + 660761 4753401 826 + 660761 4753431 835 + 660761 4753461 848 + 660761 4753491 857 + 660761 4753521 861 + 660761 4753551 865 + 660761 4753581 869 + 660761 4753611 870 + 660761 4753641 871 + 660761 4753671 873 + 660761 4753701 873 + 660761 4753731 874 + 660761 4753761 874 + 660761 4753791 875 + 660761 4753821 875 + 660761 4753851 875 + 660761 4753881 875 + 660761 4753911 875 + 660761 4753941 875 + 660761 4753971 875 + 660761 4754001 873 + 660761 4754031 871 + 660761 4754061 869 + 660761 4754091 868 + 660761 4754121 868 + 660761 4754151 870 + 660761 4754181 876 + 660761 4754211 890 + 660761 4754241 905 + 660761 4754271 936 + 660761 4754301 953 + 660761 4754331 956 + 660761 4754361 959 + 660761 4754391 960 + 660761 4754421 960 + 660761 4754451 959 + 660761 4754481 959 + 660761 4754511 959 + 660761 4754541 959 + 660791 4751301 1004 + 660791 4751331 1005 + 660791 4751361 1006 + 660791 4751391 1006 + 660791 4751421 1007 + 660791 4751451 1006 + 660791 4751481 1006 + 660791 4751511 1005 + 660791 4751541 1003 + 660791 4751571 1003 + 660791 4751601 1002 + 660791 4751631 1001 + 660791 4751661 1001 + 660791 4751691 999 + 660791 4751721 993 + 660791 4751751 980 + 660791 4751781 966 + 660791 4751811 956 + 660791 4751841 943 + 660791 4751871 935 + 660791 4751901 923 + 660791 4751931 908 + 660791 4751961 903 + 660791 4751991 901 + 660791 4752021 895 + 660791 4752051 890 + 660791 4752081 888 + 660791 4752111 885 + 660791 4752141 883 + 660791 4752171 881 + 660791 4752201 879 + 660791 4752231 878 + 660791 4752261 877 + 660791 4752291 874 + 660791 4752321 870 + 660791 4752351 866 + 660791 4752381 862 + 660791 4752411 853 + 660791 4752441 861 + 660791 4752471 865 + 660791 4752501 867 + 660791 4752531 863 + 660791 4752561 854 + 660791 4752591 844 + 660791 4752621 843 + 660791 4752651 849 + 660791 4752681 861 + 660791 4752711 861 + 660791 4752741 859 + 660791 4752771 861 + 660791 4752801 864 + 660791 4752831 863 + 660791 4752861 849 + 660791 4752891 828 + 660791 4752921 809 + 660791 4752951 809 + 660791 4752981 809 + 660791 4753011 821 + 660791 4753041 835 + 660791 4753071 852 + 660791 4753101 846 + 660791 4753131 836 + 660791 4753161 823 + 660791 4753191 809 + 660791 4753221 809 + 660791 4753251 809 + 660791 4753281 809 + 660791 4753311 809 + 660791 4753341 809 + 660791 4753371 809 + 660791 4753401 819 + 660791 4753431 830 + 660791 4753461 840 + 660791 4753491 854 + 660791 4753521 855 + 660791 4753551 862 + 660791 4753581 869 + 660791 4753611 870 + 660791 4753641 870 + 660791 4753671 871 + 660791 4753701 872 + 660791 4753731 873 + 660791 4753761 874 + 660791 4753791 875 + 660791 4753821 875 + 660791 4753851 876 + 660791 4753881 876 + 660791 4753911 876 + 660791 4753941 876 + 660791 4753971 876 + 660791 4754001 876 + 660791 4754031 873 + 660791 4754061 870 + 660791 4754091 869 + 660791 4754121 868 + 660791 4754151 868 + 660791 4754181 877 + 660791 4754211 891 + 660791 4754241 907 + 660791 4754271 937 + 660791 4754301 955 + 660791 4754331 957 + 660791 4754361 959 + 660791 4754391 960 + 660791 4754421 960 + 660791 4754451 959 + 660791 4754481 959 + 660791 4754511 959 + 660791 4754541 959 + 660821 4751301 1005 + 660821 4751331 1006 + 660821 4751361 1007 + 660821 4751391 1007 + 660821 4751421 1008 + 660821 4751451 1007 + 660821 4751481 1007 + 660821 4751511 1006 + 660821 4751541 1003 + 660821 4751571 1003 + 660821 4751601 1002 + 660821 4751631 1001 + 660821 4751661 1000 + 660821 4751691 995 + 660821 4751721 983 + 660821 4751751 969 + 660821 4751781 960 + 660821 4751811 950 + 660821 4751841 941 + 660821 4751871 933 + 660821 4751901 922 + 660821 4751931 914 + 660821 4751961 909 + 660821 4751991 900 + 660821 4752021 896 + 660821 4752051 893 + 660821 4752081 890 + 660821 4752111 886 + 660821 4752141 883 + 660821 4752171 882 + 660821 4752201 880 + 660821 4752231 878 + 660821 4752261 876 + 660821 4752291 874 + 660821 4752321 870 + 660821 4752351 865 + 660821 4752381 861 + 660821 4752411 858 + 660821 4752441 866 + 660821 4752471 868 + 660821 4752501 866 + 660821 4752531 863 + 660821 4752561 853 + 660821 4752591 843 + 660821 4752621 844 + 660821 4752651 851 + 660821 4752681 861 + 660821 4752711 861 + 660821 4752741 861 + 660821 4752771 861 + 660821 4752801 863 + 660821 4752831 863 + 660821 4752861 853 + 660821 4752891 832 + 660821 4752921 809 + 660821 4752951 809 + 660821 4752981 809 + 660821 4753011 820 + 660821 4753041 839 + 660821 4753071 850 + 660821 4753101 845 + 660821 4753131 835 + 660821 4753161 824 + 660821 4753191 819 + 660821 4753221 809 + 660821 4753251 809 + 660821 4753281 809 + 660821 4753311 809 + 660821 4753341 809 + 660821 4753371 809 + 660821 4753401 809 + 660821 4753431 823 + 660821 4753461 832 + 660821 4753491 839 + 660821 4753521 846 + 660821 4753551 859 + 660821 4753581 868 + 660821 4753611 870 + 660821 4753641 871 + 660821 4753671 871 + 660821 4753701 872 + 660821 4753731 873 + 660821 4753761 874 + 660821 4753791 875 + 660821 4753821 876 + 660821 4753851 876 + 660821 4753881 876 + 660821 4753911 877 + 660821 4753941 877 + 660821 4753971 878 + 660821 4754001 877 + 660821 4754031 874 + 660821 4754061 872 + 660821 4754091 870 + 660821 4754121 868 + 660821 4754151 868 + 660821 4754181 879 + 660821 4754211 894 + 660821 4754241 910 + 660821 4754271 938 + 660821 4754301 960 + 660821 4754331 960 + 660821 4754361 958 + 660821 4754391 960 + 660821 4754421 960 + 660821 4754451 960 + 660821 4754481 959 + 660821 4754511 959 + 660821 4754541 959 + 660851 4751301 1006 + 660851 4751331 1006 + 660851 4751361 1008 + 660851 4751391 1010 + 660851 4751421 1011 + 660851 4751451 1010 + 660851 4751481 1008 + 660851 4751511 1007 + 660851 4751541 1004 + 660851 4751571 1002 + 660851 4751601 1001 + 660851 4751631 1000 + 660851 4751661 998 + 660851 4751691 983 + 660851 4751721 971 + 660851 4751751 958 + 660851 4751781 951 + 660851 4751811 944 + 660851 4751841 938 + 660851 4751871 929 + 660851 4751901 922 + 660851 4751931 917 + 660851 4751961 911 + 660851 4751991 905 + 660851 4752021 898 + 660851 4752051 895 + 660851 4752081 891 + 660851 4752111 886 + 660851 4752141 883 + 660851 4752171 881 + 660851 4752201 880 + 660851 4752231 878 + 660851 4752261 876 + 660851 4752291 873 + 660851 4752321 870 + 660851 4752351 865 + 660851 4752381 861 + 660851 4752411 861 + 660851 4752441 870 + 660851 4752471 869 + 660851 4752501 866 + 660851 4752531 861 + 660851 4752561 848 + 660851 4752591 843 + 660851 4752621 846 + 660851 4752651 859 + 660851 4752681 861 + 660851 4752711 861 + 660851 4752741 861 + 660851 4752771 861 + 660851 4752801 863 + 660851 4752831 858 + 660851 4752861 845 + 660851 4752891 829 + 660851 4752921 809 + 660851 4752951 809 + 660851 4752981 809 + 660851 4753011 822 + 660851 4753041 844 + 660851 4753071 855 + 660851 4753101 848 + 660851 4753131 839 + 660851 4753161 829 + 660851 4753191 834 + 660851 4753221 821 + 660851 4753251 809 + 660851 4753281 809 + 660851 4753311 809 + 660851 4753341 809 + 660851 4753371 809 + 660851 4753401 809 + 660851 4753431 809 + 660851 4753461 820 + 660851 4753491 828 + 660851 4753521 843 + 660851 4753551 855 + 660851 4753581 864 + 660851 4753611 869 + 660851 4753641 870 + 660851 4753671 871 + 660851 4753701 872 + 660851 4753731 873 + 660851 4753761 874 + 660851 4753791 875 + 660851 4753821 876 + 660851 4753851 877 + 660851 4753881 877 + 660851 4753911 877 + 660851 4753941 877 + 660851 4753971 877 + 660851 4754001 876 + 660851 4754031 874 + 660851 4754061 872 + 660851 4754091 870 + 660851 4754121 868 + 660851 4754151 871 + 660851 4754181 882 + 660851 4754211 898 + 660851 4754241 914 + 660851 4754271 946 + 660851 4754301 956 + 660851 4754331 957 + 660851 4754361 958 + 660851 4754391 960 + 660851 4754421 960 + 660851 4754451 960 + 660851 4754481 959 + 660851 4754511 959 + 660851 4754541 960 + 660881 4751301 1007 + 660881 4751331 1008 + 660881 4751361 1010 + 660881 4751391 1012 + 660881 4751421 1013 + 660881 4751451 1012 + 660881 4751481 1010 + 660881 4751511 1007 + 660881 4751541 1005 + 660881 4751571 1004 + 660881 4751601 1000 + 660881 4751631 999 + 660881 4751661 988 + 660881 4751691 973 + 660881 4751721 966 + 660881 4751751 967 + 660881 4751781 967 + 660881 4751811 964 + 660881 4751841 954 + 660881 4751871 942 + 660881 4751901 930 + 660881 4751931 924 + 660881 4751961 917 + 660881 4751991 910 + 660881 4752021 907 + 660881 4752051 898 + 660881 4752081 892 + 660881 4752111 886 + 660881 4752141 883 + 660881 4752171 882 + 660881 4752201 879 + 660881 4752231 877 + 660881 4752261 876 + 660881 4752291 872 + 660881 4752321 869 + 660881 4752351 864 + 660881 4752381 861 + 660881 4752411 865 + 660881 4752441 871 + 660881 4752471 868 + 660881 4752501 867 + 660881 4752531 859 + 660881 4752561 846 + 660881 4752591 843 + 660881 4752621 853 + 660881 4752651 861 + 660881 4752681 861 + 660881 4752711 861 + 660881 4752741 861 + 660881 4752771 862 + 660881 4752801 859 + 660881 4752831 844 + 660881 4752861 830 + 660881 4752891 817 + 660881 4752921 809 + 660881 4752951 809 + 660881 4752981 809 + 660881 4753011 830 + 660881 4753041 851 + 660881 4753071 860 + 660881 4753101 855 + 660881 4753131 843 + 660881 4753161 839 + 660881 4753191 845 + 660881 4753221 826 + 660881 4753251 809 + 660881 4753281 809 + 660881 4753311 809 + 660881 4753341 809 + 660881 4753371 809 + 660881 4753401 809 + 660881 4753431 809 + 660881 4753461 809 + 660881 4753491 822 + 660881 4753521 836 + 660881 4753551 849 + 660881 4753581 859 + 660881 4753611 868 + 660881 4753641 870 + 660881 4753671 871 + 660881 4753701 872 + 660881 4753731 872 + 660881 4753761 873 + 660881 4753791 875 + 660881 4753821 876 + 660881 4753851 876 + 660881 4753881 876 + 660881 4753911 877 + 660881 4753941 878 + 660881 4753971 877 + 660881 4754001 876 + 660881 4754031 875 + 660881 4754061 873 + 660881 4754091 870 + 660881 4754121 868 + 660881 4754151 873 + 660881 4754181 885 + 660881 4754211 901 + 660881 4754241 926 + 660881 4754271 952 + 660881 4754301 956 + 660881 4754331 959 + 660881 4754361 959 + 660881 4754391 960 + 660881 4754421 960 + 660881 4754451 960 + 660881 4754481 959 + 660881 4754511 959 + 660881 4754541 960 + 660911 4751301 1010 + 660911 4751331 1011 + 660911 4751361 1012 + 660911 4751391 1013 + 660911 4751421 1014 + 660911 4751451 1013 + 660911 4751481 1011 + 660911 4751511 1008 + 660911 4751541 1006 + 660911 4751571 1004 + 660911 4751601 1001 + 660911 4751631 997 + 660911 4751661 985 + 660911 4751691 974 + 660911 4751721 974 + 660911 4751751 979 + 660911 4751781 982 + 660911 4751811 979 + 660911 4751841 964 + 660911 4751871 948 + 660911 4751901 937 + 660911 4751931 929 + 660911 4751961 922 + 660911 4751991 915 + 660911 4752021 907 + 660911 4752051 900 + 660911 4752081 894 + 660911 4752111 889 + 660911 4752141 884 + 660911 4752171 882 + 660911 4752201 879 + 660911 4752231 876 + 660911 4752261 874 + 660911 4752291 871 + 660911 4752321 869 + 660911 4752351 863 + 660911 4752381 862 + 660911 4752411 868 + 660911 4752441 872 + 660911 4752471 872 + 660911 4752501 869 + 660911 4752531 857 + 660911 4752561 844 + 660911 4752591 843 + 660911 4752621 854 + 660911 4752651 861 + 660911 4752681 861 + 660911 4752711 861 + 660911 4752741 861 + 660911 4752771 868 + 660911 4752801 853 + 660911 4752831 837 + 660911 4752861 821 + 660911 4752891 811 + 660911 4752921 809 + 660911 4752951 809 + 660911 4752981 822 + 660911 4753011 837 + 660911 4753041 857 + 660911 4753071 864 + 660911 4753101 862 + 660911 4753131 849 + 660911 4753161 849 + 660911 4753191 853 + 660911 4753221 830 + 660911 4753251 809 + 660911 4753281 809 + 660911 4753311 809 + 660911 4753341 809 + 660911 4753371 809 + 660911 4753401 809 + 660911 4753431 809 + 660911 4753461 809 + 660911 4753491 815 + 660911 4753521 826 + 660911 4753551 837 + 660911 4753581 851 + 660911 4753611 862 + 660911 4753641 869 + 660911 4753671 871 + 660911 4753701 871 + 660911 4753731 872 + 660911 4753761 873 + 660911 4753791 874 + 660911 4753821 875 + 660911 4753851 875 + 660911 4753881 876 + 660911 4753911 877 + 660911 4753941 877 + 660911 4753971 878 + 660911 4754001 878 + 660911 4754031 877 + 660911 4754061 873 + 660911 4754091 869 + 660911 4754121 870 + 660911 4754151 875 + 660911 4754181 887 + 660911 4754211 903 + 660911 4754241 934 + 660911 4754271 958 + 660911 4754301 960 + 660911 4754331 960 + 660911 4754361 960 + 660911 4754391 960 + 660911 4754421 960 + 660911 4754451 960 + 660911 4754481 960 + 660911 4754511 960 + 660911 4754541 960 + 660941 4751301 1012 + 660941 4751331 1013 + 660941 4751361 1013 + 660941 4751391 1014 + 660941 4751421 1014 + 660941 4751451 1013 + 660941 4751481 1011 + 660941 4751511 1008 + 660941 4751541 1006 + 660941 4751571 1004 + 660941 4751601 1002 + 660941 4751631 999 + 660941 4751661 993 + 660941 4751691 982 + 660941 4751721 984 + 660941 4751751 990 + 660941 4751781 992 + 660941 4751811 991 + 660941 4751841 971 + 660941 4751871 954 + 660941 4751901 940 + 660941 4751931 929 + 660941 4751961 920 + 660941 4751991 911 + 660941 4752021 901 + 660941 4752051 897 + 660941 4752081 891 + 660941 4752111 889 + 660941 4752141 885 + 660941 4752171 882 + 660941 4752201 880 + 660941 4752231 878 + 660941 4752261 875 + 660941 4752291 871 + 660941 4752321 868 + 660941 4752351 864 + 660941 4752381 864 + 660941 4752411 868 + 660941 4752441 872 + 660941 4752471 874 + 660941 4752501 869 + 660941 4752531 852 + 660941 4752561 843 + 660941 4752591 844 + 660941 4752621 852 + 660941 4752651 861 + 660941 4752681 861 + 660941 4752711 861 + 660941 4752741 861 + 660941 4752771 873 + 660941 4752801 843 + 660941 4752831 825 + 660941 4752861 814 + 660941 4752891 809 + 660941 4752921 809 + 660941 4752951 817 + 660941 4752981 827 + 660941 4753011 846 + 660941 4753041 861 + 660941 4753071 864 + 660941 4753101 863 + 660941 4753131 856 + 660941 4753161 856 + 660941 4753191 858 + 660941 4753221 841 + 660941 4753251 821 + 660941 4753281 809 + 660941 4753311 809 + 660941 4753341 809 + 660941 4753371 809 + 660941 4753401 809 + 660941 4753431 809 + 660941 4753461 809 + 660941 4753491 809 + 660941 4753521 817 + 660941 4753551 826 + 660941 4753581 839 + 660941 4753611 852 + 660941 4753641 863 + 660941 4753671 869 + 660941 4753701 871 + 660941 4753731 871 + 660941 4753761 872 + 660941 4753791 873 + 660941 4753821 874 + 660941 4753851 875 + 660941 4753881 876 + 660941 4753911 877 + 660941 4753941 878 + 660941 4753971 878 + 660941 4754001 878 + 660941 4754031 876 + 660941 4754061 873 + 660941 4754091 869 + 660941 4754121 871 + 660941 4754151 876 + 660941 4754181 891 + 660941 4754211 906 + 660941 4754241 944 + 660941 4754271 960 + 660941 4754301 958 + 660941 4754331 960 + 660941 4754361 960 + 660941 4754391 960 + 660941 4754421 960 + 660941 4754451 960 + 660941 4754481 960 + 660941 4754511 960 + 660941 4754541 960 + 660971 4751301 1012 + 660971 4751331 1013 + 660971 4751361 1014 + 660971 4751391 1014 + 660971 4751421 1014 + 660971 4751451 1013 + 660971 4751481 1011 + 660971 4751511 1009 + 660971 4751541 1007 + 660971 4751571 1005 + 660971 4751601 1003 + 660971 4751631 1001 + 660971 4751661 999 + 660971 4751691 988 + 660971 4751721 996 + 660971 4751751 999 + 660971 4751781 996 + 660971 4751811 988 + 660971 4751841 970 + 660971 4751871 956 + 660971 4751901 943 + 660971 4751931 932 + 660971 4751961 921 + 660971 4751991 912 + 660971 4752021 904 + 660971 4752051 897 + 660971 4752081 892 + 660971 4752111 888 + 660971 4752141 884 + 660971 4752171 882 + 660971 4752201 880 + 660971 4752231 878 + 660971 4752261 875 + 660971 4752291 871 + 660971 4752321 868 + 660971 4752351 866 + 660971 4752381 867 + 660971 4752411 869 + 660971 4752441 871 + 660971 4752471 872 + 660971 4752501 865 + 660971 4752531 850 + 660971 4752561 843 + 660971 4752591 846 + 660971 4752621 855 + 660971 4752651 861 + 660971 4752681 861 + 660971 4752711 861 + 660971 4752741 865 + 660971 4752771 862 + 660971 4752801 838 + 660971 4752831 816 + 660971 4752861 810 + 660971 4752891 809 + 660971 4752921 809 + 660971 4752951 820 + 660971 4752981 833 + 660971 4753011 851 + 660971 4753041 862 + 660971 4753071 865 + 660971 4753101 864 + 660971 4753131 862 + 660971 4753161 861 + 660971 4753191 861 + 660971 4753221 851 + 660971 4753251 832 + 660971 4753281 817 + 660971 4753311 809 + 660971 4753341 809 + 660971 4753371 809 + 660971 4753401 809 + 660971 4753431 809 + 660971 4753461 809 + 660971 4753491 809 + 660971 4753521 809 + 660971 4753551 817 + 660971 4753581 827 + 660971 4753611 840 + 660971 4753641 853 + 660971 4753671 865 + 660971 4753701 870 + 660971 4753731 871 + 660971 4753761 871 + 660971 4753791 872 + 660971 4753821 873 + 660971 4753851 875 + 660971 4753881 876 + 660971 4753911 877 + 660971 4753941 877 + 660971 4753971 878 + 660971 4754001 878 + 660971 4754031 876 + 660971 4754061 874 + 660971 4754091 874 + 660971 4754121 872 + 660971 4754151 878 + 660971 4754181 894 + 660971 4754211 910 + 660971 4754241 946 + 660971 4754271 953 + 660971 4754301 957 + 660971 4754331 958 + 660971 4754361 958 + 660971 4754391 959 + 660971 4754421 960 + 660971 4754451 960 + 660971 4754481 960 + 660971 4754511 960 + 660971 4754541 960 + 661001 4751301 1013 + 661001 4751331 1014 + 661001 4751361 1014 + 661001 4751391 1014 + 661001 4751421 1014 + 661001 4751451 1012 + 661001 4751481 1011 + 661001 4751511 1009 + 661001 4751541 1007 + 661001 4751571 1006 + 661001 4751601 1005 + 661001 4751631 1003 + 661001 4751661 1000 + 661001 4751691 997 + 661001 4751721 1000 + 661001 4751751 1000 + 661001 4751781 996 + 661001 4751811 983 + 661001 4751841 969 + 661001 4751871 956 + 661001 4751901 942 + 661001 4751931 932 + 661001 4751961 924 + 661001 4751991 914 + 661001 4752021 907 + 661001 4752051 898 + 661001 4752081 892 + 661001 4752111 888 + 661001 4752141 885 + 661001 4752171 882 + 661001 4752201 880 + 661001 4752231 878 + 661001 4752261 875 + 661001 4752291 871 + 661001 4752321 868 + 661001 4752351 868 + 661001 4752381 868 + 661001 4752411 869 + 661001 4752441 871 + 661001 4752471 870 + 661001 4752501 862 + 661001 4752531 849 + 661001 4752561 843 + 661001 4752591 849 + 661001 4752621 860 + 661001 4752651 863 + 661001 4752681 861 + 661001 4752711 861 + 661001 4752741 871 + 661001 4752771 859 + 661001 4752801 831 + 661001 4752831 815 + 661001 4752861 809 + 661001 4752891 809 + 661001 4752921 809 + 661001 4752951 823 + 661001 4752981 839 + 661001 4753011 858 + 661001 4753041 866 + 661001 4753071 866 + 661001 4753101 865 + 661001 4753131 864 + 661001 4753161 863 + 661001 4753191 863 + 661001 4753221 857 + 661001 4753251 840 + 661001 4753281 820 + 661001 4753311 814 + 661001 4753341 809 + 661001 4753371 809 + 661001 4753401 809 + 661001 4753431 809 + 661001 4753461 809 + 661001 4753491 809 + 661001 4753521 809 + 661001 4753551 809 + 661001 4753581 817 + 661001 4753611 827 + 661001 4753641 840 + 661001 4753671 853 + 661001 4753701 868 + 661001 4753731 870 + 661001 4753761 871 + 661001 4753791 872 + 661001 4753821 873 + 661001 4753851 874 + 661001 4753881 875 + 661001 4753911 876 + 661001 4753941 877 + 661001 4753971 877 + 661001 4754001 877 + 661001 4754031 877 + 661001 4754061 875 + 661001 4754091 875 + 661001 4754121 875 + 661001 4754151 880 + 661001 4754181 897 + 661001 4754211 915 + 661001 4754241 949 + 661001 4754271 960 + 661001 4754301 960 + 661001 4754331 959 + 661001 4754361 960 + 661001 4754391 960 + 661001 4754421 961 + 661001 4754451 960 + 661001 4754481 960 + 661001 4754511 960 + 661001 4754541 960 + 661031 4751301 1014 + 661031 4751331 1014 + 661031 4751361 1015 + 661031 4751391 1014 + 661031 4751421 1013 + 661031 4751451 1012 + 661031 4751481 1011 + 661031 4751511 1010 + 661031 4751541 1008 + 661031 4751571 1007 + 661031 4751601 1006 + 661031 4751631 1005 + 661031 4751661 1002 + 661031 4751691 1000 + 661031 4751721 1001 + 661031 4751751 1000 + 661031 4751781 997 + 661031 4751811 982 + 661031 4751841 966 + 661031 4751871 955 + 661031 4751901 944 + 661031 4751931 932 + 661031 4751961 924 + 661031 4751991 912 + 661031 4752021 903 + 661031 4752051 896 + 661031 4752081 891 + 661031 4752111 888 + 661031 4752141 885 + 661031 4752171 883 + 661031 4752201 881 + 661031 4752231 878 + 661031 4752261 875 + 661031 4752291 872 + 661031 4752321 869 + 661031 4752351 869 + 661031 4752381 868 + 661031 4752411 869 + 661031 4752441 870 + 661031 4752471 870 + 661031 4752501 858 + 661031 4752531 847 + 661031 4752561 844 + 661031 4752591 852 + 661031 4752621 861 + 661031 4752651 865 + 661031 4752681 861 + 661031 4752711 864 + 661031 4752741 868 + 661031 4752771 853 + 661031 4752801 831 + 661031 4752831 809 + 661031 4752861 809 + 661031 4752891 809 + 661031 4752921 809 + 661031 4752951 826 + 661031 4752981 843 + 661031 4753011 860 + 661031 4753041 869 + 661031 4753071 868 + 661031 4753101 867 + 661031 4753131 865 + 661031 4753161 864 + 661031 4753191 862 + 661031 4753221 855 + 661031 4753251 838 + 661031 4753281 824 + 661031 4753311 819 + 661031 4753341 822 + 661031 4753371 821 + 661031 4753401 809 + 661031 4753431 809 + 661031 4753461 809 + 661031 4753491 809 + 661031 4753521 809 + 661031 4753551 809 + 661031 4753581 809 + 661031 4753611 817 + 661031 4753641 830 + 661031 4753671 842 + 661031 4753701 858 + 661031 4753731 869 + 661031 4753761 870 + 661031 4753791 871 + 661031 4753821 872 + 661031 4753851 874 + 661031 4753881 875 + 661031 4753911 875 + 661031 4753941 876 + 661031 4753971 876 + 661031 4754001 878 + 661031 4754031 877 + 661031 4754061 876 + 661031 4754091 875 + 661031 4754121 875 + 661031 4754151 881 + 661031 4754181 899 + 661031 4754211 921 + 661031 4754241 955 + 661031 4754271 960 + 661031 4754301 961 + 661031 4754331 961 + 661031 4754361 960 + 661031 4754391 960 + 661031 4754421 960 + 661031 4754451 961 + 661031 4754481 961 + 661031 4754511 960 + 661031 4754541 960 + 661061 4751301 1014 + 661061 4751331 1014 + 661061 4751361 1015 + 661061 4751391 1014 + 661061 4751421 1014 + 661061 4751451 1012 + 661061 4751481 1011 + 661061 4751511 1010 + 661061 4751541 1009 + 661061 4751571 1008 + 661061 4751601 1007 + 661061 4751631 1006 + 661061 4751661 1005 + 661061 4751691 1004 + 661061 4751721 1003 + 661061 4751751 1001 + 661061 4751781 999 + 661061 4751811 986 + 661061 4751841 971 + 661061 4751871 956 + 661061 4751901 944 + 661061 4751931 932 + 661061 4751961 922 + 661061 4751991 911 + 661061 4752021 902 + 661061 4752051 895 + 661061 4752081 891 + 661061 4752111 888 + 661061 4752141 886 + 661061 4752171 884 + 661061 4752201 881 + 661061 4752231 878 + 661061 4752261 876 + 661061 4752291 873 + 661061 4752321 871 + 661061 4752351 869 + 661061 4752381 868 + 661061 4752411 869 + 661061 4752441 869 + 661061 4752471 868 + 661061 4752501 854 + 661061 4752531 844 + 661061 4752561 845 + 661061 4752591 855 + 661061 4752621 864 + 661061 4752651 867 + 661061 4752681 862 + 661061 4752711 861 + 661061 4752741 855 + 661061 4752771 844 + 661061 4752801 829 + 661061 4752831 815 + 661061 4752861 809 + 661061 4752891 809 + 661061 4752921 809 + 661061 4752951 829 + 661061 4752981 844 + 661061 4753011 858 + 661061 4753041 870 + 661061 4753071 869 + 661061 4753101 868 + 661061 4753131 867 + 661061 4753161 865 + 661061 4753191 862 + 661061 4753221 857 + 661061 4753251 845 + 661061 4753281 831 + 661061 4753311 830 + 661061 4753341 831 + 661061 4753371 832 + 661061 4753401 822 + 661061 4753431 809 + 661061 4753461 809 + 661061 4753491 809 + 661061 4753521 809 + 661061 4753551 809 + 661061 4753581 809 + 661061 4753611 811 + 661061 4753641 821 + 661061 4753671 835 + 661061 4753701 850 + 661061 4753731 868 + 661061 4753761 870 + 661061 4753791 870 + 661061 4753821 872 + 661061 4753851 873 + 661061 4753881 874 + 661061 4753911 875 + 661061 4753941 876 + 661061 4753971 877 + 661061 4754001 878 + 661061 4754031 878 + 661061 4754061 877 + 661061 4754091 876 + 661061 4754121 875 + 661061 4754151 881 + 661061 4754181 900 + 661061 4754211 927 + 661061 4754241 957 + 661061 4754271 960 + 661061 4754301 960 + 661061 4754331 961 + 661061 4754361 961 + 661061 4754391 960 + 661061 4754421 962 + 661061 4754451 960 + 661061 4754481 961 + 661061 4754511 961 + 661061 4754541 960 + 661091 4751301 1015 + 661091 4751331 1015 + 661091 4751361 1015 + 661091 4751391 1014 + 661091 4751421 1014 + 661091 4751451 1013 + 661091 4751481 1012 + 661091 4751511 1011 + 661091 4751541 1010 + 661091 4751571 1009 + 661091 4751601 1008 + 661091 4751631 1007 + 661091 4751661 1006 + 661091 4751691 1005 + 661091 4751721 1004 + 661091 4751751 1003 + 661091 4751781 1000 + 661091 4751811 989 + 661091 4751841 975 + 661091 4751871 961 + 661091 4751901 943 + 661091 4751931 931 + 661091 4751961 922 + 661091 4751991 911 + 661091 4752021 903 + 661091 4752051 897 + 661091 4752081 891 + 661091 4752111 889 + 661091 4752141 886 + 661091 4752171 884 + 661091 4752201 881 + 661091 4752231 879 + 661091 4752261 876 + 661091 4752291 874 + 661091 4752321 871 + 661091 4752351 870 + 661091 4752381 869 + 661091 4752411 868 + 661091 4752441 869 + 661091 4752471 863 + 661091 4752501 851 + 661091 4752531 844 + 661091 4752561 846 + 661091 4752591 856 + 661091 4752621 863 + 661091 4752651 866 + 661091 4752681 862 + 661091 4752711 852 + 661091 4752741 842 + 661091 4752771 830 + 661091 4752801 821 + 661091 4752831 813 + 661091 4752861 809 + 661091 4752891 809 + 661091 4752921 809 + 661091 4752951 829 + 661091 4752981 844 + 661091 4753011 857 + 661091 4753041 870 + 661091 4753071 870 + 661091 4753101 869 + 661091 4753131 868 + 661091 4753161 867 + 661091 4753191 867 + 661091 4753221 862 + 661091 4753251 853 + 661091 4753281 838 + 661091 4753311 837 + 661091 4753341 841 + 661091 4753371 842 + 661091 4753401 834 + 661091 4753431 825 + 661091 4753461 815 + 661091 4753491 809 + 661091 4753521 809 + 661091 4753551 809 + 661091 4753581 809 + 661091 4753611 809 + 661091 4753641 816 + 661091 4753671 825 + 661091 4753701 843 + 661091 4753731 856 + 661091 4753761 869 + 661091 4753791 870 + 661091 4753821 871 + 661091 4753851 872 + 661091 4753881 873 + 661091 4753911 875 + 661091 4753941 876 + 661091 4753971 877 + 661091 4754001 878 + 661091 4754031 878 + 661091 4754061 878 + 661091 4754091 876 + 661091 4754121 876 + 661091 4754151 883 + 661091 4754181 900 + 661091 4754211 931 + 661091 4754241 960 + 661091 4754271 961 + 661091 4754301 961 + 661091 4754331 961 + 661091 4754361 960 + 661091 4754391 962 + 661091 4754421 962 + 661091 4754451 962 + 661091 4754481 961 + 661091 4754511 960 + 661091 4754541 960 + 661121 4751301 1015 + 661121 4751331 1015 + 661121 4751361 1015 + 661121 4751391 1014 + 661121 4751421 1014 + 661121 4751451 1013 + 661121 4751481 1012 + 661121 4751511 1011 + 661121 4751541 1010 + 661121 4751571 1009 + 661121 4751601 1008 + 661121 4751631 1007 + 661121 4751661 1006 + 661121 4751691 1006 + 661121 4751721 1005 + 661121 4751751 1005 + 661121 4751781 1005 + 661121 4751811 996 + 661121 4751841 978 + 661121 4751871 960 + 661121 4751901 946 + 661121 4751931 930 + 661121 4751961 915 + 661121 4751991 907 + 661121 4752021 899 + 661121 4752051 894 + 661121 4752081 891 + 661121 4752111 889 + 661121 4752141 887 + 661121 4752171 885 + 661121 4752201 882 + 661121 4752231 879 + 661121 4752261 876 + 661121 4752291 874 + 661121 4752321 872 + 661121 4752351 870 + 661121 4752381 869 + 661121 4752411 868 + 661121 4752441 869 + 661121 4752471 860 + 661121 4752501 848 + 661121 4752531 844 + 661121 4752561 848 + 661121 4752591 857 + 661121 4752621 862 + 661121 4752651 866 + 661121 4752681 859 + 661121 4752711 846 + 661121 4752741 834 + 661121 4752771 827 + 661121 4752801 821 + 661121 4752831 816 + 661121 4752861 809 + 661121 4752891 809 + 661121 4752921 809 + 661121 4752951 827 + 661121 4752981 843 + 661121 4753011 857 + 661121 4753041 870 + 661121 4753071 870 + 661121 4753101 869 + 661121 4753131 869 + 661121 4753161 869 + 661121 4753191 869 + 661121 4753221 864 + 661121 4753251 857 + 661121 4753281 843 + 661121 4753311 846 + 661121 4753341 853 + 661121 4753371 853 + 661121 4753401 846 + 661121 4753431 834 + 661121 4753461 826 + 661121 4753491 809 + 661121 4753521 809 + 661121 4753551 809 + 661121 4753581 809 + 661121 4753611 809 + 661121 4753641 809 + 661121 4753671 809 + 661121 4753701 832 + 661121 4753731 847 + 661121 4753761 860 + 661121 4753791 869 + 661121 4753821 871 + 661121 4753851 872 + 661121 4753881 873 + 661121 4753911 874 + 661121 4753941 876 + 661121 4753971 877 + 661121 4754001 878 + 661121 4754031 879 + 661121 4754061 880 + 661121 4754091 877 + 661121 4754121 877 + 661121 4754151 890 + 661121 4754181 904 + 661121 4754211 926 + 661121 4754241 960 + 661121 4754271 961 + 661121 4754301 961 + 661121 4754331 960 + 661121 4754361 962 + 661121 4754391 962 + 661121 4754421 962 + 661121 4754451 961 + 661121 4754481 960 + 661121 4754511 961 + 661121 4754541 961 + 661151 4751301 1016 + 661151 4751331 1016 + 661151 4751361 1015 + 661151 4751391 1015 + 661151 4751421 1014 + 661151 4751451 1013 + 661151 4751481 1012 + 661151 4751511 1011 + 661151 4751541 1011 + 661151 4751571 1010 + 661151 4751601 1009 + 661151 4751631 1008 + 661151 4751661 1008 + 661151 4751691 1007 + 661151 4751721 1007 + 661151 4751751 1007 + 661151 4751781 1006 + 661151 4751811 1000 + 661151 4751841 982 + 661151 4751871 961 + 661151 4751901 945 + 661151 4751931 928 + 661151 4751961 914 + 661151 4751991 906 + 661151 4752021 900 + 661151 4752051 893 + 661151 4752081 891 + 661151 4752111 889 + 661151 4752141 887 + 661151 4752171 885 + 661151 4752201 882 + 661151 4752231 878 + 661151 4752261 876 + 661151 4752291 874 + 661151 4752321 872 + 661151 4752351 870 + 661151 4752381 869 + 661151 4752411 866 + 661151 4752441 869 + 661151 4752471 858 + 661151 4752501 848 + 661151 4752531 848 + 661151 4752561 854 + 661151 4752591 860 + 661151 4752621 864 + 661151 4752651 866 + 661151 4752681 857 + 661151 4752711 843 + 661151 4752741 833 + 661151 4752771 836 + 661151 4752801 838 + 661151 4752831 819 + 661151 4752861 811 + 661151 4752891 809 + 661151 4752921 809 + 661151 4752951 824 + 661151 4752981 844 + 661151 4753011 860 + 661151 4753041 873 + 661151 4753071 871 + 661151 4753101 871 + 661151 4753131 870 + 661151 4753161 870 + 661151 4753191 868 + 661151 4753221 864 + 661151 4753251 861 + 661151 4753281 851 + 661151 4753311 851 + 661151 4753341 862 + 661151 4753371 861 + 661151 4753401 854 + 661151 4753431 843 + 661151 4753461 838 + 661151 4753491 826 + 661151 4753521 809 + 661151 4753551 809 + 661151 4753581 809 + 661151 4753611 809 + 661151 4753641 809 + 661151 4753671 809 + 661151 4753701 826 + 661151 4753731 838 + 661151 4753761 852 + 661151 4753791 869 + 661151 4753821 870 + 661151 4753851 871 + 661151 4753881 873 + 661151 4753911 874 + 661151 4753941 875 + 661151 4753971 876 + 661151 4754001 877 + 661151 4754031 879 + 661151 4754061 880 + 661151 4754091 881 + 661151 4754121 882 + 661151 4754151 890 + 661151 4754181 905 + 661151 4754211 935 + 661151 4754241 960 + 661151 4754271 961 + 661151 4754301 960 + 661151 4754331 961 + 661151 4754361 962 + 661151 4754391 961 + 661151 4754421 961 + 661151 4754451 962 + 661151 4754481 962 + 661151 4754511 962 + 661151 4754541 962 + 661181 4751301 1016 + 661181 4751331 1016 + 661181 4751361 1016 + 661181 4751391 1015 + 661181 4751421 1014 + 661181 4751451 1013 + 661181 4751481 1012 + 661181 4751511 1012 + 661181 4751541 1011 + 661181 4751571 1011 + 661181 4751601 1010 + 661181 4751631 1009 + 661181 4751661 1009 + 661181 4751691 1008 + 661181 4751721 1008 + 661181 4751751 1008 + 661181 4751781 1007 + 661181 4751811 1001 + 661181 4751841 979 + 661181 4751871 957 + 661181 4751901 942 + 661181 4751931 929 + 661181 4751961 914 + 661181 4751991 906 + 661181 4752021 900 + 661181 4752051 895 + 661181 4752081 892 + 661181 4752111 889 + 661181 4752141 886 + 661181 4752171 884 + 661181 4752201 881 + 661181 4752231 878 + 661181 4752261 875 + 661181 4752291 873 + 661181 4752321 871 + 661181 4752351 870 + 661181 4752381 869 + 661181 4752411 867 + 661181 4752441 864 + 661181 4752471 860 + 661181 4752501 854 + 661181 4752531 852 + 661181 4752561 859 + 661181 4752591 862 + 661181 4752621 865 + 661181 4752651 865 + 661181 4752681 856 + 661181 4752711 843 + 661181 4752741 841 + 661181 4752771 845 + 661181 4752801 845 + 661181 4752831 828 + 661181 4752861 815 + 661181 4752891 809 + 661181 4752921 809 + 661181 4752951 822 + 661181 4752981 845 + 661181 4753011 864 + 661181 4753041 872 + 661181 4753071 873 + 661181 4753101 872 + 661181 4753131 871 + 661181 4753161 869 + 661181 4753191 867 + 661181 4753221 864 + 661181 4753251 862 + 661181 4753281 859 + 661181 4753311 857 + 661181 4753341 865 + 661181 4753371 866 + 661181 4753401 859 + 661181 4753431 853 + 661181 4753461 849 + 661181 4753491 834 + 661181 4753521 809 + 661181 4753551 809 + 661181 4753581 809 + 661181 4753611 809 + 661181 4753641 809 + 661181 4753671 809 + 661181 4753701 821 + 661181 4753731 834 + 661181 4753761 847 + 661181 4753791 868 + 661181 4753821 870 + 661181 4753851 871 + 661181 4753881 872 + 661181 4753911 874 + 661181 4753941 875 + 661181 4753971 875 + 661181 4754001 876 + 661181 4754031 877 + 661181 4754061 879 + 661181 4754091 882 + 661181 4754121 884 + 661181 4754151 896 + 661181 4754181 910 + 661181 4754211 949 + 661181 4754241 960 + 661181 4754271 960 + 661181 4754301 961 + 661181 4754331 960 + 661181 4754361 961 + 661181 4754391 962 + 661181 4754421 962 + 661181 4754451 962 + 661181 4754481 962 + 661181 4754511 962 + 661181 4754541 962 + 661211 4751301 1017 + 661211 4751331 1016 + 661211 4751361 1016 + 661211 4751391 1015 + 661211 4751421 1014 + 661211 4751451 1013 + 661211 4751481 1013 + 661211 4751511 1012 + 661211 4751541 1012 + 661211 4751571 1011 + 661211 4751601 1011 + 661211 4751631 1010 + 661211 4751661 1009 + 661211 4751691 1009 + 661211 4751721 1008 + 661211 4751751 1008 + 661211 4751781 1007 + 661211 4751811 1002 + 661211 4751841 983 + 661211 4751871 961 + 661211 4751901 945 + 661211 4751931 933 + 661211 4751961 918 + 661211 4751991 909 + 661211 4752021 901 + 661211 4752051 895 + 661211 4752081 891 + 661211 4752111 889 + 661211 4752141 886 + 661211 4752171 883 + 661211 4752201 881 + 661211 4752231 878 + 661211 4752261 876 + 661211 4752291 873 + 661211 4752321 871 + 661211 4752351 869 + 661211 4752381 868 + 661211 4752411 866 + 661211 4752441 864 + 661211 4752471 862 + 661211 4752501 860 + 661211 4752531 859 + 661211 4752561 862 + 661211 4752591 863 + 661211 4752621 864 + 661211 4752651 864 + 661211 4752681 856 + 661211 4752711 846 + 661211 4752741 850 + 661211 4752771 856 + 661211 4752801 855 + 661211 4752831 837 + 661211 4752861 818 + 661211 4752891 809 + 661211 4752921 809 + 661211 4752951 824 + 661211 4752981 847 + 661211 4753011 867 + 661211 4753041 873 + 661211 4753071 872 + 661211 4753101 871 + 661211 4753131 870 + 661211 4753161 869 + 661211 4753191 867 + 661211 4753221 865 + 661211 4753251 863 + 661211 4753281 862 + 661211 4753311 861 + 661211 4753341 867 + 661211 4753371 869 + 661211 4753401 866 + 661211 4753431 862 + 661211 4753461 857 + 661211 4753491 854 + 661211 4753521 822 + 661211 4753551 809 + 661211 4753581 809 + 661211 4753611 809 + 661211 4753641 809 + 661211 4753671 809 + 661211 4753701 809 + 661211 4753731 829 + 661211 4753761 843 + 661211 4753791 861 + 661211 4753821 869 + 661211 4753851 871 + 661211 4753881 872 + 661211 4753911 873 + 661211 4753941 874 + 661211 4753971 875 + 661211 4754001 875 + 661211 4754031 877 + 661211 4754061 879 + 661211 4754091 882 + 661211 4754121 890 + 661211 4754151 900 + 661211 4754181 916 + 661211 4754211 954 + 661211 4754241 960 + 661211 4754271 959 + 661211 4754301 960 + 661211 4754331 961 + 661211 4754361 962 + 661211 4754391 962 + 661211 4754421 962 + 661211 4754451 962 + 661211 4754481 962 + 661211 4754511 963 + 661211 4754541 962 + 661241 4751301 1017 + 661241 4751331 1017 + 661241 4751361 1016 + 661241 4751391 1015 + 661241 4751421 1014 + 661241 4751451 1014 + 661241 4751481 1014 + 661241 4751511 1013 + 661241 4751541 1012 + 661241 4751571 1012 + 661241 4751601 1011 + 661241 4751631 1010 + 661241 4751661 1010 + 661241 4751691 1009 + 661241 4751721 1009 + 661241 4751751 1008 + 661241 4751781 1007 + 661241 4751811 1001 + 661241 4751841 983 + 661241 4751871 963 + 661241 4751901 944 + 661241 4751931 933 + 661241 4751961 915 + 661241 4751991 907 + 661241 4752021 902 + 661241 4752051 894 + 661241 4752081 890 + 661241 4752111 888 + 661241 4752141 886 + 661241 4752171 884 + 661241 4752201 881 + 661241 4752231 878 + 661241 4752261 876 + 661241 4752291 872 + 661241 4752321 870 + 661241 4752351 868 + 661241 4752381 867 + 661241 4752411 866 + 661241 4752441 865 + 661241 4752471 863 + 661241 4752501 864 + 661241 4752531 863 + 661241 4752561 864 + 661241 4752591 864 + 661241 4752621 864 + 661241 4752651 863 + 661241 4752681 859 + 661241 4752711 851 + 661241 4752741 861 + 661241 4752771 862 + 661241 4752801 849 + 661241 4752831 831 + 661241 4752861 816 + 661241 4752891 809 + 661241 4752921 809 + 661241 4752951 826 + 661241 4752981 850 + 661241 4753011 868 + 661241 4753041 873 + 661241 4753071 872 + 661241 4753101 870 + 661241 4753131 869 + 661241 4753161 869 + 661241 4753191 866 + 661241 4753221 865 + 661241 4753251 864 + 661241 4753281 862 + 661241 4753311 862 + 661241 4753341 867 + 661241 4753371 869 + 661241 4753401 869 + 661241 4753431 867 + 661241 4753461 865 + 661241 4753491 860 + 661241 4753521 848 + 661241 4753551 809 + 661241 4753581 809 + 661241 4753611 809 + 661241 4753641 809 + 661241 4753671 809 + 661241 4753701 809 + 661241 4753731 827 + 661241 4753761 842 + 661241 4753791 859 + 661241 4753821 869 + 661241 4753851 870 + 661241 4753881 871 + 661241 4753911 872 + 661241 4753941 873 + 661241 4753971 874 + 661241 4754001 875 + 661241 4754031 876 + 661241 4754061 879 + 661241 4754091 883 + 661241 4754121 893 + 661241 4754151 903 + 661241 4754181 921 + 661241 4754211 960 + 661241 4754241 959 + 661241 4754271 961 + 661241 4754301 961 + 661241 4754331 962 + 661241 4754361 962 + 661241 4754391 962 + 661241 4754421 963 + 661241 4754451 963 + 661241 4754481 963 + 661241 4754511 963 + 661241 4754541 963 + 661271 4751301 1018 + 661271 4751331 1017 + 661271 4751361 1016 + 661271 4751391 1016 + 661271 4751421 1015 + 661271 4751451 1015 + 661271 4751481 1014 + 661271 4751511 1013 + 661271 4751541 1013 + 661271 4751571 1012 + 661271 4751601 1011 + 661271 4751631 1011 + 661271 4751661 1010 + 661271 4751691 1010 + 661271 4751721 1009 + 661271 4751751 1008 + 661271 4751781 1007 + 661271 4751811 1003 + 661271 4751841 986 + 661271 4751871 965 + 661271 4751901 951 + 661271 4751931 938 + 661271 4751961 924 + 661271 4751991 909 + 661271 4752021 903 + 661271 4752051 896 + 661271 4752081 890 + 661271 4752111 888 + 661271 4752141 886 + 661271 4752171 883 + 661271 4752201 881 + 661271 4752231 878 + 661271 4752261 875 + 661271 4752291 871 + 661271 4752321 869 + 661271 4752351 868 + 661271 4752381 867 + 661271 4752411 866 + 661271 4752441 865 + 661271 4752471 864 + 661271 4752501 864 + 661271 4752531 864 + 661271 4752561 865 + 661271 4752591 864 + 661271 4752621 865 + 661271 4752651 862 + 661271 4752681 861 + 661271 4752711 861 + 661271 4752741 857 + 661271 4752771 846 + 661271 4752801 833 + 661271 4752831 818 + 661271 4752861 809 + 661271 4752891 809 + 661271 4752921 809 + 661271 4752951 838 + 661271 4752981 856 + 661271 4753011 869 + 661271 4753041 871 + 661271 4753071 872 + 661271 4753101 869 + 661271 4753131 869 + 661271 4753161 867 + 661271 4753191 867 + 661271 4753221 866 + 661271 4753251 864 + 661271 4753281 864 + 661271 4753311 865 + 661271 4753341 868 + 661271 4753371 869 + 661271 4753401 870 + 661271 4753431 869 + 661271 4753461 869 + 661271 4753491 867 + 661271 4753521 858 + 661271 4753551 809 + 661271 4753581 809 + 661271 4753611 809 + 661271 4753641 809 + 661271 4753671 809 + 661271 4753701 809 + 661271 4753731 825 + 661271 4753761 842 + 661271 4753791 860 + 661271 4753821 869 + 661271 4753851 870 + 661271 4753881 871 + 661271 4753911 872 + 661271 4753941 873 + 661271 4753971 874 + 661271 4754001 875 + 661271 4754031 876 + 661271 4754061 880 + 661271 4754091 884 + 661271 4754121 896 + 661271 4754151 907 + 661271 4754181 933 + 661271 4754211 958 + 661271 4754241 959 + 661271 4754271 961 + 661271 4754301 962 + 661271 4754331 962 + 661271 4754361 962 + 661271 4754391 963 + 661271 4754421 963 + 661271 4754451 963 + 661271 4754481 963 + 661271 4754511 963 + 661271 4754541 963 + 661301 4751301 1018 + 661301 4751331 1017 + 661301 4751361 1017 + 661301 4751391 1016 + 661301 4751421 1016 + 661301 4751451 1015 + 661301 4751481 1014 + 661301 4751511 1014 + 661301 4751541 1013 + 661301 4751571 1012 + 661301 4751601 1012 + 661301 4751631 1011 + 661301 4751661 1011 + 661301 4751691 1010 + 661301 4751721 1009 + 661301 4751751 1008 + 661301 4751781 1007 + 661301 4751811 1003 + 661301 4751841 986 + 661301 4751871 968 + 661301 4751901 954 + 661301 4751931 941 + 661301 4751961 925 + 661301 4751991 914 + 661301 4752021 905 + 661301 4752051 898 + 661301 4752081 892 + 661301 4752111 889 + 661301 4752141 886 + 661301 4752171 883 + 661301 4752201 880 + 661301 4752231 878 + 661301 4752261 874 + 661301 4752291 870 + 661301 4752321 868 + 661301 4752351 867 + 661301 4752381 866 + 661301 4752411 865 + 661301 4752441 864 + 661301 4752471 864 + 661301 4752501 864 + 661301 4752531 863 + 661301 4752561 864 + 661301 4752591 863 + 661301 4752621 862 + 661301 4752651 862 + 661301 4752681 862 + 661301 4752711 858 + 661301 4752741 846 + 661301 4752771 833 + 661301 4752801 809 + 661301 4752831 809 + 661301 4752861 809 + 661301 4752891 815 + 661301 4752921 829 + 661301 4752951 849 + 661301 4752981 863 + 661301 4753011 869 + 661301 4753041 871 + 661301 4753071 870 + 661301 4753101 869 + 661301 4753131 869 + 661301 4753161 868 + 661301 4753191 868 + 661301 4753221 867 + 661301 4753251 865 + 661301 4753281 865 + 661301 4753311 866 + 661301 4753341 867 + 661301 4753371 869 + 661301 4753401 869 + 661301 4753431 870 + 661301 4753461 871 + 661301 4753491 870 + 661301 4753521 860 + 661301 4753551 821 + 661301 4753581 809 + 661301 4753611 809 + 661301 4753641 809 + 661301 4753671 809 + 661301 4753701 809 + 661301 4753731 822 + 661301 4753761 839 + 661301 4753791 854 + 661301 4753821 868 + 661301 4753851 870 + 661301 4753881 871 + 661301 4753911 872 + 661301 4753941 873 + 661301 4753971 874 + 661301 4754001 875 + 661301 4754031 877 + 661301 4754061 880 + 661301 4754091 887 + 661301 4754121 900 + 661301 4754151 911 + 661301 4754181 949 + 661301 4754211 961 + 661301 4754241 959 + 661301 4754271 961 + 661301 4754301 962 + 661301 4754331 963 + 661301 4754361 963 + 661301 4754391 963 + 661301 4754421 964 + 661301 4754451 963 + 661301 4754481 963 + 661301 4754511 964 + 661301 4754541 964 + 661331 4751301 1018 + 661331 4751331 1018 + 661331 4751361 1017 + 661331 4751391 1017 + 661331 4751421 1016 + 661331 4751451 1015 + 661331 4751481 1015 + 661331 4751511 1014 + 661331 4751541 1013 + 661331 4751571 1012 + 661331 4751601 1012 + 661331 4751631 1012 + 661331 4751661 1011 + 661331 4751691 1010 + 661331 4751721 1009 + 661331 4751751 1008 + 661331 4751781 1007 + 661331 4751811 999 + 661331 4751841 983 + 661331 4751871 967 + 661331 4751901 953 + 661331 4751931 944 + 661331 4751961 924 + 661331 4751991 912 + 661331 4752021 904 + 661331 4752051 897 + 661331 4752081 891 + 661331 4752111 888 + 661331 4752141 885 + 661331 4752171 882 + 661331 4752201 878 + 661331 4752231 876 + 661331 4752261 873 + 661331 4752291 870 + 661331 4752321 868 + 661331 4752351 867 + 661331 4752381 865 + 661331 4752411 864 + 661331 4752441 863 + 661331 4752471 862 + 661331 4752501 862 + 661331 4752531 859 + 661331 4752561 852 + 661331 4752591 848 + 661331 4752621 846 + 661331 4752651 841 + 661331 4752681 844 + 661331 4752711 842 + 661331 4752741 833 + 661331 4752771 818 + 661331 4752801 809 + 661331 4752831 809 + 661331 4752861 817 + 661331 4752891 831 + 661331 4752921 848 + 661331 4752951 862 + 661331 4752981 868 + 661331 4753011 869 + 661331 4753041 870 + 661331 4753071 870 + 661331 4753101 870 + 661331 4753131 869 + 661331 4753161 869 + 661331 4753191 869 + 661331 4753221 868 + 661331 4753251 865 + 661331 4753281 866 + 661331 4753311 866 + 661331 4753341 867 + 661331 4753371 868 + 661331 4753401 869 + 661331 4753431 869 + 661331 4753461 870 + 661331 4753491 870 + 661331 4753521 860 + 661331 4753551 830 + 661331 4753581 809 + 661331 4753611 809 + 661331 4753641 809 + 661331 4753671 809 + 661331 4753701 809 + 661331 4753731 820 + 661331 4753761 835 + 661331 4753791 849 + 661331 4753821 865 + 661331 4753851 869 + 661331 4753881 871 + 661331 4753911 872 + 661331 4753941 873 + 661331 4753971 874 + 661331 4754001 875 + 661331 4754031 877 + 661331 4754061 881 + 661331 4754091 891 + 661331 4754121 907 + 661331 4754151 935 + 661331 4754181 960 + 661331 4754211 961 + 661331 4754241 961 + 661331 4754271 961 + 661331 4754301 963 + 661331 4754331 963 + 661331 4754361 963 + 661331 4754391 964 + 661331 4754421 964 + 661331 4754451 964 + 661331 4754481 964 + 661331 4754511 964 + 661331 4754541 964 + 661361 4751301 1019 + 661361 4751331 1018 + 661361 4751361 1018 + 661361 4751391 1017 + 661361 4751421 1016 + 661361 4751451 1016 + 661361 4751481 1015 + 661361 4751511 1014 + 661361 4751541 1013 + 661361 4751571 1013 + 661361 4751601 1013 + 661361 4751631 1012 + 661361 4751661 1012 + 661361 4751691 1011 + 661361 4751721 1010 + 661361 4751751 1008 + 661361 4751781 1007 + 661361 4751811 995 + 661361 4751841 981 + 661361 4751871 965 + 661361 4751901 953 + 661361 4751931 942 + 661361 4751961 924 + 661361 4751991 911 + 661361 4752021 904 + 661361 4752051 897 + 661361 4752081 891 + 661361 4752111 888 + 661361 4752141 885 + 661361 4752171 881 + 661361 4752201 878 + 661361 4752231 875 + 661361 4752261 872 + 661361 4752291 869 + 661361 4752321 867 + 661361 4752351 864 + 661361 4752381 864 + 661361 4752411 863 + 661361 4752441 860 + 661361 4752471 854 + 661361 4752501 850 + 661361 4752531 847 + 661361 4752561 842 + 661361 4752591 832 + 661361 4752621 829 + 661361 4752651 828 + 661361 4752681 831 + 661361 4752711 831 + 661361 4752741 819 + 661361 4752771 809 + 661361 4752801 809 + 661361 4752831 809 + 661361 4752861 829 + 661361 4752891 843 + 661361 4752921 858 + 661361 4752951 868 + 661361 4752981 869 + 661361 4753011 870 + 661361 4753041 870 + 661361 4753071 870 + 661361 4753101 870 + 661361 4753131 869 + 661361 4753161 869 + 661361 4753191 869 + 661361 4753221 867 + 661361 4753251 867 + 661361 4753281 866 + 661361 4753311 867 + 661361 4753341 868 + 661361 4753371 868 + 661361 4753401 869 + 661361 4753431 869 + 661361 4753461 870 + 661361 4753491 868 + 661361 4753521 861 + 661361 4753551 841 + 661361 4753581 809 + 661361 4753611 809 + 661361 4753641 809 + 661361 4753671 809 + 661361 4753701 809 + 661361 4753731 820 + 661361 4753761 835 + 661361 4753791 852 + 661361 4753821 869 + 661361 4753851 870 + 661361 4753881 871 + 661361 4753911 872 + 661361 4753941 873 + 661361 4753971 875 + 661361 4754001 876 + 661361 4754031 878 + 661361 4754061 882 + 661361 4754091 897 + 661361 4754121 912 + 661361 4754151 951 + 661361 4754181 961 + 661361 4754211 962 + 661361 4754241 963 + 661361 4754271 964 + 661361 4754301 962 + 661361 4754331 964 + 661361 4754361 964 + 661361 4754391 964 + 661361 4754421 964 + 661361 4754451 964 + 661361 4754481 965 + 661361 4754511 965 + 661361 4754541 965 + 661391 4751301 1019 + 661391 4751331 1019 + 661391 4751361 1018 + 661391 4751391 1017 + 661391 4751421 1017 + 661391 4751451 1016 + 661391 4751481 1015 + 661391 4751511 1014 + 661391 4751541 1014 + 661391 4751571 1014 + 661391 4751601 1014 + 661391 4751631 1013 + 661391 4751661 1012 + 661391 4751691 1012 + 661391 4751721 1011 + 661391 4751751 1008 + 661391 4751781 1002 + 661391 4751811 989 + 661391 4751841 976 + 661391 4751871 964 + 661391 4751901 953 + 661391 4751931 944 + 661391 4751961 928 + 661391 4751991 916 + 661391 4752021 906 + 661391 4752051 899 + 661391 4752081 892 + 661391 4752111 888 + 661391 4752141 884 + 661391 4752171 881 + 661391 4752201 878 + 661391 4752231 875 + 661391 4752261 872 + 661391 4752291 870 + 661391 4752321 867 + 661391 4752351 862 + 661391 4752381 861 + 661391 4752411 862 + 661391 4752441 861 + 661391 4752471 848 + 661391 4752501 842 + 661391 4752531 836 + 661391 4752561 830 + 661391 4752591 823 + 661391 4752621 821 + 661391 4752651 819 + 661391 4752681 820 + 661391 4752711 819 + 661391 4752741 809 + 661391 4752771 809 + 661391 4752801 809 + 661391 4752831 826 + 661391 4752861 841 + 661391 4752891 855 + 661391 4752921 867 + 661391 4752951 870 + 661391 4752981 870 + 661391 4753011 870 + 661391 4753041 869 + 661391 4753071 869 + 661391 4753101 869 + 661391 4753131 869 + 661391 4753161 869 + 661391 4753191 869 + 661391 4753221 867 + 661391 4753251 867 + 661391 4753281 866 + 661391 4753311 867 + 661391 4753341 867 + 661391 4753371 867 + 661391 4753401 868 + 661391 4753431 869 + 661391 4753461 869 + 661391 4753491 869 + 661391 4753521 869 + 661391 4753551 853 + 661391 4753581 820 + 661391 4753611 809 + 661391 4753641 809 + 661391 4753671 809 + 661391 4753701 809 + 661391 4753731 820 + 661391 4753761 835 + 661391 4753791 852 + 661391 4753821 869 + 661391 4753851 870 + 661391 4753881 871 + 661391 4753911 872 + 661391 4753941 874 + 661391 4753971 875 + 661391 4754001 876 + 661391 4754031 879 + 661391 4754061 885 + 661391 4754091 906 + 661391 4754121 939 + 661391 4754151 961 + 661391 4754181 965 + 661391 4754211 965 + 661391 4754241 964 + 661391 4754271 964 + 661391 4754301 964 + 661391 4754331 964 + 661391 4754361 964 + 661391 4754391 965 + 661391 4754421 966 + 661391 4754451 965 + 661391 4754481 965 + 661391 4754511 966 + 661391 4754541 965 + 661421 4751301 1020 + 661421 4751331 1019 + 661421 4751361 1018 + 661421 4751391 1018 + 661421 4751421 1017 + 661421 4751451 1016 + 661421 4751481 1015 + 661421 4751511 1015 + 661421 4751541 1015 + 661421 4751571 1015 + 661421 4751601 1014 + 661421 4751631 1013 + 661421 4751661 1013 + 661421 4751691 1013 + 661421 4751721 1014 + 661421 4751751 1010 + 661421 4751781 996 + 661421 4751811 981 + 661421 4751841 966 + 661421 4751871 953 + 661421 4751901 945 + 661421 4751931 934 + 661421 4751961 927 + 661421 4751991 914 + 661421 4752021 905 + 661421 4752051 897 + 661421 4752081 892 + 661421 4752111 887 + 661421 4752141 884 + 661421 4752171 881 + 661421 4752201 878 + 661421 4752231 875 + 661421 4752261 872 + 661421 4752291 869 + 661421 4752321 866 + 661421 4752351 862 + 661421 4752381 858 + 661421 4752411 854 + 661421 4752441 853 + 661421 4752471 844 + 661421 4752501 834 + 661421 4752531 830 + 661421 4752561 828 + 661421 4752591 832 + 661421 4752621 833 + 661421 4752651 824 + 661421 4752681 816 + 661421 4752711 813 + 661421 4752741 809 + 661421 4752771 809 + 661421 4752801 814 + 661421 4752831 831 + 661421 4752861 849 + 661421 4752891 862 + 661421 4752921 868 + 661421 4752951 869 + 661421 4752981 869 + 661421 4753011 870 + 661421 4753041 870 + 661421 4753071 869 + 661421 4753101 869 + 661421 4753131 869 + 661421 4753161 869 + 661421 4753191 868 + 661421 4753221 868 + 661421 4753251 867 + 661421 4753281 866 + 661421 4753311 867 + 661421 4753341 867 + 661421 4753371 868 + 661421 4753401 867 + 661421 4753431 869 + 661421 4753461 869 + 661421 4753491 871 + 661421 4753521 871 + 661421 4753551 859 + 661421 4753581 821 + 661421 4753611 809 + 661421 4753641 809 + 661421 4753671 809 + 661421 4753701 809 + 661421 4753731 818 + 661421 4753761 830 + 661421 4753791 848 + 661421 4753821 869 + 661421 4753851 870 + 661421 4753881 871 + 661421 4753911 873 + 661421 4753941 874 + 661421 4753971 875 + 661421 4754001 878 + 661421 4754031 881 + 661421 4754061 889 + 661421 4754091 916 + 661421 4754121 948 + 661421 4754151 968 + 661421 4754181 968 + 661421 4754211 966 + 661421 4754241 965 + 661421 4754271 965 + 661421 4754301 965 + 661421 4754331 965 + 661421 4754361 965 + 661421 4754391 966 + 661421 4754421 967 + 661421 4754451 966 + 661421 4754481 966 + 661421 4754511 966 + 661421 4754541 966 + 661451 4751301 1020 + 661451 4751331 1019 + 661451 4751361 1019 + 661451 4751391 1018 + 661451 4751421 1018 + 661451 4751451 1017 + 661451 4751481 1016 + 661451 4751511 1016 + 661451 4751541 1016 + 661451 4751571 1015 + 661451 4751601 1015 + 661451 4751631 1014 + 661451 4751661 1014 + 661451 4751691 1014 + 661451 4751721 1014 + 661451 4751751 1013 + 661451 4751781 1001 + 661451 4751811 985 + 661451 4751841 970 + 661451 4751871 953 + 661451 4751901 938 + 661451 4751931 918 + 661451 4751961 912 + 661451 4751991 911 + 661451 4752021 905 + 661451 4752051 897 + 661451 4752081 889 + 661451 4752111 885 + 661451 4752141 882 + 661451 4752171 879 + 661451 4752201 877 + 661451 4752231 874 + 661451 4752261 872 + 661451 4752291 869 + 661451 4752321 865 + 661451 4752351 861 + 661451 4752381 862 + 661451 4752411 850 + 661451 4752441 844 + 661451 4752471 837 + 661451 4752501 830 + 661451 4752531 833 + 661451 4752561 837 + 661451 4752591 840 + 661451 4752621 844 + 661451 4752651 844 + 661451 4752681 831 + 661451 4752711 819 + 661451 4752741 812 + 661451 4752771 810 + 661451 4752801 813 + 661451 4752831 833 + 661451 4752861 853 + 661451 4752891 863 + 661451 4752921 865 + 661451 4752951 867 + 661451 4752981 868 + 661451 4753011 869 + 661451 4753041 869 + 661451 4753071 869 + 661451 4753101 868 + 661451 4753131 868 + 661451 4753161 868 + 661451 4753191 868 + 661451 4753221 869 + 661451 4753251 868 + 661451 4753281 867 + 661451 4753311 868 + 661451 4753341 868 + 661451 4753371 868 + 661451 4753401 867 + 661451 4753431 868 + 661451 4753461 869 + 661451 4753491 871 + 661451 4753521 870 + 661451 4753551 859 + 661451 4753581 809 + 661451 4753611 809 + 661451 4753641 809 + 661451 4753671 809 + 661451 4753701 809 + 661451 4753731 817 + 661451 4753761 830 + 661451 4753791 846 + 661451 4753821 868 + 661451 4753851 871 + 661451 4753881 872 + 661451 4753911 874 + 661451 4753941 875 + 661451 4753971 876 + 661451 4754001 878 + 661451 4754031 882 + 661451 4754061 895 + 661451 4754091 916 + 661451 4754121 948 + 661451 4754151 965 + 661451 4754181 968 + 661451 4754211 967 + 661451 4754241 966 + 661451 4754271 966 + 661451 4754301 965 + 661451 4754331 965 + 661451 4754361 966 + 661451 4754391 966 + 661451 4754421 967 + 661451 4754451 967 + 661451 4754481 967 + 661451 4754511 966 + 661451 4754541 966 + 661481 4751301 1020 + 661481 4751331 1019 + 661481 4751361 1019 + 661481 4751391 1019 + 661481 4751421 1018 + 661481 4751451 1018 + 661481 4751481 1017 + 661481 4751511 1017 + 661481 4751541 1016 + 661481 4751571 1016 + 661481 4751601 1016 + 661481 4751631 1015 + 661481 4751661 1015 + 661481 4751691 1015 + 661481 4751721 1014 + 661481 4751751 1011 + 661481 4751781 1003 + 661481 4751811 988 + 661481 4751841 975 + 661481 4751871 957 + 661481 4751901 943 + 661481 4751931 921 + 661481 4751961 914 + 661481 4751991 909 + 661481 4752021 900 + 661481 4752051 892 + 661481 4752081 889 + 661481 4752111 884 + 661481 4752141 881 + 661481 4752171 876 + 661481 4752201 875 + 661481 4752231 873 + 661481 4752261 871 + 661481 4752291 868 + 661481 4752321 864 + 661481 4752351 860 + 661481 4752381 858 + 661481 4752411 850 + 661481 4752441 843 + 661481 4752471 837 + 661481 4752501 834 + 661481 4752531 840 + 661481 4752561 842 + 661481 4752591 848 + 661481 4752621 855 + 661481 4752651 856 + 661481 4752681 841 + 661481 4752711 829 + 661481 4752741 814 + 661481 4752771 810 + 661481 4752801 811 + 661481 4752831 824 + 661481 4752861 845 + 661481 4752891 857 + 661481 4752921 863 + 661481 4752951 865 + 661481 4752981 867 + 661481 4753011 868 + 661481 4753041 869 + 661481 4753071 868 + 661481 4753101 868 + 661481 4753131 868 + 661481 4753161 869 + 661481 4753191 869 + 661481 4753221 869 + 661481 4753251 869 + 661481 4753281 868 + 661481 4753311 868 + 661481 4753341 868 + 661481 4753371 869 + 661481 4753401 868 + 661481 4753431 868 + 661481 4753461 869 + 661481 4753491 870 + 661481 4753521 869 + 661481 4753551 857 + 661481 4753581 809 + 661481 4753611 809 + 661481 4753641 809 + 661481 4753671 809 + 661481 4753701 809 + 661481 4753731 817 + 661481 4753761 833 + 661481 4753791 852 + 661481 4753821 869 + 661481 4753851 874 + 661481 4753881 875 + 661481 4753911 875 + 661481 4753941 876 + 661481 4753971 877 + 661481 4754001 879 + 661481 4754031 882 + 661481 4754061 898 + 661481 4754091 914 + 661481 4754121 944 + 661481 4754151 968 + 661481 4754181 967 + 661481 4754211 968 + 661481 4754241 967 + 661481 4754271 966 + 661481 4754301 966 + 661481 4754331 966 + 661481 4754361 966 + 661481 4754391 967 + 661481 4754421 968 + 661481 4754451 968 + 661481 4754481 967 + 661481 4754511 967 + 661481 4754541 966 + 661511 4751301 1020 + 661511 4751331 1020 + 661511 4751361 1019 + 661511 4751391 1019 + 661511 4751421 1018 + 661511 4751451 1018 + 661511 4751481 1018 + 661511 4751511 1018 + 661511 4751541 1017 + 661511 4751571 1017 + 661511 4751601 1016 + 661511 4751631 1016 + 661511 4751661 1016 + 661511 4751691 1015 + 661511 4751721 1014 + 661511 4751751 1009 + 661511 4751781 997 + 661511 4751811 985 + 661511 4751841 971 + 661511 4751871 955 + 661511 4751901 940 + 661511 4751931 925 + 661511 4751961 923 + 661511 4751991 915 + 661511 4752021 903 + 661511 4752051 895 + 661511 4752081 889 + 661511 4752111 885 + 661511 4752141 881 + 661511 4752171 878 + 661511 4752201 875 + 661511 4752231 872 + 661511 4752261 870 + 661511 4752291 867 + 661511 4752321 863 + 661511 4752351 856 + 661511 4752381 848 + 661511 4752411 847 + 661511 4752441 840 + 661511 4752471 836 + 661511 4752501 839 + 661511 4752531 842 + 661511 4752561 844 + 661511 4752591 851 + 661511 4752621 860 + 661511 4752651 861 + 661511 4752681 845 + 661511 4752711 834 + 661511 4752741 820 + 661511 4752771 813 + 661511 4752801 811 + 661511 4752831 811 + 661511 4752861 831 + 661511 4752891 849 + 661511 4752921 861 + 661511 4752951 863 + 661511 4752981 865 + 661511 4753011 867 + 661511 4753041 867 + 661511 4753071 867 + 661511 4753101 868 + 661511 4753131 869 + 661511 4753161 869 + 661511 4753191 869 + 661511 4753221 869 + 661511 4753251 868 + 661511 4753281 868 + 661511 4753311 869 + 661511 4753341 869 + 661511 4753371 869 + 661511 4753401 868 + 661511 4753431 868 + 661511 4753461 869 + 661511 4753491 870 + 661511 4753521 869 + 661511 4753551 857 + 661511 4753581 809 + 661511 4753611 809 + 661511 4753641 809 + 661511 4753671 809 + 661511 4753701 809 + 661511 4753731 817 + 661511 4753761 838 + 661511 4753791 856 + 661511 4753821 872 + 661511 4753851 877 + 661511 4753881 877 + 661511 4753911 877 + 661511 4753941 877 + 661511 4753971 878 + 661511 4754001 881 + 661511 4754031 883 + 661511 4754061 899 + 661511 4754091 912 + 661511 4754121 942 + 661511 4754151 968 + 661511 4754181 968 + 661511 4754211 968 + 661511 4754241 967 + 661511 4754271 967 + 661511 4754301 966 + 661511 4754331 966 + 661511 4754361 966 + 661511 4754391 967 + 661511 4754421 968 + 661511 4754451 968 + 661511 4754481 967 + 661511 4754511 967 + 661511 4754541 966 + 661541 4751301 1021 + 661541 4751331 1020 + 661541 4751361 1019 + 661541 4751391 1019 + 661541 4751421 1019 + 661541 4751451 1018 + 661541 4751481 1018 + 661541 4751511 1018 + 661541 4751541 1018 + 661541 4751571 1018 + 661541 4751601 1017 + 661541 4751631 1017 + 661541 4751661 1016 + 661541 4751691 1015 + 661541 4751721 1013 + 661541 4751751 1004 + 661541 4751781 991 + 661541 4751811 976 + 661541 4751841 963 + 661541 4751871 947 + 661541 4751901 936 + 661541 4751931 938 + 661541 4751961 931 + 661541 4751991 917 + 661541 4752021 904 + 661541 4752051 896 + 661541 4752081 890 + 661541 4752111 884 + 661541 4752141 881 + 661541 4752171 877 + 661541 4752201 874 + 661541 4752231 872 + 661541 4752261 869 + 661541 4752291 866 + 661541 4752321 863 + 661541 4752351 853 + 661541 4752381 847 + 661541 4752411 843 + 661541 4752441 838 + 661541 4752471 838 + 661541 4752501 843 + 661541 4752531 845 + 661541 4752561 850 + 661541 4752591 857 + 661541 4752621 865 + 661541 4752651 865 + 661541 4752681 849 + 661541 4752711 837 + 661541 4752741 825 + 661541 4752771 817 + 661541 4752801 813 + 661541 4752831 811 + 661541 4752861 824 + 661541 4752891 842 + 661541 4752921 856 + 661541 4752951 862 + 661541 4752981 864 + 661541 4753011 866 + 661541 4753041 867 + 661541 4753071 868 + 661541 4753101 869 + 661541 4753131 869 + 661541 4753161 869 + 661541 4753191 869 + 661541 4753221 869 + 661541 4753251 869 + 661541 4753281 869 + 661541 4753311 869 + 661541 4753341 869 + 661541 4753371 869 + 661541 4753401 869 + 661541 4753431 869 + 661541 4753461 869 + 661541 4753491 870 + 661541 4753521 869 + 661541 4753551 858 + 661541 4753581 809 + 661541 4753611 809 + 661541 4753641 809 + 661541 4753671 809 + 661541 4753701 809 + 661541 4753731 820 + 661541 4753761 841 + 661541 4753791 858 + 661541 4753821 875 + 661541 4753851 877 + 661541 4753881 877 + 661541 4753911 878 + 661541 4753941 879 + 661541 4753971 880 + 661541 4754001 881 + 661541 4754031 884 + 661541 4754061 900 + 661541 4754091 912 + 661541 4754121 942 + 661541 4754151 968 + 661541 4754181 968 + 661541 4754211 968 + 661541 4754241 967 + 661541 4754271 967 + 661541 4754301 967 + 661541 4754331 967 + 661541 4754361 966 + 661541 4754391 967 + 661541 4754421 968 + 661541 4754451 968 + 661541 4754481 967 + 661541 4754511 967 + 661541 4754541 966 + 661571 4751301 1021 + 661571 4751331 1020 + 661571 4751361 1020 + 661571 4751391 1019 + 661571 4751421 1019 + 661571 4751451 1019 + 661571 4751481 1019 + 661571 4751511 1019 + 661571 4751541 1018 + 661571 4751571 1018 + 661571 4751601 1018 + 661571 4751631 1017 + 661571 4751661 1016 + 661571 4751691 1015 + 661571 4751721 1010 + 661571 4751751 997 + 661571 4751781 985 + 661571 4751811 970 + 661571 4751841 958 + 661571 4751871 952 + 661571 4751901 948 + 661571 4751931 943 + 661571 4751961 927 + 661571 4751991 913 + 661571 4752021 903 + 661571 4752051 895 + 661571 4752081 890 + 661571 4752111 885 + 661571 4752141 880 + 661571 4752171 877 + 661571 4752201 874 + 661571 4752231 871 + 661571 4752261 868 + 661571 4752291 865 + 661571 4752321 862 + 661571 4752351 851 + 661571 4752381 846 + 661571 4752411 841 + 661571 4752441 839 + 661571 4752471 842 + 661571 4752501 849 + 661571 4752531 853 + 661571 4752561 858 + 661571 4752591 864 + 661571 4752621 870 + 661571 4752651 870 + 661571 4752681 854 + 661571 4752711 840 + 661571 4752741 829 + 661571 4752771 820 + 661571 4752801 814 + 661571 4752831 811 + 661571 4752861 819 + 661571 4752891 839 + 661571 4752921 857 + 661571 4752951 862 + 661571 4752981 864 + 661571 4753011 866 + 661571 4753041 868 + 661571 4753071 869 + 661571 4753101 869 + 661571 4753131 869 + 661571 4753161 869 + 661571 4753191 869 + 661571 4753221 869 + 661571 4753251 869 + 661571 4753281 869 + 661571 4753311 869 + 661571 4753341 869 + 661571 4753371 869 + 661571 4753401 869 + 661571 4753431 869 + 661571 4753461 869 + 661571 4753491 870 + 661571 4753521 866 + 661571 4753551 855 + 661571 4753581 809 + 661571 4753611 809 + 661571 4753641 809 + 661571 4753671 809 + 661571 4753701 812 + 661571 4753731 823 + 661571 4753761 844 + 661571 4753791 866 + 661571 4753821 876 + 661571 4753851 878 + 661571 4753881 878 + 661571 4753911 878 + 661571 4753941 880 + 661571 4753971 880 + 661571 4754001 882 + 661571 4754031 884 + 661571 4754061 900 + 661571 4754091 912 + 661571 4754121 944 + 661571 4754151 968 + 661571 4754181 968 + 661571 4754211 968 + 661571 4754241 967 + 661571 4754271 967 + 661571 4754301 967 + 661571 4754331 967 + 661571 4754361 967 + 661571 4754391 967 + 661571 4754421 968 + 661571 4754451 968 + 661571 4754481 967 + 661571 4754511 967 + 661571 4754541 967 + 661601 4751301 1021 + 661601 4751331 1021 + 661601 4751361 1020 + 661601 4751391 1020 + 661601 4751421 1019 + 661601 4751451 1019 + 661601 4751481 1019 + 661601 4751511 1019 + 661601 4751541 1019 + 661601 4751571 1019 + 661601 4751601 1019 + 661601 4751631 1018 + 661601 4751661 1017 + 661601 4751691 1015 + 661601 4751721 1008 + 661601 4751751 995 + 661601 4751781 985 + 661601 4751811 971 + 661601 4751841 963 + 661601 4751871 957 + 661601 4751901 949 + 661601 4751931 935 + 661601 4751961 916 + 661601 4751991 906 + 661601 4752021 898 + 661601 4752051 891 + 661601 4752081 887 + 661601 4752111 883 + 661601 4752141 878 + 661601 4752171 876 + 661601 4752201 873 + 661601 4752231 870 + 661601 4752261 867 + 661601 4752291 863 + 661601 4752321 860 + 661601 4752351 852 + 661601 4752381 852 + 661601 4752411 845 + 661601 4752441 842 + 661601 4752471 843 + 661601 4752501 853 + 661601 4752531 862 + 661601 4752561 866 + 661601 4752591 869 + 661601 4752621 872 + 661601 4752651 872 + 661601 4752681 865 + 661601 4752711 845 + 661601 4752741 833 + 661601 4752771 822 + 661601 4752801 815 + 661601 4752831 811 + 661601 4752861 819 + 661601 4752891 840 + 661601 4752921 858 + 661601 4752951 862 + 661601 4752981 864 + 661601 4753011 866 + 661601 4753041 868 + 661601 4753071 869 + 661601 4753101 869 + 661601 4753131 869 + 661601 4753161 869 + 661601 4753191 869 + 661601 4753221 869 + 661601 4753251 869 + 661601 4753281 869 + 661601 4753311 869 + 661601 4753341 869 + 661601 4753371 869 + 661601 4753401 869 + 661601 4753431 869 + 661601 4753461 869 + 661601 4753491 869 + 661601 4753521 861 + 661601 4753551 842 + 661601 4753581 809 + 661601 4753611 809 + 661601 4753641 809 + 661601 4753671 809 + 661601 4753701 815 + 661601 4753731 826 + 661601 4753761 850 + 661601 4753791 869 + 661601 4753821 877 + 661601 4753851 878 + 661601 4753881 879 + 661601 4753911 879 + 661601 4753941 880 + 661601 4753971 881 + 661601 4754001 882 + 661601 4754031 884 + 661601 4754061 900 + 661601 4754091 913 + 661601 4754121 946 + 661601 4754151 968 + 661601 4754181 968 + 661601 4754211 968 + 661601 4754241 968 + 661601 4754271 968 + 661601 4754301 967 + 661601 4754331 968 + 661601 4754361 967 + 661601 4754391 967 + 661601 4754421 968 + 661601 4754451 968 + 661601 4754481 967 + 661601 4754511 967 + 661601 4754541 967 + 661631 4751301 1021 + 661631 4751331 1021 + 661631 4751361 1020 + 661631 4751391 1020 + 661631 4751421 1020 + 661631 4751451 1020 + 661631 4751481 1020 + 661631 4751511 1020 + 661631 4751541 1019 + 661631 4751571 1019 + 661631 4751601 1019 + 661631 4751631 1019 + 661631 4751661 1019 + 661631 4751691 1017 + 661631 4751721 1011 + 661631 4751751 998 + 661631 4751781 984 + 661631 4751811 971 + 661631 4751841 962 + 661631 4751871 952 + 661631 4751901 940 + 661631 4751931 930 + 661631 4751961 917 + 661631 4751991 908 + 661631 4752021 898 + 661631 4752051 891 + 661631 4752081 888 + 661631 4752111 884 + 661631 4752141 879 + 661631 4752171 877 + 661631 4752201 873 + 661631 4752231 870 + 661631 4752261 867 + 661631 4752291 862 + 661631 4752321 860 + 661631 4752351 859 + 661631 4752381 859 + 661631 4752411 845 + 661631 4752441 844 + 661631 4752471 847 + 661631 4752501 861 + 661631 4752531 863 + 661631 4752561 868 + 661631 4752591 869 + 661631 4752621 871 + 661631 4752651 872 + 661631 4752681 868 + 661631 4752711 853 + 661631 4752741 836 + 661631 4752771 823 + 661631 4752801 815 + 661631 4752831 811 + 661631 4752861 819 + 661631 4752891 840 + 661631 4752921 856 + 661631 4752951 862 + 661631 4752981 864 + 661631 4753011 866 + 661631 4753041 868 + 661631 4753071 869 + 661631 4753101 869 + 661631 4753131 869 + 661631 4753161 869 + 661631 4753191 869 + 661631 4753221 869 + 661631 4753251 869 + 661631 4753281 869 + 661631 4753311 869 + 661631 4753341 869 + 661631 4753371 869 + 661631 4753401 869 + 661631 4753431 869 + 661631 4753461 869 + 661631 4753491 870 + 661631 4753521 860 + 661631 4753551 831 + 661631 4753581 809 + 661631 4753611 809 + 661631 4753641 809 + 661631 4753671 809 + 661631 4753701 817 + 661631 4753731 830 + 661631 4753761 853 + 661631 4753791 871 + 661631 4753821 877 + 661631 4753851 878 + 661631 4753881 880 + 661631 4753911 879 + 661631 4753941 880 + 661631 4753971 881 + 661631 4754001 882 + 661631 4754031 884 + 661631 4754061 901 + 661631 4754091 914 + 661631 4754121 947 + 661631 4754151 968 + 661631 4754181 968 + 661631 4754211 968 + 661631 4754241 968 + 661631 4754271 968 + 661631 4754301 968 + 661631 4754331 968 + 661631 4754361 968 + 661631 4754391 968 + 661631 4754421 968 + 661631 4754451 968 + 661631 4754481 967 + 661631 4754511 967 + 661631 4754541 967 + 661661 4751301 1021 + 661661 4751331 1021 + 661661 4751361 1021 + 661661 4751391 1020 + 661661 4751421 1020 + 661661 4751451 1020 + 661661 4751481 1020 + 661661 4751511 1020 + 661661 4751541 1020 + 661661 4751571 1020 + 661661 4751601 1020 + 661661 4751631 1021 + 661661 4751661 1021 + 661661 4751691 1021 + 661661 4751721 1016 + 661661 4751751 1004 + 661661 4751781 993 + 661661 4751811 975 + 661661 4751841 963 + 661661 4751871 953 + 661661 4751901 941 + 661661 4751931 929 + 661661 4751961 918 + 661661 4751991 910 + 661661 4752021 902 + 661661 4752051 895 + 661661 4752081 889 + 661661 4752111 883 + 661661 4752141 879 + 661661 4752171 876 + 661661 4752201 873 + 661661 4752231 869 + 661661 4752261 867 + 661661 4752291 864 + 661661 4752321 862 + 661661 4752351 861 + 661661 4752381 861 + 661661 4752411 850 + 661661 4752441 847 + 661661 4752471 854 + 661661 4752501 862 + 661661 4752531 865 + 661661 4752561 867 + 661661 4752591 868 + 661661 4752621 870 + 661661 4752651 869 + 661661 4752681 871 + 661661 4752711 862 + 661661 4752741 841 + 661661 4752771 825 + 661661 4752801 814 + 661661 4752831 811 + 661661 4752861 818 + 661661 4752891 841 + 661661 4752921 857 + 661661 4752951 862 + 661661 4752981 864 + 661661 4753011 866 + 661661 4753041 867 + 661661 4753071 868 + 661661 4753101 869 + 661661 4753131 869 + 661661 4753161 869 + 661661 4753191 869 + 661661 4753221 869 + 661661 4753251 869 + 661661 4753281 869 + 661661 4753311 869 + 661661 4753341 869 + 661661 4753371 869 + 661661 4753401 870 + 661661 4753431 870 + 661661 4753461 870 + 661661 4753491 870 + 661661 4753521 863 + 661661 4753551 831 + 661661 4753581 809 + 661661 4753611 809 + 661661 4753641 809 + 661661 4753671 809 + 661661 4753701 818 + 661661 4753731 834 + 661661 4753761 857 + 661661 4753791 873 + 661661 4753821 877 + 661661 4753851 878 + 661661 4753881 880 + 661661 4753911 881 + 661661 4753941 881 + 661661 4753971 882 + 661661 4754001 883 + 661661 4754031 885 + 661661 4754061 901 + 661661 4754091 915 + 661661 4754121 950 + 661661 4754151 968 + 661661 4754181 968 + 661661 4754211 968 + 661661 4754241 968 + 661661 4754271 968 + 661661 4754301 968 + 661661 4754331 968 + 661661 4754361 968 + 661661 4754391 968 + 661661 4754421 968 + 661661 4754451 968 + 661661 4754481 968 + 661661 4754511 967 + 661661 4754541 967 + 661691 4751301 1021 + 661691 4751331 1021 + 661691 4751361 1021 + 661691 4751391 1021 + 661691 4751421 1021 + 661691 4751451 1020 + 661691 4751481 1020 + 661691 4751511 1021 + 661691 4751541 1021 + 661691 4751571 1021 + 661691 4751601 1021 + 661691 4751631 1021 + 661691 4751661 1022 + 661691 4751691 1022 + 661691 4751721 1020 + 661691 4751751 1010 + 661691 4751781 998 + 661691 4751811 980 + 661691 4751841 967 + 661691 4751871 954 + 661691 4751901 946 + 661691 4751931 934 + 661691 4751961 922 + 661691 4751991 912 + 661691 4752021 903 + 661691 4752051 894 + 661691 4752081 888 + 661691 4752111 883 + 661691 4752141 879 + 661691 4752171 876 + 661691 4752201 873 + 661691 4752231 870 + 661691 4752261 868 + 661691 4752291 866 + 661691 4752321 863 + 661691 4752351 861 + 661691 4752381 862 + 661691 4752411 856 + 661691 4752441 853 + 661691 4752471 859 + 661691 4752501 864 + 661691 4752531 867 + 661691 4752561 866 + 661691 4752591 866 + 661691 4752621 866 + 661691 4752651 865 + 661691 4752681 864 + 661691 4752711 856 + 661691 4752741 838 + 661691 4752771 823 + 661691 4752801 813 + 661691 4752831 811 + 661691 4752861 818 + 661691 4752891 842 + 661691 4752921 859 + 661691 4752951 862 + 661691 4752981 864 + 661691 4753011 866 + 661691 4753041 867 + 661691 4753071 869 + 661691 4753101 869 + 661691 4753131 869 + 661691 4753161 869 + 661691 4753191 869 + 661691 4753221 869 + 661691 4753251 869 + 661691 4753281 869 + 661691 4753311 869 + 661691 4753341 869 + 661691 4753371 869 + 661691 4753401 870 + 661691 4753431 870 + 661691 4753461 870 + 661691 4753491 870 + 661691 4753521 863 + 661691 4753551 832 + 661691 4753581 809 + 661691 4753611 809 + 661691 4753641 809 + 661691 4753671 809 + 661691 4753701 820 + 661691 4753731 838 + 661691 4753761 862 + 661691 4753791 874 + 661691 4753821 877 + 661691 4753851 879 + 661691 4753881 880 + 661691 4753911 882 + 661691 4753941 883 + 661691 4753971 884 + 661691 4754001 885 + 661691 4754031 886 + 661691 4754061 901 + 661691 4754091 916 + 661691 4754121 948 + 661691 4754151 968 + 661691 4754181 968 + 661691 4754211 968 + 661691 4754241 968 + 661691 4754271 968 + 661691 4754301 968 + 661691 4754331 968 + 661691 4754361 968 + 661691 4754391 968 + 661691 4754421 968 + 661691 4754451 968 + 661691 4754481 968 + 661691 4754511 968 + 661691 4754541 968 + 661721 4751301 1021 + 661721 4751331 1021 + 661721 4751361 1021 + 661721 4751391 1021 + 661721 4751421 1021 + 661721 4751451 1021 + 661721 4751481 1021 + 661721 4751511 1021 + 661721 4751541 1021 + 661721 4751571 1021 + 661721 4751601 1021 + 661721 4751631 1021 + 661721 4751661 1021 + 661721 4751691 1022 + 661721 4751721 1021 + 661721 4751751 1014 + 661721 4751781 998 + 661721 4751811 980 + 661721 4751841 968 + 661721 4751871 958 + 661721 4751901 949 + 661721 4751931 936 + 661721 4751961 925 + 661721 4751991 914 + 661721 4752021 904 + 661721 4752051 893 + 661721 4752081 888 + 661721 4752111 883 + 661721 4752141 879 + 661721 4752171 876 + 661721 4752201 873 + 661721 4752231 871 + 661721 4752261 869 + 661721 4752291 867 + 661721 4752321 865 + 661721 4752351 864 + 661721 4752381 863 + 661721 4752411 861 + 661721 4752441 860 + 661721 4752471 862 + 661721 4752501 867 + 661721 4752531 867 + 661721 4752561 864 + 661721 4752591 862 + 661721 4752621 858 + 661721 4752651 854 + 661721 4752681 849 + 661721 4752711 839 + 661721 4752741 828 + 661721 4752771 814 + 661721 4752801 811 + 661721 4752831 813 + 661721 4752861 823 + 661721 4752891 844 + 661721 4752921 861 + 661721 4752951 863 + 661721 4752981 864 + 661721 4753011 866 + 661721 4753041 868 + 661721 4753071 869 + 661721 4753101 869 + 661721 4753131 869 + 661721 4753161 869 + 661721 4753191 869 + 661721 4753221 869 + 661721 4753251 869 + 661721 4753281 869 + 661721 4753311 869 + 661721 4753341 871 + 661721 4753371 870 + 661721 4753401 871 + 661721 4753431 871 + 661721 4753461 872 + 661721 4753491 872 + 661721 4753521 860 + 661721 4753551 838 + 661721 4753581 809 + 661721 4753611 809 + 661721 4753641 809 + 661721 4753671 809 + 661721 4753701 820 + 661721 4753731 838 + 661721 4753761 863 + 661721 4753791 875 + 661721 4753821 877 + 661721 4753851 879 + 661721 4753881 880 + 661721 4753911 882 + 661721 4753941 883 + 661721 4753971 886 + 661721 4754001 891 + 661721 4754031 896 + 661721 4754061 902 + 661721 4754091 917 + 661721 4754121 947 + 661721 4754151 968 + 661721 4754181 968 + 661721 4754211 968 + 661721 4754241 968 + 661721 4754271 968 + 661721 4754301 968 + 661721 4754331 969 + 661721 4754361 968 + 661721 4754391 968 + 661721 4754421 968 + 661721 4754451 968 + 661721 4754481 968 + 661721 4754511 968 + 661721 4754541 968 + 661751 4751301 1021 + 661751 4751331 1021 + 661751 4751361 1021 + 661751 4751391 1021 + 661751 4751421 1021 + 661751 4751451 1021 + 661751 4751481 1021 + 661751 4751511 1022 + 661751 4751541 1022 + 661751 4751571 1022 + 661751 4751601 1022 + 661751 4751631 1022 + 661751 4751661 1023 + 661751 4751691 1023 + 661751 4751721 1022 + 661751 4751751 1016 + 661751 4751781 1000 + 661751 4751811 986 + 661751 4751841 974 + 661751 4751871 962 + 661751 4751901 950 + 661751 4751931 939 + 661751 4751961 926 + 661751 4751991 913 + 661751 4752021 905 + 661751 4752051 896 + 661751 4752081 890 + 661751 4752111 883 + 661751 4752141 879 + 661751 4752171 876 + 661751 4752201 874 + 661751 4752231 871 + 661751 4752261 869 + 661751 4752291 867 + 661751 4752321 866 + 661751 4752351 865 + 661751 4752381 863 + 661751 4752411 862 + 661751 4752441 863 + 661751 4752471 865 + 661751 4752501 867 + 661751 4752531 862 + 661751 4752561 854 + 661751 4752591 850 + 661751 4752621 843 + 661751 4752651 835 + 661751 4752681 831 + 661751 4752711 824 + 661751 4752741 815 + 661751 4752771 811 + 661751 4752801 812 + 661751 4752831 818 + 661751 4752861 829 + 661751 4752891 843 + 661751 4752921 860 + 661751 4752951 862 + 661751 4752981 864 + 661751 4753011 866 + 661751 4753041 868 + 661751 4753071 869 + 661751 4753101 869 + 661751 4753131 869 + 661751 4753161 869 + 661751 4753191 869 + 661751 4753221 869 + 661751 4753251 869 + 661751 4753281 870 + 661751 4753311 870 + 661751 4753341 871 + 661751 4753371 870 + 661751 4753401 870 + 661751 4753431 870 + 661751 4753461 870 + 661751 4753491 870 + 661751 4753521 861 + 661751 4753551 844 + 661751 4753581 809 + 661751 4753611 809 + 661751 4753641 809 + 661751 4753671 809 + 661751 4753701 820 + 661751 4753731 837 + 661751 4753761 859 + 661751 4753791 872 + 661751 4753821 877 + 661751 4753851 878 + 661751 4753881 880 + 661751 4753911 882 + 661751 4753941 884 + 661751 4753971 889 + 661751 4754001 893 + 661751 4754031 897 + 661751 4754061 901 + 661751 4754091 917 + 661751 4754121 946 + 661751 4754151 968 + 661751 4754181 968 + 661751 4754211 968 + 661751 4754241 968 + 661751 4754271 969 + 661751 4754301 969 + 661751 4754331 969 + 661751 4754361 968 + 661751 4754391 968 + 661751 4754421 969 + 661751 4754451 969 + 661751 4754481 968 + 661751 4754511 968 + 661751 4754541 968 + 661781 4751301 1021 + 661781 4751331 1021 + 661781 4751361 1021 + 661781 4751391 1021 + 661781 4751421 1021 + 661781 4751451 1021 + 661781 4751481 1022 + 661781 4751511 1022 + 661781 4751541 1022 + 661781 4751571 1022 + 661781 4751601 1022 + 661781 4751631 1022 + 661781 4751661 1023 + 661781 4751691 1023 + 661781 4751721 1022 + 661781 4751751 1017 + 661781 4751781 1002 + 661781 4751811 988 + 661781 4751841 976 + 661781 4751871 963 + 661781 4751901 950 + 661781 4751931 937 + 661781 4751961 924 + 661781 4751991 913 + 661781 4752021 905 + 661781 4752051 897 + 661781 4752081 889 + 661781 4752111 883 + 661781 4752141 877 + 661781 4752171 875 + 661781 4752201 874 + 661781 4752231 872 + 661781 4752261 870 + 661781 4752291 868 + 661781 4752321 867 + 661781 4752351 865 + 661781 4752381 864 + 661781 4752411 863 + 661781 4752441 863 + 661781 4752471 862 + 661781 4752501 856 + 661781 4752531 851 + 661781 4752561 842 + 661781 4752591 833 + 661781 4752621 828 + 661781 4752651 820 + 661781 4752681 817 + 661781 4752711 812 + 661781 4752741 812 + 661781 4752771 813 + 661781 4752801 818 + 661781 4752831 824 + 661781 4752861 832 + 661781 4752891 843 + 661781 4752921 855 + 661781 4752951 862 + 661781 4752981 865 + 661781 4753011 867 + 661781 4753041 868 + 661781 4753071 869 + 661781 4753101 869 + 661781 4753131 869 + 661781 4753161 869 + 661781 4753191 869 + 661781 4753221 869 + 661781 4753251 869 + 661781 4753281 870 + 661781 4753311 870 + 661781 4753341 870 + 661781 4753371 871 + 661781 4753401 871 + 661781 4753431 871 + 661781 4753461 870 + 661781 4753491 870 + 661781 4753521 865 + 661781 4753551 844 + 661781 4753581 817 + 661781 4753611 809 + 661781 4753641 809 + 661781 4753671 809 + 661781 4753701 819 + 661781 4753731 834 + 661781 4753761 850 + 661781 4753791 870 + 661781 4753821 876 + 661781 4753851 878 + 661781 4753881 880 + 661781 4753911 882 + 661781 4753941 885 + 661781 4753971 887 + 661781 4754001 892 + 661781 4754031 897 + 661781 4754061 901 + 661781 4754091 916 + 661781 4754121 945 + 661781 4754151 968 + 661781 4754181 968 + 661781 4754211 968 + 661781 4754241 968 + 661781 4754271 969 + 661781 4754301 969 + 661781 4754331 968 + 661781 4754361 968 + 661781 4754391 969 + 661781 4754421 969 + 661781 4754451 969 + 661781 4754481 969 + 661781 4754511 968 + 661781 4754541 968 + 661811 4751301 1021 + 661811 4751331 1021 + 661811 4751361 1021 + 661811 4751391 1021 + 661811 4751421 1021 + 661811 4751451 1022 + 661811 4751481 1022 + 661811 4751511 1022 + 661811 4751541 1022 + 661811 4751571 1023 + 661811 4751601 1023 + 661811 4751631 1023 + 661811 4751661 1024 + 661811 4751691 1025 + 661811 4751721 1024 + 661811 4751751 1020 + 661811 4751781 1003 + 661811 4751811 990 + 661811 4751841 982 + 661811 4751871 968 + 661811 4751901 952 + 661811 4751931 936 + 661811 4751961 920 + 661811 4751991 909 + 661811 4752021 901 + 661811 4752051 893 + 661811 4752081 886 + 661811 4752111 882 + 661811 4752141 878 + 661811 4752171 876 + 661811 4752201 874 + 661811 4752231 872 + 661811 4752261 870 + 661811 4752291 868 + 661811 4752321 866 + 661811 4752351 864 + 661811 4752381 863 + 661811 4752411 862 + 661811 4752441 861 + 661811 4752471 852 + 661811 4752501 844 + 661811 4752531 839 + 661811 4752561 830 + 661811 4752591 821 + 661811 4752621 815 + 661811 4752651 812 + 661811 4752681 812 + 661811 4752711 812 + 661811 4752741 815 + 661811 4752771 822 + 661811 4752801 828 + 661811 4752831 833 + 661811 4752861 838 + 661811 4752891 848 + 661811 4752921 861 + 661811 4752951 863 + 661811 4752981 865 + 661811 4753011 867 + 661811 4753041 868 + 661811 4753071 869 + 661811 4753101 869 + 661811 4753131 869 + 661811 4753161 869 + 661811 4753191 869 + 661811 4753221 869 + 661811 4753251 869 + 661811 4753281 870 + 661811 4753311 871 + 661811 4753341 871 + 661811 4753371 872 + 661811 4753401 872 + 661811 4753431 872 + 661811 4753461 872 + 661811 4753491 870 + 661811 4753521 869 + 661811 4753551 849 + 661811 4753581 816 + 661811 4753611 809 + 661811 4753641 809 + 661811 4753671 809 + 661811 4753701 816 + 661811 4753731 832 + 661811 4753761 851 + 661811 4753791 870 + 661811 4753821 877 + 661811 4753851 878 + 661811 4753881 880 + 661811 4753911 882 + 661811 4753941 884 + 661811 4753971 885 + 661811 4754001 889 + 661811 4754031 896 + 661811 4754061 901 + 661811 4754091 914 + 661811 4754121 946 + 661811 4754151 968 + 661811 4754181 968 + 661811 4754211 968 + 661811 4754241 968 + 661811 4754271 969 + 661811 4754301 968 + 661811 4754331 968 + 661811 4754361 969 + 661811 4754391 969 + 661811 4754421 969 + 661811 4754451 969 + 661811 4754481 968 + 661811 4754511 968 + 661811 4754541 968 + 661841 4751301 1021 + 661841 4751331 1021 + 661841 4751361 1021 + 661841 4751391 1021 + 661841 4751421 1022 + 661841 4751451 1022 + 661841 4751481 1022 + 661841 4751511 1022 + 661841 4751541 1023 + 661841 4751571 1023 + 661841 4751601 1024 + 661841 4751631 1025 + 661841 4751661 1025 + 661841 4751691 1026 + 661841 4751721 1025 + 661841 4751751 1021 + 661841 4751781 1006 + 661841 4751811 991 + 661841 4751841 982 + 661841 4751871 966 + 661841 4751901 951 + 661841 4751931 934 + 661841 4751961 918 + 661841 4751991 907 + 661841 4752021 899 + 661841 4752051 894 + 661841 4752081 888 + 661841 4752111 883 + 661841 4752141 879 + 661841 4752171 876 + 661841 4752201 874 + 661841 4752231 872 + 661841 4752261 870 + 661841 4752291 868 + 661841 4752321 867 + 661841 4752351 862 + 661841 4752381 862 + 661841 4752411 861 + 661841 4752441 851 + 661841 4752471 841 + 661841 4752501 832 + 661841 4752531 825 + 661841 4752561 817 + 661841 4752591 812 + 661841 4752621 812 + 661841 4752651 812 + 661841 4752681 818 + 661841 4752711 822 + 661841 4752741 827 + 661841 4752771 834 + 661841 4752801 842 + 661841 4752831 846 + 661841 4752861 852 + 661841 4752891 859 + 661841 4752921 862 + 661841 4752951 863 + 661841 4752981 865 + 661841 4753011 867 + 661841 4753041 868 + 661841 4753071 869 + 661841 4753101 869 + 661841 4753131 869 + 661841 4753161 869 + 661841 4753191 869 + 661841 4753221 869 + 661841 4753251 869 + 661841 4753281 870 + 661841 4753311 870 + 661841 4753341 871 + 661841 4753371 872 + 661841 4753401 871 + 661841 4753431 872 + 661841 4753461 872 + 661841 4753491 871 + 661841 4753521 869 + 661841 4753551 853 + 661841 4753581 817 + 661841 4753611 809 + 661841 4753641 809 + 661841 4753671 809 + 661841 4753701 809 + 661841 4753731 831 + 661841 4753761 849 + 661841 4753791 869 + 661841 4753821 877 + 661841 4753851 878 + 661841 4753881 879 + 661841 4753911 881 + 661841 4753941 882 + 661841 4753971 883 + 661841 4754001 884 + 661841 4754031 884 + 661841 4754061 901 + 661841 4754091 914 + 661841 4754121 947 + 661841 4754151 968 + 661841 4754181 968 + 661841 4754211 968 + 661841 4754241 968 + 661841 4754271 968 + 661841 4754301 968 + 661841 4754331 968 + 661841 4754361 968 + 661841 4754391 969 + 661841 4754421 968 + 661841 4754451 968 + 661841 4754481 968 + 661841 4754511 968 + 661841 4754541 968 + 661871 4751301 1021 + 661871 4751331 1021 + 661871 4751361 1021 + 661871 4751391 1022 + 661871 4751421 1022 + 661871 4751451 1022 + 661871 4751481 1022 + 661871 4751511 1022 + 661871 4751541 1023 + 661871 4751571 1023 + 661871 4751601 1024 + 661871 4751631 1025 + 661871 4751661 1025 + 661871 4751691 1027 + 661871 4751721 1025 + 661871 4751751 1022 + 661871 4751781 1012 + 661871 4751811 994 + 661871 4751841 984 + 661871 4751871 967 + 661871 4751901 952 + 661871 4751931 938 + 661871 4751961 924 + 661871 4751991 911 + 661871 4752021 902 + 661871 4752051 894 + 661871 4752081 888 + 661871 4752111 883 + 661871 4752141 879 + 661871 4752171 876 + 661871 4752201 874 + 661871 4752231 872 + 661871 4752261 869 + 661871 4752291 868 + 661871 4752321 866 + 661871 4752351 863 + 661871 4752381 862 + 661871 4752411 862 + 661871 4752441 847 + 661871 4752471 831 + 661871 4752501 822 + 661871 4752531 814 + 661871 4752561 812 + 661871 4752591 812 + 661871 4752621 817 + 661871 4752651 824 + 661871 4752681 833 + 661871 4752711 837 + 661871 4752741 841 + 661871 4752771 845 + 661871 4752801 853 + 661871 4752831 860 + 661871 4752861 861 + 661871 4752891 862 + 661871 4752921 862 + 661871 4752951 864 + 661871 4752981 866 + 661871 4753011 867 + 661871 4753041 869 + 661871 4753071 869 + 661871 4753101 869 + 661871 4753131 868 + 661871 4753161 868 + 661871 4753191 869 + 661871 4753221 869 + 661871 4753251 869 + 661871 4753281 870 + 661871 4753311 870 + 661871 4753341 872 + 661871 4753371 871 + 661871 4753401 871 + 661871 4753431 872 + 661871 4753461 873 + 661871 4753491 874 + 661871 4753521 865 + 661871 4753551 845 + 661871 4753581 818 + 661871 4753611 809 + 661871 4753641 809 + 661871 4753671 809 + 661871 4753701 817 + 661871 4753731 831 + 661871 4753761 849 + 661871 4753791 868 + 661871 4753821 877 + 661871 4753851 878 + 661871 4753881 879 + 661871 4753911 881 + 661871 4753941 882 + 661871 4753971 882 + 661871 4754001 883 + 661871 4754031 884 + 661871 4754061 902 + 661871 4754091 919 + 661871 4754121 948 + 661871 4754151 968 + 661871 4754181 968 + 661871 4754211 968 + 661871 4754241 967 + 661871 4754271 968 + 661871 4754301 968 + 661871 4754331 968 + 661871 4754361 967 + 661871 4754391 968 + 661871 4754421 968 + 661871 4754451 968 + 661871 4754481 969 + 661871 4754511 969 + 661871 4754541 969 + 661901 4751301 1021 + 661901 4751331 1021 + 661901 4751361 1022 + 661901 4751391 1022 + 661901 4751421 1022 + 661901 4751451 1022 + 661901 4751481 1022 + 661901 4751511 1023 + 661901 4751541 1023 + 661901 4751571 1024 + 661901 4751601 1024 + 661901 4751631 1025 + 661901 4751661 1025 + 661901 4751691 1026 + 661901 4751721 1026 + 661901 4751751 1023 + 661901 4751781 1016 + 661901 4751811 997 + 661901 4751841 985 + 661901 4751871 968 + 661901 4751901 951 + 661901 4751931 935 + 661901 4751961 921 + 661901 4751991 911 + 661901 4752021 904 + 661901 4752051 896 + 661901 4752081 889 + 661901 4752111 884 + 661901 4752141 880 + 661901 4752171 877 + 661901 4752201 874 + 661901 4752231 872 + 661901 4752261 869 + 661901 4752291 867 + 661901 4752321 865 + 661901 4752351 864 + 661901 4752381 863 + 661901 4752411 860 + 661901 4752441 843 + 661901 4752471 825 + 661901 4752501 816 + 661901 4752531 812 + 661901 4752561 814 + 661901 4752591 820 + 661901 4752621 828 + 661901 4752651 835 + 661901 4752681 841 + 661901 4752711 851 + 661901 4752741 858 + 661901 4752771 855 + 661901 4752801 857 + 661901 4752831 861 + 661901 4752861 862 + 661901 4752891 862 + 661901 4752921 863 + 661901 4752951 864 + 661901 4752981 866 + 661901 4753011 868 + 661901 4753041 869 + 661901 4753071 869 + 661901 4753101 869 + 661901 4753131 868 + 661901 4753161 868 + 661901 4753191 869 + 661901 4753221 869 + 661901 4753251 869 + 661901 4753281 870 + 661901 4753311 870 + 661901 4753341 871 + 661901 4753371 871 + 661901 4753401 872 + 661901 4753431 871 + 661901 4753461 871 + 661901 4753491 872 + 661901 4753521 859 + 661901 4753551 835 + 661901 4753581 817 + 661901 4753611 809 + 661901 4753641 809 + 661901 4753671 809 + 661901 4753701 819 + 661901 4753731 834 + 661901 4753761 851 + 661901 4753791 870 + 661901 4753821 877 + 661901 4753851 878 + 661901 4753881 879 + 661901 4753911 879 + 661901 4753941 881 + 661901 4753971 882 + 661901 4754001 883 + 661901 4754031 886 + 661901 4754061 904 + 661901 4754091 926 + 661901 4754121 952 + 661901 4754151 968 + 661901 4754181 968 + 661901 4754211 967 + 661901 4754241 967 + 661901 4754271 968 + 661901 4754301 967 + 661901 4754331 968 + 661901 4754361 967 + 661901 4754391 968 + 661901 4754421 968 + 661901 4754451 970 + 661901 4754481 969 + 661901 4754511 969 + 661901 4754541 969 + 661931 4751301 1021 + 661931 4751331 1022 + 661931 4751361 1022 + 661931 4751391 1022 + 661931 4751421 1022 + 661931 4751451 1022 + 661931 4751481 1023 + 661931 4751511 1023 + 661931 4751541 1023 + 661931 4751571 1024 + 661931 4751601 1024 + 661931 4751631 1025 + 661931 4751661 1025 + 661931 4751691 1026 + 661931 4751721 1025 + 661931 4751751 1025 + 661931 4751781 1021 + 661931 4751811 1005 + 661931 4751841 985 + 661931 4751871 966 + 661931 4751901 950 + 661931 4751931 933 + 661931 4751961 916 + 661931 4751991 906 + 661931 4752021 900 + 661931 4752051 893 + 661931 4752081 889 + 661931 4752111 884 + 661931 4752141 880 + 661931 4752171 877 + 661931 4752201 874 + 661931 4752231 871 + 661931 4752261 869 + 661931 4752291 867 + 661931 4752321 864 + 661931 4752351 862 + 661931 4752381 862 + 661931 4752411 852 + 661931 4752441 838 + 661931 4752471 823 + 661931 4752501 815 + 661931 4752531 812 + 661931 4752561 817 + 661931 4752591 828 + 661931 4752621 835 + 661931 4752651 843 + 661931 4752681 853 + 661931 4752711 861 + 661931 4752741 862 + 661931 4752771 862 + 661931 4752801 861 + 661931 4752831 861 + 661931 4752861 862 + 661931 4752891 863 + 661931 4752921 863 + 661931 4752951 865 + 661931 4752981 866 + 661931 4753011 868 + 661931 4753041 868 + 661931 4753071 869 + 661931 4753101 868 + 661931 4753131 868 + 661931 4753161 868 + 661931 4753191 869 + 661931 4753221 869 + 661931 4753251 869 + 661931 4753281 870 + 661931 4753311 870 + 661931 4753341 870 + 661931 4753371 872 + 661931 4753401 872 + 661931 4753431 872 + 661931 4753461 870 + 661931 4753491 869 + 661931 4753521 846 + 661931 4753551 824 + 661931 4753581 809 + 661931 4753611 809 + 661931 4753641 809 + 661931 4753671 811 + 661931 4753701 821 + 661931 4753731 837 + 661931 4753761 854 + 661931 4753791 871 + 661931 4753821 877 + 661931 4753851 878 + 661931 4753881 879 + 661931 4753911 880 + 661931 4753941 881 + 661931 4753971 882 + 661931 4754001 883 + 661931 4754031 889 + 661931 4754061 906 + 661931 4754091 931 + 661931 4754121 957 + 661931 4754151 968 + 661931 4754181 967 + 661931 4754211 967 + 661931 4754241 966 + 661931 4754271 966 + 661931 4754301 967 + 661931 4754331 967 + 661931 4754361 968 + 661931 4754391 969 + 661931 4754421 969 + 661931 4754451 969 + 661931 4754481 970 + 661931 4754511 970 + 661931 4754541 970 + 661961 4751301 1022 + 661961 4751331 1021 + 661961 4751361 1022 + 661961 4751391 1022 + 661961 4751421 1022 + 661961 4751451 1022 + 661961 4751481 1022 + 661961 4751511 1022 + 661961 4751541 1022 + 661961 4751571 1023 + 661961 4751601 1023 + 661961 4751631 1023 + 661961 4751661 1024 + 661961 4751691 1024 + 661961 4751721 1024 + 661961 4751751 1025 + 661961 4751781 1024 + 661961 4751811 1002 + 661961 4751841 986 + 661961 4751871 968 + 661961 4751901 953 + 661961 4751931 933 + 661961 4751961 916 + 661961 4751991 907 + 661961 4752021 900 + 661961 4752051 891 + 661961 4752081 887 + 661961 4752111 883 + 661961 4752141 880 + 661961 4752171 877 + 661961 4752201 874 + 661961 4752231 871 + 661961 4752261 869 + 661961 4752291 867 + 661961 4752321 863 + 661961 4752351 862 + 661961 4752381 857 + 661961 4752411 844 + 661961 4752441 831 + 661961 4752471 821 + 661961 4752501 814 + 661961 4752531 812 + 661961 4752561 820 + 661961 4752591 832 + 661961 4752621 841 + 661961 4752651 852 + 661961 4752681 861 + 661961 4752711 862 + 661961 4752741 862 + 661961 4752771 862 + 661961 4752801 862 + 661961 4752831 862 + 661961 4752861 862 + 661961 4752891 863 + 661961 4752921 864 + 661961 4752951 865 + 661961 4752981 866 + 661961 4753011 867 + 661961 4753041 868 + 661961 4753071 867 + 661961 4753101 867 + 661961 4753131 868 + 661961 4753161 868 + 661961 4753191 869 + 661961 4753221 869 + 661961 4753251 869 + 661961 4753281 870 + 661961 4753311 870 + 661961 4753341 870 + 661961 4753371 870 + 661961 4753401 872 + 661961 4753431 872 + 661961 4753461 873 + 661961 4753491 859 + 661961 4753521 830 + 661961 4753551 809 + 661961 4753581 809 + 661961 4753611 809 + 661961 4753641 809 + 661961 4753671 815 + 661961 4753701 830 + 661961 4753731 842 + 661961 4753761 860 + 661961 4753791 875 + 661961 4753821 877 + 661961 4753851 878 + 661961 4753881 879 + 661961 4753911 880 + 661961 4753941 881 + 661961 4753971 882 + 661961 4754001 883 + 661961 4754031 892 + 661961 4754061 909 + 661961 4754091 937 + 661961 4754121 963 + 661961 4754151 967 + 661961 4754181 965 + 661961 4754211 966 + 661961 4754241 966 + 661961 4754271 966 + 661961 4754301 967 + 661961 4754331 967 + 661961 4754361 967 + 661961 4754391 969 + 661961 4754421 969 + 661961 4754451 969 + 661961 4754481 969 + 661961 4754511 970 + 661961 4754541 970 + 661991 4751301 1022 + 661991 4751331 1023 + 661991 4751361 1023 + 661991 4751391 1022 + 661991 4751421 1022 + 661991 4751451 1022 + 661991 4751481 1022 + 661991 4751511 1023 + 661991 4751541 1023 + 661991 4751571 1023 + 661991 4751601 1023 + 661991 4751631 1023 + 661991 4751661 1023 + 661991 4751691 1023 + 661991 4751721 1023 + 661991 4751751 1024 + 661991 4751781 1024 + 661991 4751811 1003 + 661991 4751841 986 + 661991 4751871 969 + 661991 4751901 951 + 661991 4751931 932 + 661991 4751961 914 + 661991 4751991 907 + 661991 4752021 897 + 661991 4752051 890 + 661991 4752081 887 + 661991 4752111 884 + 661991 4752141 880 + 661991 4752171 877 + 661991 4752201 874 + 661991 4752231 871 + 661991 4752261 868 + 661991 4752291 866 + 661991 4752321 862 + 661991 4752351 861 + 661991 4752381 857 + 661991 4752411 840 + 661991 4752441 829 + 661991 4752471 821 + 661991 4752501 815 + 661991 4752531 814 + 661991 4752561 821 + 661991 4752591 834 + 661991 4752621 842 + 661991 4752651 856 + 661991 4752681 862 + 661991 4752711 862 + 661991 4752741 862 + 661991 4752771 862 + 661991 4752801 862 + 661991 4752831 862 + 661991 4752861 863 + 661991 4752891 863 + 661991 4752921 864 + 661991 4752951 865 + 661991 4752981 866 + 661991 4753011 867 + 661991 4753041 867 + 661991 4753071 867 + 661991 4753101 867 + 661991 4753131 868 + 661991 4753161 868 + 661991 4753191 869 + 661991 4753221 869 + 661991 4753251 869 + 661991 4753281 870 + 661991 4753311 870 + 661991 4753341 870 + 661991 4753371 870 + 661991 4753401 870 + 661991 4753431 872 + 661991 4753461 871 + 661991 4753491 854 + 661991 4753521 809 + 661991 4753551 809 + 661991 4753581 809 + 661991 4753611 809 + 661991 4753641 813 + 661991 4753671 829 + 661991 4753701 841 + 661991 4753731 856 + 661991 4753761 871 + 661991 4753791 877 + 661991 4753821 878 + 661991 4753851 878 + 661991 4753881 879 + 661991 4753911 880 + 661991 4753941 881 + 661991 4753971 882 + 661991 4754001 884 + 661991 4754031 896 + 661991 4754061 912 + 661991 4754091 941 + 661991 4754121 967 + 661991 4754151 963 + 661991 4754181 963 + 661991 4754211 964 + 661991 4754241 964 + 661991 4754271 965 + 661991 4754301 966 + 661991 4754331 967 + 661991 4754361 967 + 661991 4754391 968 + 661991 4754421 968 + 661991 4754451 968 + 661991 4754481 968 + 661991 4754511 968 + 661991 4754541 968 + 662021 4751301 1023 + 662021 4751331 1023 + 662021 4751361 1023 + 662021 4751391 1023 + 662021 4751421 1022 + 662021 4751451 1022 + 662021 4751481 1022 + 662021 4751511 1023 + 662021 4751541 1023 + 662021 4751571 1023 + 662021 4751601 1023 + 662021 4751631 1023 + 662021 4751661 1023 + 662021 4751691 1024 + 662021 4751721 1023 + 662021 4751751 1023 + 662021 4751781 1022 + 662021 4751811 1001 + 662021 4751841 983 + 662021 4751871 965 + 662021 4751901 946 + 662021 4751931 930 + 662021 4751961 913 + 662021 4751991 905 + 662021 4752021 897 + 662021 4752051 890 + 662021 4752081 886 + 662021 4752111 883 + 662021 4752141 880 + 662021 4752171 877 + 662021 4752201 874 + 662021 4752231 870 + 662021 4752261 868 + 662021 4752291 866 + 662021 4752321 863 + 662021 4752351 863 + 662021 4752381 861 + 662021 4752411 843 + 662021 4752441 826 + 662021 4752471 820 + 662021 4752501 816 + 662021 4752531 814 + 662021 4752561 821 + 662021 4752591 833 + 662021 4752621 841 + 662021 4752651 852 + 662021 4752681 862 + 662021 4752711 861 + 662021 4752741 862 + 662021 4752771 863 + 662021 4752801 863 + 662021 4752831 863 + 662021 4752861 863 + 662021 4752891 864 + 662021 4752921 864 + 662021 4752951 865 + 662021 4752981 866 + 662021 4753011 866 + 662021 4753041 866 + 662021 4753071 867 + 662021 4753101 867 + 662021 4753131 868 + 662021 4753161 868 + 662021 4753191 869 + 662021 4753221 869 + 662021 4753251 869 + 662021 4753281 870 + 662021 4753311 870 + 662021 4753341 870 + 662021 4753371 870 + 662021 4753401 870 + 662021 4753431 870 + 662021 4753461 869 + 662021 4753491 838 + 662021 4753521 809 + 662021 4753551 809 + 662021 4753581 809 + 662021 4753611 809 + 662021 4753641 824 + 662021 4753671 838 + 662021 4753701 859 + 662021 4753731 868 + 662021 4753761 877 + 662021 4753791 877 + 662021 4753821 878 + 662021 4753851 878 + 662021 4753881 879 + 662021 4753911 880 + 662021 4753941 881 + 662021 4753971 882 + 662021 4754001 884 + 662021 4754031 899 + 662021 4754061 916 + 662021 4754091 944 + 662021 4754121 954 + 662021 4754151 960 + 662021 4754181 962 + 662021 4754211 964 + 662021 4754241 965 + 662021 4754271 965 + 662021 4754301 966 + 662021 4754331 967 + 662021 4754361 967 + 662021 4754391 968 + 662021 4754421 968 + 662021 4754451 968 + 662021 4754481 969 + 662021 4754511 969 + 662021 4754541 969 + 662051 4751301 1023 + 662051 4751331 1023 + 662051 4751361 1023 + 662051 4751391 1023 + 662051 4751421 1023 + 662051 4751451 1023 + 662051 4751481 1022 + 662051 4751511 1023 + 662051 4751541 1023 + 662051 4751571 1023 + 662051 4751601 1023 + 662051 4751631 1023 + 662051 4751661 1023 + 662051 4751691 1023 + 662051 4751721 1024 + 662051 4751751 1024 + 662051 4751781 1019 + 662051 4751811 999 + 662051 4751841 984 + 662051 4751871 966 + 662051 4751901 948 + 662051 4751931 930 + 662051 4751961 914 + 662051 4751991 904 + 662051 4752021 898 + 662051 4752051 889 + 662051 4752081 884 + 662051 4752111 881 + 662051 4752141 878 + 662051 4752171 876 + 662051 4752201 873 + 662051 4752231 870 + 662051 4752261 868 + 662051 4752291 866 + 662051 4752321 865 + 662051 4752351 863 + 662051 4752381 862 + 662051 4752411 853 + 662051 4752441 834 + 662051 4752471 822 + 662051 4752501 816 + 662051 4752531 814 + 662051 4752561 820 + 662051 4752591 832 + 662051 4752621 841 + 662051 4752651 850 + 662051 4752681 860 + 662051 4752711 861 + 662051 4752741 862 + 662051 4752771 863 + 662051 4752801 863 + 662051 4752831 863 + 662051 4752861 864 + 662051 4752891 864 + 662051 4752921 865 + 662051 4752951 865 + 662051 4752981 866 + 662051 4753011 866 + 662051 4753041 866 + 662051 4753071 867 + 662051 4753101 868 + 662051 4753131 868 + 662051 4753161 869 + 662051 4753191 869 + 662051 4753221 869 + 662051 4753251 870 + 662051 4753281 870 + 662051 4753311 870 + 662051 4753341 870 + 662051 4753371 870 + 662051 4753401 870 + 662051 4753431 869 + 662051 4753461 867 + 662051 4753491 809 + 662051 4753521 809 + 662051 4753551 809 + 662051 4753581 809 + 662051 4753611 809 + 662051 4753641 828 + 662051 4753671 846 + 662051 4753701 868 + 662051 4753731 876 + 662051 4753761 877 + 662051 4753791 878 + 662051 4753821 878 + 662051 4753851 879 + 662051 4753881 880 + 662051 4753911 881 + 662051 4753941 882 + 662051 4753971 883 + 662051 4754001 887 + 662051 4754031 905 + 662051 4754061 922 + 662051 4754091 948 + 662051 4754121 955 + 662051 4754151 958 + 662051 4754181 961 + 662051 4754211 963 + 662051 4754241 965 + 662051 4754271 965 + 662051 4754301 966 + 662051 4754331 967 + 662051 4754361 967 + 662051 4754391 968 + 662051 4754421 968 + 662051 4754451 968 + 662051 4754481 969 + 662051 4754511 969 + 662051 4754541 969 + 662081 4751301 1023 + 662081 4751331 1023 + 662081 4751361 1024 + 662081 4751391 1023 + 662081 4751421 1023 + 662081 4751451 1024 + 662081 4751481 1024 + 662081 4751511 1024 + 662081 4751541 1025 + 662081 4751571 1024 + 662081 4751601 1024 + 662081 4751631 1024 + 662081 4751661 1025 + 662081 4751691 1025 + 662081 4751721 1026 + 662081 4751751 1026 + 662081 4751781 1020 + 662081 4751811 999 + 662081 4751841 983 + 662081 4751871 965 + 662081 4751901 946 + 662081 4751931 933 + 662081 4751961 914 + 662081 4751991 906 + 662081 4752021 897 + 662081 4752051 889 + 662081 4752081 884 + 662081 4752111 879 + 662081 4752141 876 + 662081 4752171 874 + 662081 4752201 872 + 662081 4752231 869 + 662081 4752261 867 + 662081 4752291 865 + 662081 4752321 862 + 662081 4752351 863 + 662081 4752381 862 + 662081 4752411 853 + 662081 4752441 836 + 662081 4752471 823 + 662081 4752501 816 + 662081 4752531 814 + 662081 4752561 821 + 662081 4752591 835 + 662081 4752621 847 + 662081 4752651 860 + 662081 4752681 861 + 662081 4752711 862 + 662081 4752741 862 + 662081 4752771 863 + 662081 4752801 863 + 662081 4752831 864 + 662081 4752861 864 + 662081 4752891 864 + 662081 4752921 865 + 662081 4752951 866 + 662081 4752981 866 + 662081 4753011 866 + 662081 4753041 867 + 662081 4753071 867 + 662081 4753101 868 + 662081 4753131 868 + 662081 4753161 869 + 662081 4753191 869 + 662081 4753221 869 + 662081 4753251 869 + 662081 4753281 870 + 662081 4753311 870 + 662081 4753341 871 + 662081 4753371 870 + 662081 4753401 870 + 662081 4753431 870 + 662081 4753461 866 + 662081 4753491 809 + 662081 4753521 809 + 662081 4753551 809 + 662081 4753581 809 + 662081 4753611 809 + 662081 4753641 830 + 662081 4753671 847 + 662081 4753701 866 + 662081 4753731 876 + 662081 4753761 877 + 662081 4753791 878 + 662081 4753821 878 + 662081 4753851 879 + 662081 4753881 880 + 662081 4753911 880 + 662081 4753941 882 + 662081 4753971 883 + 662081 4754001 894 + 662081 4754031 910 + 662081 4754061 927 + 662081 4754091 952 + 662081 4754121 967 + 662081 4754151 960 + 662081 4754181 962 + 662081 4754211 964 + 662081 4754241 965 + 662081 4754271 965 + 662081 4754301 967 + 662081 4754331 967 + 662081 4754361 968 + 662081 4754391 968 + 662081 4754421 969 + 662081 4754451 969 + 662081 4754481 969 + 662081 4754511 970 + 662081 4754541 970 + 662111 4751301 1022 + 662111 4751331 1023 + 662111 4751361 1023 + 662111 4751391 1023 + 662111 4751421 1024 + 662111 4751451 1024 + 662111 4751481 1023 + 662111 4751511 1024 + 662111 4751541 1024 + 662111 4751571 1025 + 662111 4751601 1024 + 662111 4751631 1025 + 662111 4751661 1025 + 662111 4751691 1025 + 662111 4751721 1026 + 662111 4751751 1026 + 662111 4751781 1020 + 662111 4751811 1000 + 662111 4751841 985 + 662111 4751871 967 + 662111 4751901 949 + 662111 4751931 933 + 662111 4751961 916 + 662111 4751991 908 + 662111 4752021 899 + 662111 4752051 890 + 662111 4752081 884 + 662111 4752111 880 + 662111 4752141 877 + 662111 4752171 874 + 662111 4752201 871 + 662111 4752231 868 + 662111 4752261 864 + 662111 4752291 861 + 662111 4752321 862 + 662111 4752351 862 + 662111 4752381 861 + 662111 4752411 847 + 662111 4752441 831 + 662111 4752471 821 + 662111 4752501 817 + 662111 4752531 817 + 662111 4752561 825 + 662111 4752591 838 + 662111 4752621 850 + 662111 4752651 861 + 662111 4752681 862 + 662111 4752711 862 + 662111 4752741 863 + 662111 4752771 863 + 662111 4752801 864 + 662111 4752831 864 + 662111 4752861 864 + 662111 4752891 865 + 662111 4752921 865 + 662111 4752951 866 + 662111 4752981 866 + 662111 4753011 866 + 662111 4753041 867 + 662111 4753071 867 + 662111 4753101 868 + 662111 4753131 868 + 662111 4753161 868 + 662111 4753191 869 + 662111 4753221 869 + 662111 4753251 869 + 662111 4753281 870 + 662111 4753311 870 + 662111 4753341 871 + 662111 4753371 871 + 662111 4753401 871 + 662111 4753431 870 + 662111 4753461 859 + 662111 4753491 809 + 662111 4753521 809 + 662111 4753551 809 + 662111 4753581 809 + 662111 4753611 809 + 662111 4753641 830 + 662111 4753671 848 + 662111 4753701 868 + 662111 4753731 877 + 662111 4753761 877 + 662111 4753791 878 + 662111 4753821 878 + 662111 4753851 877 + 662111 4753881 878 + 662111 4753911 880 + 662111 4753941 882 + 662111 4753971 886 + 662111 4754001 901 + 662111 4754031 919 + 662111 4754061 937 + 662111 4754091 959 + 662111 4754121 968 + 662111 4754151 967 + 662111 4754181 965 + 662111 4754211 964 + 662111 4754241 965 + 662111 4754271 965 + 662111 4754301 966 + 662111 4754331 967 + 662111 4754361 968 + 662111 4754391 969 + 662111 4754421 969 + 662111 4754451 969 + 662111 4754481 969 + 662111 4754511 970 + 662111 4754541 971 + 662141 4751301 1022 + 662141 4751331 1022 + 662141 4751361 1023 + 662141 4751391 1023 + 662141 4751421 1023 + 662141 4751451 1023 + 662141 4751481 1024 + 662141 4751511 1024 + 662141 4751541 1024 + 662141 4751571 1025 + 662141 4751601 1025 + 662141 4751631 1026 + 662141 4751661 1026 + 662141 4751691 1026 + 662141 4751721 1026 + 662141 4751751 1025 + 662141 4751781 1019 + 662141 4751811 1001 + 662141 4751841 986 + 662141 4751871 968 + 662141 4751901 951 + 662141 4751931 932 + 662141 4751961 917 + 662141 4751991 908 + 662141 4752021 897 + 662141 4752051 890 + 662141 4752081 885 + 662141 4752111 882 + 662141 4752141 877 + 662141 4752171 875 + 662141 4752201 872 + 662141 4752231 869 + 662141 4752261 865 + 662141 4752291 862 + 662141 4752321 860 + 662141 4752351 860 + 662141 4752381 854 + 662141 4752411 842 + 662141 4752441 826 + 662141 4752471 818 + 662141 4752501 817 + 662141 4752531 817 + 662141 4752561 834 + 662141 4752591 846 + 662141 4752621 857 + 662141 4752651 861 + 662141 4752681 862 + 662141 4752711 862 + 662141 4752741 863 + 662141 4752771 863 + 662141 4752801 864 + 662141 4752831 864 + 662141 4752861 865 + 662141 4752891 865 + 662141 4752921 865 + 662141 4752951 866 + 662141 4752981 866 + 662141 4753011 866 + 662141 4753041 867 + 662141 4753071 867 + 662141 4753101 867 + 662141 4753131 868 + 662141 4753161 868 + 662141 4753191 868 + 662141 4753221 869 + 662141 4753251 869 + 662141 4753281 870 + 662141 4753311 870 + 662141 4753341 871 + 662141 4753371 870 + 662141 4753401 871 + 662141 4753431 868 + 662141 4753461 846 + 662141 4753491 809 + 662141 4753521 809 + 662141 4753551 809 + 662141 4753581 809 + 662141 4753611 809 + 662141 4753641 831 + 662141 4753671 849 + 662141 4753701 865 + 662141 4753731 877 + 662141 4753761 877 + 662141 4753791 877 + 662141 4753821 876 + 662141 4753851 876 + 662141 4753881 877 + 662141 4753911 880 + 662141 4753941 883 + 662141 4753971 893 + 662141 4754001 905 + 662141 4754031 924 + 662141 4754061 944 + 662141 4754091 968 + 662141 4754121 968 + 662141 4754151 967 + 662141 4754181 967 + 662141 4754211 966 + 662141 4754241 966 + 662141 4754271 966 + 662141 4754301 967 + 662141 4754331 967 + 662141 4754361 968 + 662141 4754391 968 + 662141 4754421 969 + 662141 4754451 969 + 662141 4754481 970 + 662141 4754511 971 + 662141 4754541 970 + 662171 4751301 1021 + 662171 4751331 1022 + 662171 4751361 1022 + 662171 4751391 1023 + 662171 4751421 1023 + 662171 4751451 1023 + 662171 4751481 1023 + 662171 4751511 1023 + 662171 4751541 1024 + 662171 4751571 1025 + 662171 4751601 1024 + 662171 4751631 1025 + 662171 4751661 1026 + 662171 4751691 1025 + 662171 4751721 1024 + 662171 4751751 1023 + 662171 4751781 1015 + 662171 4751811 1001 + 662171 4751841 984 + 662171 4751871 966 + 662171 4751901 946 + 662171 4751931 930 + 662171 4751961 913 + 662171 4751991 904 + 662171 4752021 897 + 662171 4752051 892 + 662171 4752081 888 + 662171 4752111 884 + 662171 4752141 878 + 662171 4752171 876 + 662171 4752201 876 + 662171 4752231 871 + 662171 4752261 867 + 662171 4752291 864 + 662171 4752321 862 + 662171 4752351 863 + 662171 4752381 862 + 662171 4752411 846 + 662171 4752441 825 + 662171 4752471 818 + 662171 4752501 817 + 662171 4752531 826 + 662171 4752561 840 + 662171 4752591 854 + 662171 4752621 861 + 662171 4752651 862 + 662171 4752681 862 + 662171 4752711 863 + 662171 4752741 863 + 662171 4752771 863 + 662171 4752801 864 + 662171 4752831 864 + 662171 4752861 865 + 662171 4752891 865 + 662171 4752921 866 + 662171 4752951 866 + 662171 4752981 866 + 662171 4753011 866 + 662171 4753041 867 + 662171 4753071 867 + 662171 4753101 867 + 662171 4753131 868 + 662171 4753161 868 + 662171 4753191 869 + 662171 4753221 869 + 662171 4753251 869 + 662171 4753281 870 + 662171 4753311 870 + 662171 4753341 870 + 662171 4753371 871 + 662171 4753401 871 + 662171 4753431 861 + 662171 4753461 828 + 662171 4753491 809 + 662171 4753521 809 + 662171 4753551 809 + 662171 4753581 809 + 662171 4753611 819 + 662171 4753641 838 + 662171 4753671 854 + 662171 4753701 869 + 662171 4753731 877 + 662171 4753761 877 + 662171 4753791 877 + 662171 4753821 876 + 662171 4753851 876 + 662171 4753881 877 + 662171 4753911 881 + 662171 4753941 884 + 662171 4753971 898 + 662171 4754001 916 + 662171 4754031 931 + 662171 4754061 951 + 662171 4754091 968 + 662171 4754121 968 + 662171 4754151 968 + 662171 4754181 967 + 662171 4754211 968 + 662171 4754241 966 + 662171 4754271 967 + 662171 4754301 968 + 662171 4754331 967 + 662171 4754361 968 + 662171 4754391 968 + 662171 4754421 969 + 662171 4754451 970 + 662171 4754481 969 + 662171 4754511 971 + 662171 4754541 971 + 662201 4751301 1020 + 662201 4751331 1021 + 662201 4751361 1021 + 662201 4751391 1022 + 662201 4751421 1022 + 662201 4751451 1022 + 662201 4751481 1023 + 662201 4751511 1023 + 662201 4751541 1023 + 662201 4751571 1024 + 662201 4751601 1024 + 662201 4751631 1024 + 662201 4751661 1026 + 662201 4751691 1025 + 662201 4751721 1023 + 662201 4751751 1019 + 662201 4751781 1011 + 662201 4751811 999 + 662201 4751841 981 + 662201 4751871 963 + 662201 4751901 943 + 662201 4751931 928 + 662201 4751961 913 + 662201 4751991 901 + 662201 4752021 896 + 662201 4752051 893 + 662201 4752081 888 + 662201 4752111 884 + 662201 4752141 881 + 662201 4752171 880 + 662201 4752201 877 + 662201 4752231 873 + 662201 4752261 869 + 662201 4752291 867 + 662201 4752321 865 + 662201 4752351 863 + 662201 4752381 859 + 662201 4752411 841 + 662201 4752441 823 + 662201 4752471 818 + 662201 4752501 817 + 662201 4752531 828 + 662201 4752561 839 + 662201 4752591 848 + 662201 4752621 860 + 662201 4752651 862 + 662201 4752681 862 + 662201 4752711 863 + 662201 4752741 863 + 662201 4752771 863 + 662201 4752801 864 + 662201 4752831 865 + 662201 4752861 865 + 662201 4752891 866 + 662201 4752921 866 + 662201 4752951 866 + 662201 4752981 866 + 662201 4753011 867 + 662201 4753041 867 + 662201 4753071 867 + 662201 4753101 868 + 662201 4753131 868 + 662201 4753161 868 + 662201 4753191 869 + 662201 4753221 869 + 662201 4753251 869 + 662201 4753281 870 + 662201 4753311 871 + 662201 4753341 870 + 662201 4753371 870 + 662201 4753401 871 + 662201 4753431 855 + 662201 4753461 820 + 662201 4753491 809 + 662201 4753521 809 + 662201 4753551 809 + 662201 4753581 809 + 662201 4753611 828 + 662201 4753641 844 + 662201 4753671 862 + 662201 4753701 874 + 662201 4753731 877 + 662201 4753761 877 + 662201 4753791 876 + 662201 4753821 875 + 662201 4753851 876 + 662201 4753881 878 + 662201 4753911 881 + 662201 4753941 888 + 662201 4753971 903 + 662201 4754001 923 + 662201 4754031 939 + 662201 4754061 963 + 662201 4754091 968 + 662201 4754121 968 + 662201 4754151 969 + 662201 4754181 967 + 662201 4754211 968 + 662201 4754241 968 + 662201 4754271 967 + 662201 4754301 968 + 662201 4754331 969 + 662201 4754361 969 + 662201 4754391 969 + 662201 4754421 969 + 662201 4754451 969 + 662201 4754481 970 + 662201 4754511 970 + 662201 4754541 971 + 662231 4751301 1019 + 662231 4751331 1020 + 662231 4751361 1020 + 662231 4751391 1021 + 662231 4751421 1021 + 662231 4751451 1022 + 662231 4751481 1022 + 662231 4751511 1022 + 662231 4751541 1023 + 662231 4751571 1023 + 662231 4751601 1023 + 662231 4751631 1023 + 662231 4751661 1025 + 662231 4751691 1024 + 662231 4751721 1021 + 662231 4751751 1015 + 662231 4751781 1008 + 662231 4751811 994 + 662231 4751841 974 + 662231 4751871 958 + 662231 4751901 944 + 662231 4751931 924 + 662231 4751961 908 + 662231 4751991 899 + 662231 4752021 896 + 662231 4752051 892 + 662231 4752081 889 + 662231 4752111 886 + 662231 4752141 885 + 662231 4752171 883 + 662231 4752201 878 + 662231 4752231 874 + 662231 4752261 871 + 662231 4752291 868 + 662231 4752321 866 + 662231 4752351 862 + 662231 4752381 848 + 662231 4752411 832 + 662231 4752441 820 + 662231 4752471 817 + 662231 4752501 820 + 662231 4752531 829 + 662231 4752561 839 + 662231 4752591 848 + 662231 4752621 860 + 662231 4752651 862 + 662231 4752681 862 + 662231 4752711 863 + 662231 4752741 863 + 662231 4752771 864 + 662231 4752801 864 + 662231 4752831 865 + 662231 4752861 866 + 662231 4752891 867 + 662231 4752921 867 + 662231 4752951 866 + 662231 4752981 866 + 662231 4753011 867 + 662231 4753041 867 + 662231 4753071 868 + 662231 4753101 868 + 662231 4753131 868 + 662231 4753161 868 + 662231 4753191 869 + 662231 4753221 869 + 662231 4753251 869 + 662231 4753281 870 + 662231 4753311 870 + 662231 4753341 871 + 662231 4753371 870 + 662231 4753401 858 + 662231 4753431 831 + 662231 4753461 809 + 662231 4753491 809 + 662231 4753521 809 + 662231 4753551 809 + 662231 4753581 820 + 662231 4753611 838 + 662231 4753641 853 + 662231 4753671 869 + 662231 4753701 873 + 662231 4753731 876 + 662231 4753761 876 + 662231 4753791 876 + 662231 4753821 875 + 662231 4753851 876 + 662231 4753881 878 + 662231 4753911 882 + 662231 4753941 891 + 662231 4753971 909 + 662231 4754001 927 + 662231 4754031 950 + 662231 4754061 968 + 662231 4754091 968 + 662231 4754121 968 + 662231 4754151 969 + 662231 4754181 969 + 662231 4754211 968 + 662231 4754241 969 + 662231 4754271 969 + 662231 4754301 968 + 662231 4754331 968 + 662231 4754361 969 + 662231 4754391 970 + 662231 4754421 971 + 662231 4754451 970 + 662231 4754481 970 + 662231 4754511 970 + 662231 4754541 970 + 662261 4751301 1017 + 662261 4751331 1018 + 662261 4751361 1019 + 662261 4751391 1020 + 662261 4751421 1020 + 662261 4751451 1021 + 662261 4751481 1021 + 662261 4751511 1022 + 662261 4751541 1023 + 662261 4751571 1023 + 662261 4751601 1023 + 662261 4751631 1023 + 662261 4751661 1023 + 662261 4751691 1023 + 662261 4751721 1019 + 662261 4751751 1013 + 662261 4751781 1005 + 662261 4751811 991 + 662261 4751841 971 + 662261 4751871 952 + 662261 4751901 936 + 662261 4751931 923 + 662261 4751961 909 + 662261 4751991 900 + 662261 4752021 896 + 662261 4752051 893 + 662261 4752081 890 + 662261 4752111 888 + 662261 4752141 887 + 662261 4752171 885 + 662261 4752201 878 + 662261 4752231 874 + 662261 4752261 871 + 662261 4752291 868 + 662261 4752321 866 + 662261 4752351 861 + 662261 4752381 844 + 662261 4752411 829 + 662261 4752441 819 + 662261 4752471 817 + 662261 4752501 822 + 662261 4752531 832 + 662261 4752561 841 + 662261 4752591 849 + 662261 4752621 859 + 662261 4752651 862 + 662261 4752681 862 + 662261 4752711 863 + 662261 4752741 863 + 662261 4752771 864 + 662261 4752801 865 + 662261 4752831 866 + 662261 4752861 867 + 662261 4752891 867 + 662261 4752921 868 + 662261 4752951 867 + 662261 4752981 867 + 662261 4753011 867 + 662261 4753041 867 + 662261 4753071 868 + 662261 4753101 869 + 662261 4753131 869 + 662261 4753161 868 + 662261 4753191 869 + 662261 4753221 869 + 662261 4753251 869 + 662261 4753281 870 + 662261 4753311 870 + 662261 4753341 870 + 662261 4753371 861 + 662261 4753401 831 + 662261 4753431 814 + 662261 4753461 809 + 662261 4753491 809 + 662261 4753521 809 + 662261 4753551 809 + 662261 4753581 828 + 662261 4753611 846 + 662261 4753641 862 + 662261 4753671 870 + 662261 4753701 872 + 662261 4753731 875 + 662261 4753761 876 + 662261 4753791 875 + 662261 4753821 875 + 662261 4753851 876 + 662261 4753881 879 + 662261 4753911 883 + 662261 4753941 897 + 662261 4753971 915 + 662261 4754001 938 + 662261 4754031 964 + 662261 4754061 968 + 662261 4754091 968 + 662261 4754121 969 + 662261 4754151 969 + 662261 4754181 969 + 662261 4754211 968 + 662261 4754241 968 + 662261 4754271 970 + 662261 4754301 969 + 662261 4754331 969 + 662261 4754361 969 + 662261 4754391 970 + 662261 4754421 971 + 662261 4754451 972 + 662261 4754481 972 + 662261 4754511 971 + 662261 4754541 971 + 662291 4751301 1016 + 662291 4751331 1017 + 662291 4751361 1017 + 662291 4751391 1018 + 662291 4751421 1019 + 662291 4751451 1020 + 662291 4751481 1021 + 662291 4751511 1022 + 662291 4751541 1022 + 662291 4751571 1023 + 662291 4751601 1023 + 662291 4751631 1022 + 662291 4751661 1022 + 662291 4751691 1022 + 662291 4751721 1019 + 662291 4751751 1012 + 662291 4751781 1004 + 662291 4751811 991 + 662291 4751841 968 + 662291 4751871 947 + 662291 4751901 932 + 662291 4751931 914 + 662291 4751961 906 + 662291 4751991 898 + 662291 4752021 896 + 662291 4752051 894 + 662291 4752081 891 + 662291 4752111 889 + 662291 4752141 886 + 662291 4752171 884 + 662291 4752201 877 + 662291 4752231 874 + 662291 4752261 872 + 662291 4752291 869 + 662291 4752321 866 + 662291 4752351 862 + 662291 4752381 848 + 662291 4752411 834 + 662291 4752441 819 + 662291 4752471 817 + 662291 4752501 823 + 662291 4752531 832 + 662291 4752561 838 + 662291 4752591 848 + 662291 4752621 859 + 662291 4752651 861 + 662291 4752681 862 + 662291 4752711 863 + 662291 4752741 863 + 662291 4752771 864 + 662291 4752801 864 + 662291 4752831 866 + 662291 4752861 867 + 662291 4752891 868 + 662291 4752921 868 + 662291 4752951 869 + 662291 4752981 868 + 662291 4753011 867 + 662291 4753041 867 + 662291 4753071 868 + 662291 4753101 868 + 662291 4753131 869 + 662291 4753161 869 + 662291 4753191 869 + 662291 4753221 869 + 662291 4753251 869 + 662291 4753281 870 + 662291 4753311 870 + 662291 4753341 866 + 662291 4753371 840 + 662291 4753401 814 + 662291 4753431 809 + 662291 4753461 809 + 662291 4753491 809 + 662291 4753521 809 + 662291 4753551 822 + 662291 4753581 842 + 662291 4753611 856 + 662291 4753641 870 + 662291 4753671 874 + 662291 4753701 872 + 662291 4753731 875 + 662291 4753761 875 + 662291 4753791 874 + 662291 4753821 875 + 662291 4753851 876 + 662291 4753881 880 + 662291 4753911 887 + 662291 4753941 902 + 662291 4753971 922 + 662291 4754001 944 + 662291 4754031 968 + 662291 4754061 968 + 662291 4754091 969 + 662291 4754121 969 + 662291 4754151 969 + 662291 4754181 969 + 662291 4754211 970 + 662291 4754241 969 + 662291 4754271 970 + 662291 4754301 971 + 662291 4754331 971 + 662291 4754361 970 + 662291 4754391 970 + 662291 4754421 971 + 662291 4754451 972 + 662291 4754481 972 + 662291 4754511 972 + 662291 4754541 972 + 662321 4751301 1014 + 662321 4751331 1015 + 662321 4751361 1016 + 662321 4751391 1016 + 662321 4751421 1017 + 662321 4751451 1019 + 662321 4751481 1020 + 662321 4751511 1021 + 662321 4751541 1022 + 662321 4751571 1023 + 662321 4751601 1024 + 662321 4751631 1024 + 662321 4751661 1023 + 662321 4751691 1021 + 662321 4751721 1016 + 662321 4751751 1010 + 662321 4751781 1001 + 662321 4751811 982 + 662321 4751841 966 + 662321 4751871 945 + 662321 4751901 931 + 662321 4751931 915 + 662321 4751961 905 + 662321 4751991 898 + 662321 4752021 896 + 662321 4752051 894 + 662321 4752081 892 + 662321 4752111 889 + 662321 4752141 885 + 662321 4752171 883 + 662321 4752201 878 + 662321 4752231 875 + 662321 4752261 872 + 662321 4752291 870 + 662321 4752321 867 + 662321 4752351 863 + 662321 4752381 852 + 662321 4752411 839 + 662321 4752441 820 + 662321 4752471 817 + 662321 4752501 823 + 662321 4752531 830 + 662321 4752561 839 + 662321 4752591 849 + 662321 4752621 860 + 662321 4752651 862 + 662321 4752681 862 + 662321 4752711 863 + 662321 4752741 863 + 662321 4752771 864 + 662321 4752801 865 + 662321 4752831 866 + 662321 4752861 867 + 662321 4752891 868 + 662321 4752921 869 + 662321 4752951 869 + 662321 4752981 869 + 662321 4753011 868 + 662321 4753041 868 + 662321 4753071 868 + 662321 4753101 868 + 662321 4753131 868 + 662321 4753161 868 + 662321 4753191 869 + 662321 4753221 869 + 662321 4753251 870 + 662321 4753281 870 + 662321 4753311 870 + 662321 4753341 858 + 662321 4753371 820 + 662321 4753401 809 + 662321 4753431 809 + 662321 4753461 809 + 662321 4753491 809 + 662321 4753521 809 + 662321 4753551 838 + 662321 4753581 854 + 662321 4753611 868 + 662321 4753641 876 + 662321 4753671 876 + 662321 4753701 873 + 662321 4753731 873 + 662321 4753761 873 + 662321 4753791 874 + 662321 4753821 875 + 662321 4753851 878 + 662321 4753881 882 + 662321 4753911 893 + 662321 4753941 907 + 662321 4753971 926 + 662321 4754001 952 + 662321 4754031 968 + 662321 4754061 968 + 662321 4754091 969 + 662321 4754121 969 + 662321 4754151 969 + 662321 4754181 969 + 662321 4754211 970 + 662321 4754241 969 + 662321 4754271 970 + 662321 4754301 971 + 662321 4754331 971 + 662321 4754361 972 + 662321 4754391 971 + 662321 4754421 971 + 662321 4754451 972 + 662321 4754481 972 + 662321 4754511 972 + 662321 4754541 972 + 662351 4751301 1013 + 662351 4751331 1013 + 662351 4751361 1014 + 662351 4751391 1015 + 662351 4751421 1015 + 662351 4751451 1016 + 662351 4751481 1018 + 662351 4751511 1020 + 662351 4751541 1021 + 662351 4751571 1022 + 662351 4751601 1023 + 662351 4751631 1023 + 662351 4751661 1023 + 662351 4751691 1019 + 662351 4751721 1014 + 662351 4751751 1007 + 662351 4751781 995 + 662351 4751811 976 + 662351 4751841 963 + 662351 4751871 947 + 662351 4751901 928 + 662351 4751931 911 + 662351 4751961 902 + 662351 4751991 898 + 662351 4752021 896 + 662351 4752051 894 + 662351 4752081 892 + 662351 4752111 889 + 662351 4752141 885 + 662351 4752171 885 + 662351 4752201 881 + 662351 4752231 875 + 662351 4752261 873 + 662351 4752291 871 + 662351 4752321 867 + 662351 4752351 864 + 662351 4752381 853 + 662351 4752411 840 + 662351 4752441 823 + 662351 4752471 817 + 662351 4752501 823 + 662351 4752531 833 + 662351 4752561 839 + 662351 4752591 846 + 662351 4752621 857 + 662351 4752651 861 + 662351 4752681 862 + 662351 4752711 863 + 662351 4752741 864 + 662351 4752771 864 + 662351 4752801 865 + 662351 4752831 866 + 662351 4752861 867 + 662351 4752891 868 + 662351 4752921 868 + 662351 4752951 869 + 662351 4752981 869 + 662351 4753011 869 + 662351 4753041 868 + 662351 4753071 868 + 662351 4753101 868 + 662351 4753131 868 + 662351 4753161 868 + 662351 4753191 869 + 662351 4753221 869 + 662351 4753251 870 + 662351 4753281 870 + 662351 4753311 867 + 662351 4753341 839 + 662351 4753371 809 + 662351 4753401 809 + 662351 4753431 809 + 662351 4753461 809 + 662351 4753491 809 + 662351 4753521 835 + 662351 4753551 852 + 662351 4753581 866 + 662351 4753611 870 + 662351 4753641 873 + 662351 4753671 873 + 662351 4753701 871 + 662351 4753731 871 + 662351 4753761 873 + 662351 4753791 874 + 662351 4753821 876 + 662351 4753851 879 + 662351 4753881 886 + 662351 4753911 900 + 662351 4753941 915 + 662351 4753971 932 + 662351 4754001 964 + 662351 4754031 968 + 662351 4754061 968 + 662351 4754091 969 + 662351 4754121 969 + 662351 4754151 970 + 662351 4754181 970 + 662351 4754211 970 + 662351 4754241 970 + 662351 4754271 970 + 662351 4754301 972 + 662351 4754331 972 + 662351 4754361 972 + 662351 4754391 972 + 662351 4754421 972 + 662351 4754451 972 + 662351 4754481 973 + 662351 4754511 973 + 662351 4754541 973 + 662381 4751301 1011 + 662381 4751331 1012 + 662381 4751361 1012 + 662381 4751391 1013 + 662381 4751421 1013 + 662381 4751451 1014 + 662381 4751481 1016 + 662381 4751511 1018 + 662381 4751541 1020 + 662381 4751571 1021 + 662381 4751601 1022 + 662381 4751631 1022 + 662381 4751661 1022 + 662381 4751691 1018 + 662381 4751721 1013 + 662381 4751751 1006 + 662381 4751781 991 + 662381 4751811 974 + 662381 4751841 961 + 662381 4751871 944 + 662381 4751901 929 + 662381 4751931 912 + 662381 4751961 903 + 662381 4751991 898 + 662381 4752021 896 + 662381 4752051 893 + 662381 4752081 891 + 662381 4752111 889 + 662381 4752141 887 + 662381 4752171 886 + 662381 4752201 882 + 662381 4752231 876 + 662381 4752261 874 + 662381 4752291 871 + 662381 4752321 867 + 662381 4752351 865 + 662381 4752381 860 + 662381 4752411 845 + 662381 4752441 827 + 662381 4752471 817 + 662381 4752501 822 + 662381 4752531 835 + 662381 4752561 845 + 662381 4752591 848 + 662381 4752621 857 + 662381 4752651 861 + 662381 4752681 862 + 662381 4752711 862 + 662381 4752741 864 + 662381 4752771 865 + 662381 4752801 865 + 662381 4752831 866 + 662381 4752861 867 + 662381 4752891 868 + 662381 4752921 868 + 662381 4752951 869 + 662381 4752981 869 + 662381 4753011 869 + 662381 4753041 869 + 662381 4753071 869 + 662381 4753101 869 + 662381 4753131 869 + 662381 4753161 868 + 662381 4753191 869 + 662381 4753221 869 + 662381 4753251 869 + 662381 4753281 870 + 662381 4753311 860 + 662381 4753341 822 + 662381 4753371 809 + 662381 4753401 809 + 662381 4753431 809 + 662381 4753461 818 + 662381 4753491 831 + 662381 4753521 848 + 662381 4753551 865 + 662381 4753581 871 + 662381 4753611 871 + 662381 4753641 869 + 662381 4753671 869 + 662381 4753701 870 + 662381 4753731 870 + 662381 4753761 872 + 662381 4753791 874 + 662381 4753821 876 + 662381 4753851 882 + 662381 4753881 894 + 662381 4753911 909 + 662381 4753941 923 + 662381 4753971 936 + 662381 4754001 967 + 662381 4754031 968 + 662381 4754061 968 + 662381 4754091 969 + 662381 4754121 969 + 662381 4754151 970 + 662381 4754181 970 + 662381 4754211 971 + 662381 4754241 970 + 662381 4754271 970 + 662381 4754301 971 + 662381 4754331 972 + 662381 4754361 973 + 662381 4754391 973 + 662381 4754421 973 + 662381 4754451 973 + 662381 4754481 972 + 662381 4754511 973 + 662381 4754541 973 diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossRiver.stl.gz b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossRiver.stl.gz new file mode 100644 index 0000000000000000000000000000000000000000..5262e4745c4c016ff8a807160f7a11ac10487e0c Binary files /dev/null and b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossRiver.stl.gz differ diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..195bead7baea5d18eb7d18ceae29684416c71a65 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict @@ -0,0 +1,56 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object controlDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application icoFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 25; + +deltaT 1; + +writeControl timeStep; + +writeInterval 5; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/decomposeParDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..441595307a666b321687565d5b91940861cc1178 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/decomposeParDict @@ -0,0 +1,72 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 2; + +// preservePatches (inlet); +// preserveFaceZones (heater solid1 solid3); + +// method simple; +method hierarchical; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/motorBike/system/fvSchemes b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSchemes similarity index 63% rename from tutorials/mesh/snappyHexMesh/motorBike/system/fvSchemes rename to tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSchemes index 2fa85964b7e2113902ff5be6f03334f6777d84b6..ebcd68557528c297120d8e5e1e9ee43f0b933650 100644 --- a/tutorials/mesh/snappyHexMesh/motorBike/system/fvSchemes +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSchemes @@ -1,18 +1,25 @@ -/*--------------------------------*- C++ -*----------------------------------*\ +/*---------------------------------------------------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ + FoamFile { - version 2.0; - format ascii; - class dictionary; - location "system"; - object fvSchemes; + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object fvSchemes; } + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // ddtSchemes @@ -36,8 +43,9 @@ laplacianSchemes { default none; laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; - laplacian(diffusivity,cellMotionU) Gauss linear uncorrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(diffusivity,cellDisplacement) Gauss linear corrected; + laplacian(diffusivity,cellMotionU) Gauss linear corrected; } interpolationSchemes @@ -54,7 +62,7 @@ snGradSchemes fluxRequired { default no; - p ; + p; } diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSolution b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..9fff602af62a0a26a5ab6375eda77db671abcf3f --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSolution @@ -0,0 +1,82 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object fvSolution; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0; + }; + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + cellDisplacement + { + solver GAMG; + tolerance 1e-8; + relTol 0; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + cellMotionU + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0; + }; + cellMotionUz + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0; + }; +} + +//PISO +//{ +// nCorrectors 2; +// nNonOrthogonalCorrectors 2; +// pRefCell 0; +// pRefValue 0; +//} +// +//relaxationFactors +//{ +//} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/Allrun b/tutorials/mesh/snappyHexMesh/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges b/tutorials/mesh/snappyHexMesh/iglooWithFridges new file mode 120000 index 0000000000000000000000000000000000000000..b06b074963c2f66714acb3b0b88295bb1e0b6044 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges @@ -0,0 +1 @@ +../../heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/motorBike b/tutorials/mesh/snappyHexMesh/motorBike new file mode 120000 index 0000000000000000000000000000000000000000..9b9e145e0886e4ad8c75a5bd1594a0ce7357866e --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/motorBike @@ -0,0 +1 @@ +../../incompressible/simpleFoam/motorBike \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/K b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/K new file mode 100644 index 0000000000000000000000000000000000000000..c557b53b2898e19f37cb13361f5be39841093be0 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/K @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object K; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 1 -3 -1 0 0 0]; + +internalField uniform 80; + +boundaryField +{ + ".*" + { + type calculated; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/T b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/T new file mode 100644 index 0000000000000000000000000000000000000000..0c3390b177f045e37462f62e16aba9d7875e5525 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/T @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + ".*" + { + type calculated; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/U b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/U new file mode 100644 index 0000000000000000000000000000000000000000..0e7e93907c208c1f4906175c5b9804e746944f1c --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/U @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0.01 0 0); + +boundaryField +{ + ".*" + { + type calculated; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/alphat b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..3c04af3fc8382707e0fd561598679a593ee3733b --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/alphat @@ -0,0 +1,31 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0.001"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ".*" + { + type calculated; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/cp b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/cp new file mode 100644 index 0000000000000000000000000000000000000000..9973de29da4515e1648f303fa50e132384900d8f --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/cp @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object cp; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 -1 0 0 0]; + +internalField uniform 450; + +boundaryField +{ + ".*" + { + type calculated; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/epsilon b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..6d6c661d937489aaf24e4a8ac205359613c13f85 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/epsilon @@ -0,0 +1,31 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0.001"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + ".*" + { + type calculated; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/k b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/k new file mode 100644 index 0000000000000000000000000000000000000000..b657a9bf05a8fd42d005937f5d0395a003f762ab --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/k @@ -0,0 +1,31 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0.001"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + ".*" + { + type calculated; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/p b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/p new file mode 100644 index 0000000000000000000000000000000000000000..7790ad2bae561a9e01453e5e338770379a142e55 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/p @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 1e5; + +boundaryField +{ + ".*" + { + type calculated; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/rho b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/rho new file mode 100644 index 0000000000000000000000000000000000000000..9421cd2cbe4d2dac0740a5b885b6ab5a18e6c8d2 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/0/rho @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object rho; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -3 0 0 0 0 0]; + +internalField uniform 8000; + +boundaryField +{ + ".*" + { + type calculated; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/Allclean b/tutorials/mesh/snappyHexMesh/multiRegionMesh/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..6771f180d8824b2b5187c97d9dca6282e744cbf8 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/Allclean @@ -0,0 +1,20 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +rm -rf VTK +rm -rf constant/cellToRegion constant/polyMesh/sets +rm -rf 0/bottomAir +rm -rf 0/topAir +rm -rf 0/heater +rm -rf 0/leftSolid +rm -rf 0/rightSolid +rm -rf constant/bottomAir/polyMesh +rm -rf constant/topAir/polyMesh +rm -rf constant/heater/polyMesh +rm -rf constant/leftSolid/polyMesh +rm -rf constant/rightSolid/polyMesh + +# ----------------------------------------------------------------------------- diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/Allrun b/tutorials/mesh/snappyHexMesh/multiRegionMesh/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..28b6133b28f996692f991e859675bbbb2212dcd1 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/Allrun @@ -0,0 +1,59 @@ +#!/bin/sh + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +rm -rf constant/polyMesh/sets + +runApplication blockMesh +runApplication snappyHexMesh -overwrite +runApplication splitMeshRegions -cellZones + +# remove fluid fields from solid regions (important for post-processing) +for i in heater leftSolid rightSolid +do + rm -f 0*/$i/{mut,alphat,epsilon,k,p,p,U} +done + +# remove solid fields from fluid regions (important for post-processing) +for i in bottomAir topAir +do + rm -f 0*/$i/{cp,K,rho} +done + +for i in bottomAir topAir heater leftSolid rightSolid +do + changeDictionary -region $i >& log.changeDictionary.$i +done + + +#-- Run on single processor +runApplication chtMultiRegionFoam + + +## Decompose +#for i in bottomAir topAir heater leftSolid rightSolid +#do +# decomposePar -region $i >& log.decomposePar.$i +#done +# +## Run +#hostname > system/machines +#runParallel chtMultiRegionFoam 4 system/machines +# +## Reconstruct +#for i in bottomAir topAir heater leftSolid rightSolid +#do +# reconstructPar -region $i >& log.reconstructPar.$i +#done + + +echo +echo "creating files for paraview post-processing" +echo +for i in bottomAir topAir heater leftSolid rightSolid +do + paraFoam -touch -region $i +done + +# ----------------------------------------------------------------------------- diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/RASProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..6b4cc41e7a84e17964ea8f308450c5a26a43b9b5 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/RASProperties @@ -0,0 +1,96 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence off; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/environmentalProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..03e0adce892c8e4fdd83c43484578d4bb486aca3 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/environmentalProperties @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [0 1 -2 0 0 0 0] (0 -9.81 0); + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/thermophysicalProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..02fdc143ae4770b373a64bc74f3704da6d5ab69e --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/thermophysicalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; + +mixture air 1 28.9 1000 0 1.8e-05 0.7; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/turbulenceProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/turbulenceProperties new file mode 100644 index 0000000000000000000000000000000000000000..0efb448180f1ba26ac35d2dda07035e9ec6873f6 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/bottomAir/turbulenceProperties @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType laminar; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/motorBike/constant/polyMesh/blockMeshDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/polyMesh/blockMeshDict similarity index 73% rename from tutorials/mesh/snappyHexMesh/motorBike/constant/polyMesh/blockMeshDict rename to tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/polyMesh/blockMeshDict index c618a0a9acd6509dad6d3d6e988cdf7b8530850a..5f292d4e4952c00603559a3b216503b01b78ff46 100644 --- a/tutorials/mesh/snappyHexMesh/motorBike/constant/polyMesh/blockMeshDict +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/polyMesh/blockMeshDict @@ -12,35 +12,34 @@ FoamFile class dictionary; object blockMeshDict; } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // convertToMeters 1; -vertices +vertices ( - (-20.29 -10 -4.232e-05) - ( 41.71 -10 -4.232e-05) - ( 41.71 10 -4.232e-05) - (-20.29 10 -4.232e-05) - (-20.29 -10 20) - ( 41.71 -10 20) - ( 41.71 10 20) - (-20.29 10 20) + (-0.1 -0.04 -0.05) + ( 0.1 -0.04 -0.05) + ( 0.1 0.04 -0.05) + (-0.1 0.04 -0.05) + (-0.1 -0.04 0.05) + ( 0.1 -0.04 0.05) + ( 0.1 0.04 0.05) + (-0.1 0.04 0.05) ); -blocks +blocks ( - hex (0 1 2 3 4 5 6 7) (60 20 20) simpleGrading (1 1 1) + hex (0 1 2 3 4 5 6 7) (30 10 10) simpleGrading (1 1 1) ); -edges +edges ( ); -patches +patches ( - patch maxY + wall maxY ( (3 7 6 2) ) @@ -52,23 +51,22 @@ patches ( (2 6 5 1) ) - patch minY + wall minY ( (1 5 4 0) ) - patch minZ + wall minZ ( (0 3 2 1) ) - patch maxZ + wall maxZ ( (4 5 6 7) ) ); -mergePatchPairs +mergePatchPairs ( ); - // ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/polyMesh/boundary b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..591514a953ad0e084033a52d980bc76e9760f15e --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/polyMesh/boundary @@ -0,0 +1,268 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +41 +( + maxY + { + type wall; + nFaces 1200; + startFace 41630; + } + minX + { + type patch; + nFaces 250; + startFace 42830; + } + maxX + { + type patch; + nFaces 250; + startFace 43080; + } + minY + { + type wall; + nFaces 1200; + startFace 43330; + } + minZ + { + type wall; + nFaces 750; + startFace 44530; + } + maxZ + { + type wall; + nFaces 750; + startFace 45280; + } + bottomAir_minX + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_maxX + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_minY + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_minZ + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_maxZ + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_bottomAir_to_rightSolid + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_bottomAir_to_leftSolid + { + type wall; + nFaces 0; + startFace 46030; + } + bottomAir_bottomAir_to_heater + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_maxY + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_minX + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_maxX + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_minZ + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_maxZ + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_topAir_to_rightSolid + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_topAir_to_heater + { + type wall; + nFaces 0; + startFace 46030; + } + topAir_topAir_to_leftSolid + { + type wall; + nFaces 0; + startFace 46030; + } + leftSolid_minX + { + type wall; + nFaces 0; + startFace 46030; + } + leftSolid_minZ + { + type wall; + nFaces 0; + startFace 46030; + } + leftSolid_maxZ + { + type wall; + nFaces 0; + startFace 46030; + } + leftSolid_leftSolid_to_bottomAir + { + type wall; + nFaces 0; + startFace 46030; + } + leftSolid_leftSolid_to_heater + { + type wall; + nFaces 0; + startFace 46030; + } + leftSolid_leftSolid_to_topAir + { + type wall; + nFaces 0; + startFace 46030; + } + rightSolid_maxX + { + type wall; + nFaces 0; + startFace 46030; + } + rightSolid_minZ + { + type wall; + nFaces 0; + startFace 46030; + } + rightSolid_maxZ + { + type wall; + nFaces 0; + startFace 46030; + } + rightSolid_rightSolid_to_bottomAir + { + type wall; + nFaces 0; + startFace 46030; + } + rightSolid_rightSolid_to_topAir + { + type wall; + nFaces 0; + startFace 46030; + } + rightSolid_rightSolid_to_heater + { + type wall; + nFaces 0; + startFace 46030; + } + heater_minY + { + type wall; + nFaces 0; + startFace 46030; + } + heater_minZ + { + type wall; + nFaces 0; + startFace 46030; + } + heater_maxZ + { + type wall; + nFaces 0; + startFace 46030; + } + heater_heater_to_topAir + { + type wall; + nFaces 0; + startFace 46030; + } + heater_heater_to_rightSolid + { + type wall; + nFaces 0; + startFace 46030; + } + heater_heater_to_leftSolid + { + type wall; + nFaces 0; + startFace 46030; + } + heater_heater_to_bottomAir + { + type wall; + nFaces 0; + startFace 46030; + } +) + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/shockTube/constant/thermodynamicProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/regionProperties similarity index 86% rename from tutorials/compressible/sonicFoam/laminar/shockTube/constant/thermodynamicProperties rename to tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/regionProperties index 99575bf65f9fdb7cb344ff2a4c3b245e342c8b7e..4fc4b886687248dbf1cbc6b1d248c9e22b2d8ea2 100644 --- a/tutorials/compressible/sonicFoam/laminar/shockTube/constant/thermodynamicProperties +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/regionProperties @@ -11,13 +11,12 @@ FoamFile format ascii; class dictionary; location "constant"; - object thermodynamicProperties; + object regionProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -Cv Cv [ 0 2 -2 -1 0 0 0 ] 717.5; - -R R [ 0 2 -2 -1 0 0 0 ] 287; +fluidRegionNames ( bottomAir topAir ); +solidRegionNames ( heater leftSolid rightSolid ); // ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/RASProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..9037f279053fe08eee8d5191bb8f984e287ff50e --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/RASProperties @@ -0,0 +1,97 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +//turbulence on; +turbulence off; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/environmentalProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/environmentalProperties new file mode 120000 index 0000000000000000000000000000000000000000..9cb87f2395573b73794fb16e426cc3c036882cc5 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/environmentalProperties @@ -0,0 +1 @@ +../bottomAir/environmentalProperties \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/thermophysicalProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/thermophysicalProperties new file mode 100644 index 0000000000000000000000000000000000000000..02fdc143ae4770b373a64bc74f3704da6d5ab69e --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/thermophysicalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hPsiThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>; + +mixture air 1 28.9 1000 0 1.8e-05 0.7; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/turbulenceProperties b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/turbulenceProperties new file mode 120000 index 0000000000000000000000000000000000000000..435bf46f771a1525b3b0358a7cb3aea5243f7b91 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/topAir/turbulenceProperties @@ -0,0 +1 @@ +../bottomAir/turbulenceProperties \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/bottomAir.stl b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/bottomAir.stl new file mode 100644 index 0000000000000000000000000000000000000000..200e4e80fc588717c875ea1dd169b8c742145658 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/bottomAir.stl @@ -0,0 +1,14632 @@ +solid minX + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 -0.05 + vertex -0.1 -0.04 -0.04 + vertex -0.1 -0.032 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 -0.04 + vertex -0.1 -0.032 -0.05 + vertex -0.1 -0.04 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 -0.05 + vertex -0.1 -0.032 -0.04 + vertex -0.1 -0.024 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 -0.04 + vertex -0.1 -0.024 -0.05 + vertex -0.1 -0.032 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 -0.05 + vertex -0.1 -0.024 -0.04 + vertex -0.1 -0.016 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 -0.04 + vertex -0.1 -0.016 -0.05 + vertex -0.1 -0.024 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 -0.05 + vertex -0.1 -0.016 -0.04 + vertex -0.1 -0.008 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 -0.04 + vertex -0.1 -0.008 -0.05 + vertex -0.1 -0.016 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 -0.05 + vertex -0.1 -0.008 -0.04 + vertex -0.1 0 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 -0.04 + vertex -0.1 0 -0.05 + vertex -0.1 -0.008 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 -0.04 + vertex -0.1 -0.04 -0.03 + vertex -0.1 -0.032 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 -0.03 + vertex -0.1 -0.032 -0.04 + vertex -0.1 -0.04 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 -0.04 + vertex -0.1 -0.032 -0.03 + vertex -0.1 -0.024 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 -0.03 + vertex -0.1 -0.024 -0.04 + vertex -0.1 -0.032 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 -0.04 + vertex -0.1 -0.024 -0.03 + vertex -0.1 -0.016 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 -0.03 + vertex -0.1 -0.016 -0.04 + vertex -0.1 -0.024 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 -0.04 + vertex -0.1 -0.016 -0.03 + vertex -0.1 -0.008 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 -0.03 + vertex -0.1 -0.008 -0.04 + vertex -0.1 -0.016 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 -0.04 + vertex -0.1 -0.008 -0.03 + vertex -0.1 0 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 -0.03 + vertex -0.1 0 -0.04 + vertex -0.1 -0.008 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 -0.03 + vertex -0.1 -0.04 -0.02 + vertex -0.1 -0.032 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 -0.02 + vertex -0.1 -0.032 -0.03 + vertex -0.1 -0.04 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 -0.03 + vertex -0.1 -0.032 -0.02 + vertex -0.1 -0.024 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 -0.02 + vertex -0.1 -0.024 -0.03 + vertex -0.1 -0.032 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 -0.03 + vertex -0.1 -0.024 -0.02 + vertex -0.1 -0.016 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 -0.02 + vertex -0.1 -0.016 -0.03 + vertex -0.1 -0.024 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 -0.03 + vertex -0.1 -0.016 -0.02 + vertex -0.1 -0.008 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 -0.02 + vertex -0.1 -0.008 -0.03 + vertex -0.1 -0.016 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 -0.03 + vertex -0.1 -0.008 -0.02 + vertex -0.1 0 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 -0.02 + vertex -0.1 0 -0.03 + vertex -0.1 -0.008 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 -0.02 + vertex -0.1 -0.04 -0.01 + vertex -0.1 -0.032 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 -0.01 + vertex -0.1 -0.032 -0.02 + vertex -0.1 -0.04 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 -0.02 + vertex -0.1 -0.032 -0.01 + vertex -0.1 -0.024 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 -0.01 + vertex -0.1 -0.024 -0.02 + vertex -0.1 -0.032 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 -0.02 + vertex -0.1 -0.024 -0.01 + vertex -0.1 -0.016 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 -0.01 + vertex -0.1 -0.016 -0.02 + vertex -0.1 -0.024 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 -0.02 + vertex -0.1 -0.016 -0.01 + vertex -0.1 -0.008 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 -0.01 + vertex -0.1 -0.008 -0.02 + vertex -0.1 -0.016 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 -0.02 + vertex -0.1 -0.008 -0.01 + vertex -0.1 0 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 -0.01 + vertex -0.1 0 -0.02 + vertex -0.1 -0.008 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 -0.01 + vertex -0.1 -0.04 0 + vertex -0.1 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 1.156482e-18 + vertex -0.1 -0.032 -0.01 + vertex -0.1 -0.04 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 -0.01 + vertex -0.1 -0.032 1.156482e-18 + vertex -0.1 -0.024 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 0 + vertex -0.1 -0.024 -0.01 + vertex -0.1 -0.032 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 -0.01 + vertex -0.1 -0.024 0 + vertex -0.1 -0.016 -1.156482e-18 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 -1.156482e-18 + vertex -0.1 -0.016 -0.01 + vertex -0.1 -0.024 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 -0.01 + vertex -0.1 -0.016 -1.156482e-18 + vertex -0.1 -0.008 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 0 + vertex -0.1 -0.008 -0.01 + vertex -0.1 -0.016 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 -0.01 + vertex -0.1 -0.008 0 + vertex -0.1 0 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 0 + vertex -0.1 0 -0.01 + vertex -0.1 -0.008 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 0.01 + vertex -0.1 -0.032 0.01 + vertex -0.1 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -0.1 -0.032 1.156482e-18 + vertex -0.1 -0.04 0 + vertex -0.1 -0.04 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 1.156482e-18 + vertex -0.1 -0.032 0.01 + vertex -0.1 -0.024 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 0.01 + vertex -0.1 -0.024 0 + vertex -0.1 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 0 + vertex -0.1 -0.024 0.01 + vertex -0.1 -0.016 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 0.01 + vertex -0.1 -0.016 -1.156482e-18 + vertex -0.1 -0.024 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 0.01 + vertex -0.1 -0.008 0.01 + vertex -0.1 -0.008 0 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -0.1 -0.008 0 + vertex -0.1 -0.016 -1.156482e-18 + vertex -0.1 -0.016 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 0 + vertex -0.1 -0.008 0.01 + vertex -0.1 0 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 0.01 + vertex -0.1 0 0 + vertex -0.1 -0.008 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 0.01 + vertex -0.1 -0.04 0.02 + vertex -0.1 -0.032 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 0.02 + vertex -0.1 -0.032 0.01 + vertex -0.1 -0.04 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 0.01 + vertex -0.1 -0.032 0.02 + vertex -0.1 -0.024 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 0.02 + vertex -0.1 -0.024 0.01 + vertex -0.1 -0.032 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 0.01 + vertex -0.1 -0.024 0.02 + vertex -0.1 -0.016 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 0.02 + vertex -0.1 -0.016 0.01 + vertex -0.1 -0.024 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 0.01 + vertex -0.1 -0.016 0.02 + vertex -0.1 -0.008 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 0.02 + vertex -0.1 -0.008 0.01 + vertex -0.1 -0.016 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 0.01 + vertex -0.1 -0.008 0.02 + vertex -0.1 0 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 0.02 + vertex -0.1 0 0.01 + vertex -0.1 -0.008 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 0.02 + vertex -0.1 -0.04 0.03 + vertex -0.1 -0.032 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 0.03 + vertex -0.1 -0.032 0.02 + vertex -0.1 -0.04 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 0.02 + vertex -0.1 -0.032 0.03 + vertex -0.1 -0.024 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 0.03 + vertex -0.1 -0.024 0.02 + vertex -0.1 -0.032 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 0.02 + vertex -0.1 -0.024 0.03 + vertex -0.1 -0.016 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 0.03 + vertex -0.1 -0.016 0.02 + vertex -0.1 -0.024 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 0.02 + vertex -0.1 -0.016 0.03 + vertex -0.1 -0.008 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 0.03 + vertex -0.1 -0.008 0.02 + vertex -0.1 -0.016 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 0.02 + vertex -0.1 -0.008 0.03 + vertex -0.1 0 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 0.03 + vertex -0.1 0 0.02 + vertex -0.1 -0.008 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 0.03 + vertex -0.1 -0.04 0.04 + vertex -0.1 -0.032 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 0.04 + vertex -0.1 -0.032 0.03 + vertex -0.1 -0.04 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 0.03 + vertex -0.1 -0.032 0.04 + vertex -0.1 -0.024 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 0.04 + vertex -0.1 -0.024 0.03 + vertex -0.1 -0.032 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 0.03 + vertex -0.1 -0.024 0.04 + vertex -0.1 -0.016 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 0.04 + vertex -0.1 -0.016 0.03 + vertex -0.1 -0.024 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 0.03 + vertex -0.1 -0.016 0.04 + vertex -0.1 -0.008 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 0.04 + vertex -0.1 -0.008 0.03 + vertex -0.1 -0.016 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 0.03 + vertex -0.1 -0.008 0.04 + vertex -0.1 0 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 0.04 + vertex -0.1 0 0.03 + vertex -0.1 -0.008 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.04 0.04 + vertex -0.1 -0.04 0.05 + vertex -0.1 -0.032 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.032 0.05 + vertex -0.1 -0.032 0.04 + vertex -0.1 -0.04 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.032 0.04 + vertex -0.1 -0.032 0.05 + vertex -0.1 -0.024 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.024 0.05 + vertex -0.1 -0.024 0.04 + vertex -0.1 -0.032 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.024 0.04 + vertex -0.1 -0.024 0.05 + vertex -0.1 -0.016 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.016 0.05 + vertex -0.1 -0.016 0.04 + vertex -0.1 -0.024 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.016 0.04 + vertex -0.1 -0.016 0.05 + vertex -0.1 -0.008 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 -0.008 0.05 + vertex -0.1 -0.008 0.04 + vertex -0.1 -0.016 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 -0.008 0.04 + vertex -0.1 -0.008 0.05 + vertex -0.1 0 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0 0.05 + vertex -0.1 0 0.04 + vertex -0.1 -0.008 0.04 + endloop + endfacet +endsolid minX +solid maxX + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 -0.05 + vertex 0.1 -0.032 -0.05 + vertex 0.1 -0.032 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.04 + vertex 0.1 -0.04 -0.04 + vertex 0.1 -0.04 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.05 + vertex 0.1 -0.024 -0.05 + vertex 0.1 -0.024 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.04 + vertex 0.1 -0.032 -0.04 + vertex 0.1 -0.032 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.05 + vertex 0.1 -0.016 -0.05 + vertex 0.1 -0.016 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.04 + vertex 0.1 -0.024 -0.04 + vertex 0.1 -0.024 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.05 + vertex 0.1 -0.008 -0.05 + vertex 0.1 -0.008 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.04 + vertex 0.1 -0.016 -0.04 + vertex 0.1 -0.016 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.05 + vertex 0.1 0 -0.05 + vertex 0.1 0 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.04 + vertex 0.1 -0.008 -0.04 + vertex 0.1 -0.008 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 -0.04 + vertex 0.1 -0.032 -0.04 + vertex 0.1 -0.032 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.03 + vertex 0.1 -0.04 -0.03 + vertex 0.1 -0.04 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.04 + vertex 0.1 -0.024 -0.04 + vertex 0.1 -0.024 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.03 + vertex 0.1 -0.032 -0.03 + vertex 0.1 -0.032 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.04 + vertex 0.1 -0.016 -0.04 + vertex 0.1 -0.016 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.03 + vertex 0.1 -0.024 -0.03 + vertex 0.1 -0.024 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.04 + vertex 0.1 -0.008 -0.04 + vertex 0.1 -0.008 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.03 + vertex 0.1 -0.016 -0.03 + vertex 0.1 -0.016 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.04 + vertex 0.1 0 -0.04 + vertex 0.1 0 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.03 + vertex 0.1 -0.008 -0.03 + vertex 0.1 -0.008 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 -0.03 + vertex 0.1 -0.032 -0.03 + vertex 0.1 -0.032 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.02 + vertex 0.1 -0.04 -0.02 + vertex 0.1 -0.04 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.03 + vertex 0.1 -0.024 -0.03 + vertex 0.1 -0.024 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.02 + vertex 0.1 -0.032 -0.02 + vertex 0.1 -0.032 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.03 + vertex 0.1 -0.016 -0.03 + vertex 0.1 -0.016 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.02 + vertex 0.1 -0.024 -0.02 + vertex 0.1 -0.024 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.03 + vertex 0.1 -0.008 -0.03 + vertex 0.1 -0.008 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.02 + vertex 0.1 -0.016 -0.02 + vertex 0.1 -0.016 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.03 + vertex 0.1 0 -0.03 + vertex 0.1 0 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.02 + vertex 0.1 -0.008 -0.02 + vertex 0.1 -0.008 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 -0.02 + vertex 0.1 -0.032 -0.02 + vertex 0.1 -0.032 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.01 + vertex 0.1 -0.04 -0.01 + vertex 0.1 -0.04 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.02 + vertex 0.1 -0.024 -0.02 + vertex 0.1 -0.024 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.01 + vertex 0.1 -0.032 -0.01 + vertex 0.1 -0.032 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.02 + vertex 0.1 -0.016 -0.02 + vertex 0.1 -0.016 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.01 + vertex 0.1 -0.024 -0.01 + vertex 0.1 -0.024 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.02 + vertex 0.1 -0.008 -0.02 + vertex 0.1 -0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.01 + vertex 0.1 -0.016 -0.01 + vertex 0.1 -0.016 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.02 + vertex 0.1 0 -0.02 + vertex 0.1 0 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.01 + vertex 0.1 -0.008 -0.01 + vertex 0.1 -0.008 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 -0.01 + vertex 0.1 -0.032 -0.01 + vertex 0.1 -0.032 1.156482e-18 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 1.156482e-18 + vertex 0.1 -0.04 0 + vertex 0.1 -0.04 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 -0.01 + vertex 0.1 -0.024 -0.01 + vertex 0.1 -0.024 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0 + vertex 0.1 -0.032 1.156482e-18 + vertex 0.1 -0.032 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 -0.01 + vertex 0.1 -0.016 -0.01 + vertex 0.1 -0.016 -1.156482e-18 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -1.156482e-18 + vertex 0.1 -0.024 0 + vertex 0.1 -0.024 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 -0.01 + vertex 0.1 -0.008 -0.01 + vertex 0.1 -0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0 + vertex 0.1 -0.016 -1.156482e-18 + vertex 0.1 -0.016 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 -0.01 + vertex 0.1 0 -0.01 + vertex 0.1 0 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0 + vertex 0.1 -0.008 0 + vertex 0.1 -0.008 -0.01 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 0.1 -0.032 1.156482e-18 + vertex 0.1 -0.032 0.01 + vertex 0.1 -0.04 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 0.01 + vertex 0.1 -0.04 0 + vertex 0.1 -0.032 1.156482e-18 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.1 -0.032 1.156482e-18 + vertex 0.1 -0.024 0 + vertex 0.1 -0.024 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.01 + vertex 0.1 -0.032 0.01 + vertex 0.1 -0.032 1.156482e-18 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.1 -0.024 0 + vertex 0.1 -0.016 -1.156482e-18 + vertex 0.1 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.01 + vertex 0.1 -0.024 0.01 + vertex 0.1 -0.024 0 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 0.1 -0.008 0 + vertex 0.1 -0.008 0.01 + vertex 0.1 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.01 + vertex 0.1 -0.016 -1.156482e-18 + vertex 0.1 -0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0 + vertex 0.1 0 0 + vertex 0.1 0 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.01 + vertex 0.1 -0.008 0.01 + vertex 0.1 -0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 0.01 + vertex 0.1 -0.032 0.01 + vertex 0.1 -0.032 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.02 + vertex 0.1 -0.04 0.02 + vertex 0.1 -0.04 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.01 + vertex 0.1 -0.024 0.01 + vertex 0.1 -0.024 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.02 + vertex 0.1 -0.032 0.02 + vertex 0.1 -0.032 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.01 + vertex 0.1 -0.016 0.01 + vertex 0.1 -0.016 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.02 + vertex 0.1 -0.024 0.02 + vertex 0.1 -0.024 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.01 + vertex 0.1 -0.008 0.01 + vertex 0.1 -0.008 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.02 + vertex 0.1 -0.016 0.02 + vertex 0.1 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.01 + vertex 0.1 0 0.01 + vertex 0.1 0 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.02 + vertex 0.1 -0.008 0.02 + vertex 0.1 -0.008 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 0.02 + vertex 0.1 -0.032 0.02 + vertex 0.1 -0.032 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.03 + vertex 0.1 -0.04 0.03 + vertex 0.1 -0.04 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.02 + vertex 0.1 -0.024 0.02 + vertex 0.1 -0.024 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.03 + vertex 0.1 -0.032 0.03 + vertex 0.1 -0.032 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.02 + vertex 0.1 -0.016 0.02 + vertex 0.1 -0.016 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.03 + vertex 0.1 -0.024 0.03 + vertex 0.1 -0.024 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.02 + vertex 0.1 -0.008 0.02 + vertex 0.1 -0.008 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.03 + vertex 0.1 -0.016 0.03 + vertex 0.1 -0.016 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.02 + vertex 0.1 0 0.02 + vertex 0.1 0 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.03 + vertex 0.1 -0.008 0.03 + vertex 0.1 -0.008 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 0.03 + vertex 0.1 -0.032 0.03 + vertex 0.1 -0.032 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.04 + vertex 0.1 -0.04 0.04 + vertex 0.1 -0.04 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.03 + vertex 0.1 -0.024 0.03 + vertex 0.1 -0.024 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.04 + vertex 0.1 -0.032 0.04 + vertex 0.1 -0.032 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.03 + vertex 0.1 -0.016 0.03 + vertex 0.1 -0.016 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.04 + vertex 0.1 -0.024 0.04 + vertex 0.1 -0.024 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.03 + vertex 0.1 -0.008 0.03 + vertex 0.1 -0.008 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.04 + vertex 0.1 -0.016 0.04 + vertex 0.1 -0.016 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.03 + vertex 0.1 0 0.03 + vertex 0.1 0 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.04 + vertex 0.1 -0.008 0.04 + vertex 0.1 -0.008 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.04 0.04 + vertex 0.1 -0.032 0.04 + vertex 0.1 -0.032 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.05 + vertex 0.1 -0.04 0.05 + vertex 0.1 -0.04 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.032 0.04 + vertex 0.1 -0.024 0.04 + vertex 0.1 -0.024 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.05 + vertex 0.1 -0.032 0.05 + vertex 0.1 -0.032 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.024 0.04 + vertex 0.1 -0.016 0.04 + vertex 0.1 -0.016 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.05 + vertex 0.1 -0.024 0.05 + vertex 0.1 -0.024 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.016 0.04 + vertex 0.1 -0.008 0.04 + vertex 0.1 -0.008 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.05 + vertex 0.1 -0.016 0.05 + vertex 0.1 -0.016 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 -0.008 0.04 + vertex 0.1 0 0.04 + vertex 0.1 0 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.05 + vertex 0.1 -0.008 0.05 + vertex 0.1 -0.008 0.04 + endloop + endfacet +endsolid maxX +solid minY + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 -0.05 + vertex -0.09333333 -0.04 -0.05 + vertex -0.09333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.04 + vertex -0.1 -0.04 -0.04 + vertex -0.1 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 -0.04 + vertex -0.09333333 -0.04 -0.04 + vertex -0.09333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.03 + vertex -0.1 -0.04 -0.03 + vertex -0.1 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 -0.03 + vertex -0.09333333 -0.04 -0.03 + vertex -0.09333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.02 + vertex -0.1 -0.04 -0.02 + vertex -0.1 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 -0.02 + vertex -0.09333333 -0.04 -0.02 + vertex -0.09333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.01 + vertex -0.1 -0.04 -0.01 + vertex -0.1 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 -0.01 + vertex -0.09333333 -0.04 -0.01 + vertex -0.09333333 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 0 + vertex -0.1 -0.04 0 + vertex -0.1 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 0 + vertex -0.09333333 -0.04 0 + vertex -0.09333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.01 + vertex -0.1 -0.04 0.01 + vertex -0.1 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 0.01 + vertex -0.09333333 -0.04 0.01 + vertex -0.09333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.02 + vertex -0.1 -0.04 0.02 + vertex -0.1 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 0.02 + vertex -0.09333333 -0.04 0.02 + vertex -0.09333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.03 + vertex -0.1 -0.04 0.03 + vertex -0.1 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 0.03 + vertex -0.09333333 -0.04 0.03 + vertex -0.09333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.04 + vertex -0.1 -0.04 0.04 + vertex -0.1 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 -0.04 0.04 + vertex -0.09333333 -0.04 0.04 + vertex -0.09333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.05 + vertex -0.1 -0.04 0.05 + vertex -0.1 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.05 + vertex -0.08666667 -0.04 -0.05 + vertex -0.08666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.04 + vertex -0.09333333 -0.04 -0.04 + vertex -0.09333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.04 + vertex -0.08666667 -0.04 -0.04 + vertex -0.08666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.03 + vertex -0.09333333 -0.04 -0.03 + vertex -0.09333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.03 + vertex -0.08666667 -0.04 -0.03 + vertex -0.08666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.02 + vertex -0.09333333 -0.04 -0.02 + vertex -0.09333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.02 + vertex -0.08666667 -0.04 -0.02 + vertex -0.08666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.01 + vertex -0.09333333 -0.04 -0.01 + vertex -0.09333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 -0.01 + vertex -0.08666667 -0.04 -0.01 + vertex -0.08666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 0 + vertex -0.09333333 -0.04 0 + vertex -0.09333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 0 + vertex -0.08666667 -0.04 0 + vertex -0.08666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.01 + vertex -0.09333333 -0.04 0.01 + vertex -0.09333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.01 + vertex -0.08666667 -0.04 0.01 + vertex -0.08666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.02 + vertex -0.09333333 -0.04 0.02 + vertex -0.09333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.02 + vertex -0.08666667 -0.04 0.02 + vertex -0.08666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.03 + vertex -0.09333333 -0.04 0.03 + vertex -0.09333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.03 + vertex -0.08666667 -0.04 0.03 + vertex -0.08666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.04 + vertex -0.09333333 -0.04 0.04 + vertex -0.09333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 -0.04 0.04 + vertex -0.08666667 -0.04 0.04 + vertex -0.08666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.05 + vertex -0.09333333 -0.04 0.05 + vertex -0.09333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.05 + vertex -0.08 -0.04 -0.05 + vertex -0.08 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 -0.04 + vertex -0.08666667 -0.04 -0.04 + vertex -0.08666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.04 + vertex -0.08 -0.04 -0.04 + vertex -0.08 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 -0.03 + vertex -0.08666667 -0.04 -0.03 + vertex -0.08666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.03 + vertex -0.08 -0.04 -0.03 + vertex -0.08 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 -0.02 + vertex -0.08666667 -0.04 -0.02 + vertex -0.08666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 -0.02 + vertex -0.08 -0.04 -0.02 + vertex -0.08 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 -0.01 + vertex -0.08666667 -0.04 -0.01 + vertex -0.08666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 0 + vertex -0.08666667 -0.04 -0.01 + vertex -0.08 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 -0.01 + vertex -0.08 -0.04 1.156482e-18 + vertex -0.08666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 1.156482e-18 + vertex -0.08 -0.04 0.01 + vertex -0.08666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.01 + vertex -0.08666667 -0.04 0 + vertex -0.08 -0.04 1.156482e-18 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.01 + vertex -0.08 -0.04 0.01 + vertex -0.08 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 0.02 + vertex -0.08666667 -0.04 0.02 + vertex -0.08666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.02 + vertex -0.08 -0.04 0.02 + vertex -0.08 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 0.03 + vertex -0.08666667 -0.04 0.03 + vertex -0.08666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.03 + vertex -0.08 -0.04 0.03 + vertex -0.08 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 0.04 + vertex -0.08666667 -0.04 0.04 + vertex -0.08666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 -0.04 0.04 + vertex -0.08 -0.04 0.04 + vertex -0.08 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 -0.04 0.05 + vertex -0.08666667 -0.04 0.05 + vertex -0.08666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 -0.05 + vertex -0.07333333 -0.04 -0.05 + vertex -0.07333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.04 + vertex -0.08 -0.04 -0.04 + vertex -0.08 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 -0.04 + vertex -0.07333333 -0.04 -0.04 + vertex -0.07333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.03 + vertex -0.08 -0.04 -0.03 + vertex -0.08 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 -0.03 + vertex -0.07333333 -0.04 -0.03 + vertex -0.07333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.02 + vertex -0.08 -0.04 -0.02 + vertex -0.08 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 -0.02 + vertex -0.07333333 -0.04 -0.02 + vertex -0.07333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.01 + vertex -0.08 -0.04 -0.01 + vertex -0.08 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 0 + vertex -0.08 -0.04 1.156482e-18 + vertex -0.08 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 -0.01 + vertex -0.07333333 -0.04 -0.01 + vertex -0.07333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 1.156482e-18 + vertex -0.07333333 -0.04 0 + vertex -0.07333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.01 + vertex -0.08 -0.04 0.01 + vertex -0.08 -0.04 1.156482e-18 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 0.01 + vertex -0.07333333 -0.04 0.01 + vertex -0.07333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.02 + vertex -0.08 -0.04 0.02 + vertex -0.08 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 0.02 + vertex -0.07333333 -0.04 0.02 + vertex -0.07333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.03 + vertex -0.08 -0.04 0.03 + vertex -0.08 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 0.03 + vertex -0.07333333 -0.04 0.03 + vertex -0.07333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.04 + vertex -0.08 -0.04 0.04 + vertex -0.08 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 -0.04 0.04 + vertex -0.07333333 -0.04 0.04 + vertex -0.07333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.05 + vertex -0.08 -0.04 0.05 + vertex -0.08 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.05 + vertex -0.06666667 -0.04 -0.05 + vertex -0.06666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.04 + vertex -0.07333333 -0.04 -0.04 + vertex -0.07333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.04 + vertex -0.06666667 -0.04 -0.04 + vertex -0.06666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.03 + vertex -0.07333333 -0.04 -0.03 + vertex -0.07333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.03 + vertex -0.06666667 -0.04 -0.03 + vertex -0.06666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.02 + vertex -0.07333333 -0.04 -0.02 + vertex -0.07333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.02 + vertex -0.06666667 -0.04 -0.02 + vertex -0.06666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.01 + vertex -0.07333333 -0.04 -0.01 + vertex -0.07333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 -0.01 + vertex -0.06666667 -0.04 -0.01 + vertex -0.06666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 0 + vertex -0.07333333 -0.04 0 + vertex -0.07333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 0 + vertex -0.06666667 -0.04 0 + vertex -0.06666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.01 + vertex -0.07333333 -0.04 0.01 + vertex -0.07333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.01 + vertex -0.06666667 -0.04 0.01 + vertex -0.06666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.02 + vertex -0.07333333 -0.04 0.02 + vertex -0.07333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.02 + vertex -0.06666667 -0.04 0.02 + vertex -0.06666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.03 + vertex -0.07333333 -0.04 0.03 + vertex -0.07333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.03 + vertex -0.06666667 -0.04 0.03 + vertex -0.06666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.04 + vertex -0.07333333 -0.04 0.04 + vertex -0.07333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 -0.04 0.04 + vertex -0.06666667 -0.04 0.04 + vertex -0.06666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.05 + vertex -0.07333333 -0.04 0.05 + vertex -0.07333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.05 + vertex -0.06 -0.04 -0.05 + vertex -0.06 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 -0.04 + vertex -0.06666667 -0.04 -0.04 + vertex -0.06666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.04 + vertex -0.06 -0.04 -0.04 + vertex -0.06 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 -0.03 + vertex -0.06666667 -0.04 -0.03 + vertex -0.06666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.03 + vertex -0.06 -0.04 -0.03 + vertex -0.06 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 -0.02 + vertex -0.06666667 -0.04 -0.02 + vertex -0.06666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.02 + vertex -0.06 -0.04 -0.02 + vertex -0.06 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 -0.01 + vertex -0.06666667 -0.04 -0.01 + vertex -0.06666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 -0.01 + vertex -0.06 -0.04 -0.01 + vertex -0.06 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 0 + vertex -0.06666667 -0.04 0 + vertex -0.06666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 0 + vertex -0.06 -0.04 0 + vertex -0.06 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 0.01 + vertex -0.06666667 -0.04 0.01 + vertex -0.06666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.01 + vertex -0.06 -0.04 0.01 + vertex -0.06 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 0.02 + vertex -0.06666667 -0.04 0.02 + vertex -0.06666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.02 + vertex -0.06 -0.04 0.02 + vertex -0.06 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 0.03 + vertex -0.06666667 -0.04 0.03 + vertex -0.06666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.03 + vertex -0.06 -0.04 0.03 + vertex -0.06 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 0.04 + vertex -0.06666667 -0.04 0.04 + vertex -0.06666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 -0.04 0.04 + vertex -0.06 -0.04 0.04 + vertex -0.06 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 -0.04 0.05 + vertex -0.06666667 -0.04 0.05 + vertex -0.06666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 -0.05 + vertex -0.05333333 -0.04 -0.05 + vertex -0.05333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.04 + vertex -0.06 -0.04 -0.04 + vertex -0.06 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 -0.04 + vertex -0.05333333 -0.04 -0.04 + vertex -0.05333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.03 + vertex -0.06 -0.04 -0.03 + vertex -0.06 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 -0.03 + vertex -0.05333333 -0.04 -0.03 + vertex -0.05333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.02 + vertex -0.06 -0.04 -0.02 + vertex -0.06 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 -0.02 + vertex -0.05333333 -0.04 -0.02 + vertex -0.05333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.01 + vertex -0.06 -0.04 -0.01 + vertex -0.06 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 -0.01 + vertex -0.05333333 -0.04 -0.01 + vertex -0.05333333 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 0 + vertex -0.06 -0.04 0 + vertex -0.06 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 0 + vertex -0.05333333 -0.04 0 + vertex -0.05333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.01 + vertex -0.06 -0.04 0.01 + vertex -0.06 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 0.01 + vertex -0.05333333 -0.04 0.01 + vertex -0.05333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.02 + vertex -0.06 -0.04 0.02 + vertex -0.06 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 0.02 + vertex -0.05333333 -0.04 0.02 + vertex -0.05333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.03 + vertex -0.06 -0.04 0.03 + vertex -0.06 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 0.03 + vertex -0.05333333 -0.04 0.03 + vertex -0.05333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.04 + vertex -0.06 -0.04 0.04 + vertex -0.06 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 -0.04 0.04 + vertex -0.05333333 -0.04 0.04 + vertex -0.05333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.05 + vertex -0.06 -0.04 0.05 + vertex -0.06 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.05 + vertex -0.04666667 -0.04 -0.05 + vertex -0.04666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.04 + vertex -0.05333333 -0.04 -0.04 + vertex -0.05333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.04 + vertex -0.04666667 -0.04 -0.04 + vertex -0.04666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.03 + vertex -0.05333333 -0.04 -0.03 + vertex -0.05333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.03 + vertex -0.04666667 -0.04 -0.03 + vertex -0.04666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.02 + vertex -0.05333333 -0.04 -0.02 + vertex -0.05333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.02 + vertex -0.04666667 -0.04 -0.02 + vertex -0.04666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.01 + vertex -0.05333333 -0.04 -0.01 + vertex -0.05333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 -0.01 + vertex -0.04666667 -0.04 -0.01 + vertex -0.04666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 0 + vertex -0.05333333 -0.04 0 + vertex -0.05333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 0 + vertex -0.04666667 -0.04 0 + vertex -0.04666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.01 + vertex -0.05333333 -0.04 0.01 + vertex -0.05333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.01 + vertex -0.04666667 -0.04 0.01 + vertex -0.04666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.02 + vertex -0.05333333 -0.04 0.02 + vertex -0.05333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.02 + vertex -0.04666667 -0.04 0.02 + vertex -0.04666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.03 + vertex -0.05333333 -0.04 0.03 + vertex -0.05333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.03 + vertex -0.04666667 -0.04 0.03 + vertex -0.04666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.04 + vertex -0.05333333 -0.04 0.04 + vertex -0.05333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 -0.04 0.04 + vertex -0.04666667 -0.04 0.04 + vertex -0.04666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.05 + vertex -0.05333333 -0.04 0.05 + vertex -0.05333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.05 + vertex -0.04 -0.04 -0.05 + vertex -0.04 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 -0.04 + vertex -0.04666667 -0.04 -0.04 + vertex -0.04666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.04 + vertex -0.04 -0.04 -0.04 + vertex -0.04 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 -0.03 + vertex -0.04666667 -0.04 -0.03 + vertex -0.04666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.03 + vertex -0.04 -0.04 -0.03 + vertex -0.04 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 -0.02 + vertex -0.04666667 -0.04 -0.02 + vertex -0.04666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.02 + vertex -0.04 -0.04 -0.02 + vertex -0.04 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 -0.01 + vertex -0.04666667 -0.04 -0.01 + vertex -0.04666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 -0.01 + vertex -0.04 -0.04 -0.01 + vertex -0.04 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 0 + vertex -0.04666667 -0.04 0 + vertex -0.04666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 0 + vertex -0.04 -0.04 0 + vertex -0.04 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 0.01 + vertex -0.04666667 -0.04 0.01 + vertex -0.04666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.01 + vertex -0.04 -0.04 0.01 + vertex -0.04 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 0.02 + vertex -0.04666667 -0.04 0.02 + vertex -0.04666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.02 + vertex -0.04 -0.04 0.02 + vertex -0.04 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 0.03 + vertex -0.04666667 -0.04 0.03 + vertex -0.04666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.03 + vertex -0.04 -0.04 0.03 + vertex -0.04 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 0.04 + vertex -0.04666667 -0.04 0.04 + vertex -0.04666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 -0.04 0.04 + vertex -0.04 -0.04 0.04 + vertex -0.04 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 -0.04 0.05 + vertex -0.04666667 -0.04 0.05 + vertex -0.04666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 -0.05 + vertex -0.03333333 -0.04 -0.05 + vertex -0.03333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.04 + vertex -0.04 -0.04 -0.04 + vertex -0.04 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 -0.04 + vertex -0.03333333 -0.04 -0.04 + vertex -0.03333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.03 + vertex -0.04 -0.04 -0.03 + vertex -0.04 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 -0.03 + vertex -0.03333333 -0.04 -0.03 + vertex -0.03333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.02 + vertex -0.04 -0.04 -0.02 + vertex -0.04 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 -0.02 + vertex -0.03333333 -0.04 -0.02 + vertex -0.03333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.01 + vertex -0.04 -0.04 -0.01 + vertex -0.04 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 -0.01 + vertex -0.03333333 -0.04 -0.01 + vertex -0.03333333 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 0 + vertex -0.04 -0.04 0 + vertex -0.04 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 0 + vertex -0.03333333 -0.04 0 + vertex -0.03333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.01 + vertex -0.04 -0.04 0.01 + vertex -0.04 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 0.01 + vertex -0.03333333 -0.04 0.01 + vertex -0.03333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.02 + vertex -0.04 -0.04 0.02 + vertex -0.04 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 0.02 + vertex -0.03333333 -0.04 0.02 + vertex -0.03333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.03 + vertex -0.04 -0.04 0.03 + vertex -0.04 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 0.03 + vertex -0.03333333 -0.04 0.03 + vertex -0.03333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.04 + vertex -0.04 -0.04 0.04 + vertex -0.04 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 -0.04 0.04 + vertex -0.03333333 -0.04 0.04 + vertex -0.03333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.05 + vertex -0.04 -0.04 0.05 + vertex -0.04 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.05 + vertex -0.02666667 -0.04 -0.05 + vertex -0.02666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.04 + vertex -0.03333333 -0.04 -0.04 + vertex -0.03333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.04 + vertex -0.02666667 -0.04 -0.04 + vertex -0.02666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.03 + vertex -0.03333333 -0.04 -0.03 + vertex -0.03333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.03 + vertex -0.02666667 -0.04 -0.03 + vertex -0.02666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.02 + vertex -0.03333333 -0.04 -0.02 + vertex -0.03333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.02 + vertex -0.02666667 -0.04 -0.02 + vertex -0.02666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.01 + vertex -0.03333333 -0.04 -0.01 + vertex -0.03333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 -0.01 + vertex -0.02666667 -0.04 -0.01 + vertex -0.02666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 0 + vertex -0.03333333 -0.04 0 + vertex -0.03333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 0 + vertex -0.02666667 -0.04 0 + vertex -0.02666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.01 + vertex -0.03333333 -0.04 0.01 + vertex -0.03333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.01 + vertex -0.02666667 -0.04 0.01 + vertex -0.02666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.02 + vertex -0.03333333 -0.04 0.02 + vertex -0.03333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.02 + vertex -0.02666667 -0.04 0.02 + vertex -0.02666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.03 + vertex -0.03333333 -0.04 0.03 + vertex -0.03333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.03 + vertex -0.02666667 -0.04 0.03 + vertex -0.02666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.04 + vertex -0.03333333 -0.04 0.04 + vertex -0.03333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 -0.04 0.04 + vertex -0.02666667 -0.04 0.04 + vertex -0.02666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.05 + vertex -0.03333333 -0.04 0.05 + vertex -0.03333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.05 + vertex -0.02 -0.04 -0.05 + vertex -0.02 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 -0.04 + vertex -0.02666667 -0.04 -0.04 + vertex -0.02666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.04 + vertex -0.02 -0.04 -0.04 + vertex -0.02 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 -0.03 + vertex -0.02666667 -0.04 -0.03 + vertex -0.02666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.03 + vertex -0.02 -0.04 -0.03 + vertex -0.02 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 -0.02 + vertex -0.02666667 -0.04 -0.02 + vertex -0.02666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.02 + vertex -0.02 -0.04 -0.02 + vertex -0.02 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 -0.01 + vertex -0.02666667 -0.04 -0.01 + vertex -0.02666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 -0.01 + vertex -0.02 -0.04 -0.01 + vertex -0.02 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 0 + vertex -0.02666667 -0.04 0 + vertex -0.02666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 0 + vertex -0.02 -0.04 0 + vertex -0.02 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 0.01 + vertex -0.02666667 -0.04 0.01 + vertex -0.02666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.01 + vertex -0.02 -0.04 0.01 + vertex -0.02 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 0.02 + vertex -0.02666667 -0.04 0.02 + vertex -0.02666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.02 + vertex -0.02 -0.04 0.02 + vertex -0.02 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 0.03 + vertex -0.02666667 -0.04 0.03 + vertex -0.02666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.03 + vertex -0.02 -0.04 0.03 + vertex -0.02 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 0.04 + vertex -0.02666667 -0.04 0.04 + vertex -0.02666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 -0.04 0.04 + vertex -0.02 -0.04 0.04 + vertex -0.02 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 -0.04 0.05 + vertex -0.02666667 -0.04 0.05 + vertex -0.02666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 -0.05 + vertex -0.01333333 -0.04 -0.05 + vertex -0.01333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.04 + vertex -0.02 -0.04 -0.04 + vertex -0.02 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 -0.04 + vertex -0.01333333 -0.04 -0.04 + vertex -0.01333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.03 + vertex -0.02 -0.04 -0.03 + vertex -0.02 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 -0.03 + vertex -0.01333333 -0.04 -0.03 + vertex -0.01333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.02 + vertex -0.02 -0.04 -0.02 + vertex -0.02 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 -0.02 + vertex -0.01333333 -0.04 -0.02 + vertex -0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.01 + vertex -0.02 -0.04 -0.01 + vertex -0.02 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 -0.01 + vertex -0.01333333 -0.04 -0.01 + vertex -0.01333333 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 0 + vertex -0.02 -0.04 0 + vertex -0.02 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 0 + vertex -0.01333333 -0.04 0 + vertex -0.01333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.01 + vertex -0.02 -0.04 0.01 + vertex -0.02 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 0.01 + vertex -0.01333333 -0.04 0.01 + vertex -0.01333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.02 + vertex -0.02 -0.04 0.02 + vertex -0.02 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 0.02 + vertex -0.01333333 -0.04 0.02 + vertex -0.01333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.03 + vertex -0.02 -0.04 0.03 + vertex -0.02 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 0.03 + vertex -0.01333333 -0.04 0.03 + vertex -0.01333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.04 + vertex -0.02 -0.04 0.04 + vertex -0.02 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 -0.04 0.04 + vertex -0.01333333 -0.04 0.04 + vertex -0.01333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.05 + vertex -0.02 -0.04 0.05 + vertex -0.02 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.05 + vertex -0.006666667 -0.04 -0.05 + vertex -0.006666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.04 + vertex -0.01333333 -0.04 -0.04 + vertex -0.01333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.04 + vertex -0.006666667 -0.04 -0.04 + vertex -0.006666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.03 + vertex -0.01333333 -0.04 -0.03 + vertex -0.01333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.03 + vertex -0.006666667 -0.04 -0.03 + vertex -0.006666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.02 + vertex -0.01333333 -0.04 -0.02 + vertex -0.01333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.02 + vertex -0.006666667 -0.04 -0.02 + vertex -0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.01 + vertex -0.01333333 -0.04 -0.01 + vertex -0.01333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.01 + vertex -0.006666667 -0.04 0.01 + vertex -0.006666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.02 + vertex -0.01333333 -0.04 0.02 + vertex -0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.02 + vertex -0.006666667 -0.04 0.02 + vertex -0.006666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.03 + vertex -0.01333333 -0.04 0.03 + vertex -0.01333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.03 + vertex -0.006666667 -0.04 0.03 + vertex -0.006666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.04 + vertex -0.01333333 -0.04 0.04 + vertex -0.01333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 0.04 + vertex -0.006666667 -0.04 0.04 + vertex -0.006666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.05 + vertex -0.01333333 -0.04 0.05 + vertex -0.01333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.05 + vertex 0 -0.04 -0.05 + vertex 0 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 -0.04 + vertex -0.006666667 -0.04 -0.04 + vertex -0.006666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.04 + vertex 0 -0.04 -0.04 + vertex 0 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 -0.03 + vertex -0.006666667 -0.04 -0.03 + vertex -0.006666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.03 + vertex 0 -0.04 -0.03 + vertex 0 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 -0.02 + vertex -0.006666667 -0.04 -0.02 + vertex -0.006666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.02 + vertex 0 -0.04 -0.02 + vertex 0 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 -0.01 + vertex -0.006666667 -0.04 -0.01 + vertex -0.006666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.01 + vertex 0 -0.04 0.01 + vertex 0 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 0.02 + vertex -0.006666667 -0.04 0.02 + vertex -0.006666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.02 + vertex 0 -0.04 0.02 + vertex 0 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 0.03 + vertex -0.006666667 -0.04 0.03 + vertex -0.006666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.03 + vertex 0 -0.04 0.03 + vertex 0 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 0.04 + vertex -0.006666667 -0.04 0.04 + vertex -0.006666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.04 + vertex 0 -0.04 0.04 + vertex 0 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 0.05 + vertex -0.006666667 -0.04 0.05 + vertex -0.006666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 -0.05 + vertex 0.006666667 -0.04 -0.05 + vertex 0.006666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.04 + vertex 0 -0.04 -0.04 + vertex 0 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 -0.04 + vertex 0.006666667 -0.04 -0.04 + vertex 0.006666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.03 + vertex 0 -0.04 -0.03 + vertex 0 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 -0.03 + vertex 0.006666667 -0.04 -0.03 + vertex 0.006666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.02 + vertex 0 -0.04 -0.02 + vertex 0 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 -0.02 + vertex 0.006666667 -0.04 -0.02 + vertex 0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.01 + vertex 0 -0.04 -0.01 + vertex 0 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 0.01 + vertex 0.006666667 -0.04 0.01 + vertex 0.006666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.02 + vertex 0 -0.04 0.02 + vertex 0 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 0.02 + vertex 0.006666667 -0.04 0.02 + vertex 0.006666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.03 + vertex 0 -0.04 0.03 + vertex 0 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 0.03 + vertex 0.006666667 -0.04 0.03 + vertex 0.006666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.04 + vertex 0 -0.04 0.04 + vertex 0 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 0.04 + vertex 0.006666667 -0.04 0.04 + vertex 0.006666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.05 + vertex 0 -0.04 0.05 + vertex 0 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.05 + vertex 0.01333333 -0.04 -0.05 + vertex 0.01333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.04 + vertex 0.006666667 -0.04 -0.04 + vertex 0.006666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.04 + vertex 0.01333333 -0.04 -0.04 + vertex 0.01333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.03 + vertex 0.006666667 -0.04 -0.03 + vertex 0.006666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.03 + vertex 0.01333333 -0.04 -0.03 + vertex 0.01333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.02 + vertex 0.006666667 -0.04 -0.02 + vertex 0.006666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.02 + vertex 0.01333333 -0.04 -0.02 + vertex 0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.01 + vertex 0.006666667 -0.04 -0.01 + vertex 0.006666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.01 + vertex 0.01333333 -0.04 0.01 + vertex 0.01333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.02 + vertex 0.006666667 -0.04 0.02 + vertex 0.006666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.02 + vertex 0.01333333 -0.04 0.02 + vertex 0.01333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.03 + vertex 0.006666667 -0.04 0.03 + vertex 0.006666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.03 + vertex 0.01333333 -0.04 0.03 + vertex 0.01333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.04 + vertex 0.006666667 -0.04 0.04 + vertex 0.006666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.04 + vertex 0.01333333 -0.04 0.04 + vertex 0.01333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.05 + vertex 0.006666667 -0.04 0.05 + vertex 0.006666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.05 + vertex 0.02 -0.04 -0.05 + vertex 0.02 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 -0.04 + vertex 0.01333333 -0.04 -0.04 + vertex 0.01333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.04 + vertex 0.02 -0.04 -0.04 + vertex 0.02 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 -0.03 + vertex 0.01333333 -0.04 -0.03 + vertex 0.01333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.03 + vertex 0.02 -0.04 -0.03 + vertex 0.02 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 -0.02 + vertex 0.01333333 -0.04 -0.02 + vertex 0.01333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.02 + vertex 0.02 -0.04 -0.02 + vertex 0.02 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 -0.01 + vertex 0.01333333 -0.04 -0.01 + vertex 0.01333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 -0.01 + vertex 0.02 -0.04 -0.01 + vertex 0.02 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 0 + vertex 0.01333333 -0.04 0 + vertex 0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 0 + vertex 0.02 -0.04 0 + vertex 0.02 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 0.01 + vertex 0.01333333 -0.04 0.01 + vertex 0.01333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.01 + vertex 0.02 -0.04 0.01 + vertex 0.02 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 0.02 + vertex 0.01333333 -0.04 0.02 + vertex 0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.02 + vertex 0.02 -0.04 0.02 + vertex 0.02 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 0.03 + vertex 0.01333333 -0.04 0.03 + vertex 0.01333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.03 + vertex 0.02 -0.04 0.03 + vertex 0.02 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 0.04 + vertex 0.01333333 -0.04 0.04 + vertex 0.01333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.04 + vertex 0.02 -0.04 0.04 + vertex 0.02 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 -0.04 0.05 + vertex 0.01333333 -0.04 0.05 + vertex 0.01333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 -0.05 + vertex 0.02666667 -0.04 -0.05 + vertex 0.02666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.04 + vertex 0.02 -0.04 -0.04 + vertex 0.02 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 -0.04 + vertex 0.02666667 -0.04 -0.04 + vertex 0.02666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.03 + vertex 0.02 -0.04 -0.03 + vertex 0.02 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 -0.03 + vertex 0.02666667 -0.04 -0.03 + vertex 0.02666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.02 + vertex 0.02 -0.04 -0.02 + vertex 0.02 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 -0.02 + vertex 0.02666667 -0.04 -0.02 + vertex 0.02666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.01 + vertex 0.02 -0.04 -0.01 + vertex 0.02 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 -0.01 + vertex 0.02666667 -0.04 -0.01 + vertex 0.02666667 -0.04 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 5.782412e-19 + vertex 0.02 -0.04 0 + vertex 0.02 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 5.782412e-19 + vertex 0.02666667 -0.04 0.01 + vertex 0.02 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 0.01 + vertex 0.02 -0.04 0 + vertex 0.02666667 -0.04 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 0.01 + vertex 0.02666667 -0.04 0.01 + vertex 0.02666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.02 + vertex 0.02 -0.04 0.02 + vertex 0.02 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 0.02 + vertex 0.02666667 -0.04 0.02 + vertex 0.02666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.03 + vertex 0.02 -0.04 0.03 + vertex 0.02 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 0.03 + vertex 0.02666667 -0.04 0.03 + vertex 0.02666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.04 + vertex 0.02 -0.04 0.04 + vertex 0.02 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 -0.04 0.04 + vertex 0.02666667 -0.04 0.04 + vertex 0.02666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.05 + vertex 0.02 -0.04 0.05 + vertex 0.02 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.05 + vertex 0.03333333 -0.04 -0.05 + vertex 0.03333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.04 + vertex 0.02666667 -0.04 -0.04 + vertex 0.02666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.04 + vertex 0.03333333 -0.04 -0.04 + vertex 0.03333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.03 + vertex 0.02666667 -0.04 -0.03 + vertex 0.02666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.03 + vertex 0.03333333 -0.04 -0.03 + vertex 0.03333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.02 + vertex 0.02666667 -0.04 -0.02 + vertex 0.02666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.02 + vertex 0.03333333 -0.04 -0.02 + vertex 0.03333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.01 + vertex 0.02666667 -0.04 -0.01 + vertex 0.02666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 -0.01 + vertex 0.03333333 -0.04 -0.01 + vertex 0.03333333 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 0 + vertex 0.02666667 -0.04 5.782412e-19 + vertex 0.02666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 5.782412e-19 + vertex 0.03333333 -0.04 0 + vertex 0.03333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.01 + vertex 0.02666667 -0.04 0.01 + vertex 0.02666667 -0.04 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.01 + vertex 0.03333333 -0.04 0.01 + vertex 0.03333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.02 + vertex 0.02666667 -0.04 0.02 + vertex 0.02666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.02 + vertex 0.03333333 -0.04 0.02 + vertex 0.03333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.03 + vertex 0.02666667 -0.04 0.03 + vertex 0.02666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.03 + vertex 0.03333333 -0.04 0.03 + vertex 0.03333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.04 + vertex 0.02666667 -0.04 0.04 + vertex 0.02666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 -0.04 0.04 + vertex 0.03333333 -0.04 0.04 + vertex 0.03333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.05 + vertex 0.02666667 -0.04 0.05 + vertex 0.02666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.05 + vertex 0.04 -0.04 -0.05 + vertex 0.04 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 -0.04 + vertex 0.03333333 -0.04 -0.04 + vertex 0.03333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.04 + vertex 0.04 -0.04 -0.04 + vertex 0.04 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 -0.03 + vertex 0.03333333 -0.04 -0.03 + vertex 0.03333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.03 + vertex 0.04 -0.04 -0.03 + vertex 0.04 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 -0.02 + vertex 0.03333333 -0.04 -0.02 + vertex 0.03333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.02 + vertex 0.04 -0.04 -0.02 + vertex 0.04 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 -0.01 + vertex 0.03333333 -0.04 -0.01 + vertex 0.03333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 -0.01 + vertex 0.04 -0.04 -0.01 + vertex 0.04 -0.04 -5.782412e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 -5.782412e-19 + vertex 0.03333333 -0.04 0 + vertex 0.03333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 0 + vertex 0.04 -0.04 -5.782412e-19 + vertex 0.04 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 0.01 + vertex 0.03333333 -0.04 0.01 + vertex 0.03333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.01 + vertex 0.04 -0.04 0.01 + vertex 0.04 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 0.02 + vertex 0.03333333 -0.04 0.02 + vertex 0.03333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.02 + vertex 0.04 -0.04 0.02 + vertex 0.04 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 0.03 + vertex 0.03333333 -0.04 0.03 + vertex 0.03333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.03 + vertex 0.04 -0.04 0.03 + vertex 0.04 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 0.04 + vertex 0.03333333 -0.04 0.04 + vertex 0.03333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 -0.04 0.04 + vertex 0.04 -0.04 0.04 + vertex 0.04 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 -0.04 0.05 + vertex 0.03333333 -0.04 0.05 + vertex 0.03333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 -0.05 + vertex 0.04666667 -0.04 -0.05 + vertex 0.04666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.04 + vertex 0.04 -0.04 -0.04 + vertex 0.04 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 -0.04 + vertex 0.04666667 -0.04 -0.04 + vertex 0.04666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.03 + vertex 0.04 -0.04 -0.03 + vertex 0.04 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 -0.03 + vertex 0.04666667 -0.04 -0.03 + vertex 0.04666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.02 + vertex 0.04 -0.04 -0.02 + vertex 0.04 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 -0.02 + vertex 0.04666667 -0.04 -0.02 + vertex 0.04666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.01 + vertex 0.04 -0.04 -0.01 + vertex 0.04 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 -0.01 + vertex 0.04666667 -0.04 -0.01 + vertex 0.04666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0 + vertex 0.04 -0.04 -5.782412e-19 + vertex 0.04 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0 + vertex 0.04666667 -0.04 0.01 + vertex 0.04 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 0.01 + vertex 0.04 -0.04 -5.782412e-19 + vertex 0.04666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 0.01 + vertex 0.04666667 -0.04 0.01 + vertex 0.04666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.02 + vertex 0.04 -0.04 0.02 + vertex 0.04 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 0.02 + vertex 0.04666667 -0.04 0.02 + vertex 0.04666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.03 + vertex 0.04 -0.04 0.03 + vertex 0.04 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 0.03 + vertex 0.04666667 -0.04 0.03 + vertex 0.04666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.04 + vertex 0.04 -0.04 0.04 + vertex 0.04 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -0.04 0.04 + vertex 0.04666667 -0.04 0.04 + vertex 0.04666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.05 + vertex 0.04 -0.04 0.05 + vertex 0.04 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.05 + vertex 0.05333333 -0.04 -0.05 + vertex 0.05333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.04 + vertex 0.04666667 -0.04 -0.04 + vertex 0.04666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.04 + vertex 0.05333333 -0.04 -0.04 + vertex 0.05333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.03 + vertex 0.04666667 -0.04 -0.03 + vertex 0.04666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.03 + vertex 0.05333333 -0.04 -0.03 + vertex 0.05333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.02 + vertex 0.04666667 -0.04 -0.02 + vertex 0.04666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.02 + vertex 0.05333333 -0.04 -0.02 + vertex 0.05333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.01 + vertex 0.04666667 -0.04 -0.01 + vertex 0.04666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 -0.01 + vertex 0.05333333 -0.04 -0.01 + vertex 0.05333333 -0.04 -2.891206e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 -2.891206e-19 + vertex 0.04666667 -0.04 0 + vertex 0.04666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0 + vertex 0.05333333 -0.04 -2.891206e-19 + vertex 0.05333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.01 + vertex 0.04666667 -0.04 0.01 + vertex 0.04666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.01 + vertex 0.05333333 -0.04 0.01 + vertex 0.05333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.02 + vertex 0.04666667 -0.04 0.02 + vertex 0.04666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.02 + vertex 0.05333333 -0.04 0.02 + vertex 0.05333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.03 + vertex 0.04666667 -0.04 0.03 + vertex 0.04666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.03 + vertex 0.05333333 -0.04 0.03 + vertex 0.05333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.04 + vertex 0.04666667 -0.04 0.04 + vertex 0.04666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 -0.04 0.04 + vertex 0.05333333 -0.04 0.04 + vertex 0.05333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.05 + vertex 0.04666667 -0.04 0.05 + vertex 0.04666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.05 + vertex 0.06 -0.04 -0.05 + vertex 0.06 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 -0.04 + vertex 0.05333333 -0.04 -0.04 + vertex 0.05333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.04 + vertex 0.06 -0.04 -0.04 + vertex 0.06 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 -0.03 + vertex 0.05333333 -0.04 -0.03 + vertex 0.05333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.03 + vertex 0.06 -0.04 -0.03 + vertex 0.06 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 -0.02 + vertex 0.05333333 -0.04 -0.02 + vertex 0.05333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.02 + vertex 0.06 -0.04 -0.02 + vertex 0.06 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 -0.01 + vertex 0.05333333 -0.04 -0.01 + vertex 0.05333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 -0.01 + vertex 0.06 -0.04 -0.01 + vertex 0.06 -0.04 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 5.782412e-19 + vertex 0.05333333 -0.04 -2.891206e-19 + vertex 0.05333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 5.782412e-19 + vertex 0.06 -0.04 0.01 + vertex 0.05333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.01 + vertex 0.05333333 -0.04 -2.891206e-19 + vertex 0.06 -0.04 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.01 + vertex 0.06 -0.04 0.01 + vertex 0.06 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 0.02 + vertex 0.05333333 -0.04 0.02 + vertex 0.05333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.02 + vertex 0.06 -0.04 0.02 + vertex 0.06 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 0.03 + vertex 0.05333333 -0.04 0.03 + vertex 0.05333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.03 + vertex 0.06 -0.04 0.03 + vertex 0.06 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 0.04 + vertex 0.05333333 -0.04 0.04 + vertex 0.05333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 -0.04 0.04 + vertex 0.06 -0.04 0.04 + vertex 0.06 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 -0.04 0.05 + vertex 0.05333333 -0.04 0.05 + vertex 0.05333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 -0.05 + vertex 0.06666667 -0.04 -0.05 + vertex 0.06666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.04 + vertex 0.06 -0.04 -0.04 + vertex 0.06 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 -0.04 + vertex 0.06666667 -0.04 -0.04 + vertex 0.06666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.03 + vertex 0.06 -0.04 -0.03 + vertex 0.06 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 -0.03 + vertex 0.06666667 -0.04 -0.03 + vertex 0.06666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.02 + vertex 0.06 -0.04 -0.02 + vertex 0.06 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 -0.02 + vertex 0.06666667 -0.04 -0.02 + vertex 0.06666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.01 + vertex 0.06 -0.04 -0.01 + vertex 0.06 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 -0.01 + vertex 0.06666667 -0.04 -0.01 + vertex 0.06666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 0 + vertex 0.06 -0.04 5.782412e-19 + vertex 0.06 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 5.782412e-19 + vertex 0.06666667 -0.04 0 + vertex 0.06666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.01 + vertex 0.06 -0.04 0.01 + vertex 0.06 -0.04 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 0.01 + vertex 0.06666667 -0.04 0.01 + vertex 0.06666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.02 + vertex 0.06 -0.04 0.02 + vertex 0.06 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 0.02 + vertex 0.06666667 -0.04 0.02 + vertex 0.06666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.03 + vertex 0.06 -0.04 0.03 + vertex 0.06 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 0.03 + vertex 0.06666667 -0.04 0.03 + vertex 0.06666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.04 + vertex 0.06 -0.04 0.04 + vertex 0.06 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 -0.04 0.04 + vertex 0.06666667 -0.04 0.04 + vertex 0.06666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.05 + vertex 0.06 -0.04 0.05 + vertex 0.06 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.05 + vertex 0.07333333 -0.04 -0.05 + vertex 0.07333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.04 + vertex 0.06666667 -0.04 -0.04 + vertex 0.06666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.04 + vertex 0.07333333 -0.04 -0.04 + vertex 0.07333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.03 + vertex 0.06666667 -0.04 -0.03 + vertex 0.06666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.03 + vertex 0.07333333 -0.04 -0.03 + vertex 0.07333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.02 + vertex 0.06666667 -0.04 -0.02 + vertex 0.06666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.02 + vertex 0.07333333 -0.04 -0.02 + vertex 0.07333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.01 + vertex 0.06666667 -0.04 -0.01 + vertex 0.06666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 -0.01 + vertex 0.07333333 -0.04 -0.01 + vertex 0.07333333 -0.04 -4.336809e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 -4.336809e-19 + vertex 0.06666667 -0.04 0 + vertex 0.06666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 0 + vertex 0.07333333 -0.04 -4.336809e-19 + vertex 0.07333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.01 + vertex 0.06666667 -0.04 0.01 + vertex 0.06666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.01 + vertex 0.07333333 -0.04 0.01 + vertex 0.07333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.02 + vertex 0.06666667 -0.04 0.02 + vertex 0.06666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.02 + vertex 0.07333333 -0.04 0.02 + vertex 0.07333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.03 + vertex 0.06666667 -0.04 0.03 + vertex 0.06666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.03 + vertex 0.07333333 -0.04 0.03 + vertex 0.07333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.04 + vertex 0.06666667 -0.04 0.04 + vertex 0.06666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 -0.04 0.04 + vertex 0.07333333 -0.04 0.04 + vertex 0.07333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.05 + vertex 0.06666667 -0.04 0.05 + vertex 0.06666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.05 + vertex 0.08 -0.04 -0.05 + vertex 0.08 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 -0.04 + vertex 0.07333333 -0.04 -0.04 + vertex 0.07333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.04 + vertex 0.08 -0.04 -0.04 + vertex 0.08 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 -0.03 + vertex 0.07333333 -0.04 -0.03 + vertex 0.07333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.03 + vertex 0.08 -0.04 -0.03 + vertex 0.08 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 -0.02 + vertex 0.07333333 -0.04 -0.02 + vertex 0.07333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.02 + vertex 0.08 -0.04 -0.02 + vertex 0.08 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 -0.01 + vertex 0.07333333 -0.04 -0.01 + vertex 0.07333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 -0.01 + vertex 0.08 -0.04 -0.01 + vertex 0.08 -0.04 2.891206e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 2.891206e-19 + vertex 0.07333333 -0.04 -4.336809e-19 + vertex 0.07333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 2.891206e-19 + vertex 0.08 -0.04 0.01 + vertex 0.07333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.01 + vertex 0.07333333 -0.04 -4.336809e-19 + vertex 0.08 -0.04 2.891206e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.01 + vertex 0.08 -0.04 0.01 + vertex 0.08 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 0.02 + vertex 0.07333333 -0.04 0.02 + vertex 0.07333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.02 + vertex 0.08 -0.04 0.02 + vertex 0.08 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 0.03 + vertex 0.07333333 -0.04 0.03 + vertex 0.07333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.03 + vertex 0.08 -0.04 0.03 + vertex 0.08 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 0.04 + vertex 0.07333333 -0.04 0.04 + vertex 0.07333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 -0.04 0.04 + vertex 0.08 -0.04 0.04 + vertex 0.08 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 -0.04 0.05 + vertex 0.07333333 -0.04 0.05 + vertex 0.07333333 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 -0.05 + vertex 0.08666667 -0.04 -0.05 + vertex 0.08666667 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.04 + vertex 0.08 -0.04 -0.04 + vertex 0.08 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 -0.04 + vertex 0.08666667 -0.04 -0.04 + vertex 0.08666667 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.03 + vertex 0.08 -0.04 -0.03 + vertex 0.08 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 -0.03 + vertex 0.08666667 -0.04 -0.03 + vertex 0.08666667 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.02 + vertex 0.08 -0.04 -0.02 + vertex 0.08 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 -0.02 + vertex 0.08666667 -0.04 -0.02 + vertex 0.08666667 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.01 + vertex 0.08 -0.04 -0.01 + vertex 0.08 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 -0.01 + vertex 0.08666667 -0.04 -0.01 + vertex 0.08666667 -0.04 -2.168404e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 -2.168404e-19 + vertex 0.08 -0.04 2.891206e-19 + vertex 0.08 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 2.891206e-19 + vertex 0.08666667 -0.04 -2.168404e-19 + vertex 0.08666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.01 + vertex 0.08 -0.04 0.01 + vertex 0.08 -0.04 2.891206e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 0.01 + vertex 0.08666667 -0.04 0.01 + vertex 0.08666667 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.02 + vertex 0.08 -0.04 0.02 + vertex 0.08 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 0.02 + vertex 0.08666667 -0.04 0.02 + vertex 0.08666667 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.03 + vertex 0.08 -0.04 0.03 + vertex 0.08 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 0.03 + vertex 0.08666667 -0.04 0.03 + vertex 0.08666667 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.04 + vertex 0.08 -0.04 0.04 + vertex 0.08 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 -0.04 0.04 + vertex 0.08666667 -0.04 0.04 + vertex 0.08666667 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.05 + vertex 0.08 -0.04 0.05 + vertex 0.08 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.05 + vertex 0.09333333 -0.04 -0.05 + vertex 0.09333333 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.04 + vertex 0.08666667 -0.04 -0.04 + vertex 0.08666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.04 + vertex 0.09333333 -0.04 -0.04 + vertex 0.09333333 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.03 + vertex 0.08666667 -0.04 -0.03 + vertex 0.08666667 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.03 + vertex 0.09333333 -0.04 -0.03 + vertex 0.09333333 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.02 + vertex 0.08666667 -0.04 -0.02 + vertex 0.08666667 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.02 + vertex 0.09333333 -0.04 -0.02 + vertex 0.09333333 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.01 + vertex 0.08666667 -0.04 -0.01 + vertex 0.08666667 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 -0.01 + vertex 0.09333333 -0.04 -0.01 + vertex 0.09333333 -0.04 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 4.698209e-19 + vertex 0.08666667 -0.04 -2.168404e-19 + vertex 0.08666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 4.698209e-19 + vertex 0.09333333 -0.04 0.01 + vertex 0.08666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.01 + vertex 0.08666667 -0.04 -2.168404e-19 + vertex 0.09333333 -0.04 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.01 + vertex 0.09333333 -0.04 0.01 + vertex 0.09333333 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.02 + vertex 0.08666667 -0.04 0.02 + vertex 0.08666667 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.02 + vertex 0.09333333 -0.04 0.02 + vertex 0.09333333 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.03 + vertex 0.08666667 -0.04 0.03 + vertex 0.08666667 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.03 + vertex 0.09333333 -0.04 0.03 + vertex 0.09333333 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.04 + vertex 0.08666667 -0.04 0.04 + vertex 0.08666667 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 -0.04 0.04 + vertex 0.09333333 -0.04 0.04 + vertex 0.09333333 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.05 + vertex 0.08666667 -0.04 0.05 + vertex 0.08666667 -0.04 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.05 + vertex 0.1 -0.04 -0.05 + vertex 0.1 -0.04 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 -0.04 + vertex 0.09333333 -0.04 -0.04 + vertex 0.09333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.04 + vertex 0.1 -0.04 -0.04 + vertex 0.1 -0.04 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 -0.03 + vertex 0.09333333 -0.04 -0.03 + vertex 0.09333333 -0.04 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.03 + vertex 0.1 -0.04 -0.03 + vertex 0.1 -0.04 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 -0.02 + vertex 0.09333333 -0.04 -0.02 + vertex 0.09333333 -0.04 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.02 + vertex 0.1 -0.04 -0.02 + vertex 0.1 -0.04 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 -0.01 + vertex 0.09333333 -0.04 -0.01 + vertex 0.09333333 -0.04 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 -0.01 + vertex 0.1 -0.04 -0.01 + vertex 0.1 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 0 + vertex 0.09333333 -0.04 4.698209e-19 + vertex 0.09333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 4.698209e-19 + vertex 0.1 -0.04 0 + vertex 0.1 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 0.01 + vertex 0.09333333 -0.04 0.01 + vertex 0.09333333 -0.04 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.01 + vertex 0.1 -0.04 0.01 + vertex 0.1 -0.04 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 0.02 + vertex 0.09333333 -0.04 0.02 + vertex 0.09333333 -0.04 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.02 + vertex 0.1 -0.04 0.02 + vertex 0.1 -0.04 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 0.03 + vertex 0.09333333 -0.04 0.03 + vertex 0.09333333 -0.04 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.03 + vertex 0.1 -0.04 0.03 + vertex 0.1 -0.04 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 0.04 + vertex 0.09333333 -0.04 0.04 + vertex 0.09333333 -0.04 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 -0.04 0.04 + vertex 0.1 -0.04 0.04 + vertex 0.1 -0.04 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 -0.04 0.05 + vertex 0.09333333 -0.04 0.05 + vertex 0.09333333 -0.04 0.04 + endloop + endfacet +endsolid minY +solid minZ + facet normal 0 0 -1 + outer loop + vertex -0.1 -0.04 -0.05 + vertex -0.1 -0.032 -0.05 + vertex -0.09333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 -0.032 -0.05 + vertex -0.09333333 -0.04 -0.05 + vertex -0.1 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 -0.032 -0.05 + vertex -0.1 -0.024 -0.05 + vertex -0.09333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 -0.024 -0.05 + vertex -0.09333333 -0.032 -0.05 + vertex -0.1 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 -0.024 -0.05 + vertex -0.1 -0.016 -0.05 + vertex -0.09333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 -0.016 -0.05 + vertex -0.09333333 -0.024 -0.05 + vertex -0.1 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 -0.016 -0.05 + vertex -0.1 -0.008 -0.05 + vertex -0.09333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 -0.008 -0.05 + vertex -0.09333333 -0.016 -0.05 + vertex -0.1 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 -0.008 -0.05 + vertex -0.1 0 -0.05 + vertex -0.09333333 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 0 -0.05 + vertex -0.09333333 -0.008 -0.05 + vertex -0.1 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 -0.04 -0.05 + vertex -0.09333333 -0.032 -0.05 + vertex -0.08666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 -0.032 -0.05 + vertex -0.08666667 -0.04 -0.05 + vertex -0.09333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 -0.032 -0.05 + vertex -0.09333333 -0.024 -0.05 + vertex -0.08666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 -0.024 -0.05 + vertex -0.08666667 -0.032 -0.05 + vertex -0.09333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 -0.024 -0.05 + vertex -0.09333333 -0.016 -0.05 + vertex -0.08666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 -0.016 -0.05 + vertex -0.08666667 -0.024 -0.05 + vertex -0.09333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 -0.016 -0.05 + vertex -0.09333333 -0.008 -0.05 + vertex -0.08666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 -0.008 -0.05 + vertex -0.08666667 -0.016 -0.05 + vertex -0.09333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 -0.008 -0.05 + vertex -0.09333333 0 -0.05 + vertex -0.08666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 0 -0.05 + vertex -0.08666667 -0.008 -0.05 + vertex -0.09333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 -0.04 -0.05 + vertex -0.08666667 -0.032 -0.05 + vertex -0.08 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 -0.032 -0.05 + vertex -0.08 -0.04 -0.05 + vertex -0.08666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 -0.032 -0.05 + vertex -0.08666667 -0.024 -0.05 + vertex -0.08 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 -0.024 -0.05 + vertex -0.08 -0.032 -0.05 + vertex -0.08666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 -0.024 -0.05 + vertex -0.08666667 -0.016 -0.05 + vertex -0.08 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 -0.016 -0.05 + vertex -0.08 -0.024 -0.05 + vertex -0.08666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 -0.016 -0.05 + vertex -0.08666667 -0.008 -0.05 + vertex -0.08 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 -0.008 -0.05 + vertex -0.08 -0.016 -0.05 + vertex -0.08666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 -0.008 -0.05 + vertex -0.08666667 0 -0.05 + vertex -0.08 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 0 -0.05 + vertex -0.08 -0.008 -0.05 + vertex -0.08666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 -0.04 -0.05 + vertex -0.08 -0.032 -0.05 + vertex -0.07333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 -0.032 -0.05 + vertex -0.07333333 -0.04 -0.05 + vertex -0.08 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 -0.032 -0.05 + vertex -0.08 -0.024 -0.05 + vertex -0.07333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 -0.024 -0.05 + vertex -0.07333333 -0.032 -0.05 + vertex -0.08 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 -0.024 -0.05 + vertex -0.08 -0.016 -0.05 + vertex -0.07333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 -0.016 -0.05 + vertex -0.07333333 -0.024 -0.05 + vertex -0.08 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 -0.016 -0.05 + vertex -0.08 -0.008 -0.05 + vertex -0.07333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 -0.008 -0.05 + vertex -0.07333333 -0.016 -0.05 + vertex -0.08 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 -0.008 -0.05 + vertex -0.08 0 -0.05 + vertex -0.07333333 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 0 -0.05 + vertex -0.07333333 -0.008 -0.05 + vertex -0.08 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 -0.04 -0.05 + vertex -0.07333333 -0.032 -0.05 + vertex -0.06666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 -0.032 -0.05 + vertex -0.06666667 -0.04 -0.05 + vertex -0.07333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 -0.032 -0.05 + vertex -0.07333333 -0.024 -0.05 + vertex -0.06666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 -0.024 -0.05 + vertex -0.06666667 -0.032 -0.05 + vertex -0.07333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 -0.024 -0.05 + vertex -0.07333333 -0.016 -0.05 + vertex -0.06666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 -0.016 -0.05 + vertex -0.06666667 -0.024 -0.05 + vertex -0.07333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 -0.016 -0.05 + vertex -0.07333333 -0.008 -0.05 + vertex -0.06666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 -0.008 -0.05 + vertex -0.06666667 -0.016 -0.05 + vertex -0.07333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 -0.008 -0.05 + vertex -0.07333333 0 -0.05 + vertex -0.06666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 0 -0.05 + vertex -0.06666667 -0.008 -0.05 + vertex -0.07333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 -0.04 -0.05 + vertex -0.06666667 -0.032 -0.05 + vertex -0.06 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 -0.032 -0.05 + vertex -0.06 -0.04 -0.05 + vertex -0.06666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 -0.032 -0.05 + vertex -0.06666667 -0.024 -0.05 + vertex -0.06 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 -0.024 -0.05 + vertex -0.06 -0.032 -0.05 + vertex -0.06666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 -0.024 -0.05 + vertex -0.06666667 -0.016 -0.05 + vertex -0.06 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 -0.016 -0.05 + vertex -0.06 -0.024 -0.05 + vertex -0.06666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 -0.016 -0.05 + vertex -0.06666667 -0.008 -0.05 + vertex -0.06 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 -0.008 -0.05 + vertex -0.06 -0.016 -0.05 + vertex -0.06666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 -0.008 -0.05 + vertex -0.06666667 0 -0.05 + vertex -0.06 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 0 -0.05 + vertex -0.06 -0.008 -0.05 + vertex -0.06666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 -0.04 -0.05 + vertex -0.06 -0.032 -0.05 + vertex -0.05333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 -0.032 -0.05 + vertex -0.05333333 -0.04 -0.05 + vertex -0.06 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 -0.032 -0.05 + vertex -0.06 -0.024 -0.05 + vertex -0.05333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 -0.024 -0.05 + vertex -0.05333333 -0.032 -0.05 + vertex -0.06 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 -0.024 -0.05 + vertex -0.06 -0.016 -0.05 + vertex -0.05333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 -0.016 -0.05 + vertex -0.05333333 -0.024 -0.05 + vertex -0.06 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 -0.016 -0.05 + vertex -0.06 -0.008 -0.05 + vertex -0.05333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 -0.008 -0.05 + vertex -0.05333333 -0.016 -0.05 + vertex -0.06 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 -0.008 -0.05 + vertex -0.06 0 -0.05 + vertex -0.05333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.05333333 -0.008 -0.05 + vertex -0.06 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 -0.04 -0.05 + vertex -0.05333333 -0.032 -0.05 + vertex -0.04666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 -0.032 -0.05 + vertex -0.04666667 -0.04 -0.05 + vertex -0.05333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 -0.032 -0.05 + vertex -0.05333333 -0.024 -0.05 + vertex -0.04666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 -0.024 -0.05 + vertex -0.04666667 -0.032 -0.05 + vertex -0.05333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 -0.024 -0.05 + vertex -0.05333333 -0.016 -0.05 + vertex -0.04666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 -0.016 -0.05 + vertex -0.04666667 -0.024 -0.05 + vertex -0.05333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 -0.016 -0.05 + vertex -0.05333333 -0.008 -0.05 + vertex -0.04666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 -0.008 -0.05 + vertex -0.04666667 -0.016 -0.05 + vertex -0.05333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 -0.008 -0.05 + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.04666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 0 -0.05 + vertex -0.04666667 -0.008 -0.05 + vertex -0.05333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 -0.04 -0.05 + vertex -0.04666667 -0.032 -0.05 + vertex -0.04 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 -0.032 -0.05 + vertex -0.04 -0.04 -0.05 + vertex -0.04666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 -0.032 -0.05 + vertex -0.04666667 -0.024 -0.05 + vertex -0.04 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 -0.024 -0.05 + vertex -0.04 -0.032 -0.05 + vertex -0.04666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 -0.024 -0.05 + vertex -0.04666667 -0.016 -0.05 + vertex -0.04 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 -0.016 -0.05 + vertex -0.04 -0.024 -0.05 + vertex -0.04666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 -0.016 -0.05 + vertex -0.04666667 -0.008 -0.05 + vertex -0.04 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 -0.008 -0.05 + vertex -0.04 -0.016 -0.05 + vertex -0.04666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 -0.008 -0.05 + vertex -0.04666667 0 -0.05 + vertex -0.04 5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 5.782412e-19 -0.05 + vertex -0.04 -0.008 -0.05 + vertex -0.04666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 -0.04 -0.05 + vertex -0.04 -0.032 -0.05 + vertex -0.03333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 -0.032 -0.05 + vertex -0.03333333 -0.04 -0.05 + vertex -0.04 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 -0.032 -0.05 + vertex -0.04 -0.024 -0.05 + vertex -0.03333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 -0.024 -0.05 + vertex -0.03333333 -0.032 -0.05 + vertex -0.04 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 -0.024 -0.05 + vertex -0.04 -0.016 -0.05 + vertex -0.03333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 -0.016 -0.05 + vertex -0.03333333 -0.024 -0.05 + vertex -0.04 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 -0.016 -0.05 + vertex -0.04 -0.008 -0.05 + vertex -0.03333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 -0.008 -0.05 + vertex -0.03333333 -0.016 -0.05 + vertex -0.04 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.03333333 -0.008 -0.05 + vertex -0.04 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 -0.008 -0.05 + vertex -0.04 5.782412e-19 -0.05 + vertex -0.03333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 -0.04 -0.05 + vertex -0.03333333 -0.032 -0.05 + vertex -0.02666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 -0.032 -0.05 + vertex -0.02666667 -0.04 -0.05 + vertex -0.03333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 -0.032 -0.05 + vertex -0.03333333 -0.024 -0.05 + vertex -0.02666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 -0.024 -0.05 + vertex -0.02666667 -0.032 -0.05 + vertex -0.03333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 -0.024 -0.05 + vertex -0.03333333 -0.016 -0.05 + vertex -0.02666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 -0.016 -0.05 + vertex -0.02666667 -0.024 -0.05 + vertex -0.03333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 -0.016 -0.05 + vertex -0.03333333 -0.008 -0.05 + vertex -0.02666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 -0.008 -0.05 + vertex -0.02666667 -0.016 -0.05 + vertex -0.03333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 -0.008 -0.05 + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.02666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 0 -0.05 + vertex -0.02666667 -0.008 -0.05 + vertex -0.03333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 -0.04 -0.05 + vertex -0.02666667 -0.032 -0.05 + vertex -0.02 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 -0.032 -0.05 + vertex -0.02 -0.04 -0.05 + vertex -0.02666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 -0.032 -0.05 + vertex -0.02666667 -0.024 -0.05 + vertex -0.02 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 -0.024 -0.05 + vertex -0.02 -0.032 -0.05 + vertex -0.02666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 -0.024 -0.05 + vertex -0.02666667 -0.016 -0.05 + vertex -0.02 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 -0.016 -0.05 + vertex -0.02 -0.024 -0.05 + vertex -0.02666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 -0.016 -0.05 + vertex -0.02666667 -0.008 -0.05 + vertex -0.02 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 -0.008 -0.05 + vertex -0.02 -0.016 -0.05 + vertex -0.02666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 -0.008 -0.05 + vertex -0.02666667 0 -0.05 + vertex -0.02 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 0 -0.05 + vertex -0.02 -0.008 -0.05 + vertex -0.02666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 -0.04 -0.05 + vertex -0.02 -0.032 -0.05 + vertex -0.01333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 -0.032 -0.05 + vertex -0.01333333 -0.04 -0.05 + vertex -0.02 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 -0.032 -0.05 + vertex -0.02 -0.024 -0.05 + vertex -0.01333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 -0.024 -0.05 + vertex -0.01333333 -0.032 -0.05 + vertex -0.02 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 -0.024 -0.05 + vertex -0.02 -0.016 -0.05 + vertex -0.01333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 -0.016 -0.05 + vertex -0.01333333 -0.024 -0.05 + vertex -0.02 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 -0.016 -0.05 + vertex -0.02 -0.008 -0.05 + vertex -0.01333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 -0.008 -0.05 + vertex -0.01333333 -0.016 -0.05 + vertex -0.02 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 -0.008 -0.05 + vertex -0.02 0 -0.05 + vertex -0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 0 -0.05 + vertex -0.01333333 -0.008 -0.05 + vertex -0.02 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.04 -0.05 + vertex -0.01333333 -0.032 -0.05 + vertex -0.006666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.032 -0.05 + vertex -0.006666667 -0.04 -0.05 + vertex -0.01333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.032 -0.05 + vertex -0.01333333 -0.024 -0.05 + vertex -0.006666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.024 -0.05 + vertex -0.006666667 -0.032 -0.05 + vertex -0.01333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.024 -0.05 + vertex -0.01333333 -0.016 -0.05 + vertex -0.006666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.016 -0.05 + vertex -0.006666667 -0.024 -0.05 + vertex -0.01333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.016 -0.05 + vertex -0.01333333 -0.008 -0.05 + vertex -0.006666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.008 -0.05 + vertex -0.006666667 -0.016 -0.05 + vertex -0.01333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.008 -0.05 + vertex -0.01333333 0 -0.05 + vertex -0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0 -0.05 + vertex -0.006666667 -0.008 -0.05 + vertex -0.01333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.04 -0.05 + vertex -0.006666667 -0.032 -0.05 + vertex 0 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.032 -0.05 + vertex 0 -0.04 -0.05 + vertex -0.006666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.032 -0.05 + vertex -0.006666667 -0.024 -0.05 + vertex 0 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.024 -0.05 + vertex 0 -0.032 -0.05 + vertex -0.006666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.024 -0.05 + vertex -0.006666667 -0.016 -0.05 + vertex 0 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.016 -0.05 + vertex 0 -0.024 -0.05 + vertex -0.006666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.016 -0.05 + vertex -0.006666667 -0.008 -0.05 + vertex 0 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.008 -0.05 + vertex 0 -0.016 -0.05 + vertex -0.006666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.008 -0.05 + vertex -0.006666667 0 -0.05 + vertex 0 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0 -0.05 + vertex 0 -0.008 -0.05 + vertex -0.006666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.04 -0.05 + vertex 0 -0.032 -0.05 + vertex 0.006666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.032 -0.05 + vertex 0.006666667 -0.04 -0.05 + vertex 0 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.032 -0.05 + vertex 0 -0.024 -0.05 + vertex 0.006666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.024 -0.05 + vertex 0.006666667 -0.032 -0.05 + vertex 0 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.024 -0.05 + vertex 0 -0.016 -0.05 + vertex 0.006666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.016 -0.05 + vertex 0.006666667 -0.024 -0.05 + vertex 0 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.016 -0.05 + vertex 0 -0.008 -0.05 + vertex 0.006666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.008 -0.05 + vertex 0.006666667 -0.016 -0.05 + vertex 0 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.008 -0.05 + vertex 0 0 -0.05 + vertex 0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0 -0.05 + vertex 0.006666667 -0.008 -0.05 + vertex 0 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.04 -0.05 + vertex 0.006666667 -0.032 -0.05 + vertex 0.01333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.032 -0.05 + vertex 0.01333333 -0.04 -0.05 + vertex 0.006666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.032 -0.05 + vertex 0.006666667 -0.024 -0.05 + vertex 0.01333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.024 -0.05 + vertex 0.01333333 -0.032 -0.05 + vertex 0.006666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.024 -0.05 + vertex 0.006666667 -0.016 -0.05 + vertex 0.01333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.016 -0.05 + vertex 0.01333333 -0.024 -0.05 + vertex 0.006666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.016 -0.05 + vertex 0.006666667 -0.008 -0.05 + vertex 0.01333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.008 -0.05 + vertex 0.01333333 -0.016 -0.05 + vertex 0.006666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.008 -0.05 + vertex 0.006666667 0 -0.05 + vertex 0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0 -0.05 + vertex 0.01333333 -0.008 -0.05 + vertex 0.006666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 -0.04 -0.05 + vertex 0.01333333 -0.032 -0.05 + vertex 0.02 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 -0.032 -0.05 + vertex 0.02 -0.04 -0.05 + vertex 0.01333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 -0.032 -0.05 + vertex 0.01333333 -0.024 -0.05 + vertex 0.02 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 -0.024 -0.05 + vertex 0.02 -0.032 -0.05 + vertex 0.01333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 -0.024 -0.05 + vertex 0.01333333 -0.016 -0.05 + vertex 0.02 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 -0.016 -0.05 + vertex 0.02 -0.024 -0.05 + vertex 0.01333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 -0.016 -0.05 + vertex 0.01333333 -0.008 -0.05 + vertex 0.02 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 -0.008 -0.05 + vertex 0.02 -0.016 -0.05 + vertex 0.01333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 -0.008 -0.05 + vertex 0.01333333 0 -0.05 + vertex 0.02 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 0 -0.05 + vertex 0.02 -0.008 -0.05 + vertex 0.01333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 -0.04 -0.05 + vertex 0.02 -0.032 -0.05 + vertex 0.02666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 -0.032 -0.05 + vertex 0.02666667 -0.04 -0.05 + vertex 0.02 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 -0.032 -0.05 + vertex 0.02 -0.024 -0.05 + vertex 0.02666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 -0.024 -0.05 + vertex 0.02666667 -0.032 -0.05 + vertex 0.02 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 -0.024 -0.05 + vertex 0.02 -0.016 -0.05 + vertex 0.02666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 -0.016 -0.05 + vertex 0.02666667 -0.024 -0.05 + vertex 0.02 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 -0.016 -0.05 + vertex 0.02 -0.008 -0.05 + vertex 0.02666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 -0.008 -0.05 + vertex 0.02666667 -0.016 -0.05 + vertex 0.02 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 -0.008 -0.05 + vertex 0.02 0 -0.05 + vertex 0.02666667 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 0 -0.05 + vertex 0.02666667 -0.008 -0.05 + vertex 0.02 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 -0.04 -0.05 + vertex 0.02666667 -0.032 -0.05 + vertex 0.03333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 -0.032 -0.05 + vertex 0.03333333 -0.04 -0.05 + vertex 0.02666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 -0.032 -0.05 + vertex 0.02666667 -0.024 -0.05 + vertex 0.03333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 -0.024 -0.05 + vertex 0.03333333 -0.032 -0.05 + vertex 0.02666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 -0.024 -0.05 + vertex 0.02666667 -0.016 -0.05 + vertex 0.03333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 -0.016 -0.05 + vertex 0.03333333 -0.024 -0.05 + vertex 0.02666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 -0.016 -0.05 + vertex 0.02666667 -0.008 -0.05 + vertex 0.03333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 -0.008 -0.05 + vertex 0.03333333 -0.016 -0.05 + vertex 0.02666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 -0.008 -0.05 + vertex 0.02666667 0 -0.05 + vertex 0.03333333 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 0 -0.05 + vertex 0.03333333 -0.008 -0.05 + vertex 0.02666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 -0.04 -0.05 + vertex 0.03333333 -0.032 -0.05 + vertex 0.04 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 -0.032 -0.05 + vertex 0.04 -0.04 -0.05 + vertex 0.03333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 -0.032 -0.05 + vertex 0.03333333 -0.024 -0.05 + vertex 0.04 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 -0.024 -0.05 + vertex 0.04 -0.032 -0.05 + vertex 0.03333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 -0.024 -0.05 + vertex 0.03333333 -0.016 -0.05 + vertex 0.04 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 -0.016 -0.05 + vertex 0.04 -0.024 -0.05 + vertex 0.03333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 -0.016 -0.05 + vertex 0.03333333 -0.008 -0.05 + vertex 0.04 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 -0.008 -0.05 + vertex 0.04 -0.016 -0.05 + vertex 0.03333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 -0.008 -0.05 + vertex 0.03333333 0 -0.05 + vertex 0.04 -2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.04 -0.008 -0.05 + vertex 0.03333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 -0.04 -0.05 + vertex 0.04 -0.032 -0.05 + vertex 0.04666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 -0.032 -0.05 + vertex 0.04666667 -0.04 -0.05 + vertex 0.04 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 -0.032 -0.05 + vertex 0.04 -0.024 -0.05 + vertex 0.04666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 -0.024 -0.05 + vertex 0.04666667 -0.032 -0.05 + vertex 0.04 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 -0.024 -0.05 + vertex 0.04 -0.016 -0.05 + vertex 0.04666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 -0.016 -0.05 + vertex 0.04666667 -0.024 -0.05 + vertex 0.04 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 -0.016 -0.05 + vertex 0.04 -0.008 -0.05 + vertex 0.04666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 -0.008 -0.05 + vertex 0.04666667 -0.016 -0.05 + vertex 0.04 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 -0.008 -0.05 + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.04666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.04666667 -0.008 -0.05 + vertex 0.04 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 -0.04 -0.05 + vertex 0.04666667 -0.032 -0.05 + vertex 0.05333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 -0.032 -0.05 + vertex 0.05333333 -0.04 -0.05 + vertex 0.04666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 -0.032 -0.05 + vertex 0.04666667 -0.024 -0.05 + vertex 0.05333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 -0.024 -0.05 + vertex 0.05333333 -0.032 -0.05 + vertex 0.04666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 -0.024 -0.05 + vertex 0.04666667 -0.016 -0.05 + vertex 0.05333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 -0.016 -0.05 + vertex 0.05333333 -0.024 -0.05 + vertex 0.04666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 -0.016 -0.05 + vertex 0.04666667 -0.008 -0.05 + vertex 0.05333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 -0.008 -0.05 + vertex 0.05333333 -0.016 -0.05 + vertex 0.04666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 -0.008 -0.05 + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.05333333 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 0 -0.05 + vertex 0.05333333 -0.008 -0.05 + vertex 0.04666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 -0.04 -0.05 + vertex 0.05333333 -0.032 -0.05 + vertex 0.06 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 -0.032 -0.05 + vertex 0.06 -0.04 -0.05 + vertex 0.05333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 -0.032 -0.05 + vertex 0.05333333 -0.024 -0.05 + vertex 0.06 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 -0.024 -0.05 + vertex 0.06 -0.032 -0.05 + vertex 0.05333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 -0.024 -0.05 + vertex 0.05333333 -0.016 -0.05 + vertex 0.06 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 -0.016 -0.05 + vertex 0.06 -0.024 -0.05 + vertex 0.05333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 -0.016 -0.05 + vertex 0.05333333 -0.008 -0.05 + vertex 0.06 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 -0.008 -0.05 + vertex 0.06 -0.016 -0.05 + vertex 0.05333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 -0.008 -0.05 + vertex 0.05333333 0 -0.05 + vertex 0.06 -2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.06 -0.008 -0.05 + vertex 0.05333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 -0.04 -0.05 + vertex 0.06 -0.032 -0.05 + vertex 0.06666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 -0.032 -0.05 + vertex 0.06666667 -0.04 -0.05 + vertex 0.06 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 -0.032 -0.05 + vertex 0.06 -0.024 -0.05 + vertex 0.06666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 -0.024 -0.05 + vertex 0.06666667 -0.032 -0.05 + vertex 0.06 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 -0.024 -0.05 + vertex 0.06 -0.016 -0.05 + vertex 0.06666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 -0.016 -0.05 + vertex 0.06666667 -0.024 -0.05 + vertex 0.06 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 -0.016 -0.05 + vertex 0.06 -0.008 -0.05 + vertex 0.06666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 -0.008 -0.05 + vertex 0.06666667 -0.016 -0.05 + vertex 0.06 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 -0.008 -0.05 + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.06666667 -4.336809e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.06666667 -0.008 -0.05 + vertex 0.06 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 -0.04 -0.05 + vertex 0.06666667 -0.032 -0.05 + vertex 0.07333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 -0.032 -0.05 + vertex 0.07333333 -0.04 -0.05 + vertex 0.06666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 -0.032 -0.05 + vertex 0.06666667 -0.024 -0.05 + vertex 0.07333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 -0.024 -0.05 + vertex 0.07333333 -0.032 -0.05 + vertex 0.06666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 -0.024 -0.05 + vertex 0.06666667 -0.016 -0.05 + vertex 0.07333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 -0.016 -0.05 + vertex 0.07333333 -0.024 -0.05 + vertex 0.06666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 -0.016 -0.05 + vertex 0.06666667 -0.008 -0.05 + vertex 0.07333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 -0.008 -0.05 + vertex 0.07333333 -0.016 -0.05 + vertex 0.06666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 -0.008 -0.05 + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.07333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.07333333 -0.008 -0.05 + vertex 0.06666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 -0.04 -0.05 + vertex 0.07333333 -0.032 -0.05 + vertex 0.08 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 -0.032 -0.05 + vertex 0.08 -0.04 -0.05 + vertex 0.07333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 -0.032 -0.05 + vertex 0.07333333 -0.024 -0.05 + vertex 0.08 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 -0.024 -0.05 + vertex 0.08 -0.032 -0.05 + vertex 0.07333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 -0.024 -0.05 + vertex 0.07333333 -0.016 -0.05 + vertex 0.08 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 -0.016 -0.05 + vertex 0.08 -0.024 -0.05 + vertex 0.07333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 -0.016 -0.05 + vertex 0.07333333 -0.008 -0.05 + vertex 0.08 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 -0.008 -0.05 + vertex 0.08 -0.016 -0.05 + vertex 0.07333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 -0.008 -0.05 + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.08 4.336809e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 4.336809e-19 -0.05 + vertex 0.08 -0.008 -0.05 + vertex 0.07333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 -0.04 -0.05 + vertex 0.08 -0.032 -0.05 + vertex 0.08666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 -0.032 -0.05 + vertex 0.08666667 -0.04 -0.05 + vertex 0.08 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 -0.032 -0.05 + vertex 0.08 -0.024 -0.05 + vertex 0.08666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 -0.024 -0.05 + vertex 0.08666667 -0.032 -0.05 + vertex 0.08 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 -0.024 -0.05 + vertex 0.08 -0.016 -0.05 + vertex 0.08666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 -0.016 -0.05 + vertex 0.08666667 -0.024 -0.05 + vertex 0.08 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 -0.016 -0.05 + vertex 0.08 -0.008 -0.05 + vertex 0.08666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 -0.008 -0.05 + vertex 0.08666667 -0.016 -0.05 + vertex 0.08 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 -0.008 -0.05 + vertex 0.08 4.336809e-19 -0.05 + vertex 0.08666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.08666667 -0.008 -0.05 + vertex 0.08 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 -0.04 -0.05 + vertex 0.08666667 -0.032 -0.05 + vertex 0.09333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 -0.032 -0.05 + vertex 0.09333333 -0.04 -0.05 + vertex 0.08666667 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 -0.032 -0.05 + vertex 0.08666667 -0.024 -0.05 + vertex 0.09333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 -0.024 -0.05 + vertex 0.09333333 -0.032 -0.05 + vertex 0.08666667 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 -0.024 -0.05 + vertex 0.08666667 -0.016 -0.05 + vertex 0.09333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 -0.016 -0.05 + vertex 0.09333333 -0.024 -0.05 + vertex 0.08666667 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 -0.016 -0.05 + vertex 0.08666667 -0.008 -0.05 + vertex 0.09333333 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 -0.008 -0.05 + vertex 0.09333333 -0.016 -0.05 + vertex 0.08666667 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 -0.008 -0.05 + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.09333333 1.445603e-19 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.09333333 -0.008 -0.05 + vertex 0.08666667 -0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 -0.04 -0.05 + vertex 0.09333333 -0.032 -0.05 + vertex 0.1 -0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 -0.032 -0.05 + vertex 0.1 -0.04 -0.05 + vertex 0.09333333 -0.04 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 -0.032 -0.05 + vertex 0.09333333 -0.024 -0.05 + vertex 0.1 -0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 -0.024 -0.05 + vertex 0.1 -0.032 -0.05 + vertex 0.09333333 -0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 -0.024 -0.05 + vertex 0.09333333 -0.016 -0.05 + vertex 0.1 -0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 -0.016 -0.05 + vertex 0.1 -0.024 -0.05 + vertex 0.09333333 -0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 -0.016 -0.05 + vertex 0.09333333 -0.008 -0.05 + vertex 0.1 -0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 -0.008 -0.05 + vertex 0.1 -0.016 -0.05 + vertex 0.09333333 -0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 -0.008 -0.05 + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.1 0 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 0 -0.05 + vertex 0.1 -0.008 -0.05 + vertex 0.09333333 -0.008 -0.05 + endloop + endfacet +endsolid minZ +solid maxZ + facet normal 0 0 1 + outer loop + vertex -0.1 -0.04 0.05 + vertex -0.09333333 -0.04 0.05 + vertex -0.09333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.032 0.05 + vertex -0.1 -0.032 0.05 + vertex -0.1 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 -0.032 0.05 + vertex -0.09333333 -0.032 0.05 + vertex -0.09333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.024 0.05 + vertex -0.1 -0.024 0.05 + vertex -0.1 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 -0.024 0.05 + vertex -0.09333333 -0.024 0.05 + vertex -0.09333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.016 0.05 + vertex -0.1 -0.016 0.05 + vertex -0.1 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 -0.016 0.05 + vertex -0.09333333 -0.016 0.05 + vertex -0.09333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.008 0.05 + vertex -0.1 -0.008 0.05 + vertex -0.1 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 -0.008 0.05 + vertex -0.09333333 -0.008 0.05 + vertex -0.09333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0 0.05 + vertex -0.1 0 0.05 + vertex -0.1 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.04 0.05 + vertex -0.08666667 -0.04 0.05 + vertex -0.08666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.032 0.05 + vertex -0.09333333 -0.032 0.05 + vertex -0.09333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.032 0.05 + vertex -0.08666667 -0.032 0.05 + vertex -0.08666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.024 0.05 + vertex -0.09333333 -0.024 0.05 + vertex -0.09333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.024 0.05 + vertex -0.08666667 -0.024 0.05 + vertex -0.08666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.016 0.05 + vertex -0.09333333 -0.016 0.05 + vertex -0.09333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.016 0.05 + vertex -0.08666667 -0.016 0.05 + vertex -0.08666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.008 0.05 + vertex -0.09333333 -0.008 0.05 + vertex -0.09333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 -0.008 0.05 + vertex -0.08666667 -0.008 0.05 + vertex -0.08666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0 0.05 + vertex -0.09333333 0 0.05 + vertex -0.09333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.04 0.05 + vertex -0.08 -0.04 0.05 + vertex -0.08 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.032 0.05 + vertex -0.08666667 -0.032 0.05 + vertex -0.08666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.032 0.05 + vertex -0.08 -0.032 0.05 + vertex -0.08 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.024 0.05 + vertex -0.08666667 -0.024 0.05 + vertex -0.08666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.024 0.05 + vertex -0.08 -0.024 0.05 + vertex -0.08 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.016 0.05 + vertex -0.08666667 -0.016 0.05 + vertex -0.08666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.016 0.05 + vertex -0.08 -0.016 0.05 + vertex -0.08 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.008 0.05 + vertex -0.08666667 -0.008 0.05 + vertex -0.08666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 -0.008 0.05 + vertex -0.08 -0.008 0.05 + vertex -0.08 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0 0.05 + vertex -0.08666667 0 0.05 + vertex -0.08666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.04 0.05 + vertex -0.07333333 -0.04 0.05 + vertex -0.07333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.032 0.05 + vertex -0.08 -0.032 0.05 + vertex -0.08 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.032 0.05 + vertex -0.07333333 -0.032 0.05 + vertex -0.07333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.024 0.05 + vertex -0.08 -0.024 0.05 + vertex -0.08 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.024 0.05 + vertex -0.07333333 -0.024 0.05 + vertex -0.07333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.016 0.05 + vertex -0.08 -0.016 0.05 + vertex -0.08 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.016 0.05 + vertex -0.07333333 -0.016 0.05 + vertex -0.07333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.008 0.05 + vertex -0.08 -0.008 0.05 + vertex -0.08 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 -0.008 0.05 + vertex -0.07333333 -0.008 0.05 + vertex -0.07333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0 0.05 + vertex -0.08 0 0.05 + vertex -0.08 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.04 0.05 + vertex -0.06666667 -0.04 0.05 + vertex -0.06666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.032 0.05 + vertex -0.07333333 -0.032 0.05 + vertex -0.07333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.032 0.05 + vertex -0.06666667 -0.032 0.05 + vertex -0.06666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.024 0.05 + vertex -0.07333333 -0.024 0.05 + vertex -0.07333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.024 0.05 + vertex -0.06666667 -0.024 0.05 + vertex -0.06666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.016 0.05 + vertex -0.07333333 -0.016 0.05 + vertex -0.07333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.016 0.05 + vertex -0.06666667 -0.016 0.05 + vertex -0.06666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.008 0.05 + vertex -0.07333333 -0.008 0.05 + vertex -0.07333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 -0.008 0.05 + vertex -0.06666667 -0.008 0.05 + vertex -0.06666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0 0.05 + vertex -0.07333333 0 0.05 + vertex -0.07333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.04 0.05 + vertex -0.06 -0.04 0.05 + vertex -0.06 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.032 0.05 + vertex -0.06666667 -0.032 0.05 + vertex -0.06666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.032 0.05 + vertex -0.06 -0.032 0.05 + vertex -0.06 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.024 0.05 + vertex -0.06666667 -0.024 0.05 + vertex -0.06666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.024 0.05 + vertex -0.06 -0.024 0.05 + vertex -0.06 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.016 0.05 + vertex -0.06666667 -0.016 0.05 + vertex -0.06666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.016 0.05 + vertex -0.06 -0.016 0.05 + vertex -0.06 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.008 0.05 + vertex -0.06666667 -0.008 0.05 + vertex -0.06666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 -0.008 0.05 + vertex -0.06 -0.008 0.05 + vertex -0.06 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0 0.05 + vertex -0.06666667 0 0.05 + vertex -0.06666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.04 0.05 + vertex -0.05333333 -0.04 0.05 + vertex -0.05333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.032 0.05 + vertex -0.06 -0.032 0.05 + vertex -0.06 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.032 0.05 + vertex -0.05333333 -0.032 0.05 + vertex -0.05333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.024 0.05 + vertex -0.06 -0.024 0.05 + vertex -0.06 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.024 0.05 + vertex -0.05333333 -0.024 0.05 + vertex -0.05333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.016 0.05 + vertex -0.06 -0.016 0.05 + vertex -0.06 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.016 0.05 + vertex -0.05333333 -0.016 0.05 + vertex -0.05333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.008 0.05 + vertex -0.06 -0.008 0.05 + vertex -0.06 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 -0.008 0.05 + vertex -0.05333333 -0.008 0.05 + vertex -0.05333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.06 0 0.05 + vertex -0.06 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.04 0.05 + vertex -0.04666667 -0.04 0.05 + vertex -0.04666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.032 0.05 + vertex -0.05333333 -0.032 0.05 + vertex -0.05333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.032 0.05 + vertex -0.04666667 -0.032 0.05 + vertex -0.04666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.024 0.05 + vertex -0.05333333 -0.024 0.05 + vertex -0.05333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.024 0.05 + vertex -0.04666667 -0.024 0.05 + vertex -0.04666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.016 0.05 + vertex -0.05333333 -0.016 0.05 + vertex -0.05333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.016 0.05 + vertex -0.04666667 -0.016 0.05 + vertex -0.04666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.008 0.05 + vertex -0.05333333 -0.008 0.05 + vertex -0.05333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 -0.008 0.05 + vertex -0.04666667 -0.008 0.05 + vertex -0.04666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0 0.05 + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.05333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.04 0.05 + vertex -0.04 -0.04 0.05 + vertex -0.04 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.032 0.05 + vertex -0.04666667 -0.032 0.05 + vertex -0.04666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.032 0.05 + vertex -0.04 -0.032 0.05 + vertex -0.04 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.024 0.05 + vertex -0.04666667 -0.024 0.05 + vertex -0.04666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.024 0.05 + vertex -0.04 -0.024 0.05 + vertex -0.04 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.016 0.05 + vertex -0.04666667 -0.016 0.05 + vertex -0.04666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.016 0.05 + vertex -0.04 -0.016 0.05 + vertex -0.04 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.008 0.05 + vertex -0.04666667 -0.008 0.05 + vertex -0.04666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 -0.008 0.05 + vertex -0.04 -0.008 0.05 + vertex -0.04 5.782412e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 5.782412e-19 0.05 + vertex -0.04666667 0 0.05 + vertex -0.04666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.04 0.05 + vertex -0.03333333 -0.04 0.05 + vertex -0.03333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.032 0.05 + vertex -0.04 -0.032 0.05 + vertex -0.04 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.032 0.05 + vertex -0.03333333 -0.032 0.05 + vertex -0.03333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.024 0.05 + vertex -0.04 -0.024 0.05 + vertex -0.04 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.024 0.05 + vertex -0.03333333 -0.024 0.05 + vertex -0.03333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.016 0.05 + vertex -0.04 -0.016 0.05 + vertex -0.04 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.016 0.05 + vertex -0.03333333 -0.016 0.05 + vertex -0.03333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.008 0.05 + vertex -0.04 -0.008 0.05 + vertex -0.04 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.04 5.782412e-19 0.05 + vertex -0.04 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 -0.008 0.05 + vertex -0.03333333 -0.008 0.05 + vertex -0.03333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.04 0.05 + vertex -0.02666667 -0.04 0.05 + vertex -0.02666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.032 0.05 + vertex -0.03333333 -0.032 0.05 + vertex -0.03333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.032 0.05 + vertex -0.02666667 -0.032 0.05 + vertex -0.02666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.024 0.05 + vertex -0.03333333 -0.024 0.05 + vertex -0.03333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.024 0.05 + vertex -0.02666667 -0.024 0.05 + vertex -0.02666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.016 0.05 + vertex -0.03333333 -0.016 0.05 + vertex -0.03333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.016 0.05 + vertex -0.02666667 -0.016 0.05 + vertex -0.02666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.008 0.05 + vertex -0.03333333 -0.008 0.05 + vertex -0.03333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 -0.008 0.05 + vertex -0.02666667 -0.008 0.05 + vertex -0.02666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0 0.05 + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.03333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.04 0.05 + vertex -0.02 -0.04 0.05 + vertex -0.02 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.032 0.05 + vertex -0.02666667 -0.032 0.05 + vertex -0.02666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.032 0.05 + vertex -0.02 -0.032 0.05 + vertex -0.02 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.024 0.05 + vertex -0.02666667 -0.024 0.05 + vertex -0.02666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.024 0.05 + vertex -0.02 -0.024 0.05 + vertex -0.02 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.016 0.05 + vertex -0.02666667 -0.016 0.05 + vertex -0.02666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.016 0.05 + vertex -0.02 -0.016 0.05 + vertex -0.02 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.008 0.05 + vertex -0.02666667 -0.008 0.05 + vertex -0.02666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 -0.008 0.05 + vertex -0.02 -0.008 0.05 + vertex -0.02 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0 0.05 + vertex -0.02666667 0 0.05 + vertex -0.02666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.04 0.05 + vertex -0.01333333 -0.04 0.05 + vertex -0.01333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.032 0.05 + vertex -0.02 -0.032 0.05 + vertex -0.02 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.032 0.05 + vertex -0.01333333 -0.032 0.05 + vertex -0.01333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.024 0.05 + vertex -0.02 -0.024 0.05 + vertex -0.02 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.024 0.05 + vertex -0.01333333 -0.024 0.05 + vertex -0.01333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.016 0.05 + vertex -0.02 -0.016 0.05 + vertex -0.02 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.016 0.05 + vertex -0.01333333 -0.016 0.05 + vertex -0.01333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.008 0.05 + vertex -0.02 -0.008 0.05 + vertex -0.02 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 -0.008 0.05 + vertex -0.01333333 -0.008 0.05 + vertex -0.01333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0 0.05 + vertex -0.02 0 0.05 + vertex -0.02 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.04 0.05 + vertex -0.006666667 -0.04 0.05 + vertex -0.006666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.032 0.05 + vertex -0.01333333 -0.032 0.05 + vertex -0.01333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.032 0.05 + vertex -0.006666667 -0.032 0.05 + vertex -0.006666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.024 0.05 + vertex -0.01333333 -0.024 0.05 + vertex -0.01333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.024 0.05 + vertex -0.006666667 -0.024 0.05 + vertex -0.006666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.016 0.05 + vertex -0.01333333 -0.016 0.05 + vertex -0.01333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.016 0.05 + vertex -0.006666667 -0.016 0.05 + vertex -0.006666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.008 0.05 + vertex -0.01333333 -0.008 0.05 + vertex -0.01333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.008 0.05 + vertex -0.006666667 -0.008 0.05 + vertex -0.006666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0 0.05 + vertex -0.01333333 0 0.05 + vertex -0.01333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.04 0.05 + vertex 0 -0.04 0.05 + vertex 0 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.032 0.05 + vertex -0.006666667 -0.032 0.05 + vertex -0.006666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.032 0.05 + vertex 0 -0.032 0.05 + vertex 0 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.024 0.05 + vertex -0.006666667 -0.024 0.05 + vertex -0.006666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.024 0.05 + vertex 0 -0.024 0.05 + vertex 0 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.016 0.05 + vertex -0.006666667 -0.016 0.05 + vertex -0.006666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.016 0.05 + vertex 0 -0.016 0.05 + vertex 0 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.008 0.05 + vertex -0.006666667 -0.008 0.05 + vertex -0.006666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.008 0.05 + vertex 0 -0.008 0.05 + vertex 0 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0 0.05 + vertex -0.006666667 0 0.05 + vertex -0.006666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.04 0.05 + vertex 0.006666667 -0.04 0.05 + vertex 0.006666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.032 0.05 + vertex 0 -0.032 0.05 + vertex 0 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.032 0.05 + vertex 0.006666667 -0.032 0.05 + vertex 0.006666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.024 0.05 + vertex 0 -0.024 0.05 + vertex 0 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.024 0.05 + vertex 0.006666667 -0.024 0.05 + vertex 0.006666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.016 0.05 + vertex 0 -0.016 0.05 + vertex 0 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.016 0.05 + vertex 0.006666667 -0.016 0.05 + vertex 0.006666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.008 0.05 + vertex 0 -0.008 0.05 + vertex 0 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.008 0.05 + vertex 0.006666667 -0.008 0.05 + vertex 0.006666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0 0.05 + vertex 0 0 0.05 + vertex 0 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.04 0.05 + vertex 0.01333333 -0.04 0.05 + vertex 0.01333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.032 0.05 + vertex 0.006666667 -0.032 0.05 + vertex 0.006666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.032 0.05 + vertex 0.01333333 -0.032 0.05 + vertex 0.01333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.024 0.05 + vertex 0.006666667 -0.024 0.05 + vertex 0.006666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.024 0.05 + vertex 0.01333333 -0.024 0.05 + vertex 0.01333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.016 0.05 + vertex 0.006666667 -0.016 0.05 + vertex 0.006666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.016 0.05 + vertex 0.01333333 -0.016 0.05 + vertex 0.01333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.008 0.05 + vertex 0.006666667 -0.008 0.05 + vertex 0.006666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.008 0.05 + vertex 0.01333333 -0.008 0.05 + vertex 0.01333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0 0.05 + vertex 0.006666667 0 0.05 + vertex 0.006666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.04 0.05 + vertex 0.02 -0.04 0.05 + vertex 0.02 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.032 0.05 + vertex 0.01333333 -0.032 0.05 + vertex 0.01333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.032 0.05 + vertex 0.02 -0.032 0.05 + vertex 0.02 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.024 0.05 + vertex 0.01333333 -0.024 0.05 + vertex 0.01333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.024 0.05 + vertex 0.02 -0.024 0.05 + vertex 0.02 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.016 0.05 + vertex 0.01333333 -0.016 0.05 + vertex 0.01333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.016 0.05 + vertex 0.02 -0.016 0.05 + vertex 0.02 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.008 0.05 + vertex 0.01333333 -0.008 0.05 + vertex 0.01333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.008 0.05 + vertex 0.02 -0.008 0.05 + vertex 0.02 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0 0.05 + vertex 0.01333333 0 0.05 + vertex 0.01333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.04 0.05 + vertex 0.02666667 -0.04 0.05 + vertex 0.02666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.032 0.05 + vertex 0.02 -0.032 0.05 + vertex 0.02 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.032 0.05 + vertex 0.02666667 -0.032 0.05 + vertex 0.02666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.024 0.05 + vertex 0.02 -0.024 0.05 + vertex 0.02 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.024 0.05 + vertex 0.02666667 -0.024 0.05 + vertex 0.02666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.016 0.05 + vertex 0.02 -0.016 0.05 + vertex 0.02 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.016 0.05 + vertex 0.02666667 -0.016 0.05 + vertex 0.02666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.008 0.05 + vertex 0.02 -0.008 0.05 + vertex 0.02 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 -0.008 0.05 + vertex 0.02666667 -0.008 0.05 + vertex 0.02666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0 0.05 + vertex 0.02 0 0.05 + vertex 0.02 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.04 0.05 + vertex 0.03333333 -0.04 0.05 + vertex 0.03333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.032 0.05 + vertex 0.02666667 -0.032 0.05 + vertex 0.02666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.032 0.05 + vertex 0.03333333 -0.032 0.05 + vertex 0.03333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.024 0.05 + vertex 0.02666667 -0.024 0.05 + vertex 0.02666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.024 0.05 + vertex 0.03333333 -0.024 0.05 + vertex 0.03333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.016 0.05 + vertex 0.02666667 -0.016 0.05 + vertex 0.02666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.016 0.05 + vertex 0.03333333 -0.016 0.05 + vertex 0.03333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.008 0.05 + vertex 0.02666667 -0.008 0.05 + vertex 0.02666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 -0.008 0.05 + vertex 0.03333333 -0.008 0.05 + vertex 0.03333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0 0.05 + vertex 0.02666667 0 0.05 + vertex 0.02666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.04 0.05 + vertex 0.04 -0.04 0.05 + vertex 0.04 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.032 0.05 + vertex 0.03333333 -0.032 0.05 + vertex 0.03333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.032 0.05 + vertex 0.04 -0.032 0.05 + vertex 0.04 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.024 0.05 + vertex 0.03333333 -0.024 0.05 + vertex 0.03333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.024 0.05 + vertex 0.04 -0.024 0.05 + vertex 0.04 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.016 0.05 + vertex 0.03333333 -0.016 0.05 + vertex 0.03333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.016 0.05 + vertex 0.04 -0.016 0.05 + vertex 0.04 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.008 0.05 + vertex 0.03333333 -0.008 0.05 + vertex 0.03333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 -0.008 0.05 + vertex 0.04 -0.008 0.05 + vertex 0.04 -2.891206e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -2.891206e-19 0.05 + vertex 0.03333333 0 0.05 + vertex 0.03333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.04 0.05 + vertex 0.04666667 -0.04 0.05 + vertex 0.04666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.032 0.05 + vertex 0.04 -0.032 0.05 + vertex 0.04 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.032 0.05 + vertex 0.04666667 -0.032 0.05 + vertex 0.04666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.024 0.05 + vertex 0.04 -0.024 0.05 + vertex 0.04 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.024 0.05 + vertex 0.04666667 -0.024 0.05 + vertex 0.04666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.016 0.05 + vertex 0.04 -0.016 0.05 + vertex 0.04 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.016 0.05 + vertex 0.04666667 -0.016 0.05 + vertex 0.04666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.008 0.05 + vertex 0.04 -0.008 0.05 + vertex 0.04 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 -0.008 0.05 + vertex 0.04666667 -0.008 0.05 + vertex 0.04666667 2.891206e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.04 -2.891206e-19 0.05 + vertex 0.04 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.04 0.05 + vertex 0.05333333 -0.04 0.05 + vertex 0.05333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.032 0.05 + vertex 0.04666667 -0.032 0.05 + vertex 0.04666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.032 0.05 + vertex 0.05333333 -0.032 0.05 + vertex 0.05333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.024 0.05 + vertex 0.04666667 -0.024 0.05 + vertex 0.04666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.024 0.05 + vertex 0.05333333 -0.024 0.05 + vertex 0.05333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.016 0.05 + vertex 0.04666667 -0.016 0.05 + vertex 0.04666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.016 0.05 + vertex 0.05333333 -0.016 0.05 + vertex 0.05333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.008 0.05 + vertex 0.04666667 -0.008 0.05 + vertex 0.04666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 -0.008 0.05 + vertex 0.05333333 -0.008 0.05 + vertex 0.05333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0 0.05 + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.04666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.04 0.05 + vertex 0.06 -0.04 0.05 + vertex 0.06 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.032 0.05 + vertex 0.05333333 -0.032 0.05 + vertex 0.05333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.032 0.05 + vertex 0.06 -0.032 0.05 + vertex 0.06 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.024 0.05 + vertex 0.05333333 -0.024 0.05 + vertex 0.05333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.024 0.05 + vertex 0.06 -0.024 0.05 + vertex 0.06 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.016 0.05 + vertex 0.05333333 -0.016 0.05 + vertex 0.05333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.016 0.05 + vertex 0.06 -0.016 0.05 + vertex 0.06 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.008 0.05 + vertex 0.05333333 -0.008 0.05 + vertex 0.05333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 -0.008 0.05 + vertex 0.06 -0.008 0.05 + vertex 0.06 -2.891206e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -2.891206e-19 0.05 + vertex 0.05333333 0 0.05 + vertex 0.05333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.04 0.05 + vertex 0.06666667 -0.04 0.05 + vertex 0.06666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.032 0.05 + vertex 0.06 -0.032 0.05 + vertex 0.06 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.032 0.05 + vertex 0.06666667 -0.032 0.05 + vertex 0.06666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.024 0.05 + vertex 0.06 -0.024 0.05 + vertex 0.06 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.024 0.05 + vertex 0.06666667 -0.024 0.05 + vertex 0.06666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.016 0.05 + vertex 0.06 -0.016 0.05 + vertex 0.06 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.016 0.05 + vertex 0.06666667 -0.016 0.05 + vertex 0.06666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.008 0.05 + vertex 0.06 -0.008 0.05 + vertex 0.06 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 -0.008 0.05 + vertex 0.06666667 -0.008 0.05 + vertex 0.06666667 -4.336809e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.06 -2.891206e-19 0.05 + vertex 0.06 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.04 0.05 + vertex 0.07333333 -0.04 0.05 + vertex 0.07333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.032 0.05 + vertex 0.06666667 -0.032 0.05 + vertex 0.06666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.032 0.05 + vertex 0.07333333 -0.032 0.05 + vertex 0.07333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.024 0.05 + vertex 0.06666667 -0.024 0.05 + vertex 0.06666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.024 0.05 + vertex 0.07333333 -0.024 0.05 + vertex 0.07333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.016 0.05 + vertex 0.06666667 -0.016 0.05 + vertex 0.06666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.016 0.05 + vertex 0.07333333 -0.016 0.05 + vertex 0.07333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.008 0.05 + vertex 0.06666667 -0.008 0.05 + vertex 0.06666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 -0.008 0.05 + vertex 0.07333333 -0.008 0.05 + vertex 0.07333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.06666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.04 0.05 + vertex 0.08 -0.04 0.05 + vertex 0.08 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.032 0.05 + vertex 0.07333333 -0.032 0.05 + vertex 0.07333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.032 0.05 + vertex 0.08 -0.032 0.05 + vertex 0.08 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.024 0.05 + vertex 0.07333333 -0.024 0.05 + vertex 0.07333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.024 0.05 + vertex 0.08 -0.024 0.05 + vertex 0.08 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.016 0.05 + vertex 0.07333333 -0.016 0.05 + vertex 0.07333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.016 0.05 + vertex 0.08 -0.016 0.05 + vertex 0.08 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.008 0.05 + vertex 0.07333333 -0.008 0.05 + vertex 0.07333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 -0.008 0.05 + vertex 0.08 -0.008 0.05 + vertex 0.08 4.336809e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 4.336809e-19 0.05 + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.07333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.04 0.05 + vertex 0.08666667 -0.04 0.05 + vertex 0.08666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.032 0.05 + vertex 0.08 -0.032 0.05 + vertex 0.08 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.032 0.05 + vertex 0.08666667 -0.032 0.05 + vertex 0.08666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.024 0.05 + vertex 0.08 -0.024 0.05 + vertex 0.08 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.024 0.05 + vertex 0.08666667 -0.024 0.05 + vertex 0.08666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.016 0.05 + vertex 0.08 -0.016 0.05 + vertex 0.08 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.016 0.05 + vertex 0.08666667 -0.016 0.05 + vertex 0.08666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.008 0.05 + vertex 0.08 -0.008 0.05 + vertex 0.08 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 -0.008 0.05 + vertex 0.08666667 -0.008 0.05 + vertex 0.08666667 2.891206e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.08 4.336809e-19 0.05 + vertex 0.08 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.04 0.05 + vertex 0.09333333 -0.04 0.05 + vertex 0.09333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.032 0.05 + vertex 0.08666667 -0.032 0.05 + vertex 0.08666667 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.032 0.05 + vertex 0.09333333 -0.032 0.05 + vertex 0.09333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.024 0.05 + vertex 0.08666667 -0.024 0.05 + vertex 0.08666667 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.024 0.05 + vertex 0.09333333 -0.024 0.05 + vertex 0.09333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.016 0.05 + vertex 0.08666667 -0.016 0.05 + vertex 0.08666667 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.016 0.05 + vertex 0.09333333 -0.016 0.05 + vertex 0.09333333 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.008 0.05 + vertex 0.08666667 -0.008 0.05 + vertex 0.08666667 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 -0.008 0.05 + vertex 0.09333333 -0.008 0.05 + vertex 0.09333333 1.445603e-19 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.08666667 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.04 0.05 + vertex 0.1 -0.04 0.05 + vertex 0.1 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 -0.032 0.05 + vertex 0.09333333 -0.032 0.05 + vertex 0.09333333 -0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.032 0.05 + vertex 0.1 -0.032 0.05 + vertex 0.1 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 -0.024 0.05 + vertex 0.09333333 -0.024 0.05 + vertex 0.09333333 -0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.024 0.05 + vertex 0.1 -0.024 0.05 + vertex 0.1 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 -0.016 0.05 + vertex 0.09333333 -0.016 0.05 + vertex 0.09333333 -0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.016 0.05 + vertex 0.1 -0.016 0.05 + vertex 0.1 -0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 -0.008 0.05 + vertex 0.09333333 -0.008 0.05 + vertex 0.09333333 -0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 -0.008 0.05 + vertex 0.1 -0.008 0.05 + vertex 0.1 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 0 0.05 + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.09333333 -0.008 0.05 + endloop + endfacet +endsolid maxZ +solid bottomAir_to_rightSolid + facet normal 8.673614e-17 1 -0 + outer loop + vertex 0.01333333 0 -0.05 + vertex 0.01333333 0 -0.04 + vertex 0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 1 5.782412e-17 + outer loop + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.02 0 -0.05 + vertex 0.01333333 0 -0.05 + endloop + endfacet + facet normal -8.673614e-17 1 5.782412e-17 + outer loop + vertex 0.02 0 -0.05 + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.02666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.04 + vertex 0.02666667 0 -0.05 + vertex 0.02 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.05 + vertex 0.02666667 0 -0.04 + vertex 0.03333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 -0.04 + vertex 0.03333333 0 -0.05 + vertex 0.02666667 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 -0.05 + vertex 0.03333333 0 -0.04 + vertex 0.04 0 -0.04 + endloop + endfacet + facet normal 4.336807e-17 1 -2.891206e-17 + outer loop + vertex 0.04 0 -0.04 + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.03333333 0 -0.05 + endloop + endfacet + facet normal -4.336807e-17 1 -2.891206e-17 + outer loop + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.04 0 -0.04 + vertex 0.04666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.04 -2.891206e-19 -0.05 + endloop + endfacet + facet normal 4.336813e-17 1 -0 + outer loop + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.05333333 0 -0.04 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 -0.04 + vertex 0.05333333 0 -0.05 + vertex 0.04666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 -0.05 + vertex 0.05333333 0 -0.04 + vertex 0.06 -2.891206e-19 -0.04 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.05333333 0 -0.05 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.04 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.06 -2.891206e-19 -0.05 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.06666667 -4.336809e-19 -0.05 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.08 4.336809e-19 -0.04 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 -0.04 + vertex 0.08 4.336809e-19 -0.05 + vertex 0.07333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 -0.05 + vertex 0.08 4.336809e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.08 4.336809e-19 -0.05 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.09333333 1.445603e-19 -0.04 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.08666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.1 0 -0.04 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 -0.04 + vertex 0.1 0 -0.05 + vertex 0.09333333 1.445603e-19 -0.05 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0 -0.03 + vertex 0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.01333333 0 -0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.02666667 0 -0.03 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.02666667 0 -0.03 + vertex 0.02666667 0 -0.04 + vertex 0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.04 + vertex 0.02666667 0 -0.03 + vertex 0.03333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 -0.03 + vertex 0.03333333 0 -0.04 + vertex 0.02666667 0 -0.04 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 -0.04 + vertex 0.03333333 0 -0.03 + vertex 0.04 -2.891206e-19 -0.03 + endloop + endfacet + facet normal 0 1 2.891206e-17 + outer loop + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.04 0 -0.04 + vertex 0.03333333 0 -0.04 + endloop + endfacet + facet normal 0 1 2.891206e-17 + outer loop + vertex 0.04 0 -0.04 + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.04666667 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -4.336807e-17 1 5.782412e-17 + outer loop + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.04 0 -0.04 + endloop + endfacet + facet normal -8.673627e-17 1 5.782412e-17 + outer loop + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.05333333 2.891206e-19 -0.03 + endloop + endfacet + facet normal 4.336813e-17 1 -2.891206e-17 + outer loop + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.05333333 0 -0.04 + vertex 0.04666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal 8.673614e-17 1 -2.891206e-17 + outer loop + vertex 0.05333333 0 -0.04 + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.03 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.05333333 0 -0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.03 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.06 -2.891206e-19 -0.04 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.04 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.08 4.336809e-19 -0.03 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 -0.03 + vertex 0.08 4.336809e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 -0.04 + vertex 0.08 4.336809e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.03 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.08 4.336809e-19 -0.04 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.09333333 1.445603e-19 -0.03 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.1 0 -0.03 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 -0.03 + vertex 0.1 0 -0.04 + vertex 0.09333333 1.445603e-19 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0 -0.02 + vertex 0.02 0 -0.02 + endloop + endfacet + facet normal 8.673614e-17 1 -5.782412e-17 + outer loop + vertex 0.02 0 -0.02 + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.01333333 0 -0.03 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.02 0 -0.02 + vertex 0.02666667 0 -0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.02666667 0 -0.02 + vertex 0.02666667 0 -0.03 + vertex 0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.03 + vertex 0.02666667 0 -0.02 + vertex 0.03333333 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 -0.02 + vertex 0.03333333 0 -0.03 + vertex 0.02666667 0 -0.03 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 -0.03 + vertex 0.03333333 0 -0.02 + vertex 0.04 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.03333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.04666667 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.04 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -4.336813e-17 1 0 + outer loop + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.05333333 0 -0.02 + endloop + endfacet + facet normal -8.673627e-17 1 2.891206e-17 + outer loop + vertex 0.05333333 0 -0.02 + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.04666667 -2.891206e-19 -0.03 + endloop + endfacet + facet normal 4.336807e-17 1 2.891206e-17 + outer loop + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.05333333 0 -0.02 + vertex 0.06 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.05333333 2.891206e-19 -0.03 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.02 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.03 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.03 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.08 4.336809e-19 -0.02 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 -0.02 + vertex 0.08 4.336809e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 -0.03 + vertex 0.08 4.336809e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.02 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.08 4.336809e-19 -0.03 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.09333333 1.445603e-19 -0.02 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.03 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.1 0 -0.02 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 -0.02 + vertex 0.1 0 -0.03 + vertex 0.09333333 1.445603e-19 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0 -0.01 + vertex 0.02 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 -0.01 + vertex 0.02 0 -0.02 + vertex 0.01333333 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 -0.02 + vertex 0.02 0 -0.01 + vertex 0.02666667 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.01 + vertex 0.02666667 0 -0.02 + vertex 0.02 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.02 + vertex 0.02666667 0 -0.01 + vertex 0.03333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 -0.01 + vertex 0.03333333 0 -0.02 + vertex 0.02666667 0 -0.02 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 -0.02 + vertex 0.03333333 0 -0.01 + vertex 0.04 -2.891206e-19 -0.01 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.03333333 0 -0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.04666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.04 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 4.336813e-17 1 -5.782412e-17 + outer loop + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.05333333 0 -0.01 + endloop + endfacet + facet normal -4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 -0.01 + vertex 0.05333333 0 -0.02 + vertex 0.04666667 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 -0.02 + vertex 0.05333333 0 -0.01 + vertex 0.06 -2.891206e-19 -0.01 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.05333333 0 -0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.06666667 -4.336809e-19 -0.01 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.06 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.02 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.08 4.336809e-19 -0.01 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 -0.01 + vertex 0.08 4.336809e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 -0.02 + vertex 0.08 4.336809e-19 -0.01 + vertex 0.08666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.08 4.336809e-19 -0.02 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.09333333 1.445603e-19 -0.01 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.1 0 -0.01 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 -0.01 + vertex 0.1 0 -0.02 + vertex 0.09333333 1.445603e-19 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0 0 + vertex 0.02 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0 + vertex 0.02 0 -0.01 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 -0.01 + vertex 0.02 0 0 + vertex 0.02666667 0 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 5.782412e-19 + vertex 0.02666667 0 -0.01 + vertex 0.02 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 -0.01 + vertex 0.02666667 0 5.782412e-19 + vertex 0.03333333 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 0 + vertex 0.03333333 0 -0.01 + vertex 0.02666667 0 -0.01 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 -0.01 + vertex 0.03333333 0 0 + vertex 0.04 -2.891206e-19 -5.782412e-19 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.03333333 0 -0.01 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.04666667 2.891206e-19 0 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04666667 2.891206e-19 0 + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.04 -2.891206e-19 -0.01 + endloop + endfacet + facet normal 4.336813e-17 1 -0 + outer loop + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.04666667 2.891206e-19 0 + vertex 0.05333333 0 -2.891206e-19 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 -2.891206e-19 + vertex 0.05333333 0 -0.01 + vertex 0.04666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 -0.01 + vertex 0.05333333 0 -2.891206e-19 + vertex 0.06 -2.891206e-19 5.782412e-19 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.05333333 0 -0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.06666667 -4.336809e-19 0 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0 + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.06 -2.891206e-19 -0.01 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.06666667 -4.336809e-19 0 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.06666667 -4.336809e-19 -0.01 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.08 4.336809e-19 2.891206e-19 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.08 4.336809e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 -0.01 + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.08 4.336809e-19 -0.01 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.09333333 1.445603e-19 4.698209e-19 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.08666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.1 0 0 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 0 + vertex 0.1 0 -0.01 + vertex 0.09333333 1.445603e-19 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0 + vertex 0.01333333 0 0.01 + vertex 0.02 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.01 + vertex 0.02 0 0 + vertex 0.01333333 0 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.02 0 0.01 + vertex 0.02666667 0 0.01 + vertex 0.02666667 0 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 5.782412e-19 + vertex 0.02 0 0 + vertex 0.02 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 5.782412e-19 + vertex 0.02666667 0 0.01 + vertex 0.03333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 0.01 + vertex 0.03333333 0 0 + vertex 0.02666667 0 5.782412e-19 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 0 + vertex 0.03333333 0 0.01 + vertex 0.04 -2.891206e-19 0.01 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.01 + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.03333333 0 0 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.01 + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.04666667 2.891206e-19 0 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04666667 2.891206e-19 0 + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.04 -2.891206e-19 0.01 + endloop + endfacet + facet normal 4.336813e-17 1 -0 + outer loop + vertex 0.04666667 2.891206e-19 0 + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.05333333 0 0.01 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 0.01 + vertex 0.05333333 0 -2.891206e-19 + vertex 0.04666667 2.891206e-19 0 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.05333333 0 0.01 + vertex 0.06 -2.891206e-19 0.01 + vertex 0.06 -2.891206e-19 5.782412e-19 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.05333333 0 -2.891206e-19 + vertex 0.05333333 0 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.06 -2.891206e-19 0.01 + vertex 0.06666667 -4.336809e-19 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.06666667 -4.336809e-19 0 + vertex 0.06 -2.891206e-19 5.782412e-19 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.06666667 -4.336809e-19 0 + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.07333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.06666667 -4.336809e-19 0 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.08 4.336809e-19 0.01 + vertex 0.08 4.336809e-19 2.891206e-19 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.07333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.08 4.336809e-19 0.01 + vertex 0.08666667 2.891206e-19 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.08 4.336809e-19 2.891206e-19 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.09333333 1.445603e-19 4.698209e-19 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.08666667 2.891206e-19 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.1 0 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 0.01 + vertex 0.1 0 0 + vertex 0.09333333 1.445603e-19 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.01333333 0 0.02 + vertex 0.02 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.02 + vertex 0.02 0 0.01 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.01 + vertex 0.02 0 0.02 + vertex 0.02666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.02 + vertex 0.02666667 0 0.01 + vertex 0.02 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.01 + vertex 0.02666667 0 0.02 + vertex 0.03333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 0.02 + vertex 0.03333333 0 0.01 + vertex 0.02666667 0 0.01 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 0.01 + vertex 0.03333333 0 0.02 + vertex 0.04 -2.891206e-19 0.02 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.02 + vertex 0.04 -2.891206e-19 0.01 + vertex 0.03333333 0 0.01 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.01 + vertex 0.04 -2.891206e-19 0.02 + vertex 0.04666667 2.891206e-19 0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.04 -2.891206e-19 0.01 + endloop + endfacet + facet normal 4.336813e-17 1 -0 + outer loop + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.05333333 0 0.02 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 0.02 + vertex 0.05333333 0 0.01 + vertex 0.04666667 2.891206e-19 0.01 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 0.01 + vertex 0.05333333 0 0.02 + vertex 0.06 -2.891206e-19 0.02 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 0.02 + vertex 0.06 -2.891206e-19 0.01 + vertex 0.05333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 -2.891206e-19 0.01 + vertex 0.06 -2.891206e-19 0.02 + vertex 0.06666667 -2.891206e-19 0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -1.445603e-17 + outer loop + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.06 -2.891206e-19 0.01 + endloop + endfacet + facet normal 4.336813e-17 1 -1.445603e-17 + outer loop + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.06666667 -4.336809e-19 0.01 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.08 4.336809e-19 0.02 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 0.02 + vertex 0.08 4.336809e-19 0.01 + vertex 0.07333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 0.01 + vertex 0.08 4.336809e-19 0.02 + vertex 0.08666667 2.891206e-19 0.02 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.08 4.336809e-19 0.01 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.09333333 1.445603e-19 0.02 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.08666667 2.891206e-19 0.01 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.1 0 0.02 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 0.02 + vertex 0.1 0 0.01 + vertex 0.09333333 1.445603e-19 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.02 + vertex 0.01333333 0 0.03 + vertex 0.02 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.03 + vertex 0.02 0 0.02 + vertex 0.01333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.02 + vertex 0.02 0 0.03 + vertex 0.02666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.03 + vertex 0.02666667 0 0.02 + vertex 0.02 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.02 + vertex 0.02666667 0 0.03 + vertex 0.03333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 0.03 + vertex 0.03333333 0 0.02 + vertex 0.02666667 0 0.02 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 0.02 + vertex 0.03333333 0 0.03 + vertex 0.04 -2.891206e-19 0.03 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.03 + vertex 0.04 -2.891206e-19 0.02 + vertex 0.03333333 0 0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.02 + vertex 0.04 -2.891206e-19 0.03 + vertex 0.04666667 2.891206e-19 0.03 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.04 -2.891206e-19 0.02 + endloop + endfacet + facet normal 4.336813e-17 1 -0 + outer loop + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.05333333 0 0.03 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 0.03 + vertex 0.05333333 0 0.02 + vertex 0.04666667 2.891206e-19 0.02 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 0.02 + vertex 0.05333333 0 0.03 + vertex 0.06 -2.891206e-19 0.03 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 0.03 + vertex 0.06 -2.891206e-19 0.02 + vertex 0.05333333 0 0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 0.02 + vertex 0.06 -2.891206e-19 0.03 + vertex 0.06666667 -4.336809e-19 0.03 + endloop + endfacet + facet normal 0 1 1.445603e-17 + outer loop + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.06 -2.891206e-19 0.02 + endloop + endfacet + facet normal 2.168407e-17 1 1.445603e-17 + outer loop + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.06666667 -2.891206e-19 0.02 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.08 4.336809e-19 0.03 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 0.03 + vertex 0.08 4.336809e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 0.02 + vertex 0.08 4.336809e-19 0.03 + vertex 0.08666667 2.891206e-19 0.03 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.08 4.336809e-19 0.02 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.09333333 1.445603e-19 0.03 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.08666667 2.891206e-19 0.02 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.1 0 0.03 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 0.03 + vertex 0.1 0 0.02 + vertex 0.09333333 1.445603e-19 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.03 + vertex 0.01333333 0 0.04 + vertex 0.02 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.04 + vertex 0.02 0 0.03 + vertex 0.01333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.03 + vertex 0.02 0 0.04 + vertex 0.02666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.04 + vertex 0.02666667 0 0.03 + vertex 0.02 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.03 + vertex 0.02666667 0 0.04 + vertex 0.03333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 0.04 + vertex 0.03333333 0 0.03 + vertex 0.02666667 0 0.03 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 0.03 + vertex 0.03333333 0 0.04 + vertex 0.04 -2.891206e-19 0.04 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.04 + vertex 0.04 -2.891206e-19 0.03 + vertex 0.03333333 0 0.03 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.04 -2.891206e-19 0.03 + vertex 0.04 -2.891206e-19 0.04 + vertex 0.04666667 -5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673614e-17 1 8.673618e-17 + outer loop + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.04 -2.891206e-19 0.03 + endloop + endfacet + facet normal -8.673627e-17 1 8.673618e-17 + outer loop + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.05333333 0 0.04 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.05333333 0 0.04 + vertex 0.05333333 0 0.03 + vertex 0.04666667 2.891206e-19 0.03 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 0.03 + vertex 0.05333333 0 0.04 + vertex 0.06 -2.891206e-19 0.04 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 0.04 + vertex 0.06 -2.891206e-19 0.03 + vertex 0.05333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 -2.891206e-19 0.03 + vertex 0.06 -2.891206e-19 0.04 + vertex 0.06666667 -2.891206e-19 0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -1.445603e-17 + outer loop + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.06 -2.891206e-19 0.03 + endloop + endfacet + facet normal 4.336813e-17 1 -1.445603e-17 + outer loop + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.06666667 -4.336809e-19 0.03 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.08 4.336809e-19 0.04 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 0.04 + vertex 0.08 4.336809e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 0.03 + vertex 0.08 4.336809e-19 0.04 + vertex 0.08666667 2.891206e-19 0.04 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.08 4.336809e-19 0.03 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.09333333 1.445603e-19 0.04 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.08666667 2.891206e-19 0.03 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.1 0 0.04 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 0.04 + vertex 0.1 0 0.03 + vertex 0.09333333 1.445603e-19 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.04 + vertex 0.01333333 0 0.05 + vertex 0.02 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.05 + vertex 0.02 0 0.04 + vertex 0.01333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0 0.04 + vertex 0.02 0 0.05 + vertex 0.02666667 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.05 + vertex 0.02666667 0 0.04 + vertex 0.02 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0 0.04 + vertex 0.02666667 0 0.05 + vertex 0.03333333 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0 0.05 + vertex 0.03333333 0 0.04 + vertex 0.02666667 0 0.04 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.03333333 0 0.04 + vertex 0.03333333 0 0.05 + vertex 0.04 -2.891206e-19 0.05 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.05 + vertex 0.04 -2.891206e-19 0.04 + vertex 0.03333333 0 0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex 0.04 -2.891206e-19 0.04 + vertex 0.04 -2.891206e-19 0.05 + vertex 0.04666667 2.891206e-19 0.05 + endloop + endfacet + facet normal 4.336807e-17 1 -8.673618e-17 + outer loop + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.04 -2.891206e-19 0.04 + endloop + endfacet + facet normal 4.336813e-17 1 -8.673618e-17 + outer loop + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.05333333 0 0.05 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex 0.05333333 0 0.05 + vertex 0.05333333 0 0.04 + vertex 0.04666667 -5.782412e-19 0.04 + endloop + endfacet + facet normal 4.336807e-17 1 -0 + outer loop + vertex 0.05333333 0 0.04 + vertex 0.05333333 0 0.05 + vertex 0.06 -2.891206e-19 0.05 + endloop + endfacet + facet normal 4.336807e-17 1 0 + outer loop + vertex 0.06 -2.891206e-19 0.05 + vertex 0.06 -2.891206e-19 0.04 + vertex 0.05333333 0 0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.06 -2.891206e-19 0.04 + vertex 0.06 -2.891206e-19 0.05 + vertex 0.06666667 -4.336809e-19 0.05 + endloop + endfacet + facet normal 0 1 1.445603e-17 + outer loop + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.06 -2.891206e-19 0.04 + endloop + endfacet + facet normal 2.168407e-17 1 1.445603e-17 + outer loop + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.07333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal 4.336813e-17 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.06666667 -2.891206e-19 0.04 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.08 4.336809e-19 0.05 + endloop + endfacet + facet normal -1.517882e-16 1 0 + outer loop + vertex 0.08 4.336809e-19 0.05 + vertex 0.08 4.336809e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.08 4.336809e-19 0.04 + vertex 0.08 4.336809e-19 0.05 + vertex 0.08666667 2.891206e-19 0.05 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.08 4.336809e-19 0.04 + endloop + endfacet + facet normal 2.168407e-17 1 -0 + outer loop + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.09333333 1.445603e-19 0.05 + endloop + endfacet + facet normal 2.168407e-17 1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.08666667 2.891206e-19 0.04 + endloop + endfacet + facet normal 2.168403e-17 1 -0 + outer loop + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.1 0 0.05 + endloop + endfacet + facet normal 2.168403e-17 1 0 + outer loop + vertex 0.1 0 0.05 + vertex 0.1 0 0.04 + vertex 0.09333333 1.445603e-19 0.04 + endloop + endfacet +endsolid bottomAir_to_rightSolid +solid bottomAir_to_leftSolid + facet normal 0 1 0 + outer loop + vertex -0.1 0 -0.05 + vertex -0.1 0 -0.04 + vertex -0.09333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.04 + vertex -0.09333333 0 -0.05 + vertex -0.1 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.05 + vertex -0.09333333 0 -0.04 + vertex -0.08666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.04 + vertex -0.08666667 0 -0.05 + vertex -0.09333333 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.05 + vertex -0.08666667 0 -0.04 + vertex -0.08 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 -0.04 + vertex -0.08 0 -0.05 + vertex -0.08666667 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 -0.05 + vertex -0.08 0 -0.04 + vertex -0.07333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.04 + vertex -0.07333333 0 -0.05 + vertex -0.08 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.05 + vertex -0.07333333 0 -0.04 + vertex -0.06666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.04 + vertex -0.06666667 0 -0.05 + vertex -0.07333333 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.05 + vertex -0.06666667 0 -0.04 + vertex -0.06 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 -0.04 + vertex -0.06 0 -0.05 + vertex -0.06666667 0 -0.05 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 -0.05 + vertex -0.06 0 -0.04 + vertex -0.05333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.06 0 -0.05 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.04666667 0 -0.04 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 -0.04 + vertex -0.04666667 0 -0.05 + vertex -0.05333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0 -0.05 + vertex -0.04666667 0 -0.04 + vertex -0.04 0 -0.04 + endloop + endfacet + facet normal -8.673614e-17 1 5.782412e-17 + outer loop + vertex -0.04 0 -0.04 + vertex -0.04 5.782412e-19 -0.05 + vertex -0.04666667 0 -0.05 + endloop + endfacet + facet normal 8.673614e-17 1 5.782412e-17 + outer loop + vertex -0.04 5.782412e-19 -0.05 + vertex -0.04 0 -0.04 + vertex -0.03333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.04 5.782412e-19 -0.05 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.02666667 0 -0.04 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.02666667 0 -0.04 + vertex -0.02666667 0 -0.05 + vertex -0.03333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.02666667 0 -0.05 + vertex -0.02666667 0 -0.04 + vertex -0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 1 5.782412e-17 + outer loop + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.02 0 -0.05 + vertex -0.02666667 0 -0.05 + endloop + endfacet + facet normal -8.673614e-17 1 5.782412e-17 + outer loop + vertex -0.02 0 -0.05 + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.01333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0 -0.05 + vertex -0.02 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 -0.04 + vertex -0.1 0 -0.03 + vertex -0.09333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.03 + vertex -0.09333333 0 -0.04 + vertex -0.1 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.04 + vertex -0.09333333 0 -0.03 + vertex -0.08666667 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.03 + vertex -0.08666667 0 -0.04 + vertex -0.09333333 0 -0.04 + endloop + endfacet + facet normal -1.734722e-16 1 0 + outer loop + vertex -0.08666667 0 -0.04 + vertex -0.08666667 0 -0.03 + vertex -0.08 1.156482e-18 -0.03 + endloop + endfacet + facet normal 0 1 -1.156482e-16 + outer loop + vertex -0.08 1.156482e-18 -0.03 + vertex -0.08 0 -0.04 + vertex -0.08666667 0 -0.04 + endloop + endfacet + facet normal 1.734722e-16 1 -1.156482e-16 + outer loop + vertex -0.08 0 -0.04 + vertex -0.08 1.156482e-18 -0.03 + vertex -0.07333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.03 + vertex -0.07333333 0 -0.04 + vertex -0.08 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.04 + vertex -0.07333333 0 -0.03 + vertex -0.06666667 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.03 + vertex -0.06666667 0 -0.04 + vertex -0.07333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.04 + vertex -0.06666667 0 -0.03 + vertex -0.06 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 -0.03 + vertex -0.06 0 -0.04 + vertex -0.06666667 0 -0.04 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 -0.04 + vertex -0.06 0 -0.03 + vertex -0.05333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.06 0 -0.04 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.04666667 0 -0.03 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 -0.03 + vertex -0.04666667 0 -0.04 + vertex -0.05333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 -0.04 + vertex -0.04666667 0 -0.03 + vertex -0.04 5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex -0.04 5.782412e-19 -0.03 + vertex -0.04 0 -0.04 + vertex -0.04666667 0 -0.04 + endloop + endfacet + facet normal 1.734723e-16 1 -5.782412e-17 + outer loop + vertex -0.04 0 -0.04 + vertex -0.04 5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.04 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.02666667 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -8.673627e-17 1 5.782412e-17 + outer loop + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.02666667 0 -0.04 + vertex -0.03333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 1 5.782412e-17 + outer loop + vertex -0.02666667 0 -0.04 + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.02666667 0 -0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.01333333 0 -0.03 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0 -0.04 + vertex -0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 -0.03 + vertex -0.1 0 -0.02 + vertex -0.09333333 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.02 + vertex -0.09333333 0 -0.03 + vertex -0.1 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.03 + vertex -0.09333333 0 -0.02 + vertex -0.08666667 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.02 + vertex -0.08666667 0 -0.03 + vertex -0.09333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.03 + vertex -0.08666667 0 -0.02 + vertex -0.08 0 -0.02 + endloop + endfacet + facet normal -1.734722e-16 1 1.156482e-16 + outer loop + vertex -0.08 0 -0.02 + vertex -0.08 1.156482e-18 -0.03 + vertex -0.08666667 0 -0.03 + endloop + endfacet + facet normal 0 1 1.156482e-16 + outer loop + vertex -0.08 1.156482e-18 -0.03 + vertex -0.08 0 -0.02 + vertex -0.07333333 0 -0.02 + endloop + endfacet + facet normal 1.734722e-16 1 0 + outer loop + vertex -0.07333333 0 -0.02 + vertex -0.07333333 0 -0.03 + vertex -0.08 1.156482e-18 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.03 + vertex -0.07333333 0 -0.02 + vertex -0.06666667 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.02 + vertex -0.06666667 0 -0.03 + vertex -0.07333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.03 + vertex -0.06666667 0 -0.02 + vertex -0.06 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 -0.02 + vertex -0.06 0 -0.03 + vertex -0.06666667 0 -0.03 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 -0.03 + vertex -0.06 0 -0.02 + vertex -0.05333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.06 0 -0.03 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.04666667 0 -0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 -0.02 + vertex -0.04666667 0 -0.03 + vertex -0.05333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 -0.03 + vertex -0.04666667 0 -0.02 + vertex -0.04 5.782412e-19 -0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 -0.02 + vertex -0.04 5.782412e-19 -0.03 + vertex -0.04666667 0 -0.03 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 -0.03 + vertex -0.04 5.782412e-19 -0.02 + vertex -0.03333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.04 5.782412e-19 -0.03 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.02666667 0 -0.02 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex -0.02666667 0 -0.02 + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.02666667 0 -0.02 + vertex -0.02 0 -0.02 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex -0.02 0 -0.02 + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.02666667 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 1 -5.782412e-17 + outer loop + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.02 0 -0.02 + vertex -0.01333333 0 -0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0 -0.03 + vertex -0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 -0.02 + vertex -0.1 0 -0.01 + vertex -0.09333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.01 + vertex -0.09333333 0 -0.02 + vertex -0.1 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.02 + vertex -0.09333333 0 -0.01 + vertex -0.08666667 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.01 + vertex -0.08666667 0 -0.02 + vertex -0.09333333 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 -0.02 + vertex -0.08666667 0 -0.01 + vertex -0.08 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 -0.01 + vertex -0.08 0 -0.02 + vertex -0.08666667 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 -0.02 + vertex -0.08 0 -0.01 + vertex -0.07333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.01 + vertex -0.07333333 0 -0.02 + vertex -0.08 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.02 + vertex -0.07333333 0 -0.01 + vertex -0.06666667 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.01 + vertex -0.06666667 0 -0.02 + vertex -0.07333333 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.02 + vertex -0.06666667 0 -0.01 + vertex -0.06 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 -0.01 + vertex -0.06 0 -0.02 + vertex -0.06666667 0 -0.02 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 -0.02 + vertex -0.06 0 -0.01 + vertex -0.05333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.06 0 -0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.04666667 0 -0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 -0.01 + vertex -0.04666667 0 -0.02 + vertex -0.05333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 -0.02 + vertex -0.04666667 0 -0.01 + vertex -0.04 5.782412e-19 -0.01 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 -0.01 + vertex -0.04 5.782412e-19 -0.02 + vertex -0.04666667 0 -0.02 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 -0.02 + vertex -0.04 5.782412e-19 -0.01 + vertex -0.03333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.04 5.782412e-19 -0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.02666667 0 -0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.02666667 0 -0.01 + vertex -0.02666667 0 -0.02 + vertex -0.03333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0 -0.02 + vertex -0.02666667 0 -0.01 + vertex -0.02 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 -0.01 + vertex -0.02 0 -0.02 + vertex -0.02666667 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 -0.02 + vertex -0.02 0 -0.01 + vertex -0.01333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0 -0.02 + vertex -0.02 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 -0.01 + vertex -0.1 0 0 + vertex -0.09333333 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0 + vertex -0.09333333 0 -0.01 + vertex -0.1 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 -0.01 + vertex -0.09333333 0 0 + vertex -0.08666667 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0 + vertex -0.08666667 0 -0.01 + vertex -0.09333333 0 -0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.08666667 0 0 + vertex -0.08 0 1.156482e-18 + vertex -0.08 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 -0.01 + vertex -0.08666667 0 -0.01 + vertex -0.08666667 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0 + vertex -0.07333333 0 -0.01 + vertex -0.08 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 -0.01 + vertex -0.08 0 1.156482e-18 + vertex -0.07333333 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 -0.01 + vertex -0.07333333 0 0 + vertex -0.06666667 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0 + vertex -0.06666667 0 -0.01 + vertex -0.07333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 -0.01 + vertex -0.06666667 0 0 + vertex -0.06 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 0 + vertex -0.06 0 -0.01 + vertex -0.06666667 0 -0.01 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 -0.01 + vertex -0.06 0 0 + vertex -0.05333333 -5.782412e-19 0 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0 + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.06 0 -0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.05333333 -5.782412e-19 0 + vertex -0.04666667 0 0 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 0 + vertex -0.04666667 0 -0.01 + vertex -0.05333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 -0.01 + vertex -0.04666667 0 0 + vertex -0.04 5.782412e-19 0 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 0 + vertex -0.04 5.782412e-19 -0.01 + vertex -0.04666667 0 -0.01 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 -0.01 + vertex -0.04 5.782412e-19 0 + vertex -0.03333333 -5.782412e-19 0 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0 + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.04 5.782412e-19 -0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.03333333 -5.782412e-19 0 + vertex -0.02666667 0 0 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.02666667 0 0 + vertex -0.02666667 0 -0.01 + vertex -0.03333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0 -0.01 + vertex -0.02666667 0 0 + vertex -0.02 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0 + vertex -0.02 0 -0.01 + vertex -0.02666667 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 -0.01 + vertex -0.02 0 0 + vertex -0.01333333 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0 + vertex -0.01333333 0 -0.01 + vertex -0.02 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 0 + vertex -0.1 0 0.01 + vertex -0.09333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.01 + vertex -0.09333333 0 0 + vertex -0.1 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0 + vertex -0.09333333 0 0.01 + vertex -0.08666667 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.01 + vertex -0.08666667 0 0 + vertex -0.09333333 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 1.156482e-18 + vertex -0.08666667 0 0 + vertex -0.08666667 0 0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.08666667 0 0.01 + vertex -0.08 0 0.01 + vertex -0.08 0 1.156482e-18 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 1.156482e-18 + vertex -0.08 0 0.01 + vertex -0.07333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.01 + vertex -0.07333333 0 0 + vertex -0.08 0 1.156482e-18 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0 + vertex -0.07333333 0 0.01 + vertex -0.06666667 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.01 + vertex -0.06666667 0 0 + vertex -0.07333333 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0 + vertex -0.06666667 0 0.01 + vertex -0.06 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 0.01 + vertex -0.06 0 0 + vertex -0.06666667 0 0 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 0 + vertex -0.06 0 0.01 + vertex -0.05333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.05333333 -5.782412e-19 0 + vertex -0.06 0 0 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0 + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.04666667 0 0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 0.01 + vertex -0.04666667 0 0 + vertex -0.05333333 -5.782412e-19 0 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 0 + vertex -0.04666667 0 0.01 + vertex -0.04 5.782412e-19 0.01 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 0.01 + vertex -0.04 5.782412e-19 0 + vertex -0.04666667 0 0 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 0 + vertex -0.04 5.782412e-19 0.01 + vertex -0.03333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.03333333 -5.782412e-19 0 + vertex -0.04 5.782412e-19 0 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0 + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.02666667 0 0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.02666667 0 0.01 + vertex -0.02666667 0 0 + vertex -0.03333333 -5.782412e-19 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0 0 + vertex -0.02666667 0 0.01 + vertex -0.02 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.01 + vertex -0.02 0 0 + vertex -0.02666667 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0 + vertex -0.02 0 0.01 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.01333333 0 0 + vertex -0.02 0 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 0.01 + vertex -0.1 0 0.02 + vertex -0.09333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.02 + vertex -0.09333333 0 0.01 + vertex -0.1 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.01 + vertex -0.09333333 0 0.02 + vertex -0.08666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.02 + vertex -0.08666667 0 0.01 + vertex -0.09333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.01 + vertex -0.08666667 0 0.02 + vertex -0.08 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.02 + vertex -0.08 0 0.01 + vertex -0.08666667 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.01 + vertex -0.08 0 0.02 + vertex -0.07333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.02 + vertex -0.07333333 0 0.01 + vertex -0.08 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.01 + vertex -0.07333333 0 0.02 + vertex -0.06666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.02 + vertex -0.06666667 0 0.01 + vertex -0.07333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.01 + vertex -0.06666667 0 0.02 + vertex -0.06 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 0.02 + vertex -0.06 0 0.01 + vertex -0.06666667 0 0.01 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 0.01 + vertex -0.06 0 0.02 + vertex -0.05333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.06 0 0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.04666667 0 0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 0.02 + vertex -0.04666667 0 0.01 + vertex -0.05333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 0.01 + vertex -0.04666667 0 0.02 + vertex -0.04 5.782412e-19 0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 0.02 + vertex -0.04 5.782412e-19 0.01 + vertex -0.04666667 0 0.01 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 0.01 + vertex -0.04 5.782412e-19 0.02 + vertex -0.03333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.04 5.782412e-19 0.01 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.02666667 0 0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.02666667 0 0.02 + vertex -0.02666667 0 0.01 + vertex -0.03333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0 0.01 + vertex -0.02666667 0 0.02 + vertex -0.02 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.02 + vertex -0.02 0 0.01 + vertex -0.02666667 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.01 + vertex -0.02 0 0.02 + vertex -0.01333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.02 + vertex -0.01333333 0 0.01 + vertex -0.02 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 0.02 + vertex -0.1 0 0.03 + vertex -0.09333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.03 + vertex -0.09333333 0 0.02 + vertex -0.1 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.02 + vertex -0.09333333 0 0.03 + vertex -0.08666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.03 + vertex -0.08666667 0 0.02 + vertex -0.09333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.02 + vertex -0.08666667 0 0.03 + vertex -0.08 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.03 + vertex -0.08 0 0.02 + vertex -0.08666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.02 + vertex -0.08 0 0.03 + vertex -0.07333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.03 + vertex -0.07333333 0 0.02 + vertex -0.08 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.02 + vertex -0.07333333 0 0.03 + vertex -0.06666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.03 + vertex -0.06666667 0 0.02 + vertex -0.07333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.02 + vertex -0.06666667 0 0.03 + vertex -0.06 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 0.03 + vertex -0.06 0 0.02 + vertex -0.06666667 0 0.02 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 0.02 + vertex -0.06 0 0.03 + vertex -0.05333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.06 0 0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.04666667 0 0.03 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 0.03 + vertex -0.04666667 0 0.02 + vertex -0.05333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 0.02 + vertex -0.04666667 0 0.03 + vertex -0.04 5.782412e-19 0.03 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 0.03 + vertex -0.04 5.782412e-19 0.02 + vertex -0.04666667 0 0.02 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 0.02 + vertex -0.04 5.782412e-19 0.03 + vertex -0.03333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.04 5.782412e-19 0.02 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.02666667 0 0.03 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.02666667 0 0.03 + vertex -0.02666667 0 0.02 + vertex -0.03333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0 0.02 + vertex -0.02666667 0 0.03 + vertex -0.02 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.03 + vertex -0.02 0 0.02 + vertex -0.02666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.02 + vertex -0.02 0 0.03 + vertex -0.01333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.03 + vertex -0.01333333 0 0.02 + vertex -0.02 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 0.03 + vertex -0.1 0 0.04 + vertex -0.09333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.04 + vertex -0.09333333 0 0.03 + vertex -0.1 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.03 + vertex -0.09333333 0 0.04 + vertex -0.08666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.04 + vertex -0.08666667 0 0.03 + vertex -0.09333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.03 + vertex -0.08666667 0 0.04 + vertex -0.08 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.04 + vertex -0.08 0 0.03 + vertex -0.08666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.03 + vertex -0.08 0 0.04 + vertex -0.07333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.04 + vertex -0.07333333 0 0.03 + vertex -0.08 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.03 + vertex -0.07333333 0 0.04 + vertex -0.06666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.04 + vertex -0.06666667 0 0.03 + vertex -0.07333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.03 + vertex -0.06666667 0 0.04 + vertex -0.06 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 0.04 + vertex -0.06 0 0.03 + vertex -0.06666667 0 0.03 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 0.03 + vertex -0.06 0 0.04 + vertex -0.05333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.06 0 0.03 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.04666667 0 0.04 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 0.04 + vertex -0.04666667 0 0.03 + vertex -0.05333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 0.03 + vertex -0.04666667 0 0.04 + vertex -0.04 5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 0.04 + vertex -0.04 5.782412e-19 0.03 + vertex -0.04666667 0 0.03 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 0.03 + vertex -0.04 5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.04 5.782412e-19 0.03 + endloop + endfacet + facet normal -1.734725e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.02666667 5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673627e-17 1 -5.782412e-17 + outer loop + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.02666667 0 0.03 + vertex -0.03333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 8.673614e-17 1 -5.782412e-17 + outer loop + vertex -0.02666667 0 0.03 + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.02 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.04 + vertex -0.02 0 0.03 + vertex -0.02666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.03 + vertex -0.02 0 0.04 + vertex -0.01333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.04 + vertex -0.01333333 0 0.03 + vertex -0.02 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0 0.04 + vertex -0.1 0 0.05 + vertex -0.09333333 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.05 + vertex -0.09333333 0 0.04 + vertex -0.1 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0 0.04 + vertex -0.09333333 0 0.05 + vertex -0.08666667 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.05 + vertex -0.08666667 0 0.04 + vertex -0.09333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0 0.04 + vertex -0.08666667 0 0.05 + vertex -0.08 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.05 + vertex -0.08 0 0.04 + vertex -0.08666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0 0.04 + vertex -0.08 0 0.05 + vertex -0.07333333 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.05 + vertex -0.07333333 0 0.04 + vertex -0.08 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0 0.04 + vertex -0.07333333 0 0.05 + vertex -0.06666667 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.05 + vertex -0.06666667 0 0.04 + vertex -0.07333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0 0.04 + vertex -0.06666667 0 0.05 + vertex -0.06 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0 0.05 + vertex -0.06 0 0.04 + vertex -0.06666667 0 0.04 + endloop + endfacet + facet normal 8.673614e-17 1 -0 + outer loop + vertex -0.06 0 0.04 + vertex -0.06 0 0.05 + vertex -0.05333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.06 0 0.04 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.04666667 0 0.05 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.04666667 0 0.05 + vertex -0.04666667 0 0.04 + vertex -0.05333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04666667 0 0.04 + vertex -0.04666667 0 0.05 + vertex -0.04 5.782412e-19 0.05 + endloop + endfacet + facet normal -8.673614e-17 1 0 + outer loop + vertex -0.04 5.782412e-19 0.05 + vertex -0.04 5.782412e-19 0.04 + vertex -0.04666667 0 0.04 + endloop + endfacet + facet normal 1.734723e-16 1 -0 + outer loop + vertex -0.04 5.782412e-19 0.04 + vertex -0.04 5.782412e-19 0.05 + vertex -0.03333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal 1.734723e-16 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.04 5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673627e-17 1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.02666667 0 0.05 + endloop + endfacet + facet normal -1.734725e-16 1 5.782412e-17 + outer loop + vertex -0.02666667 0 0.05 + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal 0 1 5.782412e-17 + outer loop + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.02666667 0 0.05 + vertex -0.02 0 0.05 + endloop + endfacet + facet normal 8.673614e-17 1 0 + outer loop + vertex -0.02 0 0.05 + vertex -0.02 0 0.04 + vertex -0.02666667 5.782412e-19 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0 0.04 + vertex -0.02 0 0.05 + vertex -0.01333333 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.05 + vertex -0.01333333 0 0.04 + vertex -0.02 0 0.04 + endloop + endfacet +endsolid bottomAir_to_leftSolid +solid bottomAir_to_heater + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 -0.05 + vertex -0.01333333 0 -0.04 + vertex -0.006666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.04 + vertex -0.006666667 0 -0.05 + vertex -0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.05 + vertex -0.006666667 0 -0.04 + vertex 0 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.04 + vertex 0 0 -0.05 + vertex -0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.05 + vertex 0 0 -0.04 + vertex 0.006666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.04 + vertex 0.006666667 0 -0.05 + vertex 0 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.05 + vertex 0.006666667 0 -0.04 + vertex 0.01333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0 -0.05 + vertex 0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0 -0.03 + vertex -0.006666667 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.03 + vertex -0.006666667 0 -0.04 + vertex -0.01333333 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.04 + vertex -0.006666667 0 -0.03 + vertex 0 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.03 + vertex 0 0 -0.04 + vertex -0.006666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.04 + vertex 0 0 -0.03 + vertex 0.006666667 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.03 + vertex 0.006666667 0 -0.04 + vertex 0 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.04 + vertex 0.006666667 0 -0.03 + vertex 0.01333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0 -0.04 + vertex 0.006666667 0 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0 -0.02 + vertex -0.006666667 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.02 + vertex -0.006666667 0 -0.03 + vertex -0.01333333 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.03 + vertex -0.006666667 0 -0.02 + vertex 0 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.02 + vertex 0 0 -0.03 + vertex -0.006666667 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.03 + vertex 0 0 -0.02 + vertex 0.006666667 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.02 + vertex 0.006666667 0 -0.03 + vertex 0 0 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.03 + vertex 0.006666667 0 -0.02 + vertex 0.01333333 0 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0 -0.03 + vertex 0.006666667 0 -0.03 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.04 -0.01 + vertex -0.006666667 -0.04 -0.01 + vertex -0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.032 -0.01 + vertex -0.01333333 -0.032 -0.01 + vertex -0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.04 -0.01 + vertex 0 -0.04 -0.01 + vertex 0 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.032 -0.01 + vertex -0.006666667 -0.032 -0.01 + vertex -0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.04 -0.01 + vertex 0.006666667 -0.04 -0.01 + vertex 0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.032 -0.01 + vertex 0 -0.032 -0.01 + vertex 0 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.04 -0.01 + vertex 0.01333333 -0.04 -0.01 + vertex 0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.032 -0.01 + vertex 0.006666667 -0.032 -0.01 + vertex 0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.032 -0.01 + vertex -0.006666667 -0.032 -0.01 + vertex -0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.024 -0.01 + vertex -0.01333333 -0.024 -0.01 + vertex -0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.032 -0.01 + vertex 0 -0.032 -0.01 + vertex 0 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.024 -0.01 + vertex -0.006666667 -0.024 -0.01 + vertex -0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.032 -0.01 + vertex 0.006666667 -0.032 -0.01 + vertex 0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.024 -0.01 + vertex 0 -0.024 -0.01 + vertex 0 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.032 -0.01 + vertex 0.01333333 -0.032 -0.01 + vertex 0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.024 -0.01 + vertex 0.006666667 -0.024 -0.01 + vertex 0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.024 -0.01 + vertex -0.006666667 -0.024 -0.01 + vertex -0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.016 -0.01 + vertex -0.01333333 -0.016 -0.01 + vertex -0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.024 -0.01 + vertex 0 -0.024 -0.01 + vertex 0 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.016 -0.01 + vertex -0.006666667 -0.016 -0.01 + vertex -0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.024 -0.01 + vertex 0.006666667 -0.024 -0.01 + vertex 0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.016 -0.01 + vertex 0 -0.016 -0.01 + vertex 0 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.024 -0.01 + vertex 0.01333333 -0.024 -0.01 + vertex 0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.016 -0.01 + vertex 0.006666667 -0.016 -0.01 + vertex 0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.016 -0.01 + vertex -0.006666667 -0.016 -0.01 + vertex -0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.008 -0.01 + vertex -0.01333333 -0.008 -0.01 + vertex -0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.016 -0.01 + vertex 0 -0.016 -0.01 + vertex 0 -0.008 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.008 -0.01 + vertex -0.006666667 -0.008 -0.01 + vertex -0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.016 -0.01 + vertex 0.006666667 -0.016 -0.01 + vertex 0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.008 -0.01 + vertex 0 -0.008 -0.01 + vertex 0 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.016 -0.01 + vertex 0.01333333 -0.016 -0.01 + vertex 0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.008 -0.01 + vertex 0.006666667 -0.008 -0.01 + vertex 0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0 -0.01 + vertex -0.006666667 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.01 + vertex -0.006666667 0 -0.02 + vertex -0.01333333 0 -0.02 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.008 -0.01 + vertex -0.006666667 -0.008 -0.01 + vertex -0.006666667 0 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0 -0.01 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 -0.02 + vertex -0.006666667 0 -0.01 + vertex 0 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.01 + vertex 0 0 -0.02 + vertex -0.006666667 0 -0.02 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.008 -0.01 + vertex 0 -0.008 -0.01 + vertex 0 0 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0 -0.01 + vertex -0.006666667 0 -0.01 + vertex -0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 -0.02 + vertex 0 0 -0.01 + vertex 0.006666667 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.01 + vertex 0.006666667 0 -0.02 + vertex 0 0 -0.02 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.008 -0.01 + vertex 0.006666667 -0.008 -0.01 + vertex 0.006666667 0 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0 -0.01 + vertex 0 0 -0.01 + vertex 0 -0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 -0.02 + vertex 0.006666667 0 -0.01 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0 -0.02 + vertex 0.006666667 0 -0.02 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.008 -0.01 + vertex 0.01333333 -0.008 -0.01 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.006666667 0 -0.01 + vertex 0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.04 -0.01 + vertex -0.01333333 -0.032 -0.01 + vertex -0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.04 0 + vertex -0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.04 -0.01 + vertex 0.01333333 -0.04 0 + vertex 0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.032 -0.01 + vertex 0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.032 -0.01 + vertex -0.01333333 -0.024 -0.01 + vertex -0.01333333 -0.024 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.032 -0.01 + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.024 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.024 -0.01 + vertex 0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.024 -0.01 + vertex -0.01333333 -0.016 -0.01 + vertex -0.01333333 -0.016 -1.156482e-18 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.024 -0.01 + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.016 -1.156482e-18 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.016 -0.01 + vertex 0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.016 -0.01 + vertex -0.01333333 -0.008 -0.01 + vertex -0.01333333 -0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.008 0 + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.016 -0.01 + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.008 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 -0.008 0 + vertex 0.01333333 -0.008 -0.01 + vertex 0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.008 -0.01 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0 + vertex -0.01333333 -0.008 0 + vertex -0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.008 -0.01 + vertex 0.01333333 -0.008 0 + vertex 0.01333333 0 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0 0 + vertex 0.01333333 0 -0.01 + vertex 0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.032 0.01 + vertex -0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.04 0.01 + vertex -0.01333333 -0.04 0 + vertex -0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.04 0.01 + vertex -0.01333333 -0.032 0.01 + vertex -0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.032 0.01 + vertex -0.006666667 -0.04 0.01 + vertex -0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.04 0.01 + vertex -0.006666667 -0.032 0.01 + vertex 0 -0.032 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.032 0.01 + vertex 0 -0.04 0.01 + vertex -0.006666667 -0.04 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.04 0.01 + vertex 0 -0.032 0.01 + vertex 0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.032 0.01 + vertex 0.006666667 -0.04 0.01 + vertex 0 -0.04 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.04 0.01 + vertex 0.01333333 -0.032 0.01 + vertex 0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.04 0 + vertex 0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.04 0.01 + vertex 0.006666667 -0.032 0.01 + vertex 0.01333333 -0.032 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.032 0.01 + vertex 0.01333333 -0.04 0.01 + vertex 0.006666667 -0.04 0.01 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.024 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.024 0.01 + vertex -0.01333333 -0.032 0.01 + vertex -0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.032 0.01 + vertex -0.01333333 -0.024 0.01 + vertex -0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.024 0.01 + vertex -0.006666667 -0.032 0.01 + vertex -0.01333333 -0.032 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.032 0.01 + vertex -0.006666667 -0.024 0.01 + vertex 0 -0.024 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.024 0.01 + vertex 0 -0.032 0.01 + vertex -0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.032 0.01 + vertex 0 -0.024 0.01 + vertex 0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.024 0.01 + vertex 0.006666667 -0.032 0.01 + vertex 0 -0.032 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.032 0.01 + vertex 0.01333333 -0.024 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 -0.024 0.01 + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.032 0.01 + vertex 0.006666667 -0.024 0.01 + vertex 0.01333333 -0.024 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.024 0.01 + vertex 0.01333333 -0.032 0.01 + vertex 0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.016 0.01 + vertex -0.01333333 -0.024 0.01 + vertex -0.01333333 -0.024 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.024 0.01 + vertex -0.01333333 -0.016 0.01 + vertex -0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.016 0.01 + vertex -0.006666667 -0.024 0.01 + vertex -0.01333333 -0.024 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.024 0.01 + vertex -0.006666667 -0.016 0.01 + vertex 0 -0.016 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.016 0.01 + vertex 0 -0.024 0.01 + vertex -0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.024 0.01 + vertex 0 -0.016 0.01 + vertex 0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.016 0.01 + vertex 0.006666667 -0.024 0.01 + vertex 0 -0.024 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.024 0.01 + vertex 0.01333333 -0.016 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 -0.016 0.01 + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.024 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.024 0.01 + vertex 0.006666667 -0.016 0.01 + vertex 0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.016 0.01 + vertex 0.01333333 -0.024 0.01 + vertex 0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex -0.01333333 -0.008 0 + vertex -0.01333333 -0.008 0.01 + vertex -0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.016 0.01 + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.008 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.016 0.01 + vertex -0.01333333 -0.008 0.01 + vertex -0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.008 0.01 + vertex -0.006666667 -0.016 0.01 + vertex -0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.016 0.01 + vertex -0.006666667 -0.008 0.01 + vertex 0 -0.008 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.008 0.01 + vertex 0 -0.016 0.01 + vertex -0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.016 0.01 + vertex 0 -0.008 0.01 + vertex 0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.008 0.01 + vertex 0.006666667 -0.016 0.01 + vertex 0 -0.016 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.016 0.01 + vertex 0.01333333 -0.008 0.01 + vertex 0.01333333 -0.008 0 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex 0.01333333 -0.008 0 + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.016 0.01 + vertex 0.006666667 -0.008 0.01 + vertex 0.01333333 -0.008 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.008 0.01 + vertex 0.01333333 -0.016 0.01 + vertex 0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 -0.008 0 + vertex -0.01333333 0 0 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.01333333 -0.008 0.01 + vertex -0.01333333 -0.008 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.008 0.01 + vertex -0.01333333 0 0.01 + vertex -0.006666667 0 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0 0.01 + vertex -0.006666667 -0.008 0.01 + vertex -0.01333333 -0.008 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.008 0.01 + vertex -0.006666667 0 0.01 + vertex 0 0 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0 0.01 + vertex 0 -0.008 0.01 + vertex -0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.008 0.01 + vertex 0 0 0.01 + vertex 0.006666667 0 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0 0.01 + vertex 0.006666667 -0.008 0.01 + vertex 0 -0.008 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 -0.008 0 + vertex 0.01333333 -0.008 0.01 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.01333333 0 0 + vertex 0.01333333 -0.008 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.008 0.01 + vertex 0.006666667 0 0.01 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.01333333 -0.008 0.01 + vertex 0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.01333333 0 0.02 + vertex -0.006666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.02 + vertex -0.006666667 0 0.01 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.01 + vertex -0.006666667 0 0.02 + vertex 0 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.02 + vertex 0 0 0.01 + vertex -0.006666667 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.01 + vertex 0 0 0.02 + vertex 0.006666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.02 + vertex 0.006666667 0 0.01 + vertex 0 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.01 + vertex 0.006666667 0 0.02 + vertex 0.01333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.02 + vertex 0.01333333 0 0.01 + vertex 0.006666667 0 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.02 + vertex -0.01333333 0 0.03 + vertex -0.006666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.03 + vertex -0.006666667 0 0.02 + vertex -0.01333333 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.02 + vertex -0.006666667 0 0.03 + vertex 0 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.03 + vertex 0 0 0.02 + vertex -0.006666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.02 + vertex 0 0 0.03 + vertex 0.006666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.03 + vertex 0.006666667 0 0.02 + vertex 0 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.02 + vertex 0.006666667 0 0.03 + vertex 0.01333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.03 + vertex 0.01333333 0 0.02 + vertex 0.006666667 0 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.03 + vertex -0.01333333 0 0.04 + vertex -0.006666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.04 + vertex -0.006666667 0 0.03 + vertex -0.01333333 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.03 + vertex -0.006666667 0 0.04 + vertex 0 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.04 + vertex 0 0 0.03 + vertex -0.006666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.03 + vertex 0 0 0.04 + vertex 0.006666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.04 + vertex 0.006666667 0 0.03 + vertex 0 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.03 + vertex 0.006666667 0 0.04 + vertex 0.01333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.04 + vertex 0.01333333 0 0.03 + vertex 0.006666667 0 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0 0.04 + vertex -0.01333333 0 0.05 + vertex -0.006666667 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.05 + vertex -0.006666667 0 0.04 + vertex -0.01333333 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0 0.04 + vertex -0.006666667 0 0.05 + vertex 0 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.05 + vertex 0 0 0.04 + vertex -0.006666667 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0 0.04 + vertex 0 0 0.05 + vertex 0.006666667 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.05 + vertex 0.006666667 0 0.04 + vertex 0 0 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0 0.04 + vertex 0.006666667 0 0.05 + vertex 0.01333333 0 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0 0.05 + vertex 0.01333333 0 0.04 + vertex 0.006666667 0 0.04 + endloop + endfacet +endsolid bottomAir_to_heater diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/heater.stl b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/heater.stl new file mode 100644 index 0000000000000000000000000000000000000000..a9b98f11f2d6fdfa038bab142d4a99ef2df0d11c --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/heater.stl @@ -0,0 +1,2366 @@ +solid minY + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 -0.01 + vertex -0.006666667 -0.04 -0.01 + vertex -0.006666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 0 + vertex -0.01333333 -0.04 0 + vertex -0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 -0.04 0 + vertex -0.006666667 -0.04 0 + vertex -0.006666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 -0.04 0.01 + vertex -0.01333333 -0.04 0.01 + vertex -0.01333333 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 -0.01 + vertex 0 -0.04 -0.01 + vertex 0 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 0 + vertex -0.006666667 -0.04 0 + vertex -0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 -0.04 0 + vertex 0 -0.04 0 + vertex 0 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 -0.04 0.01 + vertex -0.006666667 -0.04 0.01 + vertex -0.006666667 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 -0.01 + vertex 0.006666667 -0.04 -0.01 + vertex 0.006666667 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 0 + vertex 0 -0.04 0 + vertex 0 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 -0.04 0 + vertex 0.006666667 -0.04 0 + vertex 0.006666667 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 -0.04 0.01 + vertex 0 -0.04 0.01 + vertex 0 -0.04 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 -0.01 + vertex 0.01333333 -0.04 -0.01 + vertex 0.01333333 -0.04 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 0 + vertex 0.006666667 -0.04 0 + vertex 0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 -0.04 0 + vertex 0.01333333 -0.04 0 + vertex 0.01333333 -0.04 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 -0.04 0.01 + vertex 0.006666667 -0.04 0.01 + vertex 0.006666667 -0.04 0 + endloop + endfacet +endsolid minY +solid minZ + facet normal 0 0 -1 + outer loop + vertex -0.01333333 0 -0.05 + vertex -0.01333333 0.008 -0.05 + vertex -0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0.008 -0.05 + vertex -0.006666667 0 -0.05 + vertex -0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 0 -0.05 + vertex -0.006666667 0.008 -0.05 + vertex 0 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0.008 -0.05 + vertex 0 0 -0.05 + vertex -0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 0 -0.05 + vertex 0 0.008 -0.05 + vertex 0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0.008 -0.05 + vertex 0.006666667 0 -0.05 + vertex 0 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 0 -0.05 + vertex 0.006666667 0.008 -0.05 + vertex 0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0.008 -0.05 + vertex 0.01333333 0 -0.05 + vertex 0.006666667 0 -0.05 + endloop + endfacet +endsolid minZ +solid maxZ + facet normal 0 0 1 + outer loop + vertex -0.01333333 0 0.05 + vertex -0.006666667 0 0.05 + vertex -0.006666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.008 0.05 + vertex -0.01333333 0.008 0.05 + vertex -0.01333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0 0.05 + vertex 0 0 0.05 + vertex 0 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.008 0.05 + vertex -0.006666667 0.008 0.05 + vertex -0.006666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0 0.05 + vertex 0.006666667 0 0.05 + vertex 0.006666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.008 0.05 + vertex 0 0.008 0.05 + vertex 0 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0 0.05 + vertex 0.01333333 0 0.05 + vertex 0.01333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.008 0.05 + vertex 0.006666667 0.008 0.05 + vertex 0.006666667 0 0.05 + endloop + endfacet +endsolid maxZ +solid heater_to_topAir + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.05 + vertex -0.01333333 0.008 -0.04 + vertex -0.006666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.04 + vertex -0.006666667 0.008 -0.05 + vertex -0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.05 + vertex -0.006666667 0.008 -0.04 + vertex 0 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.04 + vertex 0 0.008 -0.05 + vertex -0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.05 + vertex 0 0.008 -0.04 + vertex 0.006666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.04 + vertex 0.006666667 0.008 -0.05 + vertex 0 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.05 + vertex 0.006666667 0.008 -0.04 + vertex 0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0.008 -0.05 + vertex 0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0.008 -0.03 + vertex -0.006666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.03 + vertex -0.006666667 0.008 -0.04 + vertex -0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.04 + vertex -0.006666667 0.008 -0.03 + vertex 0 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.03 + vertex 0 0.008 -0.04 + vertex -0.006666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.04 + vertex 0 0.008 -0.03 + vertex 0.006666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.03 + vertex 0.006666667 0.008 -0.04 + vertex 0 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.04 + vertex 0.006666667 0.008 -0.03 + vertex 0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0.008 -0.04 + vertex 0.006666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0.008 -0.02 + vertex -0.006666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.02 + vertex -0.006666667 0.008 -0.03 + vertex -0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.03 + vertex -0.006666667 0.008 -0.02 + vertex 0 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.02 + vertex 0 0.008 -0.03 + vertex -0.006666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.03 + vertex 0 0.008 -0.02 + vertex 0.006666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.02 + vertex 0.006666667 0.008 -0.03 + vertex 0 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.03 + vertex 0.006666667 0.008 -0.02 + vertex 0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0.008 -0.03 + vertex 0.006666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0.008 -0.01 + vertex -0.006666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.01 + vertex -0.006666667 0.008 -0.02 + vertex -0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.02 + vertex -0.006666667 0.008 -0.01 + vertex 0 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.01 + vertex 0 0.008 -0.02 + vertex -0.006666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.02 + vertex 0 0.008 -0.01 + vertex 0.006666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.01 + vertex 0.006666667 0.008 -0.02 + vertex 0 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.02 + vertex 0.006666667 0.008 -0.01 + vertex 0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0.008 -0.02 + vertex 0.006666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0.008 0 + vertex -0.006666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0 + vertex -0.006666667 0.008 -0.01 + vertex -0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 -0.01 + vertex -0.006666667 0.008 0 + vertex 0 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0 + vertex 0 0.008 -0.01 + vertex -0.006666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 -0.01 + vertex 0 0.008 0 + vertex 0.006666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0 + vertex 0.006666667 0.008 -0.01 + vertex 0 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 -0.01 + vertex 0.006666667 0.008 0 + vertex 0.01333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0 + vertex 0.01333333 0.008 -0.01 + vertex 0.006666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0 + vertex -0.01333333 0.008 0.01 + vertex -0.006666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.01 + vertex -0.006666667 0.008 0 + vertex -0.01333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0 + vertex -0.006666667 0.008 0.01 + vertex 0 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.01 + vertex 0 0.008 0 + vertex -0.006666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0 + vertex 0 0.008 0.01 + vertex 0.006666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.01 + vertex 0.006666667 0.008 0 + vertex 0 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0 + vertex 0.006666667 0.008 0.01 + vertex 0.01333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0.008 0 + vertex 0.006666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0.008 0.02 + vertex -0.006666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.02 + vertex -0.006666667 0.008 0.01 + vertex -0.01333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.01 + vertex -0.006666667 0.008 0.02 + vertex 0 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.02 + vertex 0 0.008 0.01 + vertex -0.006666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.01 + vertex 0 0.008 0.02 + vertex 0.006666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.02 + vertex 0.006666667 0.008 0.01 + vertex 0 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.01 + vertex 0.006666667 0.008 0.02 + vertex 0.01333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0.008 0.01 + vertex 0.006666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0.008 0.03 + vertex -0.006666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.03 + vertex -0.006666667 0.008 0.02 + vertex -0.01333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.02 + vertex -0.006666667 0.008 0.03 + vertex 0 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.03 + vertex 0 0.008 0.02 + vertex -0.006666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.02 + vertex 0 0.008 0.03 + vertex 0.006666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.03 + vertex 0.006666667 0.008 0.02 + vertex 0 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.02 + vertex 0.006666667 0.008 0.03 + vertex 0.01333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0.008 0.02 + vertex 0.006666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0.008 0.04 + vertex -0.006666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.04 + vertex -0.006666667 0.008 0.03 + vertex -0.01333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.03 + vertex -0.006666667 0.008 0.04 + vertex 0 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.04 + vertex 0 0.008 0.03 + vertex -0.006666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.03 + vertex 0 0.008 0.04 + vertex 0.006666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.04 + vertex 0.006666667 0.008 0.03 + vertex 0 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.03 + vertex 0.006666667 0.008 0.04 + vertex 0.01333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0.008 0.03 + vertex 0.006666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0.008 0.05 + vertex -0.006666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.05 + vertex -0.006666667 0.008 0.04 + vertex -0.01333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.008 0.04 + vertex -0.006666667 0.008 0.05 + vertex 0 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.05 + vertex 0 0.008 0.04 + vertex -0.006666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.008 0.04 + vertex 0 0.008 0.05 + vertex 0.006666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.05 + vertex 0.006666667 0.008 0.04 + vertex 0 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.008 0.04 + vertex 0.006666667 0.008 0.05 + vertex 0.01333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.05 + vertex 0.01333333 0.008 0.04 + vertex 0.006666667 0.008 0.04 + endloop + endfacet +endsolid heater_to_topAir +solid heater_to_rightSolid + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 -0.05 + vertex 0.01333333 0.008 -0.05 + vertex 0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 0 + vertex 0.01333333 0 0 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0 + vertex 0.01333333 0.008 0 + vertex 0.01333333 0.008 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0 0.01 + vertex 0.01333333 0 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0.008 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0 0.02 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0.02 + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0.008 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0 0.03 + vertex 0.01333333 0 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0.03 + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0.008 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0 0.04 + vertex 0.01333333 0 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0.04 + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0.008 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0.008 0.05 + vertex 0.01333333 0 0.05 + vertex 0.01333333 0 0.04 + endloop + endfacet +endsolid heater_to_rightSolid +solid heater_to_leftSolid + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 -0.05 + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0.008 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0.008 -0.05 + vertex -0.01333333 0 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0.008 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0.008 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0.008 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0 0 + vertex -0.01333333 0.008 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 0 + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 0 + vertex -0.01333333 0 0.01 + vertex -0.01333333 0.008 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0.008 0 + vertex -0.01333333 0 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.01333333 0 0.02 + vertex -0.01333333 0.008 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 0.02 + vertex -0.01333333 0 0.03 + vertex -0.01333333 0.008 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 0.03 + vertex -0.01333333 0 0.04 + vertex -0.01333333 0.008 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 0 0.04 + vertex -0.01333333 0 0.05 + vertex -0.01333333 0.008 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0.008 0.05 + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0 0.04 + endloop + endfacet +endsolid heater_to_leftSolid +solid heater_to_bottomAir + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 -0.05 + vertex -0.006666667 0 -0.05 + vertex -0.006666667 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 -0.04 + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 -0.05 + vertex 0 0 -0.05 + vertex 0 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 -0.04 + vertex -0.006666667 0 -0.04 + vertex -0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 -0.05 + vertex 0.006666667 0 -0.05 + vertex 0.006666667 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 -0.04 + vertex 0 0 -0.04 + vertex 0 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 -0.05 + vertex 0.01333333 0 -0.05 + vertex 0.01333333 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 -0.04 + vertex 0.006666667 0 -0.04 + vertex 0.006666667 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 -0.04 + vertex -0.006666667 0 -0.04 + vertex -0.006666667 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 -0.03 + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 -0.04 + vertex 0 0 -0.04 + vertex 0 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 -0.03 + vertex -0.006666667 0 -0.03 + vertex -0.006666667 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 -0.04 + vertex 0.006666667 0 -0.04 + vertex 0.006666667 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 -0.03 + vertex 0 0 -0.03 + vertex 0 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 -0.04 + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 -0.03 + vertex 0.006666667 0 -0.03 + vertex 0.006666667 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 -0.03 + vertex -0.006666667 0 -0.03 + vertex -0.006666667 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 -0.02 + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 -0.03 + vertex 0 0 -0.03 + vertex 0 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 -0.02 + vertex -0.006666667 0 -0.02 + vertex -0.006666667 0 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 -0.03 + vertex 0.006666667 0 -0.03 + vertex 0.006666667 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 -0.02 + vertex 0 0 -0.02 + vertex 0 0 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 -0.03 + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 -0.02 + vertex 0.006666667 0 -0.02 + vertex 0.006666667 0 -0.03 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.04 -0.01 + vertex -0.01333333 -0.032 -0.01 + vertex -0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.032 -0.01 + vertex -0.006666667 -0.04 -0.01 + vertex -0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.04 -0.01 + vertex -0.006666667 -0.032 -0.01 + vertex 0 -0.032 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.032 -0.01 + vertex 0 -0.04 -0.01 + vertex -0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.04 -0.01 + vertex 0 -0.032 -0.01 + vertex 0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.032 -0.01 + vertex 0.006666667 -0.04 -0.01 + vertex 0 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.04 -0.01 + vertex 0.006666667 -0.032 -0.01 + vertex 0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.032 -0.01 + vertex 0.01333333 -0.04 -0.01 + vertex 0.006666667 -0.04 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.032 -0.01 + vertex -0.01333333 -0.024 -0.01 + vertex -0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.024 -0.01 + vertex -0.006666667 -0.032 -0.01 + vertex -0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.032 -0.01 + vertex -0.006666667 -0.024 -0.01 + vertex 0 -0.024 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.024 -0.01 + vertex 0 -0.032 -0.01 + vertex -0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.032 -0.01 + vertex 0 -0.024 -0.01 + vertex 0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.024 -0.01 + vertex 0.006666667 -0.032 -0.01 + vertex 0 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.032 -0.01 + vertex 0.006666667 -0.024 -0.01 + vertex 0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.024 -0.01 + vertex 0.01333333 -0.032 -0.01 + vertex 0.006666667 -0.032 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.024 -0.01 + vertex -0.01333333 -0.016 -0.01 + vertex -0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.016 -0.01 + vertex -0.006666667 -0.024 -0.01 + vertex -0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.024 -0.01 + vertex -0.006666667 -0.016 -0.01 + vertex 0 -0.016 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.016 -0.01 + vertex 0 -0.024 -0.01 + vertex -0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.024 -0.01 + vertex 0 -0.016 -0.01 + vertex 0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.016 -0.01 + vertex 0.006666667 -0.024 -0.01 + vertex 0 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.024 -0.01 + vertex 0.006666667 -0.016 -0.01 + vertex 0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.016 -0.01 + vertex 0.01333333 -0.024 -0.01 + vertex 0.006666667 -0.024 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.016 -0.01 + vertex -0.01333333 -0.008 -0.01 + vertex -0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 -0.008 -0.01 + vertex -0.006666667 -0.016 -0.01 + vertex -0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.016 -0.01 + vertex -0.006666667 -0.008 -0.01 + vertex 0 -0.008 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 -0.008 -0.01 + vertex 0 -0.016 -0.01 + vertex -0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.016 -0.01 + vertex 0 -0.008 -0.01 + vertex 0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 -0.008 -0.01 + vertex 0.006666667 -0.016 -0.01 + vertex 0 -0.016 -0.01 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.016 -0.01 + vertex 0.006666667 -0.008 -0.01 + vertex 0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 -0.008 -0.01 + vertex 0.01333333 -0.016 -0.01 + vertex 0.006666667 -0.016 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 -0.02 + vertex -0.006666667 0 -0.02 + vertex -0.006666667 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 -0.01 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0 -0.02 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 -0.008 -0.01 + vertex -0.01333333 0 -0.01 + vertex -0.006666667 0 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0 -0.01 + vertex -0.006666667 -0.008 -0.01 + vertex -0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 -0.02 + vertex 0 0 -0.02 + vertex 0 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 -0.01 + vertex -0.006666667 0 -0.01 + vertex -0.006666667 0 -0.02 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 -0.008 -0.01 + vertex -0.006666667 0 -0.01 + vertex 0 0 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0 -0.01 + vertex 0 -0.008 -0.01 + vertex -0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 -0.02 + vertex 0.006666667 0 -0.02 + vertex 0.006666667 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 -0.01 + vertex 0 0 -0.01 + vertex 0 0 -0.02 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -0.008 -0.01 + vertex 0 0 -0.01 + vertex 0.006666667 0 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0 -0.01 + vertex 0.006666667 -0.008 -0.01 + vertex 0 -0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 -0.02 + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.006666667 0 -0.01 + vertex 0.006666667 0 -0.02 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 -0.008 -0.01 + vertex 0.006666667 0 -0.01 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.01333333 -0.008 -0.01 + vertex 0.006666667 -0.008 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.04 -0.01 + vertex -0.01333333 -0.04 0 + vertex -0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.032 -0.01 + vertex -0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.04 -0.01 + vertex 0.01333333 -0.032 -0.01 + vertex 0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.04 0 + vertex 0.01333333 -0.04 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.032 -0.01 + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.024 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.024 -0.01 + vertex -0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.032 -0.01 + vertex 0.01333333 -0.024 -0.01 + vertex 0.01333333 -0.024 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.032 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.024 -0.01 + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.016 -1.156482e-18 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.016 -0.01 + vertex -0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.024 -0.01 + vertex 0.01333333 -0.016 -0.01 + vertex 0.01333333 -0.016 -1.156482e-18 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.024 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.016 -0.01 + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.008 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 -0.008 0 + vertex -0.01333333 -0.008 -0.01 + vertex -0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.016 -0.01 + vertex 0.01333333 -0.008 -0.01 + vertex 0.01333333 -0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.008 0 + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.016 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.008 -0.01 + vertex -0.01333333 -0.008 0 + vertex -0.01333333 0 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0 0 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.008 -0.01 + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0 + vertex 0.01333333 -0.008 0 + vertex 0.01333333 -0.008 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.04 0.01 + vertex -0.01333333 -0.032 0.01 + vertex -0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.04 0 + vertex -0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.04 0.01 + vertex -0.006666667 -0.04 0.01 + vertex -0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.032 0.01 + vertex -0.01333333 -0.032 0.01 + vertex -0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.04 0.01 + vertex 0 -0.04 0.01 + vertex 0 -0.032 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.032 0.01 + vertex -0.006666667 -0.032 0.01 + vertex -0.006666667 -0.04 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.04 0.01 + vertex 0.006666667 -0.04 0.01 + vertex 0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.032 0.01 + vertex 0 -0.032 0.01 + vertex 0 -0.04 0.01 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.032 0.01 + vertex 0.01333333 -0.04 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.04 0.01 + vertex 0.01333333 -0.04 0 + vertex 0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.04 0.01 + vertex 0.01333333 -0.04 0.01 + vertex 0.01333333 -0.032 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.032 0.01 + vertex 0.006666667 -0.032 0.01 + vertex 0.006666667 -0.04 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.032 1.156482e-18 + vertex -0.01333333 -0.032 0.01 + vertex -0.01333333 -0.024 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 -0.024 0.01 + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.032 0.01 + vertex -0.006666667 -0.032 0.01 + vertex -0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.024 0.01 + vertex -0.01333333 -0.024 0.01 + vertex -0.01333333 -0.032 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.032 0.01 + vertex 0 -0.032 0.01 + vertex 0 -0.024 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.024 0.01 + vertex -0.006666667 -0.024 0.01 + vertex -0.006666667 -0.032 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.032 0.01 + vertex 0.006666667 -0.032 0.01 + vertex 0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.024 0.01 + vertex 0 -0.024 0.01 + vertex 0 -0.032 0.01 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.01333333 -0.032 1.156482e-18 + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.024 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.024 0.01 + vertex 0.01333333 -0.032 0.01 + vertex 0.01333333 -0.032 1.156482e-18 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.032 0.01 + vertex 0.01333333 -0.032 0.01 + vertex 0.01333333 -0.024 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.024 0.01 + vertex 0.006666667 -0.024 0.01 + vertex 0.006666667 -0.032 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.024 0 + vertex -0.01333333 -0.024 0.01 + vertex -0.01333333 -0.016 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 -0.016 0.01 + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.024 0.01 + vertex -0.006666667 -0.024 0.01 + vertex -0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.016 0.01 + vertex -0.01333333 -0.016 0.01 + vertex -0.01333333 -0.024 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.024 0.01 + vertex 0 -0.024 0.01 + vertex 0 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.016 0.01 + vertex -0.006666667 -0.016 0.01 + vertex -0.006666667 -0.024 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.024 0.01 + vertex 0.006666667 -0.024 0.01 + vertex 0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.016 0.01 + vertex 0 -0.016 0.01 + vertex 0 -0.024 0.01 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.01333333 -0.024 0 + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.016 0.01 + vertex 0.01333333 -0.024 0.01 + vertex 0.01333333 -0.024 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.024 0.01 + vertex 0.01333333 -0.024 0.01 + vertex 0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.016 0.01 + vertex 0.006666667 -0.016 0.01 + vertex 0.006666667 -0.024 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.016 0.01 + vertex -0.01333333 -0.008 0.01 + vertex -0.01333333 -0.008 0 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -0.01333333 -0.008 0 + vertex -0.01333333 -0.016 -1.156482e-18 + vertex -0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.016 0.01 + vertex -0.006666667 -0.016 0.01 + vertex -0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.008 0.01 + vertex -0.01333333 -0.008 0.01 + vertex -0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.016 0.01 + vertex 0 -0.016 0.01 + vertex 0 -0.008 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.008 0.01 + vertex -0.006666667 -0.008 0.01 + vertex -0.006666667 -0.016 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.016 0.01 + vertex 0.006666667 -0.016 0.01 + vertex 0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.008 0.01 + vertex 0 -0.008 0.01 + vertex 0 -0.016 0.01 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 0.01333333 -0.008 0 + vertex 0.01333333 -0.008 0.01 + vertex 0.01333333 -0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.016 0.01 + vertex 0.01333333 -0.016 -1.156482e-18 + vertex 0.01333333 -0.008 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.016 0.01 + vertex 0.01333333 -0.016 0.01 + vertex 0.01333333 -0.008 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 -0.008 0.01 + vertex 0.006666667 -0.008 0.01 + vertex 0.006666667 -0.016 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.01333333 -0.008 0 + vertex -0.01333333 -0.008 0.01 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.01333333 0 0 + vertex -0.01333333 -0.008 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 -0.008 0.01 + vertex -0.006666667 -0.008 0.01 + vertex -0.006666667 0 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0 0.01 + vertex -0.01333333 0 0.01 + vertex -0.01333333 -0.008 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 -0.008 0.01 + vertex 0 -0.008 0.01 + vertex 0 0 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0 0.01 + vertex -0.006666667 0 0.01 + vertex -0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -0.008 0.01 + vertex 0.006666667 -0.008 0.01 + vertex 0.006666667 0 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0 0.01 + vertex 0 0 0.01 + vertex 0 -0.008 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 -0.008 0 + vertex 0.01333333 0 0 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.01333333 -0.008 0.01 + vertex 0.01333333 -0.008 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 -0.008 0.01 + vertex 0.01333333 -0.008 0.01 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.006666667 0 0.01 + vertex 0.006666667 -0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.006666667 0 0.01 + vertex -0.006666667 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 0.02 + vertex -0.01333333 0 0.02 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 0.01 + vertex 0 0 0.01 + vertex 0 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 0.02 + vertex -0.006666667 0 0.02 + vertex -0.006666667 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 0.01 + vertex 0.006666667 0 0.01 + vertex 0.006666667 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 0.02 + vertex 0 0 0.02 + vertex 0 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 0.01 + vertex 0.01333333 0 0.01 + vertex 0.01333333 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 0.02 + vertex 0.006666667 0 0.02 + vertex 0.006666667 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 0.02 + vertex -0.006666667 0 0.02 + vertex -0.006666667 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 0.03 + vertex -0.01333333 0 0.03 + vertex -0.01333333 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 0.02 + vertex 0 0 0.02 + vertex 0 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 0.03 + vertex -0.006666667 0 0.03 + vertex -0.006666667 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 0.02 + vertex 0.006666667 0 0.02 + vertex 0.006666667 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 0.03 + vertex 0 0 0.03 + vertex 0 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 0.02 + vertex 0.01333333 0 0.02 + vertex 0.01333333 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 0.03 + vertex 0.006666667 0 0.03 + vertex 0.006666667 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 0.03 + vertex -0.006666667 0 0.03 + vertex -0.006666667 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 0.04 + vertex -0.01333333 0 0.04 + vertex -0.01333333 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 0.03 + vertex 0 0 0.03 + vertex 0 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 0.04 + vertex -0.006666667 0 0.04 + vertex -0.006666667 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 0.03 + vertex 0.006666667 0 0.03 + vertex 0.006666667 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 0.04 + vertex 0 0 0.04 + vertex 0 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 0.03 + vertex 0.01333333 0 0.03 + vertex 0.01333333 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 0.04 + vertex 0.006666667 0 0.04 + vertex 0.006666667 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0 0.04 + vertex -0.006666667 0 0.04 + vertex -0.006666667 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0 0.05 + vertex -0.01333333 0 0.05 + vertex -0.01333333 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0 0.04 + vertex 0 0 0.04 + vertex 0 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0 0.05 + vertex -0.006666667 0 0.05 + vertex -0.006666667 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0 0.04 + vertex 0.006666667 0 0.04 + vertex 0.006666667 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0 0.05 + vertex 0 0 0.05 + vertex 0 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0 0.04 + vertex 0.01333333 0 0.04 + vertex 0.01333333 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0 0.05 + vertex 0.006666667 0 0.05 + vertex 0.006666667 0 0.04 + endloop + endfacet +endsolid heater_to_bottomAir diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/leftSolid.stl b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/leftSolid.stl new file mode 100644 index 0000000000000000000000000000000000000000..0cdc26c08492dad27cf5b7afde642f83f6045908 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/leftSolid.stl @@ -0,0 +1,4296 @@ +solid minX + facet normal -1 0 0 + outer loop + vertex -0.1 0 -0.05 + vertex -0.1 0 -0.04 + vertex -0.1 0.008 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 -0.04 + vertex -0.1 0.008 -0.05 + vertex -0.1 0 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 -0.04 + vertex -0.1 0 -0.03 + vertex -0.1 0.008 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 -0.03 + vertex -0.1 0.008 -0.04 + vertex -0.1 0 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 -0.03 + vertex -0.1 0 -0.02 + vertex -0.1 0.008 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 -0.02 + vertex -0.1 0.008 -0.03 + vertex -0.1 0 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 -0.02 + vertex -0.1 0 -0.01 + vertex -0.1 0.008 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 -0.01 + vertex -0.1 0.008 -0.02 + vertex -0.1 0 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 -0.01 + vertex -0.1 0 0 + vertex -0.1 0.008 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 0 + vertex -0.1 0.008 -0.01 + vertex -0.1 0 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 0 + vertex -0.1 0 0.01 + vertex -0.1 0.008 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 0.01 + vertex -0.1 0.008 0 + vertex -0.1 0 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 0.01 + vertex -0.1 0 0.02 + vertex -0.1 0.008 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 0.02 + vertex -0.1 0.008 0.01 + vertex -0.1 0 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 0.02 + vertex -0.1 0 0.03 + vertex -0.1 0.008 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 0.03 + vertex -0.1 0.008 0.02 + vertex -0.1 0 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 0.03 + vertex -0.1 0 0.04 + vertex -0.1 0.008 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 0.04 + vertex -0.1 0.008 0.03 + vertex -0.1 0 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0 0.04 + vertex -0.1 0 0.05 + vertex -0.1 0.008 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.008 0.05 + vertex -0.1 0.008 0.04 + vertex -0.1 0 0.04 + endloop + endfacet +endsolid minX +solid minZ + facet normal 0 0 -1 + outer loop + vertex -0.1 0 -0.05 + vertex -0.1 0.008 -0.05 + vertex -0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 0.008 -0.05 + vertex -0.09333333 0 -0.05 + vertex -0.1 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 0 -0.05 + vertex -0.09333333 0.008 -0.05 + vertex -0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 0.008 -0.05 + vertex -0.08666667 0 -0.05 + vertex -0.09333333 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 0 -0.05 + vertex -0.08666667 0.008 -0.05 + vertex -0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 0.008 -0.05 + vertex -0.08 0 -0.05 + vertex -0.08666667 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 0 -0.05 + vertex -0.08 0.008 -0.05 + vertex -0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 0.008 -0.05 + vertex -0.07333333 0 -0.05 + vertex -0.08 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 0 -0.05 + vertex -0.07333333 0.008 -0.05 + vertex -0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 0.008 -0.05 + vertex -0.06666667 0 -0.05 + vertex -0.07333333 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 0 -0.05 + vertex -0.06666667 0.008 -0.05 + vertex -0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 0.008 -0.05 + vertex -0.06 0 -0.05 + vertex -0.06666667 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 0 -0.05 + vertex -0.06 0.008 -0.05 + vertex -0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 0.008 -0.05 + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.06 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 0.008 -0.05 + vertex -0.04666667 0.008 -0.05 + vertex -0.04666667 0 -0.05 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -0.04666667 0 -0.05 + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 0.008 -0.05 + vertex -0.04 0.008 -0.05 + vertex -0.04 5.782412e-19 -0.05 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -0.04 5.782412e-19 -0.05 + vertex -0.04666667 0 -0.05 + vertex -0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 5.782412e-19 -0.05 + vertex -0.04 0.008 -0.05 + vertex -0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 0.008 -0.05 + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.04 5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 0.008 -0.05 + vertex -0.02666667 0.008 -0.05 + vertex -0.02666667 0 -0.05 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -0.02666667 0 -0.05 + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 0 -0.05 + vertex -0.02666667 0.008 -0.05 + vertex -0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 0.008 -0.05 + vertex -0.02 0 -0.05 + vertex -0.02666667 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 0 -0.05 + vertex -0.02 0.008 -0.05 + vertex -0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 0.008 -0.05 + vertex -0.01333333 0 -0.05 + vertex -0.02 0 -0.05 + endloop + endfacet +endsolid minZ +solid maxZ + facet normal 0 0 1 + outer loop + vertex -0.1 0 0.05 + vertex -0.09333333 0 0.05 + vertex -0.09333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.008 0.05 + vertex -0.1 0.008 0.05 + vertex -0.1 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0 0.05 + vertex -0.08666667 0 0.05 + vertex -0.08666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.008 0.05 + vertex -0.09333333 0.008 0.05 + vertex -0.09333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0 0.05 + vertex -0.08 0 0.05 + vertex -0.08 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.008 0.05 + vertex -0.08666667 0.008 0.05 + vertex -0.08666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0 0.05 + vertex -0.07333333 0 0.05 + vertex -0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.008 0.05 + vertex -0.08 0.008 0.05 + vertex -0.08 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0 0.05 + vertex -0.06666667 0 0.05 + vertex -0.06666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.008 0.05 + vertex -0.07333333 0.008 0.05 + vertex -0.07333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0 0.05 + vertex -0.06 0 0.05 + vertex -0.06 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.008 0.05 + vertex -0.06666667 0.008 0.05 + vertex -0.06666667 0 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.06 0 0.05 + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.008 0.05 + vertex -0.06 0.008 0.05 + vertex -0.06 0 0.05 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -0.04666667 0 0.05 + vertex -0.04666667 0.008 0.05 + vertex -0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.008 0.05 + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.04666667 0 0.05 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -0.04 5.782412e-19 0.05 + vertex -0.04 0.008 0.05 + vertex -0.04666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.008 0.05 + vertex -0.04666667 0 0.05 + vertex -0.04 5.782412e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.04 5.782412e-19 0.05 + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.008 0.05 + vertex -0.04 0.008 0.05 + vertex -0.04 5.782412e-19 0.05 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -0.02666667 0 0.05 + vertex -0.02666667 0.008 0.05 + vertex -0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.008 0.05 + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.02666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0 0.05 + vertex -0.02 0 0.05 + vertex -0.02 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.008 0.05 + vertex -0.02666667 0.008 0.05 + vertex -0.02666667 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0 0.05 + vertex -0.01333333 0 0.05 + vertex -0.01333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.008 0.05 + vertex -0.02 0.008 0.05 + vertex -0.02 0 0.05 + endloop + endfacet +endsolid maxZ +solid leftSolid_to_bottomAir + facet normal 0 -1 0 + outer loop + vertex -0.1 0 -0.05 + vertex -0.09333333 0 -0.05 + vertex -0.09333333 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 -0.04 + vertex -0.1 0 -0.04 + vertex -0.1 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 -0.05 + vertex -0.08666667 0 -0.05 + vertex -0.08666667 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 -0.04 + vertex -0.09333333 0 -0.04 + vertex -0.09333333 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 -0.05 + vertex -0.08 0 -0.05 + vertex -0.08 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 -0.04 + vertex -0.08666667 0 -0.04 + vertex -0.08666667 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 -0.05 + vertex -0.07333333 0 -0.05 + vertex -0.07333333 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 -0.04 + vertex -0.08 0 -0.04 + vertex -0.08 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 -0.05 + vertex -0.06666667 0 -0.05 + vertex -0.06666667 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 -0.04 + vertex -0.07333333 0 -0.04 + vertex -0.07333333 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 -0.05 + vertex -0.06 0 -0.05 + vertex -0.06 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 -0.04 + vertex -0.06666667 0 -0.04 + vertex -0.06666667 0 -0.05 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 -0.05 + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.05333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.06 0 -0.04 + vertex -0.06 0 -0.05 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.05 + vertex -0.04666667 0 -0.05 + vertex -0.04666667 0 -0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.04 + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.05333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 8.673614e-17 -1 -5.782412e-17 + outer loop + vertex -0.04666667 0 -0.05 + vertex -0.04 5.782412e-19 -0.05 + vertex -0.04 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0 -0.04 + vertex -0.04666667 0 -0.04 + vertex -0.04666667 0 -0.05 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.05 + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.03333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 -5.782412e-17 + outer loop + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.04 0 -0.04 + vertex -0.04 5.782412e-19 -0.05 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.05 + vertex -0.02666667 0 -0.05 + vertex -0.02666667 0 -0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 -0.04 + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.03333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal 0 -1 -5.782412e-17 + outer loop + vertex -0.02666667 0 -0.05 + vertex -0.02 0 -0.05 + vertex -0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.02666667 0 -0.04 + vertex -0.02666667 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 -0.05 + vertex -0.01333333 0 -0.05 + vertex -0.01333333 0 -0.04 + endloop + endfacet + facet normal 8.673614e-17 -1 -5.782412e-17 + outer loop + vertex -0.01333333 0 -0.04 + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.02 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 -0.04 + vertex -0.09333333 0 -0.04 + vertex -0.09333333 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 -0.03 + vertex -0.1 0 -0.03 + vertex -0.1 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 -0.04 + vertex -0.08666667 0 -0.04 + vertex -0.08666667 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 -0.03 + vertex -0.09333333 0 -0.03 + vertex -0.09333333 0 -0.04 + endloop + endfacet + facet normal 0 -1 1.156482e-16 + outer loop + vertex -0.08666667 0 -0.04 + vertex -0.08 0 -0.04 + vertex -0.08 1.156482e-18 -0.03 + endloop + endfacet + facet normal 1.734722e-16 -1 0 + outer loop + vertex -0.08 1.156482e-18 -0.03 + vertex -0.08666667 0 -0.03 + vertex -0.08666667 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 -0.04 + vertex -0.07333333 0 -0.04 + vertex -0.07333333 0 -0.03 + endloop + endfacet + facet normal -1.734722e-16 -1 1.156482e-16 + outer loop + vertex -0.07333333 0 -0.03 + vertex -0.08 1.156482e-18 -0.03 + vertex -0.08 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 -0.04 + vertex -0.06666667 0 -0.04 + vertex -0.06666667 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 -0.03 + vertex -0.07333333 0 -0.03 + vertex -0.07333333 0 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 -0.04 + vertex -0.06 0 -0.04 + vertex -0.06 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 -0.03 + vertex -0.06666667 0 -0.03 + vertex -0.06666667 0 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 -0.04 + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.05333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.06 0 -0.03 + vertex -0.06 0 -0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.04 + vertex -0.04666667 0 -0.04 + vertex -0.04666667 0 -0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.03 + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.05333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex -0.04666667 0 -0.04 + vertex -0.04 0 -0.04 + vertex -0.04 5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.03 + vertex -0.04666667 0 -0.03 + vertex -0.04666667 0 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.04 0 -0.04 + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.03333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -1.734723e-16 -1 5.782412e-17 + outer loop + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.04 5.782412e-19 -0.03 + vertex -0.04 0 -0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 -5.782412e-17 + outer loop + vertex -0.03333333 -5.782412e-19 -0.04 + vertex -0.02666667 0 -0.04 + vertex -0.02666667 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.02666667 0 -0.04 + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -0 -1 -5.782412e-17 + outer loop + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.02666667 0 -0.04 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.02 -5.782412e-19 -0.04 + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0 -0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.01333333 0 -0.03 + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 -0.03 + vertex -0.09333333 0 -0.03 + vertex -0.09333333 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 -0.02 + vertex -0.1 0 -0.02 + vertex -0.1 0 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 -0.03 + vertex -0.08666667 0 -0.03 + vertex -0.08666667 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 -0.02 + vertex -0.09333333 0 -0.02 + vertex -0.09333333 0 -0.03 + endloop + endfacet + facet normal 1.734722e-16 -1 -1.156482e-16 + outer loop + vertex -0.08666667 0 -0.03 + vertex -0.08 1.156482e-18 -0.03 + vertex -0.08 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 -0.02 + vertex -0.08666667 0 -0.02 + vertex -0.08666667 0 -0.03 + endloop + endfacet + facet normal -1.734722e-16 -1 0 + outer loop + vertex -0.08 1.156482e-18 -0.03 + vertex -0.07333333 0 -0.03 + vertex -0.07333333 0 -0.02 + endloop + endfacet + facet normal -0 -1 -1.156482e-16 + outer loop + vertex -0.07333333 0 -0.02 + vertex -0.08 0 -0.02 + vertex -0.08 1.156482e-18 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 -0.03 + vertex -0.06666667 0 -0.03 + vertex -0.06666667 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 -0.02 + vertex -0.07333333 0 -0.02 + vertex -0.07333333 0 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 -0.03 + vertex -0.06 0 -0.03 + vertex -0.06 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 -0.02 + vertex -0.06666667 0 -0.02 + vertex -0.06666667 0 -0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 -0.03 + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.05333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.06 0 -0.02 + vertex -0.06 0 -0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.03 + vertex -0.04666667 0 -0.03 + vertex -0.04666667 0 -0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.02 + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.05333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.03 + vertex -0.04 5.782412e-19 -0.03 + vertex -0.04 5.782412e-19 -0.02 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.02 + vertex -0.04666667 0 -0.02 + vertex -0.04666667 0 -0.03 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.03333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.04 5.782412e-19 -0.02 + vertex -0.04 5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex -0.03333333 -5.782412e-19 -0.03 + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.02666667 0 -0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 -0.02 + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.03333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex -0.02666667 -5.782412e-19 -0.03 + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.02 0 -0.02 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex -0.02 0 -0.02 + vertex -0.02666667 0 -0.02 + vertex -0.02666667 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.02 -5.782412e-19 -0.03 + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0 -0.02 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex -0.01333333 0 -0.02 + vertex -0.02 0 -0.02 + vertex -0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 -0.02 + vertex -0.09333333 0 -0.02 + vertex -0.09333333 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 -0.01 + vertex -0.1 0 -0.01 + vertex -0.1 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 -0.02 + vertex -0.08666667 0 -0.02 + vertex -0.08666667 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 -0.01 + vertex -0.09333333 0 -0.01 + vertex -0.09333333 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 -0.02 + vertex -0.08 0 -0.02 + vertex -0.08 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 -0.01 + vertex -0.08666667 0 -0.01 + vertex -0.08666667 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 -0.02 + vertex -0.07333333 0 -0.02 + vertex -0.07333333 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 -0.01 + vertex -0.08 0 -0.01 + vertex -0.08 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 -0.02 + vertex -0.06666667 0 -0.02 + vertex -0.06666667 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 -0.01 + vertex -0.07333333 0 -0.01 + vertex -0.07333333 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 -0.02 + vertex -0.06 0 -0.02 + vertex -0.06 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 -0.01 + vertex -0.06666667 0 -0.01 + vertex -0.06666667 0 -0.02 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 -0.02 + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.05333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.06 0 -0.01 + vertex -0.06 0 -0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.02 + vertex -0.04666667 0 -0.02 + vertex -0.04666667 0 -0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.01 + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.05333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.02 + vertex -0.04 5.782412e-19 -0.02 + vertex -0.04 5.782412e-19 -0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.01 + vertex -0.04666667 0 -0.01 + vertex -0.04666667 0 -0.02 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.02 + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.03333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.04 5.782412e-19 -0.01 + vertex -0.04 5.782412e-19 -0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.02 + vertex -0.02666667 0 -0.02 + vertex -0.02666667 0 -0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 -0.01 + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.03333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0 -0.02 + vertex -0.02 0 -0.02 + vertex -0.02 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0 -0.01 + vertex -0.02666667 0 -0.01 + vertex -0.02666667 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 -0.02 + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 -0.01 + vertex -0.02 0 -0.01 + vertex -0.02 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 -0.01 + vertex -0.09333333 0 -0.01 + vertex -0.09333333 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 0 + vertex -0.1 0 0 + vertex -0.1 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 -0.01 + vertex -0.08666667 0 -0.01 + vertex -0.08666667 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 0 + vertex -0.09333333 0 0 + vertex -0.09333333 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 0 + vertex -0.08666667 0 -0.01 + vertex -0.08 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 -0.01 + vertex -0.08 0 1.156482e-18 + vertex -0.08666667 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 0 + vertex -0.08 0 1.156482e-18 + vertex -0.08 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 -0.01 + vertex -0.07333333 0 -0.01 + vertex -0.07333333 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 -0.01 + vertex -0.06666667 0 -0.01 + vertex -0.06666667 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 0 + vertex -0.07333333 0 0 + vertex -0.07333333 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 -0.01 + vertex -0.06 0 -0.01 + vertex -0.06 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 0 + vertex -0.06666667 0 0 + vertex -0.06666667 0 -0.01 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 -0.01 + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.05333333 -5.782412e-19 0 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0 + vertex -0.06 0 0 + vertex -0.06 0 -0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 -0.01 + vertex -0.04666667 0 -0.01 + vertex -0.04666667 0 0 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 0 + vertex -0.05333333 -5.782412e-19 0 + vertex -0.05333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 -0.01 + vertex -0.04 5.782412e-19 -0.01 + vertex -0.04 5.782412e-19 0 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 0 + vertex -0.04666667 0 0 + vertex -0.04666667 0 -0.01 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 -0.01 + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.03333333 -5.782412e-19 0 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0 + vertex -0.04 5.782412e-19 0 + vertex -0.04 5.782412e-19 -0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 -0.01 + vertex -0.02666667 0 -0.01 + vertex -0.02666667 0 0 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 0 + vertex -0.03333333 -5.782412e-19 0 + vertex -0.03333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0 -0.01 + vertex -0.02 0 -0.01 + vertex -0.02 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0 0 + vertex -0.02666667 0 0 + vertex -0.02666667 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 -0.01 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 0 + vertex -0.02 0 0 + vertex -0.02 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 0 + vertex -0.09333333 0 0 + vertex -0.09333333 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 0.01 + vertex -0.1 0 0.01 + vertex -0.1 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 0 + vertex -0.08666667 0 0 + vertex -0.08666667 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 0.01 + vertex -0.09333333 0 0.01 + vertex -0.09333333 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 1.156482e-18 + vertex -0.08 0 0.01 + vertex -0.08666667 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 0.01 + vertex -0.08666667 0 0 + vertex -0.08 0 1.156482e-18 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 1.156482e-18 + vertex -0.07333333 0 0 + vertex -0.07333333 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 0.01 + vertex -0.08 0 0.01 + vertex -0.08 0 1.156482e-18 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 0 + vertex -0.06666667 0 0 + vertex -0.06666667 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 0.01 + vertex -0.07333333 0 0.01 + vertex -0.07333333 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 0 + vertex -0.06 0 0 + vertex -0.06 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 0.01 + vertex -0.06666667 0 0.01 + vertex -0.06666667 0 0 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 0 + vertex -0.05333333 -5.782412e-19 0 + vertex -0.05333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.06 0 0.01 + vertex -0.06 0 0 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0 + vertex -0.04666667 0 0 + vertex -0.04666667 0 0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 0.01 + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.05333333 -5.782412e-19 0 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 0 + vertex -0.04 5.782412e-19 0 + vertex -0.04 5.782412e-19 0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.01 + vertex -0.04666667 0 0.01 + vertex -0.04666667 0 0 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 0 + vertex -0.03333333 -5.782412e-19 0 + vertex -0.03333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.04 5.782412e-19 0.01 + vertex -0.04 5.782412e-19 0 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0 + vertex -0.02666667 0 0 + vertex -0.02666667 0 0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 0.01 + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.03333333 -5.782412e-19 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0 0 + vertex -0.02 0 0 + vertex -0.02 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0 0.01 + vertex -0.02666667 0 0.01 + vertex -0.02666667 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 0 + vertex -0.01333333 0 0 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.02 0 0.01 + vertex -0.02 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 0.01 + vertex -0.09333333 0 0.01 + vertex -0.09333333 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 0.02 + vertex -0.1 0 0.02 + vertex -0.1 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 0.01 + vertex -0.08666667 0 0.01 + vertex -0.08666667 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 0.02 + vertex -0.09333333 0 0.02 + vertex -0.09333333 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 0.01 + vertex -0.08 0 0.01 + vertex -0.08 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 0.02 + vertex -0.08666667 0 0.02 + vertex -0.08666667 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 0.01 + vertex -0.07333333 0 0.01 + vertex -0.07333333 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 0.02 + vertex -0.08 0 0.02 + vertex -0.08 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 0.01 + vertex -0.06666667 0 0.01 + vertex -0.06666667 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 0.02 + vertex -0.07333333 0 0.02 + vertex -0.07333333 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 0.01 + vertex -0.06 0 0.01 + vertex -0.06 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 0.02 + vertex -0.06666667 0 0.02 + vertex -0.06666667 0 0.01 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 0.01 + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.05333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.06 0 0.02 + vertex -0.06 0 0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.01 + vertex -0.04666667 0 0.01 + vertex -0.04666667 0 0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 0.02 + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.05333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 0.01 + vertex -0.04 5.782412e-19 0.01 + vertex -0.04 5.782412e-19 0.02 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.02 + vertex -0.04666667 0 0.02 + vertex -0.04666667 0 0.01 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.01 + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.03333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.04 5.782412e-19 0.02 + vertex -0.04 5.782412e-19 0.01 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.01 + vertex -0.02666667 0 0.01 + vertex -0.02666667 0 0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 0.02 + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.03333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0 0.01 + vertex -0.02 0 0.01 + vertex -0.02 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0 0.02 + vertex -0.02666667 0 0.02 + vertex -0.02666667 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 0.01 + vertex -0.01333333 0 0.01 + vertex -0.01333333 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 0.02 + vertex -0.02 0 0.02 + vertex -0.02 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 0.02 + vertex -0.09333333 0 0.02 + vertex -0.09333333 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 0.03 + vertex -0.1 0 0.03 + vertex -0.1 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 0.02 + vertex -0.08666667 0 0.02 + vertex -0.08666667 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 0.03 + vertex -0.09333333 0 0.03 + vertex -0.09333333 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 0.02 + vertex -0.08 0 0.02 + vertex -0.08 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 0.03 + vertex -0.08666667 0 0.03 + vertex -0.08666667 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 0.02 + vertex -0.07333333 0 0.02 + vertex -0.07333333 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 0.03 + vertex -0.08 0 0.03 + vertex -0.08 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 0.02 + vertex -0.06666667 0 0.02 + vertex -0.06666667 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 0.03 + vertex -0.07333333 0 0.03 + vertex -0.07333333 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 0.02 + vertex -0.06 0 0.02 + vertex -0.06 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 0.03 + vertex -0.06666667 0 0.03 + vertex -0.06666667 0 0.02 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 0.02 + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.05333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.06 0 0.03 + vertex -0.06 0 0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.02 + vertex -0.04666667 0 0.02 + vertex -0.04666667 0 0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 0.03 + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.05333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 0.02 + vertex -0.04 5.782412e-19 0.02 + vertex -0.04 5.782412e-19 0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.03 + vertex -0.04666667 0 0.03 + vertex -0.04666667 0 0.02 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.02 + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.03333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.04 5.782412e-19 0.03 + vertex -0.04 5.782412e-19 0.02 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.02 + vertex -0.02666667 0 0.02 + vertex -0.02666667 0 0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 0.03 + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.03333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0 0.02 + vertex -0.02 0 0.02 + vertex -0.02 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0 0.03 + vertex -0.02666667 0 0.03 + vertex -0.02666667 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 0.02 + vertex -0.01333333 0 0.02 + vertex -0.01333333 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 0.03 + vertex -0.02 0 0.03 + vertex -0.02 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 0.03 + vertex -0.09333333 0 0.03 + vertex -0.09333333 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 0.04 + vertex -0.1 0 0.04 + vertex -0.1 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 0.03 + vertex -0.08666667 0 0.03 + vertex -0.08666667 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 0.04 + vertex -0.09333333 0 0.04 + vertex -0.09333333 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 0.03 + vertex -0.08 0 0.03 + vertex -0.08 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 0.04 + vertex -0.08666667 0 0.04 + vertex -0.08666667 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 0.03 + vertex -0.07333333 0 0.03 + vertex -0.07333333 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 0.04 + vertex -0.08 0 0.04 + vertex -0.08 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 0.03 + vertex -0.06666667 0 0.03 + vertex -0.06666667 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 0.04 + vertex -0.07333333 0 0.04 + vertex -0.07333333 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 0.03 + vertex -0.06 0 0.03 + vertex -0.06 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 0.04 + vertex -0.06666667 0 0.04 + vertex -0.06666667 0 0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 0.03 + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.05333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.06 0 0.04 + vertex -0.06 0 0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.03 + vertex -0.04666667 0 0.03 + vertex -0.04666667 0 0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 0.04 + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.05333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 0.03 + vertex -0.04 5.782412e-19 0.03 + vertex -0.04 5.782412e-19 0.04 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.04 + vertex -0.04666667 0 0.04 + vertex -0.04666667 0 0.03 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.03 + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.03333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.04 5.782412e-19 0.04 + vertex -0.04 5.782412e-19 0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 5.782412e-17 + outer loop + vertex -0.03333333 -5.782412e-19 0.03 + vertex -0.02666667 0 0.03 + vertex -0.02666667 5.782412e-19 0.04 + endloop + endfacet + facet normal 1.734725e-16 -1 0 + outer loop + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0 0.03 + vertex -0.02 0 0.03 + vertex -0.02 0 0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 5.782412e-17 + outer loop + vertex -0.02 0 0.04 + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.02666667 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 0.03 + vertex -0.01333333 0 0.03 + vertex -0.01333333 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 0.04 + vertex -0.02 0 0.04 + vertex -0.02 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0 0.04 + vertex -0.09333333 0 0.04 + vertex -0.09333333 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0 0.05 + vertex -0.1 0 0.05 + vertex -0.1 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0 0.04 + vertex -0.08666667 0 0.04 + vertex -0.08666667 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0 0.05 + vertex -0.09333333 0 0.05 + vertex -0.09333333 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0 0.04 + vertex -0.08 0 0.04 + vertex -0.08 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0 0.05 + vertex -0.08666667 0 0.05 + vertex -0.08666667 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0 0.04 + vertex -0.07333333 0 0.04 + vertex -0.07333333 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0 0.05 + vertex -0.08 0 0.05 + vertex -0.08 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0 0.04 + vertex -0.06666667 0 0.04 + vertex -0.06666667 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0 0.05 + vertex -0.07333333 0 0.05 + vertex -0.07333333 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0 0.04 + vertex -0.06 0 0.04 + vertex -0.06 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0 0.05 + vertex -0.06666667 0 0.05 + vertex -0.06666667 0 0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.06 0 0.04 + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.05333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.06 0 0.05 + vertex -0.06 0 0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.05333333 -5.782412e-19 0.04 + vertex -0.04666667 0 0.04 + vertex -0.04666667 0 0.05 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.04666667 0 0.05 + vertex -0.05333333 -5.782412e-19 0.05 + vertex -0.05333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04666667 0 0.04 + vertex -0.04 5.782412e-19 0.04 + vertex -0.04 5.782412e-19 0.05 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.05 + vertex -0.04666667 0 0.05 + vertex -0.04666667 0 0.04 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.04 5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.03333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal -1.734723e-16 -1 0 + outer loop + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.04 5.782412e-19 0.05 + vertex -0.04 5.782412e-19 0.04 + endloop + endfacet + facet normal 1.734725e-16 -1 -5.782412e-17 + outer loop + vertex -0.03333333 -5.782412e-19 0.04 + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.02666667 0 0.05 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex -0.02666667 0 0.05 + vertex -0.03333333 -5.782412e-19 0.05 + vertex -0.03333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex -0.02666667 5.782412e-19 0.04 + vertex -0.02 0 0.04 + vertex -0.02 0 0.05 + endloop + endfacet + facet normal -0 -1 -5.782412e-17 + outer loop + vertex -0.02 0 0.05 + vertex -0.02666667 0 0.05 + vertex -0.02666667 5.782412e-19 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0 0.04 + vertex -0.01333333 0 0.04 + vertex -0.01333333 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0 0.05 + vertex -0.02 0 0.05 + vertex -0.02 0 0.04 + endloop + endfacet +endsolid leftSolid_to_bottomAir +solid leftSolid_to_heater + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 -0.05 + vertex -0.01333333 0.008 -0.05 + vertex -0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 -0.04 + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 -0.03 + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 -0.02 + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 -0.01 + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 0 + vertex -0.01333333 0 0 + vertex -0.01333333 0 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0 + vertex -0.01333333 0.008 0 + vertex -0.01333333 0.008 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0 0.01 + vertex -0.01333333 0 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0.01 + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0.008 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0 0.02 + vertex -0.01333333 0 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0.02 + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0.008 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0 0.03 + vertex -0.01333333 0 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0.03 + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0.008 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0 0.04 + vertex -0.01333333 0 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0 0.04 + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0.008 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -0.01333333 0.008 0.05 + vertex -0.01333333 0 0.05 + vertex -0.01333333 0 0.04 + endloop + endfacet +endsolid leftSolid_to_heater +solid leftSolid_to_topAir + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 -0.05 + vertex -0.1 0.008 -0.04 + vertex -0.09333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.04 + vertex -0.09333333 0.008 -0.05 + vertex -0.1 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.05 + vertex -0.09333333 0.008 -0.04 + vertex -0.08666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.04 + vertex -0.08666667 0.008 -0.05 + vertex -0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.05 + vertex -0.08666667 0.008 -0.04 + vertex -0.08 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.04 + vertex -0.08 0.008 -0.05 + vertex -0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.05 + vertex -0.08 0.008 -0.04 + vertex -0.07333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.04 + vertex -0.07333333 0.008 -0.05 + vertex -0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.05 + vertex -0.07333333 0.008 -0.04 + vertex -0.06666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.04 + vertex -0.06666667 0.008 -0.05 + vertex -0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.05 + vertex -0.06666667 0.008 -0.04 + vertex -0.06 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.04 + vertex -0.06 0.008 -0.05 + vertex -0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.05 + vertex -0.06 0.008 -0.04 + vertex -0.05333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.04 + vertex -0.05333333 0.008 -0.05 + vertex -0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.05 + vertex -0.05333333 0.008 -0.04 + vertex -0.04666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.04 + vertex -0.04666667 0.008 -0.05 + vertex -0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.05 + vertex -0.04666667 0.008 -0.04 + vertex -0.04 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.04 + vertex -0.04 0.008 -0.05 + vertex -0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.05 + vertex -0.04 0.008 -0.04 + vertex -0.03333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.04 + vertex -0.03333333 0.008 -0.05 + vertex -0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.05 + vertex -0.03333333 0.008 -0.04 + vertex -0.02666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.04 + vertex -0.02666667 0.008 -0.05 + vertex -0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.05 + vertex -0.02666667 0.008 -0.04 + vertex -0.02 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.04 + vertex -0.02 0.008 -0.05 + vertex -0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.05 + vertex -0.02 0.008 -0.04 + vertex -0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0.008 -0.05 + vertex -0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 -0.04 + vertex -0.1 0.008 -0.03 + vertex -0.09333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.03 + vertex -0.09333333 0.008 -0.04 + vertex -0.1 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.04 + vertex -0.09333333 0.008 -0.03 + vertex -0.08666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.03 + vertex -0.08666667 0.008 -0.04 + vertex -0.09333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.04 + vertex -0.08666667 0.008 -0.03 + vertex -0.08 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.03 + vertex -0.08 0.008 -0.04 + vertex -0.08666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.04 + vertex -0.08 0.008 -0.03 + vertex -0.07333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.03 + vertex -0.07333333 0.008 -0.04 + vertex -0.08 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.04 + vertex -0.07333333 0.008 -0.03 + vertex -0.06666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.03 + vertex -0.06666667 0.008 -0.04 + vertex -0.07333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.04 + vertex -0.06666667 0.008 -0.03 + vertex -0.06 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.03 + vertex -0.06 0.008 -0.04 + vertex -0.06666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.04 + vertex -0.06 0.008 -0.03 + vertex -0.05333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.03 + vertex -0.05333333 0.008 -0.04 + vertex -0.06 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.04 + vertex -0.05333333 0.008 -0.03 + vertex -0.04666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.03 + vertex -0.04666667 0.008 -0.04 + vertex -0.05333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.04 + vertex -0.04666667 0.008 -0.03 + vertex -0.04 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.03 + vertex -0.04 0.008 -0.04 + vertex -0.04666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.04 + vertex -0.04 0.008 -0.03 + vertex -0.03333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.03 + vertex -0.03333333 0.008 -0.04 + vertex -0.04 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.04 + vertex -0.03333333 0.008 -0.03 + vertex -0.02666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.03 + vertex -0.02666667 0.008 -0.04 + vertex -0.03333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.04 + vertex -0.02666667 0.008 -0.03 + vertex -0.02 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.03 + vertex -0.02 0.008 -0.04 + vertex -0.02666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.04 + vertex -0.02 0.008 -0.03 + vertex -0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0.008 -0.04 + vertex -0.02 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 -0.03 + vertex -0.1 0.008 -0.02 + vertex -0.09333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.02 + vertex -0.09333333 0.008 -0.03 + vertex -0.1 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.03 + vertex -0.09333333 0.008 -0.02 + vertex -0.08666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.02 + vertex -0.08666667 0.008 -0.03 + vertex -0.09333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.03 + vertex -0.08666667 0.008 -0.02 + vertex -0.08 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.02 + vertex -0.08 0.008 -0.03 + vertex -0.08666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.03 + vertex -0.08 0.008 -0.02 + vertex -0.07333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.02 + vertex -0.07333333 0.008 -0.03 + vertex -0.08 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.03 + vertex -0.07333333 0.008 -0.02 + vertex -0.06666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.02 + vertex -0.06666667 0.008 -0.03 + vertex -0.07333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.03 + vertex -0.06666667 0.008 -0.02 + vertex -0.06 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.02 + vertex -0.06 0.008 -0.03 + vertex -0.06666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.03 + vertex -0.06 0.008 -0.02 + vertex -0.05333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.02 + vertex -0.05333333 0.008 -0.03 + vertex -0.06 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.03 + vertex -0.05333333 0.008 -0.02 + vertex -0.04666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.02 + vertex -0.04666667 0.008 -0.03 + vertex -0.05333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.03 + vertex -0.04666667 0.008 -0.02 + vertex -0.04 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.02 + vertex -0.04 0.008 -0.03 + vertex -0.04666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.03 + vertex -0.04 0.008 -0.02 + vertex -0.03333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.02 + vertex -0.03333333 0.008 -0.03 + vertex -0.04 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.03 + vertex -0.03333333 0.008 -0.02 + vertex -0.02666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.02 + vertex -0.02666667 0.008 -0.03 + vertex -0.03333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.03 + vertex -0.02666667 0.008 -0.02 + vertex -0.02 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.02 + vertex -0.02 0.008 -0.03 + vertex -0.02666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.03 + vertex -0.02 0.008 -0.02 + vertex -0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0.008 -0.03 + vertex -0.02 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 -0.02 + vertex -0.1 0.008 -0.01 + vertex -0.09333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.01 + vertex -0.09333333 0.008 -0.02 + vertex -0.1 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.02 + vertex -0.09333333 0.008 -0.01 + vertex -0.08666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.01 + vertex -0.08666667 0.008 -0.02 + vertex -0.09333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.02 + vertex -0.08666667 0.008 -0.01 + vertex -0.08 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.01 + vertex -0.08 0.008 -0.02 + vertex -0.08666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.02 + vertex -0.08 0.008 -0.01 + vertex -0.07333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.01 + vertex -0.07333333 0.008 -0.02 + vertex -0.08 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.02 + vertex -0.07333333 0.008 -0.01 + vertex -0.06666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.01 + vertex -0.06666667 0.008 -0.02 + vertex -0.07333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.02 + vertex -0.06666667 0.008 -0.01 + vertex -0.06 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.01 + vertex -0.06 0.008 -0.02 + vertex -0.06666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.02 + vertex -0.06 0.008 -0.01 + vertex -0.05333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.01 + vertex -0.05333333 0.008 -0.02 + vertex -0.06 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.02 + vertex -0.05333333 0.008 -0.01 + vertex -0.04666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.01 + vertex -0.04666667 0.008 -0.02 + vertex -0.05333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.02 + vertex -0.04666667 0.008 -0.01 + vertex -0.04 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.01 + vertex -0.04 0.008 -0.02 + vertex -0.04666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.02 + vertex -0.04 0.008 -0.01 + vertex -0.03333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.01 + vertex -0.03333333 0.008 -0.02 + vertex -0.04 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.02 + vertex -0.03333333 0.008 -0.01 + vertex -0.02666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.01 + vertex -0.02666667 0.008 -0.02 + vertex -0.03333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.02 + vertex -0.02666667 0.008 -0.01 + vertex -0.02 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.01 + vertex -0.02 0.008 -0.02 + vertex -0.02666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.02 + vertex -0.02 0.008 -0.01 + vertex -0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0.008 -0.02 + vertex -0.02 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 -0.01 + vertex -0.1 0.008 0 + vertex -0.09333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0 + vertex -0.09333333 0.008 -0.01 + vertex -0.1 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 -0.01 + vertex -0.09333333 0.008 0 + vertex -0.08666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0 + vertex -0.08666667 0.008 -0.01 + vertex -0.09333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 -0.01 + vertex -0.08666667 0.008 0 + vertex -0.08 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0 + vertex -0.08 0.008 -0.01 + vertex -0.08666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 -0.01 + vertex -0.08 0.008 0 + vertex -0.07333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.07333333 0.008 -0.01 + vertex -0.08 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 -0.01 + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.06666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0 + vertex -0.06666667 0.008 -0.01 + vertex -0.07333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 -0.01 + vertex -0.06666667 0.008 0 + vertex -0.06 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0 + vertex -0.06 0.008 -0.01 + vertex -0.06666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 -0.01 + vertex -0.06 0.008 0 + vertex -0.05333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0 + vertex -0.05333333 0.008 -0.01 + vertex -0.06 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 -0.01 + vertex -0.05333333 0.008 0 + vertex -0.04666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0 + vertex -0.04666667 0.008 -0.01 + vertex -0.05333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 -0.01 + vertex -0.04666667 0.008 0 + vertex -0.04 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0 + vertex -0.04 0.008 -0.01 + vertex -0.04666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 -0.01 + vertex -0.04 0.008 0 + vertex -0.03333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.03333333 0.008 -0.01 + vertex -0.04 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.02666667 0.008 -0.01 + vertex -0.03333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 -0.01 + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.02666667 0.008 -5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 -0.01 + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.02 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0 + vertex -0.02 0.008 -0.01 + vertex -0.02666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 -0.01 + vertex -0.02 0.008 0 + vertex -0.01333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0 + vertex -0.01333333 0.008 -0.01 + vertex -0.02 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 0 + vertex -0.1 0.008 0.01 + vertex -0.09333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.01 + vertex -0.09333333 0.008 0 + vertex -0.1 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0 + vertex -0.09333333 0.008 0.01 + vertex -0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.01 + vertex -0.08666667 0.008 0 + vertex -0.09333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0 + vertex -0.08666667 0.008 0.01 + vertex -0.08 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.01 + vertex -0.08 0.008 0 + vertex -0.08666667 0.008 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.08 0.008 0.01 + vertex -0.07333333 0.008 0.01 + vertex -0.07333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.08 0.008 0 + vertex -0.08 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.07333333 0.008 0.01 + vertex -0.06666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.01 + vertex -0.06666667 0.008 0 + vertex -0.07333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0 + vertex -0.06666667 0.008 0.01 + vertex -0.06 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.01 + vertex -0.06 0.008 0 + vertex -0.06666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0 + vertex -0.06 0.008 0.01 + vertex -0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.01 + vertex -0.05333333 0.008 0 + vertex -0.06 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0 + vertex -0.05333333 0.008 0.01 + vertex -0.04666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.01 + vertex -0.04666667 0.008 0 + vertex -0.05333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0 + vertex -0.04666667 0.008 0.01 + vertex -0.04 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.01 + vertex -0.04 0.008 0 + vertex -0.04666667 0.008 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.04 0.008 0.01 + vertex -0.03333333 0.008 0.01 + vertex -0.03333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.04 0.008 0 + vertex -0.04 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.03333333 0.008 0.01 + vertex -0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.01 + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.03333333 0.008 5.782412e-19 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.02666667 0.008 0.01 + vertex -0.02 0.008 0.01 + vertex -0.02 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0 + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0 + vertex -0.02 0.008 0.01 + vertex -0.01333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0.008 0 + vertex -0.02 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 0.01 + vertex -0.1 0.008 0.02 + vertex -0.09333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.02 + vertex -0.09333333 0.008 0.01 + vertex -0.1 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.01 + vertex -0.09333333 0.008 0.02 + vertex -0.08666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.02 + vertex -0.08666667 0.008 0.01 + vertex -0.09333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.01 + vertex -0.08666667 0.008 0.02 + vertex -0.08 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.02 + vertex -0.08 0.008 0.01 + vertex -0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.01 + vertex -0.08 0.008 0.02 + vertex -0.07333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.02 + vertex -0.07333333 0.008 0.01 + vertex -0.08 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.01 + vertex -0.07333333 0.008 0.02 + vertex -0.06666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.02 + vertex -0.06666667 0.008 0.01 + vertex -0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.01 + vertex -0.06666667 0.008 0.02 + vertex -0.06 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.02 + vertex -0.06 0.008 0.01 + vertex -0.06666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.01 + vertex -0.06 0.008 0.02 + vertex -0.05333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.02 + vertex -0.05333333 0.008 0.01 + vertex -0.06 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.01 + vertex -0.05333333 0.008 0.02 + vertex -0.04666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.02 + vertex -0.04666667 0.008 0.01 + vertex -0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.01 + vertex -0.04666667 0.008 0.02 + vertex -0.04 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.02 + vertex -0.04 0.008 0.01 + vertex -0.04666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.01 + vertex -0.04 0.008 0.02 + vertex -0.03333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.02 + vertex -0.03333333 0.008 0.01 + vertex -0.04 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.01 + vertex -0.03333333 0.008 0.02 + vertex -0.02666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.02 + vertex -0.02666667 0.008 0.01 + vertex -0.03333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.01 + vertex -0.02666667 0.008 0.02 + vertex -0.02 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.02 + vertex -0.02 0.008 0.01 + vertex -0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.01 + vertex -0.02 0.008 0.02 + vertex -0.01333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0.008 0.01 + vertex -0.02 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 0.02 + vertex -0.1 0.008 0.03 + vertex -0.09333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.03 + vertex -0.09333333 0.008 0.02 + vertex -0.1 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.02 + vertex -0.09333333 0.008 0.03 + vertex -0.08666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.03 + vertex -0.08666667 0.008 0.02 + vertex -0.09333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.02 + vertex -0.08666667 0.008 0.03 + vertex -0.08 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.03 + vertex -0.08 0.008 0.02 + vertex -0.08666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.02 + vertex -0.08 0.008 0.03 + vertex -0.07333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.03 + vertex -0.07333333 0.008 0.02 + vertex -0.08 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.02 + vertex -0.07333333 0.008 0.03 + vertex -0.06666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.03 + vertex -0.06666667 0.008 0.02 + vertex -0.07333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.02 + vertex -0.06666667 0.008 0.03 + vertex -0.06 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.03 + vertex -0.06 0.008 0.02 + vertex -0.06666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.02 + vertex -0.06 0.008 0.03 + vertex -0.05333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.03 + vertex -0.05333333 0.008 0.02 + vertex -0.06 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.02 + vertex -0.05333333 0.008 0.03 + vertex -0.04666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.03 + vertex -0.04666667 0.008 0.02 + vertex -0.05333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.02 + vertex -0.04666667 0.008 0.03 + vertex -0.04 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.03 + vertex -0.04 0.008 0.02 + vertex -0.04666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.02 + vertex -0.04 0.008 0.03 + vertex -0.03333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.03 + vertex -0.03333333 0.008 0.02 + vertex -0.04 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.02 + vertex -0.03333333 0.008 0.03 + vertex -0.02666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.03 + vertex -0.02666667 0.008 0.02 + vertex -0.03333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.02 + vertex -0.02666667 0.008 0.03 + vertex -0.02 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.03 + vertex -0.02 0.008 0.02 + vertex -0.02666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.02 + vertex -0.02 0.008 0.03 + vertex -0.01333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0.008 0.02 + vertex -0.02 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 0.03 + vertex -0.1 0.008 0.04 + vertex -0.09333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.04 + vertex -0.09333333 0.008 0.03 + vertex -0.1 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.03 + vertex -0.09333333 0.008 0.04 + vertex -0.08666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.04 + vertex -0.08666667 0.008 0.03 + vertex -0.09333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.03 + vertex -0.08666667 0.008 0.04 + vertex -0.08 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.04 + vertex -0.08 0.008 0.03 + vertex -0.08666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.03 + vertex -0.08 0.008 0.04 + vertex -0.07333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.04 + vertex -0.07333333 0.008 0.03 + vertex -0.08 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.03 + vertex -0.07333333 0.008 0.04 + vertex -0.06666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.04 + vertex -0.06666667 0.008 0.03 + vertex -0.07333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.03 + vertex -0.06666667 0.008 0.04 + vertex -0.06 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.04 + vertex -0.06 0.008 0.03 + vertex -0.06666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.03 + vertex -0.06 0.008 0.04 + vertex -0.05333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.04 + vertex -0.05333333 0.008 0.03 + vertex -0.06 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.03 + vertex -0.05333333 0.008 0.04 + vertex -0.04666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.04 + vertex -0.04666667 0.008 0.03 + vertex -0.05333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.03 + vertex -0.04666667 0.008 0.04 + vertex -0.04 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.04 + vertex -0.04 0.008 0.03 + vertex -0.04666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.03 + vertex -0.04 0.008 0.04 + vertex -0.03333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.04 + vertex -0.03333333 0.008 0.03 + vertex -0.04 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.03 + vertex -0.03333333 0.008 0.04 + vertex -0.02666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.04 + vertex -0.02666667 0.008 0.03 + vertex -0.03333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.03 + vertex -0.02666667 0.008 0.04 + vertex -0.02 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.04 + vertex -0.02 0.008 0.03 + vertex -0.02666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.03 + vertex -0.02 0.008 0.04 + vertex -0.01333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0.008 0.03 + vertex -0.02 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.008 0.04 + vertex -0.1 0.008 0.05 + vertex -0.09333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.05 + vertex -0.09333333 0.008 0.04 + vertex -0.1 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.008 0.04 + vertex -0.09333333 0.008 0.05 + vertex -0.08666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.05 + vertex -0.08666667 0.008 0.04 + vertex -0.09333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.008 0.04 + vertex -0.08666667 0.008 0.05 + vertex -0.08 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.05 + vertex -0.08 0.008 0.04 + vertex -0.08666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.008 0.04 + vertex -0.08 0.008 0.05 + vertex -0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.05 + vertex -0.07333333 0.008 0.04 + vertex -0.08 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.008 0.04 + vertex -0.07333333 0.008 0.05 + vertex -0.06666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.05 + vertex -0.06666667 0.008 0.04 + vertex -0.07333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.008 0.04 + vertex -0.06666667 0.008 0.05 + vertex -0.06 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.05 + vertex -0.06 0.008 0.04 + vertex -0.06666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.008 0.04 + vertex -0.06 0.008 0.05 + vertex -0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.05 + vertex -0.05333333 0.008 0.04 + vertex -0.06 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.008 0.04 + vertex -0.05333333 0.008 0.05 + vertex -0.04666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.05 + vertex -0.04666667 0.008 0.04 + vertex -0.05333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.008 0.04 + vertex -0.04666667 0.008 0.05 + vertex -0.04 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.05 + vertex -0.04 0.008 0.04 + vertex -0.04666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.008 0.04 + vertex -0.04 0.008 0.05 + vertex -0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.05 + vertex -0.03333333 0.008 0.04 + vertex -0.04 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.008 0.04 + vertex -0.03333333 0.008 0.05 + vertex -0.02666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.05 + vertex -0.02666667 0.008 0.04 + vertex -0.03333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.008 0.04 + vertex -0.02666667 0.008 0.05 + vertex -0.02 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.05 + vertex -0.02 0.008 0.04 + vertex -0.02666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.008 0.04 + vertex -0.02 0.008 0.05 + vertex -0.01333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.008 0.05 + vertex -0.01333333 0.008 0.04 + vertex -0.02 0.008 0.04 + endloop + endfacet +endsolid leftSolid_to_topAir diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/rightSolid.stl b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/rightSolid.stl new file mode 100644 index 0000000000000000000000000000000000000000..35d7ba781aac003d0bec68b81f3720ac99c15a01 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/rightSolid.stl @@ -0,0 +1,4296 @@ +solid maxX + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.05 + vertex 0.1 0.008 -0.05 + vertex 0.1 0.008 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.04 + vertex 0.1 0 -0.04 + vertex 0.1 0 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.04 + vertex 0.1 0.008 -0.04 + vertex 0.1 0.008 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.03 + vertex 0.1 0 -0.03 + vertex 0.1 0 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.03 + vertex 0.1 0.008 -0.03 + vertex 0.1 0.008 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.02 + vertex 0.1 0 -0.02 + vertex 0.1 0 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.02 + vertex 0.1 0.008 -0.02 + vertex 0.1 0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.01 + vertex 0.1 0 -0.01 + vertex 0.1 0 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 -0.01 + vertex 0.1 0.008 -0.01 + vertex 0.1 0.008 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0 + vertex 0.1 0 0 + vertex 0.1 0 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0 + vertex 0.1 0.008 0 + vertex 0.1 0.008 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.01 + vertex 0.1 0 0.01 + vertex 0.1 0 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.01 + vertex 0.1 0.008 0.01 + vertex 0.1 0.008 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.02 + vertex 0.1 0 0.02 + vertex 0.1 0 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.02 + vertex 0.1 0.008 0.02 + vertex 0.1 0.008 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.03 + vertex 0.1 0 0.03 + vertex 0.1 0 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.03 + vertex 0.1 0.008 0.03 + vertex 0.1 0.008 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.04 + vertex 0.1 0 0.04 + vertex 0.1 0 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0 0.04 + vertex 0.1 0.008 0.04 + vertex 0.1 0.008 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.05 + vertex 0.1 0 0.05 + vertex 0.1 0 0.04 + endloop + endfacet +endsolid maxX +solid minZ + facet normal 0 0 -1 + outer loop + vertex 0.01333333 0 -0.05 + vertex 0.01333333 0.008 -0.05 + vertex 0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 0.008 -0.05 + vertex 0.02 0 -0.05 + vertex 0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 0 -0.05 + vertex 0.02 0.008 -0.05 + vertex 0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 0.008 -0.05 + vertex 0.02666667 0 -0.05 + vertex 0.02 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 0 -0.05 + vertex 0.02666667 0.008 -0.05 + vertex 0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 0.008 -0.05 + vertex 0.03333333 0 -0.05 + vertex 0.02666667 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 0 -0.05 + vertex 0.03333333 0.008 -0.05 + vertex 0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 0.008 -0.05 + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.03333333 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 0.008 -0.05 + vertex 0.04666667 0.008 -0.05 + vertex 0.04666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.04666667 0.008 -0.05 + vertex 0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 0.008 -0.05 + vertex 0.05333333 0 -0.05 + vertex 0.04666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 0 -0.05 + vertex 0.05333333 0.008 -0.05 + vertex 0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 0.008 -0.05 + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.05333333 0 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.06 0.008 -0.05 + vertex 0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 0.008 -0.05 + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.06 -2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.06666667 0.008 -0.05 + vertex 0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 0.008 -0.05 + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.06666667 -4.336809e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 0.008 -0.05 + vertex 0.08 0.008 -0.05 + vertex 0.08 4.336809e-19 -0.05 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 0.08 4.336809e-19 -0.05 + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 4.336809e-19 -0.05 + vertex 0.08 0.008 -0.05 + vertex 0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 0.008 -0.05 + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.08 4.336809e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.08666667 0.008 -0.05 + vertex 0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 0.008 -0.05 + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.08666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.09333333 0.008 -0.05 + vertex 0.1 0.008 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 0.008 -0.05 + vertex 0.1 0 -0.05 + vertex 0.09333333 1.445603e-19 -0.05 + endloop + endfacet +endsolid minZ +solid maxZ + facet normal 0 0 1 + outer loop + vertex 0.01333333 0 0.05 + vertex 0.02 0 0.05 + vertex 0.02 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.008 0.05 + vertex 0.01333333 0.008 0.05 + vertex 0.01333333 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0 0.05 + vertex 0.02666667 0 0.05 + vertex 0.02666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.008 0.05 + vertex 0.02 0.008 0.05 + vertex 0.02 0 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0 0.05 + vertex 0.03333333 0 0.05 + vertex 0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.008 0.05 + vertex 0.02666667 0.008 0.05 + vertex 0.02666667 0 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.03333333 0 0.05 + vertex 0.04 -2.891206e-19 0.05 + vertex 0.04 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.008 0.05 + vertex 0.03333333 0.008 0.05 + vertex 0.03333333 0 0.05 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.04666667 0.008 0.05 + vertex 0.04 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.008 0.05 + vertex 0.04 -2.891206e-19 0.05 + vertex 0.04666667 2.891206e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.05333333 0 0.05 + vertex 0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.008 0.05 + vertex 0.04666667 0.008 0.05 + vertex 0.04666667 2.891206e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.05333333 0 0.05 + vertex 0.06 -2.891206e-19 0.05 + vertex 0.06 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.008 0.05 + vertex 0.05333333 0.008 0.05 + vertex 0.05333333 0 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.06 -2.891206e-19 0.05 + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.06666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.008 0.05 + vertex 0.06 0.008 0.05 + vertex 0.06 -2.891206e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.008 0.05 + vertex 0.06666667 0.008 0.05 + vertex 0.06666667 -4.336809e-19 0.05 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 0.08 4.336809e-19 0.05 + vertex 0.08 0.008 0.05 + vertex 0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.008 0.05 + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.08 4.336809e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.08 4.336809e-19 0.05 + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.08666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.008 0.05 + vertex 0.08 0.008 0.05 + vertex 0.08 4.336809e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.09333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.008 0.05 + vertex 0.08666667 0.008 0.05 + vertex 0.08666667 2.891206e-19 0.05 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.1 0 0.05 + vertex 0.1 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 0.008 0.05 + vertex 0.09333333 0.008 0.05 + vertex 0.09333333 1.445603e-19 0.05 + endloop + endfacet +endsolid maxZ +solid rightSolid_to_bottomAir + facet normal 0 -1 -5.782412e-17 + outer loop + vertex 0.01333333 0 -0.05 + vertex 0.02 0 -0.05 + vertex 0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 -0.05 + vertex 0.02666667 0 -0.05 + vertex 0.02666667 0 -0.04 + endloop + endfacet + facet normal 8.673614e-17 -1 -5.782412e-17 + outer loop + vertex 0.02666667 0 -0.04 + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.02 0 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 -0.05 + vertex 0.03333333 0 -0.05 + vertex 0.03333333 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 -0.04 + vertex 0.02666667 0 -0.04 + vertex 0.02666667 0 -0.05 + endloop + endfacet + facet normal -4.336807e-17 -1 2.891206e-17 + outer loop + vertex 0.03333333 0 -0.05 + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.04 0 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0 -0.04 + vertex 0.03333333 0 -0.04 + vertex 0.03333333 0 -0.05 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.05 + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.04666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal 4.336807e-17 -1 2.891206e-17 + outer loop + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.04 0 -0.04 + vertex 0.04 -2.891206e-19 -0.05 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 -0.05 + vertex 0.05333333 0 -0.05 + vertex 0.05333333 0 -0.04 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.05333333 0 -0.04 + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.04666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 -0.05 + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.06 -2.891206e-19 -0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.05333333 0 -0.04 + vertex 0.05333333 0 -0.05 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.05 + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.06666667 -4.336809e-19 -0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.06 -2.891206e-19 -0.05 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.05 + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.07333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.05 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.05 + vertex 0.08 4.336809e-19 -0.05 + vertex 0.08 4.336809e-19 -0.04 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.05 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.05 + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.08666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.08 4.336809e-19 -0.04 + vertex 0.08 4.336809e-19 -0.05 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.05 + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.09333333 1.445603e-19 -0.04 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.05 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.05 + vertex 0.1 0 -0.05 + vertex 0.1 0 -0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 -0.04 + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.09333333 1.445603e-19 -0.05 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex 0.01333333 0 -0.04 + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0 -0.04 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.02 -5.782412e-19 -0.04 + vertex 0.02666667 0 -0.04 + vertex 0.02666667 0 -0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.02666667 0 -0.03 + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.02 -5.782412e-19 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 -0.04 + vertex 0.03333333 0 -0.04 + vertex 0.03333333 0 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 -0.03 + vertex 0.02666667 0 -0.03 + vertex 0.02666667 0 -0.04 + endloop + endfacet + facet normal 0 -1 -2.891206e-17 + outer loop + vertex 0.03333333 0 -0.04 + vertex 0.04 0 -0.04 + vertex 0.04 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.03333333 0 -0.03 + vertex 0.03333333 0 -0.04 + endloop + endfacet + facet normal 4.336807e-17 -1 -5.782412e-17 + outer loop + vertex 0.04 0 -0.04 + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.04666667 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -0 -1 -2.891206e-17 + outer loop + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.04 0 -0.04 + endloop + endfacet + facet normal -4.336813e-17 -1 2.891206e-17 + outer loop + vertex 0.04666667 2.891206e-19 -0.04 + vertex 0.05333333 0 -0.04 + vertex 0.05333333 2.891206e-19 -0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 -5.782412e-17 + outer loop + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.04666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 -0.04 + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.06 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 2.891206e-17 + outer loop + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.05333333 0 -0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.06666667 -4.336809e-19 -0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.04 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.07333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.04 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.04 + vertex 0.08 4.336809e-19 -0.04 + vertex 0.08 4.336809e-19 -0.03 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.08666667 2.891206e-19 -0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.08 4.336809e-19 -0.03 + vertex 0.08 4.336809e-19 -0.04 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.04 + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.09333333 1.445603e-19 -0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.04 + vertex 0.1 0 -0.04 + vertex 0.1 0 -0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 -0.03 + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.09333333 1.445603e-19 -0.04 + endloop + endfacet + facet normal -8.673614e-17 -1 5.782412e-17 + outer loop + vertex 0.01333333 0 -0.03 + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.02 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 -0.02 + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0 -0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.02 -5.782412e-19 -0.03 + vertex 0.02666667 0 -0.03 + vertex 0.02666667 0 -0.02 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex 0.02666667 0 -0.02 + vertex 0.02 0 -0.02 + vertex 0.02 -5.782412e-19 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 -0.03 + vertex 0.03333333 0 -0.03 + vertex 0.03333333 0 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 -0.02 + vertex 0.02666667 0 -0.02 + vertex 0.02666667 0 -0.03 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 -0.03 + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.04 -2.891206e-19 -0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.03333333 0 -0.02 + vertex 0.03333333 0 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.03 + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.04666667 -2.891206e-19 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.04 -2.891206e-19 -0.03 + endloop + endfacet + facet normal 8.673627e-17 -1 -2.891206e-17 + outer loop + vertex 0.04666667 -2.891206e-19 -0.03 + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.05333333 0 -0.02 + endloop + endfacet + facet normal 4.336813e-17 -1 0 + outer loop + vertex 0.05333333 0 -0.02 + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.04666667 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -8.673614e-17 -1 0 + outer loop + vertex 0.05333333 2.891206e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.06 -2.891206e-19 -0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 -2.891206e-17 + outer loop + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.05333333 0 -0.02 + vertex 0.05333333 2.891206e-19 -0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.06666667 -4.336809e-19 -0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.06 -2.891206e-19 -0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.07333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.03 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.03 + vertex 0.08 4.336809e-19 -0.03 + vertex 0.08 4.336809e-19 -0.02 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.08666667 2.891206e-19 -0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.08 4.336809e-19 -0.02 + vertex 0.08 4.336809e-19 -0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.03 + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.09333333 1.445603e-19 -0.02 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.03 + vertex 0.1 0 -0.03 + vertex 0.1 0 -0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 -0.02 + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.09333333 1.445603e-19 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 -0.02 + vertex 0.02 0 -0.02 + vertex 0.02 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 -0.01 + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 -0.02 + vertex 0.02666667 0 -0.02 + vertex 0.02666667 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0 -0.01 + vertex 0.02 0 -0.01 + vertex 0.02 0 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 -0.02 + vertex 0.03333333 0 -0.02 + vertex 0.03333333 0 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 -0.01 + vertex 0.02666667 0 -0.01 + vertex 0.02666667 0 -0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 -0.02 + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.04 -2.891206e-19 -0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.03333333 0 -0.01 + vertex 0.03333333 0 -0.02 + endloop + endfacet + facet normal 0 -1 5.782412e-17 + outer loop + vertex 0.04 -2.891206e-19 -0.02 + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.04666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.04 -2.891206e-19 -0.02 + endloop + endfacet + facet normal 4.336813e-17 -1 0 + outer loop + vertex 0.04666667 -2.891206e-19 -0.02 + vertex 0.05333333 0 -0.02 + vertex 0.05333333 0 -0.01 + endloop + endfacet + facet normal -4.336813e-17 -1 5.782412e-17 + outer loop + vertex 0.05333333 0 -0.01 + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.04666667 -2.891206e-19 -0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 -0.02 + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.06 -2.891206e-19 -0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.05333333 0 -0.01 + vertex 0.05333333 0 -0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.06666667 -4.336809e-19 -0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.06 -2.891206e-19 -0.02 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.07333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.06666667 -4.336809e-19 -0.02 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.02 + vertex 0.08 4.336809e-19 -0.02 + vertex 0.08 4.336809e-19 -0.01 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.08666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.08 4.336809e-19 -0.01 + vertex 0.08 4.336809e-19 -0.02 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.02 + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.09333333 1.445603e-19 -0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.08666667 2.891206e-19 -0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.02 + vertex 0.1 0 -0.02 + vertex 0.1 0 -0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 -0.01 + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.09333333 1.445603e-19 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.02 0 -0.01 + vertex 0.02 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 0 + vertex 0.01333333 0 0 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 -0.01 + vertex 0.02666667 0 -0.01 + vertex 0.02666667 0 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 5.782412e-19 + vertex 0.02 0 0 + vertex 0.02 0 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 -0.01 + vertex 0.03333333 0 -0.01 + vertex 0.03333333 0 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 0 + vertex 0.02666667 0 5.782412e-19 + vertex 0.02666667 0 -0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 -0.01 + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.04 -2.891206e-19 -5.782412e-19 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.03333333 0 0 + vertex 0.03333333 0 -0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 -0.01 + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.04666667 2.891206e-19 0 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0 + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.04 -2.891206e-19 -0.01 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 -0.01 + vertex 0.05333333 0 -0.01 + vertex 0.05333333 0 -2.891206e-19 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.05333333 0 -2.891206e-19 + vertex 0.04666667 2.891206e-19 0 + vertex 0.04666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 -0.01 + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.06 -2.891206e-19 5.782412e-19 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.05333333 0 -2.891206e-19 + vertex 0.05333333 0 -0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 -0.01 + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.06666667 -4.336809e-19 0 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0 + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.06 -2.891206e-19 -0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.06666667 -4.336809e-19 0 + vertex 0.06666667 -4.336809e-19 -0.01 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 -0.01 + vertex 0.08 4.336809e-19 -0.01 + vertex 0.08 4.336809e-19 2.891206e-19 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.07333333 -5.782412e-19 -0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 -0.01 + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.08 4.336809e-19 -0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 -0.01 + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.09333333 1.445603e-19 4.698209e-19 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.08666667 2.891206e-19 -0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 -0.01 + vertex 0.1 0 -0.01 + vertex 0.1 0 0 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 0 + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.09333333 1.445603e-19 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 0 + vertex 0.02 0 0 + vertex 0.02 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 0.01 + vertex 0.01333333 0 0.01 + vertex 0.01333333 0 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 5.782412e-19 + vertex 0.02666667 0 0.01 + vertex 0.02 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 0.01 + vertex 0.02 0 0 + vertex 0.02666667 0 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 5.782412e-19 + vertex 0.03333333 0 0 + vertex 0.03333333 0 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 0.01 + vertex 0.02666667 0 0.01 + vertex 0.02666667 0 5.782412e-19 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 0 + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.04 -2.891206e-19 0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.01 + vertex 0.03333333 0 0.01 + vertex 0.03333333 0 0 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0 + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.04 -2.891206e-19 0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.01 + vertex 0.04 -2.891206e-19 -5.782412e-19 + vertex 0.04666667 2.891206e-19 0 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0 + vertex 0.05333333 0 -2.891206e-19 + vertex 0.05333333 0 0.01 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.05333333 0 0.01 + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.04666667 2.891206e-19 0 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.06 -2.891206e-19 0.01 + vertex 0.05333333 0 0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 -0 + outer loop + vertex 0.05333333 0 0.01 + vertex 0.05333333 0 -2.891206e-19 + vertex 0.06 -2.891206e-19 5.782412e-19 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 5.782412e-19 + vertex 0.06666667 -4.336809e-19 0 + vertex 0.06666667 -4.336809e-19 0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.06 -2.891206e-19 0.01 + vertex 0.06 -2.891206e-19 5.782412e-19 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.07333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.06666667 -4.336809e-19 0 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.08 4.336809e-19 0.01 + vertex 0.07333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.07333333 -5.782412e-19 -4.336809e-19 + vertex 0.08 4.336809e-19 2.891206e-19 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 2.891206e-19 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.08666667 2.891206e-19 0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.08 4.336809e-19 0.01 + vertex 0.08 4.336809e-19 2.891206e-19 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.08666667 2.891206e-19 0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 -0 + outer loop + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.08666667 2.891206e-19 -2.168404e-19 + vertex 0.09333333 1.445603e-19 4.698209e-19 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 4.698209e-19 + vertex 0.1 0 0 + vertex 0.1 0 0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 0.01 + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.09333333 1.445603e-19 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.02 0 0.01 + vertex 0.02 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 0.02 + vertex 0.01333333 0 0.02 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 0.01 + vertex 0.02666667 0 0.01 + vertex 0.02666667 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0 0.02 + vertex 0.02 0 0.02 + vertex 0.02 0 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 0.01 + vertex 0.03333333 0 0.01 + vertex 0.03333333 0 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 0.02 + vertex 0.02666667 0 0.02 + vertex 0.02666667 0 0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 0.01 + vertex 0.04 -2.891206e-19 0.01 + vertex 0.04 -2.891206e-19 0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.02 + vertex 0.03333333 0 0.02 + vertex 0.03333333 0 0.01 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.01 + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.04666667 2.891206e-19 0.02 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.04 -2.891206e-19 0.02 + vertex 0.04 -2.891206e-19 0.01 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.01 + vertex 0.05333333 0 0.01 + vertex 0.05333333 0 0.02 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.05333333 0 0.02 + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.04666667 2.891206e-19 0.01 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 0.01 + vertex 0.06 -2.891206e-19 0.01 + vertex 0.06 -2.891206e-19 0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 0.02 + vertex 0.05333333 0 0.02 + vertex 0.05333333 0 0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 1.445603e-17 + outer loop + vertex 0.06 -2.891206e-19 0.01 + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.06666667 -2.891206e-19 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.06 -2.891206e-19 0.02 + vertex 0.06 -2.891206e-19 0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0.01 + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.07333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal -4.336813e-17 -1 1.445603e-17 + outer loop + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.06666667 -4.336809e-19 0.01 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.01 + vertex 0.08 4.336809e-19 0.01 + vertex 0.08 4.336809e-19 0.02 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.01 + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.08666667 2.891206e-19 0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.08 4.336809e-19 0.02 + vertex 0.08 4.336809e-19 0.01 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.01 + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.09333333 1.445603e-19 0.02 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.08666667 2.891206e-19 0.01 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.01 + vertex 0.1 0 0.01 + vertex 0.1 0 0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 0.02 + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.09333333 1.445603e-19 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 0.02 + vertex 0.02 0 0.02 + vertex 0.02 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 0.03 + vertex 0.01333333 0 0.03 + vertex 0.01333333 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 0.02 + vertex 0.02666667 0 0.02 + vertex 0.02666667 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0 0.03 + vertex 0.02 0 0.03 + vertex 0.02 0 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 0.02 + vertex 0.03333333 0 0.02 + vertex 0.03333333 0 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 0.03 + vertex 0.02666667 0 0.03 + vertex 0.02666667 0 0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 0.02 + vertex 0.04 -2.891206e-19 0.02 + vertex 0.04 -2.891206e-19 0.03 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.03 + vertex 0.03333333 0 0.03 + vertex 0.03333333 0 0.02 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.02 + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.04666667 2.891206e-19 0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.04 -2.891206e-19 0.03 + vertex 0.04 -2.891206e-19 0.02 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.02 + vertex 0.05333333 0 0.02 + vertex 0.05333333 0 0.03 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.05333333 0 0.03 + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.04666667 2.891206e-19 0.02 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 0.02 + vertex 0.06 -2.891206e-19 0.02 + vertex 0.06 -2.891206e-19 0.03 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 0.03 + vertex 0.05333333 0 0.03 + vertex 0.05333333 0 0.02 + endloop + endfacet + facet normal 0 -1 -1.445603e-17 + outer loop + vertex 0.06 -2.891206e-19 0.02 + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.06666667 -4.336809e-19 0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.06 -2.891206e-19 0.03 + vertex 0.06 -2.891206e-19 0.02 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.06666667 -2.891206e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.07333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 -1.445603e-17 + outer loop + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.06666667 -2.891206e-19 0.02 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.02 + vertex 0.08 4.336809e-19 0.02 + vertex 0.08 4.336809e-19 0.03 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.02 + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.08666667 2.891206e-19 0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.08 4.336809e-19 0.03 + vertex 0.08 4.336809e-19 0.02 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.02 + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.09333333 1.445603e-19 0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.08666667 2.891206e-19 0.02 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.02 + vertex 0.1 0 0.02 + vertex 0.1 0 0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 0.03 + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.09333333 1.445603e-19 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 0.03 + vertex 0.02 0 0.03 + vertex 0.02 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 0.04 + vertex 0.01333333 0 0.04 + vertex 0.01333333 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 0.03 + vertex 0.02666667 0 0.03 + vertex 0.02666667 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0 0.04 + vertex 0.02 0 0.04 + vertex 0.02 0 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 0.03 + vertex 0.03333333 0 0.03 + vertex 0.03333333 0 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 0.04 + vertex 0.02666667 0 0.04 + vertex 0.02666667 0 0.03 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 0.03 + vertex 0.04 -2.891206e-19 0.03 + vertex 0.04 -2.891206e-19 0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.04 + vertex 0.03333333 0 0.04 + vertex 0.03333333 0 0.03 + endloop + endfacet + facet normal 8.673614e-17 -1 -8.673618e-17 + outer loop + vertex 0.04 -2.891206e-19 0.03 + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.04666667 -5.782412e-19 0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.04 -2.891206e-19 0.04 + vertex 0.04 -2.891206e-19 0.03 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.03 + vertex 0.05333333 0 0.03 + vertex 0.05333333 0 0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 -8.673618e-17 + outer loop + vertex 0.05333333 0 0.04 + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.04666667 2.891206e-19 0.03 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 0.03 + vertex 0.06 -2.891206e-19 0.03 + vertex 0.06 -2.891206e-19 0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 0.04 + vertex 0.05333333 0 0.04 + vertex 0.05333333 0 0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 1.445603e-17 + outer loop + vertex 0.06 -2.891206e-19 0.03 + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.06666667 -2.891206e-19 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.06 -2.891206e-19 0.04 + vertex 0.06 -2.891206e-19 0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.07333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal -4.336813e-17 -1 1.445603e-17 + outer loop + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.06666667 -4.336809e-19 0.03 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.03 + vertex 0.08 4.336809e-19 0.03 + vertex 0.08 4.336809e-19 0.04 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.03 + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.08666667 2.891206e-19 0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.08 4.336809e-19 0.04 + vertex 0.08 4.336809e-19 0.03 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.03 + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.09333333 1.445603e-19 0.04 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.08666667 2.891206e-19 0.03 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.03 + vertex 0.1 0 0.03 + vertex 0.1 0 0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 0.04 + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.09333333 1.445603e-19 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0 0.04 + vertex 0.02 0 0.04 + vertex 0.02 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0 0.05 + vertex 0.01333333 0 0.05 + vertex 0.01333333 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0 0.04 + vertex 0.02666667 0 0.04 + vertex 0.02666667 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0 0.05 + vertex 0.02 0 0.05 + vertex 0.02 0 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0 0.04 + vertex 0.03333333 0 0.04 + vertex 0.03333333 0 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0 0.05 + vertex 0.02666667 0 0.05 + vertex 0.02666667 0 0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.03333333 0 0.04 + vertex 0.04 -2.891206e-19 0.04 + vertex 0.04 -2.891206e-19 0.05 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.04 -2.891206e-19 0.05 + vertex 0.03333333 0 0.05 + vertex 0.03333333 0 0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 8.673618e-17 + outer loop + vertex 0.04 -2.891206e-19 0.04 + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.04666667 2.891206e-19 0.05 + endloop + endfacet + facet normal 8.673614e-17 -1 0 + outer loop + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.04 -2.891206e-19 0.05 + vertex 0.04 -2.891206e-19 0.04 + endloop + endfacet + facet normal 8.673627e-17 -1 0 + outer loop + vertex 0.04666667 -5.782412e-19 0.04 + vertex 0.05333333 0 0.04 + vertex 0.05333333 0 0.05 + endloop + endfacet + facet normal -4.336813e-17 -1 8.673618e-17 + outer loop + vertex 0.05333333 0 0.05 + vertex 0.04666667 2.891206e-19 0.05 + vertex 0.04666667 -5.782412e-19 0.04 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.05333333 0 0.04 + vertex 0.06 -2.891206e-19 0.04 + vertex 0.06 -2.891206e-19 0.05 + endloop + endfacet + facet normal -4.336807e-17 -1 0 + outer loop + vertex 0.06 -2.891206e-19 0.05 + vertex 0.05333333 0 0.05 + vertex 0.05333333 0 0.04 + endloop + endfacet + facet normal 0 -1 -1.445603e-17 + outer loop + vertex 0.06 -2.891206e-19 0.04 + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.06666667 -4.336809e-19 0.05 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.06 -2.891206e-19 0.05 + vertex 0.06 -2.891206e-19 0.04 + endloop + endfacet + facet normal -4.336813e-17 -1 0 + outer loop + vertex 0.06666667 -2.891206e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.07333333 -5.782412e-19 0.05 + endloop + endfacet + facet normal -2.168407e-17 -1 -1.445603e-17 + outer loop + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.06666667 -4.336809e-19 0.05 + vertex 0.06666667 -2.891206e-19 0.04 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.07333333 -5.782412e-19 0.04 + vertex 0.08 4.336809e-19 0.04 + vertex 0.08 4.336809e-19 0.05 + endloop + endfacet + facet normal 1.517882e-16 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.05 + vertex 0.07333333 -5.782412e-19 0.05 + vertex 0.07333333 -5.782412e-19 0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08 4.336809e-19 0.04 + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.08666667 2.891206e-19 0.05 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.08 4.336809e-19 0.05 + vertex 0.08 4.336809e-19 0.04 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.08666667 2.891206e-19 0.04 + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.09333333 1.445603e-19 0.05 + endloop + endfacet + facet normal -2.168407e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.08666667 2.891206e-19 0.05 + vertex 0.08666667 2.891206e-19 0.04 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.09333333 1.445603e-19 0.04 + vertex 0.1 0 0.04 + vertex 0.1 0 0.05 + endloop + endfacet + facet normal -2.168403e-17 -1 0 + outer loop + vertex 0.1 0 0.05 + vertex 0.09333333 1.445603e-19 0.05 + vertex 0.09333333 1.445603e-19 0.04 + endloop + endfacet +endsolid rightSolid_to_bottomAir +solid rightSolid_to_topAir + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.05 + vertex 0.01333333 0.008 -0.04 + vertex 0.02 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.04 + vertex 0.02 0.008 -0.05 + vertex 0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.05 + vertex 0.02 0.008 -0.04 + vertex 0.02666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.04 + vertex 0.02666667 0.008 -0.05 + vertex 0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.05 + vertex 0.02666667 0.008 -0.04 + vertex 0.03333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.04 + vertex 0.03333333 0.008 -0.05 + vertex 0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.05 + vertex 0.03333333 0.008 -0.04 + vertex 0.04 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.04 + vertex 0.04 0.008 -0.05 + vertex 0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.05 + vertex 0.04 0.008 -0.04 + vertex 0.04666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.04 + vertex 0.04666667 0.008 -0.05 + vertex 0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.05 + vertex 0.04666667 0.008 -0.04 + vertex 0.05333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.04 + vertex 0.05333333 0.008 -0.05 + vertex 0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.05 + vertex 0.05333333 0.008 -0.04 + vertex 0.06 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.04 + vertex 0.06 0.008 -0.05 + vertex 0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.05 + vertex 0.06 0.008 -0.04 + vertex 0.06666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.04 + vertex 0.06666667 0.008 -0.05 + vertex 0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.05 + vertex 0.06666667 0.008 -0.04 + vertex 0.07333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.04 + vertex 0.07333333 0.008 -0.05 + vertex 0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.05 + vertex 0.07333333 0.008 -0.04 + vertex 0.08 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.04 + vertex 0.08 0.008 -0.05 + vertex 0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.05 + vertex 0.08 0.008 -0.04 + vertex 0.08666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.04 + vertex 0.08666667 0.008 -0.05 + vertex 0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.05 + vertex 0.08666667 0.008 -0.04 + vertex 0.09333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.04 + vertex 0.09333333 0.008 -0.05 + vertex 0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.05 + vertex 0.09333333 0.008 -0.04 + vertex 0.1 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 -0.04 + vertex 0.1 0.008 -0.05 + vertex 0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0.008 -0.03 + vertex 0.02 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.03 + vertex 0.02 0.008 -0.04 + vertex 0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.04 + vertex 0.02 0.008 -0.03 + vertex 0.02666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.03 + vertex 0.02666667 0.008 -0.04 + vertex 0.02 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.04 + vertex 0.02666667 0.008 -0.03 + vertex 0.03333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.03 + vertex 0.03333333 0.008 -0.04 + vertex 0.02666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.04 + vertex 0.03333333 0.008 -0.03 + vertex 0.04 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.03 + vertex 0.04 0.008 -0.04 + vertex 0.03333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.04 + vertex 0.04 0.008 -0.03 + vertex 0.04666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.03 + vertex 0.04666667 0.008 -0.04 + vertex 0.04 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.04 + vertex 0.04666667 0.008 -0.03 + vertex 0.05333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.03 + vertex 0.05333333 0.008 -0.04 + vertex 0.04666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.04 + vertex 0.05333333 0.008 -0.03 + vertex 0.06 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.03 + vertex 0.06 0.008 -0.04 + vertex 0.05333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.04 + vertex 0.06 0.008 -0.03 + vertex 0.06666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.03 + vertex 0.06666667 0.008 -0.04 + vertex 0.06 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.04 + vertex 0.06666667 0.008 -0.03 + vertex 0.07333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.03 + vertex 0.07333333 0.008 -0.04 + vertex 0.06666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.04 + vertex 0.07333333 0.008 -0.03 + vertex 0.08 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.03 + vertex 0.08 0.008 -0.04 + vertex 0.07333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.04 + vertex 0.08 0.008 -0.03 + vertex 0.08666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.03 + vertex 0.08666667 0.008 -0.04 + vertex 0.08 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.04 + vertex 0.08666667 0.008 -0.03 + vertex 0.09333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.03 + vertex 0.09333333 0.008 -0.04 + vertex 0.08666667 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.04 + vertex 0.09333333 0.008 -0.03 + vertex 0.1 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 -0.03 + vertex 0.1 0.008 -0.04 + vertex 0.09333333 0.008 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0.008 -0.02 + vertex 0.02 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.02 + vertex 0.02 0.008 -0.03 + vertex 0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.03 + vertex 0.02 0.008 -0.02 + vertex 0.02666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.02 + vertex 0.02666667 0.008 -0.03 + vertex 0.02 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.03 + vertex 0.02666667 0.008 -0.02 + vertex 0.03333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.02 + vertex 0.03333333 0.008 -0.03 + vertex 0.02666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.03 + vertex 0.03333333 0.008 -0.02 + vertex 0.04 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.02 + vertex 0.04 0.008 -0.03 + vertex 0.03333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.03 + vertex 0.04 0.008 -0.02 + vertex 0.04666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.02 + vertex 0.04666667 0.008 -0.03 + vertex 0.04 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.03 + vertex 0.04666667 0.008 -0.02 + vertex 0.05333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.02 + vertex 0.05333333 0.008 -0.03 + vertex 0.04666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.03 + vertex 0.05333333 0.008 -0.02 + vertex 0.06 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.02 + vertex 0.06 0.008 -0.03 + vertex 0.05333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.03 + vertex 0.06 0.008 -0.02 + vertex 0.06666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.02 + vertex 0.06666667 0.008 -0.03 + vertex 0.06 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.03 + vertex 0.06666667 0.008 -0.02 + vertex 0.07333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.02 + vertex 0.07333333 0.008 -0.03 + vertex 0.06666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.03 + vertex 0.07333333 0.008 -0.02 + vertex 0.08 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.02 + vertex 0.08 0.008 -0.03 + vertex 0.07333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.03 + vertex 0.08 0.008 -0.02 + vertex 0.08666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.02 + vertex 0.08666667 0.008 -0.03 + vertex 0.08 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.03 + vertex 0.08666667 0.008 -0.02 + vertex 0.09333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.02 + vertex 0.09333333 0.008 -0.03 + vertex 0.08666667 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.03 + vertex 0.09333333 0.008 -0.02 + vertex 0.1 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 -0.02 + vertex 0.1 0.008 -0.03 + vertex 0.09333333 0.008 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0.008 -0.01 + vertex 0.02 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.01 + vertex 0.02 0.008 -0.02 + vertex 0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.02 + vertex 0.02 0.008 -0.01 + vertex 0.02666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.01 + vertex 0.02666667 0.008 -0.02 + vertex 0.02 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.02 + vertex 0.02666667 0.008 -0.01 + vertex 0.03333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.01 + vertex 0.03333333 0.008 -0.02 + vertex 0.02666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.02 + vertex 0.03333333 0.008 -0.01 + vertex 0.04 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.01 + vertex 0.04 0.008 -0.02 + vertex 0.03333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.02 + vertex 0.04 0.008 -0.01 + vertex 0.04666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.01 + vertex 0.04666667 0.008 -0.02 + vertex 0.04 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.02 + vertex 0.04666667 0.008 -0.01 + vertex 0.05333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.01 + vertex 0.05333333 0.008 -0.02 + vertex 0.04666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.02 + vertex 0.05333333 0.008 -0.01 + vertex 0.06 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.01 + vertex 0.06 0.008 -0.02 + vertex 0.05333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.02 + vertex 0.06 0.008 -0.01 + vertex 0.06666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.01 + vertex 0.06666667 0.008 -0.02 + vertex 0.06 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.02 + vertex 0.06666667 0.008 -0.01 + vertex 0.07333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.01 + vertex 0.07333333 0.008 -0.02 + vertex 0.06666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.02 + vertex 0.07333333 0.008 -0.01 + vertex 0.08 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.01 + vertex 0.08 0.008 -0.02 + vertex 0.07333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.02 + vertex 0.08 0.008 -0.01 + vertex 0.08666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.01 + vertex 0.08666667 0.008 -0.02 + vertex 0.08 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.02 + vertex 0.08666667 0.008 -0.01 + vertex 0.09333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.01 + vertex 0.09333333 0.008 -0.02 + vertex 0.08666667 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.02 + vertex 0.09333333 0.008 -0.01 + vertex 0.1 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 -0.01 + vertex 0.1 0.008 -0.02 + vertex 0.09333333 0.008 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0.008 0 + vertex 0.02 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0 + vertex 0.02 0.008 -0.01 + vertex 0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 -0.01 + vertex 0.02 0.008 0 + vertex 0.02666667 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.02666667 0.008 -0.01 + vertex 0.02 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 -0.01 + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.03333333 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0 + vertex 0.03333333 0.008 -0.01 + vertex 0.02666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 -0.01 + vertex 0.03333333 0.008 0 + vertex 0.04 0.008 -5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -5.782412e-19 + vertex 0.04 0.008 -0.01 + vertex 0.03333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 -0.01 + vertex 0.04 0.008 -5.782412e-19 + vertex 0.04666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0 + vertex 0.04666667 0.008 -0.01 + vertex 0.04 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 -0.01 + vertex 0.04666667 0.008 0 + vertex 0.05333333 0.008 -2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.05333333 0.008 -0.01 + vertex 0.04666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 -0.01 + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.06 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 5.782412e-19 + vertex 0.06 0.008 -0.01 + vertex 0.05333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 -0.01 + vertex 0.06 0.008 5.782412e-19 + vertex 0.06666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0 + vertex 0.06666667 0.008 -0.01 + vertex 0.06 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 -0.01 + vertex 0.06666667 0.008 0 + vertex 0.07333333 0.008 -4.336809e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.07333333 0.008 -0.01 + vertex 0.06666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 -0.01 + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.08 0.008 2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 2.891206e-19 + vertex 0.08 0.008 -0.01 + vertex 0.07333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 -0.01 + vertex 0.08 0.008 2.891206e-19 + vertex 0.08666667 0.008 -2.168404e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.08666667 0.008 -0.01 + vertex 0.08 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 -0.01 + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.09333333 0.008 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.09333333 0.008 -0.01 + vertex 0.08666667 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 -0.01 + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.1 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 0 + vertex 0.1 0.008 -0.01 + vertex 0.09333333 0.008 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0 + vertex 0.01333333 0.008 0.01 + vertex 0.02 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.01 + vertex 0.02 0.008 0 + vertex 0.01333333 0.008 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.02 0.008 0.01 + vertex 0.02666667 0.008 0.01 + vertex 0.02666667 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.02 0.008 0 + vertex 0.02 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.02666667 0.008 0.01 + vertex 0.03333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.01 + vertex 0.03333333 0.008 0 + vertex 0.02666667 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0 + vertex 0.03333333 0.008 0.01 + vertex 0.04 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.01 + vertex 0.04 0.008 -5.782412e-19 + vertex 0.03333333 0.008 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.04 0.008 0.01 + vertex 0.04666667 0.008 0.01 + vertex 0.04666667 0.008 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0 + vertex 0.04 0.008 -5.782412e-19 + vertex 0.04 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0 + vertex 0.04666667 0.008 0.01 + vertex 0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.01 + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.04666667 0.008 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.05333333 0.008 0.01 + vertex 0.06 0.008 0.01 + vertex 0.06 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 5.782412e-19 + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 5.782412e-19 + vertex 0.06 0.008 0.01 + vertex 0.06666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.01 + vertex 0.06666667 0.008 0 + vertex 0.06 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0 + vertex 0.06666667 0.008 0.01 + vertex 0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.01 + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.06666667 0.008 0 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.07333333 0.008 0.01 + vertex 0.08 0.008 0.01 + vertex 0.08 0.008 2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 2.891206e-19 + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 2.891206e-19 + vertex 0.08 0.008 0.01 + vertex 0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.01 + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.08 0.008 2.891206e-19 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.08666667 0.008 0.01 + vertex 0.09333333 0.008 0.01 + vertex 0.09333333 0.008 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.09333333 0.008 0.01 + vertex 0.1 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 0.01 + vertex 0.1 0.008 0 + vertex 0.09333333 0.008 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0.008 0.02 + vertex 0.02 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.02 + vertex 0.02 0.008 0.01 + vertex 0.01333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.01 + vertex 0.02 0.008 0.02 + vertex 0.02666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.02 + vertex 0.02666667 0.008 0.01 + vertex 0.02 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.01 + vertex 0.02666667 0.008 0.02 + vertex 0.03333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.02 + vertex 0.03333333 0.008 0.01 + vertex 0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.01 + vertex 0.03333333 0.008 0.02 + vertex 0.04 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.02 + vertex 0.04 0.008 0.01 + vertex 0.03333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.01 + vertex 0.04 0.008 0.02 + vertex 0.04666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.02 + vertex 0.04666667 0.008 0.01 + vertex 0.04 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.01 + vertex 0.04666667 0.008 0.02 + vertex 0.05333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.02 + vertex 0.05333333 0.008 0.01 + vertex 0.04666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.01 + vertex 0.05333333 0.008 0.02 + vertex 0.06 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.02 + vertex 0.06 0.008 0.01 + vertex 0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.01 + vertex 0.06 0.008 0.02 + vertex 0.06666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.02 + vertex 0.06666667 0.008 0.01 + vertex 0.06 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.01 + vertex 0.06666667 0.008 0.02 + vertex 0.07333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.02 + vertex 0.07333333 0.008 0.01 + vertex 0.06666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.01 + vertex 0.07333333 0.008 0.02 + vertex 0.08 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.02 + vertex 0.08 0.008 0.01 + vertex 0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.01 + vertex 0.08 0.008 0.02 + vertex 0.08666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.02 + vertex 0.08666667 0.008 0.01 + vertex 0.08 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.01 + vertex 0.08666667 0.008 0.02 + vertex 0.09333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.02 + vertex 0.09333333 0.008 0.01 + vertex 0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.01 + vertex 0.09333333 0.008 0.02 + vertex 0.1 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 0.02 + vertex 0.1 0.008 0.01 + vertex 0.09333333 0.008 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0.008 0.03 + vertex 0.02 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.03 + vertex 0.02 0.008 0.02 + vertex 0.01333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.02 + vertex 0.02 0.008 0.03 + vertex 0.02666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.03 + vertex 0.02666667 0.008 0.02 + vertex 0.02 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.02 + vertex 0.02666667 0.008 0.03 + vertex 0.03333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.03 + vertex 0.03333333 0.008 0.02 + vertex 0.02666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.02 + vertex 0.03333333 0.008 0.03 + vertex 0.04 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.03 + vertex 0.04 0.008 0.02 + vertex 0.03333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.02 + vertex 0.04 0.008 0.03 + vertex 0.04666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.03 + vertex 0.04666667 0.008 0.02 + vertex 0.04 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.02 + vertex 0.04666667 0.008 0.03 + vertex 0.05333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.03 + vertex 0.05333333 0.008 0.02 + vertex 0.04666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.02 + vertex 0.05333333 0.008 0.03 + vertex 0.06 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.03 + vertex 0.06 0.008 0.02 + vertex 0.05333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.02 + vertex 0.06 0.008 0.03 + vertex 0.06666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.03 + vertex 0.06666667 0.008 0.02 + vertex 0.06 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.02 + vertex 0.06666667 0.008 0.03 + vertex 0.07333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.03 + vertex 0.07333333 0.008 0.02 + vertex 0.06666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.02 + vertex 0.07333333 0.008 0.03 + vertex 0.08 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.03 + vertex 0.08 0.008 0.02 + vertex 0.07333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.02 + vertex 0.08 0.008 0.03 + vertex 0.08666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.03 + vertex 0.08666667 0.008 0.02 + vertex 0.08 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.02 + vertex 0.08666667 0.008 0.03 + vertex 0.09333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.03 + vertex 0.09333333 0.008 0.02 + vertex 0.08666667 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.02 + vertex 0.09333333 0.008 0.03 + vertex 0.1 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 0.03 + vertex 0.1 0.008 0.02 + vertex 0.09333333 0.008 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0.008 0.04 + vertex 0.02 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.04 + vertex 0.02 0.008 0.03 + vertex 0.01333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.03 + vertex 0.02 0.008 0.04 + vertex 0.02666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.04 + vertex 0.02666667 0.008 0.03 + vertex 0.02 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.03 + vertex 0.02666667 0.008 0.04 + vertex 0.03333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.04 + vertex 0.03333333 0.008 0.03 + vertex 0.02666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.03 + vertex 0.03333333 0.008 0.04 + vertex 0.04 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.04 + vertex 0.04 0.008 0.03 + vertex 0.03333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.03 + vertex 0.04 0.008 0.04 + vertex 0.04666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.04 + vertex 0.04666667 0.008 0.03 + vertex 0.04 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.03 + vertex 0.04666667 0.008 0.04 + vertex 0.05333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.04 + vertex 0.05333333 0.008 0.03 + vertex 0.04666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.03 + vertex 0.05333333 0.008 0.04 + vertex 0.06 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.04 + vertex 0.06 0.008 0.03 + vertex 0.05333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.03 + vertex 0.06 0.008 0.04 + vertex 0.06666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.04 + vertex 0.06666667 0.008 0.03 + vertex 0.06 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.03 + vertex 0.06666667 0.008 0.04 + vertex 0.07333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.04 + vertex 0.07333333 0.008 0.03 + vertex 0.06666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.03 + vertex 0.07333333 0.008 0.04 + vertex 0.08 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.04 + vertex 0.08 0.008 0.03 + vertex 0.07333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.03 + vertex 0.08 0.008 0.04 + vertex 0.08666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.04 + vertex 0.08666667 0.008 0.03 + vertex 0.08 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.03 + vertex 0.08666667 0.008 0.04 + vertex 0.09333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.04 + vertex 0.09333333 0.008 0.03 + vertex 0.08666667 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.03 + vertex 0.09333333 0.008 0.04 + vertex 0.1 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 0.04 + vertex 0.1 0.008 0.03 + vertex 0.09333333 0.008 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0.008 0.05 + vertex 0.02 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.05 + vertex 0.02 0.008 0.04 + vertex 0.01333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.008 0.04 + vertex 0.02 0.008 0.05 + vertex 0.02666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.05 + vertex 0.02666667 0.008 0.04 + vertex 0.02 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.008 0.04 + vertex 0.02666667 0.008 0.05 + vertex 0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.05 + vertex 0.03333333 0.008 0.04 + vertex 0.02666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.008 0.04 + vertex 0.03333333 0.008 0.05 + vertex 0.04 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.05 + vertex 0.04 0.008 0.04 + vertex 0.03333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.008 0.04 + vertex 0.04 0.008 0.05 + vertex 0.04666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.05 + vertex 0.04666667 0.008 0.04 + vertex 0.04 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.008 0.04 + vertex 0.04666667 0.008 0.05 + vertex 0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.05 + vertex 0.05333333 0.008 0.04 + vertex 0.04666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.008 0.04 + vertex 0.05333333 0.008 0.05 + vertex 0.06 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.05 + vertex 0.06 0.008 0.04 + vertex 0.05333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.008 0.04 + vertex 0.06 0.008 0.05 + vertex 0.06666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.05 + vertex 0.06666667 0.008 0.04 + vertex 0.06 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.008 0.04 + vertex 0.06666667 0.008 0.05 + vertex 0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.05 + vertex 0.07333333 0.008 0.04 + vertex 0.06666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.008 0.04 + vertex 0.07333333 0.008 0.05 + vertex 0.08 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.05 + vertex 0.08 0.008 0.04 + vertex 0.07333333 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.008 0.04 + vertex 0.08 0.008 0.05 + vertex 0.08666667 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.05 + vertex 0.08666667 0.008 0.04 + vertex 0.08 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.008 0.04 + vertex 0.08666667 0.008 0.05 + vertex 0.09333333 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.05 + vertex 0.09333333 0.008 0.04 + vertex 0.08666667 0.008 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.008 0.04 + vertex 0.09333333 0.008 0.05 + vertex 0.1 0.008 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.008 0.05 + vertex 0.1 0.008 0.04 + vertex 0.09333333 0.008 0.04 + endloop + endfacet +endsolid rightSolid_to_topAir +solid rightSolid_to_heater + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 -0.05 + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0.008 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0.008 -0.05 + vertex 0.01333333 0 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 -0.04 + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0.008 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 -0.03 + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0.008 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 -0.02 + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0.008 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 -0.01 + vertex 0.01333333 0 0 + vertex 0.01333333 0.008 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 0 + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 0 + vertex 0.01333333 0 0.01 + vertex 0.01333333 0.008 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0.008 0 + vertex 0.01333333 0 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 0.01 + vertex 0.01333333 0 0.02 + vertex 0.01333333 0.008 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 0.02 + vertex 0.01333333 0 0.03 + vertex 0.01333333 0.008 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 0.03 + vertex 0.01333333 0 0.04 + vertex 0.01333333 0.008 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 0.01333333 0 0.04 + vertex 0.01333333 0 0.05 + vertex 0.01333333 0.008 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex 0.01333333 0.008 0.05 + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0 0.04 + endloop + endfacet +endsolid rightSolid_to_heater diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/topAir.stl b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/topAir.stl new file mode 100644 index 0000000000000000000000000000000000000000..227f0317cd7ef09979234ddbf2055c7eb57f2b4b --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/constant/triSurface/topAir.stl @@ -0,0 +1,12896 @@ +solid maxY + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 -0.05 + vertex -0.1 0.04 -0.04 + vertex -0.09333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.04 + vertex -0.09333333 0.04 -0.05 + vertex -0.1 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 -0.04 + vertex -0.1 0.04 -0.03 + vertex -0.09333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.03 + vertex -0.09333333 0.04 -0.04 + vertex -0.1 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 -0.03 + vertex -0.1 0.04 -0.02 + vertex -0.09333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.02 + vertex -0.09333333 0.04 -0.03 + vertex -0.1 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 -0.02 + vertex -0.1 0.04 -0.01 + vertex -0.09333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.01 + vertex -0.09333333 0.04 -0.02 + vertex -0.1 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 -0.01 + vertex -0.1 0.04 0 + vertex -0.09333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0 + vertex -0.09333333 0.04 -0.01 + vertex -0.1 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 0 + vertex -0.1 0.04 0.01 + vertex -0.09333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.01 + vertex -0.09333333 0.04 0 + vertex -0.1 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 0.01 + vertex -0.1 0.04 0.02 + vertex -0.09333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.02 + vertex -0.09333333 0.04 0.01 + vertex -0.1 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 0.02 + vertex -0.1 0.04 0.03 + vertex -0.09333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.03 + vertex -0.09333333 0.04 0.02 + vertex -0.1 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 0.03 + vertex -0.1 0.04 0.04 + vertex -0.09333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.04 + vertex -0.09333333 0.04 0.03 + vertex -0.1 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.1 0.04 0.04 + vertex -0.1 0.04 0.05 + vertex -0.09333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.05 + vertex -0.09333333 0.04 0.04 + vertex -0.1 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.05 + vertex -0.09333333 0.04 -0.04 + vertex -0.08666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.04 + vertex -0.08666667 0.04 -0.05 + vertex -0.09333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.04 + vertex -0.09333333 0.04 -0.03 + vertex -0.08666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.03 + vertex -0.08666667 0.04 -0.04 + vertex -0.09333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.03 + vertex -0.09333333 0.04 -0.02 + vertex -0.08666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.02 + vertex -0.08666667 0.04 -0.03 + vertex -0.09333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.02 + vertex -0.09333333 0.04 -0.01 + vertex -0.08666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.01 + vertex -0.08666667 0.04 -0.02 + vertex -0.09333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 -0.01 + vertex -0.09333333 0.04 0 + vertex -0.08666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0 + vertex -0.08666667 0.04 -0.01 + vertex -0.09333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0 + vertex -0.09333333 0.04 0.01 + vertex -0.08666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.01 + vertex -0.08666667 0.04 0 + vertex -0.09333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.01 + vertex -0.09333333 0.04 0.02 + vertex -0.08666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.02 + vertex -0.08666667 0.04 0.01 + vertex -0.09333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.02 + vertex -0.09333333 0.04 0.03 + vertex -0.08666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.03 + vertex -0.08666667 0.04 0.02 + vertex -0.09333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.03 + vertex -0.09333333 0.04 0.04 + vertex -0.08666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.04 + vertex -0.08666667 0.04 0.03 + vertex -0.09333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.09333333 0.04 0.04 + vertex -0.09333333 0.04 0.05 + vertex -0.08666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.05 + vertex -0.08666667 0.04 0.04 + vertex -0.09333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.05 + vertex -0.08666667 0.04 -0.04 + vertex -0.08 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.04 + vertex -0.08 0.04 -0.05 + vertex -0.08666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.04 + vertex -0.08666667 0.04 -0.03 + vertex -0.08 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.03 + vertex -0.08 0.04 -0.04 + vertex -0.08666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.03 + vertex -0.08666667 0.04 -0.02 + vertex -0.08 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.02 + vertex -0.08 0.04 -0.03 + vertex -0.08666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 -0.02 + vertex -0.08666667 0.04 -0.01 + vertex -0.08 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.01 + vertex -0.08 0.04 -0.02 + vertex -0.08666667 0.04 -0.02 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.08666667 0.04 0 + vertex -0.08 0.04 1.156482e-18 + vertex -0.08 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.01 + vertex -0.08666667 0.04 -0.01 + vertex -0.08666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 1.156482e-18 + vertex -0.08666667 0.04 0 + vertex -0.08666667 0.04 0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex -0.08666667 0.04 0.01 + vertex -0.08 0.04 0.01 + vertex -0.08 0.04 1.156482e-18 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.01 + vertex -0.08666667 0.04 0.02 + vertex -0.08 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.02 + vertex -0.08 0.04 0.01 + vertex -0.08666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.02 + vertex -0.08666667 0.04 0.03 + vertex -0.08 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.03 + vertex -0.08 0.04 0.02 + vertex -0.08666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.03 + vertex -0.08666667 0.04 0.04 + vertex -0.08 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.04 + vertex -0.08 0.04 0.03 + vertex -0.08666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08666667 0.04 0.04 + vertex -0.08666667 0.04 0.05 + vertex -0.08 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.05 + vertex -0.08 0.04 0.04 + vertex -0.08666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.05 + vertex -0.08 0.04 -0.04 + vertex -0.07333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.04 + vertex -0.07333333 0.04 -0.05 + vertex -0.08 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.04 + vertex -0.08 0.04 -0.03 + vertex -0.07333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.03 + vertex -0.07333333 0.04 -0.04 + vertex -0.08 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.03 + vertex -0.08 0.04 -0.02 + vertex -0.07333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.02 + vertex -0.07333333 0.04 -0.03 + vertex -0.08 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.02 + vertex -0.08 0.04 -0.01 + vertex -0.07333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.01 + vertex -0.07333333 0.04 -0.02 + vertex -0.08 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0 + vertex -0.07333333 0.04 -0.01 + vertex -0.08 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 -0.01 + vertex -0.08 0.04 1.156482e-18 + vertex -0.07333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 1.156482e-18 + vertex -0.08 0.04 0.01 + vertex -0.07333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.01 + vertex -0.07333333 0.04 0 + vertex -0.08 0.04 1.156482e-18 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.01 + vertex -0.08 0.04 0.02 + vertex -0.07333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.02 + vertex -0.07333333 0.04 0.01 + vertex -0.08 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.02 + vertex -0.08 0.04 0.03 + vertex -0.07333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.03 + vertex -0.07333333 0.04 0.02 + vertex -0.08 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.03 + vertex -0.08 0.04 0.04 + vertex -0.07333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.04 + vertex -0.07333333 0.04 0.03 + vertex -0.08 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.08 0.04 0.04 + vertex -0.08 0.04 0.05 + vertex -0.07333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.05 + vertex -0.07333333 0.04 0.04 + vertex -0.08 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.05 + vertex -0.07333333 0.04 -0.04 + vertex -0.06666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.04 + vertex -0.06666667 0.04 -0.05 + vertex -0.07333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.04 + vertex -0.07333333 0.04 -0.03 + vertex -0.06666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.03 + vertex -0.06666667 0.04 -0.04 + vertex -0.07333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.03 + vertex -0.07333333 0.04 -0.02 + vertex -0.06666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.02 + vertex -0.06666667 0.04 -0.03 + vertex -0.07333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.02 + vertex -0.07333333 0.04 -0.01 + vertex -0.06666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.01 + vertex -0.06666667 0.04 -0.02 + vertex -0.07333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 -0.01 + vertex -0.07333333 0.04 0 + vertex -0.06666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0 + vertex -0.06666667 0.04 -0.01 + vertex -0.07333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0 + vertex -0.07333333 0.04 0.01 + vertex -0.06666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.01 + vertex -0.06666667 0.04 0 + vertex -0.07333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.01 + vertex -0.07333333 0.04 0.02 + vertex -0.06666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.02 + vertex -0.06666667 0.04 0.01 + vertex -0.07333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.02 + vertex -0.07333333 0.04 0.03 + vertex -0.06666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.03 + vertex -0.06666667 0.04 0.02 + vertex -0.07333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.03 + vertex -0.07333333 0.04 0.04 + vertex -0.06666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.04 + vertex -0.06666667 0.04 0.03 + vertex -0.07333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.07333333 0.04 0.04 + vertex -0.07333333 0.04 0.05 + vertex -0.06666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.05 + vertex -0.06666667 0.04 0.04 + vertex -0.07333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.05 + vertex -0.06666667 0.04 -0.04 + vertex -0.06 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.04 + vertex -0.06 0.04 -0.05 + vertex -0.06666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.04 + vertex -0.06666667 0.04 -0.03 + vertex -0.06 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.03 + vertex -0.06 0.04 -0.04 + vertex -0.06666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.03 + vertex -0.06666667 0.04 -0.02 + vertex -0.06 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.02 + vertex -0.06 0.04 -0.03 + vertex -0.06666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.02 + vertex -0.06666667 0.04 -0.01 + vertex -0.06 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.01 + vertex -0.06 0.04 -0.02 + vertex -0.06666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 -0.01 + vertex -0.06666667 0.04 0 + vertex -0.06 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0 + vertex -0.06 0.04 -0.01 + vertex -0.06666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0 + vertex -0.06666667 0.04 0.01 + vertex -0.06 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.01 + vertex -0.06 0.04 0 + vertex -0.06666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.01 + vertex -0.06666667 0.04 0.02 + vertex -0.06 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.02 + vertex -0.06 0.04 0.01 + vertex -0.06666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.02 + vertex -0.06666667 0.04 0.03 + vertex -0.06 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.03 + vertex -0.06 0.04 0.02 + vertex -0.06666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.03 + vertex -0.06666667 0.04 0.04 + vertex -0.06 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.04 + vertex -0.06 0.04 0.03 + vertex -0.06666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06666667 0.04 0.04 + vertex -0.06666667 0.04 0.05 + vertex -0.06 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.05 + vertex -0.06 0.04 0.04 + vertex -0.06666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.05 + vertex -0.06 0.04 -0.04 + vertex -0.05333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.04 + vertex -0.05333333 0.04 -0.05 + vertex -0.06 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.04 + vertex -0.06 0.04 -0.03 + vertex -0.05333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.03 + vertex -0.05333333 0.04 -0.04 + vertex -0.06 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.03 + vertex -0.06 0.04 -0.02 + vertex -0.05333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.02 + vertex -0.05333333 0.04 -0.03 + vertex -0.06 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.02 + vertex -0.06 0.04 -0.01 + vertex -0.05333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.01 + vertex -0.05333333 0.04 -0.02 + vertex -0.06 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 -0.01 + vertex -0.06 0.04 0 + vertex -0.05333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0 + vertex -0.05333333 0.04 -0.01 + vertex -0.06 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0 + vertex -0.06 0.04 0.01 + vertex -0.05333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.01 + vertex -0.05333333 0.04 0 + vertex -0.06 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.01 + vertex -0.06 0.04 0.02 + vertex -0.05333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.02 + vertex -0.05333333 0.04 0.01 + vertex -0.06 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.02 + vertex -0.06 0.04 0.03 + vertex -0.05333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.03 + vertex -0.05333333 0.04 0.02 + vertex -0.06 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.03 + vertex -0.06 0.04 0.04 + vertex -0.05333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.04 + vertex -0.05333333 0.04 0.03 + vertex -0.06 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.06 0.04 0.04 + vertex -0.06 0.04 0.05 + vertex -0.05333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.05 + vertex -0.05333333 0.04 0.04 + vertex -0.06 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.05 + vertex -0.05333333 0.04 -0.04 + vertex -0.04666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.04 + vertex -0.04666667 0.04 -0.05 + vertex -0.05333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.04 + vertex -0.05333333 0.04 -0.03 + vertex -0.04666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.03 + vertex -0.04666667 0.04 -0.04 + vertex -0.05333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.03 + vertex -0.05333333 0.04 -0.02 + vertex -0.04666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.02 + vertex -0.04666667 0.04 -0.03 + vertex -0.05333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.02 + vertex -0.05333333 0.04 -0.01 + vertex -0.04666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.01 + vertex -0.04666667 0.04 -0.02 + vertex -0.05333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 -0.01 + vertex -0.05333333 0.04 0 + vertex -0.04666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0 + vertex -0.04666667 0.04 -0.01 + vertex -0.05333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0 + vertex -0.05333333 0.04 0.01 + vertex -0.04666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.01 + vertex -0.04666667 0.04 0 + vertex -0.05333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.01 + vertex -0.05333333 0.04 0.02 + vertex -0.04666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.02 + vertex -0.04666667 0.04 0.01 + vertex -0.05333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.02 + vertex -0.05333333 0.04 0.03 + vertex -0.04666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.03 + vertex -0.04666667 0.04 0.02 + vertex -0.05333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.03 + vertex -0.05333333 0.04 0.04 + vertex -0.04666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.04 + vertex -0.04666667 0.04 0.03 + vertex -0.05333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.05333333 0.04 0.04 + vertex -0.05333333 0.04 0.05 + vertex -0.04666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.05 + vertex -0.04666667 0.04 0.04 + vertex -0.05333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.05 + vertex -0.04666667 0.04 -0.04 + vertex -0.04 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.04 + vertex -0.04 0.04 -0.05 + vertex -0.04666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.04 + vertex -0.04666667 0.04 -0.03 + vertex -0.04 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.03 + vertex -0.04 0.04 -0.04 + vertex -0.04666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.03 + vertex -0.04666667 0.04 -0.02 + vertex -0.04 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.02 + vertex -0.04 0.04 -0.03 + vertex -0.04666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.02 + vertex -0.04666667 0.04 -0.01 + vertex -0.04 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.01 + vertex -0.04 0.04 -0.02 + vertex -0.04666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 -0.01 + vertex -0.04666667 0.04 0 + vertex -0.04 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0 + vertex -0.04 0.04 -0.01 + vertex -0.04666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0 + vertex -0.04666667 0.04 0.01 + vertex -0.04 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.01 + vertex -0.04 0.04 0 + vertex -0.04666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.01 + vertex -0.04666667 0.04 0.02 + vertex -0.04 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.02 + vertex -0.04 0.04 0.01 + vertex -0.04666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.02 + vertex -0.04666667 0.04 0.03 + vertex -0.04 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.03 + vertex -0.04 0.04 0.02 + vertex -0.04666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.03 + vertex -0.04666667 0.04 0.04 + vertex -0.04 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.04 + vertex -0.04 0.04 0.03 + vertex -0.04666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04666667 0.04 0.04 + vertex -0.04666667 0.04 0.05 + vertex -0.04 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.05 + vertex -0.04 0.04 0.04 + vertex -0.04666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.05 + vertex -0.04 0.04 -0.04 + vertex -0.03333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.04 + vertex -0.03333333 0.04 -0.05 + vertex -0.04 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.04 + vertex -0.04 0.04 -0.03 + vertex -0.03333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.03 + vertex -0.03333333 0.04 -0.04 + vertex -0.04 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.03 + vertex -0.04 0.04 -0.02 + vertex -0.03333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.02 + vertex -0.03333333 0.04 -0.03 + vertex -0.04 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.02 + vertex -0.04 0.04 -0.01 + vertex -0.03333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.01 + vertex -0.03333333 0.04 -0.02 + vertex -0.04 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 -0.01 + vertex -0.04 0.04 0 + vertex -0.03333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0 + vertex -0.03333333 0.04 -0.01 + vertex -0.04 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0 + vertex -0.04 0.04 0.01 + vertex -0.03333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.01 + vertex -0.03333333 0.04 0 + vertex -0.04 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.01 + vertex -0.04 0.04 0.02 + vertex -0.03333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.02 + vertex -0.03333333 0.04 0.01 + vertex -0.04 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.02 + vertex -0.04 0.04 0.03 + vertex -0.03333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.03 + vertex -0.03333333 0.04 0.02 + vertex -0.04 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.03 + vertex -0.04 0.04 0.04 + vertex -0.03333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.04 + vertex -0.03333333 0.04 0.03 + vertex -0.04 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.04 0.04 0.04 + vertex -0.04 0.04 0.05 + vertex -0.03333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.05 + vertex -0.03333333 0.04 0.04 + vertex -0.04 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.05 + vertex -0.03333333 0.04 -0.04 + vertex -0.02666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.04 + vertex -0.02666667 0.04 -0.05 + vertex -0.03333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.04 + vertex -0.03333333 0.04 -0.03 + vertex -0.02666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.03 + vertex -0.02666667 0.04 -0.04 + vertex -0.03333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.03 + vertex -0.03333333 0.04 -0.02 + vertex -0.02666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.02 + vertex -0.02666667 0.04 -0.03 + vertex -0.03333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.02 + vertex -0.03333333 0.04 -0.01 + vertex -0.02666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.01 + vertex -0.02666667 0.04 -0.02 + vertex -0.03333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 -0.01 + vertex -0.03333333 0.04 0 + vertex -0.02666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0 + vertex -0.02666667 0.04 -0.01 + vertex -0.03333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0 + vertex -0.03333333 0.04 0.01 + vertex -0.02666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.01 + vertex -0.02666667 0.04 0 + vertex -0.03333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.01 + vertex -0.03333333 0.04 0.02 + vertex -0.02666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.02 + vertex -0.02666667 0.04 0.01 + vertex -0.03333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.02 + vertex -0.03333333 0.04 0.03 + vertex -0.02666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.03 + vertex -0.02666667 0.04 0.02 + vertex -0.03333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.03 + vertex -0.03333333 0.04 0.04 + vertex -0.02666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.04 + vertex -0.02666667 0.04 0.03 + vertex -0.03333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.03333333 0.04 0.04 + vertex -0.03333333 0.04 0.05 + vertex -0.02666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.05 + vertex -0.02666667 0.04 0.04 + vertex -0.03333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.05 + vertex -0.02666667 0.04 -0.04 + vertex -0.02 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.04 + vertex -0.02 0.04 -0.05 + vertex -0.02666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.04 + vertex -0.02666667 0.04 -0.03 + vertex -0.02 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.03 + vertex -0.02 0.04 -0.04 + vertex -0.02666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.03 + vertex -0.02666667 0.04 -0.02 + vertex -0.02 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.02 + vertex -0.02 0.04 -0.03 + vertex -0.02666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.02 + vertex -0.02666667 0.04 -0.01 + vertex -0.02 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.01 + vertex -0.02 0.04 -0.02 + vertex -0.02666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 -0.01 + vertex -0.02666667 0.04 0 + vertex -0.02 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0 + vertex -0.02 0.04 -0.01 + vertex -0.02666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0 + vertex -0.02666667 0.04 0.01 + vertex -0.02 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.01 + vertex -0.02 0.04 0 + vertex -0.02666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.01 + vertex -0.02666667 0.04 0.02 + vertex -0.02 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.02 + vertex -0.02 0.04 0.01 + vertex -0.02666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.02 + vertex -0.02666667 0.04 0.03 + vertex -0.02 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.03 + vertex -0.02 0.04 0.02 + vertex -0.02666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.03 + vertex -0.02666667 0.04 0.04 + vertex -0.02 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.04 + vertex -0.02 0.04 0.03 + vertex -0.02666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02666667 0.04 0.04 + vertex -0.02666667 0.04 0.05 + vertex -0.02 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.05 + vertex -0.02 0.04 0.04 + vertex -0.02666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.05 + vertex -0.02 0.04 -0.04 + vertex -0.01333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.04 + vertex -0.01333333 0.04 -0.05 + vertex -0.02 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.04 + vertex -0.02 0.04 -0.03 + vertex -0.01333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.03 + vertex -0.01333333 0.04 -0.04 + vertex -0.02 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.03 + vertex -0.02 0.04 -0.02 + vertex -0.01333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.02 + vertex -0.01333333 0.04 -0.03 + vertex -0.02 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.02 + vertex -0.02 0.04 -0.01 + vertex -0.01333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.01 + vertex -0.01333333 0.04 -0.02 + vertex -0.02 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 -0.01 + vertex -0.02 0.04 0 + vertex -0.01333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0 + vertex -0.01333333 0.04 -0.01 + vertex -0.02 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0 + vertex -0.02 0.04 0.01 + vertex -0.01333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.01 + vertex -0.01333333 0.04 0 + vertex -0.02 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.01 + vertex -0.02 0.04 0.02 + vertex -0.01333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.02 + vertex -0.01333333 0.04 0.01 + vertex -0.02 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.02 + vertex -0.02 0.04 0.03 + vertex -0.01333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.03 + vertex -0.01333333 0.04 0.02 + vertex -0.02 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.03 + vertex -0.02 0.04 0.04 + vertex -0.01333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.04 + vertex -0.01333333 0.04 0.03 + vertex -0.02 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.02 0.04 0.04 + vertex -0.02 0.04 0.05 + vertex -0.01333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.05 + vertex -0.01333333 0.04 0.04 + vertex -0.02 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.05 + vertex -0.01333333 0.04 -0.04 + vertex -0.006666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.04 + vertex -0.006666667 0.04 -0.05 + vertex -0.01333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.04 + vertex -0.01333333 0.04 -0.03 + vertex -0.006666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.03 + vertex -0.006666667 0.04 -0.04 + vertex -0.01333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.03 + vertex -0.01333333 0.04 -0.02 + vertex -0.006666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.02 + vertex -0.006666667 0.04 -0.03 + vertex -0.01333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.02 + vertex -0.01333333 0.04 -0.01 + vertex -0.006666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.01 + vertex -0.006666667 0.04 -0.02 + vertex -0.01333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 -0.01 + vertex -0.01333333 0.04 0 + vertex -0.006666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0 + vertex -0.006666667 0.04 -0.01 + vertex -0.01333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0 + vertex -0.01333333 0.04 0.01 + vertex -0.006666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.01 + vertex -0.006666667 0.04 0 + vertex -0.01333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.01 + vertex -0.01333333 0.04 0.02 + vertex -0.006666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.02 + vertex -0.006666667 0.04 0.01 + vertex -0.01333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.02 + vertex -0.01333333 0.04 0.03 + vertex -0.006666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.03 + vertex -0.006666667 0.04 0.02 + vertex -0.01333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.03 + vertex -0.01333333 0.04 0.04 + vertex -0.006666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.04 + vertex -0.006666667 0.04 0.03 + vertex -0.01333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.01333333 0.04 0.04 + vertex -0.01333333 0.04 0.05 + vertex -0.006666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.05 + vertex -0.006666667 0.04 0.04 + vertex -0.01333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.05 + vertex -0.006666667 0.04 -0.04 + vertex 0 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.04 + vertex 0 0.04 -0.05 + vertex -0.006666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.04 + vertex -0.006666667 0.04 -0.03 + vertex 0 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.03 + vertex 0 0.04 -0.04 + vertex -0.006666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.03 + vertex -0.006666667 0.04 -0.02 + vertex 0 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.02 + vertex 0 0.04 -0.03 + vertex -0.006666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.02 + vertex -0.006666667 0.04 -0.01 + vertex 0 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.01 + vertex 0 0.04 -0.02 + vertex -0.006666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 -0.01 + vertex -0.006666667 0.04 0 + vertex 0 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0 + vertex 0 0.04 -0.01 + vertex -0.006666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0 + vertex -0.006666667 0.04 0.01 + vertex 0 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.01 + vertex 0 0.04 0 + vertex -0.006666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.01 + vertex -0.006666667 0.04 0.02 + vertex 0 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.02 + vertex 0 0.04 0.01 + vertex -0.006666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.02 + vertex -0.006666667 0.04 0.03 + vertex 0 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.03 + vertex 0 0.04 0.02 + vertex -0.006666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.03 + vertex -0.006666667 0.04 0.04 + vertex 0 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.04 + vertex 0 0.04 0.03 + vertex -0.006666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -0.006666667 0.04 0.04 + vertex -0.006666667 0.04 0.05 + vertex 0 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.05 + vertex 0 0.04 0.04 + vertex -0.006666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.05 + vertex 0 0.04 -0.04 + vertex 0.006666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.04 + vertex 0.006666667 0.04 -0.05 + vertex 0 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.04 + vertex 0 0.04 -0.03 + vertex 0.006666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.03 + vertex 0.006666667 0.04 -0.04 + vertex 0 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.03 + vertex 0 0.04 -0.02 + vertex 0.006666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.02 + vertex 0.006666667 0.04 -0.03 + vertex 0 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.02 + vertex 0 0.04 -0.01 + vertex 0.006666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.01 + vertex 0.006666667 0.04 -0.02 + vertex 0 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 -0.01 + vertex 0 0.04 0 + vertex 0.006666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0 + vertex 0.006666667 0.04 -0.01 + vertex 0 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0 + vertex 0 0.04 0.01 + vertex 0.006666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.01 + vertex 0.006666667 0.04 0 + vertex 0 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.01 + vertex 0 0.04 0.02 + vertex 0.006666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.02 + vertex 0.006666667 0.04 0.01 + vertex 0 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.02 + vertex 0 0.04 0.03 + vertex 0.006666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.03 + vertex 0.006666667 0.04 0.02 + vertex 0 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.03 + vertex 0 0.04 0.04 + vertex 0.006666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.04 + vertex 0.006666667 0.04 0.03 + vertex 0 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0 0.04 0.04 + vertex 0 0.04 0.05 + vertex 0.006666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.05 + vertex 0.006666667 0.04 0.04 + vertex 0 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.05 + vertex 0.006666667 0.04 -0.04 + vertex 0.01333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.04 + vertex 0.01333333 0.04 -0.05 + vertex 0.006666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.04 + vertex 0.006666667 0.04 -0.03 + vertex 0.01333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.03 + vertex 0.01333333 0.04 -0.04 + vertex 0.006666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.03 + vertex 0.006666667 0.04 -0.02 + vertex 0.01333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.02 + vertex 0.01333333 0.04 -0.03 + vertex 0.006666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.02 + vertex 0.006666667 0.04 -0.01 + vertex 0.01333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.01 + vertex 0.01333333 0.04 -0.02 + vertex 0.006666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 -0.01 + vertex 0.006666667 0.04 0 + vertex 0.01333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0 + vertex 0.01333333 0.04 -0.01 + vertex 0.006666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0 + vertex 0.006666667 0.04 0.01 + vertex 0.01333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.01 + vertex 0.01333333 0.04 0 + vertex 0.006666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.01 + vertex 0.006666667 0.04 0.02 + vertex 0.01333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.02 + vertex 0.01333333 0.04 0.01 + vertex 0.006666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.02 + vertex 0.006666667 0.04 0.03 + vertex 0.01333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.03 + vertex 0.01333333 0.04 0.02 + vertex 0.006666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.03 + vertex 0.006666667 0.04 0.04 + vertex 0.01333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.04 + vertex 0.01333333 0.04 0.03 + vertex 0.006666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.006666667 0.04 0.04 + vertex 0.006666667 0.04 0.05 + vertex 0.01333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.05 + vertex 0.01333333 0.04 0.04 + vertex 0.006666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.05 + vertex 0.01333333 0.04 -0.04 + vertex 0.02 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.04 + vertex 0.02 0.04 -0.05 + vertex 0.01333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.04 + vertex 0.01333333 0.04 -0.03 + vertex 0.02 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.03 + vertex 0.02 0.04 -0.04 + vertex 0.01333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.03 + vertex 0.01333333 0.04 -0.02 + vertex 0.02 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.02 + vertex 0.02 0.04 -0.03 + vertex 0.01333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.02 + vertex 0.01333333 0.04 -0.01 + vertex 0.02 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.01 + vertex 0.02 0.04 -0.02 + vertex 0.01333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 -0.01 + vertex 0.01333333 0.04 0 + vertex 0.02 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0 + vertex 0.02 0.04 -0.01 + vertex 0.01333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0 + vertex 0.01333333 0.04 0.01 + vertex 0.02 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.01 + vertex 0.02 0.04 0 + vertex 0.01333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.01 + vertex 0.01333333 0.04 0.02 + vertex 0.02 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.02 + vertex 0.02 0.04 0.01 + vertex 0.01333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.02 + vertex 0.01333333 0.04 0.03 + vertex 0.02 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.03 + vertex 0.02 0.04 0.02 + vertex 0.01333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.03 + vertex 0.01333333 0.04 0.04 + vertex 0.02 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.04 + vertex 0.02 0.04 0.03 + vertex 0.01333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.01333333 0.04 0.04 + vertex 0.01333333 0.04 0.05 + vertex 0.02 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.05 + vertex 0.02 0.04 0.04 + vertex 0.01333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.05 + vertex 0.02 0.04 -0.04 + vertex 0.02666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.04 + vertex 0.02666667 0.04 -0.05 + vertex 0.02 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.04 + vertex 0.02 0.04 -0.03 + vertex 0.02666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.03 + vertex 0.02666667 0.04 -0.04 + vertex 0.02 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.03 + vertex 0.02 0.04 -0.02 + vertex 0.02666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.02 + vertex 0.02666667 0.04 -0.03 + vertex 0.02 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.02 + vertex 0.02 0.04 -0.01 + vertex 0.02666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.01 + vertex 0.02666667 0.04 -0.02 + vertex 0.02 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 -0.01 + vertex 0.02 0.04 0 + vertex 0.02666667 0.04 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 5.782412e-19 + vertex 0.02666667 0.04 -0.01 + vertex 0.02 0.04 -0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.02 0.04 0.01 + vertex 0.02666667 0.04 0.01 + vertex 0.02666667 0.04 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 5.782412e-19 + vertex 0.02 0.04 0 + vertex 0.02 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.01 + vertex 0.02 0.04 0.02 + vertex 0.02666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.02 + vertex 0.02666667 0.04 0.01 + vertex 0.02 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.02 + vertex 0.02 0.04 0.03 + vertex 0.02666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.03 + vertex 0.02666667 0.04 0.02 + vertex 0.02 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.03 + vertex 0.02 0.04 0.04 + vertex 0.02666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.04 + vertex 0.02666667 0.04 0.03 + vertex 0.02 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02 0.04 0.04 + vertex 0.02 0.04 0.05 + vertex 0.02666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.05 + vertex 0.02666667 0.04 0.04 + vertex 0.02 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.05 + vertex 0.02666667 0.04 -0.04 + vertex 0.03333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.04 + vertex 0.03333333 0.04 -0.05 + vertex 0.02666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.04 + vertex 0.02666667 0.04 -0.03 + vertex 0.03333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.03 + vertex 0.03333333 0.04 -0.04 + vertex 0.02666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.03 + vertex 0.02666667 0.04 -0.02 + vertex 0.03333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.02 + vertex 0.03333333 0.04 -0.03 + vertex 0.02666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.02 + vertex 0.02666667 0.04 -0.01 + vertex 0.03333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.01 + vertex 0.03333333 0.04 -0.02 + vertex 0.02666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 -0.01 + vertex 0.02666667 0.04 5.782412e-19 + vertex 0.03333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0 + vertex 0.03333333 0.04 -0.01 + vertex 0.02666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 5.782412e-19 + vertex 0.02666667 0.04 0.01 + vertex 0.03333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.01 + vertex 0.03333333 0.04 0 + vertex 0.02666667 0.04 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.01 + vertex 0.02666667 0.04 0.02 + vertex 0.03333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.02 + vertex 0.03333333 0.04 0.01 + vertex 0.02666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.02 + vertex 0.02666667 0.04 0.03 + vertex 0.03333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.03 + vertex 0.03333333 0.04 0.02 + vertex 0.02666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.03 + vertex 0.02666667 0.04 0.04 + vertex 0.03333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.04 + vertex 0.03333333 0.04 0.03 + vertex 0.02666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.02666667 0.04 0.04 + vertex 0.02666667 0.04 0.05 + vertex 0.03333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.05 + vertex 0.03333333 0.04 0.04 + vertex 0.02666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.05 + vertex 0.03333333 0.04 -0.04 + vertex 0.04 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.04 + vertex 0.04 0.04 -0.05 + vertex 0.03333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.04 + vertex 0.03333333 0.04 -0.03 + vertex 0.04 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.03 + vertex 0.04 0.04 -0.04 + vertex 0.03333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.03 + vertex 0.03333333 0.04 -0.02 + vertex 0.04 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.02 + vertex 0.04 0.04 -0.03 + vertex 0.03333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.02 + vertex 0.03333333 0.04 -0.01 + vertex 0.04 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.01 + vertex 0.04 0.04 -0.02 + vertex 0.03333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 -0.01 + vertex 0.03333333 0.04 0 + vertex 0.04 0.04 -5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -5.782412e-19 + vertex 0.04 0.04 -0.01 + vertex 0.03333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0 + vertex 0.03333333 0.04 0.01 + vertex 0.04 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.01 + vertex 0.04 0.04 -5.782412e-19 + vertex 0.03333333 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.01 + vertex 0.03333333 0.04 0.02 + vertex 0.04 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.02 + vertex 0.04 0.04 0.01 + vertex 0.03333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.02 + vertex 0.03333333 0.04 0.03 + vertex 0.04 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.03 + vertex 0.04 0.04 0.02 + vertex 0.03333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.03 + vertex 0.03333333 0.04 0.04 + vertex 0.04 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.04 + vertex 0.04 0.04 0.03 + vertex 0.03333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.03333333 0.04 0.04 + vertex 0.03333333 0.04 0.05 + vertex 0.04 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.05 + vertex 0.04 0.04 0.04 + vertex 0.03333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.05 + vertex 0.04 0.04 -0.04 + vertex 0.04666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.04 + vertex 0.04666667 0.04 -0.05 + vertex 0.04 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.04 + vertex 0.04 0.04 -0.03 + vertex 0.04666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.03 + vertex 0.04666667 0.04 -0.04 + vertex 0.04 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.03 + vertex 0.04 0.04 -0.02 + vertex 0.04666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.02 + vertex 0.04666667 0.04 -0.03 + vertex 0.04 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.02 + vertex 0.04 0.04 -0.01 + vertex 0.04666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.01 + vertex 0.04666667 0.04 -0.02 + vertex 0.04 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 -0.01 + vertex 0.04 0.04 -5.782412e-19 + vertex 0.04666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0 + vertex 0.04666667 0.04 -0.01 + vertex 0.04 0.04 -0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.04 0.04 0.01 + vertex 0.04666667 0.04 0.01 + vertex 0.04666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0 + vertex 0.04 0.04 -5.782412e-19 + vertex 0.04 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.01 + vertex 0.04 0.04 0.02 + vertex 0.04666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.02 + vertex 0.04666667 0.04 0.01 + vertex 0.04 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.02 + vertex 0.04 0.04 0.03 + vertex 0.04666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.03 + vertex 0.04666667 0.04 0.02 + vertex 0.04 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.03 + vertex 0.04 0.04 0.04 + vertex 0.04666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.04 + vertex 0.04666667 0.04 0.03 + vertex 0.04 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04 0.04 0.04 + vertex 0.04 0.04 0.05 + vertex 0.04666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.05 + vertex 0.04666667 0.04 0.04 + vertex 0.04 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.05 + vertex 0.04666667 0.04 -0.04 + vertex 0.05333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.04 + vertex 0.05333333 0.04 -0.05 + vertex 0.04666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.04 + vertex 0.04666667 0.04 -0.03 + vertex 0.05333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.03 + vertex 0.05333333 0.04 -0.04 + vertex 0.04666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.03 + vertex 0.04666667 0.04 -0.02 + vertex 0.05333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.02 + vertex 0.05333333 0.04 -0.03 + vertex 0.04666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.02 + vertex 0.04666667 0.04 -0.01 + vertex 0.05333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.01 + vertex 0.05333333 0.04 -0.02 + vertex 0.04666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 -0.01 + vertex 0.04666667 0.04 0 + vertex 0.05333333 0.04 -2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -2.891206e-19 + vertex 0.05333333 0.04 -0.01 + vertex 0.04666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0 + vertex 0.04666667 0.04 0.01 + vertex 0.05333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.01 + vertex 0.05333333 0.04 -2.891206e-19 + vertex 0.04666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.01 + vertex 0.04666667 0.04 0.02 + vertex 0.05333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.02 + vertex 0.05333333 0.04 0.01 + vertex 0.04666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.02 + vertex 0.04666667 0.04 0.03 + vertex 0.05333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.03 + vertex 0.05333333 0.04 0.02 + vertex 0.04666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.03 + vertex 0.04666667 0.04 0.04 + vertex 0.05333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.04 + vertex 0.05333333 0.04 0.03 + vertex 0.04666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.04666667 0.04 0.04 + vertex 0.04666667 0.04 0.05 + vertex 0.05333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.05 + vertex 0.05333333 0.04 0.04 + vertex 0.04666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.05 + vertex 0.05333333 0.04 -0.04 + vertex 0.06 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.04 + vertex 0.06 0.04 -0.05 + vertex 0.05333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.04 + vertex 0.05333333 0.04 -0.03 + vertex 0.06 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.03 + vertex 0.06 0.04 -0.04 + vertex 0.05333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.03 + vertex 0.05333333 0.04 -0.02 + vertex 0.06 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.02 + vertex 0.06 0.04 -0.03 + vertex 0.05333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.02 + vertex 0.05333333 0.04 -0.01 + vertex 0.06 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.01 + vertex 0.06 0.04 -0.02 + vertex 0.05333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 -0.01 + vertex 0.05333333 0.04 -2.891206e-19 + vertex 0.06 0.04 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 5.782412e-19 + vertex 0.06 0.04 -0.01 + vertex 0.05333333 0.04 -0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.05333333 0.04 0.01 + vertex 0.06 0.04 0.01 + vertex 0.06 0.04 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 5.782412e-19 + vertex 0.05333333 0.04 -2.891206e-19 + vertex 0.05333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.01 + vertex 0.05333333 0.04 0.02 + vertex 0.06 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.02 + vertex 0.06 0.04 0.01 + vertex 0.05333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.02 + vertex 0.05333333 0.04 0.03 + vertex 0.06 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.03 + vertex 0.06 0.04 0.02 + vertex 0.05333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.03 + vertex 0.05333333 0.04 0.04 + vertex 0.06 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.04 + vertex 0.06 0.04 0.03 + vertex 0.05333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.05333333 0.04 0.04 + vertex 0.05333333 0.04 0.05 + vertex 0.06 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.05 + vertex 0.06 0.04 0.04 + vertex 0.05333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.05 + vertex 0.06 0.04 -0.04 + vertex 0.06666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.04 + vertex 0.06666667 0.04 -0.05 + vertex 0.06 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.04 + vertex 0.06 0.04 -0.03 + vertex 0.06666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.03 + vertex 0.06666667 0.04 -0.04 + vertex 0.06 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.03 + vertex 0.06 0.04 -0.02 + vertex 0.06666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.02 + vertex 0.06666667 0.04 -0.03 + vertex 0.06 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.02 + vertex 0.06 0.04 -0.01 + vertex 0.06666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.01 + vertex 0.06666667 0.04 -0.02 + vertex 0.06 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 -0.01 + vertex 0.06 0.04 5.782412e-19 + vertex 0.06666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0 + vertex 0.06666667 0.04 -0.01 + vertex 0.06 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 5.782412e-19 + vertex 0.06 0.04 0.01 + vertex 0.06666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.01 + vertex 0.06666667 0.04 0 + vertex 0.06 0.04 5.782412e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.01 + vertex 0.06 0.04 0.02 + vertex 0.06666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.02 + vertex 0.06666667 0.04 0.01 + vertex 0.06 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.02 + vertex 0.06 0.04 0.03 + vertex 0.06666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.03 + vertex 0.06666667 0.04 0.02 + vertex 0.06 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.03 + vertex 0.06 0.04 0.04 + vertex 0.06666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.04 + vertex 0.06666667 0.04 0.03 + vertex 0.06 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06 0.04 0.04 + vertex 0.06 0.04 0.05 + vertex 0.06666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.05 + vertex 0.06666667 0.04 0.04 + vertex 0.06 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.05 + vertex 0.06666667 0.04 -0.04 + vertex 0.07333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.04 + vertex 0.07333333 0.04 -0.05 + vertex 0.06666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.04 + vertex 0.06666667 0.04 -0.03 + vertex 0.07333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.03 + vertex 0.07333333 0.04 -0.04 + vertex 0.06666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.03 + vertex 0.06666667 0.04 -0.02 + vertex 0.07333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.02 + vertex 0.07333333 0.04 -0.03 + vertex 0.06666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.02 + vertex 0.06666667 0.04 -0.01 + vertex 0.07333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.01 + vertex 0.07333333 0.04 -0.02 + vertex 0.06666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 -0.01 + vertex 0.06666667 0.04 0 + vertex 0.07333333 0.04 -4.336809e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -4.336809e-19 + vertex 0.07333333 0.04 -0.01 + vertex 0.06666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0 + vertex 0.06666667 0.04 0.01 + vertex 0.07333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.01 + vertex 0.07333333 0.04 -4.336809e-19 + vertex 0.06666667 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.01 + vertex 0.06666667 0.04 0.02 + vertex 0.07333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.02 + vertex 0.07333333 0.04 0.01 + vertex 0.06666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.02 + vertex 0.06666667 0.04 0.03 + vertex 0.07333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.03 + vertex 0.07333333 0.04 0.02 + vertex 0.06666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.03 + vertex 0.06666667 0.04 0.04 + vertex 0.07333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.04 + vertex 0.07333333 0.04 0.03 + vertex 0.06666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.06666667 0.04 0.04 + vertex 0.06666667 0.04 0.05 + vertex 0.07333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.05 + vertex 0.07333333 0.04 0.04 + vertex 0.06666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.05 + vertex 0.07333333 0.04 -0.04 + vertex 0.08 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.04 + vertex 0.08 0.04 -0.05 + vertex 0.07333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.04 + vertex 0.07333333 0.04 -0.03 + vertex 0.08 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.03 + vertex 0.08 0.04 -0.04 + vertex 0.07333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.03 + vertex 0.07333333 0.04 -0.02 + vertex 0.08 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.02 + vertex 0.08 0.04 -0.03 + vertex 0.07333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.02 + vertex 0.07333333 0.04 -0.01 + vertex 0.08 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.01 + vertex 0.08 0.04 -0.02 + vertex 0.07333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 -0.01 + vertex 0.07333333 0.04 -4.336809e-19 + vertex 0.08 0.04 2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 2.891206e-19 + vertex 0.08 0.04 -0.01 + vertex 0.07333333 0.04 -0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.07333333 0.04 0.01 + vertex 0.08 0.04 0.01 + vertex 0.08 0.04 2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 2.891206e-19 + vertex 0.07333333 0.04 -4.336809e-19 + vertex 0.07333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.01 + vertex 0.07333333 0.04 0.02 + vertex 0.08 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.02 + vertex 0.08 0.04 0.01 + vertex 0.07333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.02 + vertex 0.07333333 0.04 0.03 + vertex 0.08 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.03 + vertex 0.08 0.04 0.02 + vertex 0.07333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.03 + vertex 0.07333333 0.04 0.04 + vertex 0.08 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.04 + vertex 0.08 0.04 0.03 + vertex 0.07333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.07333333 0.04 0.04 + vertex 0.07333333 0.04 0.05 + vertex 0.08 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.05 + vertex 0.08 0.04 0.04 + vertex 0.07333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.05 + vertex 0.08 0.04 -0.04 + vertex 0.08666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.04 + vertex 0.08666667 0.04 -0.05 + vertex 0.08 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.04 + vertex 0.08 0.04 -0.03 + vertex 0.08666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.03 + vertex 0.08666667 0.04 -0.04 + vertex 0.08 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.03 + vertex 0.08 0.04 -0.02 + vertex 0.08666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.02 + vertex 0.08666667 0.04 -0.03 + vertex 0.08 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.02 + vertex 0.08 0.04 -0.01 + vertex 0.08666667 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.01 + vertex 0.08666667 0.04 -0.02 + vertex 0.08 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 -0.01 + vertex 0.08 0.04 2.891206e-19 + vertex 0.08666667 0.04 -2.168404e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -2.168404e-19 + vertex 0.08666667 0.04 -0.01 + vertex 0.08 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 2.891206e-19 + vertex 0.08 0.04 0.01 + vertex 0.08666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.01 + vertex 0.08666667 0.04 -2.168404e-19 + vertex 0.08 0.04 2.891206e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.01 + vertex 0.08 0.04 0.02 + vertex 0.08666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.02 + vertex 0.08666667 0.04 0.01 + vertex 0.08 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.02 + vertex 0.08 0.04 0.03 + vertex 0.08666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.03 + vertex 0.08666667 0.04 0.02 + vertex 0.08 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.03 + vertex 0.08 0.04 0.04 + vertex 0.08666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.04 + vertex 0.08666667 0.04 0.03 + vertex 0.08 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08 0.04 0.04 + vertex 0.08 0.04 0.05 + vertex 0.08666667 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.05 + vertex 0.08666667 0.04 0.04 + vertex 0.08 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.05 + vertex 0.08666667 0.04 -0.04 + vertex 0.09333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.04 + vertex 0.09333333 0.04 -0.05 + vertex 0.08666667 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.04 + vertex 0.08666667 0.04 -0.03 + vertex 0.09333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.03 + vertex 0.09333333 0.04 -0.04 + vertex 0.08666667 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.03 + vertex 0.08666667 0.04 -0.02 + vertex 0.09333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.02 + vertex 0.09333333 0.04 -0.03 + vertex 0.08666667 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.02 + vertex 0.08666667 0.04 -0.01 + vertex 0.09333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.01 + vertex 0.09333333 0.04 -0.02 + vertex 0.08666667 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 -0.01 + vertex 0.08666667 0.04 -2.168404e-19 + vertex 0.09333333 0.04 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 4.698209e-19 + vertex 0.09333333 0.04 -0.01 + vertex 0.08666667 0.04 -0.01 + endloop + endfacet + facet normal -0 1 0 + outer loop + vertex 0.08666667 0.04 0.01 + vertex 0.09333333 0.04 0.01 + vertex 0.09333333 0.04 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 4.698209e-19 + vertex 0.08666667 0.04 -2.168404e-19 + vertex 0.08666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.01 + vertex 0.08666667 0.04 0.02 + vertex 0.09333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.02 + vertex 0.09333333 0.04 0.01 + vertex 0.08666667 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.02 + vertex 0.08666667 0.04 0.03 + vertex 0.09333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.03 + vertex 0.09333333 0.04 0.02 + vertex 0.08666667 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.03 + vertex 0.08666667 0.04 0.04 + vertex 0.09333333 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.04 + vertex 0.09333333 0.04 0.03 + vertex 0.08666667 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.08666667 0.04 0.04 + vertex 0.08666667 0.04 0.05 + vertex 0.09333333 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.05 + vertex 0.09333333 0.04 0.04 + vertex 0.08666667 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.05 + vertex 0.09333333 0.04 -0.04 + vertex 0.1 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 -0.04 + vertex 0.1 0.04 -0.05 + vertex 0.09333333 0.04 -0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.04 + vertex 0.09333333 0.04 -0.03 + vertex 0.1 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 -0.03 + vertex 0.1 0.04 -0.04 + vertex 0.09333333 0.04 -0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.03 + vertex 0.09333333 0.04 -0.02 + vertex 0.1 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 -0.02 + vertex 0.1 0.04 -0.03 + vertex 0.09333333 0.04 -0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.02 + vertex 0.09333333 0.04 -0.01 + vertex 0.1 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 -0.01 + vertex 0.1 0.04 -0.02 + vertex 0.09333333 0.04 -0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 -0.01 + vertex 0.09333333 0.04 4.698209e-19 + vertex 0.1 0.04 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 0 + vertex 0.1 0.04 -0.01 + vertex 0.09333333 0.04 -0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 4.698209e-19 + vertex 0.09333333 0.04 0.01 + vertex 0.1 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 0.01 + vertex 0.1 0.04 0 + vertex 0.09333333 0.04 4.698209e-19 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.01 + vertex 0.09333333 0.04 0.02 + vertex 0.1 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 0.02 + vertex 0.1 0.04 0.01 + vertex 0.09333333 0.04 0.01 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.02 + vertex 0.09333333 0.04 0.03 + vertex 0.1 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 0.03 + vertex 0.1 0.04 0.02 + vertex 0.09333333 0.04 0.02 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.03 + vertex 0.09333333 0.04 0.04 + vertex 0.1 0.04 0.04 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 0.04 + vertex 0.1 0.04 0.03 + vertex 0.09333333 0.04 0.03 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.09333333 0.04 0.04 + vertex 0.09333333 0.04 0.05 + vertex 0.1 0.04 0.05 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 0.1 0.04 0.05 + vertex 0.1 0.04 0.04 + vertex 0.09333333 0.04 0.04 + endloop + endfacet +endsolid maxY +solid minX + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 -0.05 + vertex -0.1 0.008 -0.04 + vertex -0.1 0.016 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 -0.04 + vertex -0.1 0.016 -0.05 + vertex -0.1 0.008 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 -0.05 + vertex -0.1 0.016 -0.04 + vertex -0.1 0.024 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 -0.04 + vertex -0.1 0.024 -0.05 + vertex -0.1 0.016 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 -0.05 + vertex -0.1 0.024 -0.04 + vertex -0.1 0.032 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 -0.04 + vertex -0.1 0.032 -0.05 + vertex -0.1 0.024 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 -0.05 + vertex -0.1 0.032 -0.04 + vertex -0.1 0.04 -0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 -0.04 + vertex -0.1 0.04 -0.05 + vertex -0.1 0.032 -0.05 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 -0.04 + vertex -0.1 0.008 -0.03 + vertex -0.1 0.016 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 -0.03 + vertex -0.1 0.016 -0.04 + vertex -0.1 0.008 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 -0.04 + vertex -0.1 0.016 -0.03 + vertex -0.1 0.024 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 -0.03 + vertex -0.1 0.024 -0.04 + vertex -0.1 0.016 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 -0.04 + vertex -0.1 0.024 -0.03 + vertex -0.1 0.032 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 -0.03 + vertex -0.1 0.032 -0.04 + vertex -0.1 0.024 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 -0.04 + vertex -0.1 0.032 -0.03 + vertex -0.1 0.04 -0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 -0.03 + vertex -0.1 0.04 -0.04 + vertex -0.1 0.032 -0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 -0.03 + vertex -0.1 0.008 -0.02 + vertex -0.1 0.016 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 -0.02 + vertex -0.1 0.016 -0.03 + vertex -0.1 0.008 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 -0.03 + vertex -0.1 0.016 -0.02 + vertex -0.1 0.024 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 -0.02 + vertex -0.1 0.024 -0.03 + vertex -0.1 0.016 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 -0.03 + vertex -0.1 0.024 -0.02 + vertex -0.1 0.032 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 -0.02 + vertex -0.1 0.032 -0.03 + vertex -0.1 0.024 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 -0.03 + vertex -0.1 0.032 -0.02 + vertex -0.1 0.04 -0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 -0.02 + vertex -0.1 0.04 -0.03 + vertex -0.1 0.032 -0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 -0.02 + vertex -0.1 0.008 -0.01 + vertex -0.1 0.016 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 -0.01 + vertex -0.1 0.016 -0.02 + vertex -0.1 0.008 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 -0.02 + vertex -0.1 0.016 -0.01 + vertex -0.1 0.024 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 -0.01 + vertex -0.1 0.024 -0.02 + vertex -0.1 0.016 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 -0.02 + vertex -0.1 0.024 -0.01 + vertex -0.1 0.032 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 -0.01 + vertex -0.1 0.032 -0.02 + vertex -0.1 0.024 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 -0.02 + vertex -0.1 0.032 -0.01 + vertex -0.1 0.04 -0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 -0.01 + vertex -0.1 0.04 -0.02 + vertex -0.1 0.032 -0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 -0.01 + vertex -0.1 0.008 0 + vertex -0.1 0.016 -2.891206e-19 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 -2.891206e-19 + vertex -0.1 0.016 -0.01 + vertex -0.1 0.008 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 -0.01 + vertex -0.1 0.016 -2.891206e-19 + vertex -0.1 0.024 5.782412e-19 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 5.782412e-19 + vertex -0.1 0.024 -0.01 + vertex -0.1 0.016 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 -0.01 + vertex -0.1 0.024 5.782412e-19 + vertex -0.1 0.032 2.891206e-19 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 2.891206e-19 + vertex -0.1 0.032 -0.01 + vertex -0.1 0.024 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 -0.01 + vertex -0.1 0.032 2.891206e-19 + vertex -0.1 0.04 0 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 0 + vertex -0.1 0.04 -0.01 + vertex -0.1 0.032 -0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 0 + vertex -0.1 0.008 0.01 + vertex -0.1 0.016 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 0.01 + vertex -0.1 0.016 -2.891206e-19 + vertex -0.1 0.008 0 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 0.01 + vertex -0.1 0.024 0.01 + vertex -0.1 0.024 5.782412e-19 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -0.1 0.024 5.782412e-19 + vertex -0.1 0.016 -2.891206e-19 + vertex -0.1 0.016 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 5.782412e-19 + vertex -0.1 0.024 0.01 + vertex -0.1 0.032 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 0.01 + vertex -0.1 0.032 2.891206e-19 + vertex -0.1 0.024 5.782412e-19 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 2.891206e-19 + vertex -0.1 0.032 0.01 + vertex -0.1 0.04 0.01 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 0.01 + vertex -0.1 0.04 0 + vertex -0.1 0.032 2.891206e-19 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 0.01 + vertex -0.1 0.008 0.02 + vertex -0.1 0.016 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 0.02 + vertex -0.1 0.016 0.01 + vertex -0.1 0.008 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 0.01 + vertex -0.1 0.016 0.02 + vertex -0.1 0.024 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 0.02 + vertex -0.1 0.024 0.01 + vertex -0.1 0.016 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 0.01 + vertex -0.1 0.024 0.02 + vertex -0.1 0.032 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 0.02 + vertex -0.1 0.032 0.01 + vertex -0.1 0.024 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 0.01 + vertex -0.1 0.032 0.02 + vertex -0.1 0.04 0.02 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 0.02 + vertex -0.1 0.04 0.01 + vertex -0.1 0.032 0.01 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 0.02 + vertex -0.1 0.008 0.03 + vertex -0.1 0.016 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 0.03 + vertex -0.1 0.016 0.02 + vertex -0.1 0.008 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 0.02 + vertex -0.1 0.016 0.03 + vertex -0.1 0.024 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 0.03 + vertex -0.1 0.024 0.02 + vertex -0.1 0.016 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 0.02 + vertex -0.1 0.024 0.03 + vertex -0.1 0.032 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 0.03 + vertex -0.1 0.032 0.02 + vertex -0.1 0.024 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 0.02 + vertex -0.1 0.032 0.03 + vertex -0.1 0.04 0.03 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 0.03 + vertex -0.1 0.04 0.02 + vertex -0.1 0.032 0.02 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 0.03 + vertex -0.1 0.008 0.04 + vertex -0.1 0.016 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 0.04 + vertex -0.1 0.016 0.03 + vertex -0.1 0.008 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 0.03 + vertex -0.1 0.016 0.04 + vertex -0.1 0.024 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 0.04 + vertex -0.1 0.024 0.03 + vertex -0.1 0.016 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 0.03 + vertex -0.1 0.024 0.04 + vertex -0.1 0.032 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 0.04 + vertex -0.1 0.032 0.03 + vertex -0.1 0.024 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 0.03 + vertex -0.1 0.032 0.04 + vertex -0.1 0.04 0.04 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 0.04 + vertex -0.1 0.04 0.03 + vertex -0.1 0.032 0.03 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.008 0.04 + vertex -0.1 0.008 0.05 + vertex -0.1 0.016 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.016 0.05 + vertex -0.1 0.016 0.04 + vertex -0.1 0.008 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.016 0.04 + vertex -0.1 0.016 0.05 + vertex -0.1 0.024 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.024 0.05 + vertex -0.1 0.024 0.04 + vertex -0.1 0.016 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.024 0.04 + vertex -0.1 0.024 0.05 + vertex -0.1 0.032 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.032 0.05 + vertex -0.1 0.032 0.04 + vertex -0.1 0.024 0.04 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -0.1 0.032 0.04 + vertex -0.1 0.032 0.05 + vertex -0.1 0.04 0.05 + endloop + endfacet + facet normal -1 0 -0 + outer loop + vertex -0.1 0.04 0.05 + vertex -0.1 0.04 0.04 + vertex -0.1 0.032 0.04 + endloop + endfacet +endsolid minX +solid maxX + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.05 + vertex 0.1 0.016 -0.05 + vertex 0.1 0.016 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.04 + vertex 0.1 0.008 -0.04 + vertex 0.1 0.008 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.05 + vertex 0.1 0.024 -0.05 + vertex 0.1 0.024 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.04 + vertex 0.1 0.016 -0.04 + vertex 0.1 0.016 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.05 + vertex 0.1 0.032 -0.05 + vertex 0.1 0.032 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.04 + vertex 0.1 0.024 -0.04 + vertex 0.1 0.024 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.05 + vertex 0.1 0.04 -0.05 + vertex 0.1 0.04 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 -0.04 + vertex 0.1 0.032 -0.04 + vertex 0.1 0.032 -0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.04 + vertex 0.1 0.016 -0.04 + vertex 0.1 0.016 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.03 + vertex 0.1 0.008 -0.03 + vertex 0.1 0.008 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.04 + vertex 0.1 0.024 -0.04 + vertex 0.1 0.024 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.03 + vertex 0.1 0.016 -0.03 + vertex 0.1 0.016 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.04 + vertex 0.1 0.032 -0.04 + vertex 0.1 0.032 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.03 + vertex 0.1 0.024 -0.03 + vertex 0.1 0.024 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.04 + vertex 0.1 0.04 -0.04 + vertex 0.1 0.04 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 -0.03 + vertex 0.1 0.032 -0.03 + vertex 0.1 0.032 -0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.03 + vertex 0.1 0.016 -0.03 + vertex 0.1 0.016 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.02 + vertex 0.1 0.008 -0.02 + vertex 0.1 0.008 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.03 + vertex 0.1 0.024 -0.03 + vertex 0.1 0.024 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.02 + vertex 0.1 0.016 -0.02 + vertex 0.1 0.016 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.03 + vertex 0.1 0.032 -0.03 + vertex 0.1 0.032 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.02 + vertex 0.1 0.024 -0.02 + vertex 0.1 0.024 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.03 + vertex 0.1 0.04 -0.03 + vertex 0.1 0.04 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 -0.02 + vertex 0.1 0.032 -0.02 + vertex 0.1 0.032 -0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.02 + vertex 0.1 0.016 -0.02 + vertex 0.1 0.016 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.01 + vertex 0.1 0.008 -0.01 + vertex 0.1 0.008 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.02 + vertex 0.1 0.024 -0.02 + vertex 0.1 0.024 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.01 + vertex 0.1 0.016 -0.01 + vertex 0.1 0.016 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.02 + vertex 0.1 0.032 -0.02 + vertex 0.1 0.032 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.01 + vertex 0.1 0.024 -0.01 + vertex 0.1 0.024 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.02 + vertex 0.1 0.04 -0.02 + vertex 0.1 0.04 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 -0.01 + vertex 0.1 0.032 -0.01 + vertex 0.1 0.032 -0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 -0.01 + vertex 0.1 0.016 -0.01 + vertex 0.1 0.016 -2.891206e-19 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -2.891206e-19 + vertex 0.1 0.008 0 + vertex 0.1 0.008 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 -0.01 + vertex 0.1 0.024 -0.01 + vertex 0.1 0.024 5.782412e-19 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 5.782412e-19 + vertex 0.1 0.016 -2.891206e-19 + vertex 0.1 0.016 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 -0.01 + vertex 0.1 0.032 -0.01 + vertex 0.1 0.032 2.891206e-19 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 2.891206e-19 + vertex 0.1 0.024 5.782412e-19 + vertex 0.1 0.024 -0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 -0.01 + vertex 0.1 0.04 -0.01 + vertex 0.1 0.04 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 0 + vertex 0.1 0.032 2.891206e-19 + vertex 0.1 0.032 -0.01 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.1 0.008 0 + vertex 0.1 0.016 -2.891206e-19 + vertex 0.1 0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.01 + vertex 0.1 0.008 0.01 + vertex 0.1 0.008 0 + endloop + endfacet + facet normal 1 0 -0 + outer loop + vertex 0.1 0.024 5.782412e-19 + vertex 0.1 0.024 0.01 + vertex 0.1 0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.01 + vertex 0.1 0.016 -2.891206e-19 + vertex 0.1 0.024 5.782412e-19 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.1 0.024 5.782412e-19 + vertex 0.1 0.032 2.891206e-19 + vertex 0.1 0.032 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.01 + vertex 0.1 0.024 0.01 + vertex 0.1 0.024 5.782412e-19 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 0.1 0.032 2.891206e-19 + vertex 0.1 0.04 0 + vertex 0.1 0.04 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 0.01 + vertex 0.1 0.032 0.01 + vertex 0.1 0.032 2.891206e-19 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.01 + vertex 0.1 0.016 0.01 + vertex 0.1 0.016 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.02 + vertex 0.1 0.008 0.02 + vertex 0.1 0.008 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.01 + vertex 0.1 0.024 0.01 + vertex 0.1 0.024 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.02 + vertex 0.1 0.016 0.02 + vertex 0.1 0.016 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.01 + vertex 0.1 0.032 0.01 + vertex 0.1 0.032 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.02 + vertex 0.1 0.024 0.02 + vertex 0.1 0.024 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.01 + vertex 0.1 0.04 0.01 + vertex 0.1 0.04 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 0.02 + vertex 0.1 0.032 0.02 + vertex 0.1 0.032 0.01 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.02 + vertex 0.1 0.016 0.02 + vertex 0.1 0.016 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.03 + vertex 0.1 0.008 0.03 + vertex 0.1 0.008 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.02 + vertex 0.1 0.024 0.02 + vertex 0.1 0.024 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.03 + vertex 0.1 0.016 0.03 + vertex 0.1 0.016 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.02 + vertex 0.1 0.032 0.02 + vertex 0.1 0.032 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.03 + vertex 0.1 0.024 0.03 + vertex 0.1 0.024 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.02 + vertex 0.1 0.04 0.02 + vertex 0.1 0.04 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 0.03 + vertex 0.1 0.032 0.03 + vertex 0.1 0.032 0.02 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.03 + vertex 0.1 0.016 0.03 + vertex 0.1 0.016 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.04 + vertex 0.1 0.008 0.04 + vertex 0.1 0.008 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.03 + vertex 0.1 0.024 0.03 + vertex 0.1 0.024 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.04 + vertex 0.1 0.016 0.04 + vertex 0.1 0.016 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.03 + vertex 0.1 0.032 0.03 + vertex 0.1 0.032 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.04 + vertex 0.1 0.024 0.04 + vertex 0.1 0.024 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.03 + vertex 0.1 0.04 0.03 + vertex 0.1 0.04 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 0.04 + vertex 0.1 0.032 0.04 + vertex 0.1 0.032 0.03 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.008 0.04 + vertex 0.1 0.016 0.04 + vertex 0.1 0.016 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.05 + vertex 0.1 0.008 0.05 + vertex 0.1 0.008 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.016 0.04 + vertex 0.1 0.024 0.04 + vertex 0.1 0.024 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.05 + vertex 0.1 0.016 0.05 + vertex 0.1 0.016 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.024 0.04 + vertex 0.1 0.032 0.04 + vertex 0.1 0.032 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.05 + vertex 0.1 0.024 0.05 + vertex 0.1 0.024 0.04 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.032 0.04 + vertex 0.1 0.04 0.04 + vertex 0.1 0.04 0.05 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 0.1 0.04 0.05 + vertex 0.1 0.032 0.05 + vertex 0.1 0.032 0.04 + endloop + endfacet +endsolid maxX +solid minZ + facet normal 0 0 -1 + outer loop + vertex -0.1 0.008 -0.05 + vertex -0.1 0.016 -0.05 + vertex -0.09333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 0.016 -0.05 + vertex -0.09333333 0.008 -0.05 + vertex -0.1 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 0.016 -0.05 + vertex -0.1 0.024 -0.05 + vertex -0.09333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 0.024 -0.05 + vertex -0.09333333 0.016 -0.05 + vertex -0.1 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 0.024 -0.05 + vertex -0.1 0.032 -0.05 + vertex -0.09333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 0.032 -0.05 + vertex -0.09333333 0.024 -0.05 + vertex -0.1 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.1 0.032 -0.05 + vertex -0.1 0.04 -0.05 + vertex -0.09333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.09333333 0.04 -0.05 + vertex -0.09333333 0.032 -0.05 + vertex -0.1 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 0.008 -0.05 + vertex -0.09333333 0.016 -0.05 + vertex -0.08666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 0.016 -0.05 + vertex -0.08666667 0.008 -0.05 + vertex -0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 0.016 -0.05 + vertex -0.09333333 0.024 -0.05 + vertex -0.08666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 0.024 -0.05 + vertex -0.08666667 0.016 -0.05 + vertex -0.09333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 0.024 -0.05 + vertex -0.09333333 0.032 -0.05 + vertex -0.08666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 0.032 -0.05 + vertex -0.08666667 0.024 -0.05 + vertex -0.09333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.09333333 0.032 -0.05 + vertex -0.09333333 0.04 -0.05 + vertex -0.08666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08666667 0.04 -0.05 + vertex -0.08666667 0.032 -0.05 + vertex -0.09333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 0.008 -0.05 + vertex -0.08666667 0.016 -0.05 + vertex -0.08 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 0.016 -0.05 + vertex -0.08 0.008 -0.05 + vertex -0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 0.016 -0.05 + vertex -0.08666667 0.024 -0.05 + vertex -0.08 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 0.024 -0.05 + vertex -0.08 0.016 -0.05 + vertex -0.08666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 0.024 -0.05 + vertex -0.08666667 0.032 -0.05 + vertex -0.08 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 0.032 -0.05 + vertex -0.08 0.024 -0.05 + vertex -0.08666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08666667 0.032 -0.05 + vertex -0.08666667 0.04 -0.05 + vertex -0.08 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.08 0.04 -0.05 + vertex -0.08 0.032 -0.05 + vertex -0.08666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 0.008 -0.05 + vertex -0.08 0.016 -0.05 + vertex -0.07333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 0.016 -0.05 + vertex -0.07333333 0.008 -0.05 + vertex -0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 0.016 -0.05 + vertex -0.08 0.024 -0.05 + vertex -0.07333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 0.024 -0.05 + vertex -0.07333333 0.016 -0.05 + vertex -0.08 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 0.024 -0.05 + vertex -0.08 0.032 -0.05 + vertex -0.07333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 0.032 -0.05 + vertex -0.07333333 0.024 -0.05 + vertex -0.08 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.08 0.032 -0.05 + vertex -0.08 0.04 -0.05 + vertex -0.07333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.07333333 0.04 -0.05 + vertex -0.07333333 0.032 -0.05 + vertex -0.08 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 0.008 -0.05 + vertex -0.07333333 0.016 -0.05 + vertex -0.06666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 0.016 -0.05 + vertex -0.06666667 0.008 -0.05 + vertex -0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 0.016 -0.05 + vertex -0.07333333 0.024 -0.05 + vertex -0.06666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 0.024 -0.05 + vertex -0.06666667 0.016 -0.05 + vertex -0.07333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 0.024 -0.05 + vertex -0.07333333 0.032 -0.05 + vertex -0.06666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 0.032 -0.05 + vertex -0.06666667 0.024 -0.05 + vertex -0.07333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.07333333 0.032 -0.05 + vertex -0.07333333 0.04 -0.05 + vertex -0.06666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06666667 0.04 -0.05 + vertex -0.06666667 0.032 -0.05 + vertex -0.07333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 0.008 -0.05 + vertex -0.06666667 0.016 -0.05 + vertex -0.06 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 0.016 -0.05 + vertex -0.06 0.008 -0.05 + vertex -0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 0.016 -0.05 + vertex -0.06666667 0.024 -0.05 + vertex -0.06 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 0.024 -0.05 + vertex -0.06 0.016 -0.05 + vertex -0.06666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 0.024 -0.05 + vertex -0.06666667 0.032 -0.05 + vertex -0.06 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 0.032 -0.05 + vertex -0.06 0.024 -0.05 + vertex -0.06666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06666667 0.032 -0.05 + vertex -0.06666667 0.04 -0.05 + vertex -0.06 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.06 0.04 -0.05 + vertex -0.06 0.032 -0.05 + vertex -0.06666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 0.008 -0.05 + vertex -0.06 0.016 -0.05 + vertex -0.05333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 0.016 -0.05 + vertex -0.05333333 0.008 -0.05 + vertex -0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 0.016 -0.05 + vertex -0.06 0.024 -0.05 + vertex -0.05333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 0.024 -0.05 + vertex -0.05333333 0.016 -0.05 + vertex -0.06 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 0.024 -0.05 + vertex -0.06 0.032 -0.05 + vertex -0.05333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 0.032 -0.05 + vertex -0.05333333 0.024 -0.05 + vertex -0.06 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.06 0.032 -0.05 + vertex -0.06 0.04 -0.05 + vertex -0.05333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.05333333 0.04 -0.05 + vertex -0.05333333 0.032 -0.05 + vertex -0.06 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 0.008 -0.05 + vertex -0.05333333 0.016 -0.05 + vertex -0.04666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 0.016 -0.05 + vertex -0.04666667 0.008 -0.05 + vertex -0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 0.016 -0.05 + vertex -0.05333333 0.024 -0.05 + vertex -0.04666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 0.024 -0.05 + vertex -0.04666667 0.016 -0.05 + vertex -0.05333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 0.024 -0.05 + vertex -0.05333333 0.032 -0.05 + vertex -0.04666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 0.032 -0.05 + vertex -0.04666667 0.024 -0.05 + vertex -0.05333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.05333333 0.032 -0.05 + vertex -0.05333333 0.04 -0.05 + vertex -0.04666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04666667 0.04 -0.05 + vertex -0.04666667 0.032 -0.05 + vertex -0.05333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 0.008 -0.05 + vertex -0.04666667 0.016 -0.05 + vertex -0.04 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 0.016 -0.05 + vertex -0.04 0.008 -0.05 + vertex -0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 0.016 -0.05 + vertex -0.04666667 0.024 -0.05 + vertex -0.04 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 0.024 -0.05 + vertex -0.04 0.016 -0.05 + vertex -0.04666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 0.024 -0.05 + vertex -0.04666667 0.032 -0.05 + vertex -0.04 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 0.032 -0.05 + vertex -0.04 0.024 -0.05 + vertex -0.04666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04666667 0.032 -0.05 + vertex -0.04666667 0.04 -0.05 + vertex -0.04 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.04 0.04 -0.05 + vertex -0.04 0.032 -0.05 + vertex -0.04666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 0.008 -0.05 + vertex -0.04 0.016 -0.05 + vertex -0.03333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 0.016 -0.05 + vertex -0.03333333 0.008 -0.05 + vertex -0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 0.016 -0.05 + vertex -0.04 0.024 -0.05 + vertex -0.03333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 0.024 -0.05 + vertex -0.03333333 0.016 -0.05 + vertex -0.04 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 0.024 -0.05 + vertex -0.04 0.032 -0.05 + vertex -0.03333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 0.032 -0.05 + vertex -0.03333333 0.024 -0.05 + vertex -0.04 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.04 0.032 -0.05 + vertex -0.04 0.04 -0.05 + vertex -0.03333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.03333333 0.04 -0.05 + vertex -0.03333333 0.032 -0.05 + vertex -0.04 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 0.008 -0.05 + vertex -0.03333333 0.016 -0.05 + vertex -0.02666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 0.016 -0.05 + vertex -0.02666667 0.008 -0.05 + vertex -0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 0.016 -0.05 + vertex -0.03333333 0.024 -0.05 + vertex -0.02666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 0.024 -0.05 + vertex -0.02666667 0.016 -0.05 + vertex -0.03333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 0.024 -0.05 + vertex -0.03333333 0.032 -0.05 + vertex -0.02666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 0.032 -0.05 + vertex -0.02666667 0.024 -0.05 + vertex -0.03333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.03333333 0.032 -0.05 + vertex -0.03333333 0.04 -0.05 + vertex -0.02666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02666667 0.04 -0.05 + vertex -0.02666667 0.032 -0.05 + vertex -0.03333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 0.008 -0.05 + vertex -0.02666667 0.016 -0.05 + vertex -0.02 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 0.016 -0.05 + vertex -0.02 0.008 -0.05 + vertex -0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 0.016 -0.05 + vertex -0.02666667 0.024 -0.05 + vertex -0.02 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 0.024 -0.05 + vertex -0.02 0.016 -0.05 + vertex -0.02666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 0.024 -0.05 + vertex -0.02666667 0.032 -0.05 + vertex -0.02 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 0.032 -0.05 + vertex -0.02 0.024 -0.05 + vertex -0.02666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02666667 0.032 -0.05 + vertex -0.02666667 0.04 -0.05 + vertex -0.02 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.02 0.04 -0.05 + vertex -0.02 0.032 -0.05 + vertex -0.02666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 0.008 -0.05 + vertex -0.02 0.016 -0.05 + vertex -0.01333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 0.016 -0.05 + vertex -0.01333333 0.008 -0.05 + vertex -0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 0.016 -0.05 + vertex -0.02 0.024 -0.05 + vertex -0.01333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 0.024 -0.05 + vertex -0.01333333 0.016 -0.05 + vertex -0.02 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 0.024 -0.05 + vertex -0.02 0.032 -0.05 + vertex -0.01333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 0.032 -0.05 + vertex -0.01333333 0.024 -0.05 + vertex -0.02 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.02 0.032 -0.05 + vertex -0.02 0.04 -0.05 + vertex -0.01333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.01333333 0.04 -0.05 + vertex -0.01333333 0.032 -0.05 + vertex -0.02 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 0.008 -0.05 + vertex -0.01333333 0.016 -0.05 + vertex -0.006666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0.016 -0.05 + vertex -0.006666667 0.008 -0.05 + vertex -0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 0.016 -0.05 + vertex -0.01333333 0.024 -0.05 + vertex -0.006666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0.024 -0.05 + vertex -0.006666667 0.016 -0.05 + vertex -0.01333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 0.024 -0.05 + vertex -0.01333333 0.032 -0.05 + vertex -0.006666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0.032 -0.05 + vertex -0.006666667 0.024 -0.05 + vertex -0.01333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.01333333 0.032 -0.05 + vertex -0.01333333 0.04 -0.05 + vertex -0.006666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -0.006666667 0.04 -0.05 + vertex -0.006666667 0.032 -0.05 + vertex -0.01333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 0.008 -0.05 + vertex -0.006666667 0.016 -0.05 + vertex 0 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0.016 -0.05 + vertex 0 0.008 -0.05 + vertex -0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 0.016 -0.05 + vertex -0.006666667 0.024 -0.05 + vertex 0 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0.024 -0.05 + vertex 0 0.016 -0.05 + vertex -0.006666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 0.024 -0.05 + vertex -0.006666667 0.032 -0.05 + vertex 0 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0.032 -0.05 + vertex 0 0.024 -0.05 + vertex -0.006666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.006666667 0.032 -0.05 + vertex -0.006666667 0.04 -0.05 + vertex 0 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0 0.04 -0.05 + vertex 0 0.032 -0.05 + vertex -0.006666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 0.008 -0.05 + vertex 0 0.016 -0.05 + vertex 0.006666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0.016 -0.05 + vertex 0.006666667 0.008 -0.05 + vertex 0 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 0.016 -0.05 + vertex 0 0.024 -0.05 + vertex 0.006666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0.024 -0.05 + vertex 0.006666667 0.016 -0.05 + vertex 0 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 0.024 -0.05 + vertex 0 0.032 -0.05 + vertex 0.006666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0.032 -0.05 + vertex 0.006666667 0.024 -0.05 + vertex 0 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 0.032 -0.05 + vertex 0 0.04 -0.05 + vertex 0.006666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.006666667 0.04 -0.05 + vertex 0.006666667 0.032 -0.05 + vertex 0 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 0.008 -0.05 + vertex 0.006666667 0.016 -0.05 + vertex 0.01333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0.016 -0.05 + vertex 0.01333333 0.008 -0.05 + vertex 0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 0.016 -0.05 + vertex 0.006666667 0.024 -0.05 + vertex 0.01333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0.024 -0.05 + vertex 0.01333333 0.016 -0.05 + vertex 0.006666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 0.024 -0.05 + vertex 0.006666667 0.032 -0.05 + vertex 0.01333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0.032 -0.05 + vertex 0.01333333 0.024 -0.05 + vertex 0.006666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.006666667 0.032 -0.05 + vertex 0.006666667 0.04 -0.05 + vertex 0.01333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.01333333 0.04 -0.05 + vertex 0.01333333 0.032 -0.05 + vertex 0.006666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 0.008 -0.05 + vertex 0.01333333 0.016 -0.05 + vertex 0.02 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 0.016 -0.05 + vertex 0.02 0.008 -0.05 + vertex 0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 0.016 -0.05 + vertex 0.01333333 0.024 -0.05 + vertex 0.02 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 0.024 -0.05 + vertex 0.02 0.016 -0.05 + vertex 0.01333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 0.024 -0.05 + vertex 0.01333333 0.032 -0.05 + vertex 0.02 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 0.032 -0.05 + vertex 0.02 0.024 -0.05 + vertex 0.01333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.01333333 0.032 -0.05 + vertex 0.01333333 0.04 -0.05 + vertex 0.02 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02 0.04 -0.05 + vertex 0.02 0.032 -0.05 + vertex 0.01333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 0.008 -0.05 + vertex 0.02 0.016 -0.05 + vertex 0.02666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 0.016 -0.05 + vertex 0.02666667 0.008 -0.05 + vertex 0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 0.016 -0.05 + vertex 0.02 0.024 -0.05 + vertex 0.02666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 0.024 -0.05 + vertex 0.02666667 0.016 -0.05 + vertex 0.02 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 0.024 -0.05 + vertex 0.02 0.032 -0.05 + vertex 0.02666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 0.032 -0.05 + vertex 0.02666667 0.024 -0.05 + vertex 0.02 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02 0.032 -0.05 + vertex 0.02 0.04 -0.05 + vertex 0.02666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.02666667 0.04 -0.05 + vertex 0.02666667 0.032 -0.05 + vertex 0.02 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 0.008 -0.05 + vertex 0.02666667 0.016 -0.05 + vertex 0.03333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 0.016 -0.05 + vertex 0.03333333 0.008 -0.05 + vertex 0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 0.016 -0.05 + vertex 0.02666667 0.024 -0.05 + vertex 0.03333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 0.024 -0.05 + vertex 0.03333333 0.016 -0.05 + vertex 0.02666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 0.024 -0.05 + vertex 0.02666667 0.032 -0.05 + vertex 0.03333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 0.032 -0.05 + vertex 0.03333333 0.024 -0.05 + vertex 0.02666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.02666667 0.032 -0.05 + vertex 0.02666667 0.04 -0.05 + vertex 0.03333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.03333333 0.04 -0.05 + vertex 0.03333333 0.032 -0.05 + vertex 0.02666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 0.008 -0.05 + vertex 0.03333333 0.016 -0.05 + vertex 0.04 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 0.016 -0.05 + vertex 0.04 0.008 -0.05 + vertex 0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 0.016 -0.05 + vertex 0.03333333 0.024 -0.05 + vertex 0.04 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 0.024 -0.05 + vertex 0.04 0.016 -0.05 + vertex 0.03333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 0.024 -0.05 + vertex 0.03333333 0.032 -0.05 + vertex 0.04 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 0.032 -0.05 + vertex 0.04 0.024 -0.05 + vertex 0.03333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.03333333 0.032 -0.05 + vertex 0.03333333 0.04 -0.05 + vertex 0.04 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04 0.04 -0.05 + vertex 0.04 0.032 -0.05 + vertex 0.03333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 0.008 -0.05 + vertex 0.04 0.016 -0.05 + vertex 0.04666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 0.016 -0.05 + vertex 0.04666667 0.008 -0.05 + vertex 0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 0.016 -0.05 + vertex 0.04 0.024 -0.05 + vertex 0.04666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 0.024 -0.05 + vertex 0.04666667 0.016 -0.05 + vertex 0.04 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 0.024 -0.05 + vertex 0.04 0.032 -0.05 + vertex 0.04666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 0.032 -0.05 + vertex 0.04666667 0.024 -0.05 + vertex 0.04 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04 0.032 -0.05 + vertex 0.04 0.04 -0.05 + vertex 0.04666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.04666667 0.04 -0.05 + vertex 0.04666667 0.032 -0.05 + vertex 0.04 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 0.008 -0.05 + vertex 0.04666667 0.016 -0.05 + vertex 0.05333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 0.016 -0.05 + vertex 0.05333333 0.008 -0.05 + vertex 0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 0.016 -0.05 + vertex 0.04666667 0.024 -0.05 + vertex 0.05333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 0.024 -0.05 + vertex 0.05333333 0.016 -0.05 + vertex 0.04666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 0.024 -0.05 + vertex 0.04666667 0.032 -0.05 + vertex 0.05333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 0.032 -0.05 + vertex 0.05333333 0.024 -0.05 + vertex 0.04666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.04666667 0.032 -0.05 + vertex 0.04666667 0.04 -0.05 + vertex 0.05333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.05333333 0.04 -0.05 + vertex 0.05333333 0.032 -0.05 + vertex 0.04666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 0.008 -0.05 + vertex 0.05333333 0.016 -0.05 + vertex 0.06 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 0.016 -0.05 + vertex 0.06 0.008 -0.05 + vertex 0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 0.016 -0.05 + vertex 0.05333333 0.024 -0.05 + vertex 0.06 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 0.024 -0.05 + vertex 0.06 0.016 -0.05 + vertex 0.05333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 0.024 -0.05 + vertex 0.05333333 0.032 -0.05 + vertex 0.06 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 0.032 -0.05 + vertex 0.06 0.024 -0.05 + vertex 0.05333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.05333333 0.032 -0.05 + vertex 0.05333333 0.04 -0.05 + vertex 0.06 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06 0.04 -0.05 + vertex 0.06 0.032 -0.05 + vertex 0.05333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 0.008 -0.05 + vertex 0.06 0.016 -0.05 + vertex 0.06666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 0.016 -0.05 + vertex 0.06666667 0.008 -0.05 + vertex 0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 0.016 -0.05 + vertex 0.06 0.024 -0.05 + vertex 0.06666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 0.024 -0.05 + vertex 0.06666667 0.016 -0.05 + vertex 0.06 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 0.024 -0.05 + vertex 0.06 0.032 -0.05 + vertex 0.06666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 0.032 -0.05 + vertex 0.06666667 0.024 -0.05 + vertex 0.06 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06 0.032 -0.05 + vertex 0.06 0.04 -0.05 + vertex 0.06666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.06666667 0.04 -0.05 + vertex 0.06666667 0.032 -0.05 + vertex 0.06 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 0.008 -0.05 + vertex 0.06666667 0.016 -0.05 + vertex 0.07333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 0.016 -0.05 + vertex 0.07333333 0.008 -0.05 + vertex 0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 0.016 -0.05 + vertex 0.06666667 0.024 -0.05 + vertex 0.07333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 0.024 -0.05 + vertex 0.07333333 0.016 -0.05 + vertex 0.06666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 0.024 -0.05 + vertex 0.06666667 0.032 -0.05 + vertex 0.07333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 0.032 -0.05 + vertex 0.07333333 0.024 -0.05 + vertex 0.06666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.06666667 0.032 -0.05 + vertex 0.06666667 0.04 -0.05 + vertex 0.07333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.07333333 0.04 -0.05 + vertex 0.07333333 0.032 -0.05 + vertex 0.06666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 0.008 -0.05 + vertex 0.07333333 0.016 -0.05 + vertex 0.08 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 0.016 -0.05 + vertex 0.08 0.008 -0.05 + vertex 0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 0.016 -0.05 + vertex 0.07333333 0.024 -0.05 + vertex 0.08 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 0.024 -0.05 + vertex 0.08 0.016 -0.05 + vertex 0.07333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 0.024 -0.05 + vertex 0.07333333 0.032 -0.05 + vertex 0.08 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 0.032 -0.05 + vertex 0.08 0.024 -0.05 + vertex 0.07333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.07333333 0.032 -0.05 + vertex 0.07333333 0.04 -0.05 + vertex 0.08 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08 0.04 -0.05 + vertex 0.08 0.032 -0.05 + vertex 0.07333333 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 0.008 -0.05 + vertex 0.08 0.016 -0.05 + vertex 0.08666667 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 0.016 -0.05 + vertex 0.08666667 0.008 -0.05 + vertex 0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 0.016 -0.05 + vertex 0.08 0.024 -0.05 + vertex 0.08666667 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 0.024 -0.05 + vertex 0.08666667 0.016 -0.05 + vertex 0.08 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 0.024 -0.05 + vertex 0.08 0.032 -0.05 + vertex 0.08666667 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 0.032 -0.05 + vertex 0.08666667 0.024 -0.05 + vertex 0.08 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08 0.032 -0.05 + vertex 0.08 0.04 -0.05 + vertex 0.08666667 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.08666667 0.04 -0.05 + vertex 0.08666667 0.032 -0.05 + vertex 0.08 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 0.008 -0.05 + vertex 0.08666667 0.016 -0.05 + vertex 0.09333333 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 0.016 -0.05 + vertex 0.09333333 0.008 -0.05 + vertex 0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 0.016 -0.05 + vertex 0.08666667 0.024 -0.05 + vertex 0.09333333 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 0.024 -0.05 + vertex 0.09333333 0.016 -0.05 + vertex 0.08666667 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 0.024 -0.05 + vertex 0.08666667 0.032 -0.05 + vertex 0.09333333 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 0.032 -0.05 + vertex 0.09333333 0.024 -0.05 + vertex 0.08666667 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.08666667 0.032 -0.05 + vertex 0.08666667 0.04 -0.05 + vertex 0.09333333 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.09333333 0.04 -0.05 + vertex 0.09333333 0.032 -0.05 + vertex 0.08666667 0.032 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 0.008 -0.05 + vertex 0.09333333 0.016 -0.05 + vertex 0.1 0.016 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 0.016 -0.05 + vertex 0.1 0.008 -0.05 + vertex 0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 0.016 -0.05 + vertex 0.09333333 0.024 -0.05 + vertex 0.1 0.024 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 0.024 -0.05 + vertex 0.1 0.016 -0.05 + vertex 0.09333333 0.016 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 0.024 -0.05 + vertex 0.09333333 0.032 -0.05 + vertex 0.1 0.032 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 0.032 -0.05 + vertex 0.1 0.024 -0.05 + vertex 0.09333333 0.024 -0.05 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.09333333 0.032 -0.05 + vertex 0.09333333 0.04 -0.05 + vertex 0.1 0.04 -0.05 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.1 0.04 -0.05 + vertex 0.1 0.032 -0.05 + vertex 0.09333333 0.032 -0.05 + endloop + endfacet +endsolid minZ +solid maxZ + facet normal 0 0 1 + outer loop + vertex -0.1 0.008 0.05 + vertex -0.09333333 0.008 0.05 + vertex -0.09333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.016 0.05 + vertex -0.1 0.016 0.05 + vertex -0.1 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 0.016 0.05 + vertex -0.09333333 0.016 0.05 + vertex -0.09333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.024 0.05 + vertex -0.1 0.024 0.05 + vertex -0.1 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 0.024 0.05 + vertex -0.09333333 0.024 0.05 + vertex -0.09333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.032 0.05 + vertex -0.1 0.032 0.05 + vertex -0.1 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.1 0.032 0.05 + vertex -0.09333333 0.032 0.05 + vertex -0.09333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.04 0.05 + vertex -0.1 0.04 0.05 + vertex -0.1 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.008 0.05 + vertex -0.08666667 0.008 0.05 + vertex -0.08666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.016 0.05 + vertex -0.09333333 0.016 0.05 + vertex -0.09333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.016 0.05 + vertex -0.08666667 0.016 0.05 + vertex -0.08666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.024 0.05 + vertex -0.09333333 0.024 0.05 + vertex -0.09333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.024 0.05 + vertex -0.08666667 0.024 0.05 + vertex -0.08666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.032 0.05 + vertex -0.09333333 0.032 0.05 + vertex -0.09333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.09333333 0.032 0.05 + vertex -0.08666667 0.032 0.05 + vertex -0.08666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.04 0.05 + vertex -0.09333333 0.04 0.05 + vertex -0.09333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.008 0.05 + vertex -0.08 0.008 0.05 + vertex -0.08 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.016 0.05 + vertex -0.08666667 0.016 0.05 + vertex -0.08666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.016 0.05 + vertex -0.08 0.016 0.05 + vertex -0.08 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.024 0.05 + vertex -0.08666667 0.024 0.05 + vertex -0.08666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.024 0.05 + vertex -0.08 0.024 0.05 + vertex -0.08 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.032 0.05 + vertex -0.08666667 0.032 0.05 + vertex -0.08666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08666667 0.032 0.05 + vertex -0.08 0.032 0.05 + vertex -0.08 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.04 0.05 + vertex -0.08666667 0.04 0.05 + vertex -0.08666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.008 0.05 + vertex -0.07333333 0.008 0.05 + vertex -0.07333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.016 0.05 + vertex -0.08 0.016 0.05 + vertex -0.08 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.016 0.05 + vertex -0.07333333 0.016 0.05 + vertex -0.07333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.024 0.05 + vertex -0.08 0.024 0.05 + vertex -0.08 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.024 0.05 + vertex -0.07333333 0.024 0.05 + vertex -0.07333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.032 0.05 + vertex -0.08 0.032 0.05 + vertex -0.08 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.08 0.032 0.05 + vertex -0.07333333 0.032 0.05 + vertex -0.07333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.04 0.05 + vertex -0.08 0.04 0.05 + vertex -0.08 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.008 0.05 + vertex -0.06666667 0.008 0.05 + vertex -0.06666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.016 0.05 + vertex -0.07333333 0.016 0.05 + vertex -0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.016 0.05 + vertex -0.06666667 0.016 0.05 + vertex -0.06666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.024 0.05 + vertex -0.07333333 0.024 0.05 + vertex -0.07333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.024 0.05 + vertex -0.06666667 0.024 0.05 + vertex -0.06666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.032 0.05 + vertex -0.07333333 0.032 0.05 + vertex -0.07333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.07333333 0.032 0.05 + vertex -0.06666667 0.032 0.05 + vertex -0.06666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.04 0.05 + vertex -0.07333333 0.04 0.05 + vertex -0.07333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.008 0.05 + vertex -0.06 0.008 0.05 + vertex -0.06 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.016 0.05 + vertex -0.06666667 0.016 0.05 + vertex -0.06666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.016 0.05 + vertex -0.06 0.016 0.05 + vertex -0.06 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.024 0.05 + vertex -0.06666667 0.024 0.05 + vertex -0.06666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.024 0.05 + vertex -0.06 0.024 0.05 + vertex -0.06 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.032 0.05 + vertex -0.06666667 0.032 0.05 + vertex -0.06666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06666667 0.032 0.05 + vertex -0.06 0.032 0.05 + vertex -0.06 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.04 0.05 + vertex -0.06666667 0.04 0.05 + vertex -0.06666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.008 0.05 + vertex -0.05333333 0.008 0.05 + vertex -0.05333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.016 0.05 + vertex -0.06 0.016 0.05 + vertex -0.06 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.016 0.05 + vertex -0.05333333 0.016 0.05 + vertex -0.05333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.024 0.05 + vertex -0.06 0.024 0.05 + vertex -0.06 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.024 0.05 + vertex -0.05333333 0.024 0.05 + vertex -0.05333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.032 0.05 + vertex -0.06 0.032 0.05 + vertex -0.06 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.06 0.032 0.05 + vertex -0.05333333 0.032 0.05 + vertex -0.05333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.04 0.05 + vertex -0.06 0.04 0.05 + vertex -0.06 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.008 0.05 + vertex -0.04666667 0.008 0.05 + vertex -0.04666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.016 0.05 + vertex -0.05333333 0.016 0.05 + vertex -0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.016 0.05 + vertex -0.04666667 0.016 0.05 + vertex -0.04666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.024 0.05 + vertex -0.05333333 0.024 0.05 + vertex -0.05333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.024 0.05 + vertex -0.04666667 0.024 0.05 + vertex -0.04666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.032 0.05 + vertex -0.05333333 0.032 0.05 + vertex -0.05333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.05333333 0.032 0.05 + vertex -0.04666667 0.032 0.05 + vertex -0.04666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.04 0.05 + vertex -0.05333333 0.04 0.05 + vertex -0.05333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.008 0.05 + vertex -0.04 0.008 0.05 + vertex -0.04 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.016 0.05 + vertex -0.04666667 0.016 0.05 + vertex -0.04666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.016 0.05 + vertex -0.04 0.016 0.05 + vertex -0.04 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.024 0.05 + vertex -0.04666667 0.024 0.05 + vertex -0.04666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.024 0.05 + vertex -0.04 0.024 0.05 + vertex -0.04 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.032 0.05 + vertex -0.04666667 0.032 0.05 + vertex -0.04666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04666667 0.032 0.05 + vertex -0.04 0.032 0.05 + vertex -0.04 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.04 0.05 + vertex -0.04666667 0.04 0.05 + vertex -0.04666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.008 0.05 + vertex -0.03333333 0.008 0.05 + vertex -0.03333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.016 0.05 + vertex -0.04 0.016 0.05 + vertex -0.04 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.016 0.05 + vertex -0.03333333 0.016 0.05 + vertex -0.03333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.024 0.05 + vertex -0.04 0.024 0.05 + vertex -0.04 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.024 0.05 + vertex -0.03333333 0.024 0.05 + vertex -0.03333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.032 0.05 + vertex -0.04 0.032 0.05 + vertex -0.04 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.04 0.032 0.05 + vertex -0.03333333 0.032 0.05 + vertex -0.03333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.04 0.05 + vertex -0.04 0.04 0.05 + vertex -0.04 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.008 0.05 + vertex -0.02666667 0.008 0.05 + vertex -0.02666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.016 0.05 + vertex -0.03333333 0.016 0.05 + vertex -0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.016 0.05 + vertex -0.02666667 0.016 0.05 + vertex -0.02666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.024 0.05 + vertex -0.03333333 0.024 0.05 + vertex -0.03333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.024 0.05 + vertex -0.02666667 0.024 0.05 + vertex -0.02666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.032 0.05 + vertex -0.03333333 0.032 0.05 + vertex -0.03333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.03333333 0.032 0.05 + vertex -0.02666667 0.032 0.05 + vertex -0.02666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.04 0.05 + vertex -0.03333333 0.04 0.05 + vertex -0.03333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.008 0.05 + vertex -0.02 0.008 0.05 + vertex -0.02 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.016 0.05 + vertex -0.02666667 0.016 0.05 + vertex -0.02666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.016 0.05 + vertex -0.02 0.016 0.05 + vertex -0.02 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.024 0.05 + vertex -0.02666667 0.024 0.05 + vertex -0.02666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.024 0.05 + vertex -0.02 0.024 0.05 + vertex -0.02 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.032 0.05 + vertex -0.02666667 0.032 0.05 + vertex -0.02666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02666667 0.032 0.05 + vertex -0.02 0.032 0.05 + vertex -0.02 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.04 0.05 + vertex -0.02666667 0.04 0.05 + vertex -0.02666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.008 0.05 + vertex -0.01333333 0.008 0.05 + vertex -0.01333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.016 0.05 + vertex -0.02 0.016 0.05 + vertex -0.02 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.016 0.05 + vertex -0.01333333 0.016 0.05 + vertex -0.01333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.024 0.05 + vertex -0.02 0.024 0.05 + vertex -0.02 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.024 0.05 + vertex -0.01333333 0.024 0.05 + vertex -0.01333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.032 0.05 + vertex -0.02 0.032 0.05 + vertex -0.02 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.02 0.032 0.05 + vertex -0.01333333 0.032 0.05 + vertex -0.01333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.04 0.05 + vertex -0.02 0.04 0.05 + vertex -0.02 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.008 0.05 + vertex -0.006666667 0.008 0.05 + vertex -0.006666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.016 0.05 + vertex -0.01333333 0.016 0.05 + vertex -0.01333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.016 0.05 + vertex -0.006666667 0.016 0.05 + vertex -0.006666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.024 0.05 + vertex -0.01333333 0.024 0.05 + vertex -0.01333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.024 0.05 + vertex -0.006666667 0.024 0.05 + vertex -0.006666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.032 0.05 + vertex -0.01333333 0.032 0.05 + vertex -0.01333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.01333333 0.032 0.05 + vertex -0.006666667 0.032 0.05 + vertex -0.006666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.04 0.05 + vertex -0.01333333 0.04 0.05 + vertex -0.01333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.008 0.05 + vertex 0 0.008 0.05 + vertex 0 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.016 0.05 + vertex -0.006666667 0.016 0.05 + vertex -0.006666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.016 0.05 + vertex 0 0.016 0.05 + vertex 0 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.024 0.05 + vertex -0.006666667 0.024 0.05 + vertex -0.006666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.024 0.05 + vertex 0 0.024 0.05 + vertex 0 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.032 0.05 + vertex -0.006666667 0.032 0.05 + vertex -0.006666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.006666667 0.032 0.05 + vertex 0 0.032 0.05 + vertex 0 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.04 0.05 + vertex -0.006666667 0.04 0.05 + vertex -0.006666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.008 0.05 + vertex 0.006666667 0.008 0.05 + vertex 0.006666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.016 0.05 + vertex 0 0.016 0.05 + vertex 0 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.016 0.05 + vertex 0.006666667 0.016 0.05 + vertex 0.006666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.024 0.05 + vertex 0 0.024 0.05 + vertex 0 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.024 0.05 + vertex 0.006666667 0.024 0.05 + vertex 0.006666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.032 0.05 + vertex 0 0.032 0.05 + vertex 0 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 0.032 0.05 + vertex 0.006666667 0.032 0.05 + vertex 0.006666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.04 0.05 + vertex 0 0.04 0.05 + vertex 0 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.008 0.05 + vertex 0.01333333 0.008 0.05 + vertex 0.01333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.016 0.05 + vertex 0.006666667 0.016 0.05 + vertex 0.006666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.016 0.05 + vertex 0.01333333 0.016 0.05 + vertex 0.01333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.024 0.05 + vertex 0.006666667 0.024 0.05 + vertex 0.006666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.024 0.05 + vertex 0.01333333 0.024 0.05 + vertex 0.01333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.032 0.05 + vertex 0.006666667 0.032 0.05 + vertex 0.006666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.006666667 0.032 0.05 + vertex 0.01333333 0.032 0.05 + vertex 0.01333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.04 0.05 + vertex 0.006666667 0.04 0.05 + vertex 0.006666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.008 0.05 + vertex 0.02 0.008 0.05 + vertex 0.02 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.016 0.05 + vertex 0.01333333 0.016 0.05 + vertex 0.01333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.016 0.05 + vertex 0.02 0.016 0.05 + vertex 0.02 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.024 0.05 + vertex 0.01333333 0.024 0.05 + vertex 0.01333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.024 0.05 + vertex 0.02 0.024 0.05 + vertex 0.02 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.032 0.05 + vertex 0.01333333 0.032 0.05 + vertex 0.01333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.01333333 0.032 0.05 + vertex 0.02 0.032 0.05 + vertex 0.02 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.04 0.05 + vertex 0.01333333 0.04 0.05 + vertex 0.01333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.008 0.05 + vertex 0.02666667 0.008 0.05 + vertex 0.02666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.016 0.05 + vertex 0.02 0.016 0.05 + vertex 0.02 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.016 0.05 + vertex 0.02666667 0.016 0.05 + vertex 0.02666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.024 0.05 + vertex 0.02 0.024 0.05 + vertex 0.02 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.024 0.05 + vertex 0.02666667 0.024 0.05 + vertex 0.02666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.032 0.05 + vertex 0.02 0.032 0.05 + vertex 0.02 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02 0.032 0.05 + vertex 0.02666667 0.032 0.05 + vertex 0.02666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.04 0.05 + vertex 0.02 0.04 0.05 + vertex 0.02 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.008 0.05 + vertex 0.03333333 0.008 0.05 + vertex 0.03333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.016 0.05 + vertex 0.02666667 0.016 0.05 + vertex 0.02666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.016 0.05 + vertex 0.03333333 0.016 0.05 + vertex 0.03333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.024 0.05 + vertex 0.02666667 0.024 0.05 + vertex 0.02666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.024 0.05 + vertex 0.03333333 0.024 0.05 + vertex 0.03333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.032 0.05 + vertex 0.02666667 0.032 0.05 + vertex 0.02666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.02666667 0.032 0.05 + vertex 0.03333333 0.032 0.05 + vertex 0.03333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.04 0.05 + vertex 0.02666667 0.04 0.05 + vertex 0.02666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.008 0.05 + vertex 0.04 0.008 0.05 + vertex 0.04 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.016 0.05 + vertex 0.03333333 0.016 0.05 + vertex 0.03333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.016 0.05 + vertex 0.04 0.016 0.05 + vertex 0.04 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.024 0.05 + vertex 0.03333333 0.024 0.05 + vertex 0.03333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.024 0.05 + vertex 0.04 0.024 0.05 + vertex 0.04 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.032 0.05 + vertex 0.03333333 0.032 0.05 + vertex 0.03333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.03333333 0.032 0.05 + vertex 0.04 0.032 0.05 + vertex 0.04 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.04 0.05 + vertex 0.03333333 0.04 0.05 + vertex 0.03333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.008 0.05 + vertex 0.04666667 0.008 0.05 + vertex 0.04666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.016 0.05 + vertex 0.04 0.016 0.05 + vertex 0.04 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.016 0.05 + vertex 0.04666667 0.016 0.05 + vertex 0.04666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.024 0.05 + vertex 0.04 0.024 0.05 + vertex 0.04 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.024 0.05 + vertex 0.04666667 0.024 0.05 + vertex 0.04666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.032 0.05 + vertex 0.04 0.032 0.05 + vertex 0.04 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04 0.032 0.05 + vertex 0.04666667 0.032 0.05 + vertex 0.04666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.04 0.05 + vertex 0.04 0.04 0.05 + vertex 0.04 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.008 0.05 + vertex 0.05333333 0.008 0.05 + vertex 0.05333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.016 0.05 + vertex 0.04666667 0.016 0.05 + vertex 0.04666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.016 0.05 + vertex 0.05333333 0.016 0.05 + vertex 0.05333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.024 0.05 + vertex 0.04666667 0.024 0.05 + vertex 0.04666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.024 0.05 + vertex 0.05333333 0.024 0.05 + vertex 0.05333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.032 0.05 + vertex 0.04666667 0.032 0.05 + vertex 0.04666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.04666667 0.032 0.05 + vertex 0.05333333 0.032 0.05 + vertex 0.05333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.04 0.05 + vertex 0.04666667 0.04 0.05 + vertex 0.04666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.008 0.05 + vertex 0.06 0.008 0.05 + vertex 0.06 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.016 0.05 + vertex 0.05333333 0.016 0.05 + vertex 0.05333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.016 0.05 + vertex 0.06 0.016 0.05 + vertex 0.06 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.024 0.05 + vertex 0.05333333 0.024 0.05 + vertex 0.05333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.024 0.05 + vertex 0.06 0.024 0.05 + vertex 0.06 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.032 0.05 + vertex 0.05333333 0.032 0.05 + vertex 0.05333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.05333333 0.032 0.05 + vertex 0.06 0.032 0.05 + vertex 0.06 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.04 0.05 + vertex 0.05333333 0.04 0.05 + vertex 0.05333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.008 0.05 + vertex 0.06666667 0.008 0.05 + vertex 0.06666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.016 0.05 + vertex 0.06 0.016 0.05 + vertex 0.06 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.016 0.05 + vertex 0.06666667 0.016 0.05 + vertex 0.06666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.024 0.05 + vertex 0.06 0.024 0.05 + vertex 0.06 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.024 0.05 + vertex 0.06666667 0.024 0.05 + vertex 0.06666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.032 0.05 + vertex 0.06 0.032 0.05 + vertex 0.06 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06 0.032 0.05 + vertex 0.06666667 0.032 0.05 + vertex 0.06666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.04 0.05 + vertex 0.06 0.04 0.05 + vertex 0.06 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.008 0.05 + vertex 0.07333333 0.008 0.05 + vertex 0.07333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.016 0.05 + vertex 0.06666667 0.016 0.05 + vertex 0.06666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.016 0.05 + vertex 0.07333333 0.016 0.05 + vertex 0.07333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.024 0.05 + vertex 0.06666667 0.024 0.05 + vertex 0.06666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.024 0.05 + vertex 0.07333333 0.024 0.05 + vertex 0.07333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.032 0.05 + vertex 0.06666667 0.032 0.05 + vertex 0.06666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.06666667 0.032 0.05 + vertex 0.07333333 0.032 0.05 + vertex 0.07333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.04 0.05 + vertex 0.06666667 0.04 0.05 + vertex 0.06666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.008 0.05 + vertex 0.08 0.008 0.05 + vertex 0.08 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.016 0.05 + vertex 0.07333333 0.016 0.05 + vertex 0.07333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.016 0.05 + vertex 0.08 0.016 0.05 + vertex 0.08 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.024 0.05 + vertex 0.07333333 0.024 0.05 + vertex 0.07333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.024 0.05 + vertex 0.08 0.024 0.05 + vertex 0.08 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.032 0.05 + vertex 0.07333333 0.032 0.05 + vertex 0.07333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.07333333 0.032 0.05 + vertex 0.08 0.032 0.05 + vertex 0.08 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.04 0.05 + vertex 0.07333333 0.04 0.05 + vertex 0.07333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.008 0.05 + vertex 0.08666667 0.008 0.05 + vertex 0.08666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.016 0.05 + vertex 0.08 0.016 0.05 + vertex 0.08 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.016 0.05 + vertex 0.08666667 0.016 0.05 + vertex 0.08666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.024 0.05 + vertex 0.08 0.024 0.05 + vertex 0.08 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.024 0.05 + vertex 0.08666667 0.024 0.05 + vertex 0.08666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.032 0.05 + vertex 0.08 0.032 0.05 + vertex 0.08 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08 0.032 0.05 + vertex 0.08666667 0.032 0.05 + vertex 0.08666667 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.04 0.05 + vertex 0.08 0.04 0.05 + vertex 0.08 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.008 0.05 + vertex 0.09333333 0.008 0.05 + vertex 0.09333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.016 0.05 + vertex 0.08666667 0.016 0.05 + vertex 0.08666667 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.016 0.05 + vertex 0.09333333 0.016 0.05 + vertex 0.09333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.024 0.05 + vertex 0.08666667 0.024 0.05 + vertex 0.08666667 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.024 0.05 + vertex 0.09333333 0.024 0.05 + vertex 0.09333333 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.032 0.05 + vertex 0.08666667 0.032 0.05 + vertex 0.08666667 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.08666667 0.032 0.05 + vertex 0.09333333 0.032 0.05 + vertex 0.09333333 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.04 0.05 + vertex 0.08666667 0.04 0.05 + vertex 0.08666667 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.008 0.05 + vertex 0.1 0.008 0.05 + vertex 0.1 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 0.016 0.05 + vertex 0.09333333 0.016 0.05 + vertex 0.09333333 0.008 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.016 0.05 + vertex 0.1 0.016 0.05 + vertex 0.1 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 0.024 0.05 + vertex 0.09333333 0.024 0.05 + vertex 0.09333333 0.016 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.024 0.05 + vertex 0.1 0.024 0.05 + vertex 0.1 0.032 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 0.032 0.05 + vertex 0.09333333 0.032 0.05 + vertex 0.09333333 0.024 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.09333333 0.032 0.05 + vertex 0.1 0.032 0.05 + vertex 0.1 0.04 0.05 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.1 0.04 0.05 + vertex 0.09333333 0.04 0.05 + vertex 0.09333333 0.032 0.05 + endloop + endfacet +endsolid maxZ +solid topAir_to_rightSolid + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.05 + vertex 0.02 0.008 -0.05 + vertex 0.02 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 -0.04 + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 -0.05 + vertex 0.02666667 0.008 -0.05 + vertex 0.02666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.04 + vertex 0.02 0.008 -0.04 + vertex 0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.05 + vertex 0.03333333 0.008 -0.05 + vertex 0.03333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.04 + vertex 0.02666667 0.008 -0.04 + vertex 0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.05 + vertex 0.04 0.008 -0.05 + vertex 0.04 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 -0.04 + vertex 0.03333333 0.008 -0.04 + vertex 0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 -0.05 + vertex 0.04666667 0.008 -0.05 + vertex 0.04666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.04 + vertex 0.04 0.008 -0.04 + vertex 0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.05 + vertex 0.05333333 0.008 -0.05 + vertex 0.05333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.04 + vertex 0.04666667 0.008 -0.04 + vertex 0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.05 + vertex 0.06 0.008 -0.05 + vertex 0.06 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 -0.04 + vertex 0.05333333 0.008 -0.04 + vertex 0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 -0.05 + vertex 0.06666667 0.008 -0.05 + vertex 0.06666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.04 + vertex 0.06 0.008 -0.04 + vertex 0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.05 + vertex 0.07333333 0.008 -0.05 + vertex 0.07333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.04 + vertex 0.06666667 0.008 -0.04 + vertex 0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.05 + vertex 0.08 0.008 -0.05 + vertex 0.08 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 -0.04 + vertex 0.07333333 0.008 -0.04 + vertex 0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 -0.05 + vertex 0.08666667 0.008 -0.05 + vertex 0.08666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.04 + vertex 0.08 0.008 -0.04 + vertex 0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.05 + vertex 0.09333333 0.008 -0.05 + vertex 0.09333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.04 + vertex 0.08666667 0.008 -0.04 + vertex 0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.05 + vertex 0.1 0.008 -0.05 + vertex 0.1 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 -0.04 + vertex 0.09333333 0.008 -0.04 + vertex 0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.04 + vertex 0.02 0.008 -0.04 + vertex 0.02 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 -0.03 + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 -0.04 + vertex 0.02666667 0.008 -0.04 + vertex 0.02666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.03 + vertex 0.02 0.008 -0.03 + vertex 0.02 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.04 + vertex 0.03333333 0.008 -0.04 + vertex 0.03333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.03 + vertex 0.02666667 0.008 -0.03 + vertex 0.02666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.04 + vertex 0.04 0.008 -0.04 + vertex 0.04 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 -0.03 + vertex 0.03333333 0.008 -0.03 + vertex 0.03333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 -0.04 + vertex 0.04666667 0.008 -0.04 + vertex 0.04666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.03 + vertex 0.04 0.008 -0.03 + vertex 0.04 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.04 + vertex 0.05333333 0.008 -0.04 + vertex 0.05333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.03 + vertex 0.04666667 0.008 -0.03 + vertex 0.04666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.04 + vertex 0.06 0.008 -0.04 + vertex 0.06 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 -0.03 + vertex 0.05333333 0.008 -0.03 + vertex 0.05333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 -0.04 + vertex 0.06666667 0.008 -0.04 + vertex 0.06666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.03 + vertex 0.06 0.008 -0.03 + vertex 0.06 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.04 + vertex 0.07333333 0.008 -0.04 + vertex 0.07333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.03 + vertex 0.06666667 0.008 -0.03 + vertex 0.06666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.04 + vertex 0.08 0.008 -0.04 + vertex 0.08 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 -0.03 + vertex 0.07333333 0.008 -0.03 + vertex 0.07333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 -0.04 + vertex 0.08666667 0.008 -0.04 + vertex 0.08666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.03 + vertex 0.08 0.008 -0.03 + vertex 0.08 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.04 + vertex 0.09333333 0.008 -0.04 + vertex 0.09333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.03 + vertex 0.08666667 0.008 -0.03 + vertex 0.08666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.04 + vertex 0.1 0.008 -0.04 + vertex 0.1 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 -0.03 + vertex 0.09333333 0.008 -0.03 + vertex 0.09333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.03 + vertex 0.02 0.008 -0.03 + vertex 0.02 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 -0.02 + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 -0.03 + vertex 0.02666667 0.008 -0.03 + vertex 0.02666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.02 + vertex 0.02 0.008 -0.02 + vertex 0.02 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.03 + vertex 0.03333333 0.008 -0.03 + vertex 0.03333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.02 + vertex 0.02666667 0.008 -0.02 + vertex 0.02666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.03 + vertex 0.04 0.008 -0.03 + vertex 0.04 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 -0.02 + vertex 0.03333333 0.008 -0.02 + vertex 0.03333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 -0.03 + vertex 0.04666667 0.008 -0.03 + vertex 0.04666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.02 + vertex 0.04 0.008 -0.02 + vertex 0.04 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.03 + vertex 0.05333333 0.008 -0.03 + vertex 0.05333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.02 + vertex 0.04666667 0.008 -0.02 + vertex 0.04666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.03 + vertex 0.06 0.008 -0.03 + vertex 0.06 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 -0.02 + vertex 0.05333333 0.008 -0.02 + vertex 0.05333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 -0.03 + vertex 0.06666667 0.008 -0.03 + vertex 0.06666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.02 + vertex 0.06 0.008 -0.02 + vertex 0.06 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.03 + vertex 0.07333333 0.008 -0.03 + vertex 0.07333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.02 + vertex 0.06666667 0.008 -0.02 + vertex 0.06666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.03 + vertex 0.08 0.008 -0.03 + vertex 0.08 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 -0.02 + vertex 0.07333333 0.008 -0.02 + vertex 0.07333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 -0.03 + vertex 0.08666667 0.008 -0.03 + vertex 0.08666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.02 + vertex 0.08 0.008 -0.02 + vertex 0.08 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.03 + vertex 0.09333333 0.008 -0.03 + vertex 0.09333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.02 + vertex 0.08666667 0.008 -0.02 + vertex 0.08666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.03 + vertex 0.1 0.008 -0.03 + vertex 0.1 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 -0.02 + vertex 0.09333333 0.008 -0.02 + vertex 0.09333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.02 + vertex 0.02 0.008 -0.02 + vertex 0.02 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 -0.01 + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 -0.02 + vertex 0.02666667 0.008 -0.02 + vertex 0.02666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.01 + vertex 0.02 0.008 -0.01 + vertex 0.02 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.02 + vertex 0.03333333 0.008 -0.02 + vertex 0.03333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.01 + vertex 0.02666667 0.008 -0.01 + vertex 0.02666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.02 + vertex 0.04 0.008 -0.02 + vertex 0.04 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 -0.01 + vertex 0.03333333 0.008 -0.01 + vertex 0.03333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 -0.02 + vertex 0.04666667 0.008 -0.02 + vertex 0.04666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.01 + vertex 0.04 0.008 -0.01 + vertex 0.04 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.02 + vertex 0.05333333 0.008 -0.02 + vertex 0.05333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.01 + vertex 0.04666667 0.008 -0.01 + vertex 0.04666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.02 + vertex 0.06 0.008 -0.02 + vertex 0.06 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 -0.01 + vertex 0.05333333 0.008 -0.01 + vertex 0.05333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 -0.02 + vertex 0.06666667 0.008 -0.02 + vertex 0.06666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.01 + vertex 0.06 0.008 -0.01 + vertex 0.06 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.02 + vertex 0.07333333 0.008 -0.02 + vertex 0.07333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.01 + vertex 0.06666667 0.008 -0.01 + vertex 0.06666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.02 + vertex 0.08 0.008 -0.02 + vertex 0.08 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 -0.01 + vertex 0.07333333 0.008 -0.01 + vertex 0.07333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 -0.02 + vertex 0.08666667 0.008 -0.02 + vertex 0.08666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.01 + vertex 0.08 0.008 -0.01 + vertex 0.08 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.02 + vertex 0.09333333 0.008 -0.02 + vertex 0.09333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.01 + vertex 0.08666667 0.008 -0.01 + vertex 0.08666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.02 + vertex 0.1 0.008 -0.02 + vertex 0.1 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 -0.01 + vertex 0.09333333 0.008 -0.01 + vertex 0.09333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.01 + vertex 0.02 0.008 -0.01 + vertex 0.02 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 0 + vertex 0.01333333 0.008 0 + vertex 0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 -0.01 + vertex 0.02666667 0.008 -0.01 + vertex 0.02666667 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.02 0.008 0 + vertex 0.02 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 -0.01 + vertex 0.03333333 0.008 -0.01 + vertex 0.03333333 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 0 + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.02666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 -0.01 + vertex 0.04 0.008 -0.01 + vertex 0.04 0.008 -5.782412e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 -5.782412e-19 + vertex 0.03333333 0.008 0 + vertex 0.03333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 -0.01 + vertex 0.04666667 0.008 -0.01 + vertex 0.04666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0 + vertex 0.04 0.008 -5.782412e-19 + vertex 0.04 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 -0.01 + vertex 0.05333333 0.008 -0.01 + vertex 0.05333333 0.008 -2.891206e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.04666667 0.008 0 + vertex 0.04666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 -0.01 + vertex 0.06 0.008 -0.01 + vertex 0.06 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 5.782412e-19 + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.05333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 -0.01 + vertex 0.06666667 0.008 -0.01 + vertex 0.06666667 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 0 + vertex 0.06 0.008 5.782412e-19 + vertex 0.06 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 -0.01 + vertex 0.07333333 0.008 -0.01 + vertex 0.07333333 0.008 -4.336809e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.06666667 0.008 0 + vertex 0.06666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 -0.01 + vertex 0.08 0.008 -0.01 + vertex 0.08 0.008 2.891206e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 2.891206e-19 + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.07333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 -0.01 + vertex 0.08666667 0.008 -0.01 + vertex 0.08666667 0.008 -2.168404e-19 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.08 0.008 2.891206e-19 + vertex 0.08 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 -0.01 + vertex 0.09333333 0.008 -0.01 + vertex 0.09333333 0.008 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.08666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 -0.01 + vertex 0.1 0.008 -0.01 + vertex 0.1 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 0 + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.09333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 0 + vertex 0.02 0.008 0 + vertex 0.02 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 0.01 + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.02666667 0.008 0.01 + vertex 0.02 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 0.01 + vertex 0.02 0.008 0 + vertex 0.02666667 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 5.782412e-19 + vertex 0.03333333 0.008 0 + vertex 0.03333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 0.01 + vertex 0.02666667 0.008 0.01 + vertex 0.02666667 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 0 + vertex 0.04 0.008 -5.782412e-19 + vertex 0.04 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 0.01 + vertex 0.03333333 0.008 0.01 + vertex 0.03333333 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0 + vertex 0.04666667 0.008 0.01 + vertex 0.04 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 0.01 + vertex 0.04 0.008 -5.782412e-19 + vertex 0.04666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0 + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.05333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 0.01 + vertex 0.04666667 0.008 0.01 + vertex 0.04666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 5.782412e-19 + vertex 0.06 0.008 0.01 + vertex 0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 0.01 + vertex 0.05333333 0.008 -2.891206e-19 + vertex 0.06 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 5.782412e-19 + vertex 0.06666667 0.008 0 + vertex 0.06666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 0.01 + vertex 0.06 0.008 0.01 + vertex 0.06 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 0 + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.07333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 0.01 + vertex 0.06666667 0.008 0.01 + vertex 0.06666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 2.891206e-19 + vertex 0.08 0.008 0.01 + vertex 0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 0.01 + vertex 0.07333333 0.008 -4.336809e-19 + vertex 0.08 0.008 2.891206e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 2.891206e-19 + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.08666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 0.01 + vertex 0.08 0.008 0.01 + vertex 0.08 0.008 2.891206e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.09333333 0.008 0.01 + vertex 0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 0.01 + vertex 0.08666667 0.008 -2.168404e-19 + vertex 0.09333333 0.008 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 4.698209e-19 + vertex 0.1 0.008 0 + vertex 0.1 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 0.01 + vertex 0.09333333 0.008 0.01 + vertex 0.09333333 0.008 4.698209e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 0.01 + vertex 0.02 0.008 0.01 + vertex 0.02 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 0.02 + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 0.01 + vertex 0.02666667 0.008 0.01 + vertex 0.02666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 0.02 + vertex 0.02 0.008 0.02 + vertex 0.02 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 0.01 + vertex 0.03333333 0.008 0.01 + vertex 0.03333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 0.02 + vertex 0.02666667 0.008 0.02 + vertex 0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 0.01 + vertex 0.04 0.008 0.01 + vertex 0.04 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 0.02 + vertex 0.03333333 0.008 0.02 + vertex 0.03333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 0.01 + vertex 0.04666667 0.008 0.01 + vertex 0.04666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 0.02 + vertex 0.04 0.008 0.02 + vertex 0.04 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0.01 + vertex 0.05333333 0.008 0.01 + vertex 0.05333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 0.02 + vertex 0.04666667 0.008 0.02 + vertex 0.04666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 0.01 + vertex 0.06 0.008 0.01 + vertex 0.06 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 0.02 + vertex 0.05333333 0.008 0.02 + vertex 0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 0.01 + vertex 0.06666667 0.008 0.01 + vertex 0.06666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 0.02 + vertex 0.06 0.008 0.02 + vertex 0.06 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 0.01 + vertex 0.07333333 0.008 0.01 + vertex 0.07333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 0.02 + vertex 0.06666667 0.008 0.02 + vertex 0.06666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 0.01 + vertex 0.08 0.008 0.01 + vertex 0.08 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 0.02 + vertex 0.07333333 0.008 0.02 + vertex 0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 0.01 + vertex 0.08666667 0.008 0.01 + vertex 0.08666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 0.02 + vertex 0.08 0.008 0.02 + vertex 0.08 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 0.01 + vertex 0.09333333 0.008 0.01 + vertex 0.09333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 0.02 + vertex 0.08666667 0.008 0.02 + vertex 0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 0.01 + vertex 0.1 0.008 0.01 + vertex 0.1 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 0.02 + vertex 0.09333333 0.008 0.02 + vertex 0.09333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 0.02 + vertex 0.02 0.008 0.02 + vertex 0.02 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 0.03 + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 0.02 + vertex 0.02666667 0.008 0.02 + vertex 0.02666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 0.03 + vertex 0.02 0.008 0.03 + vertex 0.02 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 0.02 + vertex 0.03333333 0.008 0.02 + vertex 0.03333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 0.03 + vertex 0.02666667 0.008 0.03 + vertex 0.02666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 0.02 + vertex 0.04 0.008 0.02 + vertex 0.04 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 0.03 + vertex 0.03333333 0.008 0.03 + vertex 0.03333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 0.02 + vertex 0.04666667 0.008 0.02 + vertex 0.04666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 0.03 + vertex 0.04 0.008 0.03 + vertex 0.04 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0.02 + vertex 0.05333333 0.008 0.02 + vertex 0.05333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 0.03 + vertex 0.04666667 0.008 0.03 + vertex 0.04666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 0.02 + vertex 0.06 0.008 0.02 + vertex 0.06 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 0.03 + vertex 0.05333333 0.008 0.03 + vertex 0.05333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 0.02 + vertex 0.06666667 0.008 0.02 + vertex 0.06666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 0.03 + vertex 0.06 0.008 0.03 + vertex 0.06 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 0.02 + vertex 0.07333333 0.008 0.02 + vertex 0.07333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 0.03 + vertex 0.06666667 0.008 0.03 + vertex 0.06666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 0.02 + vertex 0.08 0.008 0.02 + vertex 0.08 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 0.03 + vertex 0.07333333 0.008 0.03 + vertex 0.07333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 0.02 + vertex 0.08666667 0.008 0.02 + vertex 0.08666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 0.03 + vertex 0.08 0.008 0.03 + vertex 0.08 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 0.02 + vertex 0.09333333 0.008 0.02 + vertex 0.09333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 0.03 + vertex 0.08666667 0.008 0.03 + vertex 0.08666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 0.02 + vertex 0.1 0.008 0.02 + vertex 0.1 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 0.03 + vertex 0.09333333 0.008 0.03 + vertex 0.09333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 0.03 + vertex 0.02 0.008 0.03 + vertex 0.02 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 0.04 + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 0.03 + vertex 0.02666667 0.008 0.03 + vertex 0.02666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 0.04 + vertex 0.02 0.008 0.04 + vertex 0.02 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 0.03 + vertex 0.03333333 0.008 0.03 + vertex 0.03333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 0.04 + vertex 0.02666667 0.008 0.04 + vertex 0.02666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 0.03 + vertex 0.04 0.008 0.03 + vertex 0.04 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 0.04 + vertex 0.03333333 0.008 0.04 + vertex 0.03333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 0.03 + vertex 0.04666667 0.008 0.03 + vertex 0.04666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 0.04 + vertex 0.04 0.008 0.04 + vertex 0.04 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0.03 + vertex 0.05333333 0.008 0.03 + vertex 0.05333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 0.04 + vertex 0.04666667 0.008 0.04 + vertex 0.04666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 0.03 + vertex 0.06 0.008 0.03 + vertex 0.06 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 0.04 + vertex 0.05333333 0.008 0.04 + vertex 0.05333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 0.03 + vertex 0.06666667 0.008 0.03 + vertex 0.06666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 0.04 + vertex 0.06 0.008 0.04 + vertex 0.06 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 0.03 + vertex 0.07333333 0.008 0.03 + vertex 0.07333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 0.04 + vertex 0.06666667 0.008 0.04 + vertex 0.06666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 0.03 + vertex 0.08 0.008 0.03 + vertex 0.08 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 0.04 + vertex 0.07333333 0.008 0.04 + vertex 0.07333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 0.03 + vertex 0.08666667 0.008 0.03 + vertex 0.08666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 0.04 + vertex 0.08 0.008 0.04 + vertex 0.08 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 0.03 + vertex 0.09333333 0.008 0.03 + vertex 0.09333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 0.04 + vertex 0.08666667 0.008 0.04 + vertex 0.08666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 0.03 + vertex 0.1 0.008 0.03 + vertex 0.1 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 0.04 + vertex 0.09333333 0.008 0.04 + vertex 0.09333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.01333333 0.008 0.04 + vertex 0.02 0.008 0.04 + vertex 0.02 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02 0.008 0.05 + vertex 0.01333333 0.008 0.05 + vertex 0.01333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02 0.008 0.04 + vertex 0.02666667 0.008 0.04 + vertex 0.02666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.02666667 0.008 0.05 + vertex 0.02 0.008 0.05 + vertex 0.02 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.02666667 0.008 0.04 + vertex 0.03333333 0.008 0.04 + vertex 0.03333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.03333333 0.008 0.05 + vertex 0.02666667 0.008 0.05 + vertex 0.02666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.03333333 0.008 0.04 + vertex 0.04 0.008 0.04 + vertex 0.04 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04 0.008 0.05 + vertex 0.03333333 0.008 0.05 + vertex 0.03333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04 0.008 0.04 + vertex 0.04666667 0.008 0.04 + vertex 0.04666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.04666667 0.008 0.05 + vertex 0.04 0.008 0.05 + vertex 0.04 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.04666667 0.008 0.04 + vertex 0.05333333 0.008 0.04 + vertex 0.05333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.05333333 0.008 0.05 + vertex 0.04666667 0.008 0.05 + vertex 0.04666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.05333333 0.008 0.04 + vertex 0.06 0.008 0.04 + vertex 0.06 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06 0.008 0.05 + vertex 0.05333333 0.008 0.05 + vertex 0.05333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06 0.008 0.04 + vertex 0.06666667 0.008 0.04 + vertex 0.06666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.06666667 0.008 0.05 + vertex 0.06 0.008 0.05 + vertex 0.06 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.06666667 0.008 0.04 + vertex 0.07333333 0.008 0.04 + vertex 0.07333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.07333333 0.008 0.05 + vertex 0.06666667 0.008 0.05 + vertex 0.06666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.07333333 0.008 0.04 + vertex 0.08 0.008 0.04 + vertex 0.08 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08 0.008 0.05 + vertex 0.07333333 0.008 0.05 + vertex 0.07333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08 0.008 0.04 + vertex 0.08666667 0.008 0.04 + vertex 0.08666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.08666667 0.008 0.05 + vertex 0.08 0.008 0.05 + vertex 0.08 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.08666667 0.008 0.04 + vertex 0.09333333 0.008 0.04 + vertex 0.09333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.09333333 0.008 0.05 + vertex 0.08666667 0.008 0.05 + vertex 0.08666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.09333333 0.008 0.04 + vertex 0.1 0.008 0.04 + vertex 0.1 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.1 0.008 0.05 + vertex 0.09333333 0.008 0.05 + vertex 0.09333333 0.008 0.04 + endloop + endfacet +endsolid topAir_to_rightSolid +solid topAir_to_heater + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.05 + vertex -0.006666667 0.008 -0.05 + vertex -0.006666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.04 + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.05 + vertex 0 0.008 -0.05 + vertex 0 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 -0.04 + vertex -0.006666667 0.008 -0.04 + vertex -0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 -0.05 + vertex 0.006666667 0.008 -0.05 + vertex 0.006666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.04 + vertex 0 0.008 -0.04 + vertex 0 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.05 + vertex 0.01333333 0.008 -0.05 + vertex 0.01333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.04 + vertex 0.006666667 0.008 -0.04 + vertex 0.006666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.04 + vertex -0.006666667 0.008 -0.04 + vertex -0.006666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.03 + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.04 + vertex 0 0.008 -0.04 + vertex 0 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 -0.03 + vertex -0.006666667 0.008 -0.03 + vertex -0.006666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 -0.04 + vertex 0.006666667 0.008 -0.04 + vertex 0.006666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.03 + vertex 0 0.008 -0.03 + vertex 0 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.04 + vertex 0.01333333 0.008 -0.04 + vertex 0.01333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.03 + vertex 0.006666667 0.008 -0.03 + vertex 0.006666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.03 + vertex -0.006666667 0.008 -0.03 + vertex -0.006666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.02 + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.03 + vertex 0 0.008 -0.03 + vertex 0 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 -0.02 + vertex -0.006666667 0.008 -0.02 + vertex -0.006666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 -0.03 + vertex 0.006666667 0.008 -0.03 + vertex 0.006666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.02 + vertex 0 0.008 -0.02 + vertex 0 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.03 + vertex 0.01333333 0.008 -0.03 + vertex 0.01333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.02 + vertex 0.006666667 0.008 -0.02 + vertex 0.006666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.02 + vertex -0.006666667 0.008 -0.02 + vertex -0.006666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.01 + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.02 + vertex 0 0.008 -0.02 + vertex 0 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 -0.01 + vertex -0.006666667 0.008 -0.01 + vertex -0.006666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 -0.02 + vertex 0.006666667 0.008 -0.02 + vertex 0.006666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.01 + vertex 0 0.008 -0.01 + vertex 0 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.02 + vertex 0.01333333 0.008 -0.02 + vertex 0.01333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 -0.01 + vertex 0.006666667 0.008 -0.01 + vertex 0.006666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.01 + vertex -0.006666667 0.008 -0.01 + vertex -0.006666667 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 0 + vertex -0.01333333 0.008 0 + vertex -0.01333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 -0.01 + vertex 0 0.008 -0.01 + vertex 0 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 0 + vertex -0.006666667 0.008 0 + vertex -0.006666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 -0.01 + vertex 0.006666667 0.008 -0.01 + vertex 0.006666667 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 0 + vertex 0 0.008 0 + vertex 0 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 -0.01 + vertex 0.01333333 0.008 -0.01 + vertex 0.01333333 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 0 + vertex 0.006666667 0.008 0 + vertex 0.006666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 0 + vertex -0.006666667 0.008 0 + vertex -0.006666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 0.01 + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 0 + vertex 0 0.008 0 + vertex 0 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 0.01 + vertex -0.006666667 0.008 0.01 + vertex -0.006666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 0 + vertex 0.006666667 0.008 0 + vertex 0.006666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 0.01 + vertex 0 0.008 0.01 + vertex 0 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 0 + vertex 0.01333333 0.008 0 + vertex 0.01333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 0.01 + vertex 0.006666667 0.008 0.01 + vertex 0.006666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 0.01 + vertex -0.006666667 0.008 0.01 + vertex -0.006666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 0.02 + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 0.01 + vertex 0 0.008 0.01 + vertex 0 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 0.02 + vertex -0.006666667 0.008 0.02 + vertex -0.006666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 0.01 + vertex 0.006666667 0.008 0.01 + vertex 0.006666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 0.02 + vertex 0 0.008 0.02 + vertex 0 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 0.01 + vertex 0.01333333 0.008 0.01 + vertex 0.01333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 0.02 + vertex 0.006666667 0.008 0.02 + vertex 0.006666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 0.02 + vertex -0.006666667 0.008 0.02 + vertex -0.006666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 0.03 + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 0.02 + vertex 0 0.008 0.02 + vertex 0 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 0.03 + vertex -0.006666667 0.008 0.03 + vertex -0.006666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 0.02 + vertex 0.006666667 0.008 0.02 + vertex 0.006666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 0.03 + vertex 0 0.008 0.03 + vertex 0 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 0.02 + vertex 0.01333333 0.008 0.02 + vertex 0.01333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 0.03 + vertex 0.006666667 0.008 0.03 + vertex 0.006666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 0.03 + vertex -0.006666667 0.008 0.03 + vertex -0.006666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 0.04 + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 0.03 + vertex 0 0.008 0.03 + vertex 0 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 0.04 + vertex -0.006666667 0.008 0.04 + vertex -0.006666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 0.03 + vertex 0.006666667 0.008 0.03 + vertex 0.006666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 0.04 + vertex 0 0.008 0.04 + vertex 0 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 0.03 + vertex 0.01333333 0.008 0.03 + vertex 0.01333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 0.04 + vertex 0.006666667 0.008 0.04 + vertex 0.006666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.01333333 0.008 0.04 + vertex -0.006666667 0.008 0.04 + vertex -0.006666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.006666667 0.008 0.05 + vertex -0.01333333 0.008 0.05 + vertex -0.01333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.006666667 0.008 0.04 + vertex 0 0.008 0.04 + vertex 0 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0 0.008 0.05 + vertex -0.006666667 0.008 0.05 + vertex -0.006666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0 0.008 0.04 + vertex 0.006666667 0.008 0.04 + vertex 0.006666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.006666667 0.008 0.05 + vertex 0 0.008 0.05 + vertex 0 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 0.006666667 0.008 0.04 + vertex 0.01333333 0.008 0.04 + vertex 0.01333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex 0.01333333 0.008 0.05 + vertex 0.006666667 0.008 0.05 + vertex 0.006666667 0.008 0.04 + endloop + endfacet +endsolid topAir_to_heater +solid topAir_to_leftSolid + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 -0.05 + vertex -0.09333333 0.008 -0.05 + vertex -0.09333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.04 + vertex -0.1 0.008 -0.04 + vertex -0.1 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.05 + vertex -0.08666667 0.008 -0.05 + vertex -0.08666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.04 + vertex -0.09333333 0.008 -0.04 + vertex -0.09333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.05 + vertex -0.08 0.008 -0.05 + vertex -0.08 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 -0.04 + vertex -0.08666667 0.008 -0.04 + vertex -0.08666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 -0.05 + vertex -0.07333333 0.008 -0.05 + vertex -0.07333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.04 + vertex -0.08 0.008 -0.04 + vertex -0.08 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.05 + vertex -0.06666667 0.008 -0.05 + vertex -0.06666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.04 + vertex -0.07333333 0.008 -0.04 + vertex -0.07333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.05 + vertex -0.06 0.008 -0.05 + vertex -0.06 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 -0.04 + vertex -0.06666667 0.008 -0.04 + vertex -0.06666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 -0.05 + vertex -0.05333333 0.008 -0.05 + vertex -0.05333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.04 + vertex -0.06 0.008 -0.04 + vertex -0.06 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.05 + vertex -0.04666667 0.008 -0.05 + vertex -0.04666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.04 + vertex -0.05333333 0.008 -0.04 + vertex -0.05333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.05 + vertex -0.04 0.008 -0.05 + vertex -0.04 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 -0.04 + vertex -0.04666667 0.008 -0.04 + vertex -0.04666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 -0.05 + vertex -0.03333333 0.008 -0.05 + vertex -0.03333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.04 + vertex -0.04 0.008 -0.04 + vertex -0.04 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.05 + vertex -0.02666667 0.008 -0.05 + vertex -0.02666667 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.04 + vertex -0.03333333 0.008 -0.04 + vertex -0.03333333 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.05 + vertex -0.02 0.008 -0.05 + vertex -0.02 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 -0.04 + vertex -0.02666667 0.008 -0.04 + vertex -0.02666667 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 -0.05 + vertex -0.01333333 0.008 -0.05 + vertex -0.01333333 0.008 -0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.04 + vertex -0.02 0.008 -0.04 + vertex -0.02 0.008 -0.05 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 -0.04 + vertex -0.09333333 0.008 -0.04 + vertex -0.09333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.03 + vertex -0.1 0.008 -0.03 + vertex -0.1 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.04 + vertex -0.08666667 0.008 -0.04 + vertex -0.08666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.03 + vertex -0.09333333 0.008 -0.03 + vertex -0.09333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.04 + vertex -0.08 0.008 -0.04 + vertex -0.08 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 -0.03 + vertex -0.08666667 0.008 -0.03 + vertex -0.08666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 -0.04 + vertex -0.07333333 0.008 -0.04 + vertex -0.07333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.03 + vertex -0.08 0.008 -0.03 + vertex -0.08 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.04 + vertex -0.06666667 0.008 -0.04 + vertex -0.06666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.03 + vertex -0.07333333 0.008 -0.03 + vertex -0.07333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.04 + vertex -0.06 0.008 -0.04 + vertex -0.06 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 -0.03 + vertex -0.06666667 0.008 -0.03 + vertex -0.06666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 -0.04 + vertex -0.05333333 0.008 -0.04 + vertex -0.05333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.03 + vertex -0.06 0.008 -0.03 + vertex -0.06 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.04 + vertex -0.04666667 0.008 -0.04 + vertex -0.04666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.03 + vertex -0.05333333 0.008 -0.03 + vertex -0.05333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.04 + vertex -0.04 0.008 -0.04 + vertex -0.04 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 -0.03 + vertex -0.04666667 0.008 -0.03 + vertex -0.04666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 -0.04 + vertex -0.03333333 0.008 -0.04 + vertex -0.03333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.03 + vertex -0.04 0.008 -0.03 + vertex -0.04 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.04 + vertex -0.02666667 0.008 -0.04 + vertex -0.02666667 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.03 + vertex -0.03333333 0.008 -0.03 + vertex -0.03333333 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.04 + vertex -0.02 0.008 -0.04 + vertex -0.02 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 -0.03 + vertex -0.02666667 0.008 -0.03 + vertex -0.02666667 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 -0.04 + vertex -0.01333333 0.008 -0.04 + vertex -0.01333333 0.008 -0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.03 + vertex -0.02 0.008 -0.03 + vertex -0.02 0.008 -0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 -0.03 + vertex -0.09333333 0.008 -0.03 + vertex -0.09333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.02 + vertex -0.1 0.008 -0.02 + vertex -0.1 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.03 + vertex -0.08666667 0.008 -0.03 + vertex -0.08666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.02 + vertex -0.09333333 0.008 -0.02 + vertex -0.09333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.03 + vertex -0.08 0.008 -0.03 + vertex -0.08 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 -0.02 + vertex -0.08666667 0.008 -0.02 + vertex -0.08666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 -0.03 + vertex -0.07333333 0.008 -0.03 + vertex -0.07333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.02 + vertex -0.08 0.008 -0.02 + vertex -0.08 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.03 + vertex -0.06666667 0.008 -0.03 + vertex -0.06666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.02 + vertex -0.07333333 0.008 -0.02 + vertex -0.07333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.03 + vertex -0.06 0.008 -0.03 + vertex -0.06 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 -0.02 + vertex -0.06666667 0.008 -0.02 + vertex -0.06666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 -0.03 + vertex -0.05333333 0.008 -0.03 + vertex -0.05333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.02 + vertex -0.06 0.008 -0.02 + vertex -0.06 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.03 + vertex -0.04666667 0.008 -0.03 + vertex -0.04666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.02 + vertex -0.05333333 0.008 -0.02 + vertex -0.05333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.03 + vertex -0.04 0.008 -0.03 + vertex -0.04 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 -0.02 + vertex -0.04666667 0.008 -0.02 + vertex -0.04666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 -0.03 + vertex -0.03333333 0.008 -0.03 + vertex -0.03333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.02 + vertex -0.04 0.008 -0.02 + vertex -0.04 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.03 + vertex -0.02666667 0.008 -0.03 + vertex -0.02666667 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.02 + vertex -0.03333333 0.008 -0.02 + vertex -0.03333333 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.03 + vertex -0.02 0.008 -0.03 + vertex -0.02 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 -0.02 + vertex -0.02666667 0.008 -0.02 + vertex -0.02666667 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 -0.03 + vertex -0.01333333 0.008 -0.03 + vertex -0.01333333 0.008 -0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.02 + vertex -0.02 0.008 -0.02 + vertex -0.02 0.008 -0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 -0.02 + vertex -0.09333333 0.008 -0.02 + vertex -0.09333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.01 + vertex -0.1 0.008 -0.01 + vertex -0.1 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.02 + vertex -0.08666667 0.008 -0.02 + vertex -0.08666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.01 + vertex -0.09333333 0.008 -0.01 + vertex -0.09333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.02 + vertex -0.08 0.008 -0.02 + vertex -0.08 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 -0.01 + vertex -0.08666667 0.008 -0.01 + vertex -0.08666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 -0.02 + vertex -0.07333333 0.008 -0.02 + vertex -0.07333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.01 + vertex -0.08 0.008 -0.01 + vertex -0.08 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.02 + vertex -0.06666667 0.008 -0.02 + vertex -0.06666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.01 + vertex -0.07333333 0.008 -0.01 + vertex -0.07333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.02 + vertex -0.06 0.008 -0.02 + vertex -0.06 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 -0.01 + vertex -0.06666667 0.008 -0.01 + vertex -0.06666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 -0.02 + vertex -0.05333333 0.008 -0.02 + vertex -0.05333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.01 + vertex -0.06 0.008 -0.01 + vertex -0.06 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.02 + vertex -0.04666667 0.008 -0.02 + vertex -0.04666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.01 + vertex -0.05333333 0.008 -0.01 + vertex -0.05333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.02 + vertex -0.04 0.008 -0.02 + vertex -0.04 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 -0.01 + vertex -0.04666667 0.008 -0.01 + vertex -0.04666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 -0.02 + vertex -0.03333333 0.008 -0.02 + vertex -0.03333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.01 + vertex -0.04 0.008 -0.01 + vertex -0.04 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.02 + vertex -0.02666667 0.008 -0.02 + vertex -0.02666667 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.01 + vertex -0.03333333 0.008 -0.01 + vertex -0.03333333 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.02 + vertex -0.02 0.008 -0.02 + vertex -0.02 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 -0.01 + vertex -0.02666667 0.008 -0.01 + vertex -0.02666667 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 -0.02 + vertex -0.01333333 0.008 -0.02 + vertex -0.01333333 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 -0.01 + vertex -0.02 0.008 -0.01 + vertex -0.02 0.008 -0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 -0.01 + vertex -0.09333333 0.008 -0.01 + vertex -0.09333333 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 0 + vertex -0.1 0.008 0 + vertex -0.1 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 -0.01 + vertex -0.08666667 0.008 -0.01 + vertex -0.08666667 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 0 + vertex -0.09333333 0.008 0 + vertex -0.09333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 -0.01 + vertex -0.08 0.008 -0.01 + vertex -0.08 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 0 + vertex -0.08666667 0.008 0 + vertex -0.08666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 -0.01 + vertex -0.07333333 0.008 -0.01 + vertex -0.07333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.08 0.008 0 + vertex -0.08 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 -0.01 + vertex -0.06666667 0.008 -0.01 + vertex -0.06666667 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 0 + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.07333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 -0.01 + vertex -0.06 0.008 -0.01 + vertex -0.06 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 0 + vertex -0.06666667 0.008 0 + vertex -0.06666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 -0.01 + vertex -0.05333333 0.008 -0.01 + vertex -0.05333333 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 0 + vertex -0.06 0.008 0 + vertex -0.06 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 -0.01 + vertex -0.04666667 0.008 -0.01 + vertex -0.04666667 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 0 + vertex -0.05333333 0.008 0 + vertex -0.05333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 -0.01 + vertex -0.04 0.008 -0.01 + vertex -0.04 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 0 + vertex -0.04666667 0.008 0 + vertex -0.04666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 -0.01 + vertex -0.03333333 0.008 -0.01 + vertex -0.03333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.04 0.008 0 + vertex -0.04 0.008 -0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.03333333 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 -0.01 + vertex -0.02666667 0.008 -0.01 + vertex -0.02666667 0.008 -5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 -0.01 + vertex -0.02 0.008 -0.01 + vertex -0.02 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0 + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.02666667 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 -0.01 + vertex -0.01333333 0.008 -0.01 + vertex -0.01333333 0.008 0 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 0 + vertex -0.02 0.008 0 + vertex -0.02 0.008 -0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 0 + vertex -0.09333333 0.008 0 + vertex -0.09333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 0.01 + vertex -0.1 0.008 0.01 + vertex -0.1 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 0 + vertex -0.08666667 0.008 0 + vertex -0.08666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 0.01 + vertex -0.09333333 0.008 0.01 + vertex -0.09333333 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 0 + vertex -0.08 0.008 0 + vertex -0.08 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 0.01 + vertex -0.08666667 0.008 0.01 + vertex -0.08666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.07333333 0.008 0.01 + vertex -0.08 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 0.01 + vertex -0.08 0.008 0 + vertex -0.07333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 5.782412e-19 + vertex -0.06666667 0.008 0 + vertex -0.06666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 0.01 + vertex -0.07333333 0.008 0.01 + vertex -0.07333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 0 + vertex -0.06 0.008 0 + vertex -0.06 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 0.01 + vertex -0.06666667 0.008 0.01 + vertex -0.06666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 0 + vertex -0.05333333 0.008 0 + vertex -0.05333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 0.01 + vertex -0.06 0.008 0.01 + vertex -0.06 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 0 + vertex -0.04666667 0.008 0 + vertex -0.04666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 0.01 + vertex -0.05333333 0.008 0.01 + vertex -0.05333333 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 0 + vertex -0.04 0.008 0 + vertex -0.04 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 0.01 + vertex -0.04666667 0.008 0.01 + vertex -0.04666667 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.03333333 0.008 0.01 + vertex -0.04 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 0.01 + vertex -0.04 0.008 0 + vertex -0.03333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 5.782412e-19 + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.02666667 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 0.01 + vertex -0.03333333 0.008 0.01 + vertex -0.03333333 0.008 5.782412e-19 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0 + vertex -0.02 0.008 0.01 + vertex -0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 0.01 + vertex -0.02666667 0.008 -5.782412e-19 + vertex -0.02 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0 + vertex -0.01333333 0.008 0 + vertex -0.01333333 0.008 0.01 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 0.01 + vertex -0.02 0.008 0.01 + vertex -0.02 0.008 0 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 0.01 + vertex -0.09333333 0.008 0.01 + vertex -0.09333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 0.02 + vertex -0.1 0.008 0.02 + vertex -0.1 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 0.01 + vertex -0.08666667 0.008 0.01 + vertex -0.08666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 0.02 + vertex -0.09333333 0.008 0.02 + vertex -0.09333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 0.01 + vertex -0.08 0.008 0.01 + vertex -0.08 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 0.02 + vertex -0.08666667 0.008 0.02 + vertex -0.08666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 0.01 + vertex -0.07333333 0.008 0.01 + vertex -0.07333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 0.02 + vertex -0.08 0.008 0.02 + vertex -0.08 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 0.01 + vertex -0.06666667 0.008 0.01 + vertex -0.06666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 0.02 + vertex -0.07333333 0.008 0.02 + vertex -0.07333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 0.01 + vertex -0.06 0.008 0.01 + vertex -0.06 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 0.02 + vertex -0.06666667 0.008 0.02 + vertex -0.06666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 0.01 + vertex -0.05333333 0.008 0.01 + vertex -0.05333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 0.02 + vertex -0.06 0.008 0.02 + vertex -0.06 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 0.01 + vertex -0.04666667 0.008 0.01 + vertex -0.04666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 0.02 + vertex -0.05333333 0.008 0.02 + vertex -0.05333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 0.01 + vertex -0.04 0.008 0.01 + vertex -0.04 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 0.02 + vertex -0.04666667 0.008 0.02 + vertex -0.04666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 0.01 + vertex -0.03333333 0.008 0.01 + vertex -0.03333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 0.02 + vertex -0.04 0.008 0.02 + vertex -0.04 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 0.01 + vertex -0.02666667 0.008 0.01 + vertex -0.02666667 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 0.02 + vertex -0.03333333 0.008 0.02 + vertex -0.03333333 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 0.01 + vertex -0.02 0.008 0.01 + vertex -0.02 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 0.02 + vertex -0.02666667 0.008 0.02 + vertex -0.02666667 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0.01 + vertex -0.01333333 0.008 0.01 + vertex -0.01333333 0.008 0.02 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 0.02 + vertex -0.02 0.008 0.02 + vertex -0.02 0.008 0.01 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 0.02 + vertex -0.09333333 0.008 0.02 + vertex -0.09333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 0.03 + vertex -0.1 0.008 0.03 + vertex -0.1 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 0.02 + vertex -0.08666667 0.008 0.02 + vertex -0.08666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 0.03 + vertex -0.09333333 0.008 0.03 + vertex -0.09333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 0.02 + vertex -0.08 0.008 0.02 + vertex -0.08 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 0.03 + vertex -0.08666667 0.008 0.03 + vertex -0.08666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 0.02 + vertex -0.07333333 0.008 0.02 + vertex -0.07333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 0.03 + vertex -0.08 0.008 0.03 + vertex -0.08 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 0.02 + vertex -0.06666667 0.008 0.02 + vertex -0.06666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 0.03 + vertex -0.07333333 0.008 0.03 + vertex -0.07333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 0.02 + vertex -0.06 0.008 0.02 + vertex -0.06 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 0.03 + vertex -0.06666667 0.008 0.03 + vertex -0.06666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 0.02 + vertex -0.05333333 0.008 0.02 + vertex -0.05333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 0.03 + vertex -0.06 0.008 0.03 + vertex -0.06 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 0.02 + vertex -0.04666667 0.008 0.02 + vertex -0.04666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 0.03 + vertex -0.05333333 0.008 0.03 + vertex -0.05333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 0.02 + vertex -0.04 0.008 0.02 + vertex -0.04 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 0.03 + vertex -0.04666667 0.008 0.03 + vertex -0.04666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 0.02 + vertex -0.03333333 0.008 0.02 + vertex -0.03333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 0.03 + vertex -0.04 0.008 0.03 + vertex -0.04 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 0.02 + vertex -0.02666667 0.008 0.02 + vertex -0.02666667 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 0.03 + vertex -0.03333333 0.008 0.03 + vertex -0.03333333 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 0.02 + vertex -0.02 0.008 0.02 + vertex -0.02 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 0.03 + vertex -0.02666667 0.008 0.03 + vertex -0.02666667 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0.02 + vertex -0.01333333 0.008 0.02 + vertex -0.01333333 0.008 0.03 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 0.03 + vertex -0.02 0.008 0.03 + vertex -0.02 0.008 0.02 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 0.03 + vertex -0.09333333 0.008 0.03 + vertex -0.09333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 0.04 + vertex -0.1 0.008 0.04 + vertex -0.1 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 0.03 + vertex -0.08666667 0.008 0.03 + vertex -0.08666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 0.04 + vertex -0.09333333 0.008 0.04 + vertex -0.09333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 0.03 + vertex -0.08 0.008 0.03 + vertex -0.08 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 0.04 + vertex -0.08666667 0.008 0.04 + vertex -0.08666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 0.03 + vertex -0.07333333 0.008 0.03 + vertex -0.07333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 0.04 + vertex -0.08 0.008 0.04 + vertex -0.08 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 0.03 + vertex -0.06666667 0.008 0.03 + vertex -0.06666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 0.04 + vertex -0.07333333 0.008 0.04 + vertex -0.07333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 0.03 + vertex -0.06 0.008 0.03 + vertex -0.06 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 0.04 + vertex -0.06666667 0.008 0.04 + vertex -0.06666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 0.03 + vertex -0.05333333 0.008 0.03 + vertex -0.05333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 0.04 + vertex -0.06 0.008 0.04 + vertex -0.06 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 0.03 + vertex -0.04666667 0.008 0.03 + vertex -0.04666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 0.04 + vertex -0.05333333 0.008 0.04 + vertex -0.05333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 0.03 + vertex -0.04 0.008 0.03 + vertex -0.04 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 0.04 + vertex -0.04666667 0.008 0.04 + vertex -0.04666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 0.03 + vertex -0.03333333 0.008 0.03 + vertex -0.03333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 0.04 + vertex -0.04 0.008 0.04 + vertex -0.04 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 0.03 + vertex -0.02666667 0.008 0.03 + vertex -0.02666667 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 0.04 + vertex -0.03333333 0.008 0.04 + vertex -0.03333333 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 0.03 + vertex -0.02 0.008 0.03 + vertex -0.02 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 0.04 + vertex -0.02666667 0.008 0.04 + vertex -0.02666667 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0.03 + vertex -0.01333333 0.008 0.03 + vertex -0.01333333 0.008 0.04 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 0.04 + vertex -0.02 0.008 0.04 + vertex -0.02 0.008 0.03 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.1 0.008 0.04 + vertex -0.09333333 0.008 0.04 + vertex -0.09333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.09333333 0.008 0.05 + vertex -0.1 0.008 0.05 + vertex -0.1 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.09333333 0.008 0.04 + vertex -0.08666667 0.008 0.04 + vertex -0.08666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08666667 0.008 0.05 + vertex -0.09333333 0.008 0.05 + vertex -0.09333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08666667 0.008 0.04 + vertex -0.08 0.008 0.04 + vertex -0.08 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.08 0.008 0.05 + vertex -0.08666667 0.008 0.05 + vertex -0.08666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.08 0.008 0.04 + vertex -0.07333333 0.008 0.04 + vertex -0.07333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.07333333 0.008 0.05 + vertex -0.08 0.008 0.05 + vertex -0.08 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.07333333 0.008 0.04 + vertex -0.06666667 0.008 0.04 + vertex -0.06666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06666667 0.008 0.05 + vertex -0.07333333 0.008 0.05 + vertex -0.07333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06666667 0.008 0.04 + vertex -0.06 0.008 0.04 + vertex -0.06 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.06 0.008 0.05 + vertex -0.06666667 0.008 0.05 + vertex -0.06666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.06 0.008 0.04 + vertex -0.05333333 0.008 0.04 + vertex -0.05333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.05333333 0.008 0.05 + vertex -0.06 0.008 0.05 + vertex -0.06 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.05333333 0.008 0.04 + vertex -0.04666667 0.008 0.04 + vertex -0.04666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04666667 0.008 0.05 + vertex -0.05333333 0.008 0.05 + vertex -0.05333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04666667 0.008 0.04 + vertex -0.04 0.008 0.04 + vertex -0.04 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.04 0.008 0.05 + vertex -0.04666667 0.008 0.05 + vertex -0.04666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.04 0.008 0.04 + vertex -0.03333333 0.008 0.04 + vertex -0.03333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.03333333 0.008 0.05 + vertex -0.04 0.008 0.05 + vertex -0.04 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.03333333 0.008 0.04 + vertex -0.02666667 0.008 0.04 + vertex -0.02666667 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02666667 0.008 0.05 + vertex -0.03333333 0.008 0.05 + vertex -0.03333333 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02666667 0.008 0.04 + vertex -0.02 0.008 0.04 + vertex -0.02 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.02 0.008 0.05 + vertex -0.02666667 0.008 0.05 + vertex -0.02666667 0.008 0.04 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -0.02 0.008 0.04 + vertex -0.01333333 0.008 0.04 + vertex -0.01333333 0.008 0.05 + endloop + endfacet + facet normal -0 -1 0 + outer loop + vertex -0.01333333 0.008 0.05 + vertex -0.02 0.008 0.05 + vertex -0.02 0.008 0.04 + endloop + endfacet +endsolid topAir_to_leftSolid diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/makeCellSets.setSet b/tutorials/mesh/snappyHexMesh/multiRegionMesh/makeCellSets.setSet new file mode 100644 index 0000000000000000000000000000000000000000..84c52f85b36fd8d8f90b07b24898b7b8857add26 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/makeCellSets.setSet @@ -0,0 +1,11 @@ +cellSet heater new boxToCell (-0.01 0 -100 )(0.01 0.01 100) +cellSet heater add boxToCell (-0.01 -100 -0.01)(0.01 0.01 0.01) +cellSet leftSolid new boxToCell (-100 0 -100 )(-0.01 0.01 100) +cellSet rightSolid new boxToCell (0.01 0 -100 )(100 0.01 100) +cellSet topAir new boxToCell (-100 0.01 -100 )(100 100 100) +cellSet bottomAir clear +cellSet bottomAir add cellToCell heater +cellSet bottomAir add cellToCell leftSolid +cellSet bottomAir add cellToCell rightSolid +cellSet bottomAir add cellToCell topAir +cellSet bottomAir invert diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/README b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/README new file mode 100644 index 0000000000000000000000000000000000000000..5a81b9a5708b0346c6cdd4bd2f6835feb3700bc1 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/README @@ -0,0 +1,3 @@ +fvSolution is used for outer correctors specification. +fvSchemes is only so that pre-processing activities can proceed + diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/changeDictionaryDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/changeDictionaryDict new file mode 100644 index 0000000000000000000000000000000000000000..f3d186d1e81fb8541695551656604c4d3efaa6a4 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/changeDictionaryDict @@ -0,0 +1,301 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object changeDictionaryDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dictionaryReplacement +{ + boundary + { + bottomAir_to_leftSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion leftSolid; + samplePatch leftSolid_to_bottomAir; + } + bottomAir_to_rightSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion rightSolid; + samplePatch rightSolid_to_bottomAir; + } + bottomAir_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_bottomAir; + } + } + + U + { + internalField uniform (0 0 0); + boundaryField + { + minX + { + type fixedValue; + value uniform (0 0 0); + } + maxX + { + type fixedValue; + value uniform (0 0 0); + } + + minY + { + type fixedValue; + value uniform (0 0 0); + } + + minZ + { + type fixedValue; + value uniform (0 0 0); + } + + maxZ + { + type fixedValue; + value uniform (0 0 0); + } + + bottomAir_to_leftSolid + { + type fixedValue; + value uniform (0 0 0); + + } + bottomAir_to_heater + { + type fixedValue; + value uniform (0 0 0); + } + bottomAir_to_rightSolid + { + type fixedValue; + value uniform (0 0 0); + } + } + } + + T + { + boundaryField + { + minX + { + type zeroGradient; + } + maxX + { + type zeroGradient; + } + minY + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + bottomAir_to_leftSolid + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + bottomAir_to_heater + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + bottomAir_to_rightSolid + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + } + } + + epsilon + { + // Set the value on all bc to non-zero. Not used in simulation + // since zeroGradient; only used in initialisation. + internalField uniform 0.01; + + boundaryField + { + minX + { + type zeroGradient; + value uniform 0.01; + } + maxX + { + type zeroGradient; + value uniform 0.01; + } + + minY + { + type zeroGradient; + value uniform 0.01; + } + + minZ + { + type zeroGradient; + value uniform 0.01; + } + maxZ + { + type zeroGradient; + value uniform 0.01; + } + + bottomAir_to_leftSolid + { + type zeroGradient; + value uniform 0.01; + } + bottomAir_to_heater + { + type zeroGradient; + value uniform 0.01; + } + bottomAir_to_rightSolid + { + type zeroGradient; + value uniform 0.01; + } + } + } + + k + { + internalField uniform 0.1; + boundaryField + { + minX + { + type zeroGradient; + value uniform 0.1; + } + maxX + { + type zeroGradient; + value uniform 0.1; + } + + minY + { + type zeroGradient; + value uniform 0.1; + } + + minZ + { + type zeroGradient; + value uniform 0.1; + } + maxZ + { + type zeroGradient; + value uniform 0.1; + } + + bottomAir_to_leftSolid + { + type zeroGradient; + value uniform 0.1; + } + bottomAir_to_heater + { + type zeroGradient; + value uniform 0.1; + } + bottomAir_to_rightSolid + { + type zeroGradient; + value uniform 0.1; + } + } + } + + p + { + internalField uniform 1E5; + + boundaryField + { + minX + { + type buoyantPressure; + value 1e5; + } + maxX + { + type buoyantPressure; + value 1e5; + } + minY + { + type buoyantPressure; + value 1e5; + } + minZ + { + type buoyantPressure; + value 1e5; + } + maxZ + { + type buoyantPressure; + value 1e5; + } + bottomAir_to_leftSolid + { + type buoyantPressure; + value 1e5; + } + bottomAir_to_heater + { + type buoyantPressure; + value 1e5; + } + bottomAir_to_rightSolid + { + type buoyantPressure; + value 1e5; + } + } + } + +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/decomposeParDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/fvSchemes b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..5559e33626b9f62d129a9265641d3156edb4814d --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/fvSchemes @@ -0,0 +1,69 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; + //default CoEuler phi rho 0.1; +} + +gradSchemes +{ + default Gauss linear; +// grad(U) cellLimited Gauss linear 1; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phiU,p) Gauss linear; + div(phi,h) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((muEff*dev2(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(muEff,U) Gauss linear limited 0.333; + laplacian((rho*(1|A(U))),p) Gauss linear limited 0.333; + laplacian(alphaEff,h) Gauss linear limited 0.333; + laplacian(DkEff,k) Gauss linear limited 0.333; + laplacian(DepsilonEff,epsilon) Gauss linear limited 0.333; + laplacian(DREff,R) Gauss linear limited 0.333; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default limited 0.333; +} + +fluxRequired +{ + default no; + p; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/fvSolution b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..e0ecb9405c6ee97475280b790e95176ff3b61e41 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/bottomAir/fvSolution @@ -0,0 +1,123 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + rho + { + solver PCG + preconditioner DIC; + tolerance 1e-8; + relTol 0; + }; + p + { + solver GAMG; + tolerance 1e-8; + relTol 0.01; + + smoother GaussSeidel; + + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + pFinal + { + solver GAMG; + tolerance 1e-8; + relTol 0; + + smoother GaussSeidel; + + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0; + }; + + h + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0.1; + }; + hFinal + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0; + }; + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0; + }; + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0; + }; + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-08; + relTol 0; + }; +} + +PISO +{ + momentumPredictor off; + nOuterCorrectors 1; + nCorrectors 2; + nNonOrthogonalCorrectors 1; + pRefPoint (-0.081 -0.0257 8.01); + pRefValue 1e5; +} + + +PIMPLE +{ + momentumPredictor on; + nCorrectors 2; + nNonOrthogonalCorrectors 0; +} + + +relaxationFactors +{ +// h 0.9; +// U 0.9; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/controlDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..71de8302ef042c04270bbd8376202ab23149f51c --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/controlDict @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom latestTime; + +startTime 0.001; + +stopAt endTime; + +endTime 200; + +deltaT 0.001; + +writeControl adjustableRunTime; +writeInterval 50; +//writeControl timeStep; +//writeInterval 100; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 7; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +maxCo 0.3; + +adjustTimeStep yes; + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/decomposeParDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/fvSchemes b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..4c5f890224ae9fc5c14ce322600ab186c3d05c72 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/fvSchemes @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ +} + +gradSchemes +{ +} + +divSchemes +{ +} + +laplacianSchemes +{ +} + +interpolationSchemes +{ +} + +snGradSchemes +{ +} + +fluxRequired +{ +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/fvSolution b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..50f28d672d7203b69ec909d90a6764a191c51631 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/fvSolution @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +PIMPLE +{ + nOuterCorrectors 1; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/changeDictionaryDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/changeDictionaryDict new file mode 100644 index 0000000000000000000000000000000000000000..2bea6785224723f43db9cba91aaaf21d5ebf8998 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/changeDictionaryDict @@ -0,0 +1,216 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object changeDictionaryDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dictionaryReplacement +{ + boundary + { + heater_to_bottomAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion bottomAir; + samplePatch bottomAir_to_heater; + } + heater_to_leftSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion leftSolid; + samplePatch leftSolid_to_heater; + } + heater_to_rightSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion rightSolid; + samplePatch rightSolid_to_heater; + } + heater_to_topAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion topAir; + samplePatch topAir_to_heater; + } + } + + T + { + internalField uniform 300; + + boundaryField + { + minY + { + type fixedValue; + value uniform 500; + } + + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + + heater_to_bottomAir + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + + } + heater_to_leftSolid + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + heater_to_rightSolid + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + heater_to_topAir + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + } + } + + rho + { + internalField uniform 8000; + + boundaryField + { + minY + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + heater_to_bottomAir + { + type zeroGradient; + } + heater_to_leftSolid + { + type zeroGradient; + } + heater_to_rightSolid + { + type zeroGradient; + } + heater_to_topAir + { + type zeroGradient; + } + } + } + + K + { + internalField uniform 80; + + boundaryField + { + minY + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + heater_to_bottomAir + { + type zeroGradient; + } + heater_to_leftSolid + { + type zeroGradient; + } + heater_to_rightSolid + { + type zeroGradient; + } + heater_to_topAir + { + type zeroGradient; + } + } + } + + cp + { + internalField uniform 450; + + boundaryField + { + minY + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + heater_to_bottomAir + { + type zeroGradient; + } + heater_to_leftSolid + { + type zeroGradient; + } + heater_to_rightSolid + { + type zeroGradient; + } + heater_to_topAir + { + type zeroGradient; + } + } + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/decomposeParDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/fvSchemes b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..653c819be5bbf72737c34eeccec937508c2847fe --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/fvSchemes @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; +} + +laplacianSchemes +{ + default none; + laplacian(K,T) Gauss linear limited 0.333; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default limited 0.333; +} + +fluxRequired +{ + default no; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/fvSolution b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..342a7d4232540c1bcefb8362e4e638d7e9a3b9b0 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/heater/fvSolution @@ -0,0 +1,38 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + T + { + solver PCG; + preconditioner DIC; + tolerance 1E-06; + relTol 0; + }; +} + +PISO +{ + nNonOrthogonalCorrectors 1; +} + +PIMPLE +{ + nNonOrthogonalCorrectors 1; +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/changeDictionaryDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/changeDictionaryDict new file mode 100644 index 0000000000000000000000000000000000000000..0fb3ee191c8a06de31849237b5bdd5499d40f8f0 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/changeDictionaryDict @@ -0,0 +1,187 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object changeDictionaryDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dictionaryReplacement +{ + boundary + { + leftSolid_to_bottomAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion bottomAir; + samplePatch bottomAir_to_leftSolid; + } + leftSolid_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_leftSolid;; + } + leftSolid_to_topAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion topAir; + samplePatch topAir_to_leftSolid;; + } + } + + T + { + internalField uniform 300; + + boundaryField + { + minX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + leftSolid_to_bottomAir + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + + } + leftSolid_to_heater + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + leftSolid_to_topAir + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + } + } + + rho + { + internalField uniform 8000; + + boundaryField + { + minX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + leftSolid_to_bottomAir + { + type zeroGradient; + } + leftSolid_to_heater + { + type zeroGradient; + } + leftSolid_to_topAir + { + type zeroGradient; + } + } + } + + K + { + internalField uniform 80; + + boundaryField + { + minX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + leftSolid_to_bottomAir + { + type zeroGradient; + } + leftSolid_to_heater + { + type zeroGradient; + } + leftSolid_to_topAir + { + type zeroGradient; + } + } + } + + cp + { + internalField uniform 450; + + boundaryField + { + minX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + leftSolid_to_bottomAir + { + type zeroGradient; + } + leftSolid_to_heater + { + type zeroGradient; + } + leftSolid_to_topAir + { + type zeroGradient; + } + } + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/decomposeParDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/fvSchemes b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/fvSchemes new file mode 120000 index 0000000000000000000000000000000000000000..63236f302cfd79847ce312cced35784fa149c827 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/fvSchemes @@ -0,0 +1 @@ +../heater/fvSchemes \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/fvSolution b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/fvSolution new file mode 120000 index 0000000000000000000000000000000000000000..0bde0fc62f58a1a111ce897344b26816ef3de04d --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/leftSolid/fvSolution @@ -0,0 +1 @@ +../heater/fvSolution \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/changeDictionaryDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/changeDictionaryDict new file mode 100644 index 0000000000000000000000000000000000000000..c3d6b08a0d147cef9d91a02a45036fadc4cfa59b --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/changeDictionaryDict @@ -0,0 +1,186 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object changeDictionaryDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dictionaryReplacement +{ + boundary + { + rightSolid_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_rightSolid; + } + rightSolid_to_bottomAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion bottomAir; + samplePatch bottomAir_to_rightSolid; + } + rightSolid_to_topAir + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion topAir; + samplePatch topAir_to_rightSolid; + } + } + + T + { + internalField uniform 300; + + boundaryField + { + maxX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + rightSolid_to_heater + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + rightSolid_to_bottomAir + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + rightSolid_to_topAir + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + } + } + + rho + { + internalField uniform 8000; + + boundaryField + { + maxX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + rightSolid_to_bottomAir + { + type zeroGradient; + } + rightSolid_to_heater + { + type zeroGradient; + } + rightSolid_to_topAir + { + type zeroGradient; + } + } + } + + K + { + internalField uniform 80; + + boundaryField + { + maxX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + rightSolid_to_bottomAir + { + type zeroGradient; + } + rightSolid_to_heater + { + type zeroGradient; + } + rightSolid_to_topAir + { + type zeroGradient; + } + } + } + + cp + { + internalField uniform 450; + + boundaryField + { + maxX + { + type zeroGradient; + } + minZ + { + type zeroGradient; + } + maxZ + { + type zeroGradient; + } + rightSolid_to_bottomAir + { + type zeroGradient; + } + rightSolid_to_heater + { + type zeroGradient; + } + rightSolid_to_topAir + { + type zeroGradient; + } + } + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/decomposeParDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/fvSchemes b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/fvSchemes new file mode 120000 index 0000000000000000000000000000000000000000..63236f302cfd79847ce312cced35784fa149c827 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/fvSchemes @@ -0,0 +1 @@ +../heater/fvSchemes \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/fvSolution b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/fvSolution new file mode 120000 index 0000000000000000000000000000000000000000..0bde0fc62f58a1a111ce897344b26816ef3de04d --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/rightSolid/fvSolution @@ -0,0 +1 @@ +../heater/fvSolution \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/motorBike/system/snappyHexMeshDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/snappyHexMeshDict similarity index 71% rename from tutorials/mesh/snappyHexMesh/motorBike/system/snappyHexMeshDict rename to tutorials/mesh/snappyHexMesh/multiRegionMesh/system/snappyHexMeshDict index 0d84177d8b422d750ef38dbf1536c4ba8383c6dc..9fb743af9d2cc4c27ed097fc05493875f95d4a35 100644 --- a/tutorials/mesh/snappyHexMesh/motorBike/system/snappyHexMeshDict +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/snappyHexMeshDict @@ -1,17 +1,23 @@ -/*--------------------------------*- C++ -*----------------------------------*\ +/*---------------------------------------------------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / O peration | Version: 1.0 | +| \\ / A nd | Web: http://www.openfoam.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ + FoamFile { - version 2.0; - format ascii; - class dictionary; - location "system"; - object snappyHexMeshDict; + version 2.0; + format ascii; + + root "/home/penfold/mattijs/foam/mattijs2.1/run/icoFoam"; + case "cavity"; + instance "system"; + local ""; + + class dictionary; + object autoHexMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -19,7 +25,7 @@ FoamFile // Which of the steps to run castellatedMesh true; snap true; -addLayers true; +addLayers false; // Geometry. Definition of all surfaces. All surfaces are of class @@ -30,19 +36,44 @@ addLayers true; // - to 'snap' the mesh boundary to the surface geometry { - motorBike.stl + bottomAir.stl { - type triSurfaceMesh; - name motorBike; + type triSurfaceMesh; + name bottomAir; } - refinementBox + topAir.stl { - type searchableBox; - min ( -0.3 -0.4 -0.1 ); - max ( 3 0.4 1.4 ); + type triSurfaceMesh; + name topAir; } -} + + leftSolid.stl + { + type triSurfaceMesh; + name leftSolid; + } + + rightSolid.stl + { + type triSurfaceMesh; + name rightSolid; + } + + heater.stl + { + type triSurfaceMesh; + name heater; + } + + //refinementBox + //{ + // type searchableBox; + // min (-0.3 -0.4 -0.1); + // max ( 3.0 0.4 1.4); + // } +}; + // Settings for the castellatedMesh generation. @@ -55,15 +86,14 @@ castellatedMeshControls // While refining maximum number of cells per processor. This is basically // the number of cells that fit on a processor. If you choose this too small // it will do just more refinement iterations to obtain a similar mesh. - maxLocalCells 1000000; - + maxLocalCells 1000000; // Overall cell limit (approximately). Refinement will stop immediately // upon reaching this number so a refinement level might not complete. // Note that this is the number of cells before removing the part which // is not 'visible' from the keepPoint. The final number of cells might // actually be a lot less. - maxGlobalCells 2000000; + maxGlobalCells 2000000; // The surface refinement loop might spend lots of iterations refining just a // few cells. This setting will cause refinement to stop if <= minimumRefine @@ -85,10 +115,6 @@ castellatedMeshControls // This is a featureEdgeMesh, read from constant/triSurface for now. features ( - //{ - // file "someLine.eMesh"; - // level 2; - //} ); @@ -104,10 +130,54 @@ castellatedMeshControls refinementSurfaces { - motorBike + bottomAir + { + // Surface-wise min and max refinement level + level (1 1); + + faceZone bottomAir; + cellZone bottomAir; + zoneInside true; + } + + topAir + { + // Surface-wise min and max refinement level + level (1 1); + + faceZone topAir; + cellZone topAir; + zoneInside true; + } + + heater { // Surface-wise min and max refinement level - level ( 5 6 ); + level (0 0); + + faceZone heater; + cellZone heater; + zoneInside true; + } + + leftSolid + { + // Surface-wise min and max refinement level + level (1 1); + + faceZone leftSolid; + cellZone leftSolid; + zoneInside true; + } + + rightSolid + { + // Surface-wise min and max refinement level + level (1 1); + + faceZone rightSolid; + cellZone rightSolid; + zoneInside true; } } @@ -127,17 +197,17 @@ castellatedMeshControls // cells inside the surface get refined up to the level. The surface // needs to be closed for this to be possible. // - outside. Same but cells outside. + refinementRegions { - refinementBox - { - mode inside; - levels ( ( 1e+15 4 ) ); - } + //refinementBox + //{ + // mode inside; + // levels ((1E15 4)); + //} } - // Mesh selection // ~~~~~~~~~~~~~~ @@ -146,16 +216,17 @@ castellatedMeshControls // section reachable from the locationInMesh is kept. // NOTE: This point should never be on a face, always inside a cell, even // after refinement. - locationInMesh ( 3 3 0.43 ); + locationInMesh (0.01 0.01 0.01); } + // Settings for the snapping. snapControls { //- Number of patch smoothing iterations before finding correspondence // to surface - nSmoothPatch 3; + nSmoothPatch 3; //- Relative distance for points to be attracted by surface feature point // or edge. True distance is this factor times local @@ -163,29 +234,35 @@ snapControls tolerance 4.0; //- Number of mesh displacement relaxation iterations. - nSolveIter 30; + nSolveIter 30; //- Maximum number of snapping relaxation iterations. Should stop // before upon reaching a correct mesh. - nRelaxIter 5; + nRelaxIter 5; } + // Settings for the layer addition. addLayersControls { + relativeSizes true; + // Per final patch (so not geometry!) the layer information layers { - minZ - { - nSurfaceLayers 1; - } - - "motorBike_.*" - { - nSurfaceLayers 1; - } + //flowAirDuctReagent_flowAirDuctReagent + //{ + // nSurfaceLayers 1; + //} + //flowAirDuctReagent_inlet1 + //{ + // nSurfaceLayers 1; + //} + //flowAirDuctReagent_inlet2 + //{ + // nSurfaceLayers 1; + //} } // Expansion factor for layer mesh @@ -195,43 +272,43 @@ addLayersControls // is the // thickness of the layer furthest away from the wall. // Relative to undistorted size of cell outside layer. - finalLayerRatio 0.3; + finalLayerThickness 0.3; //- Minimum thickness of cell layer. If for any reason layer // cannot be above minThickness do not add layer. // Relative to undistorted size of cell outside layer. - minThickness 0.1; + minThickness 0.1; //- If points get not extruded do nGrow layers of connected faces that are // also not grown. This helps convergence of the layer addition process // close to features. - nGrow 1; + nGrow 0; // Advanced settings //- When not to extrude surface. 0 is flat surface, 90 is when two faces // make straight angle. - featureAngle 30; + featureAngle 30; //- Maximum number of snapping relaxation iterations. Should stop // before upon reaching a correct mesh. - nRelaxIter 3; + nRelaxIter 3; - // Number of smoothing iterations of surface normals + // Number of smoothing iterations of surface normals nSmoothSurfaceNormals 1; - // Number of smoothing iterations of interior mesh movement direction - nSmoothNormals 3; + // Number of smoothing iterations of interior mesh movement direction + nSmoothNormals 3; // Smooth layer thickness over surface patches nSmoothThickness 10; - // Stop layer growth on highly warped cells + // Stop layer growth on highly warped cells maxFaceThicknessRatio 0.5; - // Reduce layer growth where ratio thickness to medial - // distance is large + // Reduce layer growth where ratio thickness to medial + // distance is large maxThicknessToMedialRatio 0.3; // Angle used to pick up medial axis points @@ -239,19 +316,16 @@ addLayersControls // Create buffer region for new layer terminations nBufferCellsNoExtrude 0; - - - // Overall max number of layer addition iterations - nLayerIter 50; } + // Generic mesh quality settings. At any undoable phase these determine // where to undo. meshQualityControls { //- Maximum non-orthogonality allowed. Set to 180 to disable. - maxNonOrtho 65; + maxNonOrtho 65; //- Max skewness allowed. Set to <0 to disable. maxBoundarySkewness 20; @@ -260,31 +334,31 @@ meshQualityControls //- Max concaveness allowed. Is angle (in degrees) below which concavity // is allowed. 0 is straight face, <0 would be convex face. // Set to 180 to disable. - maxConcave 80; + maxConcave 80; //- Minimum projected area v.s. actual area. Set to -1 to disable. - minFlatness 0.5; + minFlatness 0.5; //- Minimum pyramid volume. Is absolute volume of cell pyramid. // Set to very negative number (e.g. -1E30) to disable. - minVol 1e-13; + minVol 0; //- Minimum face area. Set to <0 to disable. - minArea -1; + minArea -1; //- Minimum face twist. Set to <-1 to disable. dot product of face normal //- and face centre triangles normal - minTwist 0.02; + minTwist 0.02; //- minimum normalised cell determinant //- 1 = hex, <= 0 = folded or flattened illegal cell - minDeterminant 0.001; + minDeterminant 0.001; - //- minFaceWeight (0 -> 0.5) - minFaceWeight 0.02; + //- minFaceWeight (0 -> 0.5) + minFaceWeight 0.02; //- minVolRatio (0 -> 1) - minVolRatio 0.01; + minVolRatio 0.01; //must be >0 for Fluent compatibility minTriangleTwist -1; @@ -293,13 +367,12 @@ meshQualityControls // Advanced //- Number of error distribution iterations - nSmoothScale 4; + nSmoothScale 4; //- amount to scale back displacement at error points - errorReduction 0.75; + errorReduction 0.75; } - // Advanced // Flags for optional output @@ -307,12 +380,12 @@ meshQualityControls // 1 : write intermediate meshes // 2 : write volScalarField with cellLevel for postprocessing // 4 : write current intersections as .obj files -debug 0; +debug 0; // Merge tolerance. Is fraction of overall bounding box of initial mesh. // Note: the write tolerance needs to be higher than this. -mergeTolerance 1e-06; +mergeTolerance 1E-6; // ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/changeDictionaryDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/changeDictionaryDict new file mode 100644 index 0000000000000000000000000000000000000000..ad82755773e1968fef95dc1aa7c688d5709e2374 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/changeDictionaryDict @@ -0,0 +1,320 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object changeDictionaryDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dictionaryReplacement +{ + boundary + { + topAir_to_leftSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion leftSolid; + samplePatch leftSolid_to_topAir; + } + topAir_to_heater + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion heater; + samplePatch heater_to_topAir; + } + topAir_to_rightSolid + { + offset ( 0 0 0 ); + sampleMode nearestPatchFace; + sampleRegion rightSolid; + samplePatch rightSolid_to_topAir; + } + } + + U + { + internalField uniform ( 0.01 0 0 ); + boundaryField + { + minX + { + type fixedValue; + value uniform (0.01 0 0); + } + maxX + { + type inletOutlet; + inletValue uniform (0 0 0); + } + + maxY + { + type fixedValue; + value uniform (0 0 0); + } + + minZ + { + type fixedValue; + value uniform (0 0 0); + } + maxZ + { + type fixedValue; + value uniform (0 0 0); + } + + topAir_to_leftSolid + { + type fixedValue; + value uniform (0 0 0); + + } + topAir_to_heater + { + type fixedValue; + value uniform (0 0 0); + } + topAir_to_rightSolid + { + type fixedValue; + value uniform (0 0 0); + } + } + } + + T + { + internalField uniform 300; + + boundaryField + { + maxY + { + type fixedValue; + value uniform 300; + } + minX + { + type fixedValue; + value uniform 300; + } + maxX + { + type fixedValue; + value uniform 300; + } + minZ + { + type fixedValue; + value uniform 300; + } + maxZ + { + type fixedValue; + value uniform 300; + } + topAir_to_leftSolid + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + + } + topAir_to_heater + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + topAir_to_rightSolid + { + type solidWallMixedTemperatureCoupled; + neighbourFieldName T; + K K; + value uniform 300; + } + } + } + + epsilon + { + // Set the value on all bc to non-zero. Not used in simulation + // since zeroGradient; only used in initialisation. + boundaryField + { + minX + { + type fixedValue; + value uniform 0.01; + } + maxX + { + type zeroGradient; + value uniform 0.01; + } + + minY + { + type zeroGradient; + value uniform 0.01; + } + maxY + { + type zeroGradient; + value uniform 0.01; + } + + minZ + { + type zeroGradient; + value uniform 0.01; + } + maxZ + { + type zeroGradient; + value uniform 0.01; + } + topAir_to_leftSolid + { + type zeroGradient; + value uniform 0.01; + } + topAir_to_heater + { + type zeroGradient; + value uniform 0.01; + } + topAir_to_rightSolid + { + type zeroGradient; + value uniform 0.01; + } + } + } + + k + { + internalField uniform 0.1; + boundaryField + { + minX + { + type fixedValue; + value uniform 0.1; + } + + maxX + { + type zeroGradient; + value uniform 0.1; + } + + maxY + { + type zeroGradient; + value uniform 0.1; + } + + minZ + { + type zeroGradient; + value uniform 0.1; + } + maxZ + { + type zeroGradient; + value uniform 0.1; + } + + topAir_to_leftSolid + { + type zeroGradient; + value uniform 0.1; + } + topAir_to_heater + { + type zeroGradient; + value uniform 0.1; + } + topAir_to_rightSolid + { + type zeroGradient; + value uniform 0.1; + } + } + } + + p + { + internalField uniform 1E5; + + boundaryField + { + minX + { + type buoyantPressure; + value 1e5; + } + maxX + { + type waveTransmissive; + //field p; + phi phi; + rho rho; + psi psi; + gamma 1.4; // cp/cv + fieldInf 1e5; + lInf 0.40; // double length of domain + value uniform 1e5; + } + + maxY + { + type buoyantPressure; + value 1e5; + } + + minZ + { + type buoyantPressure; + value 1e5; + } + maxZ + { + type buoyantPressure; + value 1e5; + } + + topAir_to_leftSolid + { + type buoyantPressure; + value 1e5; + } + topAir_to_heater + { + type buoyantPressure; + value 1e5; + } + topAir_to_rightSolid + { + type buoyantPressure; + value 1e5; + } + } + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/decomposeParDict b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..aad15ee459b6e01cdf6fabba08eb2fa5b8c2a4dd --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/decomposeParDict @@ -0,0 +1,86 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 4; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +method scotch; +// method hierarchical; +// method simple; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/fvSchemes b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/fvSchemes new file mode 120000 index 0000000000000000000000000000000000000000..ff6aeb82d395e30f059d8a111d447f5dff18b137 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/fvSchemes @@ -0,0 +1 @@ +../bottomAir/fvSchemes \ No newline at end of file diff --git a/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/fvSolution b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/fvSolution new file mode 120000 index 0000000000000000000000000000000000000000..745b2bcfe42a207d4eb7af7dc80b87a460405289 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/multiRegionMesh/system/topAir/fvSolution @@ -0,0 +1 @@ +../bottomAir/fvSolution \ No newline at end of file diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.1 b/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.1 index a7c7e625e5403387aa3b92c464b9d8c5615c7ba4..bfa0d6ac4f2b2b07aa49ade99f366371db345123 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.1 +++ b/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.1 @@ -8,7 +8,7 @@ FoamFile { version 2.0; - format binary; + format ascii; class dictionary; location "system"; object cellSetDict.1; @@ -19,7 +19,13 @@ name c0; action new; -topoSetSources ( boxToCell { box ( 0.004 -0.001 -1 ) ( 0.012 0.001 1 ) ; } ); +topoSetSources +( + boxToCell + { + box (0.004 -0.001 -1) (0.012 0.001 1); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.2 b/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.2 index 470258895d1a503d39431f85dc16d207019b0cc0..d9684898c824a0cf4cd22ad94cdc21297fc9d39d 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.2 +++ b/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.2 @@ -8,7 +8,7 @@ FoamFile { version 2.0; - format binary; + format ascii; class dictionary; location "system"; object cellSetDict.2; @@ -19,7 +19,13 @@ name c0; action new; -topoSetSources ( boxToCell { box ( 0.0045 -0.00075 -1 ) ( 0.0095 0.00075 1 ) ; } ); +topoSetSources +( + boxToCell + { + box (0.0045 -0.00075 -1) (0.0095 0.00075 1); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.3 b/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.3 index 530c710e1f0e6bae3655c4127e4bca08ecd7a049..10f2c880a56a0fd7ce1d75798a91bb082c68f865 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.3 +++ b/tutorials/multiphase/cavitatingFoam/les/throttle/system/cellSetDict.3 @@ -8,7 +8,7 @@ FoamFile { version 2.0; - format binary; + format ascii; class dictionary; location "system"; object cellSetDict.3; @@ -19,7 +19,13 @@ name c0; action new; -topoSetSources ( boxToCell { box ( 0.00475 -0.000375 -1 ) ( 0.009 0.000375 1 ) ; } ); +topoSetSources +( + boxToCell + { + box (0.00475 -0.000375 -1) (0.009 0.000375 1); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.1 b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.1 index a7c7e625e5403387aa3b92c464b9d8c5615c7ba4..88755b22992e891570617b7aef7353ab23845086 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.1 +++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.1 @@ -8,7 +8,7 @@ FoamFile { version 2.0; - format binary; + format ascii; class dictionary; location "system"; object cellSetDict.1; @@ -19,7 +19,13 @@ name c0; action new; -topoSetSources ( boxToCell { box ( 0.004 -0.001 -1 ) ( 0.012 0.001 1 ) ; } ); +topoSetSources +( + boxToCell + { + box ( 0.004 -0.001 -1 ) ( 0.012 0.001 1 ); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.2 b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.2 index 470258895d1a503d39431f85dc16d207019b0cc0..a29931d08f4c220bf54882641c2ac334e4bc3dd4 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.2 +++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.2 @@ -8,7 +8,7 @@ FoamFile { version 2.0; - format binary; + format ascii; class dictionary; location "system"; object cellSetDict.2; @@ -19,7 +19,13 @@ name c0; action new; -topoSetSources ( boxToCell { box ( 0.0045 -0.00075 -1 ) ( 0.0095 0.00075 1 ) ; } ); +topoSetSources +( + boxToCell + { + box ( 0.0045 -0.00075 -1 ) ( 0.0095 0.00075 1 ); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.3 b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.3 index 530c710e1f0e6bae3655c4127e4bca08ecd7a049..8ff387dd87d81b0ef5435ec79df5d8fc34d21371 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.3 +++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/cellSetDict.3 @@ -8,7 +8,7 @@ FoamFile { version 2.0; - format binary; + format ascii; class dictionary; location "system"; object cellSetDict.3; @@ -19,7 +19,13 @@ name c0; action new; -topoSetSources ( boxToCell { box ( 0.00475 -0.000375 -1 ) ( 0.009 0.000375 1 ) ; } ); +topoSetSources +( + boxToCell + { + box ( 0.00475 -0.000375 -1 ) ( 0.009 0.000375 1 ); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/pd.org b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/p.org similarity index 98% rename from tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/pd.org rename to tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/p.org index 5f5f977f4311ab2cad0ebf9602845f7a3a48cf50..72b59f9e90996a5e37de42dfe70687f6855fbf13 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/pd.org +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/0/p.org @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun index f4e775f4baa016ca5056f6c9dea078382d060095..f2a0345d68b030bcac62302fb71d10da0a137384 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/Allrun @@ -7,6 +7,6 @@ application="compressibleInterFoam" runApplication blockMesh cp 0/alpha1.org 0/alpha1 -cp 0/pd.org 0/pd +cp 0/p.org 0/p runApplication setFields runApplication $application diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes index 373e1ca67d95f93b6f87c25f206a931c6c14ba76..0233a5951ab53946c3f3452772a78c5f93d0174c 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rho*phi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss interfaceCompression 1; - div(phi,pd) Gauss upwind; + div(phi,p) Gauss upwind; div(phi,k) Gauss vanLeer; div((nuEff*dev(grad(U).T()))) Gauss linear; } @@ -53,9 +53,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - gamma ; + p; + pcorr; + gamma; } diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution index 3416674d0782e6a26af8e5de6eb075c7b792a6cf..f93b56c204b46b986ec5bb2d32ce87645e071874 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/fvSolution @@ -45,7 +45,7 @@ solvers solver diagonal; } - pd + p { solver GAMG; tolerance 1e-07; @@ -60,7 +60,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict index d1992643325e54bb632fa934b57dc0c257580c08..00e706b1e518efe1caece07029b5924ce9c8d75b 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge2D/system/setFieldsDict @@ -15,9 +15,33 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -defaultFieldValues ( volScalarFieldValue alpha1 1 volScalarFieldValue pd 100000 ); +defaultFieldValues +( + volScalarFieldValue alpha1 1 + volScalarFieldValue p 100000 +); -regions ( sphereToCell { centre ( 0.5 0.5 0 ) ; radius 0.1 ; fieldValues ( volScalarFieldValue alpha1 0 volScalarFieldValue pd 1000000 ) ; } boxToCell { box ( -10 1 -1 ) ( 10 10 1 ) ; fieldValues ( volScalarFieldValue alpha1 0 ) ; } ); +regions +( + sphereToCell + { + centre ( 0.5 0.5 0 ); + radius 0.1; + fieldValues + ( + volScalarFieldValue alpha1 0 + volScalarFieldValue p 1000000 + ); + } + boxToCell + { + box ( -10 1 -1 ) ( 10 10 1 ); + fieldValues + ( + volScalarFieldValue alpha1 0 + ); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/pd.org b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/p.org similarity index 97% rename from tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/pd.org rename to tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/p.org index efe6f4ca9c57592011bedf77d0c8ff218a2eea5c..3377670aaf545dacf540dac89e8f447059c57d4a 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/pd.org +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/0/p.org @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd.org; + object p.org; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean index c422ce058e162967e4924ab9cd8404a7ca807133..99cd62d9236e42bc0e1303987403265889e6fb6b 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allclean @@ -2,4 +2,4 @@ foamCleanTutorials cases rm -rf processor* -rm -rf 0/pd.gz 0/alpha1.gz +rm -rf 0/p.gz 0/alpha1.gz diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun index 3302513ed6e1d1fc3595aad7260bc8e4299e6efb..7b9b11445e018536c908fa896212a19c7c92eef3 100755 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/Allrun @@ -7,7 +7,7 @@ application="compressibleInterFoam" runApplication blockMesh cp 0/alpha1.org 0/alpha1 -cp 0/pd.org 0/pd +cp 0/p.org 0/p runApplication setFields runApplication decomposePar hostname > system/machines diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes index 373e1ca67d95f93b6f87c25f206a931c6c14ba76..0233a5951ab53946c3f3452772a78c5f93d0174c 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rho*phi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss interfaceCompression 1; - div(phi,pd) Gauss upwind; + div(phi,p) Gauss upwind; div(phi,k) Gauss vanLeer; div((nuEff*dev(grad(U).T()))) Gauss linear; } @@ -53,9 +53,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - gamma ; + p; + pcorr; + gamma; } diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution index 3416674d0782e6a26af8e5de6eb075c7b792a6cf..f93b56c204b46b986ec5bb2d32ce87645e071874 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/fvSolution @@ -45,7 +45,7 @@ solvers solver diagonal; } - pd + p { solver GAMG; tolerance 1e-07; @@ -60,7 +60,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/machines b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/machines deleted file mode 100644 index 4b24efafd5ca1ad451a6018d16f638079b1a4f8b..0000000000000000000000000000000000000000 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/machines +++ /dev/null @@ -1 +0,0 @@ -noisy diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict index fb686e791c29a4621e44bf2cab9b086005d62bc0..3b3c397cb925ab34bb2ab7528cb67d3545196ee0 100644 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict +++ b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/setFieldsDict @@ -15,9 +15,33 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -defaultFieldValues ( volScalarFieldValue alpha1 1 volScalarFieldValue pd 100000 ); +defaultFieldValues +( + volScalarFieldValue alpha1 1 + volScalarFieldValue p 100000 +); -regions ( sphereToCell { centre ( 0.5 0.5 0.5 ) ; radius 0.1 ; fieldValues ( volScalarFieldValue alpha1 0 volScalarFieldValue pd 1000000 ) ; } boxToCell { box ( -10 1 -1 ) ( 10 10 1 ) ; fieldValues ( volScalarFieldValue alpha1 0 ) ; } ); +regions +( + sphereToCell + { + centre ( 0.5 0.5 0.5 ); + radius 0.1; + fieldValues + ( + volScalarFieldValue alpha1 0 + volScalarFieldValue p 1000000 + ); + } + boxToCell + { + box ( -10 1 -1 ) ( 10 10 1 ); + fieldValues + ( + volScalarFieldValue alpha1 0 + ); + } +); // ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0/pd b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0-orig/p similarity index 98% rename from tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0/pd rename to tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0-orig/p index 01361099097a2f6c771cf634ff96a3466c7b49b3..b3a944b216d11d7644902b0a094403caa9507154 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0/pd +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0-orig/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0-orig/pd b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0/p similarity index 98% rename from tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0-orig/pd rename to tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0/p index 01361099097a2f6c771cf634ff96a3466c7b49b3..b3a944b216d11d7644902b0a094403caa9507154 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0-orig/pd +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/polyMesh/sets/c0 b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/polyMesh/sets/c0 deleted file mode 100644 index 2f7f7412e51609a949d7c20ea4fbb7d3a183fae3..0000000000000000000000000000000000000000 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/polyMesh/sets/c0 +++ /dev/null @@ -1,32277 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class cellSet; - object c0; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -32256 -( -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 -813 -814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 -834 -835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 -847 -848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 -868 -869 -870 -871 -872 -873 -874 -875 -876 -877 -878 -879 -880 -881 -882 -883 -884 -885 -886 -887 -888 -889 -890 -891 -892 -893 -894 -895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 -917 -918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 -936 -937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 -954 -955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 -971 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -985 -986 -987 -988 -989 -990 -991 -992 -993 -994 -995 -996 -997 -998 -999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 -1016 -1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 -1025 -1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 -1041 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 -1068 -1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 -1077 -1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 -1086 -1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 -1108 -1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 -1139 -1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 -1158 -1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 -1172 -1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 -1181 -1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 -1223 -1224 -1225 -1226 -1227 -1228 -1229 -1230 -1231 -1232 -1233 -1234 -1235 -1236 -1237 -1238 -1239 -1240 -1241 -1242 -1243 -1244 -1245 -1246 -1247 -1248 -1249 -1250 -1251 -1252 -1253 -1254 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283 -1284 -1285 -1286 -1287 -1288 -1289 -1290 -1291 -1292 -1293 -1294 -1295 -1296 -1297 -1298 -1299 -1300 -1301 -1302 -1303 -1304 -1305 -1306 -1307 -1308 -1309 -1310 -1311 -1312 -1313 -1314 -1315 -1316 -1317 -1318 -1319 -1320 -1321 -1322 -1323 -1324 -1325 -1326 -1327 -1328 -1329 -1330 -1331 -1332 -1333 -1334 -1335 -1336 -1337 -1338 -1339 -1340 -1341 -1342 -1343 -1344 -1345 -1346 -1347 -1348 -1349 -1350 -1351 -1352 -1353 -1354 -1355 -1356 -1357 -1358 -1359 -1360 -1361 -1362 -1363 -1364 -1365 -1366 -1367 -1368 -1369 -1370 -1371 -1372 -1373 -1374 -1375 -1376 -1377 -1378 -1379 -1380 -1381 -1382 -1383 -1384 -1385 -1386 -1387 -1388 -1389 -1390 -1391 -1392 -1393 -1394 -1395 -1396 -1397 -1398 -1399 -1400 -1401 -1402 -1403 -1404 -1405 -1406 -1407 -1408 -1409 -1410 -1411 -1412 -1413 -1414 -1415 -1416 -1417 -1418 -1419 -1428 -1429 -1430 -1431 -1432 -1433 -1434 -1435 -1436 -1437 -1438 -1439 -1440 -1441 -1442 -1443 -1444 -1445 -1446 -1447 -1448 -1449 -1450 -1451 -1460 -1461 -1462 -1463 -1464 -1465 -1466 -1467 -1468 -1469 -1470 -1471 -1472 -1473 -1474 -1475 -1476 -1477 -1478 -1479 -1480 -1481 -1482 -1483 -1492 -1493 -1494 -1495 -1496 -1497 -1498 -1499 -1500 -1501 -1502 -1503 -1504 -1505 -1506 -1507 -1508 -1509 -1510 -1511 -1512 -1513 -1514 -1515 -1524 -1525 -1526 -1527 -1528 -1529 -1530 -1531 -1532 -1533 -1534 -1535 -1536 -1537 -1538 -1539 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1556 -1557 -1558 -1559 -1560 -1561 -1562 -1563 -1564 -1565 -1566 -1567 -1568 -1569 -1570 -1571 -1572 -1573 -1574 -1575 -1576 -1577 -1578 -1579 -1588 -1589 -1590 -1591 -1592 -1593 -1594 -1595 -1596 -1597 -1598 -1599 -1600 -1601 -1602 -1603 -1604 -1605 -1606 -1607 -1608 -1609 -1610 -1611 -1620 -1621 -1622 -1623 -1624 -1625 -1626 -1627 -1628 -1629 -1630 -1631 -1632 -1633 -1634 -1635 -1636 -1637 -1638 -1639 -1640 -1641 -1642 -1643 -1652 -1653 -1654 -1655 -1656 -1657 -1658 -1659 -1660 -1661 -1662 -1663 -1664 -1665 -1666 -1667 -1668 -1669 -1670 -1671 -1672 -1673 -1674 -1675 -1676 -1677 -1678 -1679 -1680 -1681 -1682 -1683 -1684 -1685 -1686 -1687 -1688 -1689 -1690 -1691 -1692 -1693 -1694 -1695 -1696 -1697 -1698 -1699 -1700 -1701 -1702 -1703 -1704 -1705 -1706 -1707 -1708 -1709 -1710 -1711 -1712 -1713 -1714 -1715 -1716 -1717 -1718 -1719 -1720 -1721 -1722 -1723 -1724 -1725 -1726 -1727 -1728 -1729 -1730 -1731 -1732 -1733 -1734 -1735 -1736 -1737 -1738 -1739 -1740 -1741 -1742 -1743 -1744 -1745 -1746 -1747 -1748 -1749 -1750 -1751 -1752 -1753 -1754 -1755 -1756 -1757 -1758 -1759 -1760 -1761 -1762 -1763 -1764 -1765 -1766 -1767 -1768 -1769 -1770 -1771 -1772 -1773 -1774 -1775 -1776 -1777 -1778 -1779 -1780 -1781 -1782 -1783 -1784 -1785 -1786 -1787 -1788 -1789 -1790 -1791 -1792 -1793 -1794 -1795 -1796 -1797 -1798 -1799 -1800 -1801 -1802 -1803 -1804 -1805 -1806 -1807 -1808 -1809 -1810 -1811 -1812 -1813 -1814 -1815 -1816 -1817 -1818 -1819 -1820 -1821 -1822 -1823 -1824 -1825 -1826 -1827 -1828 -1829 -1830 -1831 -1832 -1833 -1834 -1835 -1836 -1837 -1838 -1839 -1840 -1841 -1842 -1843 -1844 -1845 -1846 -1847 -1848 -1849 -1850 -1851 -1852 -1853 -1854 -1855 -1856 -1857 -1858 -1859 -1860 -1861 -1862 -1863 -1864 -1865 -1866 -1867 -1868 -1869 -1870 -1871 -1872 -1873 -1874 -1875 -1876 -1877 -1878 -1879 -1880 -1881 -1882 -1883 -1884 -1885 -1886 -1887 -1888 -1889 -1890 -1891 -1892 -1893 -1894 -1895 -1896 -1897 -1898 -1899 -1900 -1901 -1902 -1903 -1904 -1905 -1906 -1907 -1908 -1909 -1910 -1911 -1912 -1913 -1914 -1915 -1916 -1917 -1918 -1919 -1920 -1921 -1922 -1923 -1924 -1925 -1926 -1927 -1928 -1929 -1930 -1931 -1932 -1933 -1934 -1935 -1936 -1937 -1938 -1939 -1940 -1941 -1942 -1943 -1944 -1945 -1946 -1947 -1948 -1949 -1950 -1951 -1952 -1953 -1954 -1955 -1956 -1957 -1958 -1959 -1960 -1961 -1962 -1963 -1964 -1965 -1966 -1967 -1968 -1969 -1970 -1971 -1972 -1973 -1974 -1975 -1976 -1977 -1978 -1979 -1980 -1981 -1982 -1983 -1984 -1985 -1986 -1987 -1988 -1989 -1990 -1991 -1992 -1993 -1994 -1995 -1996 -1997 -1998 -1999 -2000 -2001 -2002 -2003 -2004 -2005 -2006 -2007 -2008 -2009 -2010 -2011 -2012 -2013 -2014 -2015 -2016 -2017 -2018 -2019 -2020 -2021 -2022 -2023 -2024 -2025 -2026 -2027 -2028 -2029 -2030 -2031 -2032 -2033 -2034 -2035 -2036 -2037 -2038 -2039 -2040 -2041 -2042 -2043 -2044 -2045 -2046 -2047 -2048 -2049 -2050 -2051 -2052 -2053 -2054 -2055 -2056 -2057 -2058 -2059 -2060 -2061 -2062 -2063 -2064 -2065 -2066 -2067 -2068 -2069 -2070 -2071 -2072 -2073 -2074 -2075 -2076 -2077 -2078 -2079 -2080 -2081 -2082 -2083 -2084 -2085 -2086 -2087 -2088 -2089 -2090 -2091 -2092 -2093 -2094 -2095 -2096 -2097 -2098 -2099 -2100 -2101 -2102 -2103 -2104 -2105 -2106 -2107 -2108 -2109 -2110 -2111 -2112 -2113 -2114 -2115 -2116 -2117 -2118 -2119 -2120 -2121 -2122 -2123 -2124 -2125 -2126 -2127 -2128 -2129 -2130 -2131 -2132 -2133 -2134 -2135 -2136 -2137 -2138 -2139 -2140 -2141 -2142 -2143 -2144 -2145 -2146 -2147 -2148 -2149 -2150 -2151 -2152 -2153 -2154 -2155 -2156 -2157 -2158 -2159 -2160 -2161 -2162 -2163 -2164 -2165 -2166 -2167 -2168 -2169 -2170 -2171 -2172 -2173 -2174 -2175 -2176 -2177 -2178 -2179 -2180 -2181 -2182 -2183 -2184 -2185 -2186 -2187 -2188 -2189 -2190 -2191 -2192 -2193 -2194 -2195 -2196 -2197 -2198 -2199 -2200 -2201 -2202 -2203 -2204 -2205 -2206 -2207 -2208 -2209 -2210 -2211 -2212 -2213 -2214 -2215 -2216 -2217 -2218 -2219 -2220 -2221 -2222 -2223 -2224 -2225 -2226 -2227 -2228 -2229 -2230 -2231 -2232 -2233 -2234 -2235 -2236 -2237 -2238 -2239 -2240 -2241 -2242 -2243 -2244 -2245 -2246 -2247 -2248 -2249 -2250 -2251 -2252 -2253 -2254 -2255 -2256 -2257 -2258 -2259 -2260 -2261 -2262 -2263 -2264 -2265 -2266 -2267 -2268 -2269 -2270 -2271 -2272 -2273 -2274 -2275 -2276 -2277 -2278 -2279 -2280 -2281 -2282 -2283 -2284 -2285 -2286 -2287 -2288 -2289 -2290 -2291 -2292 -2293 -2294 -2295 -2296 -2297 -2298 -2299 -2300 -2301 -2302 -2303 -2304 -2305 -2306 -2307 -2308 -2309 -2310 -2311 -2312 -2313 -2314 -2315 -2316 -2317 -2318 -2319 -2320 -2321 -2322 -2323 -2324 -2325 -2326 -2327 -2328 -2329 -2330 -2331 -2332 -2333 -2334 -2335 -2336 -2337 -2338 -2339 -2340 -2341 -2342 -2343 -2344 -2345 -2346 -2347 -2348 -2349 -2350 -2351 -2352 -2353 -2354 -2355 -2356 -2357 -2358 -2359 -2360 -2361 -2362 -2363 -2364 -2365 -2366 -2367 -2368 -2369 -2370 -2371 -2372 -2373 -2374 -2375 -2376 -2377 -2378 -2379 -2380 -2381 -2382 -2383 -2384 -2385 -2386 -2387 -2388 -2389 -2390 -2391 -2392 -2393 -2394 -2395 -2396 -2397 -2398 -2399 -2400 -2401 -2402 -2403 -2404 -2405 -2406 -2407 -2408 -2409 -2410 -2411 -2412 -2413 -2414 -2415 -2416 -2417 -2418 -2419 -2420 -2421 -2422 -2423 -2424 -2425 -2426 -2427 -2428 -2429 -2430 -2431 -2432 -2433 -2434 -2435 -2436 -2437 -2438 -2439 -2440 -2441 -2442 -2443 -2452 -2453 -2454 -2455 -2456 -2457 -2458 -2459 -2460 -2461 -2462 -2463 -2464 -2465 -2466 -2467 -2468 -2469 -2470 -2471 -2472 -2473 -2474 -2475 -2484 -2485 -2486 -2487 -2488 -2489 -2490 -2491 -2492 -2493 -2494 -2495 -2496 -2497 -2498 -2499 -2500 -2501 -2502 -2503 -2504 -2505 -2506 -2507 -2516 -2517 -2518 -2519 -2520 -2521 -2522 -2523 -2524 -2525 -2526 -2527 -2528 -2529 -2530 -2531 -2532 -2533 -2534 -2535 -2536 -2537 -2538 -2539 -2548 -2549 -2550 -2551 -2552 -2553 -2554 -2555 -2556 -2557 -2558 -2559 -2560 -2561 -2562 -2563 -2564 -2565 -2566 -2567 -2568 -2569 -2570 -2571 -2580 -2581 -2582 -2583 -2584 -2585 -2586 -2587 -2588 -2589 -2590 -2591 -2592 -2593 -2594 -2595 -2596 -2597 -2598 -2599 -2600 -2601 -2602 -2603 -2612 -2613 -2614 -2615 -2616 -2617 -2618 -2619 -2620 -2621 -2622 -2623 -2624 -2625 -2626 -2627 -2628 -2629 -2630 -2631 -2632 -2633 -2634 -2635 -2644 -2645 -2646 -2647 -2648 -2649 -2650 -2651 -2652 -2653 -2654 -2655 -2656 -2657 -2658 -2659 -2660 -2661 -2662 -2663 -2664 -2665 -2666 -2667 -2676 -2677 -2678 -2679 -2680 -2681 -2682 -2683 -2684 -2685 -2686 -2687 -2688 -2689 -2690 -2691 -2692 -2693 -2694 -2695 -2696 -2697 -2698 -2699 -2700 -2701 -2702 -2703 -2704 -2705 -2706 -2707 -2708 -2709 -2710 -2711 -2712 -2713 -2714 -2715 -2716 -2717 -2718 -2719 -2720 -2721 -2722 -2723 -2724 -2725 -2726 -2727 -2728 -2729 -2730 -2731 -2732 -2733 -2734 -2735 -2736 -2737 -2738 -2739 -2740 -2741 -2742 -2743 -2744 -2745 -2746 -2747 -2748 -2749 -2750 -2751 -2752 -2753 -2754 -2755 -2756 -2757 -2758 -2759 -2760 -2761 -2762 -2763 -2764 -2765 -2766 -2767 -2768 -2769 -2770 -2771 -2772 -2773 -2774 -2775 -2776 -2777 -2778 -2779 -2780 -2781 -2782 -2783 -2784 -2785 -2786 -2787 -2788 -2789 -2790 -2791 -2792 -2793 -2794 -2795 -2796 -2797 -2798 -2799 -2800 -2801 -2802 -2803 -2804 -2805 -2806 -2807 -2808 -2809 -2810 -2811 -2812 -2813 -2814 -2815 -2816 -2817 -2818 -2819 -2820 -2821 -2822 -2823 -2824 -2825 -2826 -2827 -2828 -2829 -2830 -2831 -2832 -2833 -2834 -2835 -2836 -2837 -2838 -2839 -2840 -2841 -2842 -2843 -2844 -2845 -2846 -2847 -2848 -2849 -2850 -2851 -2852 -2853 -2854 -2855 -2856 -2857 -2858 -2859 -2860 -2861 -2862 -2863 -2864 -2865 -2866 -2867 -2868 -2869 -2870 -2871 -2872 -2873 -2874 -2875 -2876 -2877 -2878 -2879 -2880 -2881 -2882 -2883 -2884 -2885 -2886 -2887 -2888 -2889 -2890 -2891 -2892 -2893 -2894 -2895 -2896 -2897 -2898 -2899 -2900 -2901 -2902 -2903 -2904 -2905 -2906 -2907 -2908 -2909 -2910 -2911 -2912 -2913 -2914 -2915 -2916 -2917 -2918 -2919 -2920 -2921 -2922 -2923 -2924 -2925 -2926 -2927 -2928 -2929 -2930 -2931 -2932 -2933 -2934 -2935 -2936 -2937 -2938 -2939 -2940 -2941 -2942 -2943 -2944 -2945 -2946 -2947 -2948 -2949 -2950 -2951 -2952 -2953 -2954 -2955 -2956 -2957 -2958 -2959 -2960 -2961 -2962 -2963 -2964 -2965 -2966 -2967 -2968 -2969 -2970 -2971 -2972 -2973 -2974 -2975 -2976 -2977 -2978 -2979 -2980 -2981 -2982 -2983 -2984 -2985 -2986 -2987 -2988 -2989 -2990 -2991 -2992 -2993 -2994 -2995 -2996 -2997 -2998 -2999 -3000 -3001 -3002 -3003 -3004 -3005 -3006 -3007 -3008 -3009 -3010 -3011 -3012 -3013 -3014 -3015 -3016 -3017 -3018 -3019 -3020 -3021 -3022 -3023 -3024 -3025 -3026 -3027 -3028 -3029 -3030 -3031 -3032 -3033 -3034 -3035 -3036 -3037 -3038 -3039 -3040 -3041 -3042 -3043 -3044 -3045 -3046 -3047 -3048 -3049 -3050 -3051 -3052 -3053 -3054 -3055 -3056 -3057 -3058 -3059 -3060 -3061 -3062 -3063 -3064 -3065 -3066 -3067 -3068 -3069 -3070 -3071 -3072 -3073 -3074 -3075 -3076 -3077 -3078 -3079 -3080 -3081 -3082 -3083 -3084 -3085 -3086 -3087 -3088 -3089 -3090 -3091 -3092 -3093 -3094 -3095 -3096 -3097 -3098 -3099 -3100 -3101 -3102 -3103 -3104 -3105 -3106 -3107 -3108 -3109 -3110 -3111 -3112 -3113 -3114 -3115 -3116 -3117 -3118 -3119 -3120 -3121 -3122 -3123 -3124 -3125 -3126 -3127 -3128 -3129 -3130 -3131 -3132 -3133 -3134 -3135 -3136 -3137 -3138 -3139 -3140 -3141 -3142 -3143 -3144 -3145 -3146 -3147 -3148 -3149 -3150 -3151 -3152 -3153 -3154 -3155 -3156 -3157 -3158 -3159 -3160 -3161 -3162 -3163 -3164 -3165 -3166 -3167 -3168 -3169 -3170 -3171 -3172 -3173 -3174 -3175 -3176 -3177 -3178 -3179 -3180 -3181 -3182 -3183 -3184 -3185 -3186 -3187 -3188 -3189 -3190 -3191 -3192 -3193 -3194 -3195 -3196 -3197 -3198 -3199 -3200 -3201 -3202 -3203 -3204 -3205 -3206 -3207 -3208 -3209 -3210 -3211 -3212 -3213 -3214 -3215 -3216 -3217 -3218 -3219 -3220 -3221 -3222 -3223 -3224 -3225 -3226 -3227 -3228 -3229 -3230 -3231 -3232 -3233 -3234 -3235 -3236 -3237 -3238 -3239 -3240 -3241 -3242 -3243 -3244 -3245 -3246 -3247 -3248 -3249 -3250 -3251 -3252 -3253 -3254 -3255 -3256 -3257 -3258 -3259 -3260 -3261 -3262 -3263 -3264 -3265 -3266 -3267 -3268 -3269 -3270 -3271 -3272 -3273 -3274 -3275 -3276 -3277 -3278 -3279 -3280 -3281 -3282 -3283 -3284 -3285 -3286 -3287 -3288 -3289 -3290 -3291 -3292 -3293 -3294 -3295 -3296 -3297 -3298 -3299 -3300 -3301 -3302 -3303 -3304 -3305 -3306 -3307 -3308 -3309 -3310 -3311 -3312 -3313 -3314 -3315 -3316 -3317 -3318 -3319 -3320 -3321 -3322 -3323 -3324 -3325 -3326 -3327 -3328 -3329 -3330 -3331 -3332 -3333 -3334 -3335 -3336 -3337 -3338 -3339 -3340 -3341 -3342 -3343 -3344 -3345 -3346 -3347 -3348 -3349 -3350 -3351 -3352 -3353 -3354 -3355 -3356 -3357 -3358 -3359 -3360 -3361 -3362 -3363 -3364 -3365 -3366 -3367 -3368 -3369 -3370 -3371 -3372 -3373 -3374 -3375 -3376 -3377 -3378 -3379 -3380 -3381 -3382 -3383 -3384 -3385 -3386 -3387 -3388 -3389 -3390 -3391 -3392 -3393 -3394 -3395 -3396 -3397 -3398 -3399 -3400 -3401 -3402 -3403 -3404 -3405 -3406 -3407 -3408 -3409 -3410 -3411 -3412 -3413 -3414 -3415 -3416 -3417 -3418 -3419 -3420 -3421 -3422 -3423 -3424 -3425 -3426 -3427 -3428 -3429 -3430 -3431 -3432 -3433 -3434 -3435 -3436 -3437 -3438 -3439 -3440 -3441 -3442 -3443 -3444 -3445 -3446 -3447 -3448 -3449 -3450 -3451 -3452 -3453 -3454 -3455 -3456 -3457 -3458 -3459 -3460 -3461 -3462 -3463 -3464 -3465 -3466 -3467 -3476 -3477 -3478 -3479 -3480 -3481 -3482 -3483 -3484 -3485 -3486 -3487 -3488 -3489 -3490 -3491 -3492 -3493 -3494 -3495 -3496 -3497 -3498 -3499 -3508 -3509 -3510 -3511 -3512 -3513 -3514 -3515 -3516 -3517 -3518 -3519 -3520 -3521 -3522 -3523 -3524 -3525 -3526 -3527 -3528 -3529 -3530 -3531 -3540 -3541 -3542 -3543 -3544 -3545 -3546 -3547 -3548 -3549 -3550 -3551 -3552 -3553 -3554 -3555 -3556 -3557 -3558 -3559 -3560 -3561 -3562 -3563 -3572 -3573 -3574 -3575 -3576 -3577 -3578 -3579 -3580 -3581 -3582 -3583 -3584 -3585 -3586 -3587 -3588 -3589 -3590 -3591 -3592 -3593 -3594 -3595 -3604 -3605 -3606 -3607 -3608 -3609 -3610 -3611 -3612 -3613 -3614 -3615 -3616 -3617 -3618 -3619 -3620 -3621 -3622 -3623 -3624 -3625 -3626 -3627 -3636 -3637 -3638 -3639 -3640 -3641 -3642 -3643 -3644 -3645 -3646 -3647 -3648 -3649 -3650 -3651 -3652 -3653 -3654 -3655 -3656 -3657 -3658 -3659 -3668 -3669 -3670 -3671 -3672 -3673 -3674 -3675 -3676 -3677 -3678 -3679 -3680 -3681 -3682 -3683 -3684 -3685 -3686 -3687 -3688 -3689 -3690 -3691 -3700 -3701 -3702 -3703 -3704 -3705 -3706 -3707 -3708 -3709 -3710 -3711 -3712 -3713 -3714 -3715 -3716 -3717 -3718 -3719 -3720 -3721 -3722 -3723 -3724 -3725 -3726 -3727 -3728 -3729 -3730 -3731 -3732 -3733 -3734 -3735 -3736 -3737 -3738 -3739 -3740 -3741 -3742 -3743 -3744 -3745 -3746 -3747 -3748 -3749 -3750 -3751 -3752 -3753 -3754 -3755 -3756 -3757 -3758 -3759 -3760 -3761 -3762 -3763 -3764 -3765 -3766 -3767 -3768 -3769 -3770 -3771 -3772 -3773 -3774 -3775 -3776 -3777 -3778 -3779 -3780 -3781 -3782 -3783 -3784 -3785 -3786 -3787 -3788 -3789 -3790 -3791 -3792 -3793 -3794 -3795 -3796 -3797 -3798 -3799 -3800 -3801 -3802 -3803 -3804 -3805 -3806 -3807 -3808 -3809 -3810 -3811 -3812 -3813 -3814 -3815 -3816 -3817 -3818 -3819 -3820 -3821 -3822 -3823 -3824 -3825 -3826 -3827 -3828 -3829 -3830 -3831 -3832 -3833 -3834 -3835 -3836 -3837 -3838 -3839 -3840 -3841 -3842 -3843 -3844 -3845 -3846 -3847 -3848 -3849 -3850 -3851 -3852 -3853 -3854 -3855 -3856 -3857 -3858 -3859 -3860 -3861 -3862 -3863 -3864 -3865 -3866 -3867 -3868 -3869 -3870 -3871 -3872 -3873 -3874 -3875 -3876 -3877 -3878 -3879 -3880 -3881 -3882 -3883 -3884 -3885 -3886 -3887 -3888 -3889 -3890 -3891 -3892 -3893 -3894 -3895 -3896 -3897 -3898 -3899 -3900 -3901 -3902 -3903 -3904 -3905 -3906 -3907 -3908 -3909 -3910 -3911 -3912 -3913 -3914 -3915 -3916 -3917 -3918 -3919 -3920 -3921 -3922 -3923 -3924 -3925 -3926 -3927 -3928 -3929 -3930 -3931 -3932 -3933 -3934 -3935 -3936 -3937 -3938 -3939 -3940 -3941 -3942 -3943 -3944 -3945 -3946 -3947 -3948 -3949 -3950 -3951 -3952 -3953 -3954 -3955 -3956 -3957 -3958 -3959 -3960 -3961 -3962 -3963 -3964 -3965 -3966 -3967 -3968 -3969 -3970 -3971 -3972 -3973 -3974 -3975 -3976 -3977 -3978 -3979 -3980 -3981 -3982 -3983 -3984 -3985 -3986 -3987 -3988 -3989 -3990 -3991 -3992 -3993 -3994 -3995 -3996 -3997 -3998 -3999 -4000 -4001 -4002 -4003 -4004 -4005 -4006 -4007 -4008 -4009 -4010 -4011 -4012 -4013 -4014 -4015 -4016 -4017 -4018 -4019 -4020 -4021 -4022 -4023 -4024 -4025 -4026 -4027 -4028 -4029 -4030 -4031 -4032 -4033 -4034 -4035 -4036 -4037 -4038 -4039 -4040 -4041 -4042 -4043 -4044 -4045 -4046 -4047 -4048 -4049 -4050 -4051 -4052 -4053 -4054 -4055 -4056 -4057 -4058 -4059 -4060 -4061 -4062 -4063 -4064 -4065 -4066 -4067 -4068 -4069 -4070 -4071 -4072 -4073 -4074 -4075 -4076 -4077 -4078 -4079 -4080 -4081 -4082 -4083 -4084 -4085 -4086 -4087 -4088 -4089 -4090 -4091 -4092 -4093 -4094 -4095 -4096 -4097 -4098 -4099 -4100 -4101 -4102 -4103 -4104 -4105 -4106 -4107 -4108 -4109 -4110 -4111 -4112 -4113 -4114 -4115 -4116 -4117 -4118 -4119 -4120 -4121 -4122 -4123 -4124 -4125 -4126 -4127 -4128 -4129 -4130 -4131 -4132 -4133 -4134 -4135 -4136 -4137 -4138 -4139 -4140 -4141 -4142 -4143 -4144 -4145 -4146 -4147 -4148 -4149 -4150 -4151 -4152 -4153 -4154 -4155 -4156 -4157 -4158 -4159 -4160 -4161 -4162 -4163 -4164 -4165 -4166 -4167 -4168 -4169 -4170 -4171 -4172 -4173 -4174 -4175 -4176 -4177 -4178 -4179 -4180 -4181 -4182 -4183 -4184 -4185 -4186 -4187 -4188 -4189 -4190 -4191 -4192 -4193 -4194 -4195 -4196 -4197 -4198 -4199 -4200 -4201 -4202 -4203 -4204 -4205 -4206 -4207 -4208 -4209 -4210 -4211 -4212 -4213 -4214 -4215 -4216 -4217 -4218 -4219 -4220 -4221 -4222 -4223 -4224 -4225 -4226 -4227 -4228 -4229 -4230 -4231 -4232 -4233 -4234 -4235 -4236 -4237 -4238 -4239 -4240 -4241 -4242 -4243 -4244 -4245 -4246 -4247 -4248 -4249 -4250 -4251 -4252 -4253 -4254 -4255 -4256 -4257 -4258 -4259 -4260 -4261 -4262 -4263 -4264 -4265 -4266 -4267 -4268 -4269 -4270 -4271 -4272 -4273 -4274 -4275 -4276 -4277 -4278 -4279 -4280 -4281 -4282 -4283 -4284 -4285 -4286 -4287 -4288 -4289 -4290 -4291 -4292 -4293 -4294 -4295 -4296 -4297 -4298 -4299 -4300 -4301 -4302 -4303 -4304 -4305 -4306 -4307 -4308 -4309 -4310 -4311 -4312 -4313 -4314 -4315 -4316 -4317 -4318 -4319 -4320 -4321 -4322 -4323 -4324 -4325 -4326 -4327 -4328 -4329 -4330 -4331 -4332 -4333 -4334 -4335 -4336 -4337 -4338 -4339 -4340 -4341 -4342 -4343 -4344 -4345 -4346 -4347 -4348 -4349 -4350 -4351 -4352 -4353 -4354 -4355 -4356 -4357 -4358 -4359 -4360 -4361 -4362 -4363 -4364 -4365 -4366 -4367 -4368 -4369 -4370 -4371 -4372 -4373 -4374 -4375 -4376 -4377 -4378 -4379 -4380 -4381 -4382 -4383 -4384 -4385 -4386 -4387 -4388 -4389 -4390 -4391 -4392 -4393 -4394 -4395 -4396 -4397 -4398 -4399 -4400 -4401 -4402 -4403 -4404 -4405 -4406 -4407 -4408 -4409 -4410 -4411 -4412 -4413 -4414 -4415 -4416 -4417 -4418 -4419 -4420 -4421 -4422 -4423 -4424 -4425 -4426 -4427 -4428 -4429 -4430 -4431 -4432 -4433 -4434 -4435 -4436 -4437 -4438 -4439 -4440 -4441 -4442 -4443 -4444 -4445 -4446 -4447 -4448 -4449 -4450 -4451 -4452 -4453 -4454 -4455 -4456 -4457 -4458 -4459 -4460 -4461 -4462 -4463 -4464 -4465 -4466 -4467 -4468 -4469 -4470 -4471 -4472 -4473 -4474 -4475 -4476 -4477 -4478 -4479 -4480 -4481 -4482 -4483 -4484 -4485 -4486 -4487 -4488 -4489 -4490 -4491 -4500 -4501 -4502 -4503 -4504 -4505 -4506 -4507 -4508 -4509 -4510 -4511 -4512 -4513 -4514 -4515 -4516 -4517 -4518 -4519 -4520 -4521 -4522 -4523 -4532 -4533 -4534 -4535 -4536 -4537 -4538 -4539 -4540 -4541 -4542 -4543 -4544 -4545 -4546 -4547 -4548 -4549 -4550 -4551 -4552 -4553 -4554 -4555 -4564 -4565 -4566 -4567 -4568 -4569 -4570 -4571 -4572 -4573 -4574 -4575 -4576 -4577 -4578 -4579 -4580 -4581 -4582 -4583 -4584 -4585 -4586 -4587 -4596 -4597 -4598 -4599 -4600 -4601 -4602 -4603 -4604 -4605 -4606 -4607 -4608 -4609 -4610 -4611 -4612 -4613 -4614 -4615 -4616 -4617 -4618 -4619 -4628 -4629 -4630 -4631 -4632 -4633 -4634 -4635 -4636 -4637 -4638 -4639 -4640 -4641 -4642 -4643 -4644 -4645 -4646 -4647 -4648 -4649 -4650 -4651 -4660 -4661 -4662 -4663 -4664 -4665 -4666 -4667 -4668 -4669 -4670 -4671 -4672 -4673 -4674 -4675 -4676 -4677 -4678 -4679 -4680 -4681 -4682 -4683 -4692 -4693 -4694 -4695 -4696 -4697 -4698 -4699 -4700 -4701 -4702 -4703 -4704 -4705 -4706 -4707 -4708 -4709 -4710 -4711 -4712 -4713 -4714 -4715 -4724 -4725 -4726 -4727 -4728 -4729 -4730 -4731 -4732 -4733 -4734 -4735 -4736 -4737 -4738 -4739 -4740 -4741 -4742 -4743 -4744 -4745 -4746 -4747 -4748 -4749 -4750 -4751 -4752 -4753 -4754 -4755 -4756 -4757 -4758 -4759 -4760 -4761 -4762 -4763 -4764 -4765 -4766 -4767 -4768 -4769 -4770 -4771 -4772 -4773 -4774 -4775 -4776 -4777 -4778 -4779 -4780 -4781 -4782 -4783 -4784 -4785 -4786 -4787 -4788 -4789 -4790 -4791 -4792 -4793 -4794 -4795 -4796 -4797 -4798 -4799 -4800 -4801 -4802 -4803 -4804 -4805 -4806 -4807 -4808 -4809 -4810 -4811 -4812 -4813 -4814 -4815 -4816 -4817 -4818 -4819 -4820 -4821 -4822 -4823 -4824 -4825 -4826 -4827 -4828 -4829 -4830 -4831 -4832 -4833 -4834 -4835 -4836 -4837 -4838 -4839 -4840 -4841 -4842 -4843 -4844 -4845 -4846 -4847 -4848 -4849 -4850 -4851 -4852 -4853 -4854 -4855 -4856 -4857 -4858 -4859 -4860 -4861 -4862 -4863 -4864 -4865 -4866 -4867 -4868 -4869 -4870 -4871 -4872 -4873 -4874 -4875 -4876 -4877 -4878 -4879 -4880 -4881 -4882 -4883 -4884 -4885 -4886 -4887 -4888 -4889 -4890 -4891 -4892 -4893 -4894 -4895 -4896 -4897 -4898 -4899 -4900 -4901 -4902 -4903 -4904 -4905 -4906 -4907 -4908 -4909 -4910 -4911 -4912 -4913 -4914 -4915 -4916 -4917 -4918 -4919 -4920 -4921 -4922 -4923 -4924 -4925 -4926 -4927 -4928 -4929 -4930 -4931 -4932 -4933 -4934 -4935 -4936 -4937 -4938 -4939 -4940 -4941 -4942 -4943 -4944 -4945 -4946 -4947 -4948 -4949 -4950 -4951 -4952 -4953 -4954 -4955 -4956 -4957 -4958 -4959 -4960 -4961 -4962 -4963 -4964 -4965 -4966 -4967 -4968 -4969 -4970 -4971 -4972 -4973 -4974 -4975 -4976 -4977 -4978 -4979 -4980 -4981 -4982 -4983 -4984 -4985 -4986 -4987 -4988 -4989 -4990 -4991 -4992 -4993 -4994 -4995 -4996 -4997 -4998 -4999 -5000 -5001 -5002 -5003 -5004 -5005 -5006 -5007 -5008 -5009 -5010 -5011 -5012 -5013 -5014 -5015 -5016 -5017 -5018 -5019 -5020 -5021 -5022 -5023 -5024 -5025 -5026 -5027 -5028 -5029 -5030 -5031 -5032 -5033 -5034 -5035 -5036 -5037 -5038 -5039 -5040 -5041 -5042 -5043 -5044 -5045 -5046 -5047 -5048 -5049 -5050 -5051 -5052 -5053 -5054 -5055 -5056 -5057 -5058 -5059 -5060 -5061 -5062 -5063 -5064 -5065 -5066 -5067 -5068 -5069 -5070 -5071 -5072 -5073 -5074 -5075 -5076 -5077 -5078 -5079 -5080 -5081 -5082 -5083 -5084 -5085 -5086 -5087 -5088 -5089 -5090 -5091 -5092 -5093 -5094 -5095 -5096 -5097 -5098 -5099 -5100 -5101 -5102 -5103 -5104 -5105 -5106 -5107 -5108 -5109 -5110 -5111 -5112 -5113 -5114 -5115 -5116 -5117 -5118 -5119 -5120 -5121 -5122 -5123 -5124 -5125 -5126 -5127 -5128 -5129 -5130 -5131 -5132 -5133 -5134 -5135 -5136 -5137 -5138 -5139 -5140 -5141 -5142 -5143 -5144 -5145 -5146 -5147 -5148 -5149 -5150 -5151 -5152 -5153 -5154 -5155 -5156 -5157 -5158 -5159 -5160 -5161 -5162 -5163 -5164 -5165 -5166 -5167 -5168 -5169 -5170 -5171 -5172 -5173 -5174 -5175 -5176 -5177 -5178 -5179 -5180 -5181 -5182 -5183 -5184 -5185 -5186 -5187 -5188 -5189 -5190 -5191 -5192 -5193 -5194 -5195 -5196 -5197 -5198 -5199 -5200 -5201 -5202 -5203 -5204 -5205 -5206 -5207 -5208 -5209 -5210 -5211 -5212 -5213 -5214 -5215 -5216 -5217 -5218 -5219 -5220 -5221 -5222 -5223 -5224 -5225 -5226 -5227 -5228 -5229 -5230 -5231 -5232 -5233 -5234 -5235 -5236 -5237 -5238 -5239 -5240 -5241 -5242 -5243 -5244 -5245 -5246 -5247 -5248 -5249 -5250 -5251 -5252 -5253 -5254 -5255 -5256 -5257 -5258 -5259 -5260 -5261 -5262 -5263 -5264 -5265 -5266 -5267 -5268 -5269 -5270 -5271 -5272 -5273 -5274 -5275 -5276 -5277 -5278 -5279 -5280 -5281 -5282 -5283 -5284 -5285 -5286 -5287 -5288 -5289 -5290 -5291 -5292 -5293 -5294 -5295 -5296 -5297 -5298 -5299 -5300 -5301 -5302 -5303 -5304 -5305 -5306 -5307 -5308 -5309 -5310 -5311 -5312 -5313 -5314 -5315 -5316 -5317 -5318 -5319 -5320 -5321 -5322 -5323 -5324 -5325 -5326 -5327 -5328 -5329 -5330 -5331 -5332 -5333 -5334 -5335 -5336 -5337 -5338 -5339 -5340 -5341 -5342 -5343 -5344 -5345 -5346 -5347 -5348 -5349 -5350 -5351 -5352 -5353 -5354 -5355 -5356 -5357 -5358 -5359 -5360 -5361 -5362 -5363 -5364 -5365 -5366 -5367 -5368 -5369 -5370 -5371 -5372 -5373 -5374 -5375 -5376 -5377 -5378 -5379 -5380 -5381 -5382 -5383 -5384 -5385 -5386 -5387 -5388 -5389 -5390 -5391 -5392 -5393 -5394 -5395 -5396 -5397 -5398 -5399 -5400 -5401 -5402 -5403 -5404 -5405 -5406 -5407 -5408 -5409 -5410 -5411 -5412 -5413 -5414 -5415 -5416 -5417 -5418 -5419 -5420 -5421 -5422 -5423 -5424 -5425 -5426 -5427 -5428 -5429 -5430 -5431 -5432 -5433 -5434 -5435 -5436 -5437 -5438 -5439 -5440 -5441 -5442 -5443 -5444 -5445 -5446 -5447 -5448 -5449 -5450 -5451 -5452 -5453 -5454 -5455 -5456 -5457 -5458 -5459 -5460 -5461 -5462 -5463 -5464 -5465 -5466 -5467 -5468 -5469 -5470 -5471 -5472 -5473 -5474 -5475 -5476 -5477 -5478 -5479 -5480 -5481 -5482 -5483 -5484 -5485 -5486 -5487 -5488 -5489 -5490 -5491 -5492 -5493 -5494 -5495 -5496 -5497 -5498 -5499 -5500 -5501 -5502 -5503 -5504 -5505 -5506 -5507 -5508 -5509 -5510 -5511 -5512 -5513 -5514 -5515 -5524 -5525 -5526 -5527 -5528 -5529 -5530 -5531 -5532 -5533 -5534 -5535 -5536 -5537 -5538 -5539 -5540 -5541 -5542 -5543 -5544 -5545 -5546 -5547 -5556 -5557 -5558 -5559 -5560 -5561 -5562 -5563 -5564 -5565 -5566 -5567 -5568 -5569 -5570 -5571 -5572 -5573 -5574 -5575 -5576 -5577 -5578 -5579 -5588 -5589 -5590 -5591 -5592 -5593 -5594 -5595 -5596 -5597 -5598 -5599 -5600 -5601 -5602 -5603 -5604 -5605 -5606 -5607 -5608 -5609 -5610 -5611 -5620 -5621 -5622 -5623 -5624 -5625 -5626 -5627 -5628 -5629 -5630 -5631 -5632 -5633 -5634 -5635 -5636 -5637 -5638 -5639 -5640 -5641 -5642 -5643 -5652 -5653 -5654 -5655 -5656 -5657 -5658 -5659 -5660 -5661 -5662 -5663 -5664 -5665 -5666 -5667 -5668 -5669 -5670 -5671 -5672 -5673 -5674 -5675 -5684 -5685 -5686 -5687 -5688 -5689 -5690 -5691 -5692 -5693 -5694 -5695 -5696 -5697 -5698 -5699 -5700 -5701 -5702 -5703 -5704 -5705 -5706 -5707 -5716 -5717 -5718 -5719 -5720 -5721 -5722 -5723 -5724 -5725 -5726 -5727 -5728 -5729 -5730 -5731 -5732 -5733 -5734 -5735 -5736 -5737 -5738 -5739 -5748 -5749 -5750 -5751 -5752 -5753 -5754 -5755 -5756 -5757 -5758 -5759 -5760 -5761 -5762 -5763 -5764 -5765 -5766 -5767 -5768 -5769 -5770 -5771 -5772 -5773 -5774 -5775 -5776 -5777 -5778 -5779 -5780 -5781 -5782 -5783 -5784 -5785 -5786 -5787 -5788 -5789 -5790 -5791 -5792 -5793 -5794 -5795 -5796 -5797 -5798 -5799 -5800 -5801 -5802 -5803 -5804 -5805 -5806 -5807 -5808 -5809 -5810 -5811 -5812 -5813 -5814 -5815 -5816 -5817 -5818 -5819 -5820 -5821 -5822 -5823 -5824 -5825 -5826 -5827 -5828 -5829 -5830 -5831 -5832 -5833 -5834 -5835 -5836 -5837 -5838 -5839 -5840 -5841 -5842 -5843 -5844 -5845 -5846 -5847 -5848 -5849 -5850 -5851 -5852 -5853 -5854 -5855 -5856 -5857 -5858 -5859 -5860 -5861 -5862 -5863 -5864 -5865 -5866 -5867 -5868 -5869 -5870 -5871 -5872 -5873 -5874 -5875 -5876 -5877 -5878 -5879 -5880 -5881 -5882 -5883 -5884 -5885 -5886 -5887 -5888 -5889 -5890 -5891 -5892 -5893 -5894 -5895 -5896 -5897 -5898 -5899 -5900 -5901 -5902 -5903 -5904 -5905 -5906 -5907 -5908 -5909 -5910 -5911 -5912 -5913 -5914 -5915 -5916 -5917 -5918 -5919 -5920 -5921 -5922 -5923 -5924 -5925 -5926 -5927 -5928 -5929 -5930 -5931 -5932 -5933 -5934 -5935 -5936 -5937 -5938 -5939 -5940 -5941 -5942 -5943 -5944 -5945 -5946 -5947 -5948 -5949 -5950 -5951 -5952 -5953 -5954 -5955 -5956 -5957 -5958 -5959 -5960 -5961 -5962 -5963 -5964 -5965 -5966 -5967 -5968 -5969 -5970 -5971 -5972 -5973 -5974 -5975 -5976 -5977 -5978 -5979 -5980 -5981 -5982 -5983 -5984 -5985 -5986 -5987 -5988 -5989 -5990 -5991 -5992 -5993 -5994 -5995 -5996 -5997 -5998 -5999 -6000 -6001 -6002 -6003 -6004 -6005 -6006 -6007 -6008 -6009 -6010 -6011 -6012 -6013 -6014 -6015 -6016 -6017 -6018 -6019 -6020 -6021 -6022 -6023 -6024 -6025 -6026 -6027 -6028 -6029 -6030 -6031 -6032 -6033 -6034 -6035 -6036 -6037 -6038 -6039 -6040 -6041 -6042 -6043 -6044 -6045 -6046 -6047 -6048 -6049 -6050 -6051 -6052 -6053 -6054 -6055 -6056 -6057 -6058 -6059 -6060 -6061 -6062 -6063 -6064 -6065 -6066 -6067 -6068 -6069 -6070 -6071 -6072 -6073 -6074 -6075 -6076 -6077 -6078 -6079 -6080 -6081 -6082 -6083 -6084 -6085 -6086 -6087 -6088 -6089 -6090 -6091 -6092 -6093 -6094 -6095 -6096 -6097 -6098 -6099 -6100 -6101 -6102 -6103 -6104 -6105 -6106 -6107 -6108 -6109 -6110 -6111 -6112 -6113 -6114 -6115 -6116 -6117 -6118 -6119 -6120 -6121 -6122 -6123 -6124 -6125 -6126 -6127 -6128 -6129 -6130 -6131 -6132 -6133 -6134 -6135 -6136 -6137 -6138 -6139 -6140 -6141 -6142 -6143 -6144 -6145 -6146 -6147 -6148 -6149 -6150 -6151 -6152 -6153 -6154 -6155 -6156 -6157 -6158 -6159 -6160 -6161 -6162 -6163 -6164 -6165 -6166 -6167 -6168 -6169 -6170 -6171 -6172 -6173 -6174 -6175 -6176 -6177 -6178 -6179 -6180 -6181 -6182 -6183 -6184 -6185 -6186 -6187 -6188 -6189 -6190 -6191 -6192 -6193 -6194 -6195 -6196 -6197 -6198 -6199 -6200 -6201 -6202 -6203 -6204 -6205 -6206 -6207 -6208 -6209 -6210 -6211 -6212 -6213 -6214 -6215 -6216 -6217 -6218 -6219 -6220 -6221 -6222 -6223 -6224 -6225 -6226 -6227 -6228 -6229 -6230 -6231 -6232 -6233 -6234 -6235 -6236 -6237 -6238 -6239 -6240 -6241 -6242 -6243 -6244 -6245 -6246 -6247 -6248 -6249 -6250 -6251 -6252 -6253 -6254 -6255 -6256 -6257 -6258 -6259 -6260 -6261 -6262 -6263 -6264 -6265 -6266 -6267 -6268 -6269 -6270 -6271 -6272 -6273 -6274 -6275 -6276 -6277 -6278 -6279 -6280 -6281 -6282 -6283 -6284 -6285 -6286 -6287 -6288 -6289 -6290 -6291 -6292 -6293 -6294 -6295 -6296 -6297 -6298 -6299 -6300 -6301 -6302 -6303 -6304 -6305 -6306 -6307 -6308 -6309 -6310 -6311 -6312 -6313 -6314 -6315 -6316 -6317 -6318 -6319 -6320 -6321 -6322 -6323 -6324 -6325 -6326 -6327 -6328 -6329 -6330 -6331 -6332 -6333 -6334 -6335 -6336 -6337 -6338 -6339 -6340 -6341 -6342 -6343 -6344 -6345 -6346 -6347 -6348 -6349 -6350 -6351 -6352 -6353 -6354 -6355 -6356 -6357 -6358 -6359 -6360 -6361 -6362 -6363 -6364 -6365 -6366 -6367 -6368 -6369 -6370 -6371 -6372 -6373 -6374 -6375 -6376 -6377 -6378 -6379 -6380 -6381 -6382 -6383 -6384 -6385 -6386 -6387 -6388 -6389 -6390 -6391 -6392 -6393 -6394 -6395 -6396 -6397 -6398 -6399 -6400 -6401 -6402 -6403 -6404 -6405 -6406 -6407 -6408 -6409 -6410 -6411 -6412 -6413 -6414 -6415 -6416 -6417 -6418 -6419 -6420 -6421 -6422 -6423 -6424 -6425 -6426 -6427 -6428 -6429 -6430 -6431 -6432 -6433 -6434 -6435 -6436 -6437 -6438 -6439 -6440 -6441 -6442 -6443 -6444 -6445 -6446 -6447 -6448 -6449 -6450 -6451 -6452 -6453 -6454 -6455 -6456 -6457 -6458 -6459 -6460 -6461 -6462 -6463 -6464 -6465 -6466 -6467 -6468 -6469 -6470 -6471 -6472 -6473 -6474 -6475 -6476 -6477 -6478 -6479 -6480 -6481 -6482 -6483 -6484 -6485 -6486 -6487 -6488 -6489 -6490 -6491 -6492 -6493 -6494 -6495 -6496 -6497 -6498 -6499 -6500 -6501 -6502 -6503 -6504 -6505 -6506 -6507 -6508 -6509 -6510 -6511 -6512 -6513 -6514 -6515 -6516 -6517 -6518 -6519 -6520 -6521 -6522 -6523 -6524 -6525 -6526 -6527 -6528 -6529 -6530 -6531 -6532 -6533 -6534 -6535 -6536 -6537 -6538 -6539 -6548 -6549 -6550 -6551 -6552 -6553 -6554 -6555 -6556 -6557 -6558 -6559 -6560 -6561 -6562 -6563 -6564 -6565 -6566 -6567 -6568 -6569 -6570 -6571 -6580 -6581 -6582 -6583 -6584 -6585 -6586 -6587 -6588 -6589 -6590 -6591 -6592 -6593 -6594 -6595 -6596 -6597 -6598 -6599 -6600 -6601 -6602 -6603 -6612 -6613 -6614 -6615 -6616 -6617 -6618 -6619 -6620 -6621 -6622 -6623 -6624 -6625 -6626 -6627 -6628 -6629 -6630 -6631 -6632 -6633 -6634 -6635 -6644 -6645 -6646 -6647 -6648 -6649 -6650 -6651 -6652 -6653 -6654 -6655 -6656 -6657 -6658 -6659 -6660 -6661 -6662 -6663 -6664 -6665 -6666 -6667 -6676 -6677 -6678 -6679 -6680 -6681 -6682 -6683 -6684 -6685 -6686 -6687 -6688 -6689 -6690 -6691 -6692 -6693 -6694 -6695 -6696 -6697 -6698 -6699 -6708 -6709 -6710 -6711 -6712 -6713 -6714 -6715 -6716 -6717 -6718 -6719 -6720 -6721 -6722 -6723 -6724 -6725 -6726 -6727 -6728 -6729 -6730 -6731 -6740 -6741 -6742 -6743 -6744 -6745 -6746 -6747 -6748 -6749 -6750 -6751 -6752 -6753 -6754 -6755 -6756 -6757 -6758 -6759 -6760 -6761 -6762 -6763 -6772 -6773 -6774 -6775 -6776 -6777 -6778 -6779 -6780 -6781 -6782 -6783 -6784 -6785 -6786 -6787 -6788 -6789 -6790 -6791 -6792 -6793 -6794 -6795 -6796 -6797 -6798 -6799 -6800 -6801 -6802 -6803 -6804 -6805 -6806 -6807 -6808 -6809 -6810 -6811 -6812 -6813 -6814 -6815 -6816 -6817 -6818 -6819 -6820 -6821 -6822 -6823 -6824 -6825 -6826 -6827 -6828 -6829 -6830 -6831 -6832 -6833 -6834 -6835 -6836 -6837 -6838 -6839 -6840 -6841 -6842 -6843 -6844 -6845 -6846 -6847 -6848 -6849 -6850 -6851 -6852 -6853 -6854 -6855 -6856 -6857 -6858 -6859 -6860 -6861 -6862 -6863 -6864 -6865 -6866 -6867 -6868 -6869 -6870 -6871 -6872 -6873 -6874 -6875 -6876 -6877 -6878 -6879 -6880 -6881 -6882 -6883 -6884 -6885 -6886 -6887 -6888 -6889 -6890 -6891 -6892 -6893 -6894 -6895 -6896 -6897 -6898 -6899 -6900 -6901 -6902 -6903 -6904 -6905 -6906 -6907 -6908 -6909 -6910 -6911 -6912 -6913 -6914 -6915 -6916 -6917 -6918 -6919 -6920 -6921 -6922 -6923 -6924 -6925 -6926 -6927 -6928 -6929 -6930 -6931 -6932 -6933 -6934 -6935 -6936 -6937 -6938 -6939 -6940 -6941 -6942 -6943 -6944 -6945 -6946 -6947 -6948 -6949 -6950 -6951 -6952 -6953 -6954 -6955 -6956 -6957 -6958 -6959 -6960 -6961 -6962 -6963 -6964 -6965 -6966 -6967 -6968 -6969 -6970 -6971 -6972 -6973 -6974 -6975 -6976 -6977 -6978 -6979 -6980 -6981 -6982 -6983 -6984 -6985 -6986 -6987 -6988 -6989 -6990 -6991 -6992 -6993 -6994 -6995 -6996 -6997 -6998 -6999 -7000 -7001 -7002 -7003 -7004 -7005 -7006 -7007 -7008 -7009 -7010 -7011 -7012 -7013 -7014 -7015 -7016 -7017 -7018 -7019 -7020 -7021 -7022 -7023 -7024 -7025 -7026 -7027 -7028 -7029 -7030 -7031 -7032 -7033 -7034 -7035 -7036 -7037 -7038 -7039 -7040 -7041 -7042 -7043 -7044 -7045 -7046 -7047 -7048 -7049 -7050 -7051 -7052 -7053 -7054 -7055 -7056 -7057 -7058 -7059 -7060 -7061 -7062 -7063 -7064 -7065 -7066 -7067 -7068 -7069 -7070 -7071 -7072 -7073 -7074 -7075 -7076 -7077 -7078 -7079 -7080 -7081 -7082 -7083 -7084 -7085 -7086 -7087 -7088 -7089 -7090 -7091 -7092 -7093 -7094 -7095 -7096 -7097 -7098 -7099 -7100 -7101 -7102 -7103 -7104 -7105 -7106 -7107 -7108 -7109 -7110 -7111 -7112 -7113 -7114 -7115 -7116 -7117 -7118 -7119 -7120 -7121 -7122 -7123 -7124 -7125 -7126 -7127 -7128 -7129 -7130 -7131 -7132 -7133 -7134 -7135 -7136 -7137 -7138 -7139 -7140 -7141 -7142 -7143 -7144 -7145 -7146 -7147 -7148 -7149 -7150 -7151 -7152 -7153 -7154 -7155 -7156 -7157 -7158 -7159 -7160 -7161 -7162 -7163 -7164 -7165 -7166 -7167 -7168 -7169 -7170 -7171 -7172 -7173 -7174 -7175 -7176 -7177 -7178 -7179 -7180 -7181 -7182 -7183 -7184 -7185 -7186 -7187 -7188 -7189 -7190 -7191 -7192 -7193 -7194 -7195 -7196 -7197 -7198 -7199 -7200 -7201 -7202 -7203 -7204 -7205 -7206 -7207 -7208 -7209 -7210 -7211 -7212 -7213 -7214 -7215 -7216 -7217 -7218 -7219 -7220 -7221 -7222 -7223 -7224 -7225 -7226 -7227 -7228 -7229 -7230 -7231 -7232 -7233 -7234 -7235 -7236 -7237 -7238 -7239 -7240 -7241 -7242 -7243 -7244 -7245 -7246 -7247 -7248 -7249 -7250 -7251 -7252 -7253 -7254 -7255 -7256 -7257 -7258 -7259 -7260 -7261 -7262 -7263 -7264 -7265 -7266 -7267 -7268 -7269 -7270 -7271 -7272 -7273 -7274 -7275 -7276 -7277 -7278 -7279 -7280 -7281 -7282 -7283 -7284 -7285 -7286 -7287 -7288 -7289 -7290 -7291 -7292 -7293 -7294 -7295 -7296 -7297 -7298 -7299 -7300 -7301 -7302 -7303 -7304 -7305 -7306 -7307 -7308 -7309 -7310 -7311 -7312 -7313 -7314 -7315 -7316 -7317 -7318 -7319 -7320 -7321 -7322 -7323 -7324 -7325 -7326 -7327 -7328 -7329 -7330 -7331 -7332 -7333 -7334 -7335 -7336 -7337 -7338 -7339 -7340 -7341 -7342 -7343 -7344 -7345 -7346 -7347 -7348 -7349 -7350 -7351 -7352 -7353 -7354 -7355 -7356 -7357 -7358 -7359 -7360 -7361 -7362 -7363 -7364 -7365 -7366 -7367 -7368 -7369 -7370 -7371 -7372 -7373 -7374 -7375 -7376 -7377 -7378 -7379 -7380 -7381 -7382 -7383 -7384 -7385 -7386 -7387 -7388 -7389 -7390 -7391 -7392 -7393 -7394 -7395 -7396 -7397 -7398 -7399 -7400 -7401 -7402 -7403 -7404 -7405 -7406 -7407 -7408 -7409 -7410 -7411 -7412 -7413 -7414 -7415 -7416 -7417 -7418 -7419 -7420 -7421 -7422 -7423 -7424 -7425 -7426 -7427 -7428 -7429 -7430 -7431 -7432 -7433 -7434 -7435 -7436 -7437 -7438 -7439 -7440 -7441 -7442 -7443 -7444 -7445 -7446 -7447 -7448 -7449 -7450 -7451 -7452 -7453 -7454 -7455 -7456 -7457 -7458 -7459 -7460 -7461 -7462 -7463 -7464 -7465 -7466 -7467 -7468 -7469 -7470 -7471 -7472 -7473 -7474 -7475 -7476 -7477 -7478 -7479 -7480 -7481 -7482 -7483 -7484 -7485 -7486 -7487 -7488 -7489 -7490 -7491 -7492 -7493 -7494 -7495 -7496 -7497 -7498 -7499 -7500 -7501 -7502 -7503 -7504 -7505 -7506 -7507 -7508 -7509 -7510 -7511 -7512 -7513 -7514 -7515 -7516 -7517 -7518 -7519 -7520 -7521 -7522 -7523 -7524 -7525 -7526 -7527 -7528 -7529 -7530 -7531 -7532 -7533 -7534 -7535 -7536 -7537 -7538 -7539 -7540 -7541 -7542 -7543 -7544 -7545 -7546 -7547 -7548 -7549 -7550 -7551 -7552 -7553 -7554 -7555 -7556 -7557 -7558 -7559 -7560 -7561 -7562 -7563 -7572 -7573 -7574 -7575 -7576 -7577 -7578 -7579 -7580 -7581 -7582 -7583 -7584 -7585 -7586 -7587 -7588 -7589 -7590 -7591 -7592 -7593 -7594 -7595 -7604 -7605 -7606 -7607 -7608 -7609 -7610 -7611 -7612 -7613 -7614 -7615 -7616 -7617 -7618 -7619 -7620 -7621 -7622 -7623 -7624 -7625 -7626 -7627 -7636 -7637 -7638 -7639 -7640 -7641 -7642 -7643 -7644 -7645 -7646 -7647 -7648 -7649 -7650 -7651 -7652 -7653 -7654 -7655 -7656 -7657 -7658 -7659 -7668 -7669 -7670 -7671 -7672 -7673 -7674 -7675 -7676 -7677 -7678 -7679 -7680 -7681 -7682 -7683 -7684 -7685 -7686 -7687 -7688 -7689 -7690 -7691 -7700 -7701 -7702 -7703 -7704 -7705 -7706 -7707 -7708 -7709 -7710 -7711 -7712 -7713 -7714 -7715 -7716 -7717 -7718 -7719 -7720 -7721 -7722 -7723 -7732 -7733 -7734 -7735 -7736 -7737 -7738 -7739 -7740 -7741 -7742 -7743 -7744 -7745 -7746 -7747 -7748 -7749 -7750 -7751 -7752 -7753 -7754 -7755 -7764 -7765 -7766 -7767 -7768 -7769 -7770 -7771 -7772 -7773 -7774 -7775 -7776 -7777 -7778 -7779 -7780 -7781 -7782 -7783 -7784 -7785 -7786 -7787 -7796 -7797 -7798 -7799 -7800 -7801 -7802 -7803 -7804 -7805 -7806 -7807 -7808 -7809 -7810 -7811 -7812 -7813 -7814 -7815 -7816 -7817 -7818 -7819 -7820 -7821 -7822 -7823 -7824 -7825 -7826 -7827 -7828 -7829 -7830 -7831 -7832 -7833 -7834 -7835 -7836 -7837 -7838 -7839 -7840 -7841 -7842 -7843 -7844 -7845 -7846 -7847 -7848 -7849 -7850 -7851 -7852 -7853 -7854 -7855 -7856 -7857 -7858 -7859 -7860 -7861 -7862 -7863 -7864 -7865 -7866 -7867 -7868 -7869 -7870 -7871 -7872 -7873 -7874 -7875 -7876 -7877 -7878 -7879 -7880 -7881 -7882 -7883 -7884 -7885 -7886 -7887 -7888 -7889 -7890 -7891 -7892 -7893 -7894 -7895 -7896 -7897 -7898 -7899 -7900 -7901 -7902 -7903 -7904 -7905 -7906 -7907 -7908 -7909 -7910 -7911 -7912 -7913 -7914 -7915 -7916 -7917 -7918 -7919 -7920 -7921 -7922 -7923 -7924 -7925 -7926 -7927 -7928 -7929 -7930 -7931 -7932 -7933 -7934 -7935 -7936 -7937 -7938 -7939 -7940 -7941 -7942 -7943 -7944 -7945 -7946 -7947 -7948 -7949 -7950 -7951 -7952 -7953 -7954 -7955 -7956 -7957 -7958 -7959 -7960 -7961 -7962 -7963 -7964 -7965 -7966 -7967 -7968 -7969 -7970 -7971 -7972 -7973 -7974 -7975 -7976 -7977 -7978 -7979 -7980 -7981 -7982 -7983 -7984 -7985 -7986 -7987 -7988 -7989 -7990 -7991 -7992 -7993 -7994 -7995 -7996 -7997 -7998 -7999 -8000 -8001 -8002 -8003 -8004 -8005 -8006 -8007 -8008 -8009 -8010 -8011 -8012 -8013 -8014 -8015 -8016 -8017 -8018 -8019 -8020 -8021 -8022 -8023 -8024 -8025 -8026 -8027 -8028 -8029 -8030 -8031 -8032 -8033 -8034 -8035 -8036 -8037 -8038 -8039 -8040 -8041 -8042 -8043 -8044 -8045 -8046 -8047 -8048 -8049 -8050 -8051 -8052 -8053 -8054 -8055 -8056 -8057 -8058 -8059 -8060 -8061 -8062 -8063 -8064 -8065 -8066 -8067 -8068 -8069 -8070 -8071 -8072 -8073 -8074 -8075 -8076 -8077 -8078 -8079 -8080 -8081 -8082 -8083 -8084 -8085 -8086 -8087 -8088 -8089 -8090 -8091 -8092 -8093 -8094 -8095 -8096 -8097 -8098 -8099 -8100 -8101 -8102 -8103 -8104 -8105 -8106 -8107 -8108 -8109 -8110 -8111 -8112 -8113 -8114 -8115 -8116 -8117 -8118 -8119 -8120 -8121 -8122 -8123 -8124 -8125 -8126 -8127 -8128 -8129 -8130 -8131 -8132 -8133 -8134 -8135 -8136 -8137 -8138 -8139 -8140 -8141 -8142 -8143 -8144 -8145 -8146 -8147 -8148 -8149 -8150 -8151 -8152 -8153 -8154 -8155 -8156 -8157 -8158 -8159 -8160 -8161 -8162 -8163 -8164 -8165 -8166 -8167 -8168 -8169 -8170 -8171 -8172 -8173 -8174 -8175 -8176 -8177 -8178 -8179 -8180 -8181 -8182 -8183 -8184 -8185 -8186 -8187 -8188 -8189 -8190 -8191 -8192 -8193 -8194 -8195 -8196 -8197 -8198 -8199 -8200 -8201 -8202 -8203 -8204 -8205 -8206 -8207 -8208 -8209 -8210 -8211 -8212 -8213 -8214 -8215 -8216 -8217 -8218 -8219 -8220 -8221 -8222 -8223 -8224 -8225 -8226 -8227 -8228 -8229 -8230 -8231 -8232 -8233 -8234 -8235 -8236 -8237 -8238 -8239 -8240 -8241 -8242 -8243 -8244 -8245 -8246 -8247 -8248 -8249 -8250 -8251 -8252 -8253 -8254 -8255 -8256 -8257 -8258 -8259 -8260 -8261 -8262 -8263 -8264 -8265 -8266 -8267 -8268 -8269 -8270 -8271 -8272 -8273 -8274 -8275 -8276 -8277 -8278 -8279 -8280 -8281 -8282 -8283 -8284 -8285 -8286 -8287 -8288 -8289 -8290 -8291 -8292 -8293 -8294 -8295 -8296 -8297 -8298 -8299 -8300 -8301 -8302 -8303 -8304 -8305 -8306 -8307 -8308 -8309 -8310 -8311 -8312 -8313 -8314 -8315 -8316 -8317 -8318 -8319 -8320 -8321 -8322 -8323 -8324 -8325 -8326 -8327 -8328 -8329 -8330 -8331 -8332 -8333 -8334 -8335 -8336 -8337 -8338 -8339 -8340 -8341 -8342 -8343 -8344 -8345 -8346 -8347 -8348 -8349 -8350 -8351 -8352 -8353 -8354 -8355 -8356 -8357 -8358 -8359 -8360 -8361 -8362 -8363 -8364 -8365 -8366 -8367 -8368 -8369 -8370 -8371 -8372 -8373 -8374 -8375 -8376 -8377 -8378 -8379 -8380 -8381 -8382 -8383 -8384 -8385 -8386 -8387 -8388 -8389 -8390 -8391 -8392 -8393 -8394 -8395 -8396 -8397 -8398 -8399 -8400 -8401 -8402 -8403 -8404 -8405 -8406 -8407 -8408 -8409 -8410 -8411 -8412 -8413 -8414 -8415 -8416 -8417 -8418 -8419 -8420 -8421 -8422 -8423 -8424 -8425 -8426 -8427 -8428 -8429 -8430 -8431 -8432 -8433 -8434 -8435 -8436 -8437 -8438 -8439 -8440 -8441 -8442 -8443 -8444 -8445 -8446 -8447 -8448 -8449 -8450 -8451 -8452 -8453 -8454 -8455 -8456 -8457 -8458 -8459 -8460 -8461 -8462 -8463 -8464 -8465 -8466 -8467 -8468 -8469 -8470 -8471 -8472 -8473 -8474 -8475 -8476 -8477 -8478 -8479 -8480 -8481 -8482 -8483 -8484 -8485 -8486 -8487 -8488 -8489 -8490 -8491 -8492 -8493 -8494 -8495 -8496 -8497 -8498 -8499 -8500 -8501 -8502 -8503 -8504 -8505 -8506 -8507 -8508 -8509 -8510 -8511 -8512 -8513 -8514 -8515 -8516 -8517 -8518 -8519 -8520 -8521 -8522 -8523 -8524 -8525 -8526 -8527 -8528 -8529 -8530 -8531 -8532 -8533 -8534 -8535 -8536 -8537 -8538 -8539 -8540 -8541 -8542 -8543 -8544 -8545 -8546 -8547 -8548 -8549 -8550 -8551 -8552 -8553 -8554 -8555 -8556 -8557 -8558 -8559 -8560 -8561 -8562 -8563 -8564 -8565 -8566 -8567 -8568 -8569 -8570 -8571 -8572 -8573 -8574 -8575 -8576 -8577 -8578 -8579 -8580 -8581 -8582 -8583 -8584 -8585 -8586 -8587 -8588 -8589 -8590 -8591 -8592 -8593 -8594 -8595 -8596 -8597 -8598 -8599 -8600 -8601 -8602 -8603 -8604 -8605 -8606 -8607 -8608 -8609 -8610 -8611 -8612 -8613 -8614 -8615 -8616 -8617 -8618 -8619 -8620 -8621 -8622 -8623 -8624 -8625 -8626 -8627 -8628 -8629 -8630 -8631 -8632 -8633 -8634 -8635 -8636 -8637 -8638 -8639 -8640 -8641 -8642 -8643 -8644 -8645 -8646 -8647 -8648 -8649 -8650 -8651 -8652 -8653 -8654 -8655 -8656 -8657 -8658 -8659 -8660 -8661 -8662 -8663 -8664 -8665 -8666 -8667 -8668 -8669 -8670 -8671 -8672 -8673 -8674 -8675 -8676 -8677 -8678 -8679 -8680 -8681 -8682 -8683 -8684 -8685 -8686 -8687 -8688 -8689 -8690 -8691 -8692 -8693 -8694 -8695 -8696 -8697 -8698 -8699 -8700 -8701 -8702 -8703 -8704 -8705 -8706 -8707 -8708 -8709 -8710 -8711 -8712 -8713 -8714 -8715 -8716 -8717 -8718 -8719 -8720 -8721 -8722 -8723 -8724 -8725 -8726 -8727 -8728 -8729 -8730 -8731 -8732 -8733 -8734 -8735 -8736 -8737 -8738 -8739 -8740 -8741 -8742 -8743 -8744 -8745 -8746 -8747 -8748 -8749 -8750 -8751 -8752 -8753 -8754 -8755 -8756 -8757 -8758 -8759 -8760 -8761 -8762 -8763 -8764 -8765 -8766 -8767 -8768 -8769 -8770 -8771 -8772 -8773 -8774 -8775 -8776 -8777 -8778 -8779 -8780 -8781 -8782 -8783 -8784 -8785 -8786 -8787 -8788 -8789 -8790 -8791 -8792 -8793 -8794 -8795 -8796 -8797 -8798 -8799 -8800 -8801 -8802 -8803 -8804 -8805 -8806 -8807 -8808 -8809 -8810 -8811 -8812 -8813 -8814 -8815 -8816 -8817 -8818 -8819 -8820 -8821 -8822 -8823 -8824 -8825 -8826 -8827 -8828 -8829 -8830 -8831 -8832 -8833 -8834 -8835 -8836 -8837 -8838 -8839 -8840 -8841 -8842 -8843 -8844 -8845 -8846 -8847 -8848 -8849 -8850 -8851 -8852 -8853 -8854 -8855 -8856 -8857 -8858 -8859 -8860 -8861 -8862 -8863 -8864 -8865 -8866 -8867 -8868 -8869 -8870 -8871 -8872 -8873 -8874 -8875 -8876 -8877 -8878 -8879 -8880 -8881 -8882 -8883 -8884 -8885 -8886 -8887 -8888 -8889 -8890 -8891 -8892 -8893 -8894 -8895 -8896 -8897 -8898 -8899 -8900 -8901 -8902 -8903 -8904 -8905 -8906 -8907 -8908 -8909 -8910 -8911 -8912 -8913 -8914 -8915 -8916 -8917 -8918 -8919 -8920 -8921 -8922 -8923 -8924 -8925 -8926 -8927 -8928 -8929 -8930 -8931 -8932 -8933 -8934 -8935 -8936 -8937 -8938 -8939 -8940 -8941 -8942 -8943 -8944 -8945 -8946 -8947 -8948 -8949 -8950 -8951 -8952 -8953 -8954 -8955 -8956 -8957 -8958 -8959 -8960 -8961 -8962 -8963 -8964 -8965 -8966 -8967 -8968 -8969 -8970 -8971 -8972 -8973 -8974 -8975 -8976 -8977 -8978 -8979 -8980 -8981 -8982 -8983 -8984 -8985 -8986 -8987 -8988 -8989 -8990 -8991 -8992 -8993 -8994 -8995 -8996 -8997 -8998 -8999 -9000 -9001 -9002 -9003 -9004 -9005 -9006 -9007 -9008 -9009 -9010 -9011 -9012 -9013 -9014 -9015 -9016 -9017 -9018 -9019 -9020 -9021 -9022 -9023 -9024 -9025 -9026 -9027 -9028 -9029 -9030 -9031 -9032 -9033 -9034 -9035 -9036 -9037 -9038 -9039 -9040 -9041 -9042 -9043 -9044 -9045 -9046 -9047 -9048 -9049 -9050 -9051 -9052 -9053 -9054 -9055 -9056 -9057 -9058 -9059 -9060 -9061 -9062 -9063 -9064 -9065 -9066 -9067 -9068 -9069 -9070 -9071 -9072 -9073 -9074 -9075 -9076 -9077 -9078 -9079 -9080 -9081 -9082 -9083 -9084 -9085 -9086 -9087 -9088 -9089 -9090 -9091 -9092 -9093 -9094 -9095 -9096 -9097 -9098 -9099 -9100 -9101 -9102 -9103 -9104 -9105 -9106 -9107 -9108 -9109 -9110 -9111 -9112 -9113 -9114 -9115 -9116 -9117 -9118 -9119 -9120 -9121 -9122 -9123 -9124 -9125 -9126 -9127 -9128 -9129 -9130 -9131 -9132 -9133 -9134 -9135 -9136 -9137 -9138 -9139 -9140 -9141 -9142 -9143 -9144 -9145 -9146 -9147 -9148 -9149 -9150 -9151 -9152 -9153 -9154 -9155 -9156 -9157 -9158 -9159 -9160 -9161 -9162 -9163 -9164 -9165 -9166 -9167 -9168 -9169 -9170 -9171 -9172 -9173 -9174 -9175 -9176 -9177 -9178 -9179 -9180 -9181 -9182 -9183 -9184 -9185 -9186 -9187 -9188 -9189 -9190 -9191 -9192 -9193 -9194 -9195 -9196 -9197 -9198 -9199 -9200 -9201 -9202 -9203 -9204 -9205 -9206 -9207 -9208 -9209 -9210 -9211 -9212 -9213 -9214 -9215 -9216 -9217 -9218 -9219 -9220 -9221 -9222 -9223 -9224 -9225 -9226 -9227 -9228 -9229 -9230 -9231 -9232 -9233 -9234 -9235 -9236 -9237 -9238 -9239 -9240 -9241 -9242 -9243 -9244 -9245 -9246 -9247 -9248 -9249 -9250 -9251 -9252 -9253 -9254 -9255 -9256 -9257 -9258 -9259 -9260 -9261 -9262 -9263 -9264 -9265 -9266 -9267 -9268 -9269 -9270 -9271 -9272 -9273 -9274 -9275 -9276 -9277 -9278 -9279 -9280 -9281 -9282 -9283 -9284 -9285 -9286 -9287 -9288 -9289 -9290 -9291 -9292 -9293 -9294 -9295 -9296 -9297 -9298 -9299 -9300 -9301 -9302 -9303 -9304 -9305 -9306 -9307 -9308 -9309 -9310 -9311 -9312 -9313 -9314 -9315 -9316 -9317 -9318 -9319 -9320 -9321 -9322 -9323 -9324 -9325 -9326 -9327 -9328 -9329 -9330 -9331 -9332 -9333 -9334 -9335 -9336 -9337 -9338 -9339 -9340 -9341 -9342 -9343 -9344 -9345 -9346 -9347 -9348 -9349 -9350 -9351 -9352 -9353 -9354 -9355 -9356 -9357 -9358 -9359 -9360 -9361 -9362 -9363 -9364 -9365 -9366 -9367 -9368 -9369 -9370 -9371 -9372 -9373 -9374 -9375 -9376 -9377 -9378 -9379 -9380 -9381 -9382 -9383 -9384 -9385 -9386 -9387 -9388 -9389 -9390 -9391 -9392 -9393 -9394 -9395 -9396 -9397 -9398 -9399 -9400 -9401 -9402 -9403 -9404 -9405 -9406 -9407 -9408 -9409 -9410 -9411 -9412 -9413 -9414 -9415 -9416 -9417 -9418 -9419 -9420 -9421 -9422 -9423 -9424 -9425 -9426 -9427 -9428 -9429 -9430 -9431 -9432 -9433 -9434 -9435 -9436 -9437 -9438 -9439 -9440 -9441 -9442 -9443 -9444 -9445 -9446 -9447 -9448 -9449 -9450 -9451 -9452 -9453 -9454 -9455 -9456 -9457 -9458 -9459 -9460 -9461 -9462 -9463 -9464 -9465 -9466 -9467 -9468 -9469 -9470 -9471 -9472 -9473 -9474 -9475 -9476 -9477 -9478 -9479 -9480 -9481 -9482 -9483 -9484 -9485 -9486 -9487 -9488 -9489 -9490 -9491 -9492 -9493 -9494 -9495 -9496 -9497 -9498 -9499 -9500 -9501 -9502 -9503 -9504 -9505 -9506 -9507 -9508 -9509 -9510 -9511 -9512 -9513 -9514 -9515 -9516 -9517 -9518 -9519 -9520 -9521 -9522 -9523 -9524 -9525 -9526 -9527 -9528 -9529 -9530 -9531 -9532 -9533 -9534 -9535 -9536 -9537 -9538 -9539 -9540 -9541 -9542 -9543 -9544 -9545 -9546 -9547 -9548 -9549 -9550 -9551 -9552 -9553 -9554 -9555 -9556 -9557 -9558 -9559 -9560 -9561 -9562 -9563 -9564 -9565 -9566 -9567 -9568 -9569 -9570 -9571 -9572 -9573 -9574 -9575 -9576 -9577 -9578 -9579 -9580 -9581 -9582 -9583 -9584 -9585 -9586 -9587 -9588 -9589 -9590 -9591 -9592 -9593 -9594 -9595 -9596 -9597 -9598 -9599 -9600 -9601 -9602 -9603 -9604 -9605 -9606 -9607 -9608 -9609 -9610 -9611 -9612 -9613 -9614 -9615 -9616 -9617 -9618 -9619 -9620 -9621 -9622 -9623 -9624 -9625 -9626 -9627 -9628 -9629 -9630 -9631 -9632 -9633 -9634 -9635 -9636 -9637 -9638 -9639 -9640 -9641 -9642 -9643 -9644 -9645 -9646 -9647 -9648 -9649 -9650 -9651 -9652 -9653 -9654 -9655 -9656 -9657 -9658 -9659 -9660 -9661 -9662 -9663 -9664 -9665 -9666 -9667 -9668 -9669 -9670 -9671 -9672 -9673 -9674 -9675 -9676 -9677 -9678 -9679 -9680 -9681 -9682 -9683 -9684 -9685 -9686 -9687 -9688 -9689 -9690 -9691 -9692 -9693 -9694 -9695 -9696 -9697 -9698 -9699 -9700 -9701 -9702 -9703 -9704 -9705 -9706 -9707 -9708 -9709 -9710 -9711 -9712 -9713 -9714 -9715 -9716 -9717 -9718 -9719 -9720 -9721 -9722 -9723 -9724 -9725 -9726 -9727 -9728 -9729 -9730 -9731 -9732 -9733 -9734 -9735 -9736 -9737 -9738 -9739 -9740 -9741 -9742 -9743 -9744 -9745 -9746 -9747 -9748 -9749 -9750 -9751 -9752 -9753 -9754 -9755 -9756 -9757 -9758 -9759 -9760 -9761 -9762 -9763 -9764 -9765 -9766 -9767 -9768 -9769 -9770 -9771 -9772 -9773 -9774 -9775 -9776 -9777 -9778 -9779 -9780 -9781 -9782 -9783 -9784 -9785 -9786 -9787 -9788 -9789 -9790 -9791 -9792 -9793 -9794 -9795 -9796 -9797 -9798 -9799 -9800 -9801 -9802 -9803 -9804 -9805 -9806 -9807 -9808 -9809 -9810 -9811 -9812 -9813 -9814 -9815 -9816 -9817 -9818 -9819 -9820 -9821 -9822 -9823 -9824 -9825 -9826 -9827 -9828 -9829 -9830 -9831 -9832 -9833 -9834 -9835 -9836 -9837 -9838 -9839 -9840 -9841 -9842 -9843 -9844 -9845 -9846 -9847 -9848 -9849 -9850 -9851 -9852 -9853 -9854 -9855 -9856 -9857 -9858 -9859 -9860 -9861 -9862 -9863 -9864 -9865 -9866 -9867 -9868 -9869 -9870 -9871 -9872 -9873 -9874 -9875 -9876 -9877 -9878 -9879 -9880 -9881 -9882 -9883 -9884 -9885 -9886 -9887 -9888 -9889 -9890 -9891 -9892 -9893 -9894 -9895 -9896 -9897 -9898 -9899 -9900 -9901 -9902 -9903 -9904 -9905 -9906 -9907 -9908 -9909 -9910 -9911 -9912 -9913 -9914 -9915 -9916 -9917 -9918 -9919 -9920 -9921 -9922 -9923 -9924 -9925 -9926 -9927 -9928 -9929 -9930 -9931 -9932 -9933 -9934 -9935 -9936 -9937 -9938 -9939 -9940 -9941 -9942 -9943 -9944 -9945 -9946 -9947 -9948 -9949 -9950 -9951 -9952 -9953 -9954 -9955 -9956 -9957 -9958 -9959 -9960 -9961 -9962 -9963 -9964 -9965 -9966 -9967 -9968 -9969 -9970 -9971 -9972 -9973 -9974 -9975 -9976 -9977 -9978 -9979 -9980 -9981 -9982 -9983 -9984 -9985 -9986 -9987 -9988 -9989 -9990 -9991 -9992 -9993 -9994 -9995 -9996 -9997 -9998 -9999 -10000 -10001 -10002 -10003 -10004 -10005 -10006 -10007 -10008 -10009 -10010 -10011 -10012 -10013 -10014 -10015 -10016 -10017 -10018 -10019 -10020 -10021 -10022 -10023 -10024 -10025 -10026 -10027 -10028 -10029 -10030 -10031 -10032 -10033 -10034 -10035 -10036 -10037 -10038 -10039 -10040 -10041 -10042 -10043 -10044 -10045 -10046 -10047 -10048 -10049 -10050 -10051 -10052 -10053 -10054 -10055 -10056 -10057 -10058 -10059 -10060 -10061 -10062 -10063 -10064 -10065 -10066 -10067 -10068 -10069 -10070 -10071 -10072 -10073 -10074 -10075 -10076 -10077 -10078 -10079 -10080 -10081 -10082 -10083 -10084 -10085 -10086 -10087 -10088 -10089 -10090 -10091 -10092 -10093 -10094 -10095 -10096 -10097 -10098 -10099 -10100 -10101 -10102 -10103 -10104 -10105 -10106 -10107 -10108 -10109 -10110 -10111 -10112 -10113 -10114 -10115 -10116 -10117 -10118 -10119 -10120 -10121 -10122 -10123 -10124 -10125 -10126 -10127 -10128 -10129 -10130 -10131 -10132 -10133 -10134 -10135 -10136 -10137 -10138 -10139 -10140 -10141 -10142 -10143 -10144 -10145 -10146 -10147 -10148 -10149 -10150 -10151 -10152 -10153 -10154 -10155 -10156 -10157 -10158 -10159 -10160 -10161 -10162 -10163 -10164 -10165 -10166 -10167 -10168 -10169 -10170 -10171 -10172 -10173 -10174 -10175 -10176 -10177 -10178 -10179 -10180 -10181 -10182 -10183 -10184 -10185 -10186 -10187 -10188 -10189 -10190 -10191 -10192 -10193 -10194 -10195 -10196 -10197 -10198 -10199 -10200 -10201 -10202 -10203 -10204 -10205 -10206 -10207 -10208 -10209 -10210 -10211 -10212 -10213 -10214 -10215 -10216 -10217 -10218 -10219 -10220 -10221 -10222 -10223 -10224 -10225 -10226 -10227 -10228 -10229 -10230 -10231 -10232 -10233 -10234 -10235 -10236 -10237 -10238 -10239 -10240 -10241 -10242 -10243 -10244 -10245 -10246 -10247 -10248 -10249 -10250 -10251 -10252 -10253 -10254 -10255 -10256 -10257 -10258 -10259 -10260 -10261 -10262 -10263 -10264 -10265 -10266 -10267 -10268 -10269 -10270 -10271 -10272 -10273 -10274 -10275 -10276 -10277 -10278 -10279 -10280 -10281 -10282 -10283 -10284 -10285 -10286 -10287 -10288 -10289 -10290 -10291 -10292 -10293 -10294 -10295 -10296 -10297 -10298 -10299 -10300 -10301 -10302 -10303 -10304 -10305 -10306 -10307 -10308 -10309 -10310 -10311 -10312 -10313 -10314 -10315 -10316 -10317 -10318 -10319 -10320 -10321 -10322 -10323 -10324 -10325 -10326 -10327 -10328 -10329 -10330 -10331 -10332 -10333 -10334 -10335 -10336 -10337 -10338 -10339 -10340 -10341 -10342 -10343 -10344 -10345 -10346 -10347 -10348 -10349 -10350 -10351 -10352 -10353 -10354 -10355 -10356 -10357 -10358 -10359 -10360 -10361 -10362 -10363 -10364 -10365 -10366 -10367 -10368 -10369 -10370 -10371 -10372 -10373 -10374 -10375 -10376 -10377 -10378 -10379 -10380 -10381 -10382 -10383 -10384 -10385 -10386 -10387 -10388 -10389 -10390 -10391 -10392 -10393 -10394 -10395 -10396 -10397 -10398 -10399 -10400 -10401 -10402 -10403 -10404 -10405 -10406 -10407 -10408 -10409 -10410 -10411 -10412 -10413 -10414 -10415 -10416 -10417 -10418 -10419 -10420 -10421 -10422 -10423 -10424 -10425 -10426 -10427 -10428 -10429 -10430 -10431 -10432 -10433 -10434 -10435 -10436 -10437 -10438 -10439 -10440 -10441 -10442 -10443 -10444 -10445 -10446 -10447 -10448 -10449 -10450 -10451 -10452 -10453 -10454 -10455 -10456 -10457 -10458 -10459 -10460 -10461 -10462 -10463 -10464 -10465 -10466 -10467 -10468 -10469 -10470 -10471 -10472 -10473 -10474 -10475 -10476 -10477 -10478 -10479 -10480 -10481 -10482 -10483 -10484 -10485 -10486 -10487 -10488 -10489 -10490 -10491 -10492 -10493 -10494 -10495 -10496 -10497 -10498 -10499 -10500 -10501 -10502 -10503 -10504 -10505 -10506 -10507 -10508 -10509 -10510 -10511 -10512 -10513 -10514 -10515 -10516 -10517 -10518 -10519 -10520 -10521 -10522 -10523 -10524 -10525 -10526 -10527 -10528 -10529 -10530 -10531 -10532 -10533 -10534 -10535 -10536 -10537 -10538 -10539 -10540 -10541 -10542 -10543 -10544 -10545 -10546 -10547 -10548 -10549 -10550 -10551 -10552 -10553 -10554 -10555 -10556 -10557 -10558 -10559 -10560 -10561 -10562 -10563 -10564 -10565 -10566 -10567 -10568 -10569 -10570 -10571 -10572 -10573 -10574 -10575 -10576 -10577 -10578 -10579 -10580 -10581 -10582 -10583 -10584 -10585 -10586 -10587 -10588 -10589 -10590 -10591 -10592 -10593 -10594 -10595 -10596 -10597 -10598 -10599 -10600 -10601 -10602 -10603 -10604 -10605 -10606 -10607 -10608 -10609 -10610 -10611 -10612 -10613 -10614 -10615 -10616 -10617 -10618 -10619 -10620 -10621 -10622 -10623 -10624 -10625 -10626 -10627 -10628 -10629 -10630 -10631 -10632 -10633 -10634 -10635 -10636 -10637 -10638 -10639 -10640 -10641 -10642 -10643 -10644 -10645 -10646 -10647 -10648 -10649 -10650 -10651 -10652 -10653 -10654 -10655 -10656 -10657 -10658 -10659 -10660 -10661 -10662 -10663 -10664 -10665 -10666 -10667 -10668 -10669 -10670 -10671 -10672 -10673 -10674 -10675 -10676 -10677 -10678 -10679 -10680 -10681 -10682 -10683 -10684 -10685 -10686 -10687 -10688 -10689 -10690 -10691 -10692 -10693 -10694 -10695 -10696 -10697 -10698 -10699 -10700 -10701 -10702 -10703 -10704 -10705 -10706 -10707 -10708 -10709 -10710 -10711 -10712 -10713 -10714 -10715 -10716 -10717 -10718 -10719 -10720 -10721 -10722 -10723 -10724 -10725 -10726 -10727 -10728 -10729 -10730 -10731 -10732 -10733 -10734 -10735 -10736 -10737 -10738 -10739 -10740 -10741 -10742 -10743 -10744 -10745 -10746 -10747 -10748 -10749 -10750 -10751 -10752 -10753 -10754 -10755 -10756 -10757 -10758 -10759 -10760 -10761 -10762 -10763 -10764 -10765 -10766 -10767 -10768 -10769 -10770 -10771 -10772 -10773 -10774 -10775 -10776 -10777 -10778 -10779 -10780 -10781 -10782 -10783 -10784 -10785 -10786 -10787 -10788 -10789 -10790 -10791 -10792 -10793 -10794 -10795 -10796 -10797 -10798 -10799 -10800 -10801 -10802 -10803 -10804 -10805 -10806 -10807 -10808 -10809 -10810 -10811 -10812 -10813 -10814 -10815 -10816 -10817 -10818 -10819 -10820 -10821 -10822 -10823 -10824 -10825 -10826 -10827 -10828 -10829 -10830 -10831 -10832 -10833 -10834 -10835 -10836 -10837 -10838 -10839 -10840 -10841 -10842 -10843 -10844 -10845 -10846 -10847 -10848 -10849 -10850 -10851 -10852 -10853 -10854 -10855 -10856 -10857 -10858 -10859 -10860 -10861 -10862 -10863 -10864 -10865 -10866 -10867 -10868 -10869 -10870 -10871 -10872 -10873 -10874 -10875 -10876 -10877 -10878 -10879 -10880 -10881 -10882 -10883 -10884 -10885 -10886 -10887 -10888 -10889 -10890 -10891 -10892 -10893 -10894 -10895 -10896 -10897 -10898 -10899 -10900 -10901 -10902 -10903 -10904 -10905 -10906 -10907 -10908 -10909 -10910 -10911 -10912 -10913 -10914 -10915 -10916 -10917 -10918 -10919 -10920 -10921 -10922 -10923 -10924 -10925 -10926 -10927 -10928 -10929 -10930 -10931 -10932 -10933 -10934 -10935 -10936 -10937 -10938 -10939 -10940 -10941 -10942 -10943 -10944 -10945 -10946 -10947 -10948 -10949 -10950 -10951 -10952 -10953 -10954 -10955 -10956 -10957 -10958 -10959 -10960 -10961 -10962 -10963 -10964 -10965 -10966 -10967 -10968 -10969 -10970 -10971 -10972 -10973 -10974 -10975 -10976 -10977 -10978 -10979 -10980 -10981 -10982 -10983 -10984 -10985 -10986 -10987 -10988 -10989 -10990 -10991 -10992 -10993 -10994 -10995 -10996 -10997 -10998 -10999 -11000 -11001 -11002 -11003 -11004 -11005 -11006 -11007 -11008 -11009 -11010 -11011 -11012 -11013 -11014 -11015 -11016 -11017 -11018 -11019 -11020 -11021 -11022 -11023 -11024 -11025 -11026 -11027 -11028 -11029 -11030 -11031 -11032 -11033 -11034 -11035 -11036 -11037 -11038 -11039 -11040 -11041 -11042 -11043 -11044 -11045 -11046 -11047 -11048 -11049 -11050 -11051 -11052 -11053 -11054 -11055 -11056 -11057 -11058 -11059 -11060 -11061 -11062 -11063 -11064 -11065 -11066 -11067 -11068 -11069 -11070 -11071 -11072 -11073 -11074 -11075 -11076 -11077 -11078 -11079 -11080 -11081 -11082 -11083 -11084 -11085 -11086 -11087 -11088 -11089 -11090 -11091 -11092 -11093 -11094 -11095 -11096 -11097 -11098 -11099 -11100 -11101 -11102 -11103 -11104 -11105 -11106 -11107 -11108 -11109 -11110 -11111 -11112 -11113 -11114 -11115 -11116 -11117 -11118 -11119 -11120 -11121 -11122 -11123 -11124 -11125 -11126 -11127 -11128 -11129 -11130 -11131 -11132 -11133 -11134 -11135 -11136 -11137 -11138 -11139 -11140 -11141 -11142 -11143 -11144 -11145 -11146 -11147 -11148 -11149 -11150 -11151 -11152 -11153 -11154 -11155 -11156 -11157 -11158 -11159 -11160 -11161 -11162 -11163 -11164 -11165 -11166 -11167 -11168 -11169 -11170 -11171 -11172 -11173 -11174 -11175 -11176 -11177 -11178 -11179 -11180 -11181 -11182 -11183 -11184 -11185 -11186 -11187 -11188 -11189 -11190 -11191 -11192 -11193 -11194 -11195 -11196 -11197 -11198 -11199 -11200 -11201 -11202 -11203 -11204 -11205 -11206 -11207 -11208 -11209 -11210 -11211 -11212 -11213 -11214 -11215 -11216 -11217 -11218 -11219 -11220 -11221 -11222 -11223 -11224 -11225 -11226 -11227 -11228 -11229 -11230 -11231 -11232 -11233 -11234 -11235 -11236 -11237 -11238 -11239 -11240 -11241 -11242 -11243 -11244 -11245 -11246 -11247 -11248 -11249 -11250 -11251 -11252 -11253 -11254 -11255 -11256 -11257 -11258 -11259 -11260 -11261 -11262 -11263 -11264 -11265 -11266 -11267 -11268 -11269 -11270 -11271 -11272 -11273 -11274 -11275 -11276 -11277 -11278 -11279 -11280 -11281 -11282 -11283 -11284 -11285 -11286 -11287 -11288 -11289 -11290 -11291 -11292 -11293 -11294 -11295 -11296 -11297 -11298 -11299 -11300 -11301 -11302 -11303 -11304 -11305 -11306 -11307 -11308 -11309 -11310 -11311 -11312 -11313 -11314 -11315 -11316 -11317 -11318 -11319 -11320 -11321 -11322 -11323 -11324 -11325 -11326 -11327 -11328 -11329 -11330 -11331 -11332 -11333 -11334 -11335 -11336 -11337 -11338 -11339 -11340 -11341 -11342 -11343 -11344 -11345 -11346 -11347 -11348 -11349 -11350 -11351 -11352 -11353 -11354 -11355 -11356 -11357 -11358 -11359 -11360 -11361 -11362 -11363 -11364 -11365 -11366 -11367 -11368 -11369 -11370 -11371 -11372 -11373 -11374 -11375 -11376 -11377 -11378 -11379 -11380 -11381 -11382 -11383 -11384 -11385 -11386 -11387 -11388 -11389 -11390 -11391 -11392 -11393 -11394 -11395 -11396 -11397 -11398 -11399 -11400 -11401 -11402 -11403 -11404 -11405 -11406 -11407 -11408 -11409 -11410 -11411 -11412 -11413 -11414 -11415 -11416 -11417 -11418 -11419 -11420 -11421 -11422 -11423 -11424 -11425 -11426 -11427 -11428 -11429 -11430 -11431 -11432 -11433 -11434 -11435 -11436 -11437 -11438 -11439 -11440 -11441 -11442 -11443 -11444 -11445 -11446 -11447 -11448 -11449 -11450 -11451 -11452 -11453 -11454 -11455 -11456 -11457 -11458 -11459 -11460 -11461 -11462 -11463 -11464 -11465 -11466 -11467 -11468 -11469 -11470 -11471 -11472 -11473 -11474 -11475 -11476 -11477 -11478 -11479 -11480 -11481 -11482 -11483 -11484 -11485 -11486 -11487 -11488 -11489 -11490 -11491 -11492 -11493 -11494 -11495 -11496 -11497 -11498 -11499 -11500 -11501 -11502 -11503 -11504 -11505 -11506 -11507 -11508 -11509 -11510 -11511 -11512 -11513 -11514 -11515 -11516 -11517 -11518 -11519 -11520 -11521 -11522 -11523 -11524 -11525 -11526 -11527 -11528 -11529 -11530 -11531 -11532 -11533 -11534 -11535 -11536 -11537 -11538 -11539 -11540 -11541 -11542 -11543 -11544 -11545 -11546 -11547 -11548 -11549 -11550 -11551 -11552 -11553 -11554 -11555 -11556 -11557 -11558 -11559 -11560 -11561 -11562 -11563 -11564 -11565 -11566 -11567 -11568 -11569 -11570 -11571 -11572 -11573 -11574 -11575 -11576 -11577 -11578 -11579 -11580 -11581 -11582 -11583 -11584 -11585 -11586 -11587 -11588 -11589 -11590 -11591 -11592 -11593 -11594 -11595 -11596 -11597 -11598 -11599 -11600 -11601 -11602 -11603 -11604 -11605 -11606 -11607 -11608 -11609 -11610 -11611 -11612 -11613 -11614 -11615 -11616 -11617 -11618 -11619 -11620 -11621 -11622 -11623 -11624 -11625 -11626 -11627 -11628 -11629 -11630 -11631 -11632 -11633 -11634 -11635 -11636 -11637 -11638 -11639 -11640 -11641 -11642 -11643 -11644 -11645 -11646 -11647 -11648 -11649 -11650 -11651 -11652 -11653 -11654 -11655 -11656 -11657 -11658 -11659 -11660 -11661 -11662 -11663 -11664 -11665 -11666 -11667 -11668 -11669 -11670 -11671 -11672 -11673 -11674 -11675 -11676 -11677 -11678 -11679 -11680 -11681 -11682 -11683 -11684 -11685 -11686 -11687 -11688 -11689 -11690 -11691 -11692 -11693 -11694 -11695 -11696 -11697 -11698 -11699 -11700 -11701 -11702 -11703 -11704 -11705 -11706 -11707 -11708 -11709 -11710 -11711 -11712 -11713 -11714 -11715 -11716 -11717 -11718 -11719 -11720 -11721 -11722 -11723 -11724 -11725 -11726 -11727 -11728 -11729 -11730 -11731 -11732 -11733 -11734 -11735 -11736 -11737 -11738 -11739 -11740 -11741 -11742 -11743 -11744 -11745 -11746 -11747 -11748 -11749 -11750 -11751 -11752 -11753 -11754 -11755 -11756 -11757 -11758 -11759 -11760 -11761 -11762 -11763 -11764 -11765 -11766 -11767 -11768 -11769 -11770 -11771 -11772 -11773 -11774 -11775 -11776 -11777 -11778 -11779 -11780 -11781 -11782 -11783 -11784 -11785 -11786 -11787 -11788 -11789 -11790 -11791 -11792 -11793 -11794 -11795 -11796 -11797 -11798 -11799 -11800 -11801 -11802 -11803 -11804 -11805 -11806 -11807 -11808 -11809 -11810 -11811 -11812 -11813 -11814 -11815 -11816 -11817 -11818 -11819 -11820 -11821 -11822 -11823 -11824 -11825 -11826 -11827 -11828 -11829 -11830 -11831 -11832 -11833 -11834 -11835 -11836 -11837 -11838 -11839 -11840 -11841 -11842 -11843 -11844 -11845 -11846 -11847 -11848 -11849 -11850 -11851 -11852 -11853 -11854 -11855 -11856 -11857 -11858 -11859 -11860 -11861 -11862 -11863 -11864 -11865 -11866 -11867 -11868 -11869 -11870 -11871 -11872 -11873 -11874 -11875 -11876 -11877 -11878 -11879 -11880 -11881 -11882 -11883 -11884 -11885 -11886 -11887 -11888 -11889 -11890 -11891 -11892 -11893 -11894 -11895 -11896 -11897 -11898 -11899 -11900 -11901 -11902 -11903 -11904 -11905 -11906 -11907 -11908 -11909 -11910 -11911 -11912 -11913 -11914 -11915 -11916 -11917 -11918 -11919 -11920 -11921 -11922 -11923 -11924 -11925 -11926 -11927 -11928 -11929 -11930 -11931 -11932 -11933 -11934 -11935 -11936 -11937 -11938 -11939 -11940 -11941 -11942 -11943 -11944 -11945 -11946 -11947 -11948 -11949 -11950 -11951 -11952 -11953 -11954 -11955 -11956 -11957 -11958 -11959 -11960 -11961 -11962 -11963 -11964 -11965 -11966 -11967 -11968 -11969 -11970 -11971 -11972 -11973 -11974 -11975 -11976 -11977 -11978 -11979 -11980 -11981 -11982 -11983 -11984 -11985 -11986 -11987 -11988 -11989 -11990 -11991 -11992 -11993 -11994 -11995 -11996 -11997 -11998 -11999 -12000 -12001 -12002 -12003 -12004 -12005 -12006 -12007 -12008 -12009 -12010 -12011 -12012 -12013 -12014 -12015 -12016 -12017 -12018 -12019 -12020 -12021 -12022 -12023 -12024 -12025 -12026 -12027 -12028 -12029 -12030 -12031 -12032 -12033 -12034 -12035 -12036 -12037 -12038 -12039 -12040 -12041 -12042 -12043 -12044 -12045 -12046 -12047 -12048 -12049 -12050 -12051 -12052 -12053 -12054 -12055 -12056 -12057 -12058 -12059 -12060 -12061 -12062 -12063 -12064 -12065 -12066 -12067 -12068 -12069 -12070 -12071 -12072 -12073 -12074 -12075 -12076 -12077 -12078 -12079 -12080 -12081 -12082 -12083 -12084 -12085 -12086 -12087 -12088 -12089 -12090 -12091 -12092 -12093 -12094 -12095 -12096 -12097 -12098 -12099 -12100 -12101 -12102 -12103 -12104 -12105 -12106 -12107 -12108 -12109 -12110 -12111 -12112 -12113 -12114 -12115 -12116 -12117 -12118 -12119 -12120 -12121 -12122 -12123 -12124 -12125 -12126 -12127 -12128 -12129 -12130 -12131 -12132 -12133 -12134 -12135 -12136 -12137 -12138 -12139 -12140 -12141 -12142 -12143 -12144 -12145 -12146 -12147 -12148 -12149 -12150 -12151 -12152 -12153 -12154 -12155 -12156 -12157 -12158 -12159 -12160 -12161 -12162 -12163 -12164 -12165 -12166 -12167 -12168 -12169 -12170 -12171 -12172 -12173 -12174 -12175 -12176 -12177 -12178 -12179 -12180 -12181 -12182 -12183 -12184 -12185 -12186 -12187 -12188 -12189 -12190 -12191 -12192 -12193 -12194 -12195 -12196 -12197 -12198 -12199 -12200 -12201 -12202 -12203 -12204 -12205 -12206 -12207 -12208 -12209 -12210 -12211 -12212 -12213 -12214 -12215 -12216 -12217 -12218 -12219 -12220 -12221 -12222 -12223 -12224 -12225 -12226 -12227 -12228 -12229 -12230 -12231 -12232 -12233 -12234 -12235 -12236 -12237 -12238 -12239 -12240 -12241 -12242 -12243 -12244 -12245 -12246 -12247 -12248 -12249 -12250 -12251 -12252 -12253 -12254 -12255 -12256 -12257 -12258 -12259 -12260 -12261 -12262 -12263 -12264 -12265 -12266 -12267 -12268 -12269 -12270 -12271 -12272 -12273 -12274 -12275 -12276 -12277 -12278 -12279 -12280 -12281 -12282 -12283 -12284 -12285 -12286 -12287 -12288 -12289 -12290 -12291 -12292 -12293 -12294 -12295 -12296 -12297 -12298 -12299 -12300 -12301 -12302 -12303 -12304 -12305 -12306 -12307 -12308 -12309 -12310 -12311 -12312 -12313 -12314 -12315 -12316 -12317 -12318 -12319 -12320 -12321 -12322 -12323 -12324 -12325 -12326 -12327 -12328 -12329 -12330 -12331 -12332 -12333 -12334 -12335 -12336 -12337 -12338 -12339 -12340 -12341 -12342 -12343 -12344 -12345 -12346 -12347 -12348 -12349 -12350 -12351 -12352 -12353 -12354 -12355 -12356 -12357 -12358 -12359 -12360 -12361 -12362 -12363 -12364 -12365 -12366 -12367 -12368 -12369 -12370 -12371 -12372 -12373 -12374 -12375 -12376 -12377 -12378 -12379 -12380 -12381 -12382 -12383 -12384 -12385 -12386 -12387 -12388 -12389 -12390 -12391 -12392 -12393 -12394 -12395 -12396 -12397 -12398 -12399 -12400 -12401 -12402 -12403 -12404 -12405 -12406 -12407 -12408 -12409 -12410 -12411 -12412 -12413 -12414 -12415 -12416 -12417 -12418 -12419 -12420 -12421 -12422 -12423 -12424 -12425 -12426 -12427 -12428 -12429 -12430 -12431 -12432 -12433 -12434 -12435 -12436 -12437 -12438 -12439 -12440 -12441 -12442 -12443 -12444 -12445 -12446 -12447 -12448 -12449 -12450 -12451 -12452 -12453 -12454 -12455 -12456 -12457 -12458 -12459 -12460 -12461 -12462 -12463 -12464 -12465 -12466 -12467 -12468 -12469 -12470 -12471 -12472 -12473 -12474 -12475 -12476 -12477 -12478 -12479 -12480 -12481 -12482 -12483 -12484 -12485 -12486 -12487 -12488 -12489 -12490 -12491 -12492 -12493 -12494 -12495 -12496 -12497 -12498 -12499 -12500 -12501 -12502 -12503 -12504 -12505 -12506 -12507 -12508 -12509 -12510 -12511 -12512 -12513 -12514 -12515 -12516 -12517 -12518 -12519 -12520 -12521 -12522 -12523 -12524 -12525 -12526 -12527 -12528 -12529 -12530 -12531 -12532 -12533 -12534 -12535 -12536 -12537 -12538 -12539 -12540 -12541 -12542 -12543 -12544 -12545 -12546 -12547 -12548 -12549 -12550 -12551 -12552 -12553 -12554 -12555 -12556 -12557 -12558 -12559 -12560 -12561 -12562 -12563 -12564 -12565 -12566 -12567 -12568 -12569 -12570 -12571 -12572 -12573 -12574 -12575 -12576 -12577 -12578 -12579 -12580 -12581 -12582 -12583 -12584 -12585 -12586 -12587 -12588 -12589 -12590 -12591 -12592 -12593 -12594 -12595 -12596 -12597 -12598 -12599 -12600 -12601 -12602 -12603 -12604 -12605 -12606 -12607 -12608 -12609 -12610 -12611 -12612 -12613 -12614 -12615 -12616 -12617 -12618 -12619 -12620 -12621 -12622 -12623 -12624 -12625 -12626 -12627 -12628 -12629 -12630 -12631 -12632 -12633 -12634 -12635 -12636 -12637 -12638 -12639 -12640 -12641 -12642 -12643 -12644 -12645 -12646 -12647 -12648 -12649 -12650 -12651 -12652 -12653 -12654 -12655 -12656 -12657 -12658 -12659 -12660 -12661 -12662 -12663 -12664 -12665 -12666 -12667 -12668 -12669 -12670 -12671 -12672 -12673 -12674 -12675 -12676 -12677 -12678 -12679 -12680 -12681 -12682 -12683 -12684 -12685 -12686 -12687 -12688 -12689 -12690 -12691 -12692 -12693 -12694 -12695 -12696 -12697 -12698 -12699 -12700 -12701 -12702 -12703 -12704 -12705 -12706 -12707 -12708 -12709 -12710 -12711 -12712 -12713 -12714 -12715 -12716 -12717 -12718 -12719 -12720 -12721 -12722 -12723 -12724 -12725 -12726 -12727 -12728 -12729 -12730 -12731 -12732 -12733 -12734 -12735 -12736 -12737 -12738 -12739 -12740 -12741 -12742 -12743 -12744 -12745 -12746 -12747 -12748 -12749 -12750 -12751 -12752 -12753 -12754 -12755 -12756 -12757 -12758 -12759 -12760 -12761 -12762 -12763 -12764 -12765 -12766 -12767 -12768 -12769 -12770 -12771 -12772 -12773 -12774 -12775 -12776 -12777 -12778 -12779 -12780 -12781 -12782 -12783 -12784 -12785 -12786 -12787 -12788 -12789 -12790 -12791 -12792 -12793 -12794 -12795 -12796 -12797 -12798 -12799 -12800 -12801 -12802 -12803 -12804 -12805 -12806 -12807 -12808 -12809 -12810 -12811 -12812 -12813 -12814 -12815 -12816 -12817 -12818 -12819 -12820 -12821 -12822 -12823 -12824 -12825 -12826 -12827 -12828 -12829 -12830 -12831 -12832 -12833 -12834 -12835 -12836 -12837 -12838 -12839 -12840 -12841 -12842 -12843 -12844 -12845 -12846 -12847 -12848 -12849 -12850 -12851 -12852 -12853 -12854 -12855 -12856 -12857 -12858 -12859 -12860 -12861 -12862 -12863 -12864 -12865 -12866 -12867 -12868 -12869 -12870 -12871 -12872 -12873 -12874 -12875 -12876 -12877 -12878 -12879 -12880 -12881 -12882 -12883 -12884 -12885 -12886 -12887 -12888 -12889 -12890 -12891 -12892 -12893 -12894 -12895 -12896 -12897 -12898 -12899 -12900 -12901 -12902 -12903 -12904 -12905 -12906 -12907 -12908 -12909 -12910 -12911 -12912 -12913 -12914 -12915 -12916 -12917 -12918 -12919 -12920 -12921 -12922 -12923 -12924 -12925 -12926 -12927 -12928 -12929 -12930 -12931 -12932 -12933 -12934 -12935 -12936 -12937 -12938 -12939 -12940 -12941 -12942 -12943 -12944 -12945 -12946 -12947 -12948 -12949 -12950 -12951 -12952 -12953 -12954 -12955 -12956 -12957 -12958 -12959 -12960 -12961 -12962 -12963 -12964 -12965 -12966 -12967 -12968 -12969 -12970 -12971 -12972 -12973 -12974 -12975 -12976 -12977 -12978 -12979 -12980 -12981 -12982 -12983 -12984 -12985 -12986 -12987 -12988 -12989 -12990 -12991 -12992 -12993 -12994 -12995 -12996 -12997 -12998 -12999 -13000 -13001 -13002 -13003 -13004 -13005 -13006 -13007 -13008 -13009 -13010 -13011 -13012 -13013 -13014 -13015 -13016 -13017 -13018 -13019 -13020 -13021 -13022 -13023 -13024 -13025 -13026 -13027 -13028 -13029 -13030 -13031 -13032 -13033 -13034 -13035 -13036 -13037 -13038 -13039 -13040 -13041 -13042 -13043 -13044 -13045 -13046 -13047 -13048 -13049 -13050 -13051 -13052 -13053 -13054 -13055 -13056 -13057 -13058 -13059 -13060 -13061 -13062 -13063 -13064 -13065 -13066 -13067 -13068 -13069 -13070 -13071 -13072 -13073 -13074 -13075 -13076 -13077 -13078 -13079 -13080 -13081 -13082 -13083 -13084 -13085 -13086 -13087 -13088 -13089 -13090 -13091 -13092 -13093 -13094 -13095 -13096 -13097 -13098 -13099 -13100 -13101 -13102 -13103 -13104 -13105 -13106 -13107 -13108 -13109 -13110 -13111 -13112 -13113 -13114 -13115 -13116 -13117 -13118 -13119 -13120 -13121 -13122 -13123 -13124 -13125 -13126 -13127 -13128 -13129 -13130 -13131 -13132 -13133 -13134 -13135 -13136 -13137 -13138 -13139 -13140 -13141 -13142 -13143 -13144 -13145 -13146 -13147 -13148 -13149 -13150 -13151 -13152 -13153 -13154 -13155 -13156 -13157 -13158 -13159 -13160 -13161 -13162 -13163 -13164 -13165 -13166 -13167 -13168 -13169 -13170 -13171 -13172 -13173 -13174 -13175 -13176 -13177 -13178 -13179 -13180 -13181 -13182 -13183 -13184 -13185 -13186 -13187 -13188 -13189 -13190 -13191 -13192 -13193 -13194 -13195 -13196 -13197 -13198 -13199 -13200 -13201 -13202 -13203 -13204 -13205 -13206 -13207 -13208 -13209 -13210 -13211 -13212 -13213 -13214 -13215 -13216 -13217 -13218 -13219 -13220 -13221 -13222 -13223 -13224 -13225 -13226 -13227 -13228 -13229 -13230 -13231 -13232 -13233 -13234 -13235 -13236 -13237 -13238 -13239 -13240 -13241 -13242 -13243 -13244 -13245 -13246 -13247 -13248 -13249 -13250 -13251 -13252 -13253 -13254 -13255 -13256 -13257 -13258 -13259 -13260 -13261 -13262 -13263 -13264 -13265 -13266 -13267 -13268 -13269 -13270 -13271 -13272 -13273 -13274 -13275 -13276 -13277 -13278 -13279 -13280 -13281 -13282 -13283 -13284 -13285 -13286 -13287 -13288 -13289 -13290 -13291 -13292 -13293 -13294 -13295 -13296 -13297 -13298 -13299 -13300 -13301 -13302 -13303 -13304 -13305 -13306 -13307 -13308 -13309 -13310 -13311 -13312 -13313 -13314 -13315 -13316 -13317 -13318 -13319 -13320 -13321 -13322 -13323 -13324 -13325 -13326 -13327 -13328 -13329 -13330 -13331 -13332 -13333 -13334 -13335 -13336 -13337 -13338 -13339 -13340 -13341 -13342 -13343 -13344 -13345 -13346 -13347 -13348 -13349 -13350 -13351 -13352 -13353 -13354 -13355 -13356 -13357 -13358 -13359 -13360 -13361 -13362 -13363 -13364 -13365 -13366 -13367 -13368 -13369 -13370 -13371 -13372 -13373 -13374 -13375 -13376 -13377 -13378 -13379 -13380 -13381 -13382 -13383 -13384 -13385 -13386 -13387 -13388 -13389 -13390 -13391 -13392 -13393 -13394 -13395 -13396 -13397 -13398 -13399 -13400 -13401 -13402 -13403 -13404 -13405 -13406 -13407 -13408 -13409 -13410 -13411 -13412 -13413 -13414 -13415 -13416 -13417 -13418 -13419 -13420 -13421 -13422 -13423 -13424 -13425 -13426 -13427 -13428 -13429 -13430 -13431 -13432 -13433 -13434 -13435 -13436 -13437 -13438 -13439 -13440 -13441 -13442 -13443 -13444 -13445 -13446 -13447 -13448 -13449 -13450 -13451 -13452 -13453 -13454 -13455 -13456 -13457 -13458 -13459 -13460 -13461 -13462 -13463 -13464 -13465 -13466 -13467 -13468 -13469 -13470 -13471 -13472 -13473 -13474 -13475 -13476 -13477 -13478 -13479 -13480 -13481 -13482 -13483 -13484 -13485 -13486 -13487 -13488 -13489 -13490 -13491 -13492 -13493 -13494 -13495 -13496 -13497 -13498 -13499 -13500 -13501 -13502 -13503 -13504 -13505 -13506 -13507 -13508 -13509 -13510 -13511 -13512 -13513 -13514 -13515 -13516 -13517 -13518 -13519 -13520 -13521 -13522 -13523 -13524 -13525 -13526 -13527 -13528 -13529 -13530 -13531 -13532 -13533 -13534 -13535 -13536 -13537 -13538 -13539 -13540 -13541 -13542 -13543 -13544 -13545 -13546 -13547 -13548 -13549 -13550 -13551 -13552 -13553 -13554 -13555 -13556 -13557 -13558 -13559 -13560 -13561 -13562 -13563 -13564 -13565 -13566 -13567 -13568 -13569 -13570 -13571 -13572 -13573 -13574 -13575 -13576 -13577 -13578 -13579 -13580 -13581 -13582 -13583 -13584 -13585 -13586 -13587 -13588 -13589 -13590 -13591 -13592 -13593 -13594 -13595 -13596 -13597 -13598 -13599 -13600 -13601 -13602 -13603 -13604 -13605 -13606 -13607 -13608 -13609 -13610 -13611 -13612 -13613 -13614 -13615 -13616 -13617 -13618 -13619 -13620 -13621 -13622 -13623 -13624 -13625 -13626 -13627 -13628 -13629 -13630 -13631 -13632 -13633 -13634 -13635 -13636 -13637 -13638 -13639 -13640 -13641 -13642 -13643 -13644 -13645 -13646 -13647 -13648 -13649 -13650 -13651 -13652 -13653 -13654 -13655 -13656 -13657 -13658 -13659 -13660 -13661 -13662 -13663 -13664 -13665 -13666 -13667 -13668 -13669 -13670 -13671 -13672 -13673 -13674 -13675 -13676 -13677 -13678 -13679 -13680 -13681 -13682 -13683 -13684 -13685 -13686 -13687 -13688 -13689 -13690 -13691 -13692 -13693 -13694 -13695 -13696 -13697 -13698 -13699 -13700 -13701 -13702 -13703 -13704 -13705 -13706 -13707 -13708 -13709 -13710 -13711 -13712 -13713 -13714 -13715 -13716 -13717 -13718 -13719 -13720 -13721 -13722 -13723 -13724 -13725 -13726 -13727 -13728 -13729 -13730 -13731 -13732 -13733 -13734 -13735 -13736 -13737 -13738 -13739 -13740 -13741 -13742 -13743 -13744 -13745 -13746 -13747 -13748 -13749 -13750 -13751 -13752 -13753 -13754 -13755 -13756 -13757 -13758 -13759 -13760 -13761 -13762 -13763 -13764 -13765 -13766 -13767 -13768 -13769 -13770 -13771 -13772 -13773 -13774 -13775 -13776 -13777 -13778 -13779 -13780 -13781 -13782 -13783 -13784 -13785 -13786 -13787 -13788 -13789 -13790 -13791 -13792 -13793 -13794 -13795 -13796 -13797 -13798 -13799 -13800 -13801 -13802 -13803 -13804 -13805 -13806 -13807 -13808 -13809 -13810 -13811 -13812 -13813 -13814 -13815 -13816 -13817 -13818 -13819 -13820 -13821 -13822 -13823 -13824 -13825 -13826 -13827 -13828 -13829 -13830 -13831 -13832 -13833 -13834 -13835 -13836 -13837 -13838 -13839 -13840 -13841 -13842 -13843 -13844 -13845 -13846 -13847 -13848 -13849 -13850 -13851 -13852 -13853 -13854 -13855 -13856 -13857 -13858 -13859 -13860 -13861 -13862 -13863 -13864 -13865 -13866 -13867 -13868 -13869 -13870 -13871 -13872 -13873 -13874 -13875 -13876 -13877 -13878 -13879 -13880 -13881 -13882 -13883 -13884 -13885 -13886 -13887 -13888 -13889 -13890 -13891 -13892 -13893 -13894 -13895 -13896 -13897 -13898 -13899 -13900 -13901 -13902 -13903 -13904 -13905 -13906 -13907 -13908 -13909 -13910 -13911 -13912 -13913 -13914 -13915 -13916 -13917 -13918 -13919 -13920 -13921 -13922 -13923 -13924 -13925 -13926 -13927 -13928 -13929 -13930 -13931 -13932 -13933 -13934 -13935 -13936 -13937 -13938 -13939 -13940 -13941 -13942 -13943 -13944 -13945 -13946 -13947 -13948 -13949 -13950 -13951 -13952 -13953 -13954 -13955 -13956 -13957 -13958 -13959 -13960 -13961 -13962 -13963 -13964 -13965 -13966 -13967 -13968 -13969 -13970 -13971 -13972 -13973 -13974 -13975 -13976 -13977 -13978 -13979 -13980 -13981 -13982 -13983 -13984 -13985 -13986 -13987 -13988 -13989 -13990 -13991 -13992 -13993 -13994 -13995 -13996 -13997 -13998 -13999 -14000 -14001 -14002 -14003 -14004 -14005 -14006 -14007 -14008 -14009 -14010 -14011 -14012 -14013 -14014 -14015 -14016 -14017 -14018 -14019 -14020 -14021 -14022 -14023 -14024 -14025 -14026 -14027 -14028 -14029 -14030 -14031 -14032 -14033 -14034 -14035 -14036 -14037 -14038 -14039 -14040 -14041 -14042 -14043 -14044 -14045 -14046 -14047 -14048 -14049 -14050 -14051 -14052 -14053 -14054 -14055 -14056 -14057 -14058 -14059 -14060 -14061 -14062 -14063 -14064 -14065 -14066 -14067 -14068 -14069 -14070 -14071 -14072 -14073 -14074 -14075 -14076 -14077 -14078 -14079 -14080 -14081 -14082 -14083 -14084 -14085 -14086 -14087 -14088 -14089 -14090 -14091 -14092 -14093 -14094 -14095 -14096 -14097 -14098 -14099 -14100 -14101 -14102 -14103 -14104 -14105 -14106 -14107 -14108 -14109 -14110 -14111 -14112 -14113 -14114 -14115 -14116 -14117 -14118 -14119 -14120 -14121 -14122 -14123 -14124 -14125 -14126 -14127 -14128 -14129 -14130 -14131 -14132 -14133 -14134 -14135 -14136 -14137 -14138 -14139 -14140 -14141 -14142 -14143 -14144 -14145 -14146 -14147 -14148 -14149 -14150 -14151 -14152 -14153 -14154 -14155 -14156 -14157 -14158 -14159 -14160 -14161 -14162 -14163 -14164 -14165 -14166 -14167 -14168 -14169 -14170 -14171 -14172 -14173 -14174 -14175 -14176 -14177 -14178 -14179 -14180 -14181 -14182 -14183 -14184 -14185 -14186 -14187 -14188 -14189 -14190 -14191 -14192 -14193 -14194 -14195 -14196 -14197 -14198 -14199 -14200 -14201 -14202 -14203 -14204 -14205 -14206 -14207 -14208 -14209 -14210 -14211 -14212 -14213 -14214 -14215 -14216 -14217 -14218 -14219 -14220 -14221 -14222 -14223 -14224 -14225 -14226 -14227 -14228 -14229 -14230 -14231 -14232 -14233 -14234 -14235 -14236 -14237 -14238 -14239 -14240 -14241 -14242 -14243 -14244 -14245 -14246 -14247 -14248 -14249 -14250 -14251 -14252 -14253 -14254 -14255 -14256 -14257 -14258 -14259 -14260 -14261 -14262 -14263 -14264 -14265 -14266 -14267 -14268 -14269 -14270 -14271 -14272 -14273 -14274 -14275 -14276 -14277 -14278 -14279 -14280 -14281 -14282 -14283 -14284 -14285 -14286 -14287 -14288 -14289 -14290 -14291 -14292 -14293 -14294 -14295 -14296 -14297 -14298 -14299 -14300 -14301 -14302 -14303 -14304 -14305 -14306 -14307 -14308 -14309 -14310 -14311 -14312 -14313 -14314 -14315 -14316 -14317 -14318 -14319 -14320 -14321 -14322 -14323 -14324 -14325 -14326 -14327 -14328 -14329 -14330 -14331 -14332 -14333 -14334 -14335 -14336 -14337 -14338 -14339 -14340 -14341 -14342 -14343 -14344 -14345 -14346 -14347 -14348 -14349 -14350 -14351 -14352 -14353 -14354 -14355 -14356 -14357 -14358 -14359 -14360 -14361 -14362 -14363 -14364 -14365 -14366 -14367 -14368 -14369 -14370 -14371 -14372 -14373 -14374 -14375 -14376 -14377 -14378 -14379 -14380 -14381 -14382 -14383 -14384 -14385 -14386 -14387 -14388 -14389 -14390 -14391 -14392 -14393 -14394 -14395 -14396 -14397 -14398 -14399 -14400 -14401 -14402 -14403 -14404 -14405 -14406 -14407 -14408 -14409 -14410 -14411 -14412 -14413 -14414 -14415 -14416 -14417 -14418 -14419 -14420 -14421 -14422 -14423 -14424 -14425 -14426 -14427 -14428 -14429 -14430 -14431 -14432 -14433 -14434 -14435 -14436 -14437 -14438 -14439 -14440 -14441 -14442 -14443 -14444 -14445 -14446 -14447 -14448 -14449 -14450 -14451 -14452 -14453 -14454 -14455 -14456 -14457 -14458 -14459 -14460 -14461 -14462 -14463 -14464 -14465 -14466 -14467 -14468 -14469 -14470 -14471 -14472 -14473 -14474 -14475 -14476 -14477 -14478 -14479 -14480 -14481 -14482 -14483 -14484 -14485 -14486 -14487 -14488 -14489 -14490 -14491 -14492 -14493 -14494 -14495 -14496 -14497 -14498 -14499 -14500 -14501 -14502 -14503 -14504 -14505 -14506 -14507 -14508 -14509 -14510 -14511 -14512 -14513 -14514 -14515 -14516 -14517 -14518 -14519 -14520 -14521 -14522 -14523 -14524 -14525 -14526 -14527 -14528 -14529 -14530 -14531 -14532 -14533 -14534 -14535 -14536 -14537 -14538 -14539 -14540 -14541 -14542 -14543 -14544 -14545 -14546 -14547 -14548 -14549 -14550 -14551 -14552 -14553 -14554 -14555 -14556 -14557 -14558 -14559 -14560 -14561 -14562 -14563 -14564 -14565 -14566 -14567 -14568 -14569 -14570 -14571 -14572 -14573 -14574 -14575 -14576 -14577 -14578 -14579 -14580 -14581 -14582 -14583 -14584 -14585 -14586 -14587 -14588 -14589 -14590 -14591 -14592 -14593 -14594 -14595 -14596 -14597 -14598 -14599 -14600 -14601 -14602 -14603 -14604 -14605 -14606 -14607 -14608 -14609 -14610 -14611 -14612 -14613 -14614 -14615 -14616 -14617 -14618 -14619 -14620 -14621 -14622 -14623 -14624 -14625 -14626 -14627 -14628 -14629 -14630 -14631 -14632 -14633 -14634 -14635 -14636 -14637 -14638 -14639 -14640 -14641 -14642 -14643 -14644 -14645 -14646 -14647 -14648 -14649 -14650 -14651 -14652 -14653 -14654 -14655 -14656 -14657 -14658 -14659 -14660 -14661 -14662 -14663 -14664 -14665 -14666 -14667 -14668 -14669 -14670 -14671 -14672 -14673 -14674 -14675 -14676 -14677 -14678 -14679 -14680 -14681 -14682 -14683 -14684 -14685 -14686 -14687 -14688 -14689 -14690 -14691 -14692 -14693 -14694 -14695 -14696 -14697 -14698 -14699 -14700 -14701 -14702 -14703 -14704 -14705 -14706 -14707 -14708 -14709 -14710 -14711 -14712 -14713 -14714 -14715 -14716 -14717 -14718 -14719 -14720 -14721 -14722 -14723 -14724 -14725 -14726 -14727 -14728 -14729 -14730 -14731 -14732 -14733 -14734 -14735 -14736 -14737 -14738 -14739 -14740 -14741 -14742 -14743 -14744 -14745 -14746 -14747 -14748 -14749 -14750 -14751 -14752 -14753 -14754 -14755 -14756 -14757 -14758 -14759 -14760 -14761 -14762 -14763 -14764 -14765 -14766 -14767 -14768 -14769 -14770 -14771 -14772 -14773 -14774 -14775 -14776 -14777 -14778 -14779 -14780 -14781 -14782 -14783 -14784 -14785 -14786 -14787 -14788 -14789 -14790 -14791 -14792 -14793 -14794 -14795 -14796 -14797 -14798 -14799 -14800 -14801 -14802 -14803 -14804 -14805 -14806 -14807 -14808 -14809 -14810 -14811 -14812 -14813 -14814 -14815 -14816 -14817 -14818 -14819 -14820 -14821 -14822 -14823 -14824 -14825 -14826 -14827 -14828 -14829 -14830 -14831 -14832 -14833 -14834 -14835 -14836 -14837 -14838 -14839 -14840 -14841 -14842 -14843 -14844 -14845 -14846 -14847 -14848 -14849 -14850 -14851 -14852 -14853 -14854 -14855 -14856 -14857 -14858 -14859 -14860 -14861 -14862 -14863 -14864 -14865 -14866 -14867 -14868 -14869 -14870 -14871 -14872 -14873 -14874 -14875 -14876 -14877 -14878 -14879 -14880 -14881 -14882 -14883 -14884 -14885 -14886 -14887 -14888 -14889 -14890 -14891 -14892 -14893 -14894 -14895 -14896 -14897 -14898 -14899 -14900 -14901 -14902 -14903 -14904 -14905 -14906 -14907 -14908 -14909 -14910 -14911 -14912 -14913 -14914 -14915 -14916 -14917 -14918 -14919 -14920 -14921 -14922 -14923 -14924 -14925 -14926 -14927 -14928 -14929 -14930 -14931 -14932 -14933 -14934 -14935 -14936 -14937 -14938 -14939 -14940 -14941 -14942 -14943 -14944 -14945 -14946 -14947 -14948 -14949 -14950 -14951 -14952 -14953 -14954 -14955 -14956 -14957 -14958 -14959 -14960 -14961 -14962 -14963 -14964 -14965 -14966 -14967 -14968 -14969 -14970 -14971 -14972 -14973 -14974 -14975 -14976 -14977 -14978 -14979 -14980 -14981 -14982 -14983 -14984 -14985 -14986 -14987 -14988 -14989 -14990 -14991 -14992 -14993 -14994 -14995 -14996 -14997 -14998 -14999 -15000 -15001 -15002 -15003 -15004 -15005 -15006 -15007 -15008 -15009 -15010 -15011 -15012 -15013 -15014 -15015 -15016 -15017 -15018 -15019 -15020 -15021 -15022 -15023 -15024 -15025 -15026 -15027 -15028 -15029 -15030 -15031 -15032 -15033 -15034 -15035 -15036 -15037 -15038 -15039 -15040 -15041 -15042 -15043 -15044 -15045 -15046 -15047 -15048 -15049 -15050 -15051 -15052 -15053 -15054 -15055 -15056 -15057 -15058 -15059 -15060 -15061 -15062 -15063 -15064 -15065 -15066 -15067 -15068 -15069 -15070 -15071 -15072 -15073 -15074 -15075 -15076 -15077 -15078 -15079 -15080 -15081 -15082 -15083 -15084 -15085 -15086 -15087 -15088 -15089 -15090 -15091 -15092 -15093 -15094 -15095 -15096 -15097 -15098 -15099 -15100 -15101 -15102 -15103 -15104 -15105 -15106 -15107 -15108 -15109 -15110 -15111 -15112 -15113 -15114 -15115 -15116 -15117 -15118 -15119 -15120 -15121 -15122 -15123 -15124 -15125 -15126 -15127 -15128 -15129 -15130 -15131 -15132 -15133 -15134 -15135 -15136 -15137 -15138 -15139 -15140 -15141 -15142 -15143 -15144 -15145 -15146 -15147 -15148 -15149 -15150 -15151 -15152 -15153 -15154 -15155 -15156 -15157 -15158 -15159 -15160 -15161 -15162 -15163 -15164 -15165 -15166 -15167 -15168 -15169 -15170 -15171 -15172 -15173 -15174 -15175 -15176 -15177 -15178 -15179 -15180 -15181 -15182 -15183 -15184 -15185 -15186 -15187 -15188 -15189 -15190 -15191 -15192 -15193 -15194 -15195 -15196 -15197 -15198 -15199 -15200 -15201 -15202 -15203 -15204 -15205 -15206 -15207 -15208 -15209 -15210 -15211 -15212 -15213 -15214 -15215 -15216 -15217 -15218 -15219 -15220 -15221 -15222 -15223 -15224 -15225 -15226 -15227 -15228 -15229 -15230 -15231 -15232 -15233 -15234 -15235 -15236 -15237 -15238 -15239 -15240 -15241 -15242 -15243 -15244 -15245 -15246 -15247 -15248 -15249 -15250 -15251 -15252 -15253 -15254 -15255 -15256 -15257 -15258 -15259 -15260 -15261 -15262 -15263 -15264 -15265 -15266 -15267 -15268 -15269 -15270 -15271 -15272 -15273 -15274 -15275 -15276 -15277 -15278 -15279 -15280 -15281 -15282 -15283 -15284 -15285 -15286 -15287 -15288 -15289 -15290 -15291 -15292 -15293 -15294 -15295 -15296 -15297 -15298 -15299 -15300 -15301 -15302 -15303 -15304 -15305 -15306 -15307 -15308 -15309 -15310 -15311 -15312 -15313 -15314 -15315 -15316 -15317 -15318 -15319 -15320 -15321 -15322 -15323 -15324 -15325 -15326 -15327 -15328 -15329 -15330 -15331 -15332 -15333 -15334 -15335 -15336 -15337 -15338 -15339 -15340 -15341 -15342 -15343 -15344 -15345 -15346 -15347 -15348 -15349 -15350 -15351 -15352 -15353 -15354 -15355 -15356 -15357 -15358 -15359 -15360 -15361 -15362 -15363 -15364 -15365 -15366 -15367 -15368 -15369 -15370 -15371 -15372 -15373 -15374 -15375 -15376 -15377 -15378 -15379 -15380 -15381 -15382 -15383 -15384 -15385 -15386 -15387 -15388 -15389 -15390 -15391 -15392 -15393 -15394 -15395 -15396 -15397 -15398 -15399 -15400 -15401 -15402 -15403 -15404 -15405 -15406 -15407 -15408 -15409 -15410 -15411 -15412 -15413 -15414 -15415 -15416 -15417 -15418 -15419 -15420 -15421 -15422 -15423 -15424 -15425 -15426 -15427 -15428 -15429 -15430 -15431 -15432 -15433 -15434 -15435 -15436 -15437 -15438 -15439 -15440 -15441 -15442 -15443 -15444 -15445 -15446 -15447 -15448 -15449 -15450 -15451 -15452 -15453 -15454 -15455 -15456 -15457 -15458 -15459 -15460 -15461 -15462 -15463 -15464 -15465 -15466 -15467 -15468 -15469 -15470 -15471 -15472 -15473 -15474 -15475 -15476 -15477 -15478 -15479 -15480 -15481 -15482 -15483 -15484 -15485 -15486 -15487 -15488 -15489 -15490 -15491 -15492 -15493 -15494 -15495 -15496 -15497 -15498 -15499 -15500 -15501 -15502 -15503 -15504 -15505 -15506 -15507 -15508 -15509 -15510 -15511 -15512 -15513 -15514 -15515 -15516 -15517 -15518 -15519 -15520 -15521 -15522 -15523 -15524 -15525 -15526 -15527 -15528 -15529 -15530 -15531 -15532 -15533 -15534 -15535 -15536 -15537 -15538 -15539 -15540 -15541 -15542 -15543 -15544 -15545 -15546 -15547 -15548 -15549 -15550 -15551 -15552 -15553 -15554 -15555 -15556 -15557 -15558 -15559 -15560 -15561 -15562 -15563 -15564 -15565 -15566 -15567 -15568 -15569 -15570 -15571 -15572 -15573 -15574 -15575 -15576 -15577 -15578 -15579 -15580 -15581 -15582 -15583 -15584 -15585 -15586 -15587 -15588 -15589 -15590 -15591 -15592 -15593 -15594 -15595 -15596 -15597 -15598 -15599 -15600 -15601 -15602 -15603 -15604 -15605 -15606 -15607 -15608 -15609 -15610 -15611 -15612 -15613 -15614 -15615 -15616 -15617 -15618 -15619 -15620 -15621 -15622 -15623 -15624 -15625 -15626 -15627 -15628 -15629 -15630 -15631 -15632 -15633 -15634 -15635 -15636 -15637 -15638 -15639 -15640 -15641 -15642 -15643 -15644 -15645 -15646 -15647 -15648 -15649 -15650 -15651 -15652 -15653 -15654 -15655 -15656 -15657 -15658 -15659 -15660 -15661 -15662 -15663 -15664 -15665 -15666 -15667 -15668 -15669 -15670 -15671 -15672 -15673 -15674 -15675 -15676 -15677 -15678 -15679 -15680 -15681 -15682 -15683 -15684 -15685 -15686 -15687 -15688 -15689 -15690 -15691 -15692 -15693 -15694 -15695 -15696 -15697 -15698 -15699 -15700 -15701 -15702 -15703 -15704 -15705 -15706 -15707 -15708 -15709 -15710 -15711 -15712 -15713 -15714 -15715 -15716 -15717 -15718 -15719 -15720 -15721 -15722 -15723 -15724 -15725 -15726 -15727 -15728 -15729 -15730 -15731 -15732 -15733 -15734 -15735 -15736 -15737 -15738 -15739 -15740 -15741 -15742 -15743 -15744 -15745 -15746 -15747 -15748 -15749 -15750 -15751 -15752 -15753 -15754 -15755 -15756 -15757 -15758 -15759 -15760 -15761 -15762 -15763 -15764 -15765 -15766 -15767 -15768 -15769 -15770 -15771 -15772 -15773 -15774 -15775 -15776 -15777 -15778 -15779 -15780 -15781 -15782 -15783 -15784 -15785 -15786 -15787 -15788 -15789 -15790 -15791 -15792 -15793 -15794 -15795 -15796 -15797 -15798 -15799 -15800 -15801 -15802 -15803 -15804 -15805 -15806 -15807 -15808 -15809 -15810 -15811 -15812 -15813 -15814 -15815 -15816 -15817 -15818 -15819 -15820 -15821 -15822 -15823 -15824 -15825 -15826 -15827 -15828 -15829 -15830 -15831 -15832 -15833 -15834 -15835 -15836 -15837 -15838 -15839 -15840 -15841 -15842 -15843 -15844 -15845 -15846 -15847 -15848 -15849 -15850 -15851 -15852 -15853 -15854 -15855 -15856 -15857 -15858 -15859 -15860 -15861 -15862 -15863 -15864 -15865 -15866 -15867 -15868 -15869 -15870 -15871 -15872 -15873 -15874 -15875 -15876 -15877 -15878 -15879 -15880 -15881 -15882 -15883 -15884 -15885 -15886 -15887 -15888 -15889 -15890 -15891 -15892 -15893 -15894 -15895 -15896 -15897 -15898 -15899 -15900 -15901 -15902 -15903 -15904 -15905 -15906 -15907 -15908 -15909 -15910 -15911 -15912 -15913 -15914 -15915 -15916 -15917 -15918 -15919 -15920 -15921 -15922 -15923 -15924 -15925 -15926 -15927 -15928 -15929 -15930 -15931 -15932 -15933 -15934 -15935 -15936 -15937 -15938 -15939 -15940 -15941 -15942 -15943 -15944 -15945 -15946 -15947 -15948 -15949 -15950 -15951 -15952 -15953 -15954 -15955 -15956 -15957 -15958 -15959 -15960 -15961 -15962 -15963 -15964 -15965 -15966 -15967 -15968 -15969 -15970 -15971 -15972 -15973 -15974 -15975 -15976 -15977 -15978 -15979 -15980 -15981 -15982 -15983 -15984 -15985 -15986 -15987 -15988 -15989 -15990 -15991 -15992 -15993 -15994 -15995 -15996 -15997 -15998 -15999 -16000 -16001 -16002 -16003 -16004 -16005 -16006 -16007 -16008 -16009 -16010 -16011 -16012 -16013 -16014 -16015 -16016 -16017 -16018 -16019 -16020 -16021 -16022 -16023 -16024 -16025 -16026 -16027 -16028 -16029 -16030 -16031 -16032 -16033 -16034 -16035 -16036 -16037 -16038 -16039 -16040 -16041 -16042 -16043 -16044 -16045 -16046 -16047 -16048 -16049 -16050 -16051 -16052 -16053 -16054 -16055 -16056 -16057 -16058 -16059 -16060 -16061 -16062 -16063 -16064 -16065 -16066 -16067 -16068 -16069 -16070 -16071 -16072 -16073 -16074 -16075 -16076 -16077 -16078 -16079 -16080 -16081 -16082 -16083 -16084 -16085 -16086 -16087 -16088 -16089 -16090 -16091 -16092 -16093 -16094 -16095 -16096 -16097 -16098 -16099 -16100 -16101 -16102 -16103 -16104 -16105 -16106 -16107 -16108 -16109 -16110 -16111 -16112 -16113 -16114 -16115 -16116 -16117 -16118 -16119 -16120 -16121 -16122 -16123 -16124 -16125 -16126 -16127 -16128 -16129 -16130 -16131 -16132 -16133 -16134 -16135 -16136 -16137 -16138 -16139 -16140 -16141 -16142 -16143 -16144 -16145 -16146 -16147 -16148 -16149 -16150 -16151 -16152 -16153 -16154 -16155 -16156 -16157 -16158 -16159 -16160 -16161 -16162 -16163 -16164 -16165 -16166 -16167 -16168 -16169 -16170 -16171 -16172 -16173 -16174 -16175 -16176 -16177 -16178 -16179 -16180 -16181 -16182 -16183 -16184 -16185 -16186 -16187 -16188 -16189 -16190 -16191 -16192 -16193 -16194 -16195 -16196 -16197 -16198 -16199 -16200 -16201 -16202 -16203 -16204 -16205 -16206 -16207 -16208 -16209 -16210 -16211 -16212 -16213 -16214 -16215 -16216 -16217 -16218 -16219 -16220 -16221 -16222 -16223 -16224 -16225 -16226 -16227 -16228 -16229 -16230 -16231 -16232 -16233 -16234 -16235 -16236 -16237 -16238 -16239 -16240 -16241 -16242 -16243 -16244 -16245 -16246 -16247 -16248 -16249 -16250 -16251 -16252 -16253 -16254 -16255 -16256 -16257 -16258 -16259 -16260 -16261 -16262 -16263 -16264 -16265 -16266 -16267 -16268 -16269 -16270 -16271 -16272 -16273 -16274 -16275 -16276 -16277 -16278 -16279 -16280 -16281 -16282 -16283 -16284 -16285 -16286 -16287 -16288 -16289 -16290 -16291 -16292 -16293 -16294 -16295 -16296 -16297 -16298 -16299 -16300 -16301 -16302 -16303 -16304 -16305 -16306 -16307 -16308 -16309 -16310 -16311 -16312 -16313 -16314 -16315 -16316 -16317 -16318 -16319 -16320 -16321 -16322 -16323 -16324 -16325 -16326 -16327 -16328 -16329 -16330 -16331 -16332 -16333 -16334 -16335 -16336 -16337 -16338 -16339 -16340 -16341 -16342 -16343 -16344 -16345 -16346 -16347 -16348 -16349 -16350 -16351 -16352 -16353 -16354 -16355 -16356 -16357 -16358 -16359 -16360 -16361 -16362 -16363 -16364 -16365 -16366 -16367 -16368 -16369 -16370 -16371 -16372 -16373 -16374 -16375 -16376 -16377 -16378 -16379 -16380 -16381 -16382 -16383 -16384 -16385 -16386 -16387 -16388 -16389 -16390 -16391 -16392 -16393 -16394 -16395 -16396 -16397 -16398 -16399 -16400 -16401 -16402 -16403 -16404 -16405 -16406 -16407 -16408 -16409 -16410 -16411 -16412 -16413 -16414 -16415 -16416 -16417 -16418 -16419 -16420 -16421 -16422 -16423 -16424 -16425 -16426 -16427 -16428 -16429 -16430 -16431 -16432 -16433 -16434 -16435 -16436 -16437 -16438 -16439 -16440 -16441 -16442 -16443 -16444 -16445 -16446 -16447 -16448 -16449 -16450 -16451 -16452 -16453 -16454 -16455 -16456 -16457 -16458 -16459 -16460 -16461 -16462 -16463 -16464 -16465 -16466 -16467 -16468 -16469 -16470 -16471 -16472 -16473 -16474 -16475 -16476 -16477 -16478 -16479 -16480 -16481 -16482 -16483 -16484 -16485 -16486 -16487 -16488 -16489 -16490 -16491 -16492 -16493 -16494 -16495 -16496 -16497 -16498 -16499 -16500 -16501 -16502 -16503 -16504 -16505 -16506 -16507 -16508 -16509 -16510 -16511 -16512 -16513 -16514 -16515 -16516 -16517 -16518 -16519 -16520 -16521 -16522 -16523 -16524 -16525 -16526 -16527 -16528 -16529 -16530 -16531 -16532 -16533 -16534 -16535 -16536 -16537 -16538 -16539 -16540 -16541 -16542 -16543 -16544 -16545 -16546 -16547 -16548 -16549 -16550 -16551 -16552 -16553 -16554 -16555 -16556 -16557 -16558 -16559 -16560 -16561 -16562 -16563 -16564 -16565 -16566 -16567 -16568 -16569 -16570 -16571 -16572 -16573 -16574 -16575 -16576 -16577 -16578 -16579 -16580 -16581 -16582 -16583 -16584 -16585 -16586 -16587 -16588 -16589 -16590 -16591 -16592 -16593 -16594 -16595 -16596 -16597 -16598 -16599 -16600 -16601 -16602 -16603 -16604 -16605 -16606 -16607 -16608 -16609 -16610 -16611 -16612 -16613 -16614 -16615 -16616 -16617 -16618 -16619 -16620 -16621 -16622 -16623 -16624 -16625 -16626 -16627 -16628 -16629 -16630 -16631 -16632 -16633 -16634 -16635 -16636 -16637 -16638 -16639 -16640 -16641 -16642 -16643 -16644 -16645 -16646 -16647 -16648 -16649 -16650 -16651 -16652 -16653 -16654 -16655 -16656 -16657 -16658 -16659 -16660 -16661 -16662 -16663 -16664 -16665 -16666 -16667 -16668 -16669 -16670 -16671 -16672 -16673 -16674 -16675 -16676 -16677 -16678 -16679 -16680 -16681 -16682 -16683 -16684 -16685 -16686 -16687 -16688 -16689 -16690 -16691 -16692 -16693 -16694 -16695 -16696 -16697 -16698 -16699 -16700 -16701 -16702 -16703 -16704 -16705 -16706 -16707 -16708 -16709 -16710 -16711 -16712 -16713 -16714 -16715 -16716 -16717 -16718 -16719 -16720 -16721 -16722 -16723 -16724 -16725 -16726 -16727 -16728 -16729 -16730 -16731 -16732 -16733 -16734 -16735 -16736 -16737 -16738 -16739 -16740 -16741 -16742 -16743 -16744 -16745 -16746 -16747 -16748 -16749 -16750 -16751 -16752 -16753 -16754 -16755 -16756 -16757 -16758 -16759 -16760 -16761 -16762 -16763 -16764 -16765 -16766 -16767 -16768 -16769 -16770 -16771 -16772 -16773 -16774 -16775 -16776 -16777 -16778 -16779 -16780 -16781 -16782 -16783 -16784 -16785 -16786 -16787 -16788 -16789 -16790 -16791 -16792 -16793 -16794 -16795 -16796 -16797 -16798 -16799 -16800 -16801 -16802 -16803 -16804 -16805 -16806 -16807 -16808 -16809 -16810 -16811 -16812 -16813 -16814 -16815 -16816 -16817 -16818 -16819 -16820 -16821 -16822 -16823 -16824 -16825 -16826 -16827 -16828 -16829 -16830 -16831 -16832 -16833 -16834 -16835 -16836 -16837 -16838 -16839 -16840 -16841 -16842 -16843 -16844 -16845 -16846 -16847 -16848 -16849 -16850 -16851 -16852 -16853 -16854 -16855 -16856 -16857 -16858 -16859 -16860 -16861 -16862 -16863 -16864 -16865 -16866 -16867 -16868 -16869 -16870 -16871 -16872 -16873 -16874 -16875 -16876 -16877 -16878 -16879 -16880 -16881 -16882 -16883 -16884 -16885 -16886 -16887 -16888 -16889 -16890 -16891 -16892 -16893 -16894 -16895 -16896 -16897 -16898 -16899 -16900 -16901 -16902 -16903 -16904 -16905 -16906 -16907 -16908 -16909 -16910 -16911 -16912 -16913 -16914 -16915 -16916 -16917 -16918 -16919 -16920 -16921 -16922 -16923 -16924 -16925 -16926 -16927 -16928 -16929 -16930 -16931 -16932 -16933 -16934 -16935 -16936 -16937 -16938 -16939 -16940 -16941 -16942 -16943 -16944 -16945 -16946 -16947 -16948 -16949 -16950 -16951 -16952 -16953 -16954 -16955 -16956 -16957 -16958 -16959 -16960 -16961 -16962 -16963 -16964 -16965 -16966 -16967 -16968 -16969 -16970 -16971 -16972 -16973 -16974 -16975 -16976 -16977 -16978 -16979 -16980 -16981 -16982 -16983 -16984 -16985 -16986 -16987 -16988 -16989 -16990 -16991 -16992 -16993 -16994 -16995 -16996 -16997 -16998 -16999 -17000 -17001 -17002 -17003 -17004 -17005 -17006 -17007 -17008 -17009 -17010 -17011 -17012 -17013 -17014 -17015 -17016 -17017 -17018 -17019 -17020 -17021 -17022 -17023 -17024 -17025 -17026 -17027 -17028 -17029 -17030 -17031 -17032 -17033 -17034 -17035 -17036 -17037 -17038 -17039 -17040 -17041 -17042 -17043 -17044 -17045 -17046 -17047 -17048 -17049 -17050 -17051 -17052 -17053 -17054 -17055 -17056 -17057 -17058 -17059 -17060 -17061 -17062 -17063 -17064 -17065 -17066 -17067 -17068 -17069 -17070 -17071 -17072 -17073 -17074 -17075 -17076 -17077 -17078 -17079 -17080 -17081 -17082 -17083 -17084 -17085 -17086 -17087 -17088 -17089 -17090 -17091 -17092 -17093 -17094 -17095 -17096 -17097 -17098 -17099 -17100 -17101 -17102 -17103 -17104 -17105 -17106 -17107 -17108 -17109 -17110 -17111 -17112 -17113 -17114 -17115 -17116 -17117 -17118 -17119 -17120 -17121 -17122 -17123 -17124 -17125 -17126 -17127 -17128 -17129 -17130 -17131 -17132 -17133 -17134 -17135 -17136 -17137 -17138 -17139 -17140 -17141 -17142 -17143 -17144 -17145 -17146 -17147 -17148 -17149 -17150 -17151 -17152 -17153 -17154 -17155 -17156 -17157 -17158 -17159 -17160 -17161 -17162 -17163 -17164 -17165 -17166 -17167 -17168 -17169 -17170 -17171 -17172 -17173 -17174 -17175 -17176 -17177 -17178 -17179 -17180 -17181 -17182 -17183 -17184 -17185 -17186 -17187 -17188 -17189 -17190 -17191 -17192 -17193 -17194 -17195 -17196 -17197 -17198 -17199 -17200 -17201 -17202 -17203 -17204 -17205 -17206 -17207 -17208 -17209 -17210 -17211 -17212 -17213 -17214 -17215 -17216 -17217 -17218 -17219 -17220 -17221 -17222 -17223 -17224 -17225 -17226 -17227 -17228 -17229 -17230 -17231 -17232 -17233 -17234 -17235 -17236 -17237 -17238 -17239 -17240 -17241 -17242 -17243 -17244 -17245 -17246 -17247 -17248 -17249 -17250 -17251 -17252 -17253 -17254 -17255 -17256 -17257 -17258 -17259 -17260 -17261 -17262 -17263 -17264 -17265 -17266 -17267 -17268 -17269 -17270 -17271 -17272 -17273 -17274 -17275 -17276 -17277 -17278 -17279 -17280 -17281 -17282 -17283 -17284 -17285 -17286 -17287 -17288 -17289 -17290 -17291 -17292 -17293 -17294 -17295 -17296 -17297 -17298 -17299 -17300 -17301 -17302 -17303 -17304 -17305 -17306 -17307 -17308 -17309 -17310 -17311 -17312 -17313 -17314 -17315 -17316 -17317 -17318 -17319 -17320 -17321 -17322 -17323 -17324 -17325 -17326 -17327 -17328 -17329 -17330 -17331 -17332 -17333 -17334 -17335 -17336 -17337 -17338 -17339 -17340 -17341 -17342 -17343 -17344 -17345 -17346 -17347 -17348 -17349 -17350 -17351 -17352 -17353 -17354 -17355 -17356 -17357 -17358 -17359 -17360 -17361 -17362 -17363 -17364 -17365 -17366 -17367 -17368 -17369 -17370 -17371 -17372 -17373 -17374 -17375 -17376 -17377 -17378 -17379 -17380 -17381 -17382 -17383 -17384 -17385 -17386 -17387 -17388 -17389 -17390 -17391 -17392 -17393 -17394 -17395 -17396 -17397 -17398 -17399 -17400 -17401 -17402 -17403 -17404 -17405 -17406 -17407 -17408 -17409 -17410 -17411 -17412 -17413 -17414 -17415 -17416 -17417 -17418 -17419 -17420 -17421 -17422 -17423 -17424 -17425 -17426 -17427 -17428 -17429 -17430 -17431 -17432 -17433 -17434 -17435 -17436 -17437 -17438 -17439 -17440 -17441 -17442 -17443 -17444 -17445 -17446 -17447 -17448 -17449 -17450 -17451 -17452 -17453 -17454 -17455 -17456 -17457 -17458 -17459 -17460 -17461 -17462 -17463 -17464 -17465 -17466 -17467 -17468 -17469 -17470 -17471 -17472 -17473 -17474 -17475 -17476 -17477 -17478 -17479 -17480 -17481 -17482 -17483 -17484 -17485 -17486 -17487 -17488 -17489 -17490 -17491 -17492 -17493 -17494 -17495 -17496 -17497 -17498 -17499 -17500 -17501 -17502 -17503 -17504 -17505 -17506 -17507 -17508 -17509 -17510 -17511 -17512 -17513 -17514 -17515 -17516 -17517 -17518 -17519 -17520 -17521 -17522 -17523 -17524 -17525 -17526 -17527 -17528 -17529 -17530 -17531 -17532 -17533 -17534 -17535 -17536 -17537 -17538 -17539 -17540 -17541 -17542 -17543 -17544 -17545 -17546 -17547 -17548 -17549 -17550 -17551 -17552 -17553 -17554 -17555 -17556 -17557 -17558 -17559 -17560 -17561 -17562 -17563 -17564 -17565 -17566 -17567 -17568 -17569 -17570 -17571 -17572 -17573 -17574 -17575 -17576 -17577 -17578 -17579 -17580 -17581 -17582 -17583 -17584 -17585 -17586 -17587 -17588 -17589 -17590 -17591 -17592 -17593 -17594 -17595 -17596 -17597 -17598 -17599 -17600 -17601 -17602 -17603 -17604 -17605 -17606 -17607 -17608 -17609 -17610 -17611 -17612 -17613 -17614 -17615 -17616 -17617 -17618 -17619 -17620 -17621 -17622 -17623 -17624 -17625 -17626 -17627 -17628 -17629 -17630 -17631 -17632 -17633 -17634 -17635 -17636 -17637 -17638 -17639 -17640 -17641 -17642 -17643 -17644 -17645 -17646 -17647 -17648 -17649 -17650 -17651 -17652 -17653 -17654 -17655 -17656 -17657 -17658 -17659 -17660 -17661 -17662 -17663 -17664 -17665 -17666 -17667 -17668 -17669 -17670 -17671 -17672 -17673 -17674 -17675 -17676 -17677 -17678 -17679 -17680 -17681 -17682 -17683 -17684 -17685 -17686 -17687 -17688 -17689 -17690 -17691 -17692 -17693 -17694 -17695 -17696 -17697 -17698 -17699 -17700 -17701 -17702 -17703 -17704 -17705 -17706 -17707 -17708 -17709 -17710 -17711 -17712 -17713 -17714 -17715 -17716 -17717 -17718 -17719 -17720 -17721 -17722 -17723 -17724 -17725 -17726 -17727 -17728 -17729 -17730 -17731 -17732 -17733 -17734 -17735 -17736 -17737 -17738 -17739 -17740 -17741 -17742 -17743 -17744 -17745 -17746 -17747 -17748 -17749 -17750 -17751 -17752 -17753 -17754 -17755 -17756 -17757 -17758 -17759 -17760 -17761 -17762 -17763 -17764 -17765 -17766 -17767 -17768 -17769 -17770 -17771 -17772 -17773 -17774 -17775 -17776 -17777 -17778 -17779 -17780 -17781 -17782 -17783 -17784 -17785 -17786 -17787 -17788 -17789 -17790 -17791 -17792 -17793 -17794 -17795 -17796 -17797 -17798 -17799 -17800 -17801 -17802 -17803 -17804 -17805 -17806 -17807 -17808 -17809 -17810 -17811 -17812 -17813 -17814 -17815 -17816 -17817 -17818 -17819 -17820 -17821 -17822 -17823 -17824 -17825 -17826 -17827 -17828 -17829 -17830 -17831 -17832 -17833 -17834 -17835 -17836 -17837 -17838 -17839 -17840 -17841 -17842 -17843 -17844 -17845 -17846 -17847 -17848 -17849 -17850 -17851 -17852 -17853 -17854 -17855 -17856 -17857 -17858 -17859 -17860 -17861 -17862 -17863 -17864 -17865 -17866 -17867 -17868 -17869 -17870 -17871 -17872 -17873 -17874 -17875 -17876 -17877 -17878 -17879 -17880 -17881 -17882 -17883 -17884 -17885 -17886 -17887 -17888 -17889 -17890 -17891 -17892 -17893 -17894 -17895 -17896 -17897 -17898 -17899 -17900 -17901 -17902 -17903 -17904 -17905 -17906 -17907 -17908 -17909 -17910 -17911 -17912 -17913 -17914 -17915 -17916 -17917 -17918 -17919 -17920 -17921 -17922 -17923 -17924 -17925 -17926 -17927 -17928 -17929 -17930 -17931 -17932 -17933 -17934 -17935 -17936 -17937 -17938 -17939 -17940 -17941 -17942 -17943 -17944 -17945 -17946 -17947 -17948 -17949 -17950 -17951 -17952 -17953 -17954 -17955 -17956 -17957 -17958 -17959 -17960 -17961 -17962 -17963 -17964 -17965 -17966 -17967 -17968 -17969 -17970 -17971 -17972 -17973 -17974 -17975 -17976 -17977 -17978 -17979 -17980 -17981 -17982 -17983 -17984 -17985 -17986 -17987 -17988 -17989 -17990 -17991 -17992 -17993 -17994 -17995 -17996 -17997 -17998 -17999 -18000 -18001 -18002 -18003 -18004 -18005 -18006 -18007 -18008 -18009 -18010 -18011 -18012 -18013 -18014 -18015 -18016 -18017 -18018 -18019 -18020 -18021 -18022 -18023 -18024 -18025 -18026 -18027 -18028 -18029 -18030 -18031 -18032 -18033 -18034 -18035 -18036 -18037 -18038 -18039 -18040 -18041 -18042 -18043 -18044 -18045 -18046 -18047 -18048 -18049 -18050 -18051 -18052 -18053 -18054 -18055 -18056 -18057 -18058 -18059 -18060 -18061 -18062 -18063 -18064 -18065 -18066 -18067 -18068 -18069 -18070 -18071 -18072 -18073 -18074 -18075 -18076 -18077 -18078 -18079 -18080 -18081 -18082 -18083 -18084 -18085 -18086 -18087 -18088 -18089 -18090 -18091 -18092 -18093 -18094 -18095 -18096 -18097 -18098 -18099 -18100 -18101 -18102 -18103 -18104 -18105 -18106 -18107 -18108 -18109 -18110 -18111 -18112 -18113 -18114 -18115 -18116 -18117 -18118 -18119 -18120 -18121 -18122 -18123 -18124 -18125 -18126 -18127 -18128 -18129 -18130 -18131 -18132 -18133 -18134 -18135 -18136 -18137 -18138 -18139 -18140 -18141 -18142 -18143 -18144 -18145 -18146 -18147 -18148 -18149 -18150 -18151 -18152 -18153 -18154 -18155 -18156 -18157 -18158 -18159 -18160 -18161 -18162 -18163 -18164 -18165 -18166 -18167 -18168 -18169 -18170 -18171 -18172 -18173 -18174 -18175 -18176 -18177 -18178 -18179 -18180 -18181 -18182 -18183 -18184 -18185 -18186 -18187 -18188 -18189 -18190 -18191 -18192 -18193 -18194 -18195 -18196 -18197 -18198 -18199 -18200 -18201 -18202 -18203 -18204 -18205 -18206 -18207 -18208 -18209 -18210 -18211 -18212 -18213 -18214 -18215 -18216 -18217 -18218 -18219 -18220 -18221 -18222 -18223 -18224 -18225 -18226 -18227 -18228 -18229 -18230 -18231 -18232 -18233 -18234 -18235 -18236 -18237 -18238 -18239 -18240 -18241 -18242 -18243 -18244 -18245 -18246 -18247 -18248 -18249 -18250 -18251 -18252 -18253 -18254 -18255 -18256 -18257 -18258 -18259 -18260 -18261 -18262 -18263 -18264 -18265 -18266 -18267 -18268 -18269 -18270 -18271 -18272 -18273 -18274 -18275 -18276 -18277 -18278 -18279 -18280 -18281 -18282 -18283 -18284 -18285 -18286 -18287 -18288 -18289 -18290 -18291 -18292 -18293 -18294 -18295 -18296 -18297 -18298 -18299 -18300 -18301 -18302 -18303 -18304 -18305 -18306 -18307 -18308 -18309 -18310 -18311 -18312 -18313 -18314 -18315 -18316 -18317 -18318 -18319 -18320 -18321 -18322 -18323 -18324 -18325 -18326 -18327 -18328 -18329 -18330 -18331 -18332 -18333 -18334 -18335 -18336 -18337 -18338 -18339 -18340 -18341 -18342 -18343 -18344 -18345 -18346 -18347 -18348 -18349 -18350 -18351 -18352 -18353 -18354 -18355 -18356 -18357 -18358 -18359 -18360 -18361 -18362 -18363 -18364 -18365 -18366 -18367 -18368 -18369 -18370 -18371 -18372 -18373 -18374 -18375 -18376 -18377 -18378 -18379 -18380 -18381 -18382 -18383 -18384 -18385 -18386 -18387 -18388 -18389 -18390 -18391 -18392 -18393 -18394 -18395 -18396 -18397 -18398 -18399 -18400 -18401 -18402 -18403 -18404 -18405 -18406 -18407 -18408 -18409 -18410 -18411 -18412 -18413 -18414 -18415 -18416 -18417 -18418 -18419 -18420 -18421 -18422 -18423 -18424 -18425 -18426 -18427 -18428 -18429 -18430 -18431 -18432 -18433 -18434 -18435 -18436 -18437 -18438 -18439 -18440 -18441 -18442 -18443 -18444 -18445 -18446 -18447 -18448 -18449 -18450 -18451 -18452 -18453 -18454 -18455 -18456 -18457 -18458 -18459 -18460 -18461 -18462 -18463 -18464 -18465 -18466 -18467 -18468 -18469 -18470 -18471 -18472 -18473 -18474 -18475 -18476 -18477 -18478 -18479 -18480 -18481 -18482 -18483 -18484 -18485 -18486 -18487 -18488 -18489 -18490 -18491 -18492 -18493 -18494 -18495 -18496 -18497 -18498 -18499 -18500 -18501 -18502 -18503 -18504 -18505 -18506 -18507 -18508 -18509 -18510 -18511 -18512 -18513 -18514 -18515 -18516 -18517 -18518 -18519 -18520 -18521 -18522 -18523 -18524 -18525 -18526 -18527 -18528 -18529 -18530 -18531 -18532 -18533 -18534 -18535 -18536 -18537 -18538 -18539 -18540 -18541 -18542 -18543 -18544 -18545 -18546 -18547 -18548 -18549 -18550 -18551 -18552 -18553 -18554 -18555 -18556 -18557 -18558 -18559 -18560 -18561 -18562 -18563 -18564 -18565 -18566 -18567 -18568 -18569 -18570 -18571 -18572 -18573 -18574 -18575 -18576 -18577 -18578 -18579 -18580 -18581 -18582 -18583 -18584 -18585 -18586 -18587 -18588 -18589 -18590 -18591 -18592 -18593 -18594 -18595 -18596 -18597 -18598 -18599 -18600 -18601 -18602 -18603 -18604 -18605 -18606 -18607 -18608 -18609 -18610 -18611 -18612 -18613 -18614 -18615 -18616 -18617 -18618 -18619 -18620 -18621 -18622 -18623 -18624 -18625 -18626 -18627 -18628 -18629 -18630 -18631 -18632 -18633 -18634 -18635 -18636 -18637 -18638 -18639 -18640 -18641 -18642 -18643 -18644 -18645 -18646 -18647 -18648 -18649 -18650 -18651 -18652 -18653 -18654 -18655 -18656 -18657 -18658 -18659 -18660 -18661 -18662 -18663 -18664 -18665 -18666 -18667 -18668 -18669 -18670 -18671 -18672 -18673 -18674 -18675 -18676 -18677 -18678 -18679 -18680 -18681 -18682 -18683 -18684 -18685 -18686 -18687 -18688 -18689 -18690 -18691 -18692 -18693 -18694 -18695 -18696 -18697 -18698 -18699 -18700 -18701 -18702 -18703 -18704 -18705 -18706 -18707 -18708 -18709 -18710 -18711 -18712 -18713 -18714 -18715 -18716 -18717 -18718 -18719 -18720 -18721 -18722 -18723 -18724 -18725 -18726 -18727 -18728 -18729 -18730 -18731 -18732 -18733 -18734 -18735 -18736 -18737 -18738 -18739 -18740 -18741 -18742 -18743 -18744 -18745 -18746 -18747 -18748 -18749 -18750 -18751 -18752 -18753 -18754 -18755 -18756 -18757 -18758 -18759 -18760 -18761 -18762 -18763 -18764 -18765 -18766 -18767 -18768 -18769 -18770 -18771 -18772 -18773 -18774 -18775 -18776 -18777 -18778 -18779 -18780 -18781 -18782 -18783 -18784 -18785 -18786 -18787 -18788 -18789 -18790 -18791 -18792 -18793 -18794 -18795 -18796 -18797 -18798 -18799 -18800 -18801 -18802 -18803 -18804 -18805 -18806 -18807 -18808 -18809 -18810 -18811 -18812 -18813 -18814 -18815 -18816 -18817 -18818 -18819 -18820 -18821 -18822 -18823 -18824 -18825 -18826 -18827 -18828 -18829 -18830 -18831 -18832 -18833 -18834 -18835 -18836 -18837 -18838 -18839 -18840 -18841 -18842 -18843 -18844 -18845 -18846 -18847 -18848 -18849 -18850 -18851 -18852 -18853 -18854 -18855 -18856 -18857 -18858 -18859 -18860 -18861 -18862 -18863 -18864 -18865 -18866 -18867 -18868 -18869 -18870 -18871 -18872 -18873 -18874 -18875 -18876 -18877 -18878 -18879 -18880 -18881 -18882 -18883 -18884 -18885 -18886 -18887 -18888 -18889 -18890 -18891 -18892 -18893 -18894 -18895 -18896 -18897 -18898 -18899 -18900 -18901 -18902 -18903 -18904 -18905 -18906 -18907 -18908 -18909 -18910 -18911 -18912 -18913 -18914 -18915 -18916 -18917 -18918 -18919 -18920 -18921 -18922 -18923 -18924 -18925 -18926 -18927 -18928 -18929 -18930 -18931 -18932 -18933 -18934 -18935 -18936 -18937 -18938 -18939 -18940 -18941 -18942 -18943 -18944 -18945 -18946 -18947 -18948 -18949 -18950 -18951 -18952 -18953 -18954 -18955 -18956 -18957 -18958 -18959 -18960 -18961 -18962 -18963 -18964 -18965 -18966 -18967 -18968 -18969 -18970 -18971 -18972 -18973 -18974 -18975 -18976 -18977 -18978 -18979 -18980 -18981 -18982 -18983 -18984 -18985 -18986 -18987 -18988 -18989 -18990 -18991 -18992 -18993 -18994 -18995 -18996 -18997 -18998 -18999 -19000 -19001 -19002 -19003 -19004 -19005 -19006 -19007 -19008 -19009 -19010 -19011 -19012 -19013 -19014 -19015 -19016 -19017 -19018 -19019 -19020 -19021 -19022 -19023 -19024 -19025 -19026 -19027 -19028 -19029 -19030 -19031 -19032 -19033 -19034 -19035 -19036 -19037 -19038 -19039 -19040 -19041 -19042 -19043 -19044 -19045 -19046 -19047 -19048 -19049 -19050 -19051 -19052 -19053 -19054 -19055 -19056 -19057 -19058 -19059 -19060 -19061 -19062 -19063 -19064 -19065 -19066 -19067 -19068 -19069 -19070 -19071 -19072 -19073 -19074 -19075 -19076 -19077 -19078 -19079 -19080 -19081 -19082 -19083 -19084 -19085 -19086 -19087 -19088 -19089 -19090 -19091 -19092 -19093 -19094 -19095 -19096 -19097 -19098 -19099 -19100 -19101 -19102 -19103 -19104 -19105 -19106 -19107 -19108 -19109 -19110 -19111 -19112 -19113 -19114 -19115 -19116 -19117 -19118 -19119 -19120 -19121 -19122 -19123 -19124 -19125 -19126 -19127 -19128 -19129 -19130 -19131 -19132 -19133 -19134 -19135 -19136 -19137 -19138 -19139 -19140 -19141 -19142 -19143 -19144 -19145 -19146 -19147 -19148 -19149 -19150 -19151 -19152 -19153 -19154 -19155 -19156 -19157 -19158 -19159 -19160 -19161 -19162 -19163 -19164 -19165 -19166 -19167 -19168 -19169 -19170 -19171 -19172 -19173 -19174 -19175 -19176 -19177 -19178 -19179 -19180 -19181 -19182 -19183 -19184 -19185 -19186 -19187 -19188 -19189 -19190 -19191 -19192 -19193 -19194 -19195 -19196 -19197 -19198 -19199 -19200 -19201 -19202 -19203 -19204 -19205 -19206 -19207 -19208 -19209 -19210 -19211 -19212 -19213 -19214 -19215 -19216 -19217 -19218 -19219 -19220 -19221 -19222 -19223 -19224 -19225 -19226 -19227 -19228 -19229 -19230 -19231 -19232 -19233 -19234 -19235 -19236 -19237 -19238 -19239 -19240 -19241 -19242 -19243 -19244 -19245 -19246 -19247 -19248 -19249 -19250 -19251 -19252 -19253 -19254 -19255 -19256 -19257 -19258 -19259 -19260 -19261 -19262 -19263 -19264 -19265 -19266 -19267 -19268 -19269 -19270 -19271 -19272 -19273 -19274 -19275 -19276 -19277 -19278 -19279 -19280 -19281 -19282 -19283 -19284 -19285 -19286 -19287 -19288 -19289 -19290 -19291 -19292 -19293 -19294 -19295 -19296 -19297 -19298 -19299 -19300 -19301 -19302 -19303 -19304 -19305 -19306 -19307 -19308 -19309 -19310 -19311 -19312 -19313 -19314 -19315 -19316 -19317 -19318 -19319 -19320 -19321 -19322 -19323 -19324 -19325 -19326 -19327 -19328 -19329 -19330 -19331 -19332 -19333 -19334 -19335 -19336 -19337 -19338 -19339 -19340 -19341 -19342 -19343 -19344 -19345 -19346 -19347 -19348 -19349 -19350 -19351 -19352 -19353 -19354 -19355 -19356 -19357 -19358 -19359 -19360 -19361 -19362 -19363 -19364 -19365 -19366 -19367 -19368 -19369 -19370 -19371 -19372 -19373 -19374 -19375 -19376 -19377 -19378 -19379 -19380 -19381 -19382 -19383 -19384 -19385 -19386 -19387 -19388 -19389 -19390 -19391 -19392 -19393 -19394 -19395 -19396 -19397 -19398 -19399 -19400 -19401 -19402 -19403 -19404 -19405 -19406 -19407 -19408 -19409 -19410 -19411 -19412 -19413 -19414 -19415 -19416 -19417 -19418 -19419 -19420 -19421 -19422 -19423 -19424 -19425 -19426 -19427 -19428 -19429 -19430 -19431 -19432 -19433 -19434 -19435 -19436 -19437 -19438 -19439 -19440 -19441 -19442 -19443 -19444 -19445 -19446 -19447 -19448 -19449 -19450 -19451 -19452 -19453 -19454 -19455 -19456 -19457 -19458 -19459 -19460 -19461 -19462 -19463 -19464 -19465 -19466 -19467 -19468 -19469 -19470 -19471 -19472 -19473 -19474 -19475 -19476 -19477 -19478 -19479 -19480 -19481 -19482 -19483 -19484 -19485 -19486 -19487 -19488 -19489 -19490 -19491 -19492 -19493 -19494 -19495 -19496 -19497 -19498 -19499 -19500 -19501 -19502 -19503 -19504 -19505 -19506 -19507 -19508 -19509 -19510 -19511 -19512 -19513 -19514 -19515 -19516 -19517 -19518 -19519 -19520 -19521 -19522 -19523 -19524 -19525 -19526 -19527 -19528 -19529 -19530 -19531 -19532 -19533 -19534 -19535 -19536 -19537 -19538 -19539 -19540 -19541 -19542 -19543 -19544 -19545 -19546 -19547 -19548 -19549 -19550 -19551 -19552 -19553 -19554 -19555 -19556 -19557 -19558 -19559 -19560 -19561 -19562 -19563 -19564 -19565 -19566 -19567 -19568 -19569 -19570 -19571 -19572 -19573 -19574 -19575 -19576 -19577 -19578 -19579 -19580 -19581 -19582 -19583 -19584 -19585 -19586 -19587 -19588 -19589 -19590 -19591 -19592 -19593 -19594 -19595 -19596 -19597 -19598 -19599 -19600 -19601 -19602 -19603 -19604 -19605 -19606 -19607 -19608 -19609 -19610 -19611 -19612 -19613 -19614 -19615 -19616 -19617 -19618 -19619 -19620 -19621 -19622 -19623 -19624 -19625 -19626 -19627 -19628 -19629 -19630 -19631 -19632 -19633 -19634 -19635 -19636 -19637 -19638 -19639 -19640 -19641 -19642 -19643 -19644 -19645 -19646 -19647 -19648 -19649 -19650 -19651 -19652 -19653 -19654 -19655 -19656 -19657 -19658 -19659 -19660 -19661 -19662 -19663 -19664 -19665 -19666 -19667 -19668 -19669 -19670 -19671 -19672 -19673 -19674 -19675 -19676 -19677 -19678 -19679 -19680 -19681 -19682 -19683 -19684 -19685 -19686 -19687 -19688 -19689 -19690 -19691 -19692 -19693 -19694 -19695 -19696 -19697 -19698 -19699 -19700 -19701 -19702 -19703 -19704 -19705 -19706 -19707 -19708 -19709 -19710 -19711 -19712 -19713 -19714 -19715 -19716 -19717 -19718 -19719 -19720 -19721 -19722 -19723 -19724 -19725 -19726 -19727 -19728 -19729 -19730 -19731 -19732 -19733 -19734 -19735 -19736 -19737 -19738 -19739 -19740 -19741 -19742 -19743 -19744 -19745 -19746 -19747 -19748 -19749 -19750 -19751 -19752 -19753 -19754 -19755 -19756 -19757 -19758 -19759 -19760 -19761 -19762 -19763 -19764 -19765 -19766 -19767 -19768 -19769 -19770 -19771 -19772 -19773 -19774 -19775 -19776 -19777 -19778 -19779 -19780 -19781 -19782 -19783 -19784 -19785 -19786 -19787 -19788 -19789 -19790 -19791 -19792 -19793 -19794 -19795 -19796 -19797 -19798 -19799 -19800 -19801 -19802 -19803 -19804 -19805 -19806 -19807 -19808 -19809 -19810 -19811 -19812 -19813 -19814 -19815 -19816 -19817 -19818 -19819 -19820 -19821 -19822 -19823 -19824 -19825 -19826 -19827 -19828 -19829 -19830 -19831 -19832 -19833 -19834 -19835 -19836 -19837 -19838 -19839 -19840 -19841 -19842 -19843 -19844 -19845 -19846 -19847 -19848 -19849 -19850 -19851 -19852 -19853 -19854 -19855 -19856 -19857 -19858 -19859 -19860 -19861 -19862 -19863 -19864 -19865 -19866 -19867 -19868 -19869 -19870 -19871 -19872 -19873 -19874 -19875 -19876 -19877 -19878 -19879 -19880 -19881 -19882 -19883 -19884 -19885 -19886 -19887 -19888 -19889 -19890 -19891 -19892 -19893 -19894 -19895 -19896 -19897 -19898 -19899 -19900 -19901 -19902 -19903 -19904 -19905 -19906 -19907 -19908 -19909 -19910 -19911 -19912 -19913 -19914 -19915 -19916 -19917 -19918 -19919 -19920 -19921 -19922 -19923 -19924 -19925 -19926 -19927 -19928 -19929 -19930 -19931 -19932 -19933 -19934 -19935 -19936 -19937 -19938 -19939 -19940 -19941 -19942 -19943 -19944 -19945 -19946 -19947 -19948 -19949 -19950 -19951 -19952 -19953 -19954 -19955 -19956 -19957 -19958 -19959 -19960 -19961 -19962 -19963 -19964 -19965 -19966 -19967 -19968 -19969 -19970 -19971 -19972 -19973 -19974 -19975 -19976 -19977 -19978 -19979 -19980 -19981 -19982 -19983 -19984 -19985 -19986 -19987 -19988 -19989 -19990 -19991 -19992 -19993 -19994 -19995 -19996 -19997 -19998 -19999 -20000 -20001 -20002 -20003 -20004 -20005 -20006 -20007 -20008 -20009 -20010 -20011 -20012 -20013 -20014 -20015 -20016 -20017 -20018 -20019 -20020 -20021 -20022 -20023 -20024 -20025 -20026 -20027 -20028 -20029 -20030 -20031 -20032 -20033 -20034 -20035 -20036 -20037 -20038 -20039 -20040 -20041 -20042 -20043 -20044 -20045 -20046 -20047 -20048 -20049 -20050 -20051 -20052 -20053 -20054 -20055 -20056 -20057 -20058 -20059 -20060 -20061 -20062 -20063 -20064 -20065 -20066 -20067 -20068 -20069 -20070 -20071 -20072 -20073 -20074 -20075 -20076 -20077 -20078 -20079 -20080 -20081 -20082 -20083 -20084 -20085 -20086 -20087 -20088 -20089 -20090 -20091 -20092 -20093 -20094 -20095 -20096 -20097 -20098 -20099 -20100 -20101 -20102 -20103 -20104 -20105 -20106 -20107 -20108 -20109 -20110 -20111 -20112 -20113 -20114 -20115 -20116 -20117 -20118 -20119 -20120 -20121 -20122 -20123 -20124 -20125 -20126 -20127 -20128 -20129 -20130 -20131 -20132 -20133 -20134 -20135 -20136 -20137 -20138 -20139 -20140 -20141 -20142 -20143 -20144 -20145 -20146 -20147 -20148 -20149 -20150 -20151 -20152 -20153 -20154 -20155 -20156 -20157 -20158 -20159 -20160 -20161 -20162 -20163 -20164 -20165 -20166 -20167 -20168 -20169 -20170 -20171 -20172 -20173 -20174 -20175 -20176 -20177 -20178 -20179 -20180 -20181 -20182 -20183 -20184 -20185 -20186 -20187 -20188 -20189 -20190 -20191 -20192 -20193 -20194 -20195 -20196 -20197 -20198 -20199 -20200 -20201 -20202 -20203 -20204 -20205 -20206 -20207 -20208 -20209 -20210 -20211 -20212 -20213 -20214 -20215 -20216 -20217 -20218 -20219 -20220 -20221 -20222 -20223 -20224 -20225 -20226 -20227 -20228 -20229 -20230 -20231 -20232 -20233 -20234 -20235 -20236 -20237 -20238 -20239 -20240 -20241 -20242 -20243 -20244 -20245 -20246 -20247 -20248 -20249 -20250 -20251 -20252 -20253 -20254 -20255 -20256 -20257 -20258 -20259 -20260 -20261 -20262 -20263 -20264 -20265 -20266 -20267 -20268 -20269 -20270 -20271 -20272 -20273 -20274 -20275 -20276 -20277 -20278 -20279 -20280 -20281 -20282 -20283 -20284 -20285 -20286 -20287 -20288 -20289 -20290 -20291 -20292 -20293 -20294 -20295 -20296 -20297 -20298 -20299 -20300 -20301 -20302 -20303 -20304 -20305 -20306 -20307 -20308 -20309 -20310 -20311 -20312 -20313 -20314 -20315 -20316 -20317 -20318 -20319 -20320 -20321 -20322 -20323 -20324 -20325 -20326 -20327 -20328 -20329 -20330 -20331 -20332 -20333 -20334 -20335 -20336 -20337 -20338 -20339 -20340 -20341 -20342 -20343 -20344 -20345 -20346 -20347 -20348 -20349 -20350 -20351 -20352 -20353 -20354 -20355 -20356 -20357 -20358 -20359 -20360 -20361 -20362 -20363 -20364 -20365 -20366 -20367 -20368 -20369 -20370 -20371 -20372 -20373 -20374 -20375 -20376 -20377 -20378 -20379 -20380 -20381 -20382 -20383 -20384 -20385 -20386 -20387 -20388 -20389 -20390 -20391 -20392 -20393 -20394 -20395 -20396 -20397 -20398 -20399 -20400 -20401 -20402 -20403 -20404 -20405 -20406 -20407 -20408 -20409 -20410 -20411 -20412 -20413 -20414 -20415 -20416 -20417 -20418 -20419 -20420 -20421 -20422 -20423 -20424 -20425 -20426 -20427 -20428 -20429 -20430 -20431 -20432 -20433 -20434 -20435 -20436 -20437 -20438 -20439 -20440 -20441 -20442 -20443 -20444 -20445 -20446 -20447 -20448 -20449 -20450 -20451 -20452 -20453 -20454 -20455 -20456 -20457 -20458 -20459 -20460 -20461 -20462 -20463 -20464 -20465 -20466 -20467 -20468 -20469 -20470 -20471 -20472 -20473 -20474 -20475 -20476 -20477 -20478 -20479 -20480 -20481 -20482 -20483 -20484 -20485 -20486 -20487 -20488 -20489 -20490 -20491 -20492 -20493 -20494 -20495 -20496 -20497 -20498 -20499 -20500 -20501 -20502 -20503 -20504 -20505 -20506 -20507 -20508 -20509 -20510 -20511 -20512 -20513 -20514 -20515 -20516 -20517 -20518 -20519 -20520 -20521 -20522 -20523 -20524 -20525 -20526 -20527 -20528 -20529 -20530 -20531 -20532 -20533 -20534 -20535 -20536 -20537 -20538 -20539 -20540 -20541 -20542 -20543 -20544 -20545 -20546 -20547 -20548 -20549 -20550 -20551 -20552 -20553 -20554 -20555 -20556 -20557 -20558 -20559 -20560 -20561 -20562 -20563 -20564 -20565 -20566 -20567 -20568 -20569 -20570 -20571 -20572 -20573 -20574 -20575 -20576 -20577 -20578 -20579 -20580 -20581 -20582 -20583 -20584 -20585 -20586 -20587 -20588 -20589 -20590 -20591 -20592 -20593 -20594 -20595 -20596 -20597 -20598 -20599 -20600 -20601 -20602 -20603 -20604 -20605 -20606 -20607 -20608 -20609 -20610 -20611 -20612 -20613 -20614 -20615 -20616 -20617 -20618 -20619 -20620 -20621 -20622 -20623 -20624 -20625 -20626 -20627 -20628 -20629 -20630 -20631 -20632 -20633 -20634 -20635 -20636 -20637 -20638 -20639 -20640 -20641 -20642 -20643 -20644 -20645 -20646 -20647 -20648 -20649 -20650 -20651 -20652 -20653 -20654 -20655 -20656 -20657 -20658 -20659 -20660 -20661 -20662 -20663 -20664 -20665 -20666 -20667 -20668 -20669 -20670 -20671 -20672 -20673 -20674 -20675 -20676 -20677 -20678 -20679 -20680 -20681 -20682 -20683 -20684 -20685 -20686 -20687 -20688 -20689 -20690 -20691 -20692 -20693 -20694 -20695 -20696 -20697 -20698 -20699 -20700 -20701 -20702 -20703 -20704 -20705 -20706 -20707 -20708 -20709 -20710 -20711 -20712 -20713 -20714 -20715 -20716 -20717 -20718 -20719 -20720 -20721 -20722 -20723 -20724 -20725 -20726 -20727 -20728 -20729 -20730 -20731 -20732 -20733 -20734 -20735 -20736 -20737 -20738 -20739 -20740 -20741 -20742 -20743 -20744 -20745 -20746 -20747 -20748 -20749 -20750 -20751 -20752 -20753 -20754 -20755 -20756 -20757 -20758 -20759 -20760 -20761 -20762 -20763 -20764 -20765 -20766 -20767 -20768 -20769 -20770 -20771 -20772 -20773 -20774 -20775 -20776 -20777 -20778 -20779 -20780 -20781 -20782 -20783 -20784 -20785 -20786 -20787 -20788 -20789 -20790 -20791 -20792 -20793 -20794 -20795 -20796 -20797 -20798 -20799 -20800 -20801 -20802 -20803 -20804 -20805 -20806 -20807 -20808 -20809 -20810 -20811 -20812 -20813 -20814 -20815 -20816 -20817 -20818 -20819 -20820 -20821 -20822 -20823 -20824 -20825 -20826 -20827 -20828 -20829 -20830 -20831 -20832 -20833 -20834 -20835 -20836 -20837 -20838 -20839 -20840 -20841 -20842 -20843 -20844 -20845 -20846 -20847 -20848 -20849 -20850 -20851 -20852 -20853 -20854 -20855 -20856 -20857 -20858 -20859 -20860 -20861 -20862 -20863 -20864 -20865 -20866 -20867 -20868 -20869 -20870 -20871 -20872 -20873 -20874 -20875 -20876 -20877 -20878 -20879 -20880 -20881 -20882 -20883 -20884 -20885 -20886 -20887 -20888 -20889 -20890 -20891 -20892 -20893 -20894 -20895 -20896 -20897 -20898 -20899 -20900 -20901 -20902 -20903 -20904 -20905 -20906 -20907 -20908 -20909 -20910 -20911 -20912 -20913 -20914 -20915 -20916 -20917 -20918 -20919 -20920 -20921 -20922 -20923 -20924 -20925 -20926 -20927 -20928 -20929 -20930 -20931 -20932 -20933 -20934 -20935 -20936 -20937 -20938 -20939 -20940 -20941 -20942 -20943 -20944 -20945 -20946 -20947 -20948 -20949 -20950 -20951 -20952 -20953 -20954 -20955 -20956 -20957 -20958 -20959 -20960 -20961 -20962 -20963 -20964 -20965 -20966 -20967 -20968 -20969 -20970 -20971 -20972 -20973 -20974 -20975 -20976 -20977 -20978 -20979 -20980 -20981 -20982 -20983 -20984 -20985 -20986 -20987 -20988 -20989 -20990 -20991 -20992 -20993 -20994 -20995 -20996 -20997 -20998 -20999 -21000 -21001 -21002 -21003 -21004 -21005 -21006 -21007 -21008 -21009 -21010 -21011 -21012 -21013 -21014 -21015 -21016 -21017 -21018 -21019 -21020 -21021 -21022 -21023 -21024 -21025 -21026 -21027 -21028 -21029 -21030 -21031 -21032 -21033 -21034 -21035 -21036 -21037 -21038 -21039 -21040 -21041 -21042 -21043 -21044 -21045 -21046 -21047 -21048 -21049 -21050 -21051 -21052 -21053 -21054 -21055 -21056 -21057 -21058 -21059 -21060 -21061 -21062 -21063 -21064 -21065 -21066 -21067 -21068 -21069 -21070 -21071 -21072 -21073 -21074 -21075 -21076 -21077 -21078 -21079 -21080 -21081 -21082 -21083 -21084 -21085 -21086 -21087 -21088 -21089 -21090 -21091 -21092 -21093 -21094 -21095 -21096 -21097 -21098 -21099 -21100 -21101 -21102 -21103 -21104 -21105 -21106 -21107 -21108 -21109 -21110 -21111 -21112 -21113 -21114 -21115 -21116 -21117 -21118 -21119 -21120 -21121 -21122 -21123 -21124 -21125 -21126 -21127 -21128 -21129 -21130 -21131 -21132 -21133 -21134 -21135 -21136 -21137 -21138 -21139 -21140 -21141 -21142 -21143 -21144 -21145 -21146 -21147 -21148 -21149 -21150 -21151 -21152 -21153 -21154 -21155 -21156 -21157 -21158 -21159 -21160 -21161 -21162 -21163 -21164 -21165 -21166 -21167 -21168 -21169 -21170 -21171 -21172 -21173 -21174 -21175 -21176 -21177 -21178 -21179 -21180 -21181 -21182 -21183 -21184 -21185 -21186 -21187 -21188 -21189 -21190 -21191 -21192 -21193 -21194 -21195 -21196 -21197 -21198 -21199 -21200 -21201 -21202 -21203 -21204 -21205 -21206 -21207 -21208 -21209 -21210 -21211 -21212 -21213 -21214 -21215 -21216 -21217 -21218 -21219 -21220 -21221 -21222 -21223 -21224 -21225 -21226 -21227 -21228 -21229 -21230 -21231 -21232 -21233 -21234 -21235 -21236 -21237 -21238 -21239 -21240 -21241 -21242 -21243 -21244 -21245 -21246 -21247 -21248 -21249 -21250 -21251 -21252 -21253 -21254 -21255 -21256 -21257 -21258 -21259 -21260 -21261 -21262 -21263 -21264 -21265 -21266 -21267 -21268 -21269 -21270 -21271 -21272 -21273 -21274 -21275 -21276 -21277 -21278 -21279 -21280 -21281 -21282 -21283 -21284 -21285 -21286 -21287 -21288 -21289 -21290 -21291 -21292 -21293 -21294 -21295 -21296 -21297 -21298 -21299 -21300 -21301 -21302 -21303 -21304 -21305 -21306 -21307 -21308 -21309 -21310 -21311 -21312 -21313 -21314 -21315 -21316 -21317 -21318 -21319 -21320 -21321 -21322 -21323 -21324 -21325 -21326 -21327 -21328 -21329 -21330 -21331 -21332 -21333 -21334 -21335 -21336 -21337 -21338 -21339 -21340 -21341 -21342 -21343 -21344 -21345 -21346 -21347 -21348 -21349 -21350 -21351 -21352 -21353 -21354 -21355 -21356 -21357 -21358 -21359 -21360 -21361 -21362 -21363 -21364 -21365 -21366 -21367 -21368 -21369 -21370 -21371 -21372 -21373 -21374 -21375 -21376 -21377 -21378 -21379 -21380 -21381 -21382 -21383 -21384 -21385 -21386 -21387 -21388 -21389 -21390 -21391 -21392 -21393 -21394 -21395 -21396 -21397 -21398 -21399 -21400 -21401 -21402 -21403 -21404 -21405 -21406 -21407 -21408 -21409 -21410 -21411 -21412 -21413 -21414 -21415 -21416 -21417 -21418 -21419 -21420 -21421 -21422 -21423 -21424 -21425 -21426 -21427 -21428 -21429 -21430 -21431 -21432 -21433 -21434 -21435 -21436 -21437 -21438 -21439 -21440 -21441 -21442 -21443 -21444 -21445 -21446 -21447 -21448 -21449 -21450 -21451 -21452 -21453 -21454 -21455 -21456 -21457 -21458 -21459 -21460 -21461 -21462 -21463 -21464 -21465 -21466 -21467 -21468 -21469 -21470 -21471 -21472 -21473 -21474 -21475 -21476 -21477 -21478 -21479 -21480 -21481 -21482 -21483 -21484 -21485 -21486 -21487 -21488 -21489 -21490 -21491 -21492 -21493 -21494 -21495 -21496 -21497 -21498 -21499 -21500 -21501 -21502 -21503 -21504 -21505 -21506 -21507 -21508 -21509 -21510 -21511 -21512 -21513 -21514 -21515 -21516 -21517 -21518 -21519 -21520 -21521 -21522 -21523 -21524 -21525 -21526 -21527 -21528 -21529 -21530 -21531 -21532 -21533 -21534 -21535 -21536 -21537 -21538 -21539 -21540 -21541 -21542 -21543 -21544 -21545 -21546 -21547 -21548 -21549 -21550 -21551 -21552 -21553 -21554 -21555 -21556 -21557 -21558 -21559 -21560 -21561 -21562 -21563 -21564 -21565 -21566 -21567 -21568 -21569 -21570 -21571 -21572 -21573 -21574 -21575 -21576 -21577 -21578 -21579 -21580 -21581 -21582 -21583 -21584 -21585 -21586 -21587 -21588 -21589 -21590 -21591 -21592 -21593 -21594 -21595 -21596 -21597 -21598 -21599 -21600 -21601 -21602 -21603 -21604 -21605 -21606 -21607 -21608 -21609 -21610 -21611 -21612 -21613 -21614 -21615 -21616 -21617 -21618 -21619 -21620 -21621 -21622 -21623 -21624 -21625 -21626 -21627 -21628 -21629 -21630 -21631 -21632 -21633 -21634 -21635 -21636 -21637 -21638 -21639 -21640 -21641 -21642 -21643 -21644 -21645 -21646 -21647 -21648 -21649 -21650 -21651 -21652 -21653 -21654 -21655 -21656 -21657 -21658 -21659 -21660 -21661 -21662 -21663 -21664 -21665 -21666 -21667 -21668 -21669 -21670 -21671 -21672 -21673 -21674 -21675 -21676 -21677 -21678 -21679 -21680 -21681 -21682 -21683 -21684 -21685 -21686 -21687 -21688 -21689 -21690 -21691 -21692 -21693 -21694 -21695 -21696 -21697 -21698 -21699 -21700 -21701 -21702 -21703 -21704 -21705 -21706 -21707 -21708 -21709 -21710 -21711 -21712 -21713 -21714 -21715 -21716 -21717 -21718 -21719 -21720 -21721 -21722 -21723 -21724 -21725 -21726 -21727 -21728 -21729 -21730 -21731 -21732 -21733 -21734 -21735 -21736 -21737 -21738 -21739 -21740 -21741 -21742 -21743 -21744 -21745 -21746 -21747 -21748 -21749 -21750 -21751 -21752 -21753 -21754 -21755 -21756 -21757 -21758 -21759 -21760 -21761 -21762 -21763 -21764 -21765 -21766 -21767 -21768 -21769 -21770 -21771 -21772 -21773 -21774 -21775 -21776 -21777 -21778 -21779 -21780 -21781 -21782 -21783 -21784 -21785 -21786 -21787 -21788 -21789 -21790 -21791 -21792 -21793 -21794 -21795 -21796 -21797 -21798 -21799 -21800 -21801 -21802 -21803 -21804 -21805 -21806 -21807 -21808 -21809 -21810 -21811 -21812 -21813 -21814 -21815 -21816 -21817 -21818 -21819 -21820 -21821 -21822 -21823 -21824 -21825 -21826 -21827 -21828 -21829 -21830 -21831 -21832 -21833 -21834 -21835 -21836 -21837 -21838 -21839 -21840 -21841 -21842 -21843 -21844 -21845 -21846 -21847 -21848 -21849 -21850 -21851 -21852 -21853 -21854 -21855 -21856 -21857 -21858 -21859 -21860 -21861 -21862 -21863 -21864 -21865 -21866 -21867 -21868 -21869 -21870 -21871 -21872 -21873 -21874 -21875 -21876 -21877 -21878 -21879 -21880 -21881 -21882 -21883 -21884 -21885 -21886 -21887 -21888 -21889 -21890 -21891 -21892 -21893 -21894 -21895 -21896 -21897 -21898 -21899 -21900 -21901 -21902 -21903 -21904 -21905 -21906 -21907 -21908 -21909 -21910 -21911 -21912 -21913 -21914 -21915 -21916 -21917 -21918 -21919 -21920 -21921 -21922 -21923 -21924 -21925 -21926 -21927 -21928 -21929 -21930 -21931 -21932 -21933 -21934 -21935 -21936 -21937 -21938 -21939 -21940 -21941 -21942 -21943 -21944 -21945 -21946 -21947 -21948 -21949 -21950 -21951 -21952 -21953 -21954 -21955 -21956 -21957 -21958 -21959 -21960 -21961 -21962 -21963 -21964 -21965 -21966 -21967 -21968 -21969 -21970 -21971 -21972 -21973 -21974 -21975 -21976 -21977 -21978 -21979 -21980 -21981 -21982 -21983 -21984 -21985 -21986 -21987 -21988 -21989 -21990 -21991 -21992 -21993 -21994 -21995 -21996 -21997 -21998 -21999 -22000 -22001 -22002 -22003 -22004 -22005 -22006 -22007 -22008 -22009 -22010 -22011 -22012 -22013 -22014 -22015 -22016 -22017 -22018 -22019 -22020 -22021 -22022 -22023 -22024 -22025 -22026 -22027 -22028 -22029 -22030 -22031 -22032 -22033 -22034 -22035 -22036 -22037 -22038 -22039 -22040 -22041 -22042 -22043 -22044 -22045 -22046 -22047 -22048 -22049 -22050 -22051 -22052 -22053 -22054 -22055 -22056 -22057 -22058 -22059 -22060 -22061 -22062 -22063 -22064 -22065 -22066 -22067 -22068 -22069 -22070 -22071 -22072 -22073 -22074 -22075 -22076 -22077 -22078 -22079 -22080 -22081 -22082 -22083 -22084 -22085 -22086 -22087 -22088 -22089 -22090 -22091 -22092 -22093 -22094 -22095 -22096 -22097 -22098 -22099 -22100 -22101 -22102 -22103 -22104 -22105 -22106 -22107 -22108 -22109 -22110 -22111 -22112 -22113 -22114 -22115 -22116 -22117 -22118 -22119 -22120 -22121 -22122 -22123 -22124 -22125 -22126 -22127 -22128 -22129 -22130 -22131 -22132 -22133 -22134 -22135 -22136 -22137 -22138 -22139 -22140 -22141 -22142 -22143 -22144 -22145 -22146 -22147 -22148 -22149 -22150 -22151 -22152 -22153 -22154 -22155 -22156 -22157 -22158 -22159 -22160 -22161 -22162 -22163 -22164 -22165 -22166 -22167 -22168 -22169 -22170 -22171 -22172 -22173 -22174 -22175 -22176 -22177 -22178 -22179 -22180 -22181 -22182 -22183 -22184 -22185 -22186 -22187 -22188 -22189 -22190 -22191 -22192 -22193 -22194 -22195 -22196 -22197 -22198 -22199 -22200 -22201 -22202 -22203 -22204 -22205 -22206 -22207 -22208 -22209 -22210 -22211 -22212 -22213 -22214 -22215 -22216 -22217 -22218 -22219 -22220 -22221 -22222 -22223 -22224 -22225 -22226 -22227 -22228 -22229 -22230 -22231 -22232 -22233 -22234 -22235 -22236 -22237 -22238 -22239 -22240 -22241 -22242 -22243 -22244 -22245 -22246 -22247 -22248 -22249 -22250 -22251 -22252 -22253 -22254 -22255 -22256 -22257 -22258 -22259 -22260 -22261 -22262 -22263 -22264 -22265 -22266 -22267 -22268 -22269 -22270 -22271 -22272 -22273 -22274 -22275 -22276 -22277 -22278 -22279 -22280 -22281 -22282 -22283 -22284 -22285 -22286 -22287 -22288 -22289 -22290 -22291 -22292 -22293 -22294 -22295 -22296 -22297 -22298 -22299 -22300 -22301 -22302 -22303 -22304 -22305 -22306 -22307 -22308 -22309 -22310 -22311 -22312 -22313 -22314 -22315 -22316 -22317 -22318 -22319 -22320 -22321 -22322 -22323 -22324 -22325 -22326 -22327 -22328 -22329 -22330 -22331 -22332 -22333 -22334 -22335 -22336 -22337 -22338 -22339 -22340 -22341 -22342 -22343 -22344 -22345 -22346 -22347 -22348 -22349 -22350 -22351 -22352 -22353 -22354 -22355 -22356 -22357 -22358 -22359 -22360 -22361 -22362 -22363 -22364 -22365 -22366 -22367 -22368 -22369 -22370 -22371 -22372 -22373 -22374 -22375 -22376 -22377 -22378 -22379 -22380 -22381 -22382 -22383 -22384 -22385 -22386 -22387 -22388 -22389 -22390 -22391 -22392 -22393 -22394 -22395 -22396 -22397 -22398 -22399 -22400 -22401 -22402 -22403 -22404 -22405 -22406 -22407 -22408 -22409 -22410 -22411 -22412 -22413 -22414 -22415 -22416 -22417 -22418 -22419 -22420 -22421 -22422 -22423 -22424 -22425 -22426 -22427 -22428 -22429 -22430 -22431 -22432 -22433 -22434 -22435 -22436 -22437 -22438 -22439 -22440 -22441 -22442 -22443 -22444 -22445 -22446 -22447 -22448 -22449 -22450 -22451 -22452 -22453 -22454 -22455 -22456 -22457 -22458 -22459 -22460 -22461 -22462 -22463 -22464 -22465 -22466 -22467 -22468 -22469 -22470 -22471 -22472 -22473 -22474 -22475 -22476 -22477 -22478 -22479 -22480 -22481 -22482 -22483 -22484 -22485 -22486 -22487 -22488 -22489 -22490 -22491 -22492 -22493 -22494 -22495 -22496 -22497 -22498 -22499 -22500 -22501 -22502 -22503 -22504 -22505 -22506 -22507 -22508 -22509 -22510 -22511 -22512 -22513 -22514 -22515 -22516 -22517 -22518 -22519 -22520 -22521 -22522 -22523 -22524 -22525 -22526 -22527 -22528 -22529 -22530 -22531 -22532 -22533 -22534 -22535 -22536 -22537 -22538 -22539 -22540 -22541 -22542 -22543 -22544 -22545 -22546 -22547 -22548 -22549 -22550 -22551 -22552 -22553 -22554 -22555 -22556 -22557 -22558 -22559 -22560 -22561 -22562 -22563 -22564 -22565 -22566 -22567 -22568 -22569 -22570 -22571 -22572 -22573 -22574 -22575 -22576 -22577 -22578 -22579 -22580 -22581 -22582 -22583 -22584 -22585 -22586 -22587 -22588 -22589 -22590 -22591 -22592 -22593 -22594 -22595 -22596 -22597 -22598 -22599 -22600 -22601 -22602 -22603 -22604 -22605 -22606 -22607 -22608 -22609 -22610 -22611 -22612 -22613 -22614 -22615 -22616 -22617 -22618 -22619 -22620 -22621 -22622 -22623 -22624 -22625 -22626 -22627 -22628 -22629 -22630 -22631 -22632 -22633 -22634 -22635 -22636 -22637 -22638 -22639 -22640 -22641 -22642 -22643 -22644 -22645 -22646 -22647 -22648 -22649 -22650 -22651 -22652 -22653 -22654 -22655 -22656 -22657 -22658 -22659 -22660 -22661 -22662 -22663 -22664 -22665 -22666 -22667 -22668 -22669 -22670 -22671 -22672 -22673 -22674 -22675 -22676 -22677 -22678 -22679 -22680 -22681 -22682 -22683 -22684 -22685 -22686 -22687 -22688 -22689 -22690 -22691 -22692 -22693 -22694 -22695 -22696 -22697 -22698 -22699 -22700 -22701 -22702 -22703 -22704 -22705 -22706 -22707 -22708 -22709 -22710 -22711 -22712 -22713 -22714 -22715 -22716 -22717 -22718 -22719 -22720 -22721 -22722 -22723 -22724 -22725 -22726 -22727 -22728 -22729 -22730 -22731 -22732 -22733 -22734 -22735 -22736 -22737 -22738 -22739 -22740 -22741 -22742 -22743 -22744 -22745 -22746 -22747 -22748 -22749 -22750 -22751 -22752 -22753 -22754 -22755 -22756 -22757 -22758 -22759 -22760 -22761 -22762 -22763 -22764 -22765 -22766 -22767 -22768 -22769 -22770 -22771 -22772 -22773 -22774 -22775 -22776 -22777 -22778 -22779 -22780 -22781 -22782 -22783 -22784 -22785 -22786 -22787 -22788 -22789 -22790 -22791 -22792 -22793 -22794 -22795 -22796 -22797 -22798 -22799 -22800 -22801 -22802 -22803 -22804 -22805 -22806 -22807 -22808 -22809 -22810 -22811 -22812 -22813 -22814 -22815 -22816 -22817 -22818 -22819 -22820 -22821 -22822 -22823 -22824 -22825 -22826 -22827 -22828 -22829 -22830 -22831 -22832 -22833 -22834 -22835 -22836 -22837 -22838 -22839 -22840 -22841 -22842 -22843 -22844 -22845 -22846 -22847 -22848 -22849 -22850 -22851 -22852 -22853 -22854 -22855 -22856 -22857 -22858 -22859 -22860 -22861 -22862 -22863 -22864 -22865 -22866 -22867 -22868 -22869 -22870 -22871 -22872 -22873 -22874 -22875 -22876 -22877 -22878 -22879 -22880 -22881 -22882 -22883 -22884 -22885 -22886 -22887 -22888 -22889 -22890 -22891 -22892 -22893 -22894 -22895 -22896 -22897 -22898 -22899 -22900 -22901 -22902 -22903 -22904 -22905 -22906 -22907 -22908 -22909 -22910 -22911 -22912 -22913 -22914 -22915 -22916 -22917 -22918 -22919 -22920 -22921 -22922 -22923 -22924 -22925 -22926 -22927 -22928 -22929 -22930 -22931 -22932 -22933 -22934 -22935 -22936 -22937 -22938 -22939 -22940 -22941 -22942 -22943 -22944 -22945 -22946 -22947 -22948 -22949 -22950 -22951 -22952 -22953 -22954 -22955 -22956 -22957 -22958 -22959 -22960 -22961 -22962 -22963 -22964 -22965 -22966 -22967 -22968 -22969 -22970 -22971 -22972 -22973 -22974 -22975 -22976 -22977 -22978 -22979 -22980 -22981 -22982 -22983 -22984 -22985 -22986 -22987 -22988 -22989 -22990 -22991 -22992 -22993 -22994 -22995 -22996 -22997 -22998 -22999 -23000 -23001 -23002 -23003 -23004 -23005 -23006 -23007 -23008 -23009 -23010 -23011 -23012 -23013 -23014 -23015 -23016 -23017 -23018 -23019 -23020 -23021 -23022 -23023 -23024 -23025 -23026 -23027 -23028 -23029 -23030 -23031 -23032 -23033 -23034 -23035 -23036 -23037 -23038 -23039 -23040 -23041 -23042 -23043 -23044 -23045 -23046 -23047 -23048 -23049 -23050 -23051 -23052 -23053 -23054 -23055 -23056 -23057 -23058 -23059 -23060 -23061 -23062 -23063 -23064 -23065 -23066 -23067 -23068 -23069 -23070 -23071 -23072 -23073 -23074 -23075 -23076 -23077 -23078 -23079 -23080 -23081 -23082 -23083 -23084 -23085 -23086 -23087 -23088 -23089 -23090 -23091 -23092 -23093 -23094 -23095 -23096 -23097 -23098 -23099 -23100 -23101 -23102 -23103 -23104 -23105 -23106 -23107 -23108 -23109 -23110 -23111 -23112 -23113 -23114 -23115 -23116 -23117 -23118 -23119 -23120 -23121 -23122 -23123 -23124 -23125 -23126 -23127 -23128 -23129 -23130 -23131 -23132 -23133 -23134 -23135 -23136 -23137 -23138 -23139 -23140 -23141 -23142 -23143 -23144 -23145 -23146 -23147 -23148 -23149 -23150 -23151 -23152 -23153 -23154 -23155 -23156 -23157 -23158 -23159 -23160 -23161 -23162 -23163 -23164 -23165 -23166 -23167 -23168 -23169 -23170 -23171 -23172 -23173 -23174 -23175 -23176 -23177 -23178 -23179 -23180 -23181 -23182 -23183 -23184 -23185 -23186 -23187 -23188 -23189 -23190 -23191 -23192 -23193 -23194 -23195 -23196 -23197 -23198 -23199 -23200 -23201 -23202 -23203 -23204 -23205 -23206 -23207 -23208 -23209 -23210 -23211 -23212 -23213 -23214 -23215 -23216 -23217 -23218 -23219 -23220 -23221 -23222 -23223 -23224 -23225 -23226 -23227 -23228 -23229 -23230 -23231 -23232 -23233 -23234 -23235 -23236 -23237 -23238 -23239 -23240 -23241 -23242 -23243 -23244 -23245 -23246 -23247 -23248 -23249 -23250 -23251 -23252 -23253 -23254 -23255 -23256 -23257 -23258 -23259 -23260 -23261 -23262 -23263 -23264 -23265 -23266 -23267 -23268 -23269 -23270 -23271 -23272 -23273 -23274 -23275 -23276 -23277 -23278 -23279 -23280 -23281 -23282 -23283 -23284 -23285 -23286 -23287 -23288 -23289 -23290 -23291 -23292 -23293 -23294 -23295 -23296 -23297 -23298 -23299 -23300 -23301 -23302 -23303 -23304 -23305 -23306 -23307 -23308 -23309 -23310 -23311 -23312 -23313 -23314 -23315 -23316 -23317 -23318 -23319 -23320 -23321 -23322 -23323 -23324 -23325 -23326 -23327 -23328 -23329 -23330 -23331 -23332 -23333 -23334 -23335 -23336 -23337 -23338 -23339 -23340 -23341 -23342 -23343 -23344 -23345 -23346 -23347 -23348 -23349 -23350 -23351 -23352 -23353 -23354 -23355 -23356 -23357 -23358 -23359 -23360 -23361 -23362 -23363 -23364 -23365 -23366 -23367 -23368 -23369 -23370 -23371 -23372 -23373 -23374 -23375 -23376 -23377 -23378 -23379 -23380 -23381 -23382 -23383 -23384 -23385 -23386 -23387 -23388 -23389 -23390 -23391 -23392 -23393 -23394 -23395 -23396 -23397 -23398 -23399 -23400 -23401 -23402 -23403 -23404 -23405 -23406 -23407 -23408 -23409 -23410 -23411 -23412 -23413 -23414 -23415 -23416 -23417 -23418 -23419 -23420 -23421 -23422 -23423 -23424 -23425 -23426 -23427 -23428 -23429 -23430 -23431 -23432 -23433 -23434 -23435 -23436 -23437 -23438 -23439 -23440 -23441 -23442 -23443 -23444 -23445 -23446 -23447 -23448 -23449 -23450 -23451 -23452 -23453 -23454 -23455 -23456 -23457 -23458 -23459 -23460 -23461 -23462 -23463 -23464 -23465 -23466 -23467 -23468 -23469 -23470 -23471 -23472 -23473 -23474 -23475 -23476 -23477 -23478 -23479 -23480 -23481 -23482 -23483 -23484 -23485 -23486 -23487 -23488 -23489 -23490 -23491 -23492 -23493 -23494 -23495 -23496 -23497 -23498 -23499 -23500 -23501 -23502 -23503 -23504 -23505 -23506 -23507 -23508 -23509 -23510 -23511 -23512 -23513 -23514 -23515 -23516 -23517 -23518 -23519 -23520 -23521 -23522 -23523 -23524 -23525 -23526 -23527 -23528 -23529 -23530 -23531 -23532 -23533 -23534 -23535 -23536 -23537 -23538 -23539 -23540 -23541 -23542 -23543 -23544 -23545 -23546 -23547 -23548 -23549 -23550 -23551 -23552 -23553 -23554 -23555 -23556 -23557 -23558 -23559 -23560 -23561 -23562 -23563 -23564 -23565 -23566 -23567 -23568 -23569 -23570 -23571 -23572 -23573 -23574 -23575 -23576 -23577 -23578 -23579 -23580 -23581 -23582 -23583 -23584 -23585 -23586 -23587 -23588 -23589 -23590 -23591 -23592 -23593 -23594 -23595 -23596 -23597 -23598 -23599 -23600 -23601 -23602 -23603 -23604 -23605 -23606 -23607 -23608 -23609 -23610 -23611 -23612 -23613 -23614 -23615 -23616 -23617 -23618 -23619 -23620 -23621 -23622 -23623 -23624 -23625 -23626 -23627 -23628 -23629 -23630 -23631 -23632 -23633 -23634 -23635 -23636 -23637 -23638 -23639 -23640 -23641 -23642 -23643 -23644 -23645 -23646 -23647 -23648 -23649 -23650 -23651 -23652 -23653 -23654 -23655 -23656 -23657 -23658 -23659 -23660 -23661 -23662 -23663 -23664 -23665 -23666 -23667 -23668 -23669 -23670 -23671 -23672 -23673 -23674 -23675 -23676 -23677 -23678 -23679 -23680 -23681 -23682 -23683 -23684 -23685 -23686 -23687 -23688 -23689 -23690 -23691 -23692 -23693 -23694 -23695 -23696 -23697 -23698 -23699 -23700 -23701 -23702 -23703 -23704 -23705 -23706 -23707 -23708 -23709 -23710 -23711 -23712 -23713 -23714 -23715 -23716 -23717 -23718 -23719 -23720 -23721 -23722 -23723 -23724 -23725 -23726 -23727 -23728 -23729 -23730 -23731 -23732 -23733 -23734 -23735 -23736 -23737 -23738 -23739 -23740 -23741 -23742 -23743 -23744 -23745 -23746 -23747 -23748 -23749 -23750 -23751 -23752 -23753 -23754 -23755 -23756 -23757 -23758 -23759 -23760 -23761 -23762 -23763 -23764 -23765 -23766 -23767 -23768 -23769 -23770 -23771 -23772 -23773 -23774 -23775 -23776 -23777 -23778 -23779 -23780 -23781 -23782 -23783 -23784 -23785 -23786 -23787 -23788 -23789 -23790 -23791 -23792 -23793 -23794 -23795 -23796 -23797 -23798 -23799 -23800 -23801 -23802 -23803 -23804 -23805 -23806 -23807 -23808 -23809 -23810 -23811 -23812 -23813 -23814 -23815 -23816 -23817 -23818 -23819 -23820 -23821 -23822 -23823 -23824 -23825 -23826 -23827 -23828 -23829 -23830 -23831 -23832 -23833 -23834 -23835 -23836 -23837 -23838 -23839 -23840 -23841 -23842 -23843 -23844 -23845 -23846 -23847 -23848 -23849 -23850 -23851 -23852 -23853 -23854 -23855 -23856 -23857 -23858 -23859 -23860 -23861 -23862 -23863 -23864 -23865 -23866 -23867 -23868 -23869 -23870 -23871 -23872 -23873 -23874 -23875 -23876 -23877 -23878 -23879 -23880 -23881 -23882 -23883 -23884 -23885 -23886 -23887 -23888 -23889 -23890 -23891 -23892 -23893 -23894 -23895 -23896 -23897 -23898 -23899 -23900 -23901 -23902 -23903 -23904 -23905 -23906 -23907 -23908 -23909 -23910 -23911 -23912 -23913 -23914 -23915 -23916 -23917 -23918 -23919 -23920 -23921 -23922 -23923 -23924 -23925 -23926 -23927 -23928 -23929 -23930 -23931 -23932 -23933 -23934 -23935 -23936 -23937 -23938 -23939 -23940 -23941 -23942 -23943 -23944 -23945 -23946 -23947 -23948 -23949 -23950 -23951 -23952 -23953 -23954 -23955 -23956 -23957 -23958 -23959 -23960 -23961 -23962 -23963 -23964 -23965 -23966 -23967 -23968 -23969 -23970 -23971 -23972 -23973 -23974 -23975 -23976 -23977 -23978 -23979 -23980 -23981 -23982 -23983 -23984 -23985 -23986 -23987 -23988 -23989 -23990 -23991 -23992 -23993 -23994 -23995 -23996 -23997 -23998 -23999 -24000 -24001 -24002 -24003 -24004 -24005 -24006 -24007 -24008 -24009 -24010 -24011 -24012 -24013 -24014 -24015 -24016 -24017 -24018 -24019 -24020 -24021 -24022 -24023 -24024 -24025 -24026 -24027 -24028 -24029 -24030 -24031 -24032 -24033 -24034 -24035 -24036 -24037 -24038 -24039 -24040 -24041 -24042 -24043 -24044 -24045 -24046 -24047 -24048 -24049 -24050 -24051 -24052 -24053 -24054 -24055 -24056 -24057 -24058 -24059 -24060 -24061 -24062 -24063 -24064 -24065 -24066 -24067 -24068 -24069 -24070 -24071 -24072 -24073 -24074 -24075 -24076 -24077 -24078 -24079 -24080 -24081 -24082 -24083 -24084 -24085 -24086 -24087 -24088 -24089 -24090 -24091 -24092 -24093 -24094 -24095 -24096 -24097 -24098 -24099 -24100 -24101 -24102 -24103 -24104 -24105 -24106 -24107 -24108 -24109 -24110 -24111 -24112 -24113 -24114 -24115 -24116 -24117 -24118 -24119 -24120 -24121 -24122 -24123 -24124 -24125 -24126 -24127 -24128 -24129 -24130 -24131 -24132 -24133 -24134 -24135 -24136 -24137 -24138 -24139 -24140 -24141 -24142 -24143 -24144 -24145 -24146 -24147 -24148 -24149 -24150 -24151 -24152 -24153 -24154 -24155 -24156 -24157 -24158 -24159 -24160 -24161 -24162 -24163 -24164 -24165 -24166 -24167 -24168 -24169 -24170 -24171 -24172 -24173 -24174 -24175 -24176 -24177 -24178 -24179 -24180 -24181 -24182 -24183 -24184 -24185 -24186 -24187 -24188 -24189 -24190 -24191 -24192 -24193 -24194 -24195 -24196 -24197 -24198 -24199 -24200 -24201 -24202 -24203 -24204 -24205 -24206 -24207 -24208 -24209 -24210 -24211 -24212 -24213 -24214 -24215 -24216 -24217 -24218 -24219 -24220 -24221 -24222 -24223 -24224 -24225 -24226 -24227 -24228 -24229 -24230 -24231 -24232 -24233 -24234 -24235 -24236 -24237 -24238 -24239 -24240 -24241 -24242 -24243 -24244 -24245 -24246 -24247 -24248 -24249 -24250 -24251 -24252 -24253 -24254 -24255 -24256 -24257 -24258 -24259 -24260 -24261 -24262 -24263 -24264 -24265 -24266 -24267 -24268 -24269 -24270 -24271 -24272 -24273 -24274 -24275 -24276 -24277 -24278 -24279 -24280 -24281 -24282 -24283 -24284 -24285 -24286 -24287 -24288 -24289 -24290 -24291 -24292 -24293 -24294 -24295 -24296 -24297 -24298 -24299 -24300 -24301 -24302 -24303 -24304 -24305 -24306 -24307 -24308 -24309 -24310 -24311 -24312 -24313 -24314 -24315 -24316 -24317 -24318 -24319 -24320 -24321 -24322 -24323 -24324 -24325 -24326 -24327 -24328 -24329 -24330 -24331 -24332 -24333 -24334 -24335 -24336 -24337 -24338 -24339 -24340 -24341 -24342 -24343 -24344 -24345 -24346 -24347 -24348 -24349 -24350 -24351 -24352 -24353 -24354 -24355 -24356 -24357 -24358 -24359 -24360 -24361 -24362 -24363 -24364 -24365 -24366 -24367 -24368 -24369 -24370 -24371 -24372 -24373 -24374 -24375 -24376 -24377 -24378 -24379 -24380 -24381 -24382 -24383 -24384 -24385 -24386 -24387 -24388 -24389 -24390 -24391 -24392 -24393 -24394 -24395 -24396 -24397 -24398 -24399 -24400 -24401 -24402 -24403 -24404 -24405 -24406 -24407 -24408 -24409 -24410 -24411 -24412 -24413 -24414 -24415 -24416 -24417 -24418 -24419 -24420 -24421 -24422 -24423 -24424 -24425 -24426 -24427 -24428 -24429 -24430 -24431 -24432 -24433 -24434 -24435 -24436 -24437 -24438 -24439 -24440 -24441 -24442 -24443 -24444 -24445 -24446 -24447 -24448 -24449 -24450 -24451 -24452 -24453 -24454 -24455 -24456 -24457 -24458 -24459 -24460 -24461 -24462 -24463 -24464 -24465 -24466 -24467 -24468 -24469 -24470 -24471 -24472 -24473 -24474 -24475 -24476 -24477 -24478 -24479 -24480 -24481 -24482 -24483 -24484 -24485 -24486 -24487 -24488 -24489 -24490 -24491 -24492 -24493 -24494 -24495 -24496 -24497 -24498 -24499 -24500 -24501 -24502 -24503 -24504 -24505 -24506 -24507 -24508 -24509 -24510 -24511 -24512 -24513 -24514 -24515 -24516 -24517 -24518 -24519 -24520 -24521 -24522 -24523 -24524 -24525 -24526 -24527 -24528 -24529 -24530 -24531 -24532 -24533 -24534 -24535 -24536 -24537 -24538 -24539 -24540 -24541 -24542 -24543 -24544 -24545 -24546 -24547 -24548 -24549 -24550 -24551 -24552 -24553 -24554 -24555 -24556 -24557 -24558 -24559 -24560 -24561 -24562 -24563 -24564 -24565 -24566 -24567 -24568 -24569 -24570 -24571 -24572 -24573 -24574 -24575 -24576 -24577 -24578 -24579 -24580 -24581 -24582 -24583 -24584 -24585 -24586 -24587 -24588 -24589 -24590 -24591 -24592 -24593 -24594 -24595 -24596 -24597 -24598 -24599 -24600 -24601 -24602 -24603 -24604 -24605 -24606 -24607 -24608 -24609 -24610 -24611 -24612 -24613 -24614 -24615 -24616 -24617 -24618 -24619 -24620 -24621 -24622 -24623 -24624 -24625 -24626 -24627 -24628 -24629 -24630 -24631 -24632 -24633 -24634 -24635 -24636 -24637 -24638 -24639 -24640 -24641 -24642 -24643 -24644 -24645 -24646 -24647 -24648 -24649 -24650 -24651 -24652 -24653 -24654 -24655 -24656 -24657 -24658 -24659 -24660 -24661 -24662 -24663 -24664 -24665 -24666 -24667 -24668 -24669 -24670 -24671 -24672 -24673 -24674 -24675 -24676 -24677 -24678 -24679 -24680 -24681 -24682 -24683 -24684 -24685 -24686 -24687 -24688 -24689 -24690 -24691 -24692 -24693 -24694 -24695 -24696 -24697 -24698 -24699 -24700 -24701 -24702 -24703 -24704 -24705 -24706 -24707 -24708 -24709 -24710 -24711 -24712 -24713 -24714 -24715 -24716 -24717 -24718 -24719 -24720 -24721 -24722 -24723 -24724 -24725 -24726 -24727 -24728 -24729 -24730 -24731 -24732 -24733 -24734 -24735 -24736 -24737 -24738 -24739 -24740 -24741 -24742 -24743 -24744 -24745 -24746 -24747 -24748 -24749 -24750 -24751 -24752 -24753 -24754 -24755 -24756 -24757 -24758 -24759 -24760 -24761 -24762 -24763 -24764 -24765 -24766 -24767 -24768 -24769 -24770 -24771 -24772 -24773 -24774 -24775 -24776 -24777 -24778 -24779 -24780 -24781 -24782 -24783 -24784 -24785 -24786 -24787 -24788 -24789 -24790 -24791 -24792 -24793 -24794 -24795 -24796 -24797 -24798 -24799 -24800 -24801 -24802 -24803 -24804 -24805 -24806 -24807 -24808 -24809 -24810 -24811 -24812 -24813 -24814 -24815 -24816 -24817 -24818 -24819 -24820 -24821 -24822 -24823 -24824 -24825 -24826 -24827 -24828 -24829 -24830 -24831 -24832 -24833 -24834 -24835 -24836 -24837 -24838 -24839 -24840 -24841 -24842 -24843 -24844 -24845 -24846 -24847 -24848 -24849 -24850 -24851 -24852 -24853 -24854 -24855 -24856 -24857 -24858 -24859 -24860 -24861 -24862 -24863 -24864 -24865 -24866 -24867 -24868 -24869 -24870 -24871 -24872 -24873 -24874 -24875 -24876 -24877 -24878 -24879 -24880 -24881 -24882 -24883 -24884 -24885 -24886 -24887 -24888 -24889 -24890 -24891 -24892 -24893 -24894 -24895 -24896 -24897 -24898 -24899 -24900 -24901 -24902 -24903 -24904 -24905 -24906 -24907 -24908 -24909 -24910 -24911 -24912 -24913 -24914 -24915 -24916 -24917 -24918 -24919 -24920 -24921 -24922 -24923 -24924 -24925 -24926 -24927 -24928 -24929 -24930 -24931 -24932 -24933 -24934 -24935 -24936 -24937 -24938 -24939 -24940 -24941 -24942 -24943 -24944 -24945 -24946 -24947 -24948 -24949 -24950 -24951 -24952 -24953 -24954 -24955 -24956 -24957 -24958 -24959 -24960 -24961 -24962 -24963 -24964 -24965 -24966 -24967 -24968 -24969 -24970 -24971 -24972 -24973 -24974 -24975 -24976 -24977 -24978 -24979 -24980 -24981 -24982 -24983 -24984 -24985 -24986 -24987 -24988 -24989 -24990 -24991 -24992 -24993 -24994 -24995 -24996 -24997 -24998 -24999 -25000 -25001 -25002 -25003 -25004 -25005 -25006 -25007 -25008 -25009 -25010 -25011 -25012 -25013 -25014 -25015 -25016 -25017 -25018 -25019 -25020 -25021 -25022 -25023 -25024 -25025 -25026 -25027 -25028 -25029 -25030 -25031 -25032 -25033 -25034 -25035 -25036 -25037 -25038 -25039 -25040 -25041 -25042 -25043 -25044 -25045 -25046 -25047 -25048 -25049 -25050 -25051 -25052 -25053 -25054 -25055 -25056 -25057 -25058 -25059 -25060 -25061 -25062 -25063 -25064 -25065 -25066 -25067 -25068 -25069 -25070 -25071 -25072 -25073 -25074 -25075 -25076 -25077 -25078 -25079 -25080 -25081 -25082 -25083 -25084 -25085 -25086 -25087 -25088 -25089 -25090 -25091 -25092 -25093 -25094 -25095 -25096 -25097 -25098 -25099 -25100 -25101 -25102 -25103 -25104 -25105 -25106 -25107 -25108 -25109 -25110 -25111 -25112 -25113 -25114 -25115 -25116 -25117 -25118 -25119 -25120 -25121 -25122 -25123 -25124 -25125 -25126 -25127 -25128 -25129 -25130 -25131 -25132 -25133 -25134 -25135 -25136 -25137 -25138 -25139 -25140 -25141 -25142 -25143 -25144 -25145 -25146 -25147 -25148 -25149 -25150 -25151 -25152 -25153 -25154 -25155 -25156 -25157 -25158 -25159 -25160 -25161 -25162 -25163 -25164 -25165 -25166 -25167 -25168 -25169 -25170 -25171 -25172 -25173 -25174 -25175 -25176 -25177 -25178 -25179 -25180 -25181 -25182 -25183 -25184 -25185 -25186 -25187 -25188 -25189 -25190 -25191 -25192 -25193 -25194 -25195 -25196 -25197 -25198 -25199 -25200 -25201 -25202 -25203 -25204 -25205 -25206 -25207 -25208 -25209 -25210 -25211 -25212 -25213 -25214 -25215 -25216 -25217 -25218 -25219 -25220 -25221 -25222 -25223 -25224 -25225 -25226 -25227 -25228 -25229 -25230 -25231 -25232 -25233 -25234 -25235 -25236 -25237 -25238 -25239 -25240 -25241 -25242 -25243 -25244 -25245 -25246 -25247 -25248 -25249 -25250 -25251 -25252 -25253 -25254 -25255 -25256 -25257 -25258 -25259 -25260 -25261 -25262 -25263 -25264 -25265 -25266 -25267 -25268 -25269 -25270 -25271 -25272 -25273 -25274 -25275 -25276 -25277 -25278 -25279 -25280 -25281 -25282 -25283 -25284 -25285 -25286 -25287 -25288 -25289 -25290 -25291 -25292 -25293 -25294 -25295 -25296 -25297 -25298 -25299 -25300 -25301 -25302 -25303 -25304 -25305 -25306 -25307 -25308 -25309 -25310 -25311 -25312 -25313 -25314 -25315 -25316 -25317 -25318 -25319 -25320 -25321 -25322 -25323 -25324 -25325 -25326 -25327 -25328 -25329 -25330 -25331 -25332 -25333 -25334 -25335 -25336 -25337 -25338 -25339 -25340 -25341 -25342 -25343 -25344 -25345 -25346 -25347 -25348 -25349 -25350 -25351 -25352 -25353 -25354 -25355 -25356 -25357 -25358 -25359 -25360 -25361 -25362 -25363 -25364 -25365 -25366 -25367 -25368 -25369 -25370 -25371 -25372 -25373 -25374 -25375 -25376 -25377 -25378 -25379 -25380 -25381 -25382 -25383 -25384 -25385 -25386 -25387 -25388 -25389 -25390 -25391 -25392 -25393 -25394 -25395 -25396 -25397 -25398 -25399 -25400 -25401 -25402 -25403 -25404 -25405 -25406 -25407 -25408 -25409 -25410 -25411 -25412 -25413 -25414 -25415 -25416 -25417 -25418 -25419 -25420 -25421 -25422 -25423 -25424 -25425 -25426 -25427 -25428 -25429 -25430 -25431 -25432 -25433 -25434 -25435 -25436 -25437 -25438 -25439 -25440 -25441 -25442 -25443 -25444 -25445 -25446 -25447 -25448 -25449 -25450 -25451 -25452 -25453 -25454 -25455 -25456 -25457 -25458 -25459 -25460 -25461 -25462 -25463 -25464 -25465 -25466 -25467 -25468 -25469 -25470 -25471 -25472 -25473 -25474 -25475 -25476 -25477 -25478 -25479 -25480 -25481 -25482 -25483 -25484 -25485 -25486 -25487 -25488 -25489 -25490 -25491 -25492 -25493 -25494 -25495 -25496 -25497 -25498 -25499 -25500 -25501 -25502 -25503 -25504 -25505 -25506 -25507 -25508 -25509 -25510 -25511 -25512 -25513 -25514 -25515 -25516 -25517 -25518 -25519 -25520 -25521 -25522 -25523 -25524 -25525 -25526 -25527 -25528 -25529 -25530 -25531 -25532 -25533 -25534 -25535 -25536 -25537 -25538 -25539 -25540 -25541 -25542 -25543 -25544 -25545 -25546 -25547 -25548 -25549 -25550 -25551 -25552 -25553 -25554 -25555 -25556 -25557 -25558 -25559 -25560 -25561 -25562 -25563 -25564 -25565 -25566 -25567 -25568 -25569 -25570 -25571 -25572 -25573 -25574 -25575 -25576 -25577 -25578 -25579 -25580 -25581 -25582 -25583 -25584 -25585 -25586 -25587 -25588 -25589 -25590 -25591 -25592 -25593 -25594 -25595 -25596 -25597 -25598 -25599 -25600 -25601 -25602 -25603 -25604 -25605 -25606 -25607 -25608 -25609 -25610 -25611 -25612 -25613 -25614 -25615 -25616 -25617 -25618 -25619 -25620 -25621 -25622 -25623 -25624 -25625 -25626 -25627 -25628 -25629 -25630 -25631 -25632 -25633 -25634 -25635 -25636 -25637 -25638 -25639 -25640 -25641 -25642 -25643 -25644 -25645 -25646 -25647 -25648 -25649 -25650 -25651 -25652 -25653 -25654 -25655 -25656 -25657 -25658 -25659 -25660 -25661 -25662 -25663 -25664 -25665 -25666 -25667 -25668 -25669 -25670 -25671 -25672 -25673 -25674 -25675 -25676 -25677 -25678 -25679 -25680 -25681 -25682 -25683 -25684 -25685 -25686 -25687 -25688 -25689 -25690 -25691 -25692 -25693 -25694 -25695 -25696 -25697 -25698 -25699 -25700 -25701 -25702 -25703 -25704 -25705 -25706 -25707 -25708 -25709 -25710 -25711 -25712 -25713 -25714 -25715 -25716 -25717 -25718 -25719 -25720 -25721 -25722 -25723 -25724 -25725 -25726 -25727 -25728 -25729 -25730 -25731 -25732 -25733 -25734 -25735 -25736 -25737 -25738 -25739 -25740 -25741 -25742 -25743 -25744 -25745 -25746 -25747 -25748 -25749 -25750 -25751 -25752 -25753 -25754 -25755 -25756 -25757 -25758 -25759 -25760 -25761 -25762 -25763 -25764 -25765 -25766 -25767 -25768 -25769 -25770 -25771 -25772 -25773 -25774 -25775 -25776 -25777 -25778 -25779 -25780 -25781 -25782 -25783 -25784 -25785 -25786 -25787 -25788 -25789 -25790 -25791 -25792 -25793 -25794 -25795 -25796 -25797 -25798 -25799 -25800 -25801 -25802 -25803 -25804 -25805 -25806 -25807 -25808 -25809 -25810 -25811 -25812 -25813 -25814 -25815 -25816 -25817 -25818 -25819 -25820 -25821 -25822 -25823 -25824 -25825 -25826 -25827 -25828 -25829 -25830 -25831 -25832 -25833 -25834 -25835 -25836 -25837 -25838 -25839 -25840 -25841 -25842 -25843 -25844 -25845 -25846 -25847 -25848 -25849 -25850 -25851 -25852 -25853 -25854 -25855 -25856 -25857 -25858 -25859 -25860 -25861 -25862 -25863 -25864 -25865 -25866 -25867 -25868 -25869 -25870 -25871 -25872 -25873 -25874 -25875 -25876 -25877 -25878 -25879 -25880 -25881 -25882 -25883 -25884 -25885 -25886 -25887 -25888 -25889 -25890 -25891 -25892 -25893 -25894 -25895 -25896 -25897 -25898 -25899 -25900 -25901 -25902 -25903 -25904 -25905 -25906 -25907 -25908 -25909 -25910 -25911 -25912 -25913 -25914 -25915 -25916 -25917 -25918 -25919 -25920 -25921 -25922 -25923 -25924 -25925 -25926 -25927 -25928 -25929 -25930 -25931 -25932 -25933 -25934 -25935 -25936 -25937 -25938 -25939 -25940 -25941 -25942 -25943 -25944 -25945 -25946 -25947 -25948 -25949 -25950 -25951 -25952 -25953 -25954 -25955 -25956 -25957 -25958 -25959 -25960 -25961 -25962 -25963 -25964 -25965 -25966 -25967 -25968 -25969 -25970 -25971 -25972 -25973 -25974 -25975 -25976 -25977 -25978 -25979 -25980 -25981 -25982 -25983 -25984 -25985 -25986 -25987 -25988 -25989 -25990 -25991 -25992 -25993 -25994 -25995 -25996 -25997 -25998 -25999 -26000 -26001 -26002 -26003 -26004 -26005 -26006 -26007 -26008 -26009 -26010 -26011 -26012 -26013 -26014 -26015 -26016 -26017 -26018 -26019 -26020 -26021 -26022 -26023 -26024 -26025 -26026 -26027 -26028 -26029 -26030 -26031 -26032 -26033 -26034 -26035 -26036 -26037 -26038 -26039 -26040 -26041 -26042 -26043 -26044 -26045 -26046 -26047 -26048 -26049 -26050 -26051 -26052 -26053 -26054 -26055 -26056 -26057 -26058 -26059 -26060 -26061 -26062 -26063 -26064 -26065 -26066 -26067 -26068 -26069 -26070 -26071 -26072 -26073 -26074 -26075 -26076 -26077 -26078 -26079 -26080 -26081 -26082 -26083 -26084 -26085 -26086 -26087 -26088 -26089 -26090 -26091 -26092 -26093 -26094 -26095 -26096 -26097 -26098 -26099 -26100 -26101 -26102 -26103 -26104 -26105 -26106 -26107 -26108 -26109 -26110 -26111 -26112 -26113 -26114 -26115 -26116 -26117 -26118 -26119 -26120 -26121 -26122 -26123 -26124 -26125 -26126 -26127 -26128 -26129 -26130 -26131 -26132 -26133 -26134 -26135 -26136 -26137 -26138 -26139 -26140 -26141 -26142 -26143 -26144 -26145 -26146 -26147 -26148 -26149 -26150 -26151 -26152 -26153 -26154 -26155 -26156 -26157 -26158 -26159 -26160 -26161 -26162 -26163 -26164 -26165 -26166 -26167 -26168 -26169 -26170 -26171 -26172 -26173 -26174 -26175 -26176 -26177 -26178 -26179 -26180 -26181 -26182 -26183 -26184 -26185 -26186 -26187 -26188 -26189 -26190 -26191 -26192 -26193 -26194 -26195 -26196 -26197 -26198 -26199 -26200 -26201 -26202 -26203 -26204 -26205 -26206 -26207 -26208 -26209 -26210 -26211 -26212 -26213 -26214 -26215 -26216 -26217 -26218 -26219 -26220 -26221 -26222 -26223 -26224 -26225 -26226 -26227 -26228 -26229 -26230 -26231 -26232 -26233 -26234 -26235 -26236 -26237 -26238 -26239 -26240 -26241 -26242 -26243 -26244 -26245 -26246 -26247 -26248 -26249 -26250 -26251 -26252 -26253 -26254 -26255 -26256 -26257 -26258 -26259 -26260 -26261 -26262 -26263 -26264 -26265 -26266 -26267 -26268 -26269 -26270 -26271 -26272 -26273 -26274 -26275 -26276 -26277 -26278 -26279 -26280 -26281 -26282 -26283 -26284 -26285 -26286 -26287 -26288 -26289 -26290 -26291 -26292 -26293 -26294 -26295 -26296 -26297 -26298 -26299 -26300 -26301 -26302 -26303 -26304 -26305 -26306 -26307 -26308 -26309 -26310 -26311 -26312 -26313 -26314 -26315 -26316 -26317 -26318 -26319 -26320 -26321 -26322 -26323 -26324 -26325 -26326 -26327 -26328 -26329 -26330 -26331 -26332 -26333 -26334 -26335 -26336 -26337 -26338 -26339 -26340 -26341 -26342 -26343 -26344 -26345 -26346 -26347 -26348 -26349 -26350 -26351 -26352 -26353 -26354 -26355 -26356 -26357 -26358 -26359 -26360 -26361 -26362 -26363 -26364 -26365 -26366 -26367 -26368 -26369 -26370 -26371 -26372 -26373 -26374 -26375 -26376 -26377 -26378 -26379 -26380 -26381 -26382 -26383 -26384 -26385 -26386 -26387 -26388 -26389 -26390 -26391 -26392 -26393 -26394 -26395 -26396 -26397 -26398 -26399 -26400 -26401 -26402 -26403 -26404 -26405 -26406 -26407 -26408 -26409 -26410 -26411 -26412 -26413 -26414 -26415 -26416 -26417 -26418 -26419 -26420 -26421 -26422 -26423 -26424 -26425 -26426 -26427 -26428 -26429 -26430 -26431 -26432 -26433 -26434 -26435 -26436 -26437 -26438 -26439 -26440 -26441 -26442 -26443 -26444 -26445 -26446 -26447 -26448 -26449 -26450 -26451 -26452 -26453 -26454 -26455 -26456 -26457 -26458 -26459 -26460 -26461 -26462 -26463 -26464 -26465 -26466 -26467 -26468 -26469 -26470 -26471 -26472 -26473 -26474 -26475 -26476 -26477 -26478 -26479 -26480 -26481 -26482 -26483 -26484 -26485 -26486 -26487 -26488 -26489 -26490 -26491 -26492 -26493 -26494 -26495 -26496 -26497 -26498 -26499 -26500 -26501 -26502 -26503 -26504 -26505 -26506 -26507 -26508 -26509 -26510 -26511 -26512 -26513 -26514 -26515 -26516 -26517 -26518 -26519 -26520 -26521 -26522 -26523 -26524 -26525 -26526 -26527 -26528 -26529 -26530 -26531 -26532 -26533 -26534 -26535 -26536 -26537 -26538 -26539 -26540 -26541 -26542 -26543 -26544 -26545 -26546 -26547 -26548 -26549 -26550 -26551 -26552 -26553 -26554 -26555 -26556 -26557 -26558 -26559 -26560 -26561 -26562 -26563 -26564 -26565 -26566 -26567 -26568 -26569 -26570 -26571 -26572 -26573 -26574 -26575 -26576 -26577 -26578 -26579 -26580 -26581 -26582 -26583 -26584 -26585 -26586 -26587 -26588 -26589 -26590 -26591 -26592 -26593 -26594 -26595 -26596 -26597 -26598 -26599 -26600 -26601 -26602 -26603 -26604 -26605 -26606 -26607 -26608 -26609 -26610 -26611 -26612 -26613 -26614 -26615 -26616 -26617 -26618 -26619 -26620 -26621 -26622 -26623 -26624 -26625 -26626 -26627 -26628 -26629 -26630 -26631 -26632 -26633 -26634 -26635 -26636 -26637 -26638 -26639 -26640 -26641 -26642 -26643 -26644 -26645 -26646 -26647 -26648 -26649 -26650 -26651 -26652 -26653 -26654 -26655 -26656 -26657 -26658 -26659 -26660 -26661 -26662 -26663 -26664 -26665 -26666 -26667 -26668 -26669 -26670 -26671 -26672 -26673 -26674 -26675 -26676 -26677 -26678 -26679 -26680 -26681 -26682 -26683 -26684 -26685 -26686 -26687 -26688 -26689 -26690 -26691 -26692 -26693 -26694 -26695 -26696 -26697 -26698 -26699 -26700 -26701 -26702 -26703 -26704 -26705 -26706 -26707 -26708 -26709 -26710 -26711 -26712 -26713 -26714 -26715 -26716 -26717 -26718 -26719 -26720 -26721 -26722 -26723 -26724 -26725 -26726 -26727 -26728 -26729 -26730 -26731 -26732 -26733 -26734 -26735 -26736 -26737 -26738 -26739 -26740 -26741 -26742 -26743 -26744 -26745 -26746 -26747 -26748 -26749 -26750 -26751 -26752 -26753 -26754 -26755 -26756 -26757 -26758 -26759 -26760 -26761 -26762 -26763 -26764 -26765 -26766 -26767 -26768 -26769 -26770 -26771 -26772 -26773 -26774 -26775 -26776 -26777 -26778 -26779 -26780 -26781 -26782 -26783 -26784 -26785 -26786 -26787 -26788 -26789 -26790 -26791 -26792 -26793 -26794 -26795 -26796 -26797 -26798 -26799 -26800 -26801 -26802 -26803 -26804 -26805 -26806 -26807 -26808 -26809 -26810 -26811 -26812 -26813 -26814 -26815 -26816 -26817 -26818 -26819 -26820 -26821 -26822 -26823 -26824 -26825 -26826 -26827 -26828 -26829 -26830 -26831 -26832 -26833 -26834 -26835 -26836 -26837 -26838 -26839 -26840 -26841 -26842 -26843 -26844 -26845 -26846 -26847 -26848 -26849 -26850 -26851 -26852 -26853 -26854 -26855 -26856 -26857 -26858 -26859 -26860 -26861 -26862 -26863 -26864 -26865 -26866 -26867 -26868 -26869 -26870 -26871 -26872 -26873 -26874 -26875 -26876 -26877 -26878 -26879 -26880 -26881 -26882 -26883 -26884 -26885 -26886 -26887 -26888 -26889 -26890 -26891 -26892 -26893 -26894 -26895 -26896 -26897 -26898 -26899 -26900 -26901 -26902 -26903 -26904 -26905 -26906 -26907 -26908 -26909 -26910 -26911 -26912 -26913 -26914 -26915 -26916 -26917 -26918 -26919 -26920 -26921 -26922 -26923 -26924 -26925 -26926 -26927 -26928 -26929 -26930 -26931 -26932 -26933 -26934 -26935 -26936 -26937 -26938 -26939 -26940 -26941 -26942 -26943 -26944 -26945 -26946 -26947 -26948 -26949 -26950 -26951 -26952 -26953 -26954 -26955 -26956 -26957 -26958 -26959 -26960 -26961 -26962 -26963 -26964 -26965 -26966 -26967 -26968 -26969 -26970 -26971 -26972 -26973 -26974 -26975 -26976 -26977 -26978 -26979 -26980 -26981 -26982 -26983 -26984 -26985 -26986 -26987 -26988 -26989 -26990 -26991 -26992 -26993 -26994 -26995 -26996 -26997 -26998 -26999 -27000 -27001 -27002 -27003 -27004 -27005 -27006 -27007 -27008 -27009 -27010 -27011 -27012 -27013 -27014 -27015 -27016 -27017 -27018 -27019 -27020 -27021 -27022 -27023 -27024 -27025 -27026 -27027 -27028 -27029 -27030 -27031 -27032 -27033 -27034 -27035 -27036 -27037 -27038 -27039 -27040 -27041 -27042 -27043 -27044 -27045 -27046 -27047 -27048 -27049 -27050 -27051 -27052 -27053 -27054 -27055 -27056 -27057 -27058 -27059 -27060 -27061 -27062 -27063 -27064 -27065 -27066 -27067 -27068 -27069 -27070 -27071 -27072 -27073 -27074 -27075 -27076 -27077 -27078 -27079 -27080 -27081 -27082 -27083 -27084 -27085 -27086 -27087 -27088 -27089 -27090 -27091 -27092 -27093 -27094 -27095 -27096 -27097 -27098 -27099 -27100 -27101 -27102 -27103 -27104 -27105 -27106 -27107 -27108 -27109 -27110 -27111 -27112 -27113 -27114 -27115 -27116 -27117 -27118 -27119 -27120 -27121 -27122 -27123 -27124 -27125 -27126 -27127 -27128 -27129 -27130 -27131 -27132 -27133 -27134 -27135 -27136 -27137 -27138 -27139 -27140 -27141 -27142 -27143 -27144 -27145 -27146 -27147 -27148 -27149 -27150 -27151 -27152 -27153 -27154 -27155 -27156 -27157 -27158 -27159 -27160 -27161 -27162 -27163 -27164 -27165 -27166 -27167 -27168 -27169 -27170 -27171 -27172 -27173 -27174 -27175 -27176 -27177 -27178 -27179 -27180 -27181 -27182 -27183 -27184 -27185 -27186 -27187 -27188 -27189 -27190 -27191 -27192 -27193 -27194 -27195 -27196 -27197 -27198 -27199 -27200 -27201 -27202 -27203 -27204 -27205 -27206 -27207 -27208 -27209 -27210 -27211 -27212 -27213 -27214 -27215 -27216 -27217 -27218 -27219 -27220 -27221 -27222 -27223 -27224 -27225 -27226 -27227 -27228 -27229 -27230 -27231 -27232 -27233 -27234 -27235 -27236 -27237 -27238 -27239 -27240 -27241 -27242 -27243 -27244 -27245 -27246 -27247 -27248 -27249 -27250 -27251 -27252 -27253 -27254 -27255 -27256 -27257 -27258 -27259 -27260 -27261 -27262 -27263 -27264 -27265 -27266 -27267 -27268 -27269 -27270 -27271 -27272 -27273 -27274 -27275 -27276 -27277 -27278 -27279 -27280 -27281 -27282 -27283 -27284 -27285 -27286 -27287 -27288 -27289 -27290 -27291 -27292 -27293 -27294 -27295 -27296 -27297 -27298 -27299 -27300 -27301 -27302 -27303 -27304 -27305 -27306 -27307 -27308 -27309 -27310 -27311 -27312 -27313 -27314 -27315 -27316 -27317 -27318 -27319 -27320 -27321 -27322 -27323 -27324 -27325 -27326 -27327 -27328 -27329 -27330 -27331 -27332 -27333 -27334 -27335 -27336 -27337 -27338 -27339 -27340 -27341 -27342 -27343 -27344 -27345 -27346 -27347 -27348 -27349 -27350 -27351 -27352 -27353 -27354 -27355 -27356 -27357 -27358 -27359 -27360 -27361 -27362 -27363 -27364 -27365 -27366 -27367 -27368 -27369 -27370 -27371 -27372 -27373 -27374 -27375 -27376 -27377 -27378 -27379 -27380 -27381 -27382 -27383 -27384 -27385 -27386 -27387 -27388 -27389 -27390 -27391 -27392 -27393 -27394 -27395 -27396 -27397 -27398 -27399 -27400 -27401 -27402 -27403 -27404 -27405 -27406 -27407 -27408 -27409 -27410 -27411 -27412 -27413 -27414 -27415 -27416 -27417 -27418 -27419 -27420 -27421 -27422 -27423 -27424 -27425 -27426 -27427 -27428 -27429 -27430 -27431 -27432 -27433 -27434 -27435 -27436 -27437 -27438 -27439 -27440 -27441 -27442 -27443 -27444 -27445 -27446 -27447 -27448 -27449 -27450 -27451 -27452 -27453 -27454 -27455 -27456 -27457 -27458 -27459 -27460 -27461 -27462 -27463 -27464 -27465 -27466 -27467 -27468 -27469 -27470 -27471 -27472 -27473 -27474 -27475 -27476 -27477 -27478 -27479 -27480 -27481 -27482 -27483 -27484 -27485 -27486 -27487 -27488 -27489 -27490 -27491 -27492 -27493 -27494 -27495 -27496 -27497 -27498 -27499 -27500 -27501 -27502 -27503 -27504 -27505 -27506 -27507 -27508 -27509 -27510 -27511 -27512 -27513 -27514 -27515 -27516 -27517 -27518 -27519 -27520 -27521 -27522 -27523 -27524 -27525 -27526 -27527 -27528 -27529 -27530 -27531 -27532 -27533 -27534 -27535 -27536 -27537 -27538 -27539 -27540 -27541 -27542 -27543 -27544 -27545 -27546 -27547 -27548 -27549 -27550 -27551 -27552 -27553 -27554 -27555 -27556 -27557 -27558 -27559 -27560 -27561 -27562 -27563 -27564 -27565 -27566 -27567 -27568 -27569 -27570 -27571 -27572 -27573 -27574 -27575 -27576 -27577 -27578 -27579 -27580 -27581 -27582 -27583 -27584 -27585 -27586 -27587 -27588 -27589 -27590 -27591 -27592 -27593 -27594 -27595 -27596 -27597 -27598 -27599 -27600 -27601 -27602 -27603 -27604 -27605 -27606 -27607 -27608 -27609 -27610 -27611 -27612 -27613 -27614 -27615 -27616 -27617 -27618 -27619 -27620 -27621 -27622 -27623 -27624 -27625 -27626 -27627 -27628 -27629 -27630 -27631 -27632 -27633 -27634 -27635 -27636 -27637 -27638 -27639 -27640 -27641 -27642 -27643 -27644 -27645 -27646 -27647 -27648 -27649 -27650 -27651 -27652 -27653 -27654 -27655 -27656 -27657 -27658 -27659 -27660 -27661 -27662 -27663 -27664 -27665 -27666 -27667 -27668 -27669 -27670 -27671 -27672 -27673 -27674 -27675 -27676 -27677 -27678 -27679 -27680 -27681 -27682 -27683 -27684 -27685 -27686 -27687 -27688 -27689 -27690 -27691 -27692 -27693 -27694 -27695 -27696 -27697 -27698 -27699 -27700 -27701 -27702 -27703 -27704 -27705 -27706 -27707 -27708 -27709 -27710 -27711 -27712 -27713 -27714 -27715 -27716 -27717 -27718 -27719 -27720 -27721 -27722 -27723 -27724 -27725 -27726 -27727 -27728 -27729 -27730 -27731 -27732 -27733 -27734 -27735 -27736 -27737 -27738 -27739 -27740 -27741 -27742 -27743 -27744 -27745 -27746 -27747 -27748 -27749 -27750 -27751 -27752 -27753 -27754 -27755 -27756 -27757 -27758 -27759 -27760 -27761 -27762 -27763 -27764 -27765 -27766 -27767 -27768 -27769 -27770 -27771 -27772 -27773 -27774 -27775 -27776 -27777 -27778 -27779 -27780 -27781 -27782 -27783 -27784 -27785 -27786 -27787 -27788 -27789 -27790 -27791 -27792 -27793 -27794 -27795 -27796 -27797 -27798 -27799 -27800 -27801 -27802 -27803 -27804 -27805 -27806 -27807 -27808 -27809 -27810 -27811 -27812 -27813 -27814 -27815 -27816 -27817 -27818 -27819 -27820 -27821 -27822 -27823 -27824 -27825 -27826 -27827 -27828 -27829 -27830 -27831 -27832 -27833 -27834 -27835 -27836 -27837 -27838 -27839 -27840 -27841 -27842 -27843 -27844 -27845 -27846 -27847 -27848 -27849 -27850 -27851 -27852 -27853 -27854 -27855 -27856 -27857 -27858 -27859 -27860 -27861 -27862 -27863 -27864 -27865 -27866 -27867 -27868 -27869 -27870 -27871 -27872 -27873 -27874 -27875 -27876 -27877 -27878 -27879 -27880 -27881 -27882 -27883 -27884 -27885 -27886 -27887 -27888 -27889 -27890 -27891 -27892 -27893 -27894 -27895 -27896 -27897 -27898 -27899 -27900 -27901 -27902 -27903 -27904 -27905 -27906 -27907 -27908 -27909 -27910 -27911 -27912 -27913 -27914 -27915 -27916 -27917 -27918 -27919 -27920 -27921 -27922 -27923 -27924 -27925 -27926 -27927 -27928 -27929 -27930 -27931 -27932 -27933 -27934 -27935 -27936 -27937 -27938 -27939 -27940 -27941 -27942 -27943 -27944 -27945 -27946 -27947 -27948 -27949 -27950 -27951 -27952 -27953 -27954 -27955 -27956 -27957 -27958 -27959 -27960 -27961 -27962 -27963 -27964 -27965 -27966 -27967 -27968 -27969 -27970 -27971 -27972 -27973 -27974 -27975 -27976 -27977 -27978 -27979 -27980 -27981 -27982 -27983 -27984 -27985 -27986 -27987 -27988 -27989 -27990 -27991 -27992 -27993 -27994 -27995 -27996 -27997 -27998 -27999 -28000 -28001 -28002 -28003 -28004 -28005 -28006 -28007 -28008 -28009 -28010 -28011 -28012 -28013 -28014 -28015 -28016 -28017 -28018 -28019 -28020 -28021 -28022 -28023 -28024 -28025 -28026 -28027 -28028 -28029 -28030 -28031 -28032 -28033 -28034 -28035 -28036 -28037 -28038 -28039 -28040 -28041 -28042 -28043 -28044 -28045 -28046 -28047 -28048 -28049 -28050 -28051 -28052 -28053 -28054 -28055 -28056 -28057 -28058 -28059 -28060 -28061 -28062 -28063 -28064 -28065 -28066 -28067 -28068 -28069 -28070 -28071 -28072 -28073 -28074 -28075 -28076 -28077 -28078 -28079 -28080 -28081 -28082 -28083 -28084 -28085 -28086 -28087 -28088 -28089 -28090 -28091 -28092 -28093 -28094 -28095 -28096 -28097 -28098 -28099 -28100 -28101 -28102 -28103 -28104 -28105 -28106 -28107 -28108 -28109 -28110 -28111 -28112 -28113 -28114 -28115 -28116 -28117 -28118 -28119 -28120 -28121 -28122 -28123 -28124 -28125 -28126 -28127 -28128 -28129 -28130 -28131 -28132 -28133 -28134 -28135 -28136 -28137 -28138 -28139 -28140 -28141 -28142 -28143 -28144 -28145 -28146 -28147 -28148 -28149 -28150 -28151 -28152 -28153 -28154 -28155 -28156 -28157 -28158 -28159 -28160 -28161 -28162 -28163 -28164 -28165 -28166 -28167 -28168 -28169 -28170 -28171 -28172 -28173 -28174 -28175 -28176 -28177 -28178 -28179 -28180 -28181 -28182 -28183 -28184 -28185 -28186 -28187 -28188 -28189 -28190 -28191 -28192 -28193 -28194 -28195 -28196 -28197 -28198 -28199 -28200 -28201 -28202 -28203 -28204 -28205 -28206 -28207 -28208 -28209 -28210 -28211 -28212 -28213 -28214 -28215 -28216 -28217 -28218 -28219 -28220 -28221 -28222 -28223 -28224 -28225 -28226 -28227 -28228 -28229 -28230 -28231 -28232 -28233 -28234 -28235 -28236 -28237 -28238 -28239 -28240 -28241 -28242 -28243 -28244 -28245 -28246 -28247 -28248 -28249 -28250 -28251 -28252 -28253 -28254 -28255 -28256 -28257 -28258 -28259 -28260 -28261 -28262 -28263 -28264 -28265 -28266 -28267 -28268 -28269 -28270 -28271 -28272 -28273 -28274 -28275 -28276 -28277 -28278 -28279 -28280 -28281 -28282 -28283 -28284 -28285 -28286 -28287 -28288 -28289 -28290 -28291 -28292 -28293 -28294 -28295 -28296 -28297 -28298 -28299 -28300 -28301 -28302 -28303 -28304 -28305 -28306 -28307 -28308 -28309 -28310 -28311 -28312 -28313 -28314 -28315 -28316 -28317 -28318 -28319 -28320 -28321 -28322 -28323 -28324 -28325 -28326 -28327 -28328 -28329 -28330 -28331 -28332 -28333 -28334 -28335 -28336 -28337 -28338 -28339 -28340 -28341 -28342 -28343 -28344 -28345 -28346 -28347 -28348 -28349 -28350 -28351 -28352 -28353 -28354 -28355 -28356 -28357 -28358 -28359 -28360 -28361 -28362 -28363 -28364 -28365 -28366 -28367 -28368 -28369 -28370 -28371 -28372 -28373 -28374 -28375 -28376 -28377 -28378 -28379 -28380 -28381 -28382 -28383 -28384 -28385 -28386 -28387 -28388 -28389 -28390 -28391 -28392 -28393 -28394 -28395 -28396 -28397 -28398 -28399 -28400 -28401 -28402 -28403 -28404 -28405 -28406 -28407 -28408 -28409 -28410 -28411 -28412 -28413 -28414 -28415 -28416 -28417 -28418 -28419 -28420 -28421 -28422 -28423 -28424 -28425 -28426 -28427 -28428 -28429 -28430 -28431 -28432 -28433 -28434 -28435 -28436 -28437 -28438 -28439 -28440 -28441 -28442 -28443 -28444 -28445 -28446 -28447 -28448 -28449 -28450 -28451 -28452 -28453 -28454 -28455 -28456 -28457 -28458 -28459 -28460 -28461 -28462 -28463 -28464 -28465 -28466 -28467 -28468 -28469 -28470 -28471 -28472 -28473 -28474 -28475 -28476 -28477 -28478 -28479 -28480 -28481 -28482 -28483 -28484 -28485 -28486 -28487 -28488 -28489 -28490 -28491 -28492 -28493 -28494 -28495 -28496 -28497 -28498 -28499 -28500 -28501 -28502 -28503 -28504 -28505 -28506 -28507 -28508 -28509 -28510 -28511 -28512 -28513 -28514 -28515 -28516 -28517 -28518 -28519 -28520 -28521 -28522 -28523 -28524 -28525 -28526 -28527 -28528 -28529 -28530 -28531 -28532 -28533 -28534 -28535 -28536 -28537 -28538 -28539 -28540 -28541 -28542 -28543 -28544 -28545 -28546 -28547 -28548 -28549 -28550 -28551 -28552 -28553 -28554 -28555 -28556 -28557 -28558 -28559 -28560 -28561 -28562 -28563 -28564 -28565 -28566 -28567 -28568 -28569 -28570 -28571 -28572 -28573 -28574 -28575 -28576 -28577 -28578 -28579 -28580 -28581 -28582 -28583 -28584 -28585 -28586 -28587 -28588 -28589 -28590 -28591 -28592 -28593 -28594 -28595 -28596 -28597 -28598 -28599 -28600 -28601 -28602 -28603 -28604 -28605 -28606 -28607 -28608 -28609 -28610 -28611 -28612 -28613 -28614 -28615 -28616 -28617 -28618 -28619 -28620 -28621 -28622 -28623 -28624 -28625 -28626 -28627 -28628 -28629 -28630 -28631 -28632 -28633 -28634 -28635 -28636 -28637 -28638 -28639 -28640 -28641 -28642 -28643 -28644 -28645 -28646 -28647 -28648 -28649 -28650 -28651 -28652 -28653 -28654 -28655 -28656 -28657 -28658 -28659 -28660 -28661 -28662 -28663 -28664 -28665 -28666 -28667 -28668 -28669 -28670 -28671 -28672 -28673 -28674 -28675 -28676 -28677 -28678 -28679 -28680 -28681 -28682 -28683 -28684 -28685 -28686 -28687 -28688 -28689 -28690 -28691 -28692 -28693 -28694 -28695 -28696 -28697 -28698 -28699 -28700 -28701 -28702 -28703 -28704 -28705 -28706 -28707 -28708 -28709 -28710 -28711 -28712 -28713 -28714 -28715 -28716 -28717 -28718 -28719 -28720 -28721 -28722 -28723 -28724 -28725 -28726 -28727 -28728 -28729 -28730 -28731 -28732 -28733 -28734 -28735 -28736 -28737 -28738 -28739 -28740 -28741 -28742 -28743 -28744 -28745 -28746 -28747 -28748 -28749 -28750 -28751 -28752 -28753 -28754 -28755 -28756 -28757 -28758 -28759 -28760 -28761 -28762 -28763 -28764 -28765 -28766 -28767 -28768 -28769 -28770 -28771 -28772 -28773 -28774 -28775 -28776 -28777 -28778 -28779 -28780 -28781 -28782 -28783 -28784 -28785 -28786 -28787 -28788 -28789 -28790 -28791 -28792 -28793 -28794 -28795 -28796 -28797 -28798 -28799 -28800 -28801 -28802 -28803 -28804 -28805 -28806 -28807 -28808 -28809 -28810 -28811 -28812 -28813 -28814 -28815 -28816 -28817 -28818 -28819 -28820 -28821 -28822 -28823 -28824 -28825 -28826 -28827 -28828 -28829 -28830 -28831 -28832 -28833 -28834 -28835 -28836 -28837 -28838 -28839 -28840 -28841 -28842 -28843 -28844 -28845 -28846 -28847 -28848 -28849 -28850 -28851 -28852 -28853 -28854 -28855 -28856 -28857 -28858 -28859 -28860 -28861 -28862 -28863 -28864 -28865 -28866 -28867 -28868 -28869 -28870 -28871 -28872 -28873 -28874 -28875 -28876 -28877 -28878 -28879 -28880 -28881 -28882 -28883 -28884 -28885 -28886 -28887 -28888 -28889 -28890 -28891 -28892 -28893 -28894 -28895 -28896 -28897 -28898 -28899 -28900 -28901 -28902 -28903 -28904 -28905 -28906 -28907 -28908 -28909 -28910 -28911 -28912 -28913 -28914 -28915 -28916 -28917 -28918 -28919 -28920 -28921 -28922 -28923 -28924 -28925 -28926 -28927 -28928 -28929 -28930 -28931 -28932 -28933 -28934 -28935 -28936 -28937 -28938 -28939 -28940 -28941 -28942 -28943 -28944 -28945 -28946 -28947 -28948 -28949 -28950 -28951 -28952 -28953 -28954 -28955 -28956 -28957 -28958 -28959 -28960 -28961 -28962 -28963 -28964 -28965 -28966 -28967 -28968 -28969 -28970 -28971 -28972 -28973 -28974 -28975 -28976 -28977 -28978 -28979 -28980 -28981 -28982 -28983 -28984 -28985 -28986 -28987 -28988 -28989 -28990 -28991 -28992 -28993 -28994 -28995 -28996 -28997 -28998 -28999 -29000 -29001 -29002 -29003 -29004 -29005 -29006 -29007 -29008 -29009 -29010 -29011 -29012 -29013 -29014 -29015 -29016 -29017 -29018 -29019 -29020 -29021 -29022 -29023 -29024 -29025 -29026 -29027 -29028 -29029 -29030 -29031 -29032 -29033 -29034 -29035 -29036 -29037 -29038 -29039 -29040 -29041 -29042 -29043 -29044 -29045 -29046 -29047 -29048 -29049 -29050 -29051 -29052 -29053 -29054 -29055 -29056 -29057 -29058 -29059 -29060 -29061 -29062 -29063 -29064 -29065 -29066 -29067 -29068 -29069 -29070 -29071 -29072 -29073 -29074 -29075 -29076 -29077 -29078 -29079 -29080 -29081 -29082 -29083 -29084 -29085 -29086 -29087 -29088 -29089 -29090 -29091 -29092 -29093 -29094 -29095 -29096 -29097 -29098 -29099 -29100 -29101 -29102 -29103 -29104 -29105 -29106 -29107 -29108 -29109 -29110 -29111 -29112 -29113 -29114 -29115 -29116 -29117 -29118 -29119 -29120 -29121 -29122 -29123 -29124 -29125 -29126 -29127 -29128 -29129 -29130 -29131 -29132 -29133 -29134 -29135 -29136 -29137 -29138 -29139 -29140 -29141 -29142 -29143 -29144 -29145 -29146 -29147 -29148 -29149 -29150 -29151 -29152 -29153 -29154 -29155 -29156 -29157 -29158 -29159 -29160 -29161 -29162 -29163 -29164 -29165 -29166 -29167 -29168 -29169 -29170 -29171 -29172 -29173 -29174 -29175 -29176 -29177 -29178 -29179 -29180 -29181 -29182 -29183 -29184 -29185 -29186 -29187 -29188 -29189 -29190 -29191 -29192 -29193 -29194 -29195 -29196 -29197 -29198 -29199 -29200 -29201 -29202 -29203 -29204 -29205 -29206 -29207 -29208 -29209 -29210 -29211 -29212 -29213 -29214 -29215 -29216 -29217 -29218 -29219 -29220 -29221 -29222 -29223 -29224 -29225 -29226 -29227 -29228 -29229 -29230 -29231 -29232 -29233 -29234 -29235 -29236 -29237 -29238 -29239 -29240 -29241 -29242 -29243 -29244 -29245 -29246 -29247 -29248 -29249 -29250 -29251 -29252 -29253 -29254 -29255 -29256 -29257 -29258 -29259 -29260 -29261 -29262 -29263 -29264 -29265 -29266 -29267 -29268 -29269 -29270 -29271 -29272 -29273 -29274 -29275 -29276 -29277 -29278 -29279 -29280 -29281 -29282 -29283 -29284 -29285 -29286 -29287 -29288 -29289 -29290 -29291 -29292 -29293 -29294 -29295 -29296 -29297 -29298 -29299 -29300 -29301 -29302 -29303 -29304 -29305 -29306 -29307 -29308 -29309 -29310 -29311 -29312 -29313 -29314 -29315 -29316 -29317 -29318 -29319 -29320 -29321 -29322 -29323 -29324 -29325 -29326 -29327 -29328 -29329 -29330 -29331 -29332 -29333 -29334 -29335 -29336 -29337 -29338 -29339 -29340 -29341 -29342 -29343 -29344 -29345 -29346 -29347 -29348 -29349 -29350 -29351 -29352 -29353 -29354 -29355 -29356 -29357 -29358 -29359 -29360 -29361 -29362 -29363 -29364 -29365 -29366 -29367 -29368 -29369 -29370 -29371 -29372 -29373 -29374 -29375 -29376 -29377 -29378 -29379 -29380 -29381 -29382 -29383 -29384 -29385 -29386 -29387 -29388 -29389 -29390 -29391 -29392 -29393 -29394 -29395 -29396 -29397 -29398 -29399 -29400 -29401 -29402 -29403 -29404 -29405 -29406 -29407 -29408 -29409 -29410 -29411 -29412 -29413 -29414 -29415 -29416 -29417 -29418 -29419 -29420 -29421 -29422 -29423 -29424 -29425 -29426 -29427 -29428 -29429 -29430 -29431 -29432 -29433 -29434 -29435 -29436 -29437 -29438 -29439 -29440 -29441 -29442 -29443 -29444 -29445 -29446 -29447 -29448 -29449 -29450 -29451 -29452 -29453 -29454 -29455 -29456 -29457 -29458 -29459 -29460 -29461 -29462 -29463 -29464 -29465 -29466 -29467 -29468 -29469 -29470 -29471 -29472 -29473 -29474 -29475 -29476 -29477 -29478 -29479 -29480 -29481 -29482 -29483 -29484 -29485 -29486 -29487 -29488 -29489 -29490 -29491 -29492 -29493 -29494 -29495 -29496 -29497 -29498 -29499 -29500 -29501 -29502 -29503 -29504 -29505 -29506 -29507 -29508 -29509 -29510 -29511 -29512 -29513 -29514 -29515 -29516 -29517 -29518 -29519 -29520 -29521 -29522 -29523 -29524 -29525 -29526 -29527 -29528 -29529 -29530 -29531 -29532 -29533 -29534 -29535 -29536 -29537 -29538 -29539 -29540 -29541 -29542 -29543 -29544 -29545 -29546 -29547 -29548 -29549 -29550 -29551 -29552 -29553 -29554 -29555 -29556 -29557 -29558 -29559 -29560 -29561 -29562 -29563 -29564 -29565 -29566 -29567 -29568 -29569 -29570 -29571 -29572 -29573 -29574 -29575 -29576 -29577 -29578 -29579 -29580 -29581 -29582 -29583 -29584 -29585 -29586 -29587 -29588 -29589 -29590 -29591 -29592 -29593 -29594 -29595 -29596 -29597 -29598 -29599 -29600 -29601 -29602 -29603 -29604 -29605 -29606 -29607 -29608 -29609 -29610 -29611 -29612 -29613 -29614 -29615 -29616 -29617 -29618 -29619 -29620 -29621 -29622 -29623 -29624 -29625 -29626 -29627 -29628 -29629 -29630 -29631 -29632 -29633 -29634 -29635 -29636 -29637 -29638 -29639 -29640 -29641 -29642 -29643 -29644 -29645 -29646 -29647 -29648 -29649 -29650 -29651 -29652 -29653 -29654 -29655 -29656 -29657 -29658 -29659 -29660 -29661 -29662 -29663 -29664 -29665 -29666 -29667 -29668 -29669 -29670 -29671 -29672 -29673 -29674 -29675 -29676 -29677 -29678 -29679 -29680 -29681 -29682 -29683 -29684 -29685 -29686 -29687 -29688 -29689 -29690 -29691 -29692 -29693 -29694 -29695 -29696 -29697 -29698 -29699 -29700 -29701 -29702 -29703 -29704 -29705 -29706 -29707 -29708 -29709 -29710 -29711 -29712 -29713 -29714 -29715 -29716 -29717 -29718 -29719 -29720 -29721 -29722 -29723 -29724 -29725 -29726 -29727 -29728 -29729 -29730 -29731 -29732 -29733 -29734 -29735 -29736 -29737 -29738 -29739 -29740 -29741 -29742 -29743 -29744 -29745 -29746 -29747 -29748 -29749 -29750 -29751 -29752 -29753 -29754 -29755 -29756 -29757 -29758 -29759 -29760 -29761 -29762 -29763 -29764 -29765 -29766 -29767 -29768 -29769 -29770 -29771 -29772 -29773 -29774 -29775 -29776 -29777 -29778 -29779 -29780 -29781 -29782 -29783 -29784 -29785 -29786 -29787 -29788 -29789 -29790 -29791 -29792 -29793 -29794 -29795 -29796 -29797 -29798 -29799 -29800 -29801 -29802 -29803 -29804 -29805 -29806 -29807 -29808 -29809 -29810 -29811 -29812 -29813 -29814 -29815 -29816 -29817 -29818 -29819 -29820 -29821 -29822 -29823 -29824 -29825 -29826 -29827 -29828 -29829 -29830 -29831 -29832 -29833 -29834 -29835 -29836 -29837 -29838 -29839 -29840 -29841 -29842 -29843 -29844 -29845 -29846 -29847 -29848 -29849 -29850 -29851 -29852 -29853 -29854 -29855 -29856 -29857 -29858 -29859 -29860 -29861 -29862 -29863 -29864 -29865 -29866 -29867 -29868 -29869 -29870 -29871 -29872 -29873 -29874 -29875 -29876 -29877 -29878 -29879 -29880 -29881 -29882 -29883 -29884 -29885 -29886 -29887 -29888 -29889 -29890 -29891 -29892 -29893 -29894 -29895 -29896 -29897 -29898 -29899 -29900 -29901 -29902 -29903 -29904 -29905 -29906 -29907 -29908 -29909 -29910 -29911 -29912 -29913 -29914 -29915 -29916 -29917 -29918 -29919 -29920 -29921 -29922 -29923 -29924 -29925 -29926 -29927 -29928 -29929 -29930 -29931 -29932 -29933 -29934 -29935 -29936 -29937 -29938 -29939 -29940 -29941 -29942 -29943 -29944 -29945 -29946 -29947 -29948 -29949 -29950 -29951 -29952 -29953 -29954 -29955 -29956 -29957 -29958 -29959 -29960 -29961 -29962 -29963 -29964 -29965 -29966 -29967 -29968 -29969 -29970 -29971 -29972 -29973 -29974 -29975 -29976 -29977 -29978 -29979 -29980 -29981 -29982 -29983 -29984 -29985 -29986 -29987 -29988 -29989 -29990 -29991 -29992 -29993 -29994 -29995 -29996 -29997 -29998 -29999 -30000 -30001 -30002 -30003 -30004 -30005 -30006 -30007 -30008 -30009 -30010 -30011 -30012 -30013 -30014 -30015 -30016 -30017 -30018 -30019 -30020 -30021 -30022 -30023 -30024 -30025 -30026 -30027 -30028 -30029 -30030 -30031 -30032 -30033 -30034 -30035 -30036 -30037 -30038 -30039 -30040 -30041 -30042 -30043 -30044 -30045 -30046 -30047 -30048 -30049 -30050 -30051 -30052 -30053 -30054 -30055 -30056 -30057 -30058 -30059 -30060 -30061 -30062 -30063 -30064 -30065 -30066 -30067 -30068 -30069 -30070 -30071 -30072 -30073 -30074 -30075 -30076 -30077 -30078 -30079 -30080 -30081 -30082 -30083 -30084 -30085 -30086 -30087 -30088 -30089 -30090 -30091 -30092 -30093 -30094 -30095 -30096 -30097 -30098 -30099 -30100 -30101 -30102 -30103 -30104 -30105 -30106 -30107 -30108 -30109 -30110 -30111 -30112 -30113 -30114 -30115 -30116 -30117 -30118 -30119 -30120 -30121 -30122 -30123 -30124 -30125 -30126 -30127 -30128 -30129 -30130 -30131 -30132 -30133 -30134 -30135 -30136 -30137 -30138 -30139 -30140 -30141 -30142 -30143 -30144 -30145 -30146 -30147 -30148 -30149 -30150 -30151 -30152 -30153 -30154 -30155 -30156 -30157 -30158 -30159 -30160 -30161 -30162 -30163 -30164 -30165 -30166 -30167 -30168 -30169 -30170 -30171 -30172 -30173 -30174 -30175 -30176 -30177 -30178 -30179 -30180 -30181 -30182 -30183 -30184 -30185 -30186 -30187 -30188 -30189 -30190 -30191 -30192 -30193 -30194 -30195 -30196 -30197 -30198 -30199 -30200 -30201 -30202 -30203 -30204 -30205 -30206 -30207 -30208 -30209 -30210 -30211 -30212 -30213 -30214 -30215 -30216 -30217 -30218 -30219 -30220 -30221 -30222 -30223 -30224 -30225 -30226 -30227 -30228 -30229 -30230 -30231 -30232 -30233 -30234 -30235 -30236 -30237 -30238 -30239 -30240 -30241 -30242 -30243 -30244 -30245 -30246 -30247 -30248 -30249 -30250 -30251 -30252 -30253 -30254 -30255 -30256 -30257 -30258 -30259 -30260 -30261 -30262 -30263 -30264 -30265 -30266 -30267 -30268 -30269 -30270 -30271 -30272 -30273 -30274 -30275 -30276 -30277 -30278 -30279 -30280 -30281 -30282 -30283 -30284 -30285 -30286 -30287 -30288 -30289 -30290 -30291 -30292 -30293 -30294 -30295 -30296 -30297 -30298 -30299 -30300 -30301 -30302 -30303 -30304 -30305 -30306 -30307 -30308 -30309 -30310 -30311 -30312 -30313 -30314 -30315 -30316 -30317 -30318 -30319 -30320 -30321 -30322 -30323 -30324 -30325 -30326 -30327 -30328 -30329 -30330 -30331 -30332 -30333 -30334 -30335 -30336 -30337 -30338 -30339 -30340 -30341 -30342 -30343 -30344 -30345 -30346 -30347 -30348 -30349 -30350 -30351 -30352 -30353 -30354 -30355 -30356 -30357 -30358 -30359 -30360 -30361 -30362 -30363 -30364 -30365 -30366 -30367 -30368 -30369 -30370 -30371 -30372 -30373 -30374 -30375 -30376 -30377 -30378 -30379 -30380 -30381 -30382 -30383 -30384 -30385 -30386 -30387 -30388 -30389 -30390 -30391 -30392 -30393 -30394 -30395 -30396 -30397 -30398 -30399 -30400 -30401 -30402 -30403 -30404 -30405 -30406 -30407 -30408 -30409 -30410 -30411 -30412 -30413 -30414 -30415 -30416 -30417 -30418 -30419 -30420 -30421 -30422 -30423 -30424 -30425 -30426 -30427 -30428 -30429 -30430 -30431 -30432 -30433 -30434 -30435 -30436 -30437 -30438 -30439 -30440 -30441 -30442 -30443 -30444 -30445 -30446 -30447 -30448 -30449 -30450 -30451 -30452 -30453 -30454 -30455 -30456 -30457 -30458 -30459 -30460 -30461 -30462 -30463 -30464 -30465 -30466 -30467 -30468 -30469 -30470 -30471 -30472 -30473 -30474 -30475 -30476 -30477 -30478 -30479 -30480 -30481 -30482 -30483 -30484 -30485 -30486 -30487 -30488 -30489 -30490 -30491 -30492 -30493 -30494 -30495 -30496 -30497 -30498 -30499 -30500 -30501 -30502 -30503 -30504 -30505 -30506 -30507 -30508 -30509 -30510 -30511 -30512 -30513 -30514 -30515 -30516 -30517 -30518 -30519 -30520 -30521 -30522 -30523 -30524 -30525 -30526 -30527 -30528 -30529 -30530 -30531 -30532 -30533 -30534 -30535 -30536 -30537 -30538 -30539 -30540 -30541 -30542 -30543 -30544 -30545 -30546 -30547 -30548 -30549 -30550 -30551 -30552 -30553 -30554 -30555 -30556 -30557 -30558 -30559 -30560 -30561 -30562 -30563 -30564 -30565 -30566 -30567 -30568 -30569 -30570 -30571 -30572 -30573 -30574 -30575 -30576 -30577 -30578 -30579 -30580 -30581 -30582 -30583 -30584 -30585 -30586 -30587 -30588 -30589 -30590 -30591 -30592 -30593 -30594 -30595 -30596 -30597 -30598 -30599 -30600 -30601 -30602 -30603 -30604 -30605 -30606 -30607 -30608 -30609 -30610 -30611 -30612 -30613 -30614 -30615 -30616 -30617 -30618 -30619 -30620 -30621 -30622 -30623 -30624 -30625 -30626 -30627 -30628 -30629 -30630 -30631 -30632 -30633 -30634 -30635 -30636 -30637 -30638 -30639 -30640 -30641 -30642 -30643 -30644 -30645 -30646 -30647 -30648 -30649 -30650 -30651 -30652 -30653 -30654 -30655 -30656 -30657 -30658 -30659 -30660 -30661 -30662 -30663 -30664 -30665 -30666 -30667 -30668 -30669 -30670 -30671 -30672 -30673 -30674 -30675 -30676 -30677 -30678 -30679 -30680 -30681 -30682 -30683 -30684 -30685 -30686 -30687 -30688 -30689 -30690 -30691 -30692 -30693 -30694 -30695 -30696 -30697 -30698 -30699 -30700 -30701 -30702 -30703 -30704 -30705 -30706 -30707 -30708 -30709 -30710 -30711 -30712 -30713 -30714 -30715 -30716 -30717 -30718 -30719 -30720 -30721 -30722 -30723 -30724 -30725 -30726 -30727 -30728 -30729 -30730 -30731 -30732 -30733 -30734 -30735 -30736 -30737 -30738 -30739 -30740 -30741 -30742 -30743 -30744 -30745 -30746 -30747 -30748 -30749 -30750 -30751 -30752 -30753 -30754 -30755 -30756 -30757 -30758 -30759 -30760 -30761 -30762 -30763 -30764 -30765 -30766 -30767 -30768 -30769 -30770 -30771 -30772 -30773 -30774 -30775 -30776 -30777 -30778 -30779 -30780 -30781 -30782 -30783 -30784 -30785 -30786 -30787 -30788 -30789 -30790 -30791 -30792 -30793 -30794 -30795 -30796 -30797 -30798 -30799 -30800 -30801 -30802 -30803 -30804 -30805 -30806 -30807 -30808 -30809 -30810 -30811 -30812 -30813 -30814 -30815 -30816 -30817 -30818 -30819 -30820 -30821 -30822 -30823 -30824 -30825 -30826 -30827 -30828 -30829 -30830 -30831 -30832 -30833 -30834 -30835 -30836 -30837 -30838 -30839 -30840 -30841 -30842 -30843 -30844 -30845 -30846 -30847 -30848 -30849 -30850 -30851 -30852 -30853 -30854 -30855 -30856 -30857 -30858 -30859 -30860 -30861 -30862 -30863 -30864 -30865 -30866 -30867 -30868 -30869 -30870 -30871 -30872 -30873 -30874 -30875 -30876 -30877 -30878 -30879 -30880 -30881 -30882 -30883 -30884 -30885 -30886 -30887 -30888 -30889 -30890 -30891 -30892 -30893 -30894 -30895 -30896 -30897 -30898 -30899 -30900 -30901 -30902 -30903 -30904 -30905 -30906 -30907 -30908 -30909 -30910 -30911 -30912 -30913 -30914 -30915 -30916 -30917 -30918 -30919 -30920 -30921 -30922 -30923 -30924 -30925 -30926 -30927 -30928 -30929 -30930 -30931 -30932 -30933 -30934 -30935 -30936 -30937 -30938 -30939 -30940 -30941 -30942 -30943 -30944 -30945 -30946 -30947 -30948 -30949 -30950 -30951 -30952 -30953 -30954 -30955 -30956 -30957 -30958 -30959 -30960 -30961 -30962 -30963 -30964 -30965 -30966 -30967 -30968 -30969 -30970 -30971 -30972 -30973 -30974 -30975 -30976 -30977 -30978 -30979 -30980 -30981 -30982 -30983 -30984 -30985 -30986 -30987 -30988 -30989 -30990 -30991 -30992 -30993 -30994 -30995 -30996 -30997 -30998 -30999 -31000 -31001 -31002 -31003 -31004 -31005 -31006 -31007 -31008 -31009 -31010 -31011 -31012 -31013 -31014 -31015 -31016 -31017 -31018 -31019 -31020 -31021 -31022 -31023 -31024 -31025 -31026 -31027 -31028 -31029 -31030 -31031 -31032 -31033 -31034 -31035 -31036 -31037 -31038 -31039 -31040 -31041 -31042 -31043 -31044 -31045 -31046 -31047 -31048 -31049 -31050 -31051 -31052 -31053 -31054 -31055 -31056 -31057 -31058 -31059 -31060 -31061 -31062 -31063 -31064 -31065 -31066 -31067 -31068 -31069 -31070 -31071 -31072 -31073 -31074 -31075 -31076 -31077 -31078 -31079 -31080 -31081 -31082 -31083 -31084 -31085 -31086 -31087 -31088 -31089 -31090 -31091 -31092 -31093 -31094 -31095 -31096 -31097 -31098 -31099 -31100 -31101 -31102 -31103 -31104 -31105 -31106 -31107 -31108 -31109 -31110 -31111 -31112 -31113 -31114 -31115 -31116 -31117 -31118 -31119 -31120 -31121 -31122 -31123 -31124 -31125 -31126 -31127 -31128 -31129 -31130 -31131 -31132 -31133 -31134 -31135 -31136 -31137 -31138 -31139 -31140 -31141 -31142 -31143 -31144 -31145 -31146 -31147 -31148 -31149 -31150 -31151 -31152 -31153 -31154 -31155 -31156 -31157 -31158 -31159 -31160 -31161 -31162 -31163 -31164 -31165 -31166 -31167 -31168 -31169 -31170 -31171 -31172 -31173 -31174 -31175 -31176 -31177 -31178 -31179 -31180 -31181 -31182 -31183 -31184 -31185 -31186 -31187 -31188 -31189 -31190 -31191 -31192 -31193 -31194 -31195 -31196 -31197 -31198 -31199 -31200 -31201 -31202 -31203 -31204 -31205 -31206 -31207 -31208 -31209 -31210 -31211 -31212 -31213 -31214 -31215 -31216 -31217 -31218 -31219 -31220 -31221 -31222 -31223 -31224 -31225 -31226 -31227 -31228 -31229 -31230 -31231 -31232 -31233 -31234 -31235 -31236 -31237 -31238 -31239 -31240 -31241 -31242 -31243 -31244 -31245 -31246 -31247 -31248 -31249 -31250 -31251 -31252 -31253 -31254 -31255 -31256 -31257 -31258 -31259 -31260 -31261 -31262 -31263 -31264 -31265 -31266 -31267 -31268 -31269 -31270 -31271 -31272 -31273 -31274 -31275 -31276 -31277 -31278 -31279 -31280 -31281 -31282 -31283 -31284 -31285 -31286 -31287 -31288 -31289 -31290 -31291 -31292 -31293 -31294 -31295 -31296 -31297 -31298 -31299 -31300 -31301 -31302 -31303 -31304 -31305 -31306 -31307 -31308 -31309 -31310 -31311 -31312 -31313 -31314 -31315 -31316 -31317 -31318 -31319 -31320 -31321 -31322 -31323 -31324 -31325 -31326 -31327 -31328 -31329 -31330 -31331 -31332 -31333 -31334 -31335 -31336 -31337 -31338 -31339 -31340 -31341 -31342 -31343 -31344 -31345 -31346 -31347 -31348 -31349 -31350 -31351 -31352 -31353 -31354 -31355 -31356 -31357 -31358 -31359 -31360 -31361 -31362 -31363 -31364 -31365 -31366 -31367 -31368 -31369 -31370 -31371 -31372 -31373 -31374 -31375 -31376 -31377 -31378 -31379 -31380 -31381 -31382 -31383 -31384 -31385 -31386 -31387 -31388 -31389 -31390 -31391 -31392 -31393 -31394 -31395 -31396 -31397 -31398 -31399 -31400 -31401 -31402 -31403 -31404 -31405 -31406 -31407 -31408 -31409 -31410 -31411 -31412 -31413 -31414 -31415 -31416 -31417 -31418 -31419 -31420 -31421 -31422 -31423 -31424 -31425 -31426 -31427 -31428 -31429 -31430 -31431 -31432 -31433 -31434 -31435 -31436 -31437 -31438 -31439 -31440 -31441 -31442 -31443 -31444 -31445 -31446 -31447 -31448 -31449 -31450 -31451 -31452 -31453 -31454 -31455 -31456 -31457 -31458 -31459 -31460 -31461 -31462 -31463 -31464 -31465 -31466 -31467 -31468 -31469 -31470 -31471 -31472 -31473 -31474 -31475 -31476 -31477 -31478 -31479 -31480 -31481 -31482 -31483 -31484 -31485 -31486 -31487 -31488 -31489 -31490 -31491 -31492 -31493 -31494 -31495 -31496 -31497 -31498 -31499 -31500 -31501 -31502 -31503 -31504 -31505 -31506 -31507 -31508 -31509 -31510 -31511 -31512 -31513 -31514 -31515 -31516 -31517 -31518 -31519 -31520 -31521 -31522 -31523 -31524 -31525 -31526 -31527 -31528 -31529 -31530 -31531 -31532 -31533 -31534 -31535 -31536 -31537 -31538 -31539 -31540 -31541 -31542 -31543 -31544 -31545 -31546 -31547 -31548 -31549 -31550 -31551 -31552 -31553 -31554 -31555 -31556 -31557 -31558 -31559 -31560 -31561 -31562 -31563 -31564 -31565 -31566 -31567 -31568 -31569 -31570 -31571 -31572 -31573 -31574 -31575 -31576 -31577 -31578 -31579 -31580 -31581 -31582 -31583 -31584 -31585 -31586 -31587 -31588 -31589 -31590 -31591 -31592 -31593 -31594 -31595 -31596 -31597 -31598 -31599 -31600 -31601 -31602 -31603 -31604 -31605 -31606 -31607 -31608 -31609 -31610 -31611 -31612 -31613 -31614 -31615 -31616 -31617 -31618 -31619 -31620 -31621 -31622 -31623 -31624 -31625 -31626 -31627 -31628 -31629 -31630 -31631 -31632 -31633 -31634 -31635 -31636 -31637 -31638 -31639 -31640 -31641 -31642 -31643 -31644 -31645 -31646 -31647 -31648 -31649 -31650 -31651 -31652 -31653 -31654 -31655 -31656 -31657 -31658 -31659 -31660 -31661 -31662 -31663 -31664 -31665 -31666 -31667 -31668 -31669 -31670 -31671 -31672 -31673 -31674 -31675 -31676 -31677 -31678 -31679 -31680 -31681 -31682 -31683 -31684 -31685 -31686 -31687 -31688 -31689 -31690 -31691 -31692 -31693 -31694 -31695 -31696 -31697 -31698 -31699 -31700 -31701 -31702 -31703 -31704 -31705 -31706 -31707 -31708 -31709 -31710 -31711 -31712 -31713 -31714 -31715 -31716 -31717 -31718 -31719 -31720 -31721 -31722 -31723 -31724 -31725 -31726 -31727 -31728 -31729 -31730 -31731 -31732 -31733 -31734 -31735 -31736 -31737 -31738 -31739 -31740 -31741 -31742 -31743 -31744 -31745 -31746 -31747 -31748 -31749 -31750 -31751 -31752 -31753 -31754 -31755 -31756 -31757 -31758 -31759 -31760 -31761 -31762 -31763 -31764 -31765 -31766 -31767 -31768 -31769 -31770 -31771 -31772 -31773 -31774 -31775 -31776 -31777 -31778 -31779 -31780 -31781 -31782 -31783 -31784 -31785 -31786 -31787 -31788 -31789 -31790 -31791 -31792 -31793 -31794 -31795 -31796 -31797 -31798 -31799 -31800 -31801 -31802 -31803 -31804 -31805 -31806 -31807 -31808 -31809 -31810 -31811 -31812 -31813 -31814 -31815 -31816 -31817 -31818 -31819 -31820 -31821 -31822 -31823 -31824 -31825 -31826 -31827 -31828 -31829 -31830 -31831 -31832 -31833 -31834 -31835 -31836 -31837 -31838 -31839 -31840 -31841 -31842 -31843 -31844 -31845 -31846 -31847 -31848 -31849 -31850 -31851 -31852 -31853 -31854 -31855 -31856 -31857 -31858 -31859 -31860 -31861 -31862 -31863 -31864 -31865 -31866 -31867 -31868 -31869 -31870 -31871 -31872 -31873 -31874 -31875 -31876 -31877 -31878 -31879 -31880 -31881 -31882 -31883 -31884 -31885 -31886 -31887 -31888 -31889 -31890 -31891 -31892 -31893 -31894 -31895 -31896 -31897 -31898 -31899 -31900 -31901 -31902 -31903 -31904 -31905 -31906 -31907 -31908 -31909 -31910 -31911 -31912 -31913 -31914 -31915 -31916 -31917 -31918 -31919 -31920 -31921 -31922 -31923 -31924 -31925 -31926 -31927 -31928 -31929 -31930 -31931 -31932 -31933 -31934 -31935 -31936 -31937 -31938 -31939 -31940 -31941 -31942 -31943 -31944 -31945 -31946 -31947 -31948 -31949 -31950 -31951 -31952 -31953 -31954 -31955 -31956 -31957 -31958 -31959 -31960 -31961 -31962 -31963 -31964 -31965 -31966 -31967 -31968 -31969 -31970 -31971 -31972 -31973 -31974 -31975 -31976 -31977 -31978 -31979 -31980 -31981 -31982 -31983 -31984 -31985 -31986 -31987 -31988 -31989 -31990 -31991 -31992 -31993 -31994 -31995 -31996 -31997 -31998 -31999 -32000 -32001 -32002 -32003 -32004 -32005 -32006 -32007 -32008 -32009 -32010 -32011 -32012 -32013 -32014 -32015 -32016 -32017 -32018 -32019 -32020 -32021 -32022 -32023 -32024 -32025 -32026 -32027 -32028 -32029 -32030 -32031 -32032 -32033 -32034 -32035 -32036 -32037 -32038 -32039 -32040 -32041 -32042 -32043 -32044 -32045 -32046 -32047 -32048 -32049 -32050 -32051 -32052 -32053 -32054 -32055 -32056 -32057 -32058 -32059 -32060 -32061 -32062 -32063 -32064 -32065 -32066 -32067 -32068 -32069 -32070 -32071 -32072 -32073 -32074 -32075 -32076 -32077 -32078 -32079 -32080 -32081 -32082 -32083 -32084 -32085 -32086 -32087 -32088 -32089 -32090 -32091 -32092 -32093 -32094 -32095 -32096 -32097 -32098 -32099 -32100 -32101 -32102 -32103 -32104 -32105 -32106 -32107 -32108 -32109 -32110 -32111 -32112 -32113 -32114 -32115 -32116 -32117 -32118 -32119 -32120 -32121 -32122 -32123 -32124 -32125 -32126 -32127 -32128 -32129 -32130 -32131 -32132 -32133 -32134 -32135 -32136 -32137 -32138 -32139 -32140 -32141 -32142 -32143 -32144 -32145 -32146 -32147 -32148 -32149 -32150 -32151 -32152 -32153 -32154 -32155 -32156 -32157 -32158 -32159 -32160 -32161 -32162 -32163 -32164 -32165 -32166 -32167 -32168 -32169 -32170 -32171 -32172 -32173 -32174 -32175 -32176 -32177 -32178 -32179 -32180 -32181 -32182 -32183 -32184 -32185 -32186 -32187 -32188 -32189 -32190 -32191 -32192 -32193 -32194 -32195 -32196 -32197 -32198 -32199 -32200 -32201 -32202 -32203 -32204 -32205 -32206 -32207 -32208 -32209 -32210 -32211 -32212 -32213 -32214 -32215 -32216 -32217 -32218 -32219 -32220 -32221 -32222 -32223 -32224 -32225 -32226 -32227 -32228 -32229 -32230 -32231 -32232 -32233 -32234 -32235 -32236 -32237 -32238 -32239 -32240 -32241 -32242 -32243 -32244 -32245 -32246 -32247 -32248 -32249 -32250 -32251 -32252 -32253 -32254 -32255 -32256 -32257 -32258 -32259 -32260 -32261 -32262 -32263 -32264 -32265 -32266 -32267 -32268 -32269 -32270 -32271 -32272 -32273 -32274 -32275 -32276 -32277 -32278 -32279 -32280 -32281 -32282 -32283 -32284 -32285 -32286 -32287 -32288 -32289 -32290 -32291 -32292 -32293 -32294 -32295 -32296 -32297 -32298 -32299 -32300 -32301 -32302 -32303 -32304 -32305 -32306 -32307 -32308 -32309 -32310 -32311 -32312 -32313 -32314 -32315 -32316 -32317 -32318 -32319 -32320 -32321 -32322 -32323 -32324 -32325 -32326 -32327 -32328 -32329 -32330 -32331 -32332 -32333 -32334 -32335 -32336 -32337 -32338 -32339 -32340 -32341 -32342 -32343 -32344 -32345 -32346 -32347 -32348 -32349 -32350 -32351 -32352 -32353 -32354 -32355 -32356 -32357 -32358 -32359 -32360 -32361 -32362 -32363 -32364 -32365 -32366 -32367 -32368 -32369 -32370 -32371 -32372 -32373 -32374 -32375 -32376 -32377 -32378 -32379 -32380 -32381 -32382 -32383 -32384 -32385 -32386 -32387 -32388 -32389 -32390 -32391 -32392 -32393 -32394 -32395 -32396 -32397 -32398 -32399 -32400 -32401 -32402 -32403 -32404 -32405 -32406 -32407 -32408 -32409 -32410 -32411 -32412 -32413 -32414 -32415 -32416 -32417 -32418 -32419 -32420 -32421 -32422 -32423 -32424 -32425 -32426 -32427 -32428 -32429 -32430 -32431 -32432 -32433 -32434 -32435 -32436 -32437 -32438 -32439 -32440 -32441 -32442 -32443 -32444 -32445 -32446 -32447 -32448 -32449 -32450 -32451 -32452 -32453 -32454 -32455 -32456 -32457 -32458 -32459 -32460 -32461 -32462 -32463 -32464 -32465 -32466 -32467 -32468 -32469 -32470 -32471 -32472 -32473 -32474 -32475 -32476 -32477 -32478 -32479 -32480 -32481 -32482 -32483 -32484 -32485 -32486 -32487 -32488 -32489 -32490 -32491 -32492 -32493 -32494 -32495 -32496 -32497 -32498 -32499 -32500 -32501 -32502 -32503 -32504 -32505 -32506 -32507 -32508 -32509 -32510 -32511 -32512 -32513 -32514 -32515 -32516 -32517 -32518 -32519 -32520 -32521 -32522 -32523 -32524 -32525 -32526 -32527 -32528 -32529 -32530 -32531 -32532 -32533 -32534 -32535 -32536 -32537 -32538 -32539 -32540 -32541 -32542 -32543 -32544 -32545 -32546 -32547 -32548 -32549 -32550 -32551 -32552 -32553 -32554 -32555 -32556 -32557 -32558 -32559 -32560 -32561 -32562 -32563 -32564 -32565 -32566 -32567 -32568 -32569 -32570 -32571 -32572 -32573 -32574 -32575 -32576 -32577 -32578 -32579 -32580 -32581 -32582 -32583 -32584 -32585 -32586 -32587 -32588 -32589 -32590 -32591 -32592 -32593 -32594 -32595 -32596 -32597 -32598 -32599 -32600 -32601 -32602 -32603 -32604 -32605 -32606 -32607 -32608 -32609 -32610 -32611 -32612 -32613 -32614 -32615 -32616 -32617 -32618 -32619 -32620 -32621 -32622 -32623 -32624 -32625 -32626 -32627 -32628 -32629 -32630 -32631 -32632 -32633 -32634 -32635 -32636 -32637 -32638 -32639 -32640 -32641 -32642 -32643 -32644 -32645 -32646 -32647 -32648 -32649 -32650 -32651 -32652 -32653 -32654 -32655 -32656 -32657 -32658 -32659 -32660 -32661 -32662 -32663 -32664 -32665 -32666 -32667 -32668 -32669 -32670 -32671 -32672 -32673 -32674 -32675 -32676 -32677 -32678 -32679 -32680 -32681 -32682 -32683 -32684 -32685 -32686 -32687 -32688 -32689 -32690 -32691 -32692 -32693 -32694 -32695 -32696 -32697 -32698 -32699 -32700 -32701 -32702 -32703 -32704 -32705 -32706 -32707 -32708 -32709 -32710 -32711 -32712 -32713 -32714 -32715 -32716 -32717 -32718 -32719 -32720 -32721 -32722 -32723 -32724 -32725 -32726 -32727 -32728 -32729 -32730 -32731 -32732 -32733 -32734 -32735 -32736 -32737 -32738 -32739 -32740 -32741 -32742 -32743 -32744 -32745 -32746 -32747 -32748 -32749 -32750 -32751 -32752 -32753 -32754 -32755 -32756 -32757 -32758 -32759 -32760 -32761 -32762 -32763 -32764 -32765 -32766 -32767 -) - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/polyMesh/sets/c0_old b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/polyMesh/sets/c0_old deleted file mode 100644 index e28610eeda927d09227498a77ec583d086216e02..0000000000000000000000000000000000000000 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/polyMesh/sets/c0_old +++ /dev/null @@ -1,32789 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class topoSet; - object c0_old; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -32768 -( -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 -813 -814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 -834 -835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 -847 -848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 -868 -869 -870 -871 -872 -873 -874 -875 -876 -877 -878 -879 -880 -881 -882 -883 -884 -885 -886 -887 -888 -889 -890 -891 -892 -893 -894 -895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 -917 -918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 -936 -937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 -954 -955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 -971 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -985 -986 -987 -988 -989 -990 -991 -992 -993 -994 -995 -996 -997 -998 -999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 -1016 -1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 -1025 -1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 -1041 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 -1068 -1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 -1077 -1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 -1086 -1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 -1108 -1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 -1139 -1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 -1158 -1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 -1172 -1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 -1181 -1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 -1223 -1224 -1225 -1226 -1227 -1228 -1229 -1230 -1231 -1232 -1233 -1234 -1235 -1236 -1237 -1238 -1239 -1240 -1241 -1242 -1243 -1244 -1245 -1246 -1247 -1248 -1249 -1250 -1251 -1252 -1253 -1254 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283 -1284 -1285 -1286 -1287 -1288 -1289 -1290 -1291 -1292 -1293 -1294 -1295 -1296 -1297 -1298 -1299 -1300 -1301 -1302 -1303 -1304 -1305 -1306 -1307 -1308 -1309 -1310 -1311 -1312 -1313 -1314 -1315 -1316 -1317 -1318 -1319 -1320 -1321 -1322 -1323 -1324 -1325 -1326 -1327 -1328 -1329 -1330 -1331 -1332 -1333 -1334 -1335 -1336 -1337 -1338 -1339 -1340 -1341 -1342 -1343 -1344 -1345 -1346 -1347 -1348 -1349 -1350 -1351 -1352 -1353 -1354 -1355 -1356 -1357 -1358 -1359 -1360 -1361 -1362 -1363 -1364 -1365 -1366 -1367 -1368 -1369 -1370 -1371 -1372 -1373 -1374 -1375 -1376 -1377 -1378 -1379 -1380 -1381 -1382 -1383 -1384 -1385 -1386 -1387 -1388 -1389 -1390 -1391 -1392 -1393 -1394 -1395 -1396 -1397 -1398 -1399 -1400 -1401 -1402 -1403 -1404 -1405 -1406 -1407 -1408 -1409 -1410 -1411 -1412 -1413 -1414 -1415 -1416 -1417 -1418 -1419 -1420 -1421 -1422 -1423 -1424 -1425 -1426 -1427 -1428 -1429 -1430 -1431 -1432 -1433 -1434 -1435 -1436 -1437 -1438 -1439 -1440 -1441 -1442 -1443 -1444 -1445 -1446 -1447 -1448 -1449 -1450 -1451 -1452 -1453 -1454 -1455 -1456 -1457 -1458 -1459 -1460 -1461 -1462 -1463 -1464 -1465 -1466 -1467 -1468 -1469 -1470 -1471 -1472 -1473 -1474 -1475 -1476 -1477 -1478 -1479 -1480 -1481 -1482 -1483 -1484 -1485 -1486 -1487 -1488 -1489 -1490 -1491 -1492 -1493 -1494 -1495 -1496 -1497 -1498 -1499 -1500 -1501 -1502 -1503 -1504 -1505 -1506 -1507 -1508 -1509 -1510 -1511 -1512 -1513 -1514 -1515 -1516 -1517 -1518 -1519 -1520 -1521 -1522 -1523 -1524 -1525 -1526 -1527 -1528 -1529 -1530 -1531 -1532 -1533 -1534 -1535 -1536 -1537 -1538 -1539 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 -1552 -1553 -1554 -1555 -1556 -1557 -1558 -1559 -1560 -1561 -1562 -1563 -1564 -1565 -1566 -1567 -1568 -1569 -1570 -1571 -1572 -1573 -1574 -1575 -1576 -1577 -1578 -1579 -1580 -1581 -1582 -1583 -1584 -1585 -1586 -1587 -1588 -1589 -1590 -1591 -1592 -1593 -1594 -1595 -1596 -1597 -1598 -1599 -1600 -1601 -1602 -1603 -1604 -1605 -1606 -1607 -1608 -1609 -1610 -1611 -1612 -1613 -1614 -1615 -1616 -1617 -1618 -1619 -1620 -1621 -1622 -1623 -1624 -1625 -1626 -1627 -1628 -1629 -1630 -1631 -1632 -1633 -1634 -1635 -1636 -1637 -1638 -1639 -1640 -1641 -1642 -1643 -1644 -1645 -1646 -1647 -1648 -1649 -1650 -1651 -1652 -1653 -1654 -1655 -1656 -1657 -1658 -1659 -1660 -1661 -1662 -1663 -1664 -1665 -1666 -1667 -1668 -1669 -1670 -1671 -1672 -1673 -1674 -1675 -1676 -1677 -1678 -1679 -1680 -1681 -1682 -1683 -1684 -1685 -1686 -1687 -1688 -1689 -1690 -1691 -1692 -1693 -1694 -1695 -1696 -1697 -1698 -1699 -1700 -1701 -1702 -1703 -1704 -1705 -1706 -1707 -1708 -1709 -1710 -1711 -1712 -1713 -1714 -1715 -1716 -1717 -1718 -1719 -1720 -1721 -1722 -1723 -1724 -1725 -1726 -1727 -1728 -1729 -1730 -1731 -1732 -1733 -1734 -1735 -1736 -1737 -1738 -1739 -1740 -1741 -1742 -1743 -1744 -1745 -1746 -1747 -1748 -1749 -1750 -1751 -1752 -1753 -1754 -1755 -1756 -1757 -1758 -1759 -1760 -1761 -1762 -1763 -1764 -1765 -1766 -1767 -1768 -1769 -1770 -1771 -1772 -1773 -1774 -1775 -1776 -1777 -1778 -1779 -1780 -1781 -1782 -1783 -1784 -1785 -1786 -1787 -1788 -1789 -1790 -1791 -1792 -1793 -1794 -1795 -1796 -1797 -1798 -1799 -1800 -1801 -1802 -1803 -1804 -1805 -1806 -1807 -1808 -1809 -1810 -1811 -1812 -1813 -1814 -1815 -1816 -1817 -1818 -1819 -1820 -1821 -1822 -1823 -1824 -1825 -1826 -1827 -1828 -1829 -1830 -1831 -1832 -1833 -1834 -1835 -1836 -1837 -1838 -1839 -1840 -1841 -1842 -1843 -1844 -1845 -1846 -1847 -1848 -1849 -1850 -1851 -1852 -1853 -1854 -1855 -1856 -1857 -1858 -1859 -1860 -1861 -1862 -1863 -1864 -1865 -1866 -1867 -1868 -1869 -1870 -1871 -1872 -1873 -1874 -1875 -1876 -1877 -1878 -1879 -1880 -1881 -1882 -1883 -1884 -1885 -1886 -1887 -1888 -1889 -1890 -1891 -1892 -1893 -1894 -1895 -1896 -1897 -1898 -1899 -1900 -1901 -1902 -1903 -1904 -1905 -1906 -1907 -1908 -1909 -1910 -1911 -1912 -1913 -1914 -1915 -1916 -1917 -1918 -1919 -1920 -1921 -1922 -1923 -1924 -1925 -1926 -1927 -1928 -1929 -1930 -1931 -1932 -1933 -1934 -1935 -1936 -1937 -1938 -1939 -1940 -1941 -1942 -1943 -1944 -1945 -1946 -1947 -1948 -1949 -1950 -1951 -1952 -1953 -1954 -1955 -1956 -1957 -1958 -1959 -1960 -1961 -1962 -1963 -1964 -1965 -1966 -1967 -1968 -1969 -1970 -1971 -1972 -1973 -1974 -1975 -1976 -1977 -1978 -1979 -1980 -1981 -1982 -1983 -1984 -1985 -1986 -1987 -1988 -1989 -1990 -1991 -1992 -1993 -1994 -1995 -1996 -1997 -1998 -1999 -2000 -2001 -2002 -2003 -2004 -2005 -2006 -2007 -2008 -2009 -2010 -2011 -2012 -2013 -2014 -2015 -2016 -2017 -2018 -2019 -2020 -2021 -2022 -2023 -2024 -2025 -2026 -2027 -2028 -2029 -2030 -2031 -2032 -2033 -2034 -2035 -2036 -2037 -2038 -2039 -2040 -2041 -2042 -2043 -2044 -2045 -2046 -2047 -2048 -2049 -2050 -2051 -2052 -2053 -2054 -2055 -2056 -2057 -2058 -2059 -2060 -2061 -2062 -2063 -2064 -2065 -2066 -2067 -2068 -2069 -2070 -2071 -2072 -2073 -2074 -2075 -2076 -2077 -2078 -2079 -2080 -2081 -2082 -2083 -2084 -2085 -2086 -2087 -2088 -2089 -2090 -2091 -2092 -2093 -2094 -2095 -2096 -2097 -2098 -2099 -2100 -2101 -2102 -2103 -2104 -2105 -2106 -2107 -2108 -2109 -2110 -2111 -2112 -2113 -2114 -2115 -2116 -2117 -2118 -2119 -2120 -2121 -2122 -2123 -2124 -2125 -2126 -2127 -2128 -2129 -2130 -2131 -2132 -2133 -2134 -2135 -2136 -2137 -2138 -2139 -2140 -2141 -2142 -2143 -2144 -2145 -2146 -2147 -2148 -2149 -2150 -2151 -2152 -2153 -2154 -2155 -2156 -2157 -2158 -2159 -2160 -2161 -2162 -2163 -2164 -2165 -2166 -2167 -2168 -2169 -2170 -2171 -2172 -2173 -2174 -2175 -2176 -2177 -2178 -2179 -2180 -2181 -2182 -2183 -2184 -2185 -2186 -2187 -2188 -2189 -2190 -2191 -2192 -2193 -2194 -2195 -2196 -2197 -2198 -2199 -2200 -2201 -2202 -2203 -2204 -2205 -2206 -2207 -2208 -2209 -2210 -2211 -2212 -2213 -2214 -2215 -2216 -2217 -2218 -2219 -2220 -2221 -2222 -2223 -2224 -2225 -2226 -2227 -2228 -2229 -2230 -2231 -2232 -2233 -2234 -2235 -2236 -2237 -2238 -2239 -2240 -2241 -2242 -2243 -2244 -2245 -2246 -2247 -2248 -2249 -2250 -2251 -2252 -2253 -2254 -2255 -2256 -2257 -2258 -2259 -2260 -2261 -2262 -2263 -2264 -2265 -2266 -2267 -2268 -2269 -2270 -2271 -2272 -2273 -2274 -2275 -2276 -2277 -2278 -2279 -2280 -2281 -2282 -2283 -2284 -2285 -2286 -2287 -2288 -2289 -2290 -2291 -2292 -2293 -2294 -2295 -2296 -2297 -2298 -2299 -2300 -2301 -2302 -2303 -2304 -2305 -2306 -2307 -2308 -2309 -2310 -2311 -2312 -2313 -2314 -2315 -2316 -2317 -2318 -2319 -2320 -2321 -2322 -2323 -2324 -2325 -2326 -2327 -2328 -2329 -2330 -2331 -2332 -2333 -2334 -2335 -2336 -2337 -2338 -2339 -2340 -2341 -2342 -2343 -2344 -2345 -2346 -2347 -2348 -2349 -2350 -2351 -2352 -2353 -2354 -2355 -2356 -2357 -2358 -2359 -2360 -2361 -2362 -2363 -2364 -2365 -2366 -2367 -2368 -2369 -2370 -2371 -2372 -2373 -2374 -2375 -2376 -2377 -2378 -2379 -2380 -2381 -2382 -2383 -2384 -2385 -2386 -2387 -2388 -2389 -2390 -2391 -2392 -2393 -2394 -2395 -2396 -2397 -2398 -2399 -2400 -2401 -2402 -2403 -2404 -2405 -2406 -2407 -2408 -2409 -2410 -2411 -2412 -2413 -2414 -2415 -2416 -2417 -2418 -2419 -2420 -2421 -2422 -2423 -2424 -2425 -2426 -2427 -2428 -2429 -2430 -2431 -2432 -2433 -2434 -2435 -2436 -2437 -2438 -2439 -2440 -2441 -2442 -2443 -2444 -2445 -2446 -2447 -2448 -2449 -2450 -2451 -2452 -2453 -2454 -2455 -2456 -2457 -2458 -2459 -2460 -2461 -2462 -2463 -2464 -2465 -2466 -2467 -2468 -2469 -2470 -2471 -2472 -2473 -2474 -2475 -2476 -2477 -2478 -2479 -2480 -2481 -2482 -2483 -2484 -2485 -2486 -2487 -2488 -2489 -2490 -2491 -2492 -2493 -2494 -2495 -2496 -2497 -2498 -2499 -2500 -2501 -2502 -2503 -2504 -2505 -2506 -2507 -2508 -2509 -2510 -2511 -2512 -2513 -2514 -2515 -2516 -2517 -2518 -2519 -2520 -2521 -2522 -2523 -2524 -2525 -2526 -2527 -2528 -2529 -2530 -2531 -2532 -2533 -2534 -2535 -2536 -2537 -2538 -2539 -2540 -2541 -2542 -2543 -2544 -2545 -2546 -2547 -2548 -2549 -2550 -2551 -2552 -2553 -2554 -2555 -2556 -2557 -2558 -2559 -2560 -2561 -2562 -2563 -2564 -2565 -2566 -2567 -2568 -2569 -2570 -2571 -2572 -2573 -2574 -2575 -2576 -2577 -2578 -2579 -2580 -2581 -2582 -2583 -2584 -2585 -2586 -2587 -2588 -2589 -2590 -2591 -2592 -2593 -2594 -2595 -2596 -2597 -2598 -2599 -2600 -2601 -2602 -2603 -2604 -2605 -2606 -2607 -2608 -2609 -2610 -2611 -2612 -2613 -2614 -2615 -2616 -2617 -2618 -2619 -2620 -2621 -2622 -2623 -2624 -2625 -2626 -2627 -2628 -2629 -2630 -2631 -2632 -2633 -2634 -2635 -2636 -2637 -2638 -2639 -2640 -2641 -2642 -2643 -2644 -2645 -2646 -2647 -2648 -2649 -2650 -2651 -2652 -2653 -2654 -2655 -2656 -2657 -2658 -2659 -2660 -2661 -2662 -2663 -2664 -2665 -2666 -2667 -2668 -2669 -2670 -2671 -2672 -2673 -2674 -2675 -2676 -2677 -2678 -2679 -2680 -2681 -2682 -2683 -2684 -2685 -2686 -2687 -2688 -2689 -2690 -2691 -2692 -2693 -2694 -2695 -2696 -2697 -2698 -2699 -2700 -2701 -2702 -2703 -2704 -2705 -2706 -2707 -2708 -2709 -2710 -2711 -2712 -2713 -2714 -2715 -2716 -2717 -2718 -2719 -2720 -2721 -2722 -2723 -2724 -2725 -2726 -2727 -2728 -2729 -2730 -2731 -2732 -2733 -2734 -2735 -2736 -2737 -2738 -2739 -2740 -2741 -2742 -2743 -2744 -2745 -2746 -2747 -2748 -2749 -2750 -2751 -2752 -2753 -2754 -2755 -2756 -2757 -2758 -2759 -2760 -2761 -2762 -2763 -2764 -2765 -2766 -2767 -2768 -2769 -2770 -2771 -2772 -2773 -2774 -2775 -2776 -2777 -2778 -2779 -2780 -2781 -2782 -2783 -2784 -2785 -2786 -2787 -2788 -2789 -2790 -2791 -2792 -2793 -2794 -2795 -2796 -2797 -2798 -2799 -2800 -2801 -2802 -2803 -2804 -2805 -2806 -2807 -2808 -2809 -2810 -2811 -2812 -2813 -2814 -2815 -2816 -2817 -2818 -2819 -2820 -2821 -2822 -2823 -2824 -2825 -2826 -2827 -2828 -2829 -2830 -2831 -2832 -2833 -2834 -2835 -2836 -2837 -2838 -2839 -2840 -2841 -2842 -2843 -2844 -2845 -2846 -2847 -2848 -2849 -2850 -2851 -2852 -2853 -2854 -2855 -2856 -2857 -2858 -2859 -2860 -2861 -2862 -2863 -2864 -2865 -2866 -2867 -2868 -2869 -2870 -2871 -2872 -2873 -2874 -2875 -2876 -2877 -2878 -2879 -2880 -2881 -2882 -2883 -2884 -2885 -2886 -2887 -2888 -2889 -2890 -2891 -2892 -2893 -2894 -2895 -2896 -2897 -2898 -2899 -2900 -2901 -2902 -2903 -2904 -2905 -2906 -2907 -2908 -2909 -2910 -2911 -2912 -2913 -2914 -2915 -2916 -2917 -2918 -2919 -2920 -2921 -2922 -2923 -2924 -2925 -2926 -2927 -2928 -2929 -2930 -2931 -2932 -2933 -2934 -2935 -2936 -2937 -2938 -2939 -2940 -2941 -2942 -2943 -2944 -2945 -2946 -2947 -2948 -2949 -2950 -2951 -2952 -2953 -2954 -2955 -2956 -2957 -2958 -2959 -2960 -2961 -2962 -2963 -2964 -2965 -2966 -2967 -2968 -2969 -2970 -2971 -2972 -2973 -2974 -2975 -2976 -2977 -2978 -2979 -2980 -2981 -2982 -2983 -2984 -2985 -2986 -2987 -2988 -2989 -2990 -2991 -2992 -2993 -2994 -2995 -2996 -2997 -2998 -2999 -3000 -3001 -3002 -3003 -3004 -3005 -3006 -3007 -3008 -3009 -3010 -3011 -3012 -3013 -3014 -3015 -3016 -3017 -3018 -3019 -3020 -3021 -3022 -3023 -3024 -3025 -3026 -3027 -3028 -3029 -3030 -3031 -3032 -3033 -3034 -3035 -3036 -3037 -3038 -3039 -3040 -3041 -3042 -3043 -3044 -3045 -3046 -3047 -3048 -3049 -3050 -3051 -3052 -3053 -3054 -3055 -3056 -3057 -3058 -3059 -3060 -3061 -3062 -3063 -3064 -3065 -3066 -3067 -3068 -3069 -3070 -3071 -3072 -3073 -3074 -3075 -3076 -3077 -3078 -3079 -3080 -3081 -3082 -3083 -3084 -3085 -3086 -3087 -3088 -3089 -3090 -3091 -3092 -3093 -3094 -3095 -3096 -3097 -3098 -3099 -3100 -3101 -3102 -3103 -3104 -3105 -3106 -3107 -3108 -3109 -3110 -3111 -3112 -3113 -3114 -3115 -3116 -3117 -3118 -3119 -3120 -3121 -3122 -3123 -3124 -3125 -3126 -3127 -3128 -3129 -3130 -3131 -3132 -3133 -3134 -3135 -3136 -3137 -3138 -3139 -3140 -3141 -3142 -3143 -3144 -3145 -3146 -3147 -3148 -3149 -3150 -3151 -3152 -3153 -3154 -3155 -3156 -3157 -3158 -3159 -3160 -3161 -3162 -3163 -3164 -3165 -3166 -3167 -3168 -3169 -3170 -3171 -3172 -3173 -3174 -3175 -3176 -3177 -3178 -3179 -3180 -3181 -3182 -3183 -3184 -3185 -3186 -3187 -3188 -3189 -3190 -3191 -3192 -3193 -3194 -3195 -3196 -3197 -3198 -3199 -3200 -3201 -3202 -3203 -3204 -3205 -3206 -3207 -3208 -3209 -3210 -3211 -3212 -3213 -3214 -3215 -3216 -3217 -3218 -3219 -3220 -3221 -3222 -3223 -3224 -3225 -3226 -3227 -3228 -3229 -3230 -3231 -3232 -3233 -3234 -3235 -3236 -3237 -3238 -3239 -3240 -3241 -3242 -3243 -3244 -3245 -3246 -3247 -3248 -3249 -3250 -3251 -3252 -3253 -3254 -3255 -3256 -3257 -3258 -3259 -3260 -3261 -3262 -3263 -3264 -3265 -3266 -3267 -3268 -3269 -3270 -3271 -3272 -3273 -3274 -3275 -3276 -3277 -3278 -3279 -3280 -3281 -3282 -3283 -3284 -3285 -3286 -3287 -3288 -3289 -3290 -3291 -3292 -3293 -3294 -3295 -3296 -3297 -3298 -3299 -3300 -3301 -3302 -3303 -3304 -3305 -3306 -3307 -3308 -3309 -3310 -3311 -3312 -3313 -3314 -3315 -3316 -3317 -3318 -3319 -3320 -3321 -3322 -3323 -3324 -3325 -3326 -3327 -3328 -3329 -3330 -3331 -3332 -3333 -3334 -3335 -3336 -3337 -3338 -3339 -3340 -3341 -3342 -3343 -3344 -3345 -3346 -3347 -3348 -3349 -3350 -3351 -3352 -3353 -3354 -3355 -3356 -3357 -3358 -3359 -3360 -3361 -3362 -3363 -3364 -3365 -3366 -3367 -3368 -3369 -3370 -3371 -3372 -3373 -3374 -3375 -3376 -3377 -3378 -3379 -3380 -3381 -3382 -3383 -3384 -3385 -3386 -3387 -3388 -3389 -3390 -3391 -3392 -3393 -3394 -3395 -3396 -3397 -3398 -3399 -3400 -3401 -3402 -3403 -3404 -3405 -3406 -3407 -3408 -3409 -3410 -3411 -3412 -3413 -3414 -3415 -3416 -3417 -3418 -3419 -3420 -3421 -3422 -3423 -3424 -3425 -3426 -3427 -3428 -3429 -3430 -3431 -3432 -3433 -3434 -3435 -3436 -3437 -3438 -3439 -3440 -3441 -3442 -3443 -3444 -3445 -3446 -3447 -3448 -3449 -3450 -3451 -3452 -3453 -3454 -3455 -3456 -3457 -3458 -3459 -3460 -3461 -3462 -3463 -3464 -3465 -3466 -3467 -3468 -3469 -3470 -3471 -3472 -3473 -3474 -3475 -3476 -3477 -3478 -3479 -3480 -3481 -3482 -3483 -3484 -3485 -3486 -3487 -3488 -3489 -3490 -3491 -3492 -3493 -3494 -3495 -3496 -3497 -3498 -3499 -3500 -3501 -3502 -3503 -3504 -3505 -3506 -3507 -3508 -3509 -3510 -3511 -3512 -3513 -3514 -3515 -3516 -3517 -3518 -3519 -3520 -3521 -3522 -3523 -3524 -3525 -3526 -3527 -3528 -3529 -3530 -3531 -3532 -3533 -3534 -3535 -3536 -3537 -3538 -3539 -3540 -3541 -3542 -3543 -3544 -3545 -3546 -3547 -3548 -3549 -3550 -3551 -3552 -3553 -3554 -3555 -3556 -3557 -3558 -3559 -3560 -3561 -3562 -3563 -3564 -3565 -3566 -3567 -3568 -3569 -3570 -3571 -3572 -3573 -3574 -3575 -3576 -3577 -3578 -3579 -3580 -3581 -3582 -3583 -3584 -3585 -3586 -3587 -3588 -3589 -3590 -3591 -3592 -3593 -3594 -3595 -3596 -3597 -3598 -3599 -3600 -3601 -3602 -3603 -3604 -3605 -3606 -3607 -3608 -3609 -3610 -3611 -3612 -3613 -3614 -3615 -3616 -3617 -3618 -3619 -3620 -3621 -3622 -3623 -3624 -3625 -3626 -3627 -3628 -3629 -3630 -3631 -3632 -3633 -3634 -3635 -3636 -3637 -3638 -3639 -3640 -3641 -3642 -3643 -3644 -3645 -3646 -3647 -3648 -3649 -3650 -3651 -3652 -3653 -3654 -3655 -3656 -3657 -3658 -3659 -3660 -3661 -3662 -3663 -3664 -3665 -3666 -3667 -3668 -3669 -3670 -3671 -3672 -3673 -3674 -3675 -3676 -3677 -3678 -3679 -3680 -3681 -3682 -3683 -3684 -3685 -3686 -3687 -3688 -3689 -3690 -3691 -3692 -3693 -3694 -3695 -3696 -3697 -3698 -3699 -3700 -3701 -3702 -3703 -3704 -3705 -3706 -3707 -3708 -3709 -3710 -3711 -3712 -3713 -3714 -3715 -3716 -3717 -3718 -3719 -3720 -3721 -3722 -3723 -3724 -3725 -3726 -3727 -3728 -3729 -3730 -3731 -3732 -3733 -3734 -3735 -3736 -3737 -3738 -3739 -3740 -3741 -3742 -3743 -3744 -3745 -3746 -3747 -3748 -3749 -3750 -3751 -3752 -3753 -3754 -3755 -3756 -3757 -3758 -3759 -3760 -3761 -3762 -3763 -3764 -3765 -3766 -3767 -3768 -3769 -3770 -3771 -3772 -3773 -3774 -3775 -3776 -3777 -3778 -3779 -3780 -3781 -3782 -3783 -3784 -3785 -3786 -3787 -3788 -3789 -3790 -3791 -3792 -3793 -3794 -3795 -3796 -3797 -3798 -3799 -3800 -3801 -3802 -3803 -3804 -3805 -3806 -3807 -3808 -3809 -3810 -3811 -3812 -3813 -3814 -3815 -3816 -3817 -3818 -3819 -3820 -3821 -3822 -3823 -3824 -3825 -3826 -3827 -3828 -3829 -3830 -3831 -3832 -3833 -3834 -3835 -3836 -3837 -3838 -3839 -3840 -3841 -3842 -3843 -3844 -3845 -3846 -3847 -3848 -3849 -3850 -3851 -3852 -3853 -3854 -3855 -3856 -3857 -3858 -3859 -3860 -3861 -3862 -3863 -3864 -3865 -3866 -3867 -3868 -3869 -3870 -3871 -3872 -3873 -3874 -3875 -3876 -3877 -3878 -3879 -3880 -3881 -3882 -3883 -3884 -3885 -3886 -3887 -3888 -3889 -3890 -3891 -3892 -3893 -3894 -3895 -3896 -3897 -3898 -3899 -3900 -3901 -3902 -3903 -3904 -3905 -3906 -3907 -3908 -3909 -3910 -3911 -3912 -3913 -3914 -3915 -3916 -3917 -3918 -3919 -3920 -3921 -3922 -3923 -3924 -3925 -3926 -3927 -3928 -3929 -3930 -3931 -3932 -3933 -3934 -3935 -3936 -3937 -3938 -3939 -3940 -3941 -3942 -3943 -3944 -3945 -3946 -3947 -3948 -3949 -3950 -3951 -3952 -3953 -3954 -3955 -3956 -3957 -3958 -3959 -3960 -3961 -3962 -3963 -3964 -3965 -3966 -3967 -3968 -3969 -3970 -3971 -3972 -3973 -3974 -3975 -3976 -3977 -3978 -3979 -3980 -3981 -3982 -3983 -3984 -3985 -3986 -3987 -3988 -3989 -3990 -3991 -3992 -3993 -3994 -3995 -3996 -3997 -3998 -3999 -4000 -4001 -4002 -4003 -4004 -4005 -4006 -4007 -4008 -4009 -4010 -4011 -4012 -4013 -4014 -4015 -4016 -4017 -4018 -4019 -4020 -4021 -4022 -4023 -4024 -4025 -4026 -4027 -4028 -4029 -4030 -4031 -4032 -4033 -4034 -4035 -4036 -4037 -4038 -4039 -4040 -4041 -4042 -4043 -4044 -4045 -4046 -4047 -4048 -4049 -4050 -4051 -4052 -4053 -4054 -4055 -4056 -4057 -4058 -4059 -4060 -4061 -4062 -4063 -4064 -4065 -4066 -4067 -4068 -4069 -4070 -4071 -4072 -4073 -4074 -4075 -4076 -4077 -4078 -4079 -4080 -4081 -4082 -4083 -4084 -4085 -4086 -4087 -4088 -4089 -4090 -4091 -4092 -4093 -4094 -4095 -4096 -4097 -4098 -4099 -4100 -4101 -4102 -4103 -4104 -4105 -4106 -4107 -4108 -4109 -4110 -4111 -4112 -4113 -4114 -4115 -4116 -4117 -4118 -4119 -4120 -4121 -4122 -4123 -4124 -4125 -4126 -4127 -4128 -4129 -4130 -4131 -4132 -4133 -4134 -4135 -4136 -4137 -4138 -4139 -4140 -4141 -4142 -4143 -4144 -4145 -4146 -4147 -4148 -4149 -4150 -4151 -4152 -4153 -4154 -4155 -4156 -4157 -4158 -4159 -4160 -4161 -4162 -4163 -4164 -4165 -4166 -4167 -4168 -4169 -4170 -4171 -4172 -4173 -4174 -4175 -4176 -4177 -4178 -4179 -4180 -4181 -4182 -4183 -4184 -4185 -4186 -4187 -4188 -4189 -4190 -4191 -4192 -4193 -4194 -4195 -4196 -4197 -4198 -4199 -4200 -4201 -4202 -4203 -4204 -4205 -4206 -4207 -4208 -4209 -4210 -4211 -4212 -4213 -4214 -4215 -4216 -4217 -4218 -4219 -4220 -4221 -4222 -4223 -4224 -4225 -4226 -4227 -4228 -4229 -4230 -4231 -4232 -4233 -4234 -4235 -4236 -4237 -4238 -4239 -4240 -4241 -4242 -4243 -4244 -4245 -4246 -4247 -4248 -4249 -4250 -4251 -4252 -4253 -4254 -4255 -4256 -4257 -4258 -4259 -4260 -4261 -4262 -4263 -4264 -4265 -4266 -4267 -4268 -4269 -4270 -4271 -4272 -4273 -4274 -4275 -4276 -4277 -4278 -4279 -4280 -4281 -4282 -4283 -4284 -4285 -4286 -4287 -4288 -4289 -4290 -4291 -4292 -4293 -4294 -4295 -4296 -4297 -4298 -4299 -4300 -4301 -4302 -4303 -4304 -4305 -4306 -4307 -4308 -4309 -4310 -4311 -4312 -4313 -4314 -4315 -4316 -4317 -4318 -4319 -4320 -4321 -4322 -4323 -4324 -4325 -4326 -4327 -4328 -4329 -4330 -4331 -4332 -4333 -4334 -4335 -4336 -4337 -4338 -4339 -4340 -4341 -4342 -4343 -4344 -4345 -4346 -4347 -4348 -4349 -4350 -4351 -4352 -4353 -4354 -4355 -4356 -4357 -4358 -4359 -4360 -4361 -4362 -4363 -4364 -4365 -4366 -4367 -4368 -4369 -4370 -4371 -4372 -4373 -4374 -4375 -4376 -4377 -4378 -4379 -4380 -4381 -4382 -4383 -4384 -4385 -4386 -4387 -4388 -4389 -4390 -4391 -4392 -4393 -4394 -4395 -4396 -4397 -4398 -4399 -4400 -4401 -4402 -4403 -4404 -4405 -4406 -4407 -4408 -4409 -4410 -4411 -4412 -4413 -4414 -4415 -4416 -4417 -4418 -4419 -4420 -4421 -4422 -4423 -4424 -4425 -4426 -4427 -4428 -4429 -4430 -4431 -4432 -4433 -4434 -4435 -4436 -4437 -4438 -4439 -4440 -4441 -4442 -4443 -4444 -4445 -4446 -4447 -4448 -4449 -4450 -4451 -4452 -4453 -4454 -4455 -4456 -4457 -4458 -4459 -4460 -4461 -4462 -4463 -4464 -4465 -4466 -4467 -4468 -4469 -4470 -4471 -4472 -4473 -4474 -4475 -4476 -4477 -4478 -4479 -4480 -4481 -4482 -4483 -4484 -4485 -4486 -4487 -4488 -4489 -4490 -4491 -4492 -4493 -4494 -4495 -4496 -4497 -4498 -4499 -4500 -4501 -4502 -4503 -4504 -4505 -4506 -4507 -4508 -4509 -4510 -4511 -4512 -4513 -4514 -4515 -4516 -4517 -4518 -4519 -4520 -4521 -4522 -4523 -4524 -4525 -4526 -4527 -4528 -4529 -4530 -4531 -4532 -4533 -4534 -4535 -4536 -4537 -4538 -4539 -4540 -4541 -4542 -4543 -4544 -4545 -4546 -4547 -4548 -4549 -4550 -4551 -4552 -4553 -4554 -4555 -4556 -4557 -4558 -4559 -4560 -4561 -4562 -4563 -4564 -4565 -4566 -4567 -4568 -4569 -4570 -4571 -4572 -4573 -4574 -4575 -4576 -4577 -4578 -4579 -4580 -4581 -4582 -4583 -4584 -4585 -4586 -4587 -4588 -4589 -4590 -4591 -4592 -4593 -4594 -4595 -4596 -4597 -4598 -4599 -4600 -4601 -4602 -4603 -4604 -4605 -4606 -4607 -4608 -4609 -4610 -4611 -4612 -4613 -4614 -4615 -4616 -4617 -4618 -4619 -4620 -4621 -4622 -4623 -4624 -4625 -4626 -4627 -4628 -4629 -4630 -4631 -4632 -4633 -4634 -4635 -4636 -4637 -4638 -4639 -4640 -4641 -4642 -4643 -4644 -4645 -4646 -4647 -4648 -4649 -4650 -4651 -4652 -4653 -4654 -4655 -4656 -4657 -4658 -4659 -4660 -4661 -4662 -4663 -4664 -4665 -4666 -4667 -4668 -4669 -4670 -4671 -4672 -4673 -4674 -4675 -4676 -4677 -4678 -4679 -4680 -4681 -4682 -4683 -4684 -4685 -4686 -4687 -4688 -4689 -4690 -4691 -4692 -4693 -4694 -4695 -4696 -4697 -4698 -4699 -4700 -4701 -4702 -4703 -4704 -4705 -4706 -4707 -4708 -4709 -4710 -4711 -4712 -4713 -4714 -4715 -4716 -4717 -4718 -4719 -4720 -4721 -4722 -4723 -4724 -4725 -4726 -4727 -4728 -4729 -4730 -4731 -4732 -4733 -4734 -4735 -4736 -4737 -4738 -4739 -4740 -4741 -4742 -4743 -4744 -4745 -4746 -4747 -4748 -4749 -4750 -4751 -4752 -4753 -4754 -4755 -4756 -4757 -4758 -4759 -4760 -4761 -4762 -4763 -4764 -4765 -4766 -4767 -4768 -4769 -4770 -4771 -4772 -4773 -4774 -4775 -4776 -4777 -4778 -4779 -4780 -4781 -4782 -4783 -4784 -4785 -4786 -4787 -4788 -4789 -4790 -4791 -4792 -4793 -4794 -4795 -4796 -4797 -4798 -4799 -4800 -4801 -4802 -4803 -4804 -4805 -4806 -4807 -4808 -4809 -4810 -4811 -4812 -4813 -4814 -4815 -4816 -4817 -4818 -4819 -4820 -4821 -4822 -4823 -4824 -4825 -4826 -4827 -4828 -4829 -4830 -4831 -4832 -4833 -4834 -4835 -4836 -4837 -4838 -4839 -4840 -4841 -4842 -4843 -4844 -4845 -4846 -4847 -4848 -4849 -4850 -4851 -4852 -4853 -4854 -4855 -4856 -4857 -4858 -4859 -4860 -4861 -4862 -4863 -4864 -4865 -4866 -4867 -4868 -4869 -4870 -4871 -4872 -4873 -4874 -4875 -4876 -4877 -4878 -4879 -4880 -4881 -4882 -4883 -4884 -4885 -4886 -4887 -4888 -4889 -4890 -4891 -4892 -4893 -4894 -4895 -4896 -4897 -4898 -4899 -4900 -4901 -4902 -4903 -4904 -4905 -4906 -4907 -4908 -4909 -4910 -4911 -4912 -4913 -4914 -4915 -4916 -4917 -4918 -4919 -4920 -4921 -4922 -4923 -4924 -4925 -4926 -4927 -4928 -4929 -4930 -4931 -4932 -4933 -4934 -4935 -4936 -4937 -4938 -4939 -4940 -4941 -4942 -4943 -4944 -4945 -4946 -4947 -4948 -4949 -4950 -4951 -4952 -4953 -4954 -4955 -4956 -4957 -4958 -4959 -4960 -4961 -4962 -4963 -4964 -4965 -4966 -4967 -4968 -4969 -4970 -4971 -4972 -4973 -4974 -4975 -4976 -4977 -4978 -4979 -4980 -4981 -4982 -4983 -4984 -4985 -4986 -4987 -4988 -4989 -4990 -4991 -4992 -4993 -4994 -4995 -4996 -4997 -4998 -4999 -5000 -5001 -5002 -5003 -5004 -5005 -5006 -5007 -5008 -5009 -5010 -5011 -5012 -5013 -5014 -5015 -5016 -5017 -5018 -5019 -5020 -5021 -5022 -5023 -5024 -5025 -5026 -5027 -5028 -5029 -5030 -5031 -5032 -5033 -5034 -5035 -5036 -5037 -5038 -5039 -5040 -5041 -5042 -5043 -5044 -5045 -5046 -5047 -5048 -5049 -5050 -5051 -5052 -5053 -5054 -5055 -5056 -5057 -5058 -5059 -5060 -5061 -5062 -5063 -5064 -5065 -5066 -5067 -5068 -5069 -5070 -5071 -5072 -5073 -5074 -5075 -5076 -5077 -5078 -5079 -5080 -5081 -5082 -5083 -5084 -5085 -5086 -5087 -5088 -5089 -5090 -5091 -5092 -5093 -5094 -5095 -5096 -5097 -5098 -5099 -5100 -5101 -5102 -5103 -5104 -5105 -5106 -5107 -5108 -5109 -5110 -5111 -5112 -5113 -5114 -5115 -5116 -5117 -5118 -5119 -5120 -5121 -5122 -5123 -5124 -5125 -5126 -5127 -5128 -5129 -5130 -5131 -5132 -5133 -5134 -5135 -5136 -5137 -5138 -5139 -5140 -5141 -5142 -5143 -5144 -5145 -5146 -5147 -5148 -5149 -5150 -5151 -5152 -5153 -5154 -5155 -5156 -5157 -5158 -5159 -5160 -5161 -5162 -5163 -5164 -5165 -5166 -5167 -5168 -5169 -5170 -5171 -5172 -5173 -5174 -5175 -5176 -5177 -5178 -5179 -5180 -5181 -5182 -5183 -5184 -5185 -5186 -5187 -5188 -5189 -5190 -5191 -5192 -5193 -5194 -5195 -5196 -5197 -5198 -5199 -5200 -5201 -5202 -5203 -5204 -5205 -5206 -5207 -5208 -5209 -5210 -5211 -5212 -5213 -5214 -5215 -5216 -5217 -5218 -5219 -5220 -5221 -5222 -5223 -5224 -5225 -5226 -5227 -5228 -5229 -5230 -5231 -5232 -5233 -5234 -5235 -5236 -5237 -5238 -5239 -5240 -5241 -5242 -5243 -5244 -5245 -5246 -5247 -5248 -5249 -5250 -5251 -5252 -5253 -5254 -5255 -5256 -5257 -5258 -5259 -5260 -5261 -5262 -5263 -5264 -5265 -5266 -5267 -5268 -5269 -5270 -5271 -5272 -5273 -5274 -5275 -5276 -5277 -5278 -5279 -5280 -5281 -5282 -5283 -5284 -5285 -5286 -5287 -5288 -5289 -5290 -5291 -5292 -5293 -5294 -5295 -5296 -5297 -5298 -5299 -5300 -5301 -5302 -5303 -5304 -5305 -5306 -5307 -5308 -5309 -5310 -5311 -5312 -5313 -5314 -5315 -5316 -5317 -5318 -5319 -5320 -5321 -5322 -5323 -5324 -5325 -5326 -5327 -5328 -5329 -5330 -5331 -5332 -5333 -5334 -5335 -5336 -5337 -5338 -5339 -5340 -5341 -5342 -5343 -5344 -5345 -5346 -5347 -5348 -5349 -5350 -5351 -5352 -5353 -5354 -5355 -5356 -5357 -5358 -5359 -5360 -5361 -5362 -5363 -5364 -5365 -5366 -5367 -5368 -5369 -5370 -5371 -5372 -5373 -5374 -5375 -5376 -5377 -5378 -5379 -5380 -5381 -5382 -5383 -5384 -5385 -5386 -5387 -5388 -5389 -5390 -5391 -5392 -5393 -5394 -5395 -5396 -5397 -5398 -5399 -5400 -5401 -5402 -5403 -5404 -5405 -5406 -5407 -5408 -5409 -5410 -5411 -5412 -5413 -5414 -5415 -5416 -5417 -5418 -5419 -5420 -5421 -5422 -5423 -5424 -5425 -5426 -5427 -5428 -5429 -5430 -5431 -5432 -5433 -5434 -5435 -5436 -5437 -5438 -5439 -5440 -5441 -5442 -5443 -5444 -5445 -5446 -5447 -5448 -5449 -5450 -5451 -5452 -5453 -5454 -5455 -5456 -5457 -5458 -5459 -5460 -5461 -5462 -5463 -5464 -5465 -5466 -5467 -5468 -5469 -5470 -5471 -5472 -5473 -5474 -5475 -5476 -5477 -5478 -5479 -5480 -5481 -5482 -5483 -5484 -5485 -5486 -5487 -5488 -5489 -5490 -5491 -5492 -5493 -5494 -5495 -5496 -5497 -5498 -5499 -5500 -5501 -5502 -5503 -5504 -5505 -5506 -5507 -5508 -5509 -5510 -5511 -5512 -5513 -5514 -5515 -5516 -5517 -5518 -5519 -5520 -5521 -5522 -5523 -5524 -5525 -5526 -5527 -5528 -5529 -5530 -5531 -5532 -5533 -5534 -5535 -5536 -5537 -5538 -5539 -5540 -5541 -5542 -5543 -5544 -5545 -5546 -5547 -5548 -5549 -5550 -5551 -5552 -5553 -5554 -5555 -5556 -5557 -5558 -5559 -5560 -5561 -5562 -5563 -5564 -5565 -5566 -5567 -5568 -5569 -5570 -5571 -5572 -5573 -5574 -5575 -5576 -5577 -5578 -5579 -5580 -5581 -5582 -5583 -5584 -5585 -5586 -5587 -5588 -5589 -5590 -5591 -5592 -5593 -5594 -5595 -5596 -5597 -5598 -5599 -5600 -5601 -5602 -5603 -5604 -5605 -5606 -5607 -5608 -5609 -5610 -5611 -5612 -5613 -5614 -5615 -5616 -5617 -5618 -5619 -5620 -5621 -5622 -5623 -5624 -5625 -5626 -5627 -5628 -5629 -5630 -5631 -5632 -5633 -5634 -5635 -5636 -5637 -5638 -5639 -5640 -5641 -5642 -5643 -5644 -5645 -5646 -5647 -5648 -5649 -5650 -5651 -5652 -5653 -5654 -5655 -5656 -5657 -5658 -5659 -5660 -5661 -5662 -5663 -5664 -5665 -5666 -5667 -5668 -5669 -5670 -5671 -5672 -5673 -5674 -5675 -5676 -5677 -5678 -5679 -5680 -5681 -5682 -5683 -5684 -5685 -5686 -5687 -5688 -5689 -5690 -5691 -5692 -5693 -5694 -5695 -5696 -5697 -5698 -5699 -5700 -5701 -5702 -5703 -5704 -5705 -5706 -5707 -5708 -5709 -5710 -5711 -5712 -5713 -5714 -5715 -5716 -5717 -5718 -5719 -5720 -5721 -5722 -5723 -5724 -5725 -5726 -5727 -5728 -5729 -5730 -5731 -5732 -5733 -5734 -5735 -5736 -5737 -5738 -5739 -5740 -5741 -5742 -5743 -5744 -5745 -5746 -5747 -5748 -5749 -5750 -5751 -5752 -5753 -5754 -5755 -5756 -5757 -5758 -5759 -5760 -5761 -5762 -5763 -5764 -5765 -5766 -5767 -5768 -5769 -5770 -5771 -5772 -5773 -5774 -5775 -5776 -5777 -5778 -5779 -5780 -5781 -5782 -5783 -5784 -5785 -5786 -5787 -5788 -5789 -5790 -5791 -5792 -5793 -5794 -5795 -5796 -5797 -5798 -5799 -5800 -5801 -5802 -5803 -5804 -5805 -5806 -5807 -5808 -5809 -5810 -5811 -5812 -5813 -5814 -5815 -5816 -5817 -5818 -5819 -5820 -5821 -5822 -5823 -5824 -5825 -5826 -5827 -5828 -5829 -5830 -5831 -5832 -5833 -5834 -5835 -5836 -5837 -5838 -5839 -5840 -5841 -5842 -5843 -5844 -5845 -5846 -5847 -5848 -5849 -5850 -5851 -5852 -5853 -5854 -5855 -5856 -5857 -5858 -5859 -5860 -5861 -5862 -5863 -5864 -5865 -5866 -5867 -5868 -5869 -5870 -5871 -5872 -5873 -5874 -5875 -5876 -5877 -5878 -5879 -5880 -5881 -5882 -5883 -5884 -5885 -5886 -5887 -5888 -5889 -5890 -5891 -5892 -5893 -5894 -5895 -5896 -5897 -5898 -5899 -5900 -5901 -5902 -5903 -5904 -5905 -5906 -5907 -5908 -5909 -5910 -5911 -5912 -5913 -5914 -5915 -5916 -5917 -5918 -5919 -5920 -5921 -5922 -5923 -5924 -5925 -5926 -5927 -5928 -5929 -5930 -5931 -5932 -5933 -5934 -5935 -5936 -5937 -5938 -5939 -5940 -5941 -5942 -5943 -5944 -5945 -5946 -5947 -5948 -5949 -5950 -5951 -5952 -5953 -5954 -5955 -5956 -5957 -5958 -5959 -5960 -5961 -5962 -5963 -5964 -5965 -5966 -5967 -5968 -5969 -5970 -5971 -5972 -5973 -5974 -5975 -5976 -5977 -5978 -5979 -5980 -5981 -5982 -5983 -5984 -5985 -5986 -5987 -5988 -5989 -5990 -5991 -5992 -5993 -5994 -5995 -5996 -5997 -5998 -5999 -6000 -6001 -6002 -6003 -6004 -6005 -6006 -6007 -6008 -6009 -6010 -6011 -6012 -6013 -6014 -6015 -6016 -6017 -6018 -6019 -6020 -6021 -6022 -6023 -6024 -6025 -6026 -6027 -6028 -6029 -6030 -6031 -6032 -6033 -6034 -6035 -6036 -6037 -6038 -6039 -6040 -6041 -6042 -6043 -6044 -6045 -6046 -6047 -6048 -6049 -6050 -6051 -6052 -6053 -6054 -6055 -6056 -6057 -6058 -6059 -6060 -6061 -6062 -6063 -6064 -6065 -6066 -6067 -6068 -6069 -6070 -6071 -6072 -6073 -6074 -6075 -6076 -6077 -6078 -6079 -6080 -6081 -6082 -6083 -6084 -6085 -6086 -6087 -6088 -6089 -6090 -6091 -6092 -6093 -6094 -6095 -6096 -6097 -6098 -6099 -6100 -6101 -6102 -6103 -6104 -6105 -6106 -6107 -6108 -6109 -6110 -6111 -6112 -6113 -6114 -6115 -6116 -6117 -6118 -6119 -6120 -6121 -6122 -6123 -6124 -6125 -6126 -6127 -6128 -6129 -6130 -6131 -6132 -6133 -6134 -6135 -6136 -6137 -6138 -6139 -6140 -6141 -6142 -6143 -6144 -6145 -6146 -6147 -6148 -6149 -6150 -6151 -6152 -6153 -6154 -6155 -6156 -6157 -6158 -6159 -6160 -6161 -6162 -6163 -6164 -6165 -6166 -6167 -6168 -6169 -6170 -6171 -6172 -6173 -6174 -6175 -6176 -6177 -6178 -6179 -6180 -6181 -6182 -6183 -6184 -6185 -6186 -6187 -6188 -6189 -6190 -6191 -6192 -6193 -6194 -6195 -6196 -6197 -6198 -6199 -6200 -6201 -6202 -6203 -6204 -6205 -6206 -6207 -6208 -6209 -6210 -6211 -6212 -6213 -6214 -6215 -6216 -6217 -6218 -6219 -6220 -6221 -6222 -6223 -6224 -6225 -6226 -6227 -6228 -6229 -6230 -6231 -6232 -6233 -6234 -6235 -6236 -6237 -6238 -6239 -6240 -6241 -6242 -6243 -6244 -6245 -6246 -6247 -6248 -6249 -6250 -6251 -6252 -6253 -6254 -6255 -6256 -6257 -6258 -6259 -6260 -6261 -6262 -6263 -6264 -6265 -6266 -6267 -6268 -6269 -6270 -6271 -6272 -6273 -6274 -6275 -6276 -6277 -6278 -6279 -6280 -6281 -6282 -6283 -6284 -6285 -6286 -6287 -6288 -6289 -6290 -6291 -6292 -6293 -6294 -6295 -6296 -6297 -6298 -6299 -6300 -6301 -6302 -6303 -6304 -6305 -6306 -6307 -6308 -6309 -6310 -6311 -6312 -6313 -6314 -6315 -6316 -6317 -6318 -6319 -6320 -6321 -6322 -6323 -6324 -6325 -6326 -6327 -6328 -6329 -6330 -6331 -6332 -6333 -6334 -6335 -6336 -6337 -6338 -6339 -6340 -6341 -6342 -6343 -6344 -6345 -6346 -6347 -6348 -6349 -6350 -6351 -6352 -6353 -6354 -6355 -6356 -6357 -6358 -6359 -6360 -6361 -6362 -6363 -6364 -6365 -6366 -6367 -6368 -6369 -6370 -6371 -6372 -6373 -6374 -6375 -6376 -6377 -6378 -6379 -6380 -6381 -6382 -6383 -6384 -6385 -6386 -6387 -6388 -6389 -6390 -6391 -6392 -6393 -6394 -6395 -6396 -6397 -6398 -6399 -6400 -6401 -6402 -6403 -6404 -6405 -6406 -6407 -6408 -6409 -6410 -6411 -6412 -6413 -6414 -6415 -6416 -6417 -6418 -6419 -6420 -6421 -6422 -6423 -6424 -6425 -6426 -6427 -6428 -6429 -6430 -6431 -6432 -6433 -6434 -6435 -6436 -6437 -6438 -6439 -6440 -6441 -6442 -6443 -6444 -6445 -6446 -6447 -6448 -6449 -6450 -6451 -6452 -6453 -6454 -6455 -6456 -6457 -6458 -6459 -6460 -6461 -6462 -6463 -6464 -6465 -6466 -6467 -6468 -6469 -6470 -6471 -6472 -6473 -6474 -6475 -6476 -6477 -6478 -6479 -6480 -6481 -6482 -6483 -6484 -6485 -6486 -6487 -6488 -6489 -6490 -6491 -6492 -6493 -6494 -6495 -6496 -6497 -6498 -6499 -6500 -6501 -6502 -6503 -6504 -6505 -6506 -6507 -6508 -6509 -6510 -6511 -6512 -6513 -6514 -6515 -6516 -6517 -6518 -6519 -6520 -6521 -6522 -6523 -6524 -6525 -6526 -6527 -6528 -6529 -6530 -6531 -6532 -6533 -6534 -6535 -6536 -6537 -6538 -6539 -6540 -6541 -6542 -6543 -6544 -6545 -6546 -6547 -6548 -6549 -6550 -6551 -6552 -6553 -6554 -6555 -6556 -6557 -6558 -6559 -6560 -6561 -6562 -6563 -6564 -6565 -6566 -6567 -6568 -6569 -6570 -6571 -6572 -6573 -6574 -6575 -6576 -6577 -6578 -6579 -6580 -6581 -6582 -6583 -6584 -6585 -6586 -6587 -6588 -6589 -6590 -6591 -6592 -6593 -6594 -6595 -6596 -6597 -6598 -6599 -6600 -6601 -6602 -6603 -6604 -6605 -6606 -6607 -6608 -6609 -6610 -6611 -6612 -6613 -6614 -6615 -6616 -6617 -6618 -6619 -6620 -6621 -6622 -6623 -6624 -6625 -6626 -6627 -6628 -6629 -6630 -6631 -6632 -6633 -6634 -6635 -6636 -6637 -6638 -6639 -6640 -6641 -6642 -6643 -6644 -6645 -6646 -6647 -6648 -6649 -6650 -6651 -6652 -6653 -6654 -6655 -6656 -6657 -6658 -6659 -6660 -6661 -6662 -6663 -6664 -6665 -6666 -6667 -6668 -6669 -6670 -6671 -6672 -6673 -6674 -6675 -6676 -6677 -6678 -6679 -6680 -6681 -6682 -6683 -6684 -6685 -6686 -6687 -6688 -6689 -6690 -6691 -6692 -6693 -6694 -6695 -6696 -6697 -6698 -6699 -6700 -6701 -6702 -6703 -6704 -6705 -6706 -6707 -6708 -6709 -6710 -6711 -6712 -6713 -6714 -6715 -6716 -6717 -6718 -6719 -6720 -6721 -6722 -6723 -6724 -6725 -6726 -6727 -6728 -6729 -6730 -6731 -6732 -6733 -6734 -6735 -6736 -6737 -6738 -6739 -6740 -6741 -6742 -6743 -6744 -6745 -6746 -6747 -6748 -6749 -6750 -6751 -6752 -6753 -6754 -6755 -6756 -6757 -6758 -6759 -6760 -6761 -6762 -6763 -6764 -6765 -6766 -6767 -6768 -6769 -6770 -6771 -6772 -6773 -6774 -6775 -6776 -6777 -6778 -6779 -6780 -6781 -6782 -6783 -6784 -6785 -6786 -6787 -6788 -6789 -6790 -6791 -6792 -6793 -6794 -6795 -6796 -6797 -6798 -6799 -6800 -6801 -6802 -6803 -6804 -6805 -6806 -6807 -6808 -6809 -6810 -6811 -6812 -6813 -6814 -6815 -6816 -6817 -6818 -6819 -6820 -6821 -6822 -6823 -6824 -6825 -6826 -6827 -6828 -6829 -6830 -6831 -6832 -6833 -6834 -6835 -6836 -6837 -6838 -6839 -6840 -6841 -6842 -6843 -6844 -6845 -6846 -6847 -6848 -6849 -6850 -6851 -6852 -6853 -6854 -6855 -6856 -6857 -6858 -6859 -6860 -6861 -6862 -6863 -6864 -6865 -6866 -6867 -6868 -6869 -6870 -6871 -6872 -6873 -6874 -6875 -6876 -6877 -6878 -6879 -6880 -6881 -6882 -6883 -6884 -6885 -6886 -6887 -6888 -6889 -6890 -6891 -6892 -6893 -6894 -6895 -6896 -6897 -6898 -6899 -6900 -6901 -6902 -6903 -6904 -6905 -6906 -6907 -6908 -6909 -6910 -6911 -6912 -6913 -6914 -6915 -6916 -6917 -6918 -6919 -6920 -6921 -6922 -6923 -6924 -6925 -6926 -6927 -6928 -6929 -6930 -6931 -6932 -6933 -6934 -6935 -6936 -6937 -6938 -6939 -6940 -6941 -6942 -6943 -6944 -6945 -6946 -6947 -6948 -6949 -6950 -6951 -6952 -6953 -6954 -6955 -6956 -6957 -6958 -6959 -6960 -6961 -6962 -6963 -6964 -6965 -6966 -6967 -6968 -6969 -6970 -6971 -6972 -6973 -6974 -6975 -6976 -6977 -6978 -6979 -6980 -6981 -6982 -6983 -6984 -6985 -6986 -6987 -6988 -6989 -6990 -6991 -6992 -6993 -6994 -6995 -6996 -6997 -6998 -6999 -7000 -7001 -7002 -7003 -7004 -7005 -7006 -7007 -7008 -7009 -7010 -7011 -7012 -7013 -7014 -7015 -7016 -7017 -7018 -7019 -7020 -7021 -7022 -7023 -7024 -7025 -7026 -7027 -7028 -7029 -7030 -7031 -7032 -7033 -7034 -7035 -7036 -7037 -7038 -7039 -7040 -7041 -7042 -7043 -7044 -7045 -7046 -7047 -7048 -7049 -7050 -7051 -7052 -7053 -7054 -7055 -7056 -7057 -7058 -7059 -7060 -7061 -7062 -7063 -7064 -7065 -7066 -7067 -7068 -7069 -7070 -7071 -7072 -7073 -7074 -7075 -7076 -7077 -7078 -7079 -7080 -7081 -7082 -7083 -7084 -7085 -7086 -7087 -7088 -7089 -7090 -7091 -7092 -7093 -7094 -7095 -7096 -7097 -7098 -7099 -7100 -7101 -7102 -7103 -7104 -7105 -7106 -7107 -7108 -7109 -7110 -7111 -7112 -7113 -7114 -7115 -7116 -7117 -7118 -7119 -7120 -7121 -7122 -7123 -7124 -7125 -7126 -7127 -7128 -7129 -7130 -7131 -7132 -7133 -7134 -7135 -7136 -7137 -7138 -7139 -7140 -7141 -7142 -7143 -7144 -7145 -7146 -7147 -7148 -7149 -7150 -7151 -7152 -7153 -7154 -7155 -7156 -7157 -7158 -7159 -7160 -7161 -7162 -7163 -7164 -7165 -7166 -7167 -7168 -7169 -7170 -7171 -7172 -7173 -7174 -7175 -7176 -7177 -7178 -7179 -7180 -7181 -7182 -7183 -7184 -7185 -7186 -7187 -7188 -7189 -7190 -7191 -7192 -7193 -7194 -7195 -7196 -7197 -7198 -7199 -7200 -7201 -7202 -7203 -7204 -7205 -7206 -7207 -7208 -7209 -7210 -7211 -7212 -7213 -7214 -7215 -7216 -7217 -7218 -7219 -7220 -7221 -7222 -7223 -7224 -7225 -7226 -7227 -7228 -7229 -7230 -7231 -7232 -7233 -7234 -7235 -7236 -7237 -7238 -7239 -7240 -7241 -7242 -7243 -7244 -7245 -7246 -7247 -7248 -7249 -7250 -7251 -7252 -7253 -7254 -7255 -7256 -7257 -7258 -7259 -7260 -7261 -7262 -7263 -7264 -7265 -7266 -7267 -7268 -7269 -7270 -7271 -7272 -7273 -7274 -7275 -7276 -7277 -7278 -7279 -7280 -7281 -7282 -7283 -7284 -7285 -7286 -7287 -7288 -7289 -7290 -7291 -7292 -7293 -7294 -7295 -7296 -7297 -7298 -7299 -7300 -7301 -7302 -7303 -7304 -7305 -7306 -7307 -7308 -7309 -7310 -7311 -7312 -7313 -7314 -7315 -7316 -7317 -7318 -7319 -7320 -7321 -7322 -7323 -7324 -7325 -7326 -7327 -7328 -7329 -7330 -7331 -7332 -7333 -7334 -7335 -7336 -7337 -7338 -7339 -7340 -7341 -7342 -7343 -7344 -7345 -7346 -7347 -7348 -7349 -7350 -7351 -7352 -7353 -7354 -7355 -7356 -7357 -7358 -7359 -7360 -7361 -7362 -7363 -7364 -7365 -7366 -7367 -7368 -7369 -7370 -7371 -7372 -7373 -7374 -7375 -7376 -7377 -7378 -7379 -7380 -7381 -7382 -7383 -7384 -7385 -7386 -7387 -7388 -7389 -7390 -7391 -7392 -7393 -7394 -7395 -7396 -7397 -7398 -7399 -7400 -7401 -7402 -7403 -7404 -7405 -7406 -7407 -7408 -7409 -7410 -7411 -7412 -7413 -7414 -7415 -7416 -7417 -7418 -7419 -7420 -7421 -7422 -7423 -7424 -7425 -7426 -7427 -7428 -7429 -7430 -7431 -7432 -7433 -7434 -7435 -7436 -7437 -7438 -7439 -7440 -7441 -7442 -7443 -7444 -7445 -7446 -7447 -7448 -7449 -7450 -7451 -7452 -7453 -7454 -7455 -7456 -7457 -7458 -7459 -7460 -7461 -7462 -7463 -7464 -7465 -7466 -7467 -7468 -7469 -7470 -7471 -7472 -7473 -7474 -7475 -7476 -7477 -7478 -7479 -7480 -7481 -7482 -7483 -7484 -7485 -7486 -7487 -7488 -7489 -7490 -7491 -7492 -7493 -7494 -7495 -7496 -7497 -7498 -7499 -7500 -7501 -7502 -7503 -7504 -7505 -7506 -7507 -7508 -7509 -7510 -7511 -7512 -7513 -7514 -7515 -7516 -7517 -7518 -7519 -7520 -7521 -7522 -7523 -7524 -7525 -7526 -7527 -7528 -7529 -7530 -7531 -7532 -7533 -7534 -7535 -7536 -7537 -7538 -7539 -7540 -7541 -7542 -7543 -7544 -7545 -7546 -7547 -7548 -7549 -7550 -7551 -7552 -7553 -7554 -7555 -7556 -7557 -7558 -7559 -7560 -7561 -7562 -7563 -7564 -7565 -7566 -7567 -7568 -7569 -7570 -7571 -7572 -7573 -7574 -7575 -7576 -7577 -7578 -7579 -7580 -7581 -7582 -7583 -7584 -7585 -7586 -7587 -7588 -7589 -7590 -7591 -7592 -7593 -7594 -7595 -7596 -7597 -7598 -7599 -7600 -7601 -7602 -7603 -7604 -7605 -7606 -7607 -7608 -7609 -7610 -7611 -7612 -7613 -7614 -7615 -7616 -7617 -7618 -7619 -7620 -7621 -7622 -7623 -7624 -7625 -7626 -7627 -7628 -7629 -7630 -7631 -7632 -7633 -7634 -7635 -7636 -7637 -7638 -7639 -7640 -7641 -7642 -7643 -7644 -7645 -7646 -7647 -7648 -7649 -7650 -7651 -7652 -7653 -7654 -7655 -7656 -7657 -7658 -7659 -7660 -7661 -7662 -7663 -7664 -7665 -7666 -7667 -7668 -7669 -7670 -7671 -7672 -7673 -7674 -7675 -7676 -7677 -7678 -7679 -7680 -7681 -7682 -7683 -7684 -7685 -7686 -7687 -7688 -7689 -7690 -7691 -7692 -7693 -7694 -7695 -7696 -7697 -7698 -7699 -7700 -7701 -7702 -7703 -7704 -7705 -7706 -7707 -7708 -7709 -7710 -7711 -7712 -7713 -7714 -7715 -7716 -7717 -7718 -7719 -7720 -7721 -7722 -7723 -7724 -7725 -7726 -7727 -7728 -7729 -7730 -7731 -7732 -7733 -7734 -7735 -7736 -7737 -7738 -7739 -7740 -7741 -7742 -7743 -7744 -7745 -7746 -7747 -7748 -7749 -7750 -7751 -7752 -7753 -7754 -7755 -7756 -7757 -7758 -7759 -7760 -7761 -7762 -7763 -7764 -7765 -7766 -7767 -7768 -7769 -7770 -7771 -7772 -7773 -7774 -7775 -7776 -7777 -7778 -7779 -7780 -7781 -7782 -7783 -7784 -7785 -7786 -7787 -7788 -7789 -7790 -7791 -7792 -7793 -7794 -7795 -7796 -7797 -7798 -7799 -7800 -7801 -7802 -7803 -7804 -7805 -7806 -7807 -7808 -7809 -7810 -7811 -7812 -7813 -7814 -7815 -7816 -7817 -7818 -7819 -7820 -7821 -7822 -7823 -7824 -7825 -7826 -7827 -7828 -7829 -7830 -7831 -7832 -7833 -7834 -7835 -7836 -7837 -7838 -7839 -7840 -7841 -7842 -7843 -7844 -7845 -7846 -7847 -7848 -7849 -7850 -7851 -7852 -7853 -7854 -7855 -7856 -7857 -7858 -7859 -7860 -7861 -7862 -7863 -7864 -7865 -7866 -7867 -7868 -7869 -7870 -7871 -7872 -7873 -7874 -7875 -7876 -7877 -7878 -7879 -7880 -7881 -7882 -7883 -7884 -7885 -7886 -7887 -7888 -7889 -7890 -7891 -7892 -7893 -7894 -7895 -7896 -7897 -7898 -7899 -7900 -7901 -7902 -7903 -7904 -7905 -7906 -7907 -7908 -7909 -7910 -7911 -7912 -7913 -7914 -7915 -7916 -7917 -7918 -7919 -7920 -7921 -7922 -7923 -7924 -7925 -7926 -7927 -7928 -7929 -7930 -7931 -7932 -7933 -7934 -7935 -7936 -7937 -7938 -7939 -7940 -7941 -7942 -7943 -7944 -7945 -7946 -7947 -7948 -7949 -7950 -7951 -7952 -7953 -7954 -7955 -7956 -7957 -7958 -7959 -7960 -7961 -7962 -7963 -7964 -7965 -7966 -7967 -7968 -7969 -7970 -7971 -7972 -7973 -7974 -7975 -7976 -7977 -7978 -7979 -7980 -7981 -7982 -7983 -7984 -7985 -7986 -7987 -7988 -7989 -7990 -7991 -7992 -7993 -7994 -7995 -7996 -7997 -7998 -7999 -8000 -8001 -8002 -8003 -8004 -8005 -8006 -8007 -8008 -8009 -8010 -8011 -8012 -8013 -8014 -8015 -8016 -8017 -8018 -8019 -8020 -8021 -8022 -8023 -8024 -8025 -8026 -8027 -8028 -8029 -8030 -8031 -8032 -8033 -8034 -8035 -8036 -8037 -8038 -8039 -8040 -8041 -8042 -8043 -8044 -8045 -8046 -8047 -8048 -8049 -8050 -8051 -8052 -8053 -8054 -8055 -8056 -8057 -8058 -8059 -8060 -8061 -8062 -8063 -8064 -8065 -8066 -8067 -8068 -8069 -8070 -8071 -8072 -8073 -8074 -8075 -8076 -8077 -8078 -8079 -8080 -8081 -8082 -8083 -8084 -8085 -8086 -8087 -8088 -8089 -8090 -8091 -8092 -8093 -8094 -8095 -8096 -8097 -8098 -8099 -8100 -8101 -8102 -8103 -8104 -8105 -8106 -8107 -8108 -8109 -8110 -8111 -8112 -8113 -8114 -8115 -8116 -8117 -8118 -8119 -8120 -8121 -8122 -8123 -8124 -8125 -8126 -8127 -8128 -8129 -8130 -8131 -8132 -8133 -8134 -8135 -8136 -8137 -8138 -8139 -8140 -8141 -8142 -8143 -8144 -8145 -8146 -8147 -8148 -8149 -8150 -8151 -8152 -8153 -8154 -8155 -8156 -8157 -8158 -8159 -8160 -8161 -8162 -8163 -8164 -8165 -8166 -8167 -8168 -8169 -8170 -8171 -8172 -8173 -8174 -8175 -8176 -8177 -8178 -8179 -8180 -8181 -8182 -8183 -8184 -8185 -8186 -8187 -8188 -8189 -8190 -8191 -8192 -8193 -8194 -8195 -8196 -8197 -8198 -8199 -8200 -8201 -8202 -8203 -8204 -8205 -8206 -8207 -8208 -8209 -8210 -8211 -8212 -8213 -8214 -8215 -8216 -8217 -8218 -8219 -8220 -8221 -8222 -8223 -8224 -8225 -8226 -8227 -8228 -8229 -8230 -8231 -8232 -8233 -8234 -8235 -8236 -8237 -8238 -8239 -8240 -8241 -8242 -8243 -8244 -8245 -8246 -8247 -8248 -8249 -8250 -8251 -8252 -8253 -8254 -8255 -8256 -8257 -8258 -8259 -8260 -8261 -8262 -8263 -8264 -8265 -8266 -8267 -8268 -8269 -8270 -8271 -8272 -8273 -8274 -8275 -8276 -8277 -8278 -8279 -8280 -8281 -8282 -8283 -8284 -8285 -8286 -8287 -8288 -8289 -8290 -8291 -8292 -8293 -8294 -8295 -8296 -8297 -8298 -8299 -8300 -8301 -8302 -8303 -8304 -8305 -8306 -8307 -8308 -8309 -8310 -8311 -8312 -8313 -8314 -8315 -8316 -8317 -8318 -8319 -8320 -8321 -8322 -8323 -8324 -8325 -8326 -8327 -8328 -8329 -8330 -8331 -8332 -8333 -8334 -8335 -8336 -8337 -8338 -8339 -8340 -8341 -8342 -8343 -8344 -8345 -8346 -8347 -8348 -8349 -8350 -8351 -8352 -8353 -8354 -8355 -8356 -8357 -8358 -8359 -8360 -8361 -8362 -8363 -8364 -8365 -8366 -8367 -8368 -8369 -8370 -8371 -8372 -8373 -8374 -8375 -8376 -8377 -8378 -8379 -8380 -8381 -8382 -8383 -8384 -8385 -8386 -8387 -8388 -8389 -8390 -8391 -8392 -8393 -8394 -8395 -8396 -8397 -8398 -8399 -8400 -8401 -8402 -8403 -8404 -8405 -8406 -8407 -8408 -8409 -8410 -8411 -8412 -8413 -8414 -8415 -8416 -8417 -8418 -8419 -8420 -8421 -8422 -8423 -8424 -8425 -8426 -8427 -8428 -8429 -8430 -8431 -8432 -8433 -8434 -8435 -8436 -8437 -8438 -8439 -8440 -8441 -8442 -8443 -8444 -8445 -8446 -8447 -8448 -8449 -8450 -8451 -8452 -8453 -8454 -8455 -8456 -8457 -8458 -8459 -8460 -8461 -8462 -8463 -8464 -8465 -8466 -8467 -8468 -8469 -8470 -8471 -8472 -8473 -8474 -8475 -8476 -8477 -8478 -8479 -8480 -8481 -8482 -8483 -8484 -8485 -8486 -8487 -8488 -8489 -8490 -8491 -8492 -8493 -8494 -8495 -8496 -8497 -8498 -8499 -8500 -8501 -8502 -8503 -8504 -8505 -8506 -8507 -8508 -8509 -8510 -8511 -8512 -8513 -8514 -8515 -8516 -8517 -8518 -8519 -8520 -8521 -8522 -8523 -8524 -8525 -8526 -8527 -8528 -8529 -8530 -8531 -8532 -8533 -8534 -8535 -8536 -8537 -8538 -8539 -8540 -8541 -8542 -8543 -8544 -8545 -8546 -8547 -8548 -8549 -8550 -8551 -8552 -8553 -8554 -8555 -8556 -8557 -8558 -8559 -8560 -8561 -8562 -8563 -8564 -8565 -8566 -8567 -8568 -8569 -8570 -8571 -8572 -8573 -8574 -8575 -8576 -8577 -8578 -8579 -8580 -8581 -8582 -8583 -8584 -8585 -8586 -8587 -8588 -8589 -8590 -8591 -8592 -8593 -8594 -8595 -8596 -8597 -8598 -8599 -8600 -8601 -8602 -8603 -8604 -8605 -8606 -8607 -8608 -8609 -8610 -8611 -8612 -8613 -8614 -8615 -8616 -8617 -8618 -8619 -8620 -8621 -8622 -8623 -8624 -8625 -8626 -8627 -8628 -8629 -8630 -8631 -8632 -8633 -8634 -8635 -8636 -8637 -8638 -8639 -8640 -8641 -8642 -8643 -8644 -8645 -8646 -8647 -8648 -8649 -8650 -8651 -8652 -8653 -8654 -8655 -8656 -8657 -8658 -8659 -8660 -8661 -8662 -8663 -8664 -8665 -8666 -8667 -8668 -8669 -8670 -8671 -8672 -8673 -8674 -8675 -8676 -8677 -8678 -8679 -8680 -8681 -8682 -8683 -8684 -8685 -8686 -8687 -8688 -8689 -8690 -8691 -8692 -8693 -8694 -8695 -8696 -8697 -8698 -8699 -8700 -8701 -8702 -8703 -8704 -8705 -8706 -8707 -8708 -8709 -8710 -8711 -8712 -8713 -8714 -8715 -8716 -8717 -8718 -8719 -8720 -8721 -8722 -8723 -8724 -8725 -8726 -8727 -8728 -8729 -8730 -8731 -8732 -8733 -8734 -8735 -8736 -8737 -8738 -8739 -8740 -8741 -8742 -8743 -8744 -8745 -8746 -8747 -8748 -8749 -8750 -8751 -8752 -8753 -8754 -8755 -8756 -8757 -8758 -8759 -8760 -8761 -8762 -8763 -8764 -8765 -8766 -8767 -8768 -8769 -8770 -8771 -8772 -8773 -8774 -8775 -8776 -8777 -8778 -8779 -8780 -8781 -8782 -8783 -8784 -8785 -8786 -8787 -8788 -8789 -8790 -8791 -8792 -8793 -8794 -8795 -8796 -8797 -8798 -8799 -8800 -8801 -8802 -8803 -8804 -8805 -8806 -8807 -8808 -8809 -8810 -8811 -8812 -8813 -8814 -8815 -8816 -8817 -8818 -8819 -8820 -8821 -8822 -8823 -8824 -8825 -8826 -8827 -8828 -8829 -8830 -8831 -8832 -8833 -8834 -8835 -8836 -8837 -8838 -8839 -8840 -8841 -8842 -8843 -8844 -8845 -8846 -8847 -8848 -8849 -8850 -8851 -8852 -8853 -8854 -8855 -8856 -8857 -8858 -8859 -8860 -8861 -8862 -8863 -8864 -8865 -8866 -8867 -8868 -8869 -8870 -8871 -8872 -8873 -8874 -8875 -8876 -8877 -8878 -8879 -8880 -8881 -8882 -8883 -8884 -8885 -8886 -8887 -8888 -8889 -8890 -8891 -8892 -8893 -8894 -8895 -8896 -8897 -8898 -8899 -8900 -8901 -8902 -8903 -8904 -8905 -8906 -8907 -8908 -8909 -8910 -8911 -8912 -8913 -8914 -8915 -8916 -8917 -8918 -8919 -8920 -8921 -8922 -8923 -8924 -8925 -8926 -8927 -8928 -8929 -8930 -8931 -8932 -8933 -8934 -8935 -8936 -8937 -8938 -8939 -8940 -8941 -8942 -8943 -8944 -8945 -8946 -8947 -8948 -8949 -8950 -8951 -8952 -8953 -8954 -8955 -8956 -8957 -8958 -8959 -8960 -8961 -8962 -8963 -8964 -8965 -8966 -8967 -8968 -8969 -8970 -8971 -8972 -8973 -8974 -8975 -8976 -8977 -8978 -8979 -8980 -8981 -8982 -8983 -8984 -8985 -8986 -8987 -8988 -8989 -8990 -8991 -8992 -8993 -8994 -8995 -8996 -8997 -8998 -8999 -9000 -9001 -9002 -9003 -9004 -9005 -9006 -9007 -9008 -9009 -9010 -9011 -9012 -9013 -9014 -9015 -9016 -9017 -9018 -9019 -9020 -9021 -9022 -9023 -9024 -9025 -9026 -9027 -9028 -9029 -9030 -9031 -9032 -9033 -9034 -9035 -9036 -9037 -9038 -9039 -9040 -9041 -9042 -9043 -9044 -9045 -9046 -9047 -9048 -9049 -9050 -9051 -9052 -9053 -9054 -9055 -9056 -9057 -9058 -9059 -9060 -9061 -9062 -9063 -9064 -9065 -9066 -9067 -9068 -9069 -9070 -9071 -9072 -9073 -9074 -9075 -9076 -9077 -9078 -9079 -9080 -9081 -9082 -9083 -9084 -9085 -9086 -9087 -9088 -9089 -9090 -9091 -9092 -9093 -9094 -9095 -9096 -9097 -9098 -9099 -9100 -9101 -9102 -9103 -9104 -9105 -9106 -9107 -9108 -9109 -9110 -9111 -9112 -9113 -9114 -9115 -9116 -9117 -9118 -9119 -9120 -9121 -9122 -9123 -9124 -9125 -9126 -9127 -9128 -9129 -9130 -9131 -9132 -9133 -9134 -9135 -9136 -9137 -9138 -9139 -9140 -9141 -9142 -9143 -9144 -9145 -9146 -9147 -9148 -9149 -9150 -9151 -9152 -9153 -9154 -9155 -9156 -9157 -9158 -9159 -9160 -9161 -9162 -9163 -9164 -9165 -9166 -9167 -9168 -9169 -9170 -9171 -9172 -9173 -9174 -9175 -9176 -9177 -9178 -9179 -9180 -9181 -9182 -9183 -9184 -9185 -9186 -9187 -9188 -9189 -9190 -9191 -9192 -9193 -9194 -9195 -9196 -9197 -9198 -9199 -9200 -9201 -9202 -9203 -9204 -9205 -9206 -9207 -9208 -9209 -9210 -9211 -9212 -9213 -9214 -9215 -9216 -9217 -9218 -9219 -9220 -9221 -9222 -9223 -9224 -9225 -9226 -9227 -9228 -9229 -9230 -9231 -9232 -9233 -9234 -9235 -9236 -9237 -9238 -9239 -9240 -9241 -9242 -9243 -9244 -9245 -9246 -9247 -9248 -9249 -9250 -9251 -9252 -9253 -9254 -9255 -9256 -9257 -9258 -9259 -9260 -9261 -9262 -9263 -9264 -9265 -9266 -9267 -9268 -9269 -9270 -9271 -9272 -9273 -9274 -9275 -9276 -9277 -9278 -9279 -9280 -9281 -9282 -9283 -9284 -9285 -9286 -9287 -9288 -9289 -9290 -9291 -9292 -9293 -9294 -9295 -9296 -9297 -9298 -9299 -9300 -9301 -9302 -9303 -9304 -9305 -9306 -9307 -9308 -9309 -9310 -9311 -9312 -9313 -9314 -9315 -9316 -9317 -9318 -9319 -9320 -9321 -9322 -9323 -9324 -9325 -9326 -9327 -9328 -9329 -9330 -9331 -9332 -9333 -9334 -9335 -9336 -9337 -9338 -9339 -9340 -9341 -9342 -9343 -9344 -9345 -9346 -9347 -9348 -9349 -9350 -9351 -9352 -9353 -9354 -9355 -9356 -9357 -9358 -9359 -9360 -9361 -9362 -9363 -9364 -9365 -9366 -9367 -9368 -9369 -9370 -9371 -9372 -9373 -9374 -9375 -9376 -9377 -9378 -9379 -9380 -9381 -9382 -9383 -9384 -9385 -9386 -9387 -9388 -9389 -9390 -9391 -9392 -9393 -9394 -9395 -9396 -9397 -9398 -9399 -9400 -9401 -9402 -9403 -9404 -9405 -9406 -9407 -9408 -9409 -9410 -9411 -9412 -9413 -9414 -9415 -9416 -9417 -9418 -9419 -9420 -9421 -9422 -9423 -9424 -9425 -9426 -9427 -9428 -9429 -9430 -9431 -9432 -9433 -9434 -9435 -9436 -9437 -9438 -9439 -9440 -9441 -9442 -9443 -9444 -9445 -9446 -9447 -9448 -9449 -9450 -9451 -9452 -9453 -9454 -9455 -9456 -9457 -9458 -9459 -9460 -9461 -9462 -9463 -9464 -9465 -9466 -9467 -9468 -9469 -9470 -9471 -9472 -9473 -9474 -9475 -9476 -9477 -9478 -9479 -9480 -9481 -9482 -9483 -9484 -9485 -9486 -9487 -9488 -9489 -9490 -9491 -9492 -9493 -9494 -9495 -9496 -9497 -9498 -9499 -9500 -9501 -9502 -9503 -9504 -9505 -9506 -9507 -9508 -9509 -9510 -9511 -9512 -9513 -9514 -9515 -9516 -9517 -9518 -9519 -9520 -9521 -9522 -9523 -9524 -9525 -9526 -9527 -9528 -9529 -9530 -9531 -9532 -9533 -9534 -9535 -9536 -9537 -9538 -9539 -9540 -9541 -9542 -9543 -9544 -9545 -9546 -9547 -9548 -9549 -9550 -9551 -9552 -9553 -9554 -9555 -9556 -9557 -9558 -9559 -9560 -9561 -9562 -9563 -9564 -9565 -9566 -9567 -9568 -9569 -9570 -9571 -9572 -9573 -9574 -9575 -9576 -9577 -9578 -9579 -9580 -9581 -9582 -9583 -9584 -9585 -9586 -9587 -9588 -9589 -9590 -9591 -9592 -9593 -9594 -9595 -9596 -9597 -9598 -9599 -9600 -9601 -9602 -9603 -9604 -9605 -9606 -9607 -9608 -9609 -9610 -9611 -9612 -9613 -9614 -9615 -9616 -9617 -9618 -9619 -9620 -9621 -9622 -9623 -9624 -9625 -9626 -9627 -9628 -9629 -9630 -9631 -9632 -9633 -9634 -9635 -9636 -9637 -9638 -9639 -9640 -9641 -9642 -9643 -9644 -9645 -9646 -9647 -9648 -9649 -9650 -9651 -9652 -9653 -9654 -9655 -9656 -9657 -9658 -9659 -9660 -9661 -9662 -9663 -9664 -9665 -9666 -9667 -9668 -9669 -9670 -9671 -9672 -9673 -9674 -9675 -9676 -9677 -9678 -9679 -9680 -9681 -9682 -9683 -9684 -9685 -9686 -9687 -9688 -9689 -9690 -9691 -9692 -9693 -9694 -9695 -9696 -9697 -9698 -9699 -9700 -9701 -9702 -9703 -9704 -9705 -9706 -9707 -9708 -9709 -9710 -9711 -9712 -9713 -9714 -9715 -9716 -9717 -9718 -9719 -9720 -9721 -9722 -9723 -9724 -9725 -9726 -9727 -9728 -9729 -9730 -9731 -9732 -9733 -9734 -9735 -9736 -9737 -9738 -9739 -9740 -9741 -9742 -9743 -9744 -9745 -9746 -9747 -9748 -9749 -9750 -9751 -9752 -9753 -9754 -9755 -9756 -9757 -9758 -9759 -9760 -9761 -9762 -9763 -9764 -9765 -9766 -9767 -9768 -9769 -9770 -9771 -9772 -9773 -9774 -9775 -9776 -9777 -9778 -9779 -9780 -9781 -9782 -9783 -9784 -9785 -9786 -9787 -9788 -9789 -9790 -9791 -9792 -9793 -9794 -9795 -9796 -9797 -9798 -9799 -9800 -9801 -9802 -9803 -9804 -9805 -9806 -9807 -9808 -9809 -9810 -9811 -9812 -9813 -9814 -9815 -9816 -9817 -9818 -9819 -9820 -9821 -9822 -9823 -9824 -9825 -9826 -9827 -9828 -9829 -9830 -9831 -9832 -9833 -9834 -9835 -9836 -9837 -9838 -9839 -9840 -9841 -9842 -9843 -9844 -9845 -9846 -9847 -9848 -9849 -9850 -9851 -9852 -9853 -9854 -9855 -9856 -9857 -9858 -9859 -9860 -9861 -9862 -9863 -9864 -9865 -9866 -9867 -9868 -9869 -9870 -9871 -9872 -9873 -9874 -9875 -9876 -9877 -9878 -9879 -9880 -9881 -9882 -9883 -9884 -9885 -9886 -9887 -9888 -9889 -9890 -9891 -9892 -9893 -9894 -9895 -9896 -9897 -9898 -9899 -9900 -9901 -9902 -9903 -9904 -9905 -9906 -9907 -9908 -9909 -9910 -9911 -9912 -9913 -9914 -9915 -9916 -9917 -9918 -9919 -9920 -9921 -9922 -9923 -9924 -9925 -9926 -9927 -9928 -9929 -9930 -9931 -9932 -9933 -9934 -9935 -9936 -9937 -9938 -9939 -9940 -9941 -9942 -9943 -9944 -9945 -9946 -9947 -9948 -9949 -9950 -9951 -9952 -9953 -9954 -9955 -9956 -9957 -9958 -9959 -9960 -9961 -9962 -9963 -9964 -9965 -9966 -9967 -9968 -9969 -9970 -9971 -9972 -9973 -9974 -9975 -9976 -9977 -9978 -9979 -9980 -9981 -9982 -9983 -9984 -9985 -9986 -9987 -9988 -9989 -9990 -9991 -9992 -9993 -9994 -9995 -9996 -9997 -9998 -9999 -10000 -10001 -10002 -10003 -10004 -10005 -10006 -10007 -10008 -10009 -10010 -10011 -10012 -10013 -10014 -10015 -10016 -10017 -10018 -10019 -10020 -10021 -10022 -10023 -10024 -10025 -10026 -10027 -10028 -10029 -10030 -10031 -10032 -10033 -10034 -10035 -10036 -10037 -10038 -10039 -10040 -10041 -10042 -10043 -10044 -10045 -10046 -10047 -10048 -10049 -10050 -10051 -10052 -10053 -10054 -10055 -10056 -10057 -10058 -10059 -10060 -10061 -10062 -10063 -10064 -10065 -10066 -10067 -10068 -10069 -10070 -10071 -10072 -10073 -10074 -10075 -10076 -10077 -10078 -10079 -10080 -10081 -10082 -10083 -10084 -10085 -10086 -10087 -10088 -10089 -10090 -10091 -10092 -10093 -10094 -10095 -10096 -10097 -10098 -10099 -10100 -10101 -10102 -10103 -10104 -10105 -10106 -10107 -10108 -10109 -10110 -10111 -10112 -10113 -10114 -10115 -10116 -10117 -10118 -10119 -10120 -10121 -10122 -10123 -10124 -10125 -10126 -10127 -10128 -10129 -10130 -10131 -10132 -10133 -10134 -10135 -10136 -10137 -10138 -10139 -10140 -10141 -10142 -10143 -10144 -10145 -10146 -10147 -10148 -10149 -10150 -10151 -10152 -10153 -10154 -10155 -10156 -10157 -10158 -10159 -10160 -10161 -10162 -10163 -10164 -10165 -10166 -10167 -10168 -10169 -10170 -10171 -10172 -10173 -10174 -10175 -10176 -10177 -10178 -10179 -10180 -10181 -10182 -10183 -10184 -10185 -10186 -10187 -10188 -10189 -10190 -10191 -10192 -10193 -10194 -10195 -10196 -10197 -10198 -10199 -10200 -10201 -10202 -10203 -10204 -10205 -10206 -10207 -10208 -10209 -10210 -10211 -10212 -10213 -10214 -10215 -10216 -10217 -10218 -10219 -10220 -10221 -10222 -10223 -10224 -10225 -10226 -10227 -10228 -10229 -10230 -10231 -10232 -10233 -10234 -10235 -10236 -10237 -10238 -10239 -10240 -10241 -10242 -10243 -10244 -10245 -10246 -10247 -10248 -10249 -10250 -10251 -10252 -10253 -10254 -10255 -10256 -10257 -10258 -10259 -10260 -10261 -10262 -10263 -10264 -10265 -10266 -10267 -10268 -10269 -10270 -10271 -10272 -10273 -10274 -10275 -10276 -10277 -10278 -10279 -10280 -10281 -10282 -10283 -10284 -10285 -10286 -10287 -10288 -10289 -10290 -10291 -10292 -10293 -10294 -10295 -10296 -10297 -10298 -10299 -10300 -10301 -10302 -10303 -10304 -10305 -10306 -10307 -10308 -10309 -10310 -10311 -10312 -10313 -10314 -10315 -10316 -10317 -10318 -10319 -10320 -10321 -10322 -10323 -10324 -10325 -10326 -10327 -10328 -10329 -10330 -10331 -10332 -10333 -10334 -10335 -10336 -10337 -10338 -10339 -10340 -10341 -10342 -10343 -10344 -10345 -10346 -10347 -10348 -10349 -10350 -10351 -10352 -10353 -10354 -10355 -10356 -10357 -10358 -10359 -10360 -10361 -10362 -10363 -10364 -10365 -10366 -10367 -10368 -10369 -10370 -10371 -10372 -10373 -10374 -10375 -10376 -10377 -10378 -10379 -10380 -10381 -10382 -10383 -10384 -10385 -10386 -10387 -10388 -10389 -10390 -10391 -10392 -10393 -10394 -10395 -10396 -10397 -10398 -10399 -10400 -10401 -10402 -10403 -10404 -10405 -10406 -10407 -10408 -10409 -10410 -10411 -10412 -10413 -10414 -10415 -10416 -10417 -10418 -10419 -10420 -10421 -10422 -10423 -10424 -10425 -10426 -10427 -10428 -10429 -10430 -10431 -10432 -10433 -10434 -10435 -10436 -10437 -10438 -10439 -10440 -10441 -10442 -10443 -10444 -10445 -10446 -10447 -10448 -10449 -10450 -10451 -10452 -10453 -10454 -10455 -10456 -10457 -10458 -10459 -10460 -10461 -10462 -10463 -10464 -10465 -10466 -10467 -10468 -10469 -10470 -10471 -10472 -10473 -10474 -10475 -10476 -10477 -10478 -10479 -10480 -10481 -10482 -10483 -10484 -10485 -10486 -10487 -10488 -10489 -10490 -10491 -10492 -10493 -10494 -10495 -10496 -10497 -10498 -10499 -10500 -10501 -10502 -10503 -10504 -10505 -10506 -10507 -10508 -10509 -10510 -10511 -10512 -10513 -10514 -10515 -10516 -10517 -10518 -10519 -10520 -10521 -10522 -10523 -10524 -10525 -10526 -10527 -10528 -10529 -10530 -10531 -10532 -10533 -10534 -10535 -10536 -10537 -10538 -10539 -10540 -10541 -10542 -10543 -10544 -10545 -10546 -10547 -10548 -10549 -10550 -10551 -10552 -10553 -10554 -10555 -10556 -10557 -10558 -10559 -10560 -10561 -10562 -10563 -10564 -10565 -10566 -10567 -10568 -10569 -10570 -10571 -10572 -10573 -10574 -10575 -10576 -10577 -10578 -10579 -10580 -10581 -10582 -10583 -10584 -10585 -10586 -10587 -10588 -10589 -10590 -10591 -10592 -10593 -10594 -10595 -10596 -10597 -10598 -10599 -10600 -10601 -10602 -10603 -10604 -10605 -10606 -10607 -10608 -10609 -10610 -10611 -10612 -10613 -10614 -10615 -10616 -10617 -10618 -10619 -10620 -10621 -10622 -10623 -10624 -10625 -10626 -10627 -10628 -10629 -10630 -10631 -10632 -10633 -10634 -10635 -10636 -10637 -10638 -10639 -10640 -10641 -10642 -10643 -10644 -10645 -10646 -10647 -10648 -10649 -10650 -10651 -10652 -10653 -10654 -10655 -10656 -10657 -10658 -10659 -10660 -10661 -10662 -10663 -10664 -10665 -10666 -10667 -10668 -10669 -10670 -10671 -10672 -10673 -10674 -10675 -10676 -10677 -10678 -10679 -10680 -10681 -10682 -10683 -10684 -10685 -10686 -10687 -10688 -10689 -10690 -10691 -10692 -10693 -10694 -10695 -10696 -10697 -10698 -10699 -10700 -10701 -10702 -10703 -10704 -10705 -10706 -10707 -10708 -10709 -10710 -10711 -10712 -10713 -10714 -10715 -10716 -10717 -10718 -10719 -10720 -10721 -10722 -10723 -10724 -10725 -10726 -10727 -10728 -10729 -10730 -10731 -10732 -10733 -10734 -10735 -10736 -10737 -10738 -10739 -10740 -10741 -10742 -10743 -10744 -10745 -10746 -10747 -10748 -10749 -10750 -10751 -10752 -10753 -10754 -10755 -10756 -10757 -10758 -10759 -10760 -10761 -10762 -10763 -10764 -10765 -10766 -10767 -10768 -10769 -10770 -10771 -10772 -10773 -10774 -10775 -10776 -10777 -10778 -10779 -10780 -10781 -10782 -10783 -10784 -10785 -10786 -10787 -10788 -10789 -10790 -10791 -10792 -10793 -10794 -10795 -10796 -10797 -10798 -10799 -10800 -10801 -10802 -10803 -10804 -10805 -10806 -10807 -10808 -10809 -10810 -10811 -10812 -10813 -10814 -10815 -10816 -10817 -10818 -10819 -10820 -10821 -10822 -10823 -10824 -10825 -10826 -10827 -10828 -10829 -10830 -10831 -10832 -10833 -10834 -10835 -10836 -10837 -10838 -10839 -10840 -10841 -10842 -10843 -10844 -10845 -10846 -10847 -10848 -10849 -10850 -10851 -10852 -10853 -10854 -10855 -10856 -10857 -10858 -10859 -10860 -10861 -10862 -10863 -10864 -10865 -10866 -10867 -10868 -10869 -10870 -10871 -10872 -10873 -10874 -10875 -10876 -10877 -10878 -10879 -10880 -10881 -10882 -10883 -10884 -10885 -10886 -10887 -10888 -10889 -10890 -10891 -10892 -10893 -10894 -10895 -10896 -10897 -10898 -10899 -10900 -10901 -10902 -10903 -10904 -10905 -10906 -10907 -10908 -10909 -10910 -10911 -10912 -10913 -10914 -10915 -10916 -10917 -10918 -10919 -10920 -10921 -10922 -10923 -10924 -10925 -10926 -10927 -10928 -10929 -10930 -10931 -10932 -10933 -10934 -10935 -10936 -10937 -10938 -10939 -10940 -10941 -10942 -10943 -10944 -10945 -10946 -10947 -10948 -10949 -10950 -10951 -10952 -10953 -10954 -10955 -10956 -10957 -10958 -10959 -10960 -10961 -10962 -10963 -10964 -10965 -10966 -10967 -10968 -10969 -10970 -10971 -10972 -10973 -10974 -10975 -10976 -10977 -10978 -10979 -10980 -10981 -10982 -10983 -10984 -10985 -10986 -10987 -10988 -10989 -10990 -10991 -10992 -10993 -10994 -10995 -10996 -10997 -10998 -10999 -11000 -11001 -11002 -11003 -11004 -11005 -11006 -11007 -11008 -11009 -11010 -11011 -11012 -11013 -11014 -11015 -11016 -11017 -11018 -11019 -11020 -11021 -11022 -11023 -11024 -11025 -11026 -11027 -11028 -11029 -11030 -11031 -11032 -11033 -11034 -11035 -11036 -11037 -11038 -11039 -11040 -11041 -11042 -11043 -11044 -11045 -11046 -11047 -11048 -11049 -11050 -11051 -11052 -11053 -11054 -11055 -11056 -11057 -11058 -11059 -11060 -11061 -11062 -11063 -11064 -11065 -11066 -11067 -11068 -11069 -11070 -11071 -11072 -11073 -11074 -11075 -11076 -11077 -11078 -11079 -11080 -11081 -11082 -11083 -11084 -11085 -11086 -11087 -11088 -11089 -11090 -11091 -11092 -11093 -11094 -11095 -11096 -11097 -11098 -11099 -11100 -11101 -11102 -11103 -11104 -11105 -11106 -11107 -11108 -11109 -11110 -11111 -11112 -11113 -11114 -11115 -11116 -11117 -11118 -11119 -11120 -11121 -11122 -11123 -11124 -11125 -11126 -11127 -11128 -11129 -11130 -11131 -11132 -11133 -11134 -11135 -11136 -11137 -11138 -11139 -11140 -11141 -11142 -11143 -11144 -11145 -11146 -11147 -11148 -11149 -11150 -11151 -11152 -11153 -11154 -11155 -11156 -11157 -11158 -11159 -11160 -11161 -11162 -11163 -11164 -11165 -11166 -11167 -11168 -11169 -11170 -11171 -11172 -11173 -11174 -11175 -11176 -11177 -11178 -11179 -11180 -11181 -11182 -11183 -11184 -11185 -11186 -11187 -11188 -11189 -11190 -11191 -11192 -11193 -11194 -11195 -11196 -11197 -11198 -11199 -11200 -11201 -11202 -11203 -11204 -11205 -11206 -11207 -11208 -11209 -11210 -11211 -11212 -11213 -11214 -11215 -11216 -11217 -11218 -11219 -11220 -11221 -11222 -11223 -11224 -11225 -11226 -11227 -11228 -11229 -11230 -11231 -11232 -11233 -11234 -11235 -11236 -11237 -11238 -11239 -11240 -11241 -11242 -11243 -11244 -11245 -11246 -11247 -11248 -11249 -11250 -11251 -11252 -11253 -11254 -11255 -11256 -11257 -11258 -11259 -11260 -11261 -11262 -11263 -11264 -11265 -11266 -11267 -11268 -11269 -11270 -11271 -11272 -11273 -11274 -11275 -11276 -11277 -11278 -11279 -11280 -11281 -11282 -11283 -11284 -11285 -11286 -11287 -11288 -11289 -11290 -11291 -11292 -11293 -11294 -11295 -11296 -11297 -11298 -11299 -11300 -11301 -11302 -11303 -11304 -11305 -11306 -11307 -11308 -11309 -11310 -11311 -11312 -11313 -11314 -11315 -11316 -11317 -11318 -11319 -11320 -11321 -11322 -11323 -11324 -11325 -11326 -11327 -11328 -11329 -11330 -11331 -11332 -11333 -11334 -11335 -11336 -11337 -11338 -11339 -11340 -11341 -11342 -11343 -11344 -11345 -11346 -11347 -11348 -11349 -11350 -11351 -11352 -11353 -11354 -11355 -11356 -11357 -11358 -11359 -11360 -11361 -11362 -11363 -11364 -11365 -11366 -11367 -11368 -11369 -11370 -11371 -11372 -11373 -11374 -11375 -11376 -11377 -11378 -11379 -11380 -11381 -11382 -11383 -11384 -11385 -11386 -11387 -11388 -11389 -11390 -11391 -11392 -11393 -11394 -11395 -11396 -11397 -11398 -11399 -11400 -11401 -11402 -11403 -11404 -11405 -11406 -11407 -11408 -11409 -11410 -11411 -11412 -11413 -11414 -11415 -11416 -11417 -11418 -11419 -11420 -11421 -11422 -11423 -11424 -11425 -11426 -11427 -11428 -11429 -11430 -11431 -11432 -11433 -11434 -11435 -11436 -11437 -11438 -11439 -11440 -11441 -11442 -11443 -11444 -11445 -11446 -11447 -11448 -11449 -11450 -11451 -11452 -11453 -11454 -11455 -11456 -11457 -11458 -11459 -11460 -11461 -11462 -11463 -11464 -11465 -11466 -11467 -11468 -11469 -11470 -11471 -11472 -11473 -11474 -11475 -11476 -11477 -11478 -11479 -11480 -11481 -11482 -11483 -11484 -11485 -11486 -11487 -11488 -11489 -11490 -11491 -11492 -11493 -11494 -11495 -11496 -11497 -11498 -11499 -11500 -11501 -11502 -11503 -11504 -11505 -11506 -11507 -11508 -11509 -11510 -11511 -11512 -11513 -11514 -11515 -11516 -11517 -11518 -11519 -11520 -11521 -11522 -11523 -11524 -11525 -11526 -11527 -11528 -11529 -11530 -11531 -11532 -11533 -11534 -11535 -11536 -11537 -11538 -11539 -11540 -11541 -11542 -11543 -11544 -11545 -11546 -11547 -11548 -11549 -11550 -11551 -11552 -11553 -11554 -11555 -11556 -11557 -11558 -11559 -11560 -11561 -11562 -11563 -11564 -11565 -11566 -11567 -11568 -11569 -11570 -11571 -11572 -11573 -11574 -11575 -11576 -11577 -11578 -11579 -11580 -11581 -11582 -11583 -11584 -11585 -11586 -11587 -11588 -11589 -11590 -11591 -11592 -11593 -11594 -11595 -11596 -11597 -11598 -11599 -11600 -11601 -11602 -11603 -11604 -11605 -11606 -11607 -11608 -11609 -11610 -11611 -11612 -11613 -11614 -11615 -11616 -11617 -11618 -11619 -11620 -11621 -11622 -11623 -11624 -11625 -11626 -11627 -11628 -11629 -11630 -11631 -11632 -11633 -11634 -11635 -11636 -11637 -11638 -11639 -11640 -11641 -11642 -11643 -11644 -11645 -11646 -11647 -11648 -11649 -11650 -11651 -11652 -11653 -11654 -11655 -11656 -11657 -11658 -11659 -11660 -11661 -11662 -11663 -11664 -11665 -11666 -11667 -11668 -11669 -11670 -11671 -11672 -11673 -11674 -11675 -11676 -11677 -11678 -11679 -11680 -11681 -11682 -11683 -11684 -11685 -11686 -11687 -11688 -11689 -11690 -11691 -11692 -11693 -11694 -11695 -11696 -11697 -11698 -11699 -11700 -11701 -11702 -11703 -11704 -11705 -11706 -11707 -11708 -11709 -11710 -11711 -11712 -11713 -11714 -11715 -11716 -11717 -11718 -11719 -11720 -11721 -11722 -11723 -11724 -11725 -11726 -11727 -11728 -11729 -11730 -11731 -11732 -11733 -11734 -11735 -11736 -11737 -11738 -11739 -11740 -11741 -11742 -11743 -11744 -11745 -11746 -11747 -11748 -11749 -11750 -11751 -11752 -11753 -11754 -11755 -11756 -11757 -11758 -11759 -11760 -11761 -11762 -11763 -11764 -11765 -11766 -11767 -11768 -11769 -11770 -11771 -11772 -11773 -11774 -11775 -11776 -11777 -11778 -11779 -11780 -11781 -11782 -11783 -11784 -11785 -11786 -11787 -11788 -11789 -11790 -11791 -11792 -11793 -11794 -11795 -11796 -11797 -11798 -11799 -11800 -11801 -11802 -11803 -11804 -11805 -11806 -11807 -11808 -11809 -11810 -11811 -11812 -11813 -11814 -11815 -11816 -11817 -11818 -11819 -11820 -11821 -11822 -11823 -11824 -11825 -11826 -11827 -11828 -11829 -11830 -11831 -11832 -11833 -11834 -11835 -11836 -11837 -11838 -11839 -11840 -11841 -11842 -11843 -11844 -11845 -11846 -11847 -11848 -11849 -11850 -11851 -11852 -11853 -11854 -11855 -11856 -11857 -11858 -11859 -11860 -11861 -11862 -11863 -11864 -11865 -11866 -11867 -11868 -11869 -11870 -11871 -11872 -11873 -11874 -11875 -11876 -11877 -11878 -11879 -11880 -11881 -11882 -11883 -11884 -11885 -11886 -11887 -11888 -11889 -11890 -11891 -11892 -11893 -11894 -11895 -11896 -11897 -11898 -11899 -11900 -11901 -11902 -11903 -11904 -11905 -11906 -11907 -11908 -11909 -11910 -11911 -11912 -11913 -11914 -11915 -11916 -11917 -11918 -11919 -11920 -11921 -11922 -11923 -11924 -11925 -11926 -11927 -11928 -11929 -11930 -11931 -11932 -11933 -11934 -11935 -11936 -11937 -11938 -11939 -11940 -11941 -11942 -11943 -11944 -11945 -11946 -11947 -11948 -11949 -11950 -11951 -11952 -11953 -11954 -11955 -11956 -11957 -11958 -11959 -11960 -11961 -11962 -11963 -11964 -11965 -11966 -11967 -11968 -11969 -11970 -11971 -11972 -11973 -11974 -11975 -11976 -11977 -11978 -11979 -11980 -11981 -11982 -11983 -11984 -11985 -11986 -11987 -11988 -11989 -11990 -11991 -11992 -11993 -11994 -11995 -11996 -11997 -11998 -11999 -12000 -12001 -12002 -12003 -12004 -12005 -12006 -12007 -12008 -12009 -12010 -12011 -12012 -12013 -12014 -12015 -12016 -12017 -12018 -12019 -12020 -12021 -12022 -12023 -12024 -12025 -12026 -12027 -12028 -12029 -12030 -12031 -12032 -12033 -12034 -12035 -12036 -12037 -12038 -12039 -12040 -12041 -12042 -12043 -12044 -12045 -12046 -12047 -12048 -12049 -12050 -12051 -12052 -12053 -12054 -12055 -12056 -12057 -12058 -12059 -12060 -12061 -12062 -12063 -12064 -12065 -12066 -12067 -12068 -12069 -12070 -12071 -12072 -12073 -12074 -12075 -12076 -12077 -12078 -12079 -12080 -12081 -12082 -12083 -12084 -12085 -12086 -12087 -12088 -12089 -12090 -12091 -12092 -12093 -12094 -12095 -12096 -12097 -12098 -12099 -12100 -12101 -12102 -12103 -12104 -12105 -12106 -12107 -12108 -12109 -12110 -12111 -12112 -12113 -12114 -12115 -12116 -12117 -12118 -12119 -12120 -12121 -12122 -12123 -12124 -12125 -12126 -12127 -12128 -12129 -12130 -12131 -12132 -12133 -12134 -12135 -12136 -12137 -12138 -12139 -12140 -12141 -12142 -12143 -12144 -12145 -12146 -12147 -12148 -12149 -12150 -12151 -12152 -12153 -12154 -12155 -12156 -12157 -12158 -12159 -12160 -12161 -12162 -12163 -12164 -12165 -12166 -12167 -12168 -12169 -12170 -12171 -12172 -12173 -12174 -12175 -12176 -12177 -12178 -12179 -12180 -12181 -12182 -12183 -12184 -12185 -12186 -12187 -12188 -12189 -12190 -12191 -12192 -12193 -12194 -12195 -12196 -12197 -12198 -12199 -12200 -12201 -12202 -12203 -12204 -12205 -12206 -12207 -12208 -12209 -12210 -12211 -12212 -12213 -12214 -12215 -12216 -12217 -12218 -12219 -12220 -12221 -12222 -12223 -12224 -12225 -12226 -12227 -12228 -12229 -12230 -12231 -12232 -12233 -12234 -12235 -12236 -12237 -12238 -12239 -12240 -12241 -12242 -12243 -12244 -12245 -12246 -12247 -12248 -12249 -12250 -12251 -12252 -12253 -12254 -12255 -12256 -12257 -12258 -12259 -12260 -12261 -12262 -12263 -12264 -12265 -12266 -12267 -12268 -12269 -12270 -12271 -12272 -12273 -12274 -12275 -12276 -12277 -12278 -12279 -12280 -12281 -12282 -12283 -12284 -12285 -12286 -12287 -12288 -12289 -12290 -12291 -12292 -12293 -12294 -12295 -12296 -12297 -12298 -12299 -12300 -12301 -12302 -12303 -12304 -12305 -12306 -12307 -12308 -12309 -12310 -12311 -12312 -12313 -12314 -12315 -12316 -12317 -12318 -12319 -12320 -12321 -12322 -12323 -12324 -12325 -12326 -12327 -12328 -12329 -12330 -12331 -12332 -12333 -12334 -12335 -12336 -12337 -12338 -12339 -12340 -12341 -12342 -12343 -12344 -12345 -12346 -12347 -12348 -12349 -12350 -12351 -12352 -12353 -12354 -12355 -12356 -12357 -12358 -12359 -12360 -12361 -12362 -12363 -12364 -12365 -12366 -12367 -12368 -12369 -12370 -12371 -12372 -12373 -12374 -12375 -12376 -12377 -12378 -12379 -12380 -12381 -12382 -12383 -12384 -12385 -12386 -12387 -12388 -12389 -12390 -12391 -12392 -12393 -12394 -12395 -12396 -12397 -12398 -12399 -12400 -12401 -12402 -12403 -12404 -12405 -12406 -12407 -12408 -12409 -12410 -12411 -12412 -12413 -12414 -12415 -12416 -12417 -12418 -12419 -12420 -12421 -12422 -12423 -12424 -12425 -12426 -12427 -12428 -12429 -12430 -12431 -12432 -12433 -12434 -12435 -12436 -12437 -12438 -12439 -12440 -12441 -12442 -12443 -12444 -12445 -12446 -12447 -12448 -12449 -12450 -12451 -12452 -12453 -12454 -12455 -12456 -12457 -12458 -12459 -12460 -12461 -12462 -12463 -12464 -12465 -12466 -12467 -12468 -12469 -12470 -12471 -12472 -12473 -12474 -12475 -12476 -12477 -12478 -12479 -12480 -12481 -12482 -12483 -12484 -12485 -12486 -12487 -12488 -12489 -12490 -12491 -12492 -12493 -12494 -12495 -12496 -12497 -12498 -12499 -12500 -12501 -12502 -12503 -12504 -12505 -12506 -12507 -12508 -12509 -12510 -12511 -12512 -12513 -12514 -12515 -12516 -12517 -12518 -12519 -12520 -12521 -12522 -12523 -12524 -12525 -12526 -12527 -12528 -12529 -12530 -12531 -12532 -12533 -12534 -12535 -12536 -12537 -12538 -12539 -12540 -12541 -12542 -12543 -12544 -12545 -12546 -12547 -12548 -12549 -12550 -12551 -12552 -12553 -12554 -12555 -12556 -12557 -12558 -12559 -12560 -12561 -12562 -12563 -12564 -12565 -12566 -12567 -12568 -12569 -12570 -12571 -12572 -12573 -12574 -12575 -12576 -12577 -12578 -12579 -12580 -12581 -12582 -12583 -12584 -12585 -12586 -12587 -12588 -12589 -12590 -12591 -12592 -12593 -12594 -12595 -12596 -12597 -12598 -12599 -12600 -12601 -12602 -12603 -12604 -12605 -12606 -12607 -12608 -12609 -12610 -12611 -12612 -12613 -12614 -12615 -12616 -12617 -12618 -12619 -12620 -12621 -12622 -12623 -12624 -12625 -12626 -12627 -12628 -12629 -12630 -12631 -12632 -12633 -12634 -12635 -12636 -12637 -12638 -12639 -12640 -12641 -12642 -12643 -12644 -12645 -12646 -12647 -12648 -12649 -12650 -12651 -12652 -12653 -12654 -12655 -12656 -12657 -12658 -12659 -12660 -12661 -12662 -12663 -12664 -12665 -12666 -12667 -12668 -12669 -12670 -12671 -12672 -12673 -12674 -12675 -12676 -12677 -12678 -12679 -12680 -12681 -12682 -12683 -12684 -12685 -12686 -12687 -12688 -12689 -12690 -12691 -12692 -12693 -12694 -12695 -12696 -12697 -12698 -12699 -12700 -12701 -12702 -12703 -12704 -12705 -12706 -12707 -12708 -12709 -12710 -12711 -12712 -12713 -12714 -12715 -12716 -12717 -12718 -12719 -12720 -12721 -12722 -12723 -12724 -12725 -12726 -12727 -12728 -12729 -12730 -12731 -12732 -12733 -12734 -12735 -12736 -12737 -12738 -12739 -12740 -12741 -12742 -12743 -12744 -12745 -12746 -12747 -12748 -12749 -12750 -12751 -12752 -12753 -12754 -12755 -12756 -12757 -12758 -12759 -12760 -12761 -12762 -12763 -12764 -12765 -12766 -12767 -12768 -12769 -12770 -12771 -12772 -12773 -12774 -12775 -12776 -12777 -12778 -12779 -12780 -12781 -12782 -12783 -12784 -12785 -12786 -12787 -12788 -12789 -12790 -12791 -12792 -12793 -12794 -12795 -12796 -12797 -12798 -12799 -12800 -12801 -12802 -12803 -12804 -12805 -12806 -12807 -12808 -12809 -12810 -12811 -12812 -12813 -12814 -12815 -12816 -12817 -12818 -12819 -12820 -12821 -12822 -12823 -12824 -12825 -12826 -12827 -12828 -12829 -12830 -12831 -12832 -12833 -12834 -12835 -12836 -12837 -12838 -12839 -12840 -12841 -12842 -12843 -12844 -12845 -12846 -12847 -12848 -12849 -12850 -12851 -12852 -12853 -12854 -12855 -12856 -12857 -12858 -12859 -12860 -12861 -12862 -12863 -12864 -12865 -12866 -12867 -12868 -12869 -12870 -12871 -12872 -12873 -12874 -12875 -12876 -12877 -12878 -12879 -12880 -12881 -12882 -12883 -12884 -12885 -12886 -12887 -12888 -12889 -12890 -12891 -12892 -12893 -12894 -12895 -12896 -12897 -12898 -12899 -12900 -12901 -12902 -12903 -12904 -12905 -12906 -12907 -12908 -12909 -12910 -12911 -12912 -12913 -12914 -12915 -12916 -12917 -12918 -12919 -12920 -12921 -12922 -12923 -12924 -12925 -12926 -12927 -12928 -12929 -12930 -12931 -12932 -12933 -12934 -12935 -12936 -12937 -12938 -12939 -12940 -12941 -12942 -12943 -12944 -12945 -12946 -12947 -12948 -12949 -12950 -12951 -12952 -12953 -12954 -12955 -12956 -12957 -12958 -12959 -12960 -12961 -12962 -12963 -12964 -12965 -12966 -12967 -12968 -12969 -12970 -12971 -12972 -12973 -12974 -12975 -12976 -12977 -12978 -12979 -12980 -12981 -12982 -12983 -12984 -12985 -12986 -12987 -12988 -12989 -12990 -12991 -12992 -12993 -12994 -12995 -12996 -12997 -12998 -12999 -13000 -13001 -13002 -13003 -13004 -13005 -13006 -13007 -13008 -13009 -13010 -13011 -13012 -13013 -13014 -13015 -13016 -13017 -13018 -13019 -13020 -13021 -13022 -13023 -13024 -13025 -13026 -13027 -13028 -13029 -13030 -13031 -13032 -13033 -13034 -13035 -13036 -13037 -13038 -13039 -13040 -13041 -13042 -13043 -13044 -13045 -13046 -13047 -13048 -13049 -13050 -13051 -13052 -13053 -13054 -13055 -13056 -13057 -13058 -13059 -13060 -13061 -13062 -13063 -13064 -13065 -13066 -13067 -13068 -13069 -13070 -13071 -13072 -13073 -13074 -13075 -13076 -13077 -13078 -13079 -13080 -13081 -13082 -13083 -13084 -13085 -13086 -13087 -13088 -13089 -13090 -13091 -13092 -13093 -13094 -13095 -13096 -13097 -13098 -13099 -13100 -13101 -13102 -13103 -13104 -13105 -13106 -13107 -13108 -13109 -13110 -13111 -13112 -13113 -13114 -13115 -13116 -13117 -13118 -13119 -13120 -13121 -13122 -13123 -13124 -13125 -13126 -13127 -13128 -13129 -13130 -13131 -13132 -13133 -13134 -13135 -13136 -13137 -13138 -13139 -13140 -13141 -13142 -13143 -13144 -13145 -13146 -13147 -13148 -13149 -13150 -13151 -13152 -13153 -13154 -13155 -13156 -13157 -13158 -13159 -13160 -13161 -13162 -13163 -13164 -13165 -13166 -13167 -13168 -13169 -13170 -13171 -13172 -13173 -13174 -13175 -13176 -13177 -13178 -13179 -13180 -13181 -13182 -13183 -13184 -13185 -13186 -13187 -13188 -13189 -13190 -13191 -13192 -13193 -13194 -13195 -13196 -13197 -13198 -13199 -13200 -13201 -13202 -13203 -13204 -13205 -13206 -13207 -13208 -13209 -13210 -13211 -13212 -13213 -13214 -13215 -13216 -13217 -13218 -13219 -13220 -13221 -13222 -13223 -13224 -13225 -13226 -13227 -13228 -13229 -13230 -13231 -13232 -13233 -13234 -13235 -13236 -13237 -13238 -13239 -13240 -13241 -13242 -13243 -13244 -13245 -13246 -13247 -13248 -13249 -13250 -13251 -13252 -13253 -13254 -13255 -13256 -13257 -13258 -13259 -13260 -13261 -13262 -13263 -13264 -13265 -13266 -13267 -13268 -13269 -13270 -13271 -13272 -13273 -13274 -13275 -13276 -13277 -13278 -13279 -13280 -13281 -13282 -13283 -13284 -13285 -13286 -13287 -13288 -13289 -13290 -13291 -13292 -13293 -13294 -13295 -13296 -13297 -13298 -13299 -13300 -13301 -13302 -13303 -13304 -13305 -13306 -13307 -13308 -13309 -13310 -13311 -13312 -13313 -13314 -13315 -13316 -13317 -13318 -13319 -13320 -13321 -13322 -13323 -13324 -13325 -13326 -13327 -13328 -13329 -13330 -13331 -13332 -13333 -13334 -13335 -13336 -13337 -13338 -13339 -13340 -13341 -13342 -13343 -13344 -13345 -13346 -13347 -13348 -13349 -13350 -13351 -13352 -13353 -13354 -13355 -13356 -13357 -13358 -13359 -13360 -13361 -13362 -13363 -13364 -13365 -13366 -13367 -13368 -13369 -13370 -13371 -13372 -13373 -13374 -13375 -13376 -13377 -13378 -13379 -13380 -13381 -13382 -13383 -13384 -13385 -13386 -13387 -13388 -13389 -13390 -13391 -13392 -13393 -13394 -13395 -13396 -13397 -13398 -13399 -13400 -13401 -13402 -13403 -13404 -13405 -13406 -13407 -13408 -13409 -13410 -13411 -13412 -13413 -13414 -13415 -13416 -13417 -13418 -13419 -13420 -13421 -13422 -13423 -13424 -13425 -13426 -13427 -13428 -13429 -13430 -13431 -13432 -13433 -13434 -13435 -13436 -13437 -13438 -13439 -13440 -13441 -13442 -13443 -13444 -13445 -13446 -13447 -13448 -13449 -13450 -13451 -13452 -13453 -13454 -13455 -13456 -13457 -13458 -13459 -13460 -13461 -13462 -13463 -13464 -13465 -13466 -13467 -13468 -13469 -13470 -13471 -13472 -13473 -13474 -13475 -13476 -13477 -13478 -13479 -13480 -13481 -13482 -13483 -13484 -13485 -13486 -13487 -13488 -13489 -13490 -13491 -13492 -13493 -13494 -13495 -13496 -13497 -13498 -13499 -13500 -13501 -13502 -13503 -13504 -13505 -13506 -13507 -13508 -13509 -13510 -13511 -13512 -13513 -13514 -13515 -13516 -13517 -13518 -13519 -13520 -13521 -13522 -13523 -13524 -13525 -13526 -13527 -13528 -13529 -13530 -13531 -13532 -13533 -13534 -13535 -13536 -13537 -13538 -13539 -13540 -13541 -13542 -13543 -13544 -13545 -13546 -13547 -13548 -13549 -13550 -13551 -13552 -13553 -13554 -13555 -13556 -13557 -13558 -13559 -13560 -13561 -13562 -13563 -13564 -13565 -13566 -13567 -13568 -13569 -13570 -13571 -13572 -13573 -13574 -13575 -13576 -13577 -13578 -13579 -13580 -13581 -13582 -13583 -13584 -13585 -13586 -13587 -13588 -13589 -13590 -13591 -13592 -13593 -13594 -13595 -13596 -13597 -13598 -13599 -13600 -13601 -13602 -13603 -13604 -13605 -13606 -13607 -13608 -13609 -13610 -13611 -13612 -13613 -13614 -13615 -13616 -13617 -13618 -13619 -13620 -13621 -13622 -13623 -13624 -13625 -13626 -13627 -13628 -13629 -13630 -13631 -13632 -13633 -13634 -13635 -13636 -13637 -13638 -13639 -13640 -13641 -13642 -13643 -13644 -13645 -13646 -13647 -13648 -13649 -13650 -13651 -13652 -13653 -13654 -13655 -13656 -13657 -13658 -13659 -13660 -13661 -13662 -13663 -13664 -13665 -13666 -13667 -13668 -13669 -13670 -13671 -13672 -13673 -13674 -13675 -13676 -13677 -13678 -13679 -13680 -13681 -13682 -13683 -13684 -13685 -13686 -13687 -13688 -13689 -13690 -13691 -13692 -13693 -13694 -13695 -13696 -13697 -13698 -13699 -13700 -13701 -13702 -13703 -13704 -13705 -13706 -13707 -13708 -13709 -13710 -13711 -13712 -13713 -13714 -13715 -13716 -13717 -13718 -13719 -13720 -13721 -13722 -13723 -13724 -13725 -13726 -13727 -13728 -13729 -13730 -13731 -13732 -13733 -13734 -13735 -13736 -13737 -13738 -13739 -13740 -13741 -13742 -13743 -13744 -13745 -13746 -13747 -13748 -13749 -13750 -13751 -13752 -13753 -13754 -13755 -13756 -13757 -13758 -13759 -13760 -13761 -13762 -13763 -13764 -13765 -13766 -13767 -13768 -13769 -13770 -13771 -13772 -13773 -13774 -13775 -13776 -13777 -13778 -13779 -13780 -13781 -13782 -13783 -13784 -13785 -13786 -13787 -13788 -13789 -13790 -13791 -13792 -13793 -13794 -13795 -13796 -13797 -13798 -13799 -13800 -13801 -13802 -13803 -13804 -13805 -13806 -13807 -13808 -13809 -13810 -13811 -13812 -13813 -13814 -13815 -13816 -13817 -13818 -13819 -13820 -13821 -13822 -13823 -13824 -13825 -13826 -13827 -13828 -13829 -13830 -13831 -13832 -13833 -13834 -13835 -13836 -13837 -13838 -13839 -13840 -13841 -13842 -13843 -13844 -13845 -13846 -13847 -13848 -13849 -13850 -13851 -13852 -13853 -13854 -13855 -13856 -13857 -13858 -13859 -13860 -13861 -13862 -13863 -13864 -13865 -13866 -13867 -13868 -13869 -13870 -13871 -13872 -13873 -13874 -13875 -13876 -13877 -13878 -13879 -13880 -13881 -13882 -13883 -13884 -13885 -13886 -13887 -13888 -13889 -13890 -13891 -13892 -13893 -13894 -13895 -13896 -13897 -13898 -13899 -13900 -13901 -13902 -13903 -13904 -13905 -13906 -13907 -13908 -13909 -13910 -13911 -13912 -13913 -13914 -13915 -13916 -13917 -13918 -13919 -13920 -13921 -13922 -13923 -13924 -13925 -13926 -13927 -13928 -13929 -13930 -13931 -13932 -13933 -13934 -13935 -13936 -13937 -13938 -13939 -13940 -13941 -13942 -13943 -13944 -13945 -13946 -13947 -13948 -13949 -13950 -13951 -13952 -13953 -13954 -13955 -13956 -13957 -13958 -13959 -13960 -13961 -13962 -13963 -13964 -13965 -13966 -13967 -13968 -13969 -13970 -13971 -13972 -13973 -13974 -13975 -13976 -13977 -13978 -13979 -13980 -13981 -13982 -13983 -13984 -13985 -13986 -13987 -13988 -13989 -13990 -13991 -13992 -13993 -13994 -13995 -13996 -13997 -13998 -13999 -14000 -14001 -14002 -14003 -14004 -14005 -14006 -14007 -14008 -14009 -14010 -14011 -14012 -14013 -14014 -14015 -14016 -14017 -14018 -14019 -14020 -14021 -14022 -14023 -14024 -14025 -14026 -14027 -14028 -14029 -14030 -14031 -14032 -14033 -14034 -14035 -14036 -14037 -14038 -14039 -14040 -14041 -14042 -14043 -14044 -14045 -14046 -14047 -14048 -14049 -14050 -14051 -14052 -14053 -14054 -14055 -14056 -14057 -14058 -14059 -14060 -14061 -14062 -14063 -14064 -14065 -14066 -14067 -14068 -14069 -14070 -14071 -14072 -14073 -14074 -14075 -14076 -14077 -14078 -14079 -14080 -14081 -14082 -14083 -14084 -14085 -14086 -14087 -14088 -14089 -14090 -14091 -14092 -14093 -14094 -14095 -14096 -14097 -14098 -14099 -14100 -14101 -14102 -14103 -14104 -14105 -14106 -14107 -14108 -14109 -14110 -14111 -14112 -14113 -14114 -14115 -14116 -14117 -14118 -14119 -14120 -14121 -14122 -14123 -14124 -14125 -14126 -14127 -14128 -14129 -14130 -14131 -14132 -14133 -14134 -14135 -14136 -14137 -14138 -14139 -14140 -14141 -14142 -14143 -14144 -14145 -14146 -14147 -14148 -14149 -14150 -14151 -14152 -14153 -14154 -14155 -14156 -14157 -14158 -14159 -14160 -14161 -14162 -14163 -14164 -14165 -14166 -14167 -14168 -14169 -14170 -14171 -14172 -14173 -14174 -14175 -14176 -14177 -14178 -14179 -14180 -14181 -14182 -14183 -14184 -14185 -14186 -14187 -14188 -14189 -14190 -14191 -14192 -14193 -14194 -14195 -14196 -14197 -14198 -14199 -14200 -14201 -14202 -14203 -14204 -14205 -14206 -14207 -14208 -14209 -14210 -14211 -14212 -14213 -14214 -14215 -14216 -14217 -14218 -14219 -14220 -14221 -14222 -14223 -14224 -14225 -14226 -14227 -14228 -14229 -14230 -14231 -14232 -14233 -14234 -14235 -14236 -14237 -14238 -14239 -14240 -14241 -14242 -14243 -14244 -14245 -14246 -14247 -14248 -14249 -14250 -14251 -14252 -14253 -14254 -14255 -14256 -14257 -14258 -14259 -14260 -14261 -14262 -14263 -14264 -14265 -14266 -14267 -14268 -14269 -14270 -14271 -14272 -14273 -14274 -14275 -14276 -14277 -14278 -14279 -14280 -14281 -14282 -14283 -14284 -14285 -14286 -14287 -14288 -14289 -14290 -14291 -14292 -14293 -14294 -14295 -14296 -14297 -14298 -14299 -14300 -14301 -14302 -14303 -14304 -14305 -14306 -14307 -14308 -14309 -14310 -14311 -14312 -14313 -14314 -14315 -14316 -14317 -14318 -14319 -14320 -14321 -14322 -14323 -14324 -14325 -14326 -14327 -14328 -14329 -14330 -14331 -14332 -14333 -14334 -14335 -14336 -14337 -14338 -14339 -14340 -14341 -14342 -14343 -14344 -14345 -14346 -14347 -14348 -14349 -14350 -14351 -14352 -14353 -14354 -14355 -14356 -14357 -14358 -14359 -14360 -14361 -14362 -14363 -14364 -14365 -14366 -14367 -14368 -14369 -14370 -14371 -14372 -14373 -14374 -14375 -14376 -14377 -14378 -14379 -14380 -14381 -14382 -14383 -14384 -14385 -14386 -14387 -14388 -14389 -14390 -14391 -14392 -14393 -14394 -14395 -14396 -14397 -14398 -14399 -14400 -14401 -14402 -14403 -14404 -14405 -14406 -14407 -14408 -14409 -14410 -14411 -14412 -14413 -14414 -14415 -14416 -14417 -14418 -14419 -14420 -14421 -14422 -14423 -14424 -14425 -14426 -14427 -14428 -14429 -14430 -14431 -14432 -14433 -14434 -14435 -14436 -14437 -14438 -14439 -14440 -14441 -14442 -14443 -14444 -14445 -14446 -14447 -14448 -14449 -14450 -14451 -14452 -14453 -14454 -14455 -14456 -14457 -14458 -14459 -14460 -14461 -14462 -14463 -14464 -14465 -14466 -14467 -14468 -14469 -14470 -14471 -14472 -14473 -14474 -14475 -14476 -14477 -14478 -14479 -14480 -14481 -14482 -14483 -14484 -14485 -14486 -14487 -14488 -14489 -14490 -14491 -14492 -14493 -14494 -14495 -14496 -14497 -14498 -14499 -14500 -14501 -14502 -14503 -14504 -14505 -14506 -14507 -14508 -14509 -14510 -14511 -14512 -14513 -14514 -14515 -14516 -14517 -14518 -14519 -14520 -14521 -14522 -14523 -14524 -14525 -14526 -14527 -14528 -14529 -14530 -14531 -14532 -14533 -14534 -14535 -14536 -14537 -14538 -14539 -14540 -14541 -14542 -14543 -14544 -14545 -14546 -14547 -14548 -14549 -14550 -14551 -14552 -14553 -14554 -14555 -14556 -14557 -14558 -14559 -14560 -14561 -14562 -14563 -14564 -14565 -14566 -14567 -14568 -14569 -14570 -14571 -14572 -14573 -14574 -14575 -14576 -14577 -14578 -14579 -14580 -14581 -14582 -14583 -14584 -14585 -14586 -14587 -14588 -14589 -14590 -14591 -14592 -14593 -14594 -14595 -14596 -14597 -14598 -14599 -14600 -14601 -14602 -14603 -14604 -14605 -14606 -14607 -14608 -14609 -14610 -14611 -14612 -14613 -14614 -14615 -14616 -14617 -14618 -14619 -14620 -14621 -14622 -14623 -14624 -14625 -14626 -14627 -14628 -14629 -14630 -14631 -14632 -14633 -14634 -14635 -14636 -14637 -14638 -14639 -14640 -14641 -14642 -14643 -14644 -14645 -14646 -14647 -14648 -14649 -14650 -14651 -14652 -14653 -14654 -14655 -14656 -14657 -14658 -14659 -14660 -14661 -14662 -14663 -14664 -14665 -14666 -14667 -14668 -14669 -14670 -14671 -14672 -14673 -14674 -14675 -14676 -14677 -14678 -14679 -14680 -14681 -14682 -14683 -14684 -14685 -14686 -14687 -14688 -14689 -14690 -14691 -14692 -14693 -14694 -14695 -14696 -14697 -14698 -14699 -14700 -14701 -14702 -14703 -14704 -14705 -14706 -14707 -14708 -14709 -14710 -14711 -14712 -14713 -14714 -14715 -14716 -14717 -14718 -14719 -14720 -14721 -14722 -14723 -14724 -14725 -14726 -14727 -14728 -14729 -14730 -14731 -14732 -14733 -14734 -14735 -14736 -14737 -14738 -14739 -14740 -14741 -14742 -14743 -14744 -14745 -14746 -14747 -14748 -14749 -14750 -14751 -14752 -14753 -14754 -14755 -14756 -14757 -14758 -14759 -14760 -14761 -14762 -14763 -14764 -14765 -14766 -14767 -14768 -14769 -14770 -14771 -14772 -14773 -14774 -14775 -14776 -14777 -14778 -14779 -14780 -14781 -14782 -14783 -14784 -14785 -14786 -14787 -14788 -14789 -14790 -14791 -14792 -14793 -14794 -14795 -14796 -14797 -14798 -14799 -14800 -14801 -14802 -14803 -14804 -14805 -14806 -14807 -14808 -14809 -14810 -14811 -14812 -14813 -14814 -14815 -14816 -14817 -14818 -14819 -14820 -14821 -14822 -14823 -14824 -14825 -14826 -14827 -14828 -14829 -14830 -14831 -14832 -14833 -14834 -14835 -14836 -14837 -14838 -14839 -14840 -14841 -14842 -14843 -14844 -14845 -14846 -14847 -14848 -14849 -14850 -14851 -14852 -14853 -14854 -14855 -14856 -14857 -14858 -14859 -14860 -14861 -14862 -14863 -14864 -14865 -14866 -14867 -14868 -14869 -14870 -14871 -14872 -14873 -14874 -14875 -14876 -14877 -14878 -14879 -14880 -14881 -14882 -14883 -14884 -14885 -14886 -14887 -14888 -14889 -14890 -14891 -14892 -14893 -14894 -14895 -14896 -14897 -14898 -14899 -14900 -14901 -14902 -14903 -14904 -14905 -14906 -14907 -14908 -14909 -14910 -14911 -14912 -14913 -14914 -14915 -14916 -14917 -14918 -14919 -14920 -14921 -14922 -14923 -14924 -14925 -14926 -14927 -14928 -14929 -14930 -14931 -14932 -14933 -14934 -14935 -14936 -14937 -14938 -14939 -14940 -14941 -14942 -14943 -14944 -14945 -14946 -14947 -14948 -14949 -14950 -14951 -14952 -14953 -14954 -14955 -14956 -14957 -14958 -14959 -14960 -14961 -14962 -14963 -14964 -14965 -14966 -14967 -14968 -14969 -14970 -14971 -14972 -14973 -14974 -14975 -14976 -14977 -14978 -14979 -14980 -14981 -14982 -14983 -14984 -14985 -14986 -14987 -14988 -14989 -14990 -14991 -14992 -14993 -14994 -14995 -14996 -14997 -14998 -14999 -15000 -15001 -15002 -15003 -15004 -15005 -15006 -15007 -15008 -15009 -15010 -15011 -15012 -15013 -15014 -15015 -15016 -15017 -15018 -15019 -15020 -15021 -15022 -15023 -15024 -15025 -15026 -15027 -15028 -15029 -15030 -15031 -15032 -15033 -15034 -15035 -15036 -15037 -15038 -15039 -15040 -15041 -15042 -15043 -15044 -15045 -15046 -15047 -15048 -15049 -15050 -15051 -15052 -15053 -15054 -15055 -15056 -15057 -15058 -15059 -15060 -15061 -15062 -15063 -15064 -15065 -15066 -15067 -15068 -15069 -15070 -15071 -15072 -15073 -15074 -15075 -15076 -15077 -15078 -15079 -15080 -15081 -15082 -15083 -15084 -15085 -15086 -15087 -15088 -15089 -15090 -15091 -15092 -15093 -15094 -15095 -15096 -15097 -15098 -15099 -15100 -15101 -15102 -15103 -15104 -15105 -15106 -15107 -15108 -15109 -15110 -15111 -15112 -15113 -15114 -15115 -15116 -15117 -15118 -15119 -15120 -15121 -15122 -15123 -15124 -15125 -15126 -15127 -15128 -15129 -15130 -15131 -15132 -15133 -15134 -15135 -15136 -15137 -15138 -15139 -15140 -15141 -15142 -15143 -15144 -15145 -15146 -15147 -15148 -15149 -15150 -15151 -15152 -15153 -15154 -15155 -15156 -15157 -15158 -15159 -15160 -15161 -15162 -15163 -15164 -15165 -15166 -15167 -15168 -15169 -15170 -15171 -15172 -15173 -15174 -15175 -15176 -15177 -15178 -15179 -15180 -15181 -15182 -15183 -15184 -15185 -15186 -15187 -15188 -15189 -15190 -15191 -15192 -15193 -15194 -15195 -15196 -15197 -15198 -15199 -15200 -15201 -15202 -15203 -15204 -15205 -15206 -15207 -15208 -15209 -15210 -15211 -15212 -15213 -15214 -15215 -15216 -15217 -15218 -15219 -15220 -15221 -15222 -15223 -15224 -15225 -15226 -15227 -15228 -15229 -15230 -15231 -15232 -15233 -15234 -15235 -15236 -15237 -15238 -15239 -15240 -15241 -15242 -15243 -15244 -15245 -15246 -15247 -15248 -15249 -15250 -15251 -15252 -15253 -15254 -15255 -15256 -15257 -15258 -15259 -15260 -15261 -15262 -15263 -15264 -15265 -15266 -15267 -15268 -15269 -15270 -15271 -15272 -15273 -15274 -15275 -15276 -15277 -15278 -15279 -15280 -15281 -15282 -15283 -15284 -15285 -15286 -15287 -15288 -15289 -15290 -15291 -15292 -15293 -15294 -15295 -15296 -15297 -15298 -15299 -15300 -15301 -15302 -15303 -15304 -15305 -15306 -15307 -15308 -15309 -15310 -15311 -15312 -15313 -15314 -15315 -15316 -15317 -15318 -15319 -15320 -15321 -15322 -15323 -15324 -15325 -15326 -15327 -15328 -15329 -15330 -15331 -15332 -15333 -15334 -15335 -15336 -15337 -15338 -15339 -15340 -15341 -15342 -15343 -15344 -15345 -15346 -15347 -15348 -15349 -15350 -15351 -15352 -15353 -15354 -15355 -15356 -15357 -15358 -15359 -15360 -15361 -15362 -15363 -15364 -15365 -15366 -15367 -15368 -15369 -15370 -15371 -15372 -15373 -15374 -15375 -15376 -15377 -15378 -15379 -15380 -15381 -15382 -15383 -15384 -15385 -15386 -15387 -15388 -15389 -15390 -15391 -15392 -15393 -15394 -15395 -15396 -15397 -15398 -15399 -15400 -15401 -15402 -15403 -15404 -15405 -15406 -15407 -15408 -15409 -15410 -15411 -15412 -15413 -15414 -15415 -15416 -15417 -15418 -15419 -15420 -15421 -15422 -15423 -15424 -15425 -15426 -15427 -15428 -15429 -15430 -15431 -15432 -15433 -15434 -15435 -15436 -15437 -15438 -15439 -15440 -15441 -15442 -15443 -15444 -15445 -15446 -15447 -15448 -15449 -15450 -15451 -15452 -15453 -15454 -15455 -15456 -15457 -15458 -15459 -15460 -15461 -15462 -15463 -15464 -15465 -15466 -15467 -15468 -15469 -15470 -15471 -15472 -15473 -15474 -15475 -15476 -15477 -15478 -15479 -15480 -15481 -15482 -15483 -15484 -15485 -15486 -15487 -15488 -15489 -15490 -15491 -15492 -15493 -15494 -15495 -15496 -15497 -15498 -15499 -15500 -15501 -15502 -15503 -15504 -15505 -15506 -15507 -15508 -15509 -15510 -15511 -15512 -15513 -15514 -15515 -15516 -15517 -15518 -15519 -15520 -15521 -15522 -15523 -15524 -15525 -15526 -15527 -15528 -15529 -15530 -15531 -15532 -15533 -15534 -15535 -15536 -15537 -15538 -15539 -15540 -15541 -15542 -15543 -15544 -15545 -15546 -15547 -15548 -15549 -15550 -15551 -15552 -15553 -15554 -15555 -15556 -15557 -15558 -15559 -15560 -15561 -15562 -15563 -15564 -15565 -15566 -15567 -15568 -15569 -15570 -15571 -15572 -15573 -15574 -15575 -15576 -15577 -15578 -15579 -15580 -15581 -15582 -15583 -15584 -15585 -15586 -15587 -15588 -15589 -15590 -15591 -15592 -15593 -15594 -15595 -15596 -15597 -15598 -15599 -15600 -15601 -15602 -15603 -15604 -15605 -15606 -15607 -15608 -15609 -15610 -15611 -15612 -15613 -15614 -15615 -15616 -15617 -15618 -15619 -15620 -15621 -15622 -15623 -15624 -15625 -15626 -15627 -15628 -15629 -15630 -15631 -15632 -15633 -15634 -15635 -15636 -15637 -15638 -15639 -15640 -15641 -15642 -15643 -15644 -15645 -15646 -15647 -15648 -15649 -15650 -15651 -15652 -15653 -15654 -15655 -15656 -15657 -15658 -15659 -15660 -15661 -15662 -15663 -15664 -15665 -15666 -15667 -15668 -15669 -15670 -15671 -15672 -15673 -15674 -15675 -15676 -15677 -15678 -15679 -15680 -15681 -15682 -15683 -15684 -15685 -15686 -15687 -15688 -15689 -15690 -15691 -15692 -15693 -15694 -15695 -15696 -15697 -15698 -15699 -15700 -15701 -15702 -15703 -15704 -15705 -15706 -15707 -15708 -15709 -15710 -15711 -15712 -15713 -15714 -15715 -15716 -15717 -15718 -15719 -15720 -15721 -15722 -15723 -15724 -15725 -15726 -15727 -15728 -15729 -15730 -15731 -15732 -15733 -15734 -15735 -15736 -15737 -15738 -15739 -15740 -15741 -15742 -15743 -15744 -15745 -15746 -15747 -15748 -15749 -15750 -15751 -15752 -15753 -15754 -15755 -15756 -15757 -15758 -15759 -15760 -15761 -15762 -15763 -15764 -15765 -15766 -15767 -15768 -15769 -15770 -15771 -15772 -15773 -15774 -15775 -15776 -15777 -15778 -15779 -15780 -15781 -15782 -15783 -15784 -15785 -15786 -15787 -15788 -15789 -15790 -15791 -15792 -15793 -15794 -15795 -15796 -15797 -15798 -15799 -15800 -15801 -15802 -15803 -15804 -15805 -15806 -15807 -15808 -15809 -15810 -15811 -15812 -15813 -15814 -15815 -15816 -15817 -15818 -15819 -15820 -15821 -15822 -15823 -15824 -15825 -15826 -15827 -15828 -15829 -15830 -15831 -15832 -15833 -15834 -15835 -15836 -15837 -15838 -15839 -15840 -15841 -15842 -15843 -15844 -15845 -15846 -15847 -15848 -15849 -15850 -15851 -15852 -15853 -15854 -15855 -15856 -15857 -15858 -15859 -15860 -15861 -15862 -15863 -15864 -15865 -15866 -15867 -15868 -15869 -15870 -15871 -15872 -15873 -15874 -15875 -15876 -15877 -15878 -15879 -15880 -15881 -15882 -15883 -15884 -15885 -15886 -15887 -15888 -15889 -15890 -15891 -15892 -15893 -15894 -15895 -15896 -15897 -15898 -15899 -15900 -15901 -15902 -15903 -15904 -15905 -15906 -15907 -15908 -15909 -15910 -15911 -15912 -15913 -15914 -15915 -15916 -15917 -15918 -15919 -15920 -15921 -15922 -15923 -15924 -15925 -15926 -15927 -15928 -15929 -15930 -15931 -15932 -15933 -15934 -15935 -15936 -15937 -15938 -15939 -15940 -15941 -15942 -15943 -15944 -15945 -15946 -15947 -15948 -15949 -15950 -15951 -15952 -15953 -15954 -15955 -15956 -15957 -15958 -15959 -15960 -15961 -15962 -15963 -15964 -15965 -15966 -15967 -15968 -15969 -15970 -15971 -15972 -15973 -15974 -15975 -15976 -15977 -15978 -15979 -15980 -15981 -15982 -15983 -15984 -15985 -15986 -15987 -15988 -15989 -15990 -15991 -15992 -15993 -15994 -15995 -15996 -15997 -15998 -15999 -16000 -16001 -16002 -16003 -16004 -16005 -16006 -16007 -16008 -16009 -16010 -16011 -16012 -16013 -16014 -16015 -16016 -16017 -16018 -16019 -16020 -16021 -16022 -16023 -16024 -16025 -16026 -16027 -16028 -16029 -16030 -16031 -16032 -16033 -16034 -16035 -16036 -16037 -16038 -16039 -16040 -16041 -16042 -16043 -16044 -16045 -16046 -16047 -16048 -16049 -16050 -16051 -16052 -16053 -16054 -16055 -16056 -16057 -16058 -16059 -16060 -16061 -16062 -16063 -16064 -16065 -16066 -16067 -16068 -16069 -16070 -16071 -16072 -16073 -16074 -16075 -16076 -16077 -16078 -16079 -16080 -16081 -16082 -16083 -16084 -16085 -16086 -16087 -16088 -16089 -16090 -16091 -16092 -16093 -16094 -16095 -16096 -16097 -16098 -16099 -16100 -16101 -16102 -16103 -16104 -16105 -16106 -16107 -16108 -16109 -16110 -16111 -16112 -16113 -16114 -16115 -16116 -16117 -16118 -16119 -16120 -16121 -16122 -16123 -16124 -16125 -16126 -16127 -16128 -16129 -16130 -16131 -16132 -16133 -16134 -16135 -16136 -16137 -16138 -16139 -16140 -16141 -16142 -16143 -16144 -16145 -16146 -16147 -16148 -16149 -16150 -16151 -16152 -16153 -16154 -16155 -16156 -16157 -16158 -16159 -16160 -16161 -16162 -16163 -16164 -16165 -16166 -16167 -16168 -16169 -16170 -16171 -16172 -16173 -16174 -16175 -16176 -16177 -16178 -16179 -16180 -16181 -16182 -16183 -16184 -16185 -16186 -16187 -16188 -16189 -16190 -16191 -16192 -16193 -16194 -16195 -16196 -16197 -16198 -16199 -16200 -16201 -16202 -16203 -16204 -16205 -16206 -16207 -16208 -16209 -16210 -16211 -16212 -16213 -16214 -16215 -16216 -16217 -16218 -16219 -16220 -16221 -16222 -16223 -16224 -16225 -16226 -16227 -16228 -16229 -16230 -16231 -16232 -16233 -16234 -16235 -16236 -16237 -16238 -16239 -16240 -16241 -16242 -16243 -16244 -16245 -16246 -16247 -16248 -16249 -16250 -16251 -16252 -16253 -16254 -16255 -16256 -16257 -16258 -16259 -16260 -16261 -16262 -16263 -16264 -16265 -16266 -16267 -16268 -16269 -16270 -16271 -16272 -16273 -16274 -16275 -16276 -16277 -16278 -16279 -16280 -16281 -16282 -16283 -16284 -16285 -16286 -16287 -16288 -16289 -16290 -16291 -16292 -16293 -16294 -16295 -16296 -16297 -16298 -16299 -16300 -16301 -16302 -16303 -16304 -16305 -16306 -16307 -16308 -16309 -16310 -16311 -16312 -16313 -16314 -16315 -16316 -16317 -16318 -16319 -16320 -16321 -16322 -16323 -16324 -16325 -16326 -16327 -16328 -16329 -16330 -16331 -16332 -16333 -16334 -16335 -16336 -16337 -16338 -16339 -16340 -16341 -16342 -16343 -16344 -16345 -16346 -16347 -16348 -16349 -16350 -16351 -16352 -16353 -16354 -16355 -16356 -16357 -16358 -16359 -16360 -16361 -16362 -16363 -16364 -16365 -16366 -16367 -16368 -16369 -16370 -16371 -16372 -16373 -16374 -16375 -16376 -16377 -16378 -16379 -16380 -16381 -16382 -16383 -16384 -16385 -16386 -16387 -16388 -16389 -16390 -16391 -16392 -16393 -16394 -16395 -16396 -16397 -16398 -16399 -16400 -16401 -16402 -16403 -16404 -16405 -16406 -16407 -16408 -16409 -16410 -16411 -16412 -16413 -16414 -16415 -16416 -16417 -16418 -16419 -16420 -16421 -16422 -16423 -16424 -16425 -16426 -16427 -16428 -16429 -16430 -16431 -16432 -16433 -16434 -16435 -16436 -16437 -16438 -16439 -16440 -16441 -16442 -16443 -16444 -16445 -16446 -16447 -16448 -16449 -16450 -16451 -16452 -16453 -16454 -16455 -16456 -16457 -16458 -16459 -16460 -16461 -16462 -16463 -16464 -16465 -16466 -16467 -16468 -16469 -16470 -16471 -16472 -16473 -16474 -16475 -16476 -16477 -16478 -16479 -16480 -16481 -16482 -16483 -16484 -16485 -16486 -16487 -16488 -16489 -16490 -16491 -16492 -16493 -16494 -16495 -16496 -16497 -16498 -16499 -16500 -16501 -16502 -16503 -16504 -16505 -16506 -16507 -16508 -16509 -16510 -16511 -16512 -16513 -16514 -16515 -16516 -16517 -16518 -16519 -16520 -16521 -16522 -16523 -16524 -16525 -16526 -16527 -16528 -16529 -16530 -16531 -16532 -16533 -16534 -16535 -16536 -16537 -16538 -16539 -16540 -16541 -16542 -16543 -16544 -16545 -16546 -16547 -16548 -16549 -16550 -16551 -16552 -16553 -16554 -16555 -16556 -16557 -16558 -16559 -16560 -16561 -16562 -16563 -16564 -16565 -16566 -16567 -16568 -16569 -16570 -16571 -16572 -16573 -16574 -16575 -16576 -16577 -16578 -16579 -16580 -16581 -16582 -16583 -16584 -16585 -16586 -16587 -16588 -16589 -16590 -16591 -16592 -16593 -16594 -16595 -16596 -16597 -16598 -16599 -16600 -16601 -16602 -16603 -16604 -16605 -16606 -16607 -16608 -16609 -16610 -16611 -16612 -16613 -16614 -16615 -16616 -16617 -16618 -16619 -16620 -16621 -16622 -16623 -16624 -16625 -16626 -16627 -16628 -16629 -16630 -16631 -16632 -16633 -16634 -16635 -16636 -16637 -16638 -16639 -16640 -16641 -16642 -16643 -16644 -16645 -16646 -16647 -16648 -16649 -16650 -16651 -16652 -16653 -16654 -16655 -16656 -16657 -16658 -16659 -16660 -16661 -16662 -16663 -16664 -16665 -16666 -16667 -16668 -16669 -16670 -16671 -16672 -16673 -16674 -16675 -16676 -16677 -16678 -16679 -16680 -16681 -16682 -16683 -16684 -16685 -16686 -16687 -16688 -16689 -16690 -16691 -16692 -16693 -16694 -16695 -16696 -16697 -16698 -16699 -16700 -16701 -16702 -16703 -16704 -16705 -16706 -16707 -16708 -16709 -16710 -16711 -16712 -16713 -16714 -16715 -16716 -16717 -16718 -16719 -16720 -16721 -16722 -16723 -16724 -16725 -16726 -16727 -16728 -16729 -16730 -16731 -16732 -16733 -16734 -16735 -16736 -16737 -16738 -16739 -16740 -16741 -16742 -16743 -16744 -16745 -16746 -16747 -16748 -16749 -16750 -16751 -16752 -16753 -16754 -16755 -16756 -16757 -16758 -16759 -16760 -16761 -16762 -16763 -16764 -16765 -16766 -16767 -16768 -16769 -16770 -16771 -16772 -16773 -16774 -16775 -16776 -16777 -16778 -16779 -16780 -16781 -16782 -16783 -16784 -16785 -16786 -16787 -16788 -16789 -16790 -16791 -16792 -16793 -16794 -16795 -16796 -16797 -16798 -16799 -16800 -16801 -16802 -16803 -16804 -16805 -16806 -16807 -16808 -16809 -16810 -16811 -16812 -16813 -16814 -16815 -16816 -16817 -16818 -16819 -16820 -16821 -16822 -16823 -16824 -16825 -16826 -16827 -16828 -16829 -16830 -16831 -16832 -16833 -16834 -16835 -16836 -16837 -16838 -16839 -16840 -16841 -16842 -16843 -16844 -16845 -16846 -16847 -16848 -16849 -16850 -16851 -16852 -16853 -16854 -16855 -16856 -16857 -16858 -16859 -16860 -16861 -16862 -16863 -16864 -16865 -16866 -16867 -16868 -16869 -16870 -16871 -16872 -16873 -16874 -16875 -16876 -16877 -16878 -16879 -16880 -16881 -16882 -16883 -16884 -16885 -16886 -16887 -16888 -16889 -16890 -16891 -16892 -16893 -16894 -16895 -16896 -16897 -16898 -16899 -16900 -16901 -16902 -16903 -16904 -16905 -16906 -16907 -16908 -16909 -16910 -16911 -16912 -16913 -16914 -16915 -16916 -16917 -16918 -16919 -16920 -16921 -16922 -16923 -16924 -16925 -16926 -16927 -16928 -16929 -16930 -16931 -16932 -16933 -16934 -16935 -16936 -16937 -16938 -16939 -16940 -16941 -16942 -16943 -16944 -16945 -16946 -16947 -16948 -16949 -16950 -16951 -16952 -16953 -16954 -16955 -16956 -16957 -16958 -16959 -16960 -16961 -16962 -16963 -16964 -16965 -16966 -16967 -16968 -16969 -16970 -16971 -16972 -16973 -16974 -16975 -16976 -16977 -16978 -16979 -16980 -16981 -16982 -16983 -16984 -16985 -16986 -16987 -16988 -16989 -16990 -16991 -16992 -16993 -16994 -16995 -16996 -16997 -16998 -16999 -17000 -17001 -17002 -17003 -17004 -17005 -17006 -17007 -17008 -17009 -17010 -17011 -17012 -17013 -17014 -17015 -17016 -17017 -17018 -17019 -17020 -17021 -17022 -17023 -17024 -17025 -17026 -17027 -17028 -17029 -17030 -17031 -17032 -17033 -17034 -17035 -17036 -17037 -17038 -17039 -17040 -17041 -17042 -17043 -17044 -17045 -17046 -17047 -17048 -17049 -17050 -17051 -17052 -17053 -17054 -17055 -17056 -17057 -17058 -17059 -17060 -17061 -17062 -17063 -17064 -17065 -17066 -17067 -17068 -17069 -17070 -17071 -17072 -17073 -17074 -17075 -17076 -17077 -17078 -17079 -17080 -17081 -17082 -17083 -17084 -17085 -17086 -17087 -17088 -17089 -17090 -17091 -17092 -17093 -17094 -17095 -17096 -17097 -17098 -17099 -17100 -17101 -17102 -17103 -17104 -17105 -17106 -17107 -17108 -17109 -17110 -17111 -17112 -17113 -17114 -17115 -17116 -17117 -17118 -17119 -17120 -17121 -17122 -17123 -17124 -17125 -17126 -17127 -17128 -17129 -17130 -17131 -17132 -17133 -17134 -17135 -17136 -17137 -17138 -17139 -17140 -17141 -17142 -17143 -17144 -17145 -17146 -17147 -17148 -17149 -17150 -17151 -17152 -17153 -17154 -17155 -17156 -17157 -17158 -17159 -17160 -17161 -17162 -17163 -17164 -17165 -17166 -17167 -17168 -17169 -17170 -17171 -17172 -17173 -17174 -17175 -17176 -17177 -17178 -17179 -17180 -17181 -17182 -17183 -17184 -17185 -17186 -17187 -17188 -17189 -17190 -17191 -17192 -17193 -17194 -17195 -17196 -17197 -17198 -17199 -17200 -17201 -17202 -17203 -17204 -17205 -17206 -17207 -17208 -17209 -17210 -17211 -17212 -17213 -17214 -17215 -17216 -17217 -17218 -17219 -17220 -17221 -17222 -17223 -17224 -17225 -17226 -17227 -17228 -17229 -17230 -17231 -17232 -17233 -17234 -17235 -17236 -17237 -17238 -17239 -17240 -17241 -17242 -17243 -17244 -17245 -17246 -17247 -17248 -17249 -17250 -17251 -17252 -17253 -17254 -17255 -17256 -17257 -17258 -17259 -17260 -17261 -17262 -17263 -17264 -17265 -17266 -17267 -17268 -17269 -17270 -17271 -17272 -17273 -17274 -17275 -17276 -17277 -17278 -17279 -17280 -17281 -17282 -17283 -17284 -17285 -17286 -17287 -17288 -17289 -17290 -17291 -17292 -17293 -17294 -17295 -17296 -17297 -17298 -17299 -17300 -17301 -17302 -17303 -17304 -17305 -17306 -17307 -17308 -17309 -17310 -17311 -17312 -17313 -17314 -17315 -17316 -17317 -17318 -17319 -17320 -17321 -17322 -17323 -17324 -17325 -17326 -17327 -17328 -17329 -17330 -17331 -17332 -17333 -17334 -17335 -17336 -17337 -17338 -17339 -17340 -17341 -17342 -17343 -17344 -17345 -17346 -17347 -17348 -17349 -17350 -17351 -17352 -17353 -17354 -17355 -17356 -17357 -17358 -17359 -17360 -17361 -17362 -17363 -17364 -17365 -17366 -17367 -17368 -17369 -17370 -17371 -17372 -17373 -17374 -17375 -17376 -17377 -17378 -17379 -17380 -17381 -17382 -17383 -17384 -17385 -17386 -17387 -17388 -17389 -17390 -17391 -17392 -17393 -17394 -17395 -17396 -17397 -17398 -17399 -17400 -17401 -17402 -17403 -17404 -17405 -17406 -17407 -17408 -17409 -17410 -17411 -17412 -17413 -17414 -17415 -17416 -17417 -17418 -17419 -17420 -17421 -17422 -17423 -17424 -17425 -17426 -17427 -17428 -17429 -17430 -17431 -17432 -17433 -17434 -17435 -17436 -17437 -17438 -17439 -17440 -17441 -17442 -17443 -17444 -17445 -17446 -17447 -17448 -17449 -17450 -17451 -17452 -17453 -17454 -17455 -17456 -17457 -17458 -17459 -17460 -17461 -17462 -17463 -17464 -17465 -17466 -17467 -17468 -17469 -17470 -17471 -17472 -17473 -17474 -17475 -17476 -17477 -17478 -17479 -17480 -17481 -17482 -17483 -17484 -17485 -17486 -17487 -17488 -17489 -17490 -17491 -17492 -17493 -17494 -17495 -17496 -17497 -17498 -17499 -17500 -17501 -17502 -17503 -17504 -17505 -17506 -17507 -17508 -17509 -17510 -17511 -17512 -17513 -17514 -17515 -17516 -17517 -17518 -17519 -17520 -17521 -17522 -17523 -17524 -17525 -17526 -17527 -17528 -17529 -17530 -17531 -17532 -17533 -17534 -17535 -17536 -17537 -17538 -17539 -17540 -17541 -17542 -17543 -17544 -17545 -17546 -17547 -17548 -17549 -17550 -17551 -17552 -17553 -17554 -17555 -17556 -17557 -17558 -17559 -17560 -17561 -17562 -17563 -17564 -17565 -17566 -17567 -17568 -17569 -17570 -17571 -17572 -17573 -17574 -17575 -17576 -17577 -17578 -17579 -17580 -17581 -17582 -17583 -17584 -17585 -17586 -17587 -17588 -17589 -17590 -17591 -17592 -17593 -17594 -17595 -17596 -17597 -17598 -17599 -17600 -17601 -17602 -17603 -17604 -17605 -17606 -17607 -17608 -17609 -17610 -17611 -17612 -17613 -17614 -17615 -17616 -17617 -17618 -17619 -17620 -17621 -17622 -17623 -17624 -17625 -17626 -17627 -17628 -17629 -17630 -17631 -17632 -17633 -17634 -17635 -17636 -17637 -17638 -17639 -17640 -17641 -17642 -17643 -17644 -17645 -17646 -17647 -17648 -17649 -17650 -17651 -17652 -17653 -17654 -17655 -17656 -17657 -17658 -17659 -17660 -17661 -17662 -17663 -17664 -17665 -17666 -17667 -17668 -17669 -17670 -17671 -17672 -17673 -17674 -17675 -17676 -17677 -17678 -17679 -17680 -17681 -17682 -17683 -17684 -17685 -17686 -17687 -17688 -17689 -17690 -17691 -17692 -17693 -17694 -17695 -17696 -17697 -17698 -17699 -17700 -17701 -17702 -17703 -17704 -17705 -17706 -17707 -17708 -17709 -17710 -17711 -17712 -17713 -17714 -17715 -17716 -17717 -17718 -17719 -17720 -17721 -17722 -17723 -17724 -17725 -17726 -17727 -17728 -17729 -17730 -17731 -17732 -17733 -17734 -17735 -17736 -17737 -17738 -17739 -17740 -17741 -17742 -17743 -17744 -17745 -17746 -17747 -17748 -17749 -17750 -17751 -17752 -17753 -17754 -17755 -17756 -17757 -17758 -17759 -17760 -17761 -17762 -17763 -17764 -17765 -17766 -17767 -17768 -17769 -17770 -17771 -17772 -17773 -17774 -17775 -17776 -17777 -17778 -17779 -17780 -17781 -17782 -17783 -17784 -17785 -17786 -17787 -17788 -17789 -17790 -17791 -17792 -17793 -17794 -17795 -17796 -17797 -17798 -17799 -17800 -17801 -17802 -17803 -17804 -17805 -17806 -17807 -17808 -17809 -17810 -17811 -17812 -17813 -17814 -17815 -17816 -17817 -17818 -17819 -17820 -17821 -17822 -17823 -17824 -17825 -17826 -17827 -17828 -17829 -17830 -17831 -17832 -17833 -17834 -17835 -17836 -17837 -17838 -17839 -17840 -17841 -17842 -17843 -17844 -17845 -17846 -17847 -17848 -17849 -17850 -17851 -17852 -17853 -17854 -17855 -17856 -17857 -17858 -17859 -17860 -17861 -17862 -17863 -17864 -17865 -17866 -17867 -17868 -17869 -17870 -17871 -17872 -17873 -17874 -17875 -17876 -17877 -17878 -17879 -17880 -17881 -17882 -17883 -17884 -17885 -17886 -17887 -17888 -17889 -17890 -17891 -17892 -17893 -17894 -17895 -17896 -17897 -17898 -17899 -17900 -17901 -17902 -17903 -17904 -17905 -17906 -17907 -17908 -17909 -17910 -17911 -17912 -17913 -17914 -17915 -17916 -17917 -17918 -17919 -17920 -17921 -17922 -17923 -17924 -17925 -17926 -17927 -17928 -17929 -17930 -17931 -17932 -17933 -17934 -17935 -17936 -17937 -17938 -17939 -17940 -17941 -17942 -17943 -17944 -17945 -17946 -17947 -17948 -17949 -17950 -17951 -17952 -17953 -17954 -17955 -17956 -17957 -17958 -17959 -17960 -17961 -17962 -17963 -17964 -17965 -17966 -17967 -17968 -17969 -17970 -17971 -17972 -17973 -17974 -17975 -17976 -17977 -17978 -17979 -17980 -17981 -17982 -17983 -17984 -17985 -17986 -17987 -17988 -17989 -17990 -17991 -17992 -17993 -17994 -17995 -17996 -17997 -17998 -17999 -18000 -18001 -18002 -18003 -18004 -18005 -18006 -18007 -18008 -18009 -18010 -18011 -18012 -18013 -18014 -18015 -18016 -18017 -18018 -18019 -18020 -18021 -18022 -18023 -18024 -18025 -18026 -18027 -18028 -18029 -18030 -18031 -18032 -18033 -18034 -18035 -18036 -18037 -18038 -18039 -18040 -18041 -18042 -18043 -18044 -18045 -18046 -18047 -18048 -18049 -18050 -18051 -18052 -18053 -18054 -18055 -18056 -18057 -18058 -18059 -18060 -18061 -18062 -18063 -18064 -18065 -18066 -18067 -18068 -18069 -18070 -18071 -18072 -18073 -18074 -18075 -18076 -18077 -18078 -18079 -18080 -18081 -18082 -18083 -18084 -18085 -18086 -18087 -18088 -18089 -18090 -18091 -18092 -18093 -18094 -18095 -18096 -18097 -18098 -18099 -18100 -18101 -18102 -18103 -18104 -18105 -18106 -18107 -18108 -18109 -18110 -18111 -18112 -18113 -18114 -18115 -18116 -18117 -18118 -18119 -18120 -18121 -18122 -18123 -18124 -18125 -18126 -18127 -18128 -18129 -18130 -18131 -18132 -18133 -18134 -18135 -18136 -18137 -18138 -18139 -18140 -18141 -18142 -18143 -18144 -18145 -18146 -18147 -18148 -18149 -18150 -18151 -18152 -18153 -18154 -18155 -18156 -18157 -18158 -18159 -18160 -18161 -18162 -18163 -18164 -18165 -18166 -18167 -18168 -18169 -18170 -18171 -18172 -18173 -18174 -18175 -18176 -18177 -18178 -18179 -18180 -18181 -18182 -18183 -18184 -18185 -18186 -18187 -18188 -18189 -18190 -18191 -18192 -18193 -18194 -18195 -18196 -18197 -18198 -18199 -18200 -18201 -18202 -18203 -18204 -18205 -18206 -18207 -18208 -18209 -18210 -18211 -18212 -18213 -18214 -18215 -18216 -18217 -18218 -18219 -18220 -18221 -18222 -18223 -18224 -18225 -18226 -18227 -18228 -18229 -18230 -18231 -18232 -18233 -18234 -18235 -18236 -18237 -18238 -18239 -18240 -18241 -18242 -18243 -18244 -18245 -18246 -18247 -18248 -18249 -18250 -18251 -18252 -18253 -18254 -18255 -18256 -18257 -18258 -18259 -18260 -18261 -18262 -18263 -18264 -18265 -18266 -18267 -18268 -18269 -18270 -18271 -18272 -18273 -18274 -18275 -18276 -18277 -18278 -18279 -18280 -18281 -18282 -18283 -18284 -18285 -18286 -18287 -18288 -18289 -18290 -18291 -18292 -18293 -18294 -18295 -18296 -18297 -18298 -18299 -18300 -18301 -18302 -18303 -18304 -18305 -18306 -18307 -18308 -18309 -18310 -18311 -18312 -18313 -18314 -18315 -18316 -18317 -18318 -18319 -18320 -18321 -18322 -18323 -18324 -18325 -18326 -18327 -18328 -18329 -18330 -18331 -18332 -18333 -18334 -18335 -18336 -18337 -18338 -18339 -18340 -18341 -18342 -18343 -18344 -18345 -18346 -18347 -18348 -18349 -18350 -18351 -18352 -18353 -18354 -18355 -18356 -18357 -18358 -18359 -18360 -18361 -18362 -18363 -18364 -18365 -18366 -18367 -18368 -18369 -18370 -18371 -18372 -18373 -18374 -18375 -18376 -18377 -18378 -18379 -18380 -18381 -18382 -18383 -18384 -18385 -18386 -18387 -18388 -18389 -18390 -18391 -18392 -18393 -18394 -18395 -18396 -18397 -18398 -18399 -18400 -18401 -18402 -18403 -18404 -18405 -18406 -18407 -18408 -18409 -18410 -18411 -18412 -18413 -18414 -18415 -18416 -18417 -18418 -18419 -18420 -18421 -18422 -18423 -18424 -18425 -18426 -18427 -18428 -18429 -18430 -18431 -18432 -18433 -18434 -18435 -18436 -18437 -18438 -18439 -18440 -18441 -18442 -18443 -18444 -18445 -18446 -18447 -18448 -18449 -18450 -18451 -18452 -18453 -18454 -18455 -18456 -18457 -18458 -18459 -18460 -18461 -18462 -18463 -18464 -18465 -18466 -18467 -18468 -18469 -18470 -18471 -18472 -18473 -18474 -18475 -18476 -18477 -18478 -18479 -18480 -18481 -18482 -18483 -18484 -18485 -18486 -18487 -18488 -18489 -18490 -18491 -18492 -18493 -18494 -18495 -18496 -18497 -18498 -18499 -18500 -18501 -18502 -18503 -18504 -18505 -18506 -18507 -18508 -18509 -18510 -18511 -18512 -18513 -18514 -18515 -18516 -18517 -18518 -18519 -18520 -18521 -18522 -18523 -18524 -18525 -18526 -18527 -18528 -18529 -18530 -18531 -18532 -18533 -18534 -18535 -18536 -18537 -18538 -18539 -18540 -18541 -18542 -18543 -18544 -18545 -18546 -18547 -18548 -18549 -18550 -18551 -18552 -18553 -18554 -18555 -18556 -18557 -18558 -18559 -18560 -18561 -18562 -18563 -18564 -18565 -18566 -18567 -18568 -18569 -18570 -18571 -18572 -18573 -18574 -18575 -18576 -18577 -18578 -18579 -18580 -18581 -18582 -18583 -18584 -18585 -18586 -18587 -18588 -18589 -18590 -18591 -18592 -18593 -18594 -18595 -18596 -18597 -18598 -18599 -18600 -18601 -18602 -18603 -18604 -18605 -18606 -18607 -18608 -18609 -18610 -18611 -18612 -18613 -18614 -18615 -18616 -18617 -18618 -18619 -18620 -18621 -18622 -18623 -18624 -18625 -18626 -18627 -18628 -18629 -18630 -18631 -18632 -18633 -18634 -18635 -18636 -18637 -18638 -18639 -18640 -18641 -18642 -18643 -18644 -18645 -18646 -18647 -18648 -18649 -18650 -18651 -18652 -18653 -18654 -18655 -18656 -18657 -18658 -18659 -18660 -18661 -18662 -18663 -18664 -18665 -18666 -18667 -18668 -18669 -18670 -18671 -18672 -18673 -18674 -18675 -18676 -18677 -18678 -18679 -18680 -18681 -18682 -18683 -18684 -18685 -18686 -18687 -18688 -18689 -18690 -18691 -18692 -18693 -18694 -18695 -18696 -18697 -18698 -18699 -18700 -18701 -18702 -18703 -18704 -18705 -18706 -18707 -18708 -18709 -18710 -18711 -18712 -18713 -18714 -18715 -18716 -18717 -18718 -18719 -18720 -18721 -18722 -18723 -18724 -18725 -18726 -18727 -18728 -18729 -18730 -18731 -18732 -18733 -18734 -18735 -18736 -18737 -18738 -18739 -18740 -18741 -18742 -18743 -18744 -18745 -18746 -18747 -18748 -18749 -18750 -18751 -18752 -18753 -18754 -18755 -18756 -18757 -18758 -18759 -18760 -18761 -18762 -18763 -18764 -18765 -18766 -18767 -18768 -18769 -18770 -18771 -18772 -18773 -18774 -18775 -18776 -18777 -18778 -18779 -18780 -18781 -18782 -18783 -18784 -18785 -18786 -18787 -18788 -18789 -18790 -18791 -18792 -18793 -18794 -18795 -18796 -18797 -18798 -18799 -18800 -18801 -18802 -18803 -18804 -18805 -18806 -18807 -18808 -18809 -18810 -18811 -18812 -18813 -18814 -18815 -18816 -18817 -18818 -18819 -18820 -18821 -18822 -18823 -18824 -18825 -18826 -18827 -18828 -18829 -18830 -18831 -18832 -18833 -18834 -18835 -18836 -18837 -18838 -18839 -18840 -18841 -18842 -18843 -18844 -18845 -18846 -18847 -18848 -18849 -18850 -18851 -18852 -18853 -18854 -18855 -18856 -18857 -18858 -18859 -18860 -18861 -18862 -18863 -18864 -18865 -18866 -18867 -18868 -18869 -18870 -18871 -18872 -18873 -18874 -18875 -18876 -18877 -18878 -18879 -18880 -18881 -18882 -18883 -18884 -18885 -18886 -18887 -18888 -18889 -18890 -18891 -18892 -18893 -18894 -18895 -18896 -18897 -18898 -18899 -18900 -18901 -18902 -18903 -18904 -18905 -18906 -18907 -18908 -18909 -18910 -18911 -18912 -18913 -18914 -18915 -18916 -18917 -18918 -18919 -18920 -18921 -18922 -18923 -18924 -18925 -18926 -18927 -18928 -18929 -18930 -18931 -18932 -18933 -18934 -18935 -18936 -18937 -18938 -18939 -18940 -18941 -18942 -18943 -18944 -18945 -18946 -18947 -18948 -18949 -18950 -18951 -18952 -18953 -18954 -18955 -18956 -18957 -18958 -18959 -18960 -18961 -18962 -18963 -18964 -18965 -18966 -18967 -18968 -18969 -18970 -18971 -18972 -18973 -18974 -18975 -18976 -18977 -18978 -18979 -18980 -18981 -18982 -18983 -18984 -18985 -18986 -18987 -18988 -18989 -18990 -18991 -18992 -18993 -18994 -18995 -18996 -18997 -18998 -18999 -19000 -19001 -19002 -19003 -19004 -19005 -19006 -19007 -19008 -19009 -19010 -19011 -19012 -19013 -19014 -19015 -19016 -19017 -19018 -19019 -19020 -19021 -19022 -19023 -19024 -19025 -19026 -19027 -19028 -19029 -19030 -19031 -19032 -19033 -19034 -19035 -19036 -19037 -19038 -19039 -19040 -19041 -19042 -19043 -19044 -19045 -19046 -19047 -19048 -19049 -19050 -19051 -19052 -19053 -19054 -19055 -19056 -19057 -19058 -19059 -19060 -19061 -19062 -19063 -19064 -19065 -19066 -19067 -19068 -19069 -19070 -19071 -19072 -19073 -19074 -19075 -19076 -19077 -19078 -19079 -19080 -19081 -19082 -19083 -19084 -19085 -19086 -19087 -19088 -19089 -19090 -19091 -19092 -19093 -19094 -19095 -19096 -19097 -19098 -19099 -19100 -19101 -19102 -19103 -19104 -19105 -19106 -19107 -19108 -19109 -19110 -19111 -19112 -19113 -19114 -19115 -19116 -19117 -19118 -19119 -19120 -19121 -19122 -19123 -19124 -19125 -19126 -19127 -19128 -19129 -19130 -19131 -19132 -19133 -19134 -19135 -19136 -19137 -19138 -19139 -19140 -19141 -19142 -19143 -19144 -19145 -19146 -19147 -19148 -19149 -19150 -19151 -19152 -19153 -19154 -19155 -19156 -19157 -19158 -19159 -19160 -19161 -19162 -19163 -19164 -19165 -19166 -19167 -19168 -19169 -19170 -19171 -19172 -19173 -19174 -19175 -19176 -19177 -19178 -19179 -19180 -19181 -19182 -19183 -19184 -19185 -19186 -19187 -19188 -19189 -19190 -19191 -19192 -19193 -19194 -19195 -19196 -19197 -19198 -19199 -19200 -19201 -19202 -19203 -19204 -19205 -19206 -19207 -19208 -19209 -19210 -19211 -19212 -19213 -19214 -19215 -19216 -19217 -19218 -19219 -19220 -19221 -19222 -19223 -19224 -19225 -19226 -19227 -19228 -19229 -19230 -19231 -19232 -19233 -19234 -19235 -19236 -19237 -19238 -19239 -19240 -19241 -19242 -19243 -19244 -19245 -19246 -19247 -19248 -19249 -19250 -19251 -19252 -19253 -19254 -19255 -19256 -19257 -19258 -19259 -19260 -19261 -19262 -19263 -19264 -19265 -19266 -19267 -19268 -19269 -19270 -19271 -19272 -19273 -19274 -19275 -19276 -19277 -19278 -19279 -19280 -19281 -19282 -19283 -19284 -19285 -19286 -19287 -19288 -19289 -19290 -19291 -19292 -19293 -19294 -19295 -19296 -19297 -19298 -19299 -19300 -19301 -19302 -19303 -19304 -19305 -19306 -19307 -19308 -19309 -19310 -19311 -19312 -19313 -19314 -19315 -19316 -19317 -19318 -19319 -19320 -19321 -19322 -19323 -19324 -19325 -19326 -19327 -19328 -19329 -19330 -19331 -19332 -19333 -19334 -19335 -19336 -19337 -19338 -19339 -19340 -19341 -19342 -19343 -19344 -19345 -19346 -19347 -19348 -19349 -19350 -19351 -19352 -19353 -19354 -19355 -19356 -19357 -19358 -19359 -19360 -19361 -19362 -19363 -19364 -19365 -19366 -19367 -19368 -19369 -19370 -19371 -19372 -19373 -19374 -19375 -19376 -19377 -19378 -19379 -19380 -19381 -19382 -19383 -19384 -19385 -19386 -19387 -19388 -19389 -19390 -19391 -19392 -19393 -19394 -19395 -19396 -19397 -19398 -19399 -19400 -19401 -19402 -19403 -19404 -19405 -19406 -19407 -19408 -19409 -19410 -19411 -19412 -19413 -19414 -19415 -19416 -19417 -19418 -19419 -19420 -19421 -19422 -19423 -19424 -19425 -19426 -19427 -19428 -19429 -19430 -19431 -19432 -19433 -19434 -19435 -19436 -19437 -19438 -19439 -19440 -19441 -19442 -19443 -19444 -19445 -19446 -19447 -19448 -19449 -19450 -19451 -19452 -19453 -19454 -19455 -19456 -19457 -19458 -19459 -19460 -19461 -19462 -19463 -19464 -19465 -19466 -19467 -19468 -19469 -19470 -19471 -19472 -19473 -19474 -19475 -19476 -19477 -19478 -19479 -19480 -19481 -19482 -19483 -19484 -19485 -19486 -19487 -19488 -19489 -19490 -19491 -19492 -19493 -19494 -19495 -19496 -19497 -19498 -19499 -19500 -19501 -19502 -19503 -19504 -19505 -19506 -19507 -19508 -19509 -19510 -19511 -19512 -19513 -19514 -19515 -19516 -19517 -19518 -19519 -19520 -19521 -19522 -19523 -19524 -19525 -19526 -19527 -19528 -19529 -19530 -19531 -19532 -19533 -19534 -19535 -19536 -19537 -19538 -19539 -19540 -19541 -19542 -19543 -19544 -19545 -19546 -19547 -19548 -19549 -19550 -19551 -19552 -19553 -19554 -19555 -19556 -19557 -19558 -19559 -19560 -19561 -19562 -19563 -19564 -19565 -19566 -19567 -19568 -19569 -19570 -19571 -19572 -19573 -19574 -19575 -19576 -19577 -19578 -19579 -19580 -19581 -19582 -19583 -19584 -19585 -19586 -19587 -19588 -19589 -19590 -19591 -19592 -19593 -19594 -19595 -19596 -19597 -19598 -19599 -19600 -19601 -19602 -19603 -19604 -19605 -19606 -19607 -19608 -19609 -19610 -19611 -19612 -19613 -19614 -19615 -19616 -19617 -19618 -19619 -19620 -19621 -19622 -19623 -19624 -19625 -19626 -19627 -19628 -19629 -19630 -19631 -19632 -19633 -19634 -19635 -19636 -19637 -19638 -19639 -19640 -19641 -19642 -19643 -19644 -19645 -19646 -19647 -19648 -19649 -19650 -19651 -19652 -19653 -19654 -19655 -19656 -19657 -19658 -19659 -19660 -19661 -19662 -19663 -19664 -19665 -19666 -19667 -19668 -19669 -19670 -19671 -19672 -19673 -19674 -19675 -19676 -19677 -19678 -19679 -19680 -19681 -19682 -19683 -19684 -19685 -19686 -19687 -19688 -19689 -19690 -19691 -19692 -19693 -19694 -19695 -19696 -19697 -19698 -19699 -19700 -19701 -19702 -19703 -19704 -19705 -19706 -19707 -19708 -19709 -19710 -19711 -19712 -19713 -19714 -19715 -19716 -19717 -19718 -19719 -19720 -19721 -19722 -19723 -19724 -19725 -19726 -19727 -19728 -19729 -19730 -19731 -19732 -19733 -19734 -19735 -19736 -19737 -19738 -19739 -19740 -19741 -19742 -19743 -19744 -19745 -19746 -19747 -19748 -19749 -19750 -19751 -19752 -19753 -19754 -19755 -19756 -19757 -19758 -19759 -19760 -19761 -19762 -19763 -19764 -19765 -19766 -19767 -19768 -19769 -19770 -19771 -19772 -19773 -19774 -19775 -19776 -19777 -19778 -19779 -19780 -19781 -19782 -19783 -19784 -19785 -19786 -19787 -19788 -19789 -19790 -19791 -19792 -19793 -19794 -19795 -19796 -19797 -19798 -19799 -19800 -19801 -19802 -19803 -19804 -19805 -19806 -19807 -19808 -19809 -19810 -19811 -19812 -19813 -19814 -19815 -19816 -19817 -19818 -19819 -19820 -19821 -19822 -19823 -19824 -19825 -19826 -19827 -19828 -19829 -19830 -19831 -19832 -19833 -19834 -19835 -19836 -19837 -19838 -19839 -19840 -19841 -19842 -19843 -19844 -19845 -19846 -19847 -19848 -19849 -19850 -19851 -19852 -19853 -19854 -19855 -19856 -19857 -19858 -19859 -19860 -19861 -19862 -19863 -19864 -19865 -19866 -19867 -19868 -19869 -19870 -19871 -19872 -19873 -19874 -19875 -19876 -19877 -19878 -19879 -19880 -19881 -19882 -19883 -19884 -19885 -19886 -19887 -19888 -19889 -19890 -19891 -19892 -19893 -19894 -19895 -19896 -19897 -19898 -19899 -19900 -19901 -19902 -19903 -19904 -19905 -19906 -19907 -19908 -19909 -19910 -19911 -19912 -19913 -19914 -19915 -19916 -19917 -19918 -19919 -19920 -19921 -19922 -19923 -19924 -19925 -19926 -19927 -19928 -19929 -19930 -19931 -19932 -19933 -19934 -19935 -19936 -19937 -19938 -19939 -19940 -19941 -19942 -19943 -19944 -19945 -19946 -19947 -19948 -19949 -19950 -19951 -19952 -19953 -19954 -19955 -19956 -19957 -19958 -19959 -19960 -19961 -19962 -19963 -19964 -19965 -19966 -19967 -19968 -19969 -19970 -19971 -19972 -19973 -19974 -19975 -19976 -19977 -19978 -19979 -19980 -19981 -19982 -19983 -19984 -19985 -19986 -19987 -19988 -19989 -19990 -19991 -19992 -19993 -19994 -19995 -19996 -19997 -19998 -19999 -20000 -20001 -20002 -20003 -20004 -20005 -20006 -20007 -20008 -20009 -20010 -20011 -20012 -20013 -20014 -20015 -20016 -20017 -20018 -20019 -20020 -20021 -20022 -20023 -20024 -20025 -20026 -20027 -20028 -20029 -20030 -20031 -20032 -20033 -20034 -20035 -20036 -20037 -20038 -20039 -20040 -20041 -20042 -20043 -20044 -20045 -20046 -20047 -20048 -20049 -20050 -20051 -20052 -20053 -20054 -20055 -20056 -20057 -20058 -20059 -20060 -20061 -20062 -20063 -20064 -20065 -20066 -20067 -20068 -20069 -20070 -20071 -20072 -20073 -20074 -20075 -20076 -20077 -20078 -20079 -20080 -20081 -20082 -20083 -20084 -20085 -20086 -20087 -20088 -20089 -20090 -20091 -20092 -20093 -20094 -20095 -20096 -20097 -20098 -20099 -20100 -20101 -20102 -20103 -20104 -20105 -20106 -20107 -20108 -20109 -20110 -20111 -20112 -20113 -20114 -20115 -20116 -20117 -20118 -20119 -20120 -20121 -20122 -20123 -20124 -20125 -20126 -20127 -20128 -20129 -20130 -20131 -20132 -20133 -20134 -20135 -20136 -20137 -20138 -20139 -20140 -20141 -20142 -20143 -20144 -20145 -20146 -20147 -20148 -20149 -20150 -20151 -20152 -20153 -20154 -20155 -20156 -20157 -20158 -20159 -20160 -20161 -20162 -20163 -20164 -20165 -20166 -20167 -20168 -20169 -20170 -20171 -20172 -20173 -20174 -20175 -20176 -20177 -20178 -20179 -20180 -20181 -20182 -20183 -20184 -20185 -20186 -20187 -20188 -20189 -20190 -20191 -20192 -20193 -20194 -20195 -20196 -20197 -20198 -20199 -20200 -20201 -20202 -20203 -20204 -20205 -20206 -20207 -20208 -20209 -20210 -20211 -20212 -20213 -20214 -20215 -20216 -20217 -20218 -20219 -20220 -20221 -20222 -20223 -20224 -20225 -20226 -20227 -20228 -20229 -20230 -20231 -20232 -20233 -20234 -20235 -20236 -20237 -20238 -20239 -20240 -20241 -20242 -20243 -20244 -20245 -20246 -20247 -20248 -20249 -20250 -20251 -20252 -20253 -20254 -20255 -20256 -20257 -20258 -20259 -20260 -20261 -20262 -20263 -20264 -20265 -20266 -20267 -20268 -20269 -20270 -20271 -20272 -20273 -20274 -20275 -20276 -20277 -20278 -20279 -20280 -20281 -20282 -20283 -20284 -20285 -20286 -20287 -20288 -20289 -20290 -20291 -20292 -20293 -20294 -20295 -20296 -20297 -20298 -20299 -20300 -20301 -20302 -20303 -20304 -20305 -20306 -20307 -20308 -20309 -20310 -20311 -20312 -20313 -20314 -20315 -20316 -20317 -20318 -20319 -20320 -20321 -20322 -20323 -20324 -20325 -20326 -20327 -20328 -20329 -20330 -20331 -20332 -20333 -20334 -20335 -20336 -20337 -20338 -20339 -20340 -20341 -20342 -20343 -20344 -20345 -20346 -20347 -20348 -20349 -20350 -20351 -20352 -20353 -20354 -20355 -20356 -20357 -20358 -20359 -20360 -20361 -20362 -20363 -20364 -20365 -20366 -20367 -20368 -20369 -20370 -20371 -20372 -20373 -20374 -20375 -20376 -20377 -20378 -20379 -20380 -20381 -20382 -20383 -20384 -20385 -20386 -20387 -20388 -20389 -20390 -20391 -20392 -20393 -20394 -20395 -20396 -20397 -20398 -20399 -20400 -20401 -20402 -20403 -20404 -20405 -20406 -20407 -20408 -20409 -20410 -20411 -20412 -20413 -20414 -20415 -20416 -20417 -20418 -20419 -20420 -20421 -20422 -20423 -20424 -20425 -20426 -20427 -20428 -20429 -20430 -20431 -20432 -20433 -20434 -20435 -20436 -20437 -20438 -20439 -20440 -20441 -20442 -20443 -20444 -20445 -20446 -20447 -20448 -20449 -20450 -20451 -20452 -20453 -20454 -20455 -20456 -20457 -20458 -20459 -20460 -20461 -20462 -20463 -20464 -20465 -20466 -20467 -20468 -20469 -20470 -20471 -20472 -20473 -20474 -20475 -20476 -20477 -20478 -20479 -20480 -20481 -20482 -20483 -20484 -20485 -20486 -20487 -20488 -20489 -20490 -20491 -20492 -20493 -20494 -20495 -20496 -20497 -20498 -20499 -20500 -20501 -20502 -20503 -20504 -20505 -20506 -20507 -20508 -20509 -20510 -20511 -20512 -20513 -20514 -20515 -20516 -20517 -20518 -20519 -20520 -20521 -20522 -20523 -20524 -20525 -20526 -20527 -20528 -20529 -20530 -20531 -20532 -20533 -20534 -20535 -20536 -20537 -20538 -20539 -20540 -20541 -20542 -20543 -20544 -20545 -20546 -20547 -20548 -20549 -20550 -20551 -20552 -20553 -20554 -20555 -20556 -20557 -20558 -20559 -20560 -20561 -20562 -20563 -20564 -20565 -20566 -20567 -20568 -20569 -20570 -20571 -20572 -20573 -20574 -20575 -20576 -20577 -20578 -20579 -20580 -20581 -20582 -20583 -20584 -20585 -20586 -20587 -20588 -20589 -20590 -20591 -20592 -20593 -20594 -20595 -20596 -20597 -20598 -20599 -20600 -20601 -20602 -20603 -20604 -20605 -20606 -20607 -20608 -20609 -20610 -20611 -20612 -20613 -20614 -20615 -20616 -20617 -20618 -20619 -20620 -20621 -20622 -20623 -20624 -20625 -20626 -20627 -20628 -20629 -20630 -20631 -20632 -20633 -20634 -20635 -20636 -20637 -20638 -20639 -20640 -20641 -20642 -20643 -20644 -20645 -20646 -20647 -20648 -20649 -20650 -20651 -20652 -20653 -20654 -20655 -20656 -20657 -20658 -20659 -20660 -20661 -20662 -20663 -20664 -20665 -20666 -20667 -20668 -20669 -20670 -20671 -20672 -20673 -20674 -20675 -20676 -20677 -20678 -20679 -20680 -20681 -20682 -20683 -20684 -20685 -20686 -20687 -20688 -20689 -20690 -20691 -20692 -20693 -20694 -20695 -20696 -20697 -20698 -20699 -20700 -20701 -20702 -20703 -20704 -20705 -20706 -20707 -20708 -20709 -20710 -20711 -20712 -20713 -20714 -20715 -20716 -20717 -20718 -20719 -20720 -20721 -20722 -20723 -20724 -20725 -20726 -20727 -20728 -20729 -20730 -20731 -20732 -20733 -20734 -20735 -20736 -20737 -20738 -20739 -20740 -20741 -20742 -20743 -20744 -20745 -20746 -20747 -20748 -20749 -20750 -20751 -20752 -20753 -20754 -20755 -20756 -20757 -20758 -20759 -20760 -20761 -20762 -20763 -20764 -20765 -20766 -20767 -20768 -20769 -20770 -20771 -20772 -20773 -20774 -20775 -20776 -20777 -20778 -20779 -20780 -20781 -20782 -20783 -20784 -20785 -20786 -20787 -20788 -20789 -20790 -20791 -20792 -20793 -20794 -20795 -20796 -20797 -20798 -20799 -20800 -20801 -20802 -20803 -20804 -20805 -20806 -20807 -20808 -20809 -20810 -20811 -20812 -20813 -20814 -20815 -20816 -20817 -20818 -20819 -20820 -20821 -20822 -20823 -20824 -20825 -20826 -20827 -20828 -20829 -20830 -20831 -20832 -20833 -20834 -20835 -20836 -20837 -20838 -20839 -20840 -20841 -20842 -20843 -20844 -20845 -20846 -20847 -20848 -20849 -20850 -20851 -20852 -20853 -20854 -20855 -20856 -20857 -20858 -20859 -20860 -20861 -20862 -20863 -20864 -20865 -20866 -20867 -20868 -20869 -20870 -20871 -20872 -20873 -20874 -20875 -20876 -20877 -20878 -20879 -20880 -20881 -20882 -20883 -20884 -20885 -20886 -20887 -20888 -20889 -20890 -20891 -20892 -20893 -20894 -20895 -20896 -20897 -20898 -20899 -20900 -20901 -20902 -20903 -20904 -20905 -20906 -20907 -20908 -20909 -20910 -20911 -20912 -20913 -20914 -20915 -20916 -20917 -20918 -20919 -20920 -20921 -20922 -20923 -20924 -20925 -20926 -20927 -20928 -20929 -20930 -20931 -20932 -20933 -20934 -20935 -20936 -20937 -20938 -20939 -20940 -20941 -20942 -20943 -20944 -20945 -20946 -20947 -20948 -20949 -20950 -20951 -20952 -20953 -20954 -20955 -20956 -20957 -20958 -20959 -20960 -20961 -20962 -20963 -20964 -20965 -20966 -20967 -20968 -20969 -20970 -20971 -20972 -20973 -20974 -20975 -20976 -20977 -20978 -20979 -20980 -20981 -20982 -20983 -20984 -20985 -20986 -20987 -20988 -20989 -20990 -20991 -20992 -20993 -20994 -20995 -20996 -20997 -20998 -20999 -21000 -21001 -21002 -21003 -21004 -21005 -21006 -21007 -21008 -21009 -21010 -21011 -21012 -21013 -21014 -21015 -21016 -21017 -21018 -21019 -21020 -21021 -21022 -21023 -21024 -21025 -21026 -21027 -21028 -21029 -21030 -21031 -21032 -21033 -21034 -21035 -21036 -21037 -21038 -21039 -21040 -21041 -21042 -21043 -21044 -21045 -21046 -21047 -21048 -21049 -21050 -21051 -21052 -21053 -21054 -21055 -21056 -21057 -21058 -21059 -21060 -21061 -21062 -21063 -21064 -21065 -21066 -21067 -21068 -21069 -21070 -21071 -21072 -21073 -21074 -21075 -21076 -21077 -21078 -21079 -21080 -21081 -21082 -21083 -21084 -21085 -21086 -21087 -21088 -21089 -21090 -21091 -21092 -21093 -21094 -21095 -21096 -21097 -21098 -21099 -21100 -21101 -21102 -21103 -21104 -21105 -21106 -21107 -21108 -21109 -21110 -21111 -21112 -21113 -21114 -21115 -21116 -21117 -21118 -21119 -21120 -21121 -21122 -21123 -21124 -21125 -21126 -21127 -21128 -21129 -21130 -21131 -21132 -21133 -21134 -21135 -21136 -21137 -21138 -21139 -21140 -21141 -21142 -21143 -21144 -21145 -21146 -21147 -21148 -21149 -21150 -21151 -21152 -21153 -21154 -21155 -21156 -21157 -21158 -21159 -21160 -21161 -21162 -21163 -21164 -21165 -21166 -21167 -21168 -21169 -21170 -21171 -21172 -21173 -21174 -21175 -21176 -21177 -21178 -21179 -21180 -21181 -21182 -21183 -21184 -21185 -21186 -21187 -21188 -21189 -21190 -21191 -21192 -21193 -21194 -21195 -21196 -21197 -21198 -21199 -21200 -21201 -21202 -21203 -21204 -21205 -21206 -21207 -21208 -21209 -21210 -21211 -21212 -21213 -21214 -21215 -21216 -21217 -21218 -21219 -21220 -21221 -21222 -21223 -21224 -21225 -21226 -21227 -21228 -21229 -21230 -21231 -21232 -21233 -21234 -21235 -21236 -21237 -21238 -21239 -21240 -21241 -21242 -21243 -21244 -21245 -21246 -21247 -21248 -21249 -21250 -21251 -21252 -21253 -21254 -21255 -21256 -21257 -21258 -21259 -21260 -21261 -21262 -21263 -21264 -21265 -21266 -21267 -21268 -21269 -21270 -21271 -21272 -21273 -21274 -21275 -21276 -21277 -21278 -21279 -21280 -21281 -21282 -21283 -21284 -21285 -21286 -21287 -21288 -21289 -21290 -21291 -21292 -21293 -21294 -21295 -21296 -21297 -21298 -21299 -21300 -21301 -21302 -21303 -21304 -21305 -21306 -21307 -21308 -21309 -21310 -21311 -21312 -21313 -21314 -21315 -21316 -21317 -21318 -21319 -21320 -21321 -21322 -21323 -21324 -21325 -21326 -21327 -21328 -21329 -21330 -21331 -21332 -21333 -21334 -21335 -21336 -21337 -21338 -21339 -21340 -21341 -21342 -21343 -21344 -21345 -21346 -21347 -21348 -21349 -21350 -21351 -21352 -21353 -21354 -21355 -21356 -21357 -21358 -21359 -21360 -21361 -21362 -21363 -21364 -21365 -21366 -21367 -21368 -21369 -21370 -21371 -21372 -21373 -21374 -21375 -21376 -21377 -21378 -21379 -21380 -21381 -21382 -21383 -21384 -21385 -21386 -21387 -21388 -21389 -21390 -21391 -21392 -21393 -21394 -21395 -21396 -21397 -21398 -21399 -21400 -21401 -21402 -21403 -21404 -21405 -21406 -21407 -21408 -21409 -21410 -21411 -21412 -21413 -21414 -21415 -21416 -21417 -21418 -21419 -21420 -21421 -21422 -21423 -21424 -21425 -21426 -21427 -21428 -21429 -21430 -21431 -21432 -21433 -21434 -21435 -21436 -21437 -21438 -21439 -21440 -21441 -21442 -21443 -21444 -21445 -21446 -21447 -21448 -21449 -21450 -21451 -21452 -21453 -21454 -21455 -21456 -21457 -21458 -21459 -21460 -21461 -21462 -21463 -21464 -21465 -21466 -21467 -21468 -21469 -21470 -21471 -21472 -21473 -21474 -21475 -21476 -21477 -21478 -21479 -21480 -21481 -21482 -21483 -21484 -21485 -21486 -21487 -21488 -21489 -21490 -21491 -21492 -21493 -21494 -21495 -21496 -21497 -21498 -21499 -21500 -21501 -21502 -21503 -21504 -21505 -21506 -21507 -21508 -21509 -21510 -21511 -21512 -21513 -21514 -21515 -21516 -21517 -21518 -21519 -21520 -21521 -21522 -21523 -21524 -21525 -21526 -21527 -21528 -21529 -21530 -21531 -21532 -21533 -21534 -21535 -21536 -21537 -21538 -21539 -21540 -21541 -21542 -21543 -21544 -21545 -21546 -21547 -21548 -21549 -21550 -21551 -21552 -21553 -21554 -21555 -21556 -21557 -21558 -21559 -21560 -21561 -21562 -21563 -21564 -21565 -21566 -21567 -21568 -21569 -21570 -21571 -21572 -21573 -21574 -21575 -21576 -21577 -21578 -21579 -21580 -21581 -21582 -21583 -21584 -21585 -21586 -21587 -21588 -21589 -21590 -21591 -21592 -21593 -21594 -21595 -21596 -21597 -21598 -21599 -21600 -21601 -21602 -21603 -21604 -21605 -21606 -21607 -21608 -21609 -21610 -21611 -21612 -21613 -21614 -21615 -21616 -21617 -21618 -21619 -21620 -21621 -21622 -21623 -21624 -21625 -21626 -21627 -21628 -21629 -21630 -21631 -21632 -21633 -21634 -21635 -21636 -21637 -21638 -21639 -21640 -21641 -21642 -21643 -21644 -21645 -21646 -21647 -21648 -21649 -21650 -21651 -21652 -21653 -21654 -21655 -21656 -21657 -21658 -21659 -21660 -21661 -21662 -21663 -21664 -21665 -21666 -21667 -21668 -21669 -21670 -21671 -21672 -21673 -21674 -21675 -21676 -21677 -21678 -21679 -21680 -21681 -21682 -21683 -21684 -21685 -21686 -21687 -21688 -21689 -21690 -21691 -21692 -21693 -21694 -21695 -21696 -21697 -21698 -21699 -21700 -21701 -21702 -21703 -21704 -21705 -21706 -21707 -21708 -21709 -21710 -21711 -21712 -21713 -21714 -21715 -21716 -21717 -21718 -21719 -21720 -21721 -21722 -21723 -21724 -21725 -21726 -21727 -21728 -21729 -21730 -21731 -21732 -21733 -21734 -21735 -21736 -21737 -21738 -21739 -21740 -21741 -21742 -21743 -21744 -21745 -21746 -21747 -21748 -21749 -21750 -21751 -21752 -21753 -21754 -21755 -21756 -21757 -21758 -21759 -21760 -21761 -21762 -21763 -21764 -21765 -21766 -21767 -21768 -21769 -21770 -21771 -21772 -21773 -21774 -21775 -21776 -21777 -21778 -21779 -21780 -21781 -21782 -21783 -21784 -21785 -21786 -21787 -21788 -21789 -21790 -21791 -21792 -21793 -21794 -21795 -21796 -21797 -21798 -21799 -21800 -21801 -21802 -21803 -21804 -21805 -21806 -21807 -21808 -21809 -21810 -21811 -21812 -21813 -21814 -21815 -21816 -21817 -21818 -21819 -21820 -21821 -21822 -21823 -21824 -21825 -21826 -21827 -21828 -21829 -21830 -21831 -21832 -21833 -21834 -21835 -21836 -21837 -21838 -21839 -21840 -21841 -21842 -21843 -21844 -21845 -21846 -21847 -21848 -21849 -21850 -21851 -21852 -21853 -21854 -21855 -21856 -21857 -21858 -21859 -21860 -21861 -21862 -21863 -21864 -21865 -21866 -21867 -21868 -21869 -21870 -21871 -21872 -21873 -21874 -21875 -21876 -21877 -21878 -21879 -21880 -21881 -21882 -21883 -21884 -21885 -21886 -21887 -21888 -21889 -21890 -21891 -21892 -21893 -21894 -21895 -21896 -21897 -21898 -21899 -21900 -21901 -21902 -21903 -21904 -21905 -21906 -21907 -21908 -21909 -21910 -21911 -21912 -21913 -21914 -21915 -21916 -21917 -21918 -21919 -21920 -21921 -21922 -21923 -21924 -21925 -21926 -21927 -21928 -21929 -21930 -21931 -21932 -21933 -21934 -21935 -21936 -21937 -21938 -21939 -21940 -21941 -21942 -21943 -21944 -21945 -21946 -21947 -21948 -21949 -21950 -21951 -21952 -21953 -21954 -21955 -21956 -21957 -21958 -21959 -21960 -21961 -21962 -21963 -21964 -21965 -21966 -21967 -21968 -21969 -21970 -21971 -21972 -21973 -21974 -21975 -21976 -21977 -21978 -21979 -21980 -21981 -21982 -21983 -21984 -21985 -21986 -21987 -21988 -21989 -21990 -21991 -21992 -21993 -21994 -21995 -21996 -21997 -21998 -21999 -22000 -22001 -22002 -22003 -22004 -22005 -22006 -22007 -22008 -22009 -22010 -22011 -22012 -22013 -22014 -22015 -22016 -22017 -22018 -22019 -22020 -22021 -22022 -22023 -22024 -22025 -22026 -22027 -22028 -22029 -22030 -22031 -22032 -22033 -22034 -22035 -22036 -22037 -22038 -22039 -22040 -22041 -22042 -22043 -22044 -22045 -22046 -22047 -22048 -22049 -22050 -22051 -22052 -22053 -22054 -22055 -22056 -22057 -22058 -22059 -22060 -22061 -22062 -22063 -22064 -22065 -22066 -22067 -22068 -22069 -22070 -22071 -22072 -22073 -22074 -22075 -22076 -22077 -22078 -22079 -22080 -22081 -22082 -22083 -22084 -22085 -22086 -22087 -22088 -22089 -22090 -22091 -22092 -22093 -22094 -22095 -22096 -22097 -22098 -22099 -22100 -22101 -22102 -22103 -22104 -22105 -22106 -22107 -22108 -22109 -22110 -22111 -22112 -22113 -22114 -22115 -22116 -22117 -22118 -22119 -22120 -22121 -22122 -22123 -22124 -22125 -22126 -22127 -22128 -22129 -22130 -22131 -22132 -22133 -22134 -22135 -22136 -22137 -22138 -22139 -22140 -22141 -22142 -22143 -22144 -22145 -22146 -22147 -22148 -22149 -22150 -22151 -22152 -22153 -22154 -22155 -22156 -22157 -22158 -22159 -22160 -22161 -22162 -22163 -22164 -22165 -22166 -22167 -22168 -22169 -22170 -22171 -22172 -22173 -22174 -22175 -22176 -22177 -22178 -22179 -22180 -22181 -22182 -22183 -22184 -22185 -22186 -22187 -22188 -22189 -22190 -22191 -22192 -22193 -22194 -22195 -22196 -22197 -22198 -22199 -22200 -22201 -22202 -22203 -22204 -22205 -22206 -22207 -22208 -22209 -22210 -22211 -22212 -22213 -22214 -22215 -22216 -22217 -22218 -22219 -22220 -22221 -22222 -22223 -22224 -22225 -22226 -22227 -22228 -22229 -22230 -22231 -22232 -22233 -22234 -22235 -22236 -22237 -22238 -22239 -22240 -22241 -22242 -22243 -22244 -22245 -22246 -22247 -22248 -22249 -22250 -22251 -22252 -22253 -22254 -22255 -22256 -22257 -22258 -22259 -22260 -22261 -22262 -22263 -22264 -22265 -22266 -22267 -22268 -22269 -22270 -22271 -22272 -22273 -22274 -22275 -22276 -22277 -22278 -22279 -22280 -22281 -22282 -22283 -22284 -22285 -22286 -22287 -22288 -22289 -22290 -22291 -22292 -22293 -22294 -22295 -22296 -22297 -22298 -22299 -22300 -22301 -22302 -22303 -22304 -22305 -22306 -22307 -22308 -22309 -22310 -22311 -22312 -22313 -22314 -22315 -22316 -22317 -22318 -22319 -22320 -22321 -22322 -22323 -22324 -22325 -22326 -22327 -22328 -22329 -22330 -22331 -22332 -22333 -22334 -22335 -22336 -22337 -22338 -22339 -22340 -22341 -22342 -22343 -22344 -22345 -22346 -22347 -22348 -22349 -22350 -22351 -22352 -22353 -22354 -22355 -22356 -22357 -22358 -22359 -22360 -22361 -22362 -22363 -22364 -22365 -22366 -22367 -22368 -22369 -22370 -22371 -22372 -22373 -22374 -22375 -22376 -22377 -22378 -22379 -22380 -22381 -22382 -22383 -22384 -22385 -22386 -22387 -22388 -22389 -22390 -22391 -22392 -22393 -22394 -22395 -22396 -22397 -22398 -22399 -22400 -22401 -22402 -22403 -22404 -22405 -22406 -22407 -22408 -22409 -22410 -22411 -22412 -22413 -22414 -22415 -22416 -22417 -22418 -22419 -22420 -22421 -22422 -22423 -22424 -22425 -22426 -22427 -22428 -22429 -22430 -22431 -22432 -22433 -22434 -22435 -22436 -22437 -22438 -22439 -22440 -22441 -22442 -22443 -22444 -22445 -22446 -22447 -22448 -22449 -22450 -22451 -22452 -22453 -22454 -22455 -22456 -22457 -22458 -22459 -22460 -22461 -22462 -22463 -22464 -22465 -22466 -22467 -22468 -22469 -22470 -22471 -22472 -22473 -22474 -22475 -22476 -22477 -22478 -22479 -22480 -22481 -22482 -22483 -22484 -22485 -22486 -22487 -22488 -22489 -22490 -22491 -22492 -22493 -22494 -22495 -22496 -22497 -22498 -22499 -22500 -22501 -22502 -22503 -22504 -22505 -22506 -22507 -22508 -22509 -22510 -22511 -22512 -22513 -22514 -22515 -22516 -22517 -22518 -22519 -22520 -22521 -22522 -22523 -22524 -22525 -22526 -22527 -22528 -22529 -22530 -22531 -22532 -22533 -22534 -22535 -22536 -22537 -22538 -22539 -22540 -22541 -22542 -22543 -22544 -22545 -22546 -22547 -22548 -22549 -22550 -22551 -22552 -22553 -22554 -22555 -22556 -22557 -22558 -22559 -22560 -22561 -22562 -22563 -22564 -22565 -22566 -22567 -22568 -22569 -22570 -22571 -22572 -22573 -22574 -22575 -22576 -22577 -22578 -22579 -22580 -22581 -22582 -22583 -22584 -22585 -22586 -22587 -22588 -22589 -22590 -22591 -22592 -22593 -22594 -22595 -22596 -22597 -22598 -22599 -22600 -22601 -22602 -22603 -22604 -22605 -22606 -22607 -22608 -22609 -22610 -22611 -22612 -22613 -22614 -22615 -22616 -22617 -22618 -22619 -22620 -22621 -22622 -22623 -22624 -22625 -22626 -22627 -22628 -22629 -22630 -22631 -22632 -22633 -22634 -22635 -22636 -22637 -22638 -22639 -22640 -22641 -22642 -22643 -22644 -22645 -22646 -22647 -22648 -22649 -22650 -22651 -22652 -22653 -22654 -22655 -22656 -22657 -22658 -22659 -22660 -22661 -22662 -22663 -22664 -22665 -22666 -22667 -22668 -22669 -22670 -22671 -22672 -22673 -22674 -22675 -22676 -22677 -22678 -22679 -22680 -22681 -22682 -22683 -22684 -22685 -22686 -22687 -22688 -22689 -22690 -22691 -22692 -22693 -22694 -22695 -22696 -22697 -22698 -22699 -22700 -22701 -22702 -22703 -22704 -22705 -22706 -22707 -22708 -22709 -22710 -22711 -22712 -22713 -22714 -22715 -22716 -22717 -22718 -22719 -22720 -22721 -22722 -22723 -22724 -22725 -22726 -22727 -22728 -22729 -22730 -22731 -22732 -22733 -22734 -22735 -22736 -22737 -22738 -22739 -22740 -22741 -22742 -22743 -22744 -22745 -22746 -22747 -22748 -22749 -22750 -22751 -22752 -22753 -22754 -22755 -22756 -22757 -22758 -22759 -22760 -22761 -22762 -22763 -22764 -22765 -22766 -22767 -22768 -22769 -22770 -22771 -22772 -22773 -22774 -22775 -22776 -22777 -22778 -22779 -22780 -22781 -22782 -22783 -22784 -22785 -22786 -22787 -22788 -22789 -22790 -22791 -22792 -22793 -22794 -22795 -22796 -22797 -22798 -22799 -22800 -22801 -22802 -22803 -22804 -22805 -22806 -22807 -22808 -22809 -22810 -22811 -22812 -22813 -22814 -22815 -22816 -22817 -22818 -22819 -22820 -22821 -22822 -22823 -22824 -22825 -22826 -22827 -22828 -22829 -22830 -22831 -22832 -22833 -22834 -22835 -22836 -22837 -22838 -22839 -22840 -22841 -22842 -22843 -22844 -22845 -22846 -22847 -22848 -22849 -22850 -22851 -22852 -22853 -22854 -22855 -22856 -22857 -22858 -22859 -22860 -22861 -22862 -22863 -22864 -22865 -22866 -22867 -22868 -22869 -22870 -22871 -22872 -22873 -22874 -22875 -22876 -22877 -22878 -22879 -22880 -22881 -22882 -22883 -22884 -22885 -22886 -22887 -22888 -22889 -22890 -22891 -22892 -22893 -22894 -22895 -22896 -22897 -22898 -22899 -22900 -22901 -22902 -22903 -22904 -22905 -22906 -22907 -22908 -22909 -22910 -22911 -22912 -22913 -22914 -22915 -22916 -22917 -22918 -22919 -22920 -22921 -22922 -22923 -22924 -22925 -22926 -22927 -22928 -22929 -22930 -22931 -22932 -22933 -22934 -22935 -22936 -22937 -22938 -22939 -22940 -22941 -22942 -22943 -22944 -22945 -22946 -22947 -22948 -22949 -22950 -22951 -22952 -22953 -22954 -22955 -22956 -22957 -22958 -22959 -22960 -22961 -22962 -22963 -22964 -22965 -22966 -22967 -22968 -22969 -22970 -22971 -22972 -22973 -22974 -22975 -22976 -22977 -22978 -22979 -22980 -22981 -22982 -22983 -22984 -22985 -22986 -22987 -22988 -22989 -22990 -22991 -22992 -22993 -22994 -22995 -22996 -22997 -22998 -22999 -23000 -23001 -23002 -23003 -23004 -23005 -23006 -23007 -23008 -23009 -23010 -23011 -23012 -23013 -23014 -23015 -23016 -23017 -23018 -23019 -23020 -23021 -23022 -23023 -23024 -23025 -23026 -23027 -23028 -23029 -23030 -23031 -23032 -23033 -23034 -23035 -23036 -23037 -23038 -23039 -23040 -23041 -23042 -23043 -23044 -23045 -23046 -23047 -23048 -23049 -23050 -23051 -23052 -23053 -23054 -23055 -23056 -23057 -23058 -23059 -23060 -23061 -23062 -23063 -23064 -23065 -23066 -23067 -23068 -23069 -23070 -23071 -23072 -23073 -23074 -23075 -23076 -23077 -23078 -23079 -23080 -23081 -23082 -23083 -23084 -23085 -23086 -23087 -23088 -23089 -23090 -23091 -23092 -23093 -23094 -23095 -23096 -23097 -23098 -23099 -23100 -23101 -23102 -23103 -23104 -23105 -23106 -23107 -23108 -23109 -23110 -23111 -23112 -23113 -23114 -23115 -23116 -23117 -23118 -23119 -23120 -23121 -23122 -23123 -23124 -23125 -23126 -23127 -23128 -23129 -23130 -23131 -23132 -23133 -23134 -23135 -23136 -23137 -23138 -23139 -23140 -23141 -23142 -23143 -23144 -23145 -23146 -23147 -23148 -23149 -23150 -23151 -23152 -23153 -23154 -23155 -23156 -23157 -23158 -23159 -23160 -23161 -23162 -23163 -23164 -23165 -23166 -23167 -23168 -23169 -23170 -23171 -23172 -23173 -23174 -23175 -23176 -23177 -23178 -23179 -23180 -23181 -23182 -23183 -23184 -23185 -23186 -23187 -23188 -23189 -23190 -23191 -23192 -23193 -23194 -23195 -23196 -23197 -23198 -23199 -23200 -23201 -23202 -23203 -23204 -23205 -23206 -23207 -23208 -23209 -23210 -23211 -23212 -23213 -23214 -23215 -23216 -23217 -23218 -23219 -23220 -23221 -23222 -23223 -23224 -23225 -23226 -23227 -23228 -23229 -23230 -23231 -23232 -23233 -23234 -23235 -23236 -23237 -23238 -23239 -23240 -23241 -23242 -23243 -23244 -23245 -23246 -23247 -23248 -23249 -23250 -23251 -23252 -23253 -23254 -23255 -23256 -23257 -23258 -23259 -23260 -23261 -23262 -23263 -23264 -23265 -23266 -23267 -23268 -23269 -23270 -23271 -23272 -23273 -23274 -23275 -23276 -23277 -23278 -23279 -23280 -23281 -23282 -23283 -23284 -23285 -23286 -23287 -23288 -23289 -23290 -23291 -23292 -23293 -23294 -23295 -23296 -23297 -23298 -23299 -23300 -23301 -23302 -23303 -23304 -23305 -23306 -23307 -23308 -23309 -23310 -23311 -23312 -23313 -23314 -23315 -23316 -23317 -23318 -23319 -23320 -23321 -23322 -23323 -23324 -23325 -23326 -23327 -23328 -23329 -23330 -23331 -23332 -23333 -23334 -23335 -23336 -23337 -23338 -23339 -23340 -23341 -23342 -23343 -23344 -23345 -23346 -23347 -23348 -23349 -23350 -23351 -23352 -23353 -23354 -23355 -23356 -23357 -23358 -23359 -23360 -23361 -23362 -23363 -23364 -23365 -23366 -23367 -23368 -23369 -23370 -23371 -23372 -23373 -23374 -23375 -23376 -23377 -23378 -23379 -23380 -23381 -23382 -23383 -23384 -23385 -23386 -23387 -23388 -23389 -23390 -23391 -23392 -23393 -23394 -23395 -23396 -23397 -23398 -23399 -23400 -23401 -23402 -23403 -23404 -23405 -23406 -23407 -23408 -23409 -23410 -23411 -23412 -23413 -23414 -23415 -23416 -23417 -23418 -23419 -23420 -23421 -23422 -23423 -23424 -23425 -23426 -23427 -23428 -23429 -23430 -23431 -23432 -23433 -23434 -23435 -23436 -23437 -23438 -23439 -23440 -23441 -23442 -23443 -23444 -23445 -23446 -23447 -23448 -23449 -23450 -23451 -23452 -23453 -23454 -23455 -23456 -23457 -23458 -23459 -23460 -23461 -23462 -23463 -23464 -23465 -23466 -23467 -23468 -23469 -23470 -23471 -23472 -23473 -23474 -23475 -23476 -23477 -23478 -23479 -23480 -23481 -23482 -23483 -23484 -23485 -23486 -23487 -23488 -23489 -23490 -23491 -23492 -23493 -23494 -23495 -23496 -23497 -23498 -23499 -23500 -23501 -23502 -23503 -23504 -23505 -23506 -23507 -23508 -23509 -23510 -23511 -23512 -23513 -23514 -23515 -23516 -23517 -23518 -23519 -23520 -23521 -23522 -23523 -23524 -23525 -23526 -23527 -23528 -23529 -23530 -23531 -23532 -23533 -23534 -23535 -23536 -23537 -23538 -23539 -23540 -23541 -23542 -23543 -23544 -23545 -23546 -23547 -23548 -23549 -23550 -23551 -23552 -23553 -23554 -23555 -23556 -23557 -23558 -23559 -23560 -23561 -23562 -23563 -23564 -23565 -23566 -23567 -23568 -23569 -23570 -23571 -23572 -23573 -23574 -23575 -23576 -23577 -23578 -23579 -23580 -23581 -23582 -23583 -23584 -23585 -23586 -23587 -23588 -23589 -23590 -23591 -23592 -23593 -23594 -23595 -23596 -23597 -23598 -23599 -23600 -23601 -23602 -23603 -23604 -23605 -23606 -23607 -23608 -23609 -23610 -23611 -23612 -23613 -23614 -23615 -23616 -23617 -23618 -23619 -23620 -23621 -23622 -23623 -23624 -23625 -23626 -23627 -23628 -23629 -23630 -23631 -23632 -23633 -23634 -23635 -23636 -23637 -23638 -23639 -23640 -23641 -23642 -23643 -23644 -23645 -23646 -23647 -23648 -23649 -23650 -23651 -23652 -23653 -23654 -23655 -23656 -23657 -23658 -23659 -23660 -23661 -23662 -23663 -23664 -23665 -23666 -23667 -23668 -23669 -23670 -23671 -23672 -23673 -23674 -23675 -23676 -23677 -23678 -23679 -23680 -23681 -23682 -23683 -23684 -23685 -23686 -23687 -23688 -23689 -23690 -23691 -23692 -23693 -23694 -23695 -23696 -23697 -23698 -23699 -23700 -23701 -23702 -23703 -23704 -23705 -23706 -23707 -23708 -23709 -23710 -23711 -23712 -23713 -23714 -23715 -23716 -23717 -23718 -23719 -23720 -23721 -23722 -23723 -23724 -23725 -23726 -23727 -23728 -23729 -23730 -23731 -23732 -23733 -23734 -23735 -23736 -23737 -23738 -23739 -23740 -23741 -23742 -23743 -23744 -23745 -23746 -23747 -23748 -23749 -23750 -23751 -23752 -23753 -23754 -23755 -23756 -23757 -23758 -23759 -23760 -23761 -23762 -23763 -23764 -23765 -23766 -23767 -23768 -23769 -23770 -23771 -23772 -23773 -23774 -23775 -23776 -23777 -23778 -23779 -23780 -23781 -23782 -23783 -23784 -23785 -23786 -23787 -23788 -23789 -23790 -23791 -23792 -23793 -23794 -23795 -23796 -23797 -23798 -23799 -23800 -23801 -23802 -23803 -23804 -23805 -23806 -23807 -23808 -23809 -23810 -23811 -23812 -23813 -23814 -23815 -23816 -23817 -23818 -23819 -23820 -23821 -23822 -23823 -23824 -23825 -23826 -23827 -23828 -23829 -23830 -23831 -23832 -23833 -23834 -23835 -23836 -23837 -23838 -23839 -23840 -23841 -23842 -23843 -23844 -23845 -23846 -23847 -23848 -23849 -23850 -23851 -23852 -23853 -23854 -23855 -23856 -23857 -23858 -23859 -23860 -23861 -23862 -23863 -23864 -23865 -23866 -23867 -23868 -23869 -23870 -23871 -23872 -23873 -23874 -23875 -23876 -23877 -23878 -23879 -23880 -23881 -23882 -23883 -23884 -23885 -23886 -23887 -23888 -23889 -23890 -23891 -23892 -23893 -23894 -23895 -23896 -23897 -23898 -23899 -23900 -23901 -23902 -23903 -23904 -23905 -23906 -23907 -23908 -23909 -23910 -23911 -23912 -23913 -23914 -23915 -23916 -23917 -23918 -23919 -23920 -23921 -23922 -23923 -23924 -23925 -23926 -23927 -23928 -23929 -23930 -23931 -23932 -23933 -23934 -23935 -23936 -23937 -23938 -23939 -23940 -23941 -23942 -23943 -23944 -23945 -23946 -23947 -23948 -23949 -23950 -23951 -23952 -23953 -23954 -23955 -23956 -23957 -23958 -23959 -23960 -23961 -23962 -23963 -23964 -23965 -23966 -23967 -23968 -23969 -23970 -23971 -23972 -23973 -23974 -23975 -23976 -23977 -23978 -23979 -23980 -23981 -23982 -23983 -23984 -23985 -23986 -23987 -23988 -23989 -23990 -23991 -23992 -23993 -23994 -23995 -23996 -23997 -23998 -23999 -24000 -24001 -24002 -24003 -24004 -24005 -24006 -24007 -24008 -24009 -24010 -24011 -24012 -24013 -24014 -24015 -24016 -24017 -24018 -24019 -24020 -24021 -24022 -24023 -24024 -24025 -24026 -24027 -24028 -24029 -24030 -24031 -24032 -24033 -24034 -24035 -24036 -24037 -24038 -24039 -24040 -24041 -24042 -24043 -24044 -24045 -24046 -24047 -24048 -24049 -24050 -24051 -24052 -24053 -24054 -24055 -24056 -24057 -24058 -24059 -24060 -24061 -24062 -24063 -24064 -24065 -24066 -24067 -24068 -24069 -24070 -24071 -24072 -24073 -24074 -24075 -24076 -24077 -24078 -24079 -24080 -24081 -24082 -24083 -24084 -24085 -24086 -24087 -24088 -24089 -24090 -24091 -24092 -24093 -24094 -24095 -24096 -24097 -24098 -24099 -24100 -24101 -24102 -24103 -24104 -24105 -24106 -24107 -24108 -24109 -24110 -24111 -24112 -24113 -24114 -24115 -24116 -24117 -24118 -24119 -24120 -24121 -24122 -24123 -24124 -24125 -24126 -24127 -24128 -24129 -24130 -24131 -24132 -24133 -24134 -24135 -24136 -24137 -24138 -24139 -24140 -24141 -24142 -24143 -24144 -24145 -24146 -24147 -24148 -24149 -24150 -24151 -24152 -24153 -24154 -24155 -24156 -24157 -24158 -24159 -24160 -24161 -24162 -24163 -24164 -24165 -24166 -24167 -24168 -24169 -24170 -24171 -24172 -24173 -24174 -24175 -24176 -24177 -24178 -24179 -24180 -24181 -24182 -24183 -24184 -24185 -24186 -24187 -24188 -24189 -24190 -24191 -24192 -24193 -24194 -24195 -24196 -24197 -24198 -24199 -24200 -24201 -24202 -24203 -24204 -24205 -24206 -24207 -24208 -24209 -24210 -24211 -24212 -24213 -24214 -24215 -24216 -24217 -24218 -24219 -24220 -24221 -24222 -24223 -24224 -24225 -24226 -24227 -24228 -24229 -24230 -24231 -24232 -24233 -24234 -24235 -24236 -24237 -24238 -24239 -24240 -24241 -24242 -24243 -24244 -24245 -24246 -24247 -24248 -24249 -24250 -24251 -24252 -24253 -24254 -24255 -24256 -24257 -24258 -24259 -24260 -24261 -24262 -24263 -24264 -24265 -24266 -24267 -24268 -24269 -24270 -24271 -24272 -24273 -24274 -24275 -24276 -24277 -24278 -24279 -24280 -24281 -24282 -24283 -24284 -24285 -24286 -24287 -24288 -24289 -24290 -24291 -24292 -24293 -24294 -24295 -24296 -24297 -24298 -24299 -24300 -24301 -24302 -24303 -24304 -24305 -24306 -24307 -24308 -24309 -24310 -24311 -24312 -24313 -24314 -24315 -24316 -24317 -24318 -24319 -24320 -24321 -24322 -24323 -24324 -24325 -24326 -24327 -24328 -24329 -24330 -24331 -24332 -24333 -24334 -24335 -24336 -24337 -24338 -24339 -24340 -24341 -24342 -24343 -24344 -24345 -24346 -24347 -24348 -24349 -24350 -24351 -24352 -24353 -24354 -24355 -24356 -24357 -24358 -24359 -24360 -24361 -24362 -24363 -24364 -24365 -24366 -24367 -24368 -24369 -24370 -24371 -24372 -24373 -24374 -24375 -24376 -24377 -24378 -24379 -24380 -24381 -24382 -24383 -24384 -24385 -24386 -24387 -24388 -24389 -24390 -24391 -24392 -24393 -24394 -24395 -24396 -24397 -24398 -24399 -24400 -24401 -24402 -24403 -24404 -24405 -24406 -24407 -24408 -24409 -24410 -24411 -24412 -24413 -24414 -24415 -24416 -24417 -24418 -24419 -24420 -24421 -24422 -24423 -24424 -24425 -24426 -24427 -24428 -24429 -24430 -24431 -24432 -24433 -24434 -24435 -24436 -24437 -24438 -24439 -24440 -24441 -24442 -24443 -24444 -24445 -24446 -24447 -24448 -24449 -24450 -24451 -24452 -24453 -24454 -24455 -24456 -24457 -24458 -24459 -24460 -24461 -24462 -24463 -24464 -24465 -24466 -24467 -24468 -24469 -24470 -24471 -24472 -24473 -24474 -24475 -24476 -24477 -24478 -24479 -24480 -24481 -24482 -24483 -24484 -24485 -24486 -24487 -24488 -24489 -24490 -24491 -24492 -24493 -24494 -24495 -24496 -24497 -24498 -24499 -24500 -24501 -24502 -24503 -24504 -24505 -24506 -24507 -24508 -24509 -24510 -24511 -24512 -24513 -24514 -24515 -24516 -24517 -24518 -24519 -24520 -24521 -24522 -24523 -24524 -24525 -24526 -24527 -24528 -24529 -24530 -24531 -24532 -24533 -24534 -24535 -24536 -24537 -24538 -24539 -24540 -24541 -24542 -24543 -24544 -24545 -24546 -24547 -24548 -24549 -24550 -24551 -24552 -24553 -24554 -24555 -24556 -24557 -24558 -24559 -24560 -24561 -24562 -24563 -24564 -24565 -24566 -24567 -24568 -24569 -24570 -24571 -24572 -24573 -24574 -24575 -24576 -24577 -24578 -24579 -24580 -24581 -24582 -24583 -24584 -24585 -24586 -24587 -24588 -24589 -24590 -24591 -24592 -24593 -24594 -24595 -24596 -24597 -24598 -24599 -24600 -24601 -24602 -24603 -24604 -24605 -24606 -24607 -24608 -24609 -24610 -24611 -24612 -24613 -24614 -24615 -24616 -24617 -24618 -24619 -24620 -24621 -24622 -24623 -24624 -24625 -24626 -24627 -24628 -24629 -24630 -24631 -24632 -24633 -24634 -24635 -24636 -24637 -24638 -24639 -24640 -24641 -24642 -24643 -24644 -24645 -24646 -24647 -24648 -24649 -24650 -24651 -24652 -24653 -24654 -24655 -24656 -24657 -24658 -24659 -24660 -24661 -24662 -24663 -24664 -24665 -24666 -24667 -24668 -24669 -24670 -24671 -24672 -24673 -24674 -24675 -24676 -24677 -24678 -24679 -24680 -24681 -24682 -24683 -24684 -24685 -24686 -24687 -24688 -24689 -24690 -24691 -24692 -24693 -24694 -24695 -24696 -24697 -24698 -24699 -24700 -24701 -24702 -24703 -24704 -24705 -24706 -24707 -24708 -24709 -24710 -24711 -24712 -24713 -24714 -24715 -24716 -24717 -24718 -24719 -24720 -24721 -24722 -24723 -24724 -24725 -24726 -24727 -24728 -24729 -24730 -24731 -24732 -24733 -24734 -24735 -24736 -24737 -24738 -24739 -24740 -24741 -24742 -24743 -24744 -24745 -24746 -24747 -24748 -24749 -24750 -24751 -24752 -24753 -24754 -24755 -24756 -24757 -24758 -24759 -24760 -24761 -24762 -24763 -24764 -24765 -24766 -24767 -24768 -24769 -24770 -24771 -24772 -24773 -24774 -24775 -24776 -24777 -24778 -24779 -24780 -24781 -24782 -24783 -24784 -24785 -24786 -24787 -24788 -24789 -24790 -24791 -24792 -24793 -24794 -24795 -24796 -24797 -24798 -24799 -24800 -24801 -24802 -24803 -24804 -24805 -24806 -24807 -24808 -24809 -24810 -24811 -24812 -24813 -24814 -24815 -24816 -24817 -24818 -24819 -24820 -24821 -24822 -24823 -24824 -24825 -24826 -24827 -24828 -24829 -24830 -24831 -24832 -24833 -24834 -24835 -24836 -24837 -24838 -24839 -24840 -24841 -24842 -24843 -24844 -24845 -24846 -24847 -24848 -24849 -24850 -24851 -24852 -24853 -24854 -24855 -24856 -24857 -24858 -24859 -24860 -24861 -24862 -24863 -24864 -24865 -24866 -24867 -24868 -24869 -24870 -24871 -24872 -24873 -24874 -24875 -24876 -24877 -24878 -24879 -24880 -24881 -24882 -24883 -24884 -24885 -24886 -24887 -24888 -24889 -24890 -24891 -24892 -24893 -24894 -24895 -24896 -24897 -24898 -24899 -24900 -24901 -24902 -24903 -24904 -24905 -24906 -24907 -24908 -24909 -24910 -24911 -24912 -24913 -24914 -24915 -24916 -24917 -24918 -24919 -24920 -24921 -24922 -24923 -24924 -24925 -24926 -24927 -24928 -24929 -24930 -24931 -24932 -24933 -24934 -24935 -24936 -24937 -24938 -24939 -24940 -24941 -24942 -24943 -24944 -24945 -24946 -24947 -24948 -24949 -24950 -24951 -24952 -24953 -24954 -24955 -24956 -24957 -24958 -24959 -24960 -24961 -24962 -24963 -24964 -24965 -24966 -24967 -24968 -24969 -24970 -24971 -24972 -24973 -24974 -24975 -24976 -24977 -24978 -24979 -24980 -24981 -24982 -24983 -24984 -24985 -24986 -24987 -24988 -24989 -24990 -24991 -24992 -24993 -24994 -24995 -24996 -24997 -24998 -24999 -25000 -25001 -25002 -25003 -25004 -25005 -25006 -25007 -25008 -25009 -25010 -25011 -25012 -25013 -25014 -25015 -25016 -25017 -25018 -25019 -25020 -25021 -25022 -25023 -25024 -25025 -25026 -25027 -25028 -25029 -25030 -25031 -25032 -25033 -25034 -25035 -25036 -25037 -25038 -25039 -25040 -25041 -25042 -25043 -25044 -25045 -25046 -25047 -25048 -25049 -25050 -25051 -25052 -25053 -25054 -25055 -25056 -25057 -25058 -25059 -25060 -25061 -25062 -25063 -25064 -25065 -25066 -25067 -25068 -25069 -25070 -25071 -25072 -25073 -25074 -25075 -25076 -25077 -25078 -25079 -25080 -25081 -25082 -25083 -25084 -25085 -25086 -25087 -25088 -25089 -25090 -25091 -25092 -25093 -25094 -25095 -25096 -25097 -25098 -25099 -25100 -25101 -25102 -25103 -25104 -25105 -25106 -25107 -25108 -25109 -25110 -25111 -25112 -25113 -25114 -25115 -25116 -25117 -25118 -25119 -25120 -25121 -25122 -25123 -25124 -25125 -25126 -25127 -25128 -25129 -25130 -25131 -25132 -25133 -25134 -25135 -25136 -25137 -25138 -25139 -25140 -25141 -25142 -25143 -25144 -25145 -25146 -25147 -25148 -25149 -25150 -25151 -25152 -25153 -25154 -25155 -25156 -25157 -25158 -25159 -25160 -25161 -25162 -25163 -25164 -25165 -25166 -25167 -25168 -25169 -25170 -25171 -25172 -25173 -25174 -25175 -25176 -25177 -25178 -25179 -25180 -25181 -25182 -25183 -25184 -25185 -25186 -25187 -25188 -25189 -25190 -25191 -25192 -25193 -25194 -25195 -25196 -25197 -25198 -25199 -25200 -25201 -25202 -25203 -25204 -25205 -25206 -25207 -25208 -25209 -25210 -25211 -25212 -25213 -25214 -25215 -25216 -25217 -25218 -25219 -25220 -25221 -25222 -25223 -25224 -25225 -25226 -25227 -25228 -25229 -25230 -25231 -25232 -25233 -25234 -25235 -25236 -25237 -25238 -25239 -25240 -25241 -25242 -25243 -25244 -25245 -25246 -25247 -25248 -25249 -25250 -25251 -25252 -25253 -25254 -25255 -25256 -25257 -25258 -25259 -25260 -25261 -25262 -25263 -25264 -25265 -25266 -25267 -25268 -25269 -25270 -25271 -25272 -25273 -25274 -25275 -25276 -25277 -25278 -25279 -25280 -25281 -25282 -25283 -25284 -25285 -25286 -25287 -25288 -25289 -25290 -25291 -25292 -25293 -25294 -25295 -25296 -25297 -25298 -25299 -25300 -25301 -25302 -25303 -25304 -25305 -25306 -25307 -25308 -25309 -25310 -25311 -25312 -25313 -25314 -25315 -25316 -25317 -25318 -25319 -25320 -25321 -25322 -25323 -25324 -25325 -25326 -25327 -25328 -25329 -25330 -25331 -25332 -25333 -25334 -25335 -25336 -25337 -25338 -25339 -25340 -25341 -25342 -25343 -25344 -25345 -25346 -25347 -25348 -25349 -25350 -25351 -25352 -25353 -25354 -25355 -25356 -25357 -25358 -25359 -25360 -25361 -25362 -25363 -25364 -25365 -25366 -25367 -25368 -25369 -25370 -25371 -25372 -25373 -25374 -25375 -25376 -25377 -25378 -25379 -25380 -25381 -25382 -25383 -25384 -25385 -25386 -25387 -25388 -25389 -25390 -25391 -25392 -25393 -25394 -25395 -25396 -25397 -25398 -25399 -25400 -25401 -25402 -25403 -25404 -25405 -25406 -25407 -25408 -25409 -25410 -25411 -25412 -25413 -25414 -25415 -25416 -25417 -25418 -25419 -25420 -25421 -25422 -25423 -25424 -25425 -25426 -25427 -25428 -25429 -25430 -25431 -25432 -25433 -25434 -25435 -25436 -25437 -25438 -25439 -25440 -25441 -25442 -25443 -25444 -25445 -25446 -25447 -25448 -25449 -25450 -25451 -25452 -25453 -25454 -25455 -25456 -25457 -25458 -25459 -25460 -25461 -25462 -25463 -25464 -25465 -25466 -25467 -25468 -25469 -25470 -25471 -25472 -25473 -25474 -25475 -25476 -25477 -25478 -25479 -25480 -25481 -25482 -25483 -25484 -25485 -25486 -25487 -25488 -25489 -25490 -25491 -25492 -25493 -25494 -25495 -25496 -25497 -25498 -25499 -25500 -25501 -25502 -25503 -25504 -25505 -25506 -25507 -25508 -25509 -25510 -25511 -25512 -25513 -25514 -25515 -25516 -25517 -25518 -25519 -25520 -25521 -25522 -25523 -25524 -25525 -25526 -25527 -25528 -25529 -25530 -25531 -25532 -25533 -25534 -25535 -25536 -25537 -25538 -25539 -25540 -25541 -25542 -25543 -25544 -25545 -25546 -25547 -25548 -25549 -25550 -25551 -25552 -25553 -25554 -25555 -25556 -25557 -25558 -25559 -25560 -25561 -25562 -25563 -25564 -25565 -25566 -25567 -25568 -25569 -25570 -25571 -25572 -25573 -25574 -25575 -25576 -25577 -25578 -25579 -25580 -25581 -25582 -25583 -25584 -25585 -25586 -25587 -25588 -25589 -25590 -25591 -25592 -25593 -25594 -25595 -25596 -25597 -25598 -25599 -25600 -25601 -25602 -25603 -25604 -25605 -25606 -25607 -25608 -25609 -25610 -25611 -25612 -25613 -25614 -25615 -25616 -25617 -25618 -25619 -25620 -25621 -25622 -25623 -25624 -25625 -25626 -25627 -25628 -25629 -25630 -25631 -25632 -25633 -25634 -25635 -25636 -25637 -25638 -25639 -25640 -25641 -25642 -25643 -25644 -25645 -25646 -25647 -25648 -25649 -25650 -25651 -25652 -25653 -25654 -25655 -25656 -25657 -25658 -25659 -25660 -25661 -25662 -25663 -25664 -25665 -25666 -25667 -25668 -25669 -25670 -25671 -25672 -25673 -25674 -25675 -25676 -25677 -25678 -25679 -25680 -25681 -25682 -25683 -25684 -25685 -25686 -25687 -25688 -25689 -25690 -25691 -25692 -25693 -25694 -25695 -25696 -25697 -25698 -25699 -25700 -25701 -25702 -25703 -25704 -25705 -25706 -25707 -25708 -25709 -25710 -25711 -25712 -25713 -25714 -25715 -25716 -25717 -25718 -25719 -25720 -25721 -25722 -25723 -25724 -25725 -25726 -25727 -25728 -25729 -25730 -25731 -25732 -25733 -25734 -25735 -25736 -25737 -25738 -25739 -25740 -25741 -25742 -25743 -25744 -25745 -25746 -25747 -25748 -25749 -25750 -25751 -25752 -25753 -25754 -25755 -25756 -25757 -25758 -25759 -25760 -25761 -25762 -25763 -25764 -25765 -25766 -25767 -25768 -25769 -25770 -25771 -25772 -25773 -25774 -25775 -25776 -25777 -25778 -25779 -25780 -25781 -25782 -25783 -25784 -25785 -25786 -25787 -25788 -25789 -25790 -25791 -25792 -25793 -25794 -25795 -25796 -25797 -25798 -25799 -25800 -25801 -25802 -25803 -25804 -25805 -25806 -25807 -25808 -25809 -25810 -25811 -25812 -25813 -25814 -25815 -25816 -25817 -25818 -25819 -25820 -25821 -25822 -25823 -25824 -25825 -25826 -25827 -25828 -25829 -25830 -25831 -25832 -25833 -25834 -25835 -25836 -25837 -25838 -25839 -25840 -25841 -25842 -25843 -25844 -25845 -25846 -25847 -25848 -25849 -25850 -25851 -25852 -25853 -25854 -25855 -25856 -25857 -25858 -25859 -25860 -25861 -25862 -25863 -25864 -25865 -25866 -25867 -25868 -25869 -25870 -25871 -25872 -25873 -25874 -25875 -25876 -25877 -25878 -25879 -25880 -25881 -25882 -25883 -25884 -25885 -25886 -25887 -25888 -25889 -25890 -25891 -25892 -25893 -25894 -25895 -25896 -25897 -25898 -25899 -25900 -25901 -25902 -25903 -25904 -25905 -25906 -25907 -25908 -25909 -25910 -25911 -25912 -25913 -25914 -25915 -25916 -25917 -25918 -25919 -25920 -25921 -25922 -25923 -25924 -25925 -25926 -25927 -25928 -25929 -25930 -25931 -25932 -25933 -25934 -25935 -25936 -25937 -25938 -25939 -25940 -25941 -25942 -25943 -25944 -25945 -25946 -25947 -25948 -25949 -25950 -25951 -25952 -25953 -25954 -25955 -25956 -25957 -25958 -25959 -25960 -25961 -25962 -25963 -25964 -25965 -25966 -25967 -25968 -25969 -25970 -25971 -25972 -25973 -25974 -25975 -25976 -25977 -25978 -25979 -25980 -25981 -25982 -25983 -25984 -25985 -25986 -25987 -25988 -25989 -25990 -25991 -25992 -25993 -25994 -25995 -25996 -25997 -25998 -25999 -26000 -26001 -26002 -26003 -26004 -26005 -26006 -26007 -26008 -26009 -26010 -26011 -26012 -26013 -26014 -26015 -26016 -26017 -26018 -26019 -26020 -26021 -26022 -26023 -26024 -26025 -26026 -26027 -26028 -26029 -26030 -26031 -26032 -26033 -26034 -26035 -26036 -26037 -26038 -26039 -26040 -26041 -26042 -26043 -26044 -26045 -26046 -26047 -26048 -26049 -26050 -26051 -26052 -26053 -26054 -26055 -26056 -26057 -26058 -26059 -26060 -26061 -26062 -26063 -26064 -26065 -26066 -26067 -26068 -26069 -26070 -26071 -26072 -26073 -26074 -26075 -26076 -26077 -26078 -26079 -26080 -26081 -26082 -26083 -26084 -26085 -26086 -26087 -26088 -26089 -26090 -26091 -26092 -26093 -26094 -26095 -26096 -26097 -26098 -26099 -26100 -26101 -26102 -26103 -26104 -26105 -26106 -26107 -26108 -26109 -26110 -26111 -26112 -26113 -26114 -26115 -26116 -26117 -26118 -26119 -26120 -26121 -26122 -26123 -26124 -26125 -26126 -26127 -26128 -26129 -26130 -26131 -26132 -26133 -26134 -26135 -26136 -26137 -26138 -26139 -26140 -26141 -26142 -26143 -26144 -26145 -26146 -26147 -26148 -26149 -26150 -26151 -26152 -26153 -26154 -26155 -26156 -26157 -26158 -26159 -26160 -26161 -26162 -26163 -26164 -26165 -26166 -26167 -26168 -26169 -26170 -26171 -26172 -26173 -26174 -26175 -26176 -26177 -26178 -26179 -26180 -26181 -26182 -26183 -26184 -26185 -26186 -26187 -26188 -26189 -26190 -26191 -26192 -26193 -26194 -26195 -26196 -26197 -26198 -26199 -26200 -26201 -26202 -26203 -26204 -26205 -26206 -26207 -26208 -26209 -26210 -26211 -26212 -26213 -26214 -26215 -26216 -26217 -26218 -26219 -26220 -26221 -26222 -26223 -26224 -26225 -26226 -26227 -26228 -26229 -26230 -26231 -26232 -26233 -26234 -26235 -26236 -26237 -26238 -26239 -26240 -26241 -26242 -26243 -26244 -26245 -26246 -26247 -26248 -26249 -26250 -26251 -26252 -26253 -26254 -26255 -26256 -26257 -26258 -26259 -26260 -26261 -26262 -26263 -26264 -26265 -26266 -26267 -26268 -26269 -26270 -26271 -26272 -26273 -26274 -26275 -26276 -26277 -26278 -26279 -26280 -26281 -26282 -26283 -26284 -26285 -26286 -26287 -26288 -26289 -26290 -26291 -26292 -26293 -26294 -26295 -26296 -26297 -26298 -26299 -26300 -26301 -26302 -26303 -26304 -26305 -26306 -26307 -26308 -26309 -26310 -26311 -26312 -26313 -26314 -26315 -26316 -26317 -26318 -26319 -26320 -26321 -26322 -26323 -26324 -26325 -26326 -26327 -26328 -26329 -26330 -26331 -26332 -26333 -26334 -26335 -26336 -26337 -26338 -26339 -26340 -26341 -26342 -26343 -26344 -26345 -26346 -26347 -26348 -26349 -26350 -26351 -26352 -26353 -26354 -26355 -26356 -26357 -26358 -26359 -26360 -26361 -26362 -26363 -26364 -26365 -26366 -26367 -26368 -26369 -26370 -26371 -26372 -26373 -26374 -26375 -26376 -26377 -26378 -26379 -26380 -26381 -26382 -26383 -26384 -26385 -26386 -26387 -26388 -26389 -26390 -26391 -26392 -26393 -26394 -26395 -26396 -26397 -26398 -26399 -26400 -26401 -26402 -26403 -26404 -26405 -26406 -26407 -26408 -26409 -26410 -26411 -26412 -26413 -26414 -26415 -26416 -26417 -26418 -26419 -26420 -26421 -26422 -26423 -26424 -26425 -26426 -26427 -26428 -26429 -26430 -26431 -26432 -26433 -26434 -26435 -26436 -26437 -26438 -26439 -26440 -26441 -26442 -26443 -26444 -26445 -26446 -26447 -26448 -26449 -26450 -26451 -26452 -26453 -26454 -26455 -26456 -26457 -26458 -26459 -26460 -26461 -26462 -26463 -26464 -26465 -26466 -26467 -26468 -26469 -26470 -26471 -26472 -26473 -26474 -26475 -26476 -26477 -26478 -26479 -26480 -26481 -26482 -26483 -26484 -26485 -26486 -26487 -26488 -26489 -26490 -26491 -26492 -26493 -26494 -26495 -26496 -26497 -26498 -26499 -26500 -26501 -26502 -26503 -26504 -26505 -26506 -26507 -26508 -26509 -26510 -26511 -26512 -26513 -26514 -26515 -26516 -26517 -26518 -26519 -26520 -26521 -26522 -26523 -26524 -26525 -26526 -26527 -26528 -26529 -26530 -26531 -26532 -26533 -26534 -26535 -26536 -26537 -26538 -26539 -26540 -26541 -26542 -26543 -26544 -26545 -26546 -26547 -26548 -26549 -26550 -26551 -26552 -26553 -26554 -26555 -26556 -26557 -26558 -26559 -26560 -26561 -26562 -26563 -26564 -26565 -26566 -26567 -26568 -26569 -26570 -26571 -26572 -26573 -26574 -26575 -26576 -26577 -26578 -26579 -26580 -26581 -26582 -26583 -26584 -26585 -26586 -26587 -26588 -26589 -26590 -26591 -26592 -26593 -26594 -26595 -26596 -26597 -26598 -26599 -26600 -26601 -26602 -26603 -26604 -26605 -26606 -26607 -26608 -26609 -26610 -26611 -26612 -26613 -26614 -26615 -26616 -26617 -26618 -26619 -26620 -26621 -26622 -26623 -26624 -26625 -26626 -26627 -26628 -26629 -26630 -26631 -26632 -26633 -26634 -26635 -26636 -26637 -26638 -26639 -26640 -26641 -26642 -26643 -26644 -26645 -26646 -26647 -26648 -26649 -26650 -26651 -26652 -26653 -26654 -26655 -26656 -26657 -26658 -26659 -26660 -26661 -26662 -26663 -26664 -26665 -26666 -26667 -26668 -26669 -26670 -26671 -26672 -26673 -26674 -26675 -26676 -26677 -26678 -26679 -26680 -26681 -26682 -26683 -26684 -26685 -26686 -26687 -26688 -26689 -26690 -26691 -26692 -26693 -26694 -26695 -26696 -26697 -26698 -26699 -26700 -26701 -26702 -26703 -26704 -26705 -26706 -26707 -26708 -26709 -26710 -26711 -26712 -26713 -26714 -26715 -26716 -26717 -26718 -26719 -26720 -26721 -26722 -26723 -26724 -26725 -26726 -26727 -26728 -26729 -26730 -26731 -26732 -26733 -26734 -26735 -26736 -26737 -26738 -26739 -26740 -26741 -26742 -26743 -26744 -26745 -26746 -26747 -26748 -26749 -26750 -26751 -26752 -26753 -26754 -26755 -26756 -26757 -26758 -26759 -26760 -26761 -26762 -26763 -26764 -26765 -26766 -26767 -26768 -26769 -26770 -26771 -26772 -26773 -26774 -26775 -26776 -26777 -26778 -26779 -26780 -26781 -26782 -26783 -26784 -26785 -26786 -26787 -26788 -26789 -26790 -26791 -26792 -26793 -26794 -26795 -26796 -26797 -26798 -26799 -26800 -26801 -26802 -26803 -26804 -26805 -26806 -26807 -26808 -26809 -26810 -26811 -26812 -26813 -26814 -26815 -26816 -26817 -26818 -26819 -26820 -26821 -26822 -26823 -26824 -26825 -26826 -26827 -26828 -26829 -26830 -26831 -26832 -26833 -26834 -26835 -26836 -26837 -26838 -26839 -26840 -26841 -26842 -26843 -26844 -26845 -26846 -26847 -26848 -26849 -26850 -26851 -26852 -26853 -26854 -26855 -26856 -26857 -26858 -26859 -26860 -26861 -26862 -26863 -26864 -26865 -26866 -26867 -26868 -26869 -26870 -26871 -26872 -26873 -26874 -26875 -26876 -26877 -26878 -26879 -26880 -26881 -26882 -26883 -26884 -26885 -26886 -26887 -26888 -26889 -26890 -26891 -26892 -26893 -26894 -26895 -26896 -26897 -26898 -26899 -26900 -26901 -26902 -26903 -26904 -26905 -26906 -26907 -26908 -26909 -26910 -26911 -26912 -26913 -26914 -26915 -26916 -26917 -26918 -26919 -26920 -26921 -26922 -26923 -26924 -26925 -26926 -26927 -26928 -26929 -26930 -26931 -26932 -26933 -26934 -26935 -26936 -26937 -26938 -26939 -26940 -26941 -26942 -26943 -26944 -26945 -26946 -26947 -26948 -26949 -26950 -26951 -26952 -26953 -26954 -26955 -26956 -26957 -26958 -26959 -26960 -26961 -26962 -26963 -26964 -26965 -26966 -26967 -26968 -26969 -26970 -26971 -26972 -26973 -26974 -26975 -26976 -26977 -26978 -26979 -26980 -26981 -26982 -26983 -26984 -26985 -26986 -26987 -26988 -26989 -26990 -26991 -26992 -26993 -26994 -26995 -26996 -26997 -26998 -26999 -27000 -27001 -27002 -27003 -27004 -27005 -27006 -27007 -27008 -27009 -27010 -27011 -27012 -27013 -27014 -27015 -27016 -27017 -27018 -27019 -27020 -27021 -27022 -27023 -27024 -27025 -27026 -27027 -27028 -27029 -27030 -27031 -27032 -27033 -27034 -27035 -27036 -27037 -27038 -27039 -27040 -27041 -27042 -27043 -27044 -27045 -27046 -27047 -27048 -27049 -27050 -27051 -27052 -27053 -27054 -27055 -27056 -27057 -27058 -27059 -27060 -27061 -27062 -27063 -27064 -27065 -27066 -27067 -27068 -27069 -27070 -27071 -27072 -27073 -27074 -27075 -27076 -27077 -27078 -27079 -27080 -27081 -27082 -27083 -27084 -27085 -27086 -27087 -27088 -27089 -27090 -27091 -27092 -27093 -27094 -27095 -27096 -27097 -27098 -27099 -27100 -27101 -27102 -27103 -27104 -27105 -27106 -27107 -27108 -27109 -27110 -27111 -27112 -27113 -27114 -27115 -27116 -27117 -27118 -27119 -27120 -27121 -27122 -27123 -27124 -27125 -27126 -27127 -27128 -27129 -27130 -27131 -27132 -27133 -27134 -27135 -27136 -27137 -27138 -27139 -27140 -27141 -27142 -27143 -27144 -27145 -27146 -27147 -27148 -27149 -27150 -27151 -27152 -27153 -27154 -27155 -27156 -27157 -27158 -27159 -27160 -27161 -27162 -27163 -27164 -27165 -27166 -27167 -27168 -27169 -27170 -27171 -27172 -27173 -27174 -27175 -27176 -27177 -27178 -27179 -27180 -27181 -27182 -27183 -27184 -27185 -27186 -27187 -27188 -27189 -27190 -27191 -27192 -27193 -27194 -27195 -27196 -27197 -27198 -27199 -27200 -27201 -27202 -27203 -27204 -27205 -27206 -27207 -27208 -27209 -27210 -27211 -27212 -27213 -27214 -27215 -27216 -27217 -27218 -27219 -27220 -27221 -27222 -27223 -27224 -27225 -27226 -27227 -27228 -27229 -27230 -27231 -27232 -27233 -27234 -27235 -27236 -27237 -27238 -27239 -27240 -27241 -27242 -27243 -27244 -27245 -27246 -27247 -27248 -27249 -27250 -27251 -27252 -27253 -27254 -27255 -27256 -27257 -27258 -27259 -27260 -27261 -27262 -27263 -27264 -27265 -27266 -27267 -27268 -27269 -27270 -27271 -27272 -27273 -27274 -27275 -27276 -27277 -27278 -27279 -27280 -27281 -27282 -27283 -27284 -27285 -27286 -27287 -27288 -27289 -27290 -27291 -27292 -27293 -27294 -27295 -27296 -27297 -27298 -27299 -27300 -27301 -27302 -27303 -27304 -27305 -27306 -27307 -27308 -27309 -27310 -27311 -27312 -27313 -27314 -27315 -27316 -27317 -27318 -27319 -27320 -27321 -27322 -27323 -27324 -27325 -27326 -27327 -27328 -27329 -27330 -27331 -27332 -27333 -27334 -27335 -27336 -27337 -27338 -27339 -27340 -27341 -27342 -27343 -27344 -27345 -27346 -27347 -27348 -27349 -27350 -27351 -27352 -27353 -27354 -27355 -27356 -27357 -27358 -27359 -27360 -27361 -27362 -27363 -27364 -27365 -27366 -27367 -27368 -27369 -27370 -27371 -27372 -27373 -27374 -27375 -27376 -27377 -27378 -27379 -27380 -27381 -27382 -27383 -27384 -27385 -27386 -27387 -27388 -27389 -27390 -27391 -27392 -27393 -27394 -27395 -27396 -27397 -27398 -27399 -27400 -27401 -27402 -27403 -27404 -27405 -27406 -27407 -27408 -27409 -27410 -27411 -27412 -27413 -27414 -27415 -27416 -27417 -27418 -27419 -27420 -27421 -27422 -27423 -27424 -27425 -27426 -27427 -27428 -27429 -27430 -27431 -27432 -27433 -27434 -27435 -27436 -27437 -27438 -27439 -27440 -27441 -27442 -27443 -27444 -27445 -27446 -27447 -27448 -27449 -27450 -27451 -27452 -27453 -27454 -27455 -27456 -27457 -27458 -27459 -27460 -27461 -27462 -27463 -27464 -27465 -27466 -27467 -27468 -27469 -27470 -27471 -27472 -27473 -27474 -27475 -27476 -27477 -27478 -27479 -27480 -27481 -27482 -27483 -27484 -27485 -27486 -27487 -27488 -27489 -27490 -27491 -27492 -27493 -27494 -27495 -27496 -27497 -27498 -27499 -27500 -27501 -27502 -27503 -27504 -27505 -27506 -27507 -27508 -27509 -27510 -27511 -27512 -27513 -27514 -27515 -27516 -27517 -27518 -27519 -27520 -27521 -27522 -27523 -27524 -27525 -27526 -27527 -27528 -27529 -27530 -27531 -27532 -27533 -27534 -27535 -27536 -27537 -27538 -27539 -27540 -27541 -27542 -27543 -27544 -27545 -27546 -27547 -27548 -27549 -27550 -27551 -27552 -27553 -27554 -27555 -27556 -27557 -27558 -27559 -27560 -27561 -27562 -27563 -27564 -27565 -27566 -27567 -27568 -27569 -27570 -27571 -27572 -27573 -27574 -27575 -27576 -27577 -27578 -27579 -27580 -27581 -27582 -27583 -27584 -27585 -27586 -27587 -27588 -27589 -27590 -27591 -27592 -27593 -27594 -27595 -27596 -27597 -27598 -27599 -27600 -27601 -27602 -27603 -27604 -27605 -27606 -27607 -27608 -27609 -27610 -27611 -27612 -27613 -27614 -27615 -27616 -27617 -27618 -27619 -27620 -27621 -27622 -27623 -27624 -27625 -27626 -27627 -27628 -27629 -27630 -27631 -27632 -27633 -27634 -27635 -27636 -27637 -27638 -27639 -27640 -27641 -27642 -27643 -27644 -27645 -27646 -27647 -27648 -27649 -27650 -27651 -27652 -27653 -27654 -27655 -27656 -27657 -27658 -27659 -27660 -27661 -27662 -27663 -27664 -27665 -27666 -27667 -27668 -27669 -27670 -27671 -27672 -27673 -27674 -27675 -27676 -27677 -27678 -27679 -27680 -27681 -27682 -27683 -27684 -27685 -27686 -27687 -27688 -27689 -27690 -27691 -27692 -27693 -27694 -27695 -27696 -27697 -27698 -27699 -27700 -27701 -27702 -27703 -27704 -27705 -27706 -27707 -27708 -27709 -27710 -27711 -27712 -27713 -27714 -27715 -27716 -27717 -27718 -27719 -27720 -27721 -27722 -27723 -27724 -27725 -27726 -27727 -27728 -27729 -27730 -27731 -27732 -27733 -27734 -27735 -27736 -27737 -27738 -27739 -27740 -27741 -27742 -27743 -27744 -27745 -27746 -27747 -27748 -27749 -27750 -27751 -27752 -27753 -27754 -27755 -27756 -27757 -27758 -27759 -27760 -27761 -27762 -27763 -27764 -27765 -27766 -27767 -27768 -27769 -27770 -27771 -27772 -27773 -27774 -27775 -27776 -27777 -27778 -27779 -27780 -27781 -27782 -27783 -27784 -27785 -27786 -27787 -27788 -27789 -27790 -27791 -27792 -27793 -27794 -27795 -27796 -27797 -27798 -27799 -27800 -27801 -27802 -27803 -27804 -27805 -27806 -27807 -27808 -27809 -27810 -27811 -27812 -27813 -27814 -27815 -27816 -27817 -27818 -27819 -27820 -27821 -27822 -27823 -27824 -27825 -27826 -27827 -27828 -27829 -27830 -27831 -27832 -27833 -27834 -27835 -27836 -27837 -27838 -27839 -27840 -27841 -27842 -27843 -27844 -27845 -27846 -27847 -27848 -27849 -27850 -27851 -27852 -27853 -27854 -27855 -27856 -27857 -27858 -27859 -27860 -27861 -27862 -27863 -27864 -27865 -27866 -27867 -27868 -27869 -27870 -27871 -27872 -27873 -27874 -27875 -27876 -27877 -27878 -27879 -27880 -27881 -27882 -27883 -27884 -27885 -27886 -27887 -27888 -27889 -27890 -27891 -27892 -27893 -27894 -27895 -27896 -27897 -27898 -27899 -27900 -27901 -27902 -27903 -27904 -27905 -27906 -27907 -27908 -27909 -27910 -27911 -27912 -27913 -27914 -27915 -27916 -27917 -27918 -27919 -27920 -27921 -27922 -27923 -27924 -27925 -27926 -27927 -27928 -27929 -27930 -27931 -27932 -27933 -27934 -27935 -27936 -27937 -27938 -27939 -27940 -27941 -27942 -27943 -27944 -27945 -27946 -27947 -27948 -27949 -27950 -27951 -27952 -27953 -27954 -27955 -27956 -27957 -27958 -27959 -27960 -27961 -27962 -27963 -27964 -27965 -27966 -27967 -27968 -27969 -27970 -27971 -27972 -27973 -27974 -27975 -27976 -27977 -27978 -27979 -27980 -27981 -27982 -27983 -27984 -27985 -27986 -27987 -27988 -27989 -27990 -27991 -27992 -27993 -27994 -27995 -27996 -27997 -27998 -27999 -28000 -28001 -28002 -28003 -28004 -28005 -28006 -28007 -28008 -28009 -28010 -28011 -28012 -28013 -28014 -28015 -28016 -28017 -28018 -28019 -28020 -28021 -28022 -28023 -28024 -28025 -28026 -28027 -28028 -28029 -28030 -28031 -28032 -28033 -28034 -28035 -28036 -28037 -28038 -28039 -28040 -28041 -28042 -28043 -28044 -28045 -28046 -28047 -28048 -28049 -28050 -28051 -28052 -28053 -28054 -28055 -28056 -28057 -28058 -28059 -28060 -28061 -28062 -28063 -28064 -28065 -28066 -28067 -28068 -28069 -28070 -28071 -28072 -28073 -28074 -28075 -28076 -28077 -28078 -28079 -28080 -28081 -28082 -28083 -28084 -28085 -28086 -28087 -28088 -28089 -28090 -28091 -28092 -28093 -28094 -28095 -28096 -28097 -28098 -28099 -28100 -28101 -28102 -28103 -28104 -28105 -28106 -28107 -28108 -28109 -28110 -28111 -28112 -28113 -28114 -28115 -28116 -28117 -28118 -28119 -28120 -28121 -28122 -28123 -28124 -28125 -28126 -28127 -28128 -28129 -28130 -28131 -28132 -28133 -28134 -28135 -28136 -28137 -28138 -28139 -28140 -28141 -28142 -28143 -28144 -28145 -28146 -28147 -28148 -28149 -28150 -28151 -28152 -28153 -28154 -28155 -28156 -28157 -28158 -28159 -28160 -28161 -28162 -28163 -28164 -28165 -28166 -28167 -28168 -28169 -28170 -28171 -28172 -28173 -28174 -28175 -28176 -28177 -28178 -28179 -28180 -28181 -28182 -28183 -28184 -28185 -28186 -28187 -28188 -28189 -28190 -28191 -28192 -28193 -28194 -28195 -28196 -28197 -28198 -28199 -28200 -28201 -28202 -28203 -28204 -28205 -28206 -28207 -28208 -28209 -28210 -28211 -28212 -28213 -28214 -28215 -28216 -28217 -28218 -28219 -28220 -28221 -28222 -28223 -28224 -28225 -28226 -28227 -28228 -28229 -28230 -28231 -28232 -28233 -28234 -28235 -28236 -28237 -28238 -28239 -28240 -28241 -28242 -28243 -28244 -28245 -28246 -28247 -28248 -28249 -28250 -28251 -28252 -28253 -28254 -28255 -28256 -28257 -28258 -28259 -28260 -28261 -28262 -28263 -28264 -28265 -28266 -28267 -28268 -28269 -28270 -28271 -28272 -28273 -28274 -28275 -28276 -28277 -28278 -28279 -28280 -28281 -28282 -28283 -28284 -28285 -28286 -28287 -28288 -28289 -28290 -28291 -28292 -28293 -28294 -28295 -28296 -28297 -28298 -28299 -28300 -28301 -28302 -28303 -28304 -28305 -28306 -28307 -28308 -28309 -28310 -28311 -28312 -28313 -28314 -28315 -28316 -28317 -28318 -28319 -28320 -28321 -28322 -28323 -28324 -28325 -28326 -28327 -28328 -28329 -28330 -28331 -28332 -28333 -28334 -28335 -28336 -28337 -28338 -28339 -28340 -28341 -28342 -28343 -28344 -28345 -28346 -28347 -28348 -28349 -28350 -28351 -28352 -28353 -28354 -28355 -28356 -28357 -28358 -28359 -28360 -28361 -28362 -28363 -28364 -28365 -28366 -28367 -28368 -28369 -28370 -28371 -28372 -28373 -28374 -28375 -28376 -28377 -28378 -28379 -28380 -28381 -28382 -28383 -28384 -28385 -28386 -28387 -28388 -28389 -28390 -28391 -28392 -28393 -28394 -28395 -28396 -28397 -28398 -28399 -28400 -28401 -28402 -28403 -28404 -28405 -28406 -28407 -28408 -28409 -28410 -28411 -28412 -28413 -28414 -28415 -28416 -28417 -28418 -28419 -28420 -28421 -28422 -28423 -28424 -28425 -28426 -28427 -28428 -28429 -28430 -28431 -28432 -28433 -28434 -28435 -28436 -28437 -28438 -28439 -28440 -28441 -28442 -28443 -28444 -28445 -28446 -28447 -28448 -28449 -28450 -28451 -28452 -28453 -28454 -28455 -28456 -28457 -28458 -28459 -28460 -28461 -28462 -28463 -28464 -28465 -28466 -28467 -28468 -28469 -28470 -28471 -28472 -28473 -28474 -28475 -28476 -28477 -28478 -28479 -28480 -28481 -28482 -28483 -28484 -28485 -28486 -28487 -28488 -28489 -28490 -28491 -28492 -28493 -28494 -28495 -28496 -28497 -28498 -28499 -28500 -28501 -28502 -28503 -28504 -28505 -28506 -28507 -28508 -28509 -28510 -28511 -28512 -28513 -28514 -28515 -28516 -28517 -28518 -28519 -28520 -28521 -28522 -28523 -28524 -28525 -28526 -28527 -28528 -28529 -28530 -28531 -28532 -28533 -28534 -28535 -28536 -28537 -28538 -28539 -28540 -28541 -28542 -28543 -28544 -28545 -28546 -28547 -28548 -28549 -28550 -28551 -28552 -28553 -28554 -28555 -28556 -28557 -28558 -28559 -28560 -28561 -28562 -28563 -28564 -28565 -28566 -28567 -28568 -28569 -28570 -28571 -28572 -28573 -28574 -28575 -28576 -28577 -28578 -28579 -28580 -28581 -28582 -28583 -28584 -28585 -28586 -28587 -28588 -28589 -28590 -28591 -28592 -28593 -28594 -28595 -28596 -28597 -28598 -28599 -28600 -28601 -28602 -28603 -28604 -28605 -28606 -28607 -28608 -28609 -28610 -28611 -28612 -28613 -28614 -28615 -28616 -28617 -28618 -28619 -28620 -28621 -28622 -28623 -28624 -28625 -28626 -28627 -28628 -28629 -28630 -28631 -28632 -28633 -28634 -28635 -28636 -28637 -28638 -28639 -28640 -28641 -28642 -28643 -28644 -28645 -28646 -28647 -28648 -28649 -28650 -28651 -28652 -28653 -28654 -28655 -28656 -28657 -28658 -28659 -28660 -28661 -28662 -28663 -28664 -28665 -28666 -28667 -28668 -28669 -28670 -28671 -28672 -28673 -28674 -28675 -28676 -28677 -28678 -28679 -28680 -28681 -28682 -28683 -28684 -28685 -28686 -28687 -28688 -28689 -28690 -28691 -28692 -28693 -28694 -28695 -28696 -28697 -28698 -28699 -28700 -28701 -28702 -28703 -28704 -28705 -28706 -28707 -28708 -28709 -28710 -28711 -28712 -28713 -28714 -28715 -28716 -28717 -28718 -28719 -28720 -28721 -28722 -28723 -28724 -28725 -28726 -28727 -28728 -28729 -28730 -28731 -28732 -28733 -28734 -28735 -28736 -28737 -28738 -28739 -28740 -28741 -28742 -28743 -28744 -28745 -28746 -28747 -28748 -28749 -28750 -28751 -28752 -28753 -28754 -28755 -28756 -28757 -28758 -28759 -28760 -28761 -28762 -28763 -28764 -28765 -28766 -28767 -28768 -28769 -28770 -28771 -28772 -28773 -28774 -28775 -28776 -28777 -28778 -28779 -28780 -28781 -28782 -28783 -28784 -28785 -28786 -28787 -28788 -28789 -28790 -28791 -28792 -28793 -28794 -28795 -28796 -28797 -28798 -28799 -28800 -28801 -28802 -28803 -28804 -28805 -28806 -28807 -28808 -28809 -28810 -28811 -28812 -28813 -28814 -28815 -28816 -28817 -28818 -28819 -28820 -28821 -28822 -28823 -28824 -28825 -28826 -28827 -28828 -28829 -28830 -28831 -28832 -28833 -28834 -28835 -28836 -28837 -28838 -28839 -28840 -28841 -28842 -28843 -28844 -28845 -28846 -28847 -28848 -28849 -28850 -28851 -28852 -28853 -28854 -28855 -28856 -28857 -28858 -28859 -28860 -28861 -28862 -28863 -28864 -28865 -28866 -28867 -28868 -28869 -28870 -28871 -28872 -28873 -28874 -28875 -28876 -28877 -28878 -28879 -28880 -28881 -28882 -28883 -28884 -28885 -28886 -28887 -28888 -28889 -28890 -28891 -28892 -28893 -28894 -28895 -28896 -28897 -28898 -28899 -28900 -28901 -28902 -28903 -28904 -28905 -28906 -28907 -28908 -28909 -28910 -28911 -28912 -28913 -28914 -28915 -28916 -28917 -28918 -28919 -28920 -28921 -28922 -28923 -28924 -28925 -28926 -28927 -28928 -28929 -28930 -28931 -28932 -28933 -28934 -28935 -28936 -28937 -28938 -28939 -28940 -28941 -28942 -28943 -28944 -28945 -28946 -28947 -28948 -28949 -28950 -28951 -28952 -28953 -28954 -28955 -28956 -28957 -28958 -28959 -28960 -28961 -28962 -28963 -28964 -28965 -28966 -28967 -28968 -28969 -28970 -28971 -28972 -28973 -28974 -28975 -28976 -28977 -28978 -28979 -28980 -28981 -28982 -28983 -28984 -28985 -28986 -28987 -28988 -28989 -28990 -28991 -28992 -28993 -28994 -28995 -28996 -28997 -28998 -28999 -29000 -29001 -29002 -29003 -29004 -29005 -29006 -29007 -29008 -29009 -29010 -29011 -29012 -29013 -29014 -29015 -29016 -29017 -29018 -29019 -29020 -29021 -29022 -29023 -29024 -29025 -29026 -29027 -29028 -29029 -29030 -29031 -29032 -29033 -29034 -29035 -29036 -29037 -29038 -29039 -29040 -29041 -29042 -29043 -29044 -29045 -29046 -29047 -29048 -29049 -29050 -29051 -29052 -29053 -29054 -29055 -29056 -29057 -29058 -29059 -29060 -29061 -29062 -29063 -29064 -29065 -29066 -29067 -29068 -29069 -29070 -29071 -29072 -29073 -29074 -29075 -29076 -29077 -29078 -29079 -29080 -29081 -29082 -29083 -29084 -29085 -29086 -29087 -29088 -29089 -29090 -29091 -29092 -29093 -29094 -29095 -29096 -29097 -29098 -29099 -29100 -29101 -29102 -29103 -29104 -29105 -29106 -29107 -29108 -29109 -29110 -29111 -29112 -29113 -29114 -29115 -29116 -29117 -29118 -29119 -29120 -29121 -29122 -29123 -29124 -29125 -29126 -29127 -29128 -29129 -29130 -29131 -29132 -29133 -29134 -29135 -29136 -29137 -29138 -29139 -29140 -29141 -29142 -29143 -29144 -29145 -29146 -29147 -29148 -29149 -29150 -29151 -29152 -29153 -29154 -29155 -29156 -29157 -29158 -29159 -29160 -29161 -29162 -29163 -29164 -29165 -29166 -29167 -29168 -29169 -29170 -29171 -29172 -29173 -29174 -29175 -29176 -29177 -29178 -29179 -29180 -29181 -29182 -29183 -29184 -29185 -29186 -29187 -29188 -29189 -29190 -29191 -29192 -29193 -29194 -29195 -29196 -29197 -29198 -29199 -29200 -29201 -29202 -29203 -29204 -29205 -29206 -29207 -29208 -29209 -29210 -29211 -29212 -29213 -29214 -29215 -29216 -29217 -29218 -29219 -29220 -29221 -29222 -29223 -29224 -29225 -29226 -29227 -29228 -29229 -29230 -29231 -29232 -29233 -29234 -29235 -29236 -29237 -29238 -29239 -29240 -29241 -29242 -29243 -29244 -29245 -29246 -29247 -29248 -29249 -29250 -29251 -29252 -29253 -29254 -29255 -29256 -29257 -29258 -29259 -29260 -29261 -29262 -29263 -29264 -29265 -29266 -29267 -29268 -29269 -29270 -29271 -29272 -29273 -29274 -29275 -29276 -29277 -29278 -29279 -29280 -29281 -29282 -29283 -29284 -29285 -29286 -29287 -29288 -29289 -29290 -29291 -29292 -29293 -29294 -29295 -29296 -29297 -29298 -29299 -29300 -29301 -29302 -29303 -29304 -29305 -29306 -29307 -29308 -29309 -29310 -29311 -29312 -29313 -29314 -29315 -29316 -29317 -29318 -29319 -29320 -29321 -29322 -29323 -29324 -29325 -29326 -29327 -29328 -29329 -29330 -29331 -29332 -29333 -29334 -29335 -29336 -29337 -29338 -29339 -29340 -29341 -29342 -29343 -29344 -29345 -29346 -29347 -29348 -29349 -29350 -29351 -29352 -29353 -29354 -29355 -29356 -29357 -29358 -29359 -29360 -29361 -29362 -29363 -29364 -29365 -29366 -29367 -29368 -29369 -29370 -29371 -29372 -29373 -29374 -29375 -29376 -29377 -29378 -29379 -29380 -29381 -29382 -29383 -29384 -29385 -29386 -29387 -29388 -29389 -29390 -29391 -29392 -29393 -29394 -29395 -29396 -29397 -29398 -29399 -29400 -29401 -29402 -29403 -29404 -29405 -29406 -29407 -29408 -29409 -29410 -29411 -29412 -29413 -29414 -29415 -29416 -29417 -29418 -29419 -29420 -29421 -29422 -29423 -29424 -29425 -29426 -29427 -29428 -29429 -29430 -29431 -29432 -29433 -29434 -29435 -29436 -29437 -29438 -29439 -29440 -29441 -29442 -29443 -29444 -29445 -29446 -29447 -29448 -29449 -29450 -29451 -29452 -29453 -29454 -29455 -29456 -29457 -29458 -29459 -29460 -29461 -29462 -29463 -29464 -29465 -29466 -29467 -29468 -29469 -29470 -29471 -29472 -29473 -29474 -29475 -29476 -29477 -29478 -29479 -29480 -29481 -29482 -29483 -29484 -29485 -29486 -29487 -29488 -29489 -29490 -29491 -29492 -29493 -29494 -29495 -29496 -29497 -29498 -29499 -29500 -29501 -29502 -29503 -29504 -29505 -29506 -29507 -29508 -29509 -29510 -29511 -29512 -29513 -29514 -29515 -29516 -29517 -29518 -29519 -29520 -29521 -29522 -29523 -29524 -29525 -29526 -29527 -29528 -29529 -29530 -29531 -29532 -29533 -29534 -29535 -29536 -29537 -29538 -29539 -29540 -29541 -29542 -29543 -29544 -29545 -29546 -29547 -29548 -29549 -29550 -29551 -29552 -29553 -29554 -29555 -29556 -29557 -29558 -29559 -29560 -29561 -29562 -29563 -29564 -29565 -29566 -29567 -29568 -29569 -29570 -29571 -29572 -29573 -29574 -29575 -29576 -29577 -29578 -29579 -29580 -29581 -29582 -29583 -29584 -29585 -29586 -29587 -29588 -29589 -29590 -29591 -29592 -29593 -29594 -29595 -29596 -29597 -29598 -29599 -29600 -29601 -29602 -29603 -29604 -29605 -29606 -29607 -29608 -29609 -29610 -29611 -29612 -29613 -29614 -29615 -29616 -29617 -29618 -29619 -29620 -29621 -29622 -29623 -29624 -29625 -29626 -29627 -29628 -29629 -29630 -29631 -29632 -29633 -29634 -29635 -29636 -29637 -29638 -29639 -29640 -29641 -29642 -29643 -29644 -29645 -29646 -29647 -29648 -29649 -29650 -29651 -29652 -29653 -29654 -29655 -29656 -29657 -29658 -29659 -29660 -29661 -29662 -29663 -29664 -29665 -29666 -29667 -29668 -29669 -29670 -29671 -29672 -29673 -29674 -29675 -29676 -29677 -29678 -29679 -29680 -29681 -29682 -29683 -29684 -29685 -29686 -29687 -29688 -29689 -29690 -29691 -29692 -29693 -29694 -29695 -29696 -29697 -29698 -29699 -29700 -29701 -29702 -29703 -29704 -29705 -29706 -29707 -29708 -29709 -29710 -29711 -29712 -29713 -29714 -29715 -29716 -29717 -29718 -29719 -29720 -29721 -29722 -29723 -29724 -29725 -29726 -29727 -29728 -29729 -29730 -29731 -29732 -29733 -29734 -29735 -29736 -29737 -29738 -29739 -29740 -29741 -29742 -29743 -29744 -29745 -29746 -29747 -29748 -29749 -29750 -29751 -29752 -29753 -29754 -29755 -29756 -29757 -29758 -29759 -29760 -29761 -29762 -29763 -29764 -29765 -29766 -29767 -29768 -29769 -29770 -29771 -29772 -29773 -29774 -29775 -29776 -29777 -29778 -29779 -29780 -29781 -29782 -29783 -29784 -29785 -29786 -29787 -29788 -29789 -29790 -29791 -29792 -29793 -29794 -29795 -29796 -29797 -29798 -29799 -29800 -29801 -29802 -29803 -29804 -29805 -29806 -29807 -29808 -29809 -29810 -29811 -29812 -29813 -29814 -29815 -29816 -29817 -29818 -29819 -29820 -29821 -29822 -29823 -29824 -29825 -29826 -29827 -29828 -29829 -29830 -29831 -29832 -29833 -29834 -29835 -29836 -29837 -29838 -29839 -29840 -29841 -29842 -29843 -29844 -29845 -29846 -29847 -29848 -29849 -29850 -29851 -29852 -29853 -29854 -29855 -29856 -29857 -29858 -29859 -29860 -29861 -29862 -29863 -29864 -29865 -29866 -29867 -29868 -29869 -29870 -29871 -29872 -29873 -29874 -29875 -29876 -29877 -29878 -29879 -29880 -29881 -29882 -29883 -29884 -29885 -29886 -29887 -29888 -29889 -29890 -29891 -29892 -29893 -29894 -29895 -29896 -29897 -29898 -29899 -29900 -29901 -29902 -29903 -29904 -29905 -29906 -29907 -29908 -29909 -29910 -29911 -29912 -29913 -29914 -29915 -29916 -29917 -29918 -29919 -29920 -29921 -29922 -29923 -29924 -29925 -29926 -29927 -29928 -29929 -29930 -29931 -29932 -29933 -29934 -29935 -29936 -29937 -29938 -29939 -29940 -29941 -29942 -29943 -29944 -29945 -29946 -29947 -29948 -29949 -29950 -29951 -29952 -29953 -29954 -29955 -29956 -29957 -29958 -29959 -29960 -29961 -29962 -29963 -29964 -29965 -29966 -29967 -29968 -29969 -29970 -29971 -29972 -29973 -29974 -29975 -29976 -29977 -29978 -29979 -29980 -29981 -29982 -29983 -29984 -29985 -29986 -29987 -29988 -29989 -29990 -29991 -29992 -29993 -29994 -29995 -29996 -29997 -29998 -29999 -30000 -30001 -30002 -30003 -30004 -30005 -30006 -30007 -30008 -30009 -30010 -30011 -30012 -30013 -30014 -30015 -30016 -30017 -30018 -30019 -30020 -30021 -30022 -30023 -30024 -30025 -30026 -30027 -30028 -30029 -30030 -30031 -30032 -30033 -30034 -30035 -30036 -30037 -30038 -30039 -30040 -30041 -30042 -30043 -30044 -30045 -30046 -30047 -30048 -30049 -30050 -30051 -30052 -30053 -30054 -30055 -30056 -30057 -30058 -30059 -30060 -30061 -30062 -30063 -30064 -30065 -30066 -30067 -30068 -30069 -30070 -30071 -30072 -30073 -30074 -30075 -30076 -30077 -30078 -30079 -30080 -30081 -30082 -30083 -30084 -30085 -30086 -30087 -30088 -30089 -30090 -30091 -30092 -30093 -30094 -30095 -30096 -30097 -30098 -30099 -30100 -30101 -30102 -30103 -30104 -30105 -30106 -30107 -30108 -30109 -30110 -30111 -30112 -30113 -30114 -30115 -30116 -30117 -30118 -30119 -30120 -30121 -30122 -30123 -30124 -30125 -30126 -30127 -30128 -30129 -30130 -30131 -30132 -30133 -30134 -30135 -30136 -30137 -30138 -30139 -30140 -30141 -30142 -30143 -30144 -30145 -30146 -30147 -30148 -30149 -30150 -30151 -30152 -30153 -30154 -30155 -30156 -30157 -30158 -30159 -30160 -30161 -30162 -30163 -30164 -30165 -30166 -30167 -30168 -30169 -30170 -30171 -30172 -30173 -30174 -30175 -30176 -30177 -30178 -30179 -30180 -30181 -30182 -30183 -30184 -30185 -30186 -30187 -30188 -30189 -30190 -30191 -30192 -30193 -30194 -30195 -30196 -30197 -30198 -30199 -30200 -30201 -30202 -30203 -30204 -30205 -30206 -30207 -30208 -30209 -30210 -30211 -30212 -30213 -30214 -30215 -30216 -30217 -30218 -30219 -30220 -30221 -30222 -30223 -30224 -30225 -30226 -30227 -30228 -30229 -30230 -30231 -30232 -30233 -30234 -30235 -30236 -30237 -30238 -30239 -30240 -30241 -30242 -30243 -30244 -30245 -30246 -30247 -30248 -30249 -30250 -30251 -30252 -30253 -30254 -30255 -30256 -30257 -30258 -30259 -30260 -30261 -30262 -30263 -30264 -30265 -30266 -30267 -30268 -30269 -30270 -30271 -30272 -30273 -30274 -30275 -30276 -30277 -30278 -30279 -30280 -30281 -30282 -30283 -30284 -30285 -30286 -30287 -30288 -30289 -30290 -30291 -30292 -30293 -30294 -30295 -30296 -30297 -30298 -30299 -30300 -30301 -30302 -30303 -30304 -30305 -30306 -30307 -30308 -30309 -30310 -30311 -30312 -30313 -30314 -30315 -30316 -30317 -30318 -30319 -30320 -30321 -30322 -30323 -30324 -30325 -30326 -30327 -30328 -30329 -30330 -30331 -30332 -30333 -30334 -30335 -30336 -30337 -30338 -30339 -30340 -30341 -30342 -30343 -30344 -30345 -30346 -30347 -30348 -30349 -30350 -30351 -30352 -30353 -30354 -30355 -30356 -30357 -30358 -30359 -30360 -30361 -30362 -30363 -30364 -30365 -30366 -30367 -30368 -30369 -30370 -30371 -30372 -30373 -30374 -30375 -30376 -30377 -30378 -30379 -30380 -30381 -30382 -30383 -30384 -30385 -30386 -30387 -30388 -30389 -30390 -30391 -30392 -30393 -30394 -30395 -30396 -30397 -30398 -30399 -30400 -30401 -30402 -30403 -30404 -30405 -30406 -30407 -30408 -30409 -30410 -30411 -30412 -30413 -30414 -30415 -30416 -30417 -30418 -30419 -30420 -30421 -30422 -30423 -30424 -30425 -30426 -30427 -30428 -30429 -30430 -30431 -30432 -30433 -30434 -30435 -30436 -30437 -30438 -30439 -30440 -30441 -30442 -30443 -30444 -30445 -30446 -30447 -30448 -30449 -30450 -30451 -30452 -30453 -30454 -30455 -30456 -30457 -30458 -30459 -30460 -30461 -30462 -30463 -30464 -30465 -30466 -30467 -30468 -30469 -30470 -30471 -30472 -30473 -30474 -30475 -30476 -30477 -30478 -30479 -30480 -30481 -30482 -30483 -30484 -30485 -30486 -30487 -30488 -30489 -30490 -30491 -30492 -30493 -30494 -30495 -30496 -30497 -30498 -30499 -30500 -30501 -30502 -30503 -30504 -30505 -30506 -30507 -30508 -30509 -30510 -30511 -30512 -30513 -30514 -30515 -30516 -30517 -30518 -30519 -30520 -30521 -30522 -30523 -30524 -30525 -30526 -30527 -30528 -30529 -30530 -30531 -30532 -30533 -30534 -30535 -30536 -30537 -30538 -30539 -30540 -30541 -30542 -30543 -30544 -30545 -30546 -30547 -30548 -30549 -30550 -30551 -30552 -30553 -30554 -30555 -30556 -30557 -30558 -30559 -30560 -30561 -30562 -30563 -30564 -30565 -30566 -30567 -30568 -30569 -30570 -30571 -30572 -30573 -30574 -30575 -30576 -30577 -30578 -30579 -30580 -30581 -30582 -30583 -30584 -30585 -30586 -30587 -30588 -30589 -30590 -30591 -30592 -30593 -30594 -30595 -30596 -30597 -30598 -30599 -30600 -30601 -30602 -30603 -30604 -30605 -30606 -30607 -30608 -30609 -30610 -30611 -30612 -30613 -30614 -30615 -30616 -30617 -30618 -30619 -30620 -30621 -30622 -30623 -30624 -30625 -30626 -30627 -30628 -30629 -30630 -30631 -30632 -30633 -30634 -30635 -30636 -30637 -30638 -30639 -30640 -30641 -30642 -30643 -30644 -30645 -30646 -30647 -30648 -30649 -30650 -30651 -30652 -30653 -30654 -30655 -30656 -30657 -30658 -30659 -30660 -30661 -30662 -30663 -30664 -30665 -30666 -30667 -30668 -30669 -30670 -30671 -30672 -30673 -30674 -30675 -30676 -30677 -30678 -30679 -30680 -30681 -30682 -30683 -30684 -30685 -30686 -30687 -30688 -30689 -30690 -30691 -30692 -30693 -30694 -30695 -30696 -30697 -30698 -30699 -30700 -30701 -30702 -30703 -30704 -30705 -30706 -30707 -30708 -30709 -30710 -30711 -30712 -30713 -30714 -30715 -30716 -30717 -30718 -30719 -30720 -30721 -30722 -30723 -30724 -30725 -30726 -30727 -30728 -30729 -30730 -30731 -30732 -30733 -30734 -30735 -30736 -30737 -30738 -30739 -30740 -30741 -30742 -30743 -30744 -30745 -30746 -30747 -30748 -30749 -30750 -30751 -30752 -30753 -30754 -30755 -30756 -30757 -30758 -30759 -30760 -30761 -30762 -30763 -30764 -30765 -30766 -30767 -30768 -30769 -30770 -30771 -30772 -30773 -30774 -30775 -30776 -30777 -30778 -30779 -30780 -30781 -30782 -30783 -30784 -30785 -30786 -30787 -30788 -30789 -30790 -30791 -30792 -30793 -30794 -30795 -30796 -30797 -30798 -30799 -30800 -30801 -30802 -30803 -30804 -30805 -30806 -30807 -30808 -30809 -30810 -30811 -30812 -30813 -30814 -30815 -30816 -30817 -30818 -30819 -30820 -30821 -30822 -30823 -30824 -30825 -30826 -30827 -30828 -30829 -30830 -30831 -30832 -30833 -30834 -30835 -30836 -30837 -30838 -30839 -30840 -30841 -30842 -30843 -30844 -30845 -30846 -30847 -30848 -30849 -30850 -30851 -30852 -30853 -30854 -30855 -30856 -30857 -30858 -30859 -30860 -30861 -30862 -30863 -30864 -30865 -30866 -30867 -30868 -30869 -30870 -30871 -30872 -30873 -30874 -30875 -30876 -30877 -30878 -30879 -30880 -30881 -30882 -30883 -30884 -30885 -30886 -30887 -30888 -30889 -30890 -30891 -30892 -30893 -30894 -30895 -30896 -30897 -30898 -30899 -30900 -30901 -30902 -30903 -30904 -30905 -30906 -30907 -30908 -30909 -30910 -30911 -30912 -30913 -30914 -30915 -30916 -30917 -30918 -30919 -30920 -30921 -30922 -30923 -30924 -30925 -30926 -30927 -30928 -30929 -30930 -30931 -30932 -30933 -30934 -30935 -30936 -30937 -30938 -30939 -30940 -30941 -30942 -30943 -30944 -30945 -30946 -30947 -30948 -30949 -30950 -30951 -30952 -30953 -30954 -30955 -30956 -30957 -30958 -30959 -30960 -30961 -30962 -30963 -30964 -30965 -30966 -30967 -30968 -30969 -30970 -30971 -30972 -30973 -30974 -30975 -30976 -30977 -30978 -30979 -30980 -30981 -30982 -30983 -30984 -30985 -30986 -30987 -30988 -30989 -30990 -30991 -30992 -30993 -30994 -30995 -30996 -30997 -30998 -30999 -31000 -31001 -31002 -31003 -31004 -31005 -31006 -31007 -31008 -31009 -31010 -31011 -31012 -31013 -31014 -31015 -31016 -31017 -31018 -31019 -31020 -31021 -31022 -31023 -31024 -31025 -31026 -31027 -31028 -31029 -31030 -31031 -31032 -31033 -31034 -31035 -31036 -31037 -31038 -31039 -31040 -31041 -31042 -31043 -31044 -31045 -31046 -31047 -31048 -31049 -31050 -31051 -31052 -31053 -31054 -31055 -31056 -31057 -31058 -31059 -31060 -31061 -31062 -31063 -31064 -31065 -31066 -31067 -31068 -31069 -31070 -31071 -31072 -31073 -31074 -31075 -31076 -31077 -31078 -31079 -31080 -31081 -31082 -31083 -31084 -31085 -31086 -31087 -31088 -31089 -31090 -31091 -31092 -31093 -31094 -31095 -31096 -31097 -31098 -31099 -31100 -31101 -31102 -31103 -31104 -31105 -31106 -31107 -31108 -31109 -31110 -31111 -31112 -31113 -31114 -31115 -31116 -31117 -31118 -31119 -31120 -31121 -31122 -31123 -31124 -31125 -31126 -31127 -31128 -31129 -31130 -31131 -31132 -31133 -31134 -31135 -31136 -31137 -31138 -31139 -31140 -31141 -31142 -31143 -31144 -31145 -31146 -31147 -31148 -31149 -31150 -31151 -31152 -31153 -31154 -31155 -31156 -31157 -31158 -31159 -31160 -31161 -31162 -31163 -31164 -31165 -31166 -31167 -31168 -31169 -31170 -31171 -31172 -31173 -31174 -31175 -31176 -31177 -31178 -31179 -31180 -31181 -31182 -31183 -31184 -31185 -31186 -31187 -31188 -31189 -31190 -31191 -31192 -31193 -31194 -31195 -31196 -31197 -31198 -31199 -31200 -31201 -31202 -31203 -31204 -31205 -31206 -31207 -31208 -31209 -31210 -31211 -31212 -31213 -31214 -31215 -31216 -31217 -31218 -31219 -31220 -31221 -31222 -31223 -31224 -31225 -31226 -31227 -31228 -31229 -31230 -31231 -31232 -31233 -31234 -31235 -31236 -31237 -31238 -31239 -31240 -31241 -31242 -31243 -31244 -31245 -31246 -31247 -31248 -31249 -31250 -31251 -31252 -31253 -31254 -31255 -31256 -31257 -31258 -31259 -31260 -31261 -31262 -31263 -31264 -31265 -31266 -31267 -31268 -31269 -31270 -31271 -31272 -31273 -31274 -31275 -31276 -31277 -31278 -31279 -31280 -31281 -31282 -31283 -31284 -31285 -31286 -31287 -31288 -31289 -31290 -31291 -31292 -31293 -31294 -31295 -31296 -31297 -31298 -31299 -31300 -31301 -31302 -31303 -31304 -31305 -31306 -31307 -31308 -31309 -31310 -31311 -31312 -31313 -31314 -31315 -31316 -31317 -31318 -31319 -31320 -31321 -31322 -31323 -31324 -31325 -31326 -31327 -31328 -31329 -31330 -31331 -31332 -31333 -31334 -31335 -31336 -31337 -31338 -31339 -31340 -31341 -31342 -31343 -31344 -31345 -31346 -31347 -31348 -31349 -31350 -31351 -31352 -31353 -31354 -31355 -31356 -31357 -31358 -31359 -31360 -31361 -31362 -31363 -31364 -31365 -31366 -31367 -31368 -31369 -31370 -31371 -31372 -31373 -31374 -31375 -31376 -31377 -31378 -31379 -31380 -31381 -31382 -31383 -31384 -31385 -31386 -31387 -31388 -31389 -31390 -31391 -31392 -31393 -31394 -31395 -31396 -31397 -31398 -31399 -31400 -31401 -31402 -31403 -31404 -31405 -31406 -31407 -31408 -31409 -31410 -31411 -31412 -31413 -31414 -31415 -31416 -31417 -31418 -31419 -31420 -31421 -31422 -31423 -31424 -31425 -31426 -31427 -31428 -31429 -31430 -31431 -31432 -31433 -31434 -31435 -31436 -31437 -31438 -31439 -31440 -31441 -31442 -31443 -31444 -31445 -31446 -31447 -31448 -31449 -31450 -31451 -31452 -31453 -31454 -31455 -31456 -31457 -31458 -31459 -31460 -31461 -31462 -31463 -31464 -31465 -31466 -31467 -31468 -31469 -31470 -31471 -31472 -31473 -31474 -31475 -31476 -31477 -31478 -31479 -31480 -31481 -31482 -31483 -31484 -31485 -31486 -31487 -31488 -31489 -31490 -31491 -31492 -31493 -31494 -31495 -31496 -31497 -31498 -31499 -31500 -31501 -31502 -31503 -31504 -31505 -31506 -31507 -31508 -31509 -31510 -31511 -31512 -31513 -31514 -31515 -31516 -31517 -31518 -31519 -31520 -31521 -31522 -31523 -31524 -31525 -31526 -31527 -31528 -31529 -31530 -31531 -31532 -31533 -31534 -31535 -31536 -31537 -31538 -31539 -31540 -31541 -31542 -31543 -31544 -31545 -31546 -31547 -31548 -31549 -31550 -31551 -31552 -31553 -31554 -31555 -31556 -31557 -31558 -31559 -31560 -31561 -31562 -31563 -31564 -31565 -31566 -31567 -31568 -31569 -31570 -31571 -31572 -31573 -31574 -31575 -31576 -31577 -31578 -31579 -31580 -31581 -31582 -31583 -31584 -31585 -31586 -31587 -31588 -31589 -31590 -31591 -31592 -31593 -31594 -31595 -31596 -31597 -31598 -31599 -31600 -31601 -31602 -31603 -31604 -31605 -31606 -31607 -31608 -31609 -31610 -31611 -31612 -31613 -31614 -31615 -31616 -31617 -31618 -31619 -31620 -31621 -31622 -31623 -31624 -31625 -31626 -31627 -31628 -31629 -31630 -31631 -31632 -31633 -31634 -31635 -31636 -31637 -31638 -31639 -31640 -31641 -31642 -31643 -31644 -31645 -31646 -31647 -31648 -31649 -31650 -31651 -31652 -31653 -31654 -31655 -31656 -31657 -31658 -31659 -31660 -31661 -31662 -31663 -31664 -31665 -31666 -31667 -31668 -31669 -31670 -31671 -31672 -31673 -31674 -31675 -31676 -31677 -31678 -31679 -31680 -31681 -31682 -31683 -31684 -31685 -31686 -31687 -31688 -31689 -31690 -31691 -31692 -31693 -31694 -31695 -31696 -31697 -31698 -31699 -31700 -31701 -31702 -31703 -31704 -31705 -31706 -31707 -31708 -31709 -31710 -31711 -31712 -31713 -31714 -31715 -31716 -31717 -31718 -31719 -31720 -31721 -31722 -31723 -31724 -31725 -31726 -31727 -31728 -31729 -31730 -31731 -31732 -31733 -31734 -31735 -31736 -31737 -31738 -31739 -31740 -31741 -31742 -31743 -31744 -31745 -31746 -31747 -31748 -31749 -31750 -31751 -31752 -31753 -31754 -31755 -31756 -31757 -31758 -31759 -31760 -31761 -31762 -31763 -31764 -31765 -31766 -31767 -31768 -31769 -31770 -31771 -31772 -31773 -31774 -31775 -31776 -31777 -31778 -31779 -31780 -31781 -31782 -31783 -31784 -31785 -31786 -31787 -31788 -31789 -31790 -31791 -31792 -31793 -31794 -31795 -31796 -31797 -31798 -31799 -31800 -31801 -31802 -31803 -31804 -31805 -31806 -31807 -31808 -31809 -31810 -31811 -31812 -31813 -31814 -31815 -31816 -31817 -31818 -31819 -31820 -31821 -31822 -31823 -31824 -31825 -31826 -31827 -31828 -31829 -31830 -31831 -31832 -31833 -31834 -31835 -31836 -31837 -31838 -31839 -31840 -31841 -31842 -31843 -31844 -31845 -31846 -31847 -31848 -31849 -31850 -31851 -31852 -31853 -31854 -31855 -31856 -31857 -31858 -31859 -31860 -31861 -31862 -31863 -31864 -31865 -31866 -31867 -31868 -31869 -31870 -31871 -31872 -31873 -31874 -31875 -31876 -31877 -31878 -31879 -31880 -31881 -31882 -31883 -31884 -31885 -31886 -31887 -31888 -31889 -31890 -31891 -31892 -31893 -31894 -31895 -31896 -31897 -31898 -31899 -31900 -31901 -31902 -31903 -31904 -31905 -31906 -31907 -31908 -31909 -31910 -31911 -31912 -31913 -31914 -31915 -31916 -31917 -31918 -31919 -31920 -31921 -31922 -31923 -31924 -31925 -31926 -31927 -31928 -31929 -31930 -31931 -31932 -31933 -31934 -31935 -31936 -31937 -31938 -31939 -31940 -31941 -31942 -31943 -31944 -31945 -31946 -31947 -31948 -31949 -31950 -31951 -31952 -31953 -31954 -31955 -31956 -31957 -31958 -31959 -31960 -31961 -31962 -31963 -31964 -31965 -31966 -31967 -31968 -31969 -31970 -31971 -31972 -31973 -31974 -31975 -31976 -31977 -31978 -31979 -31980 -31981 -31982 -31983 -31984 -31985 -31986 -31987 -31988 -31989 -31990 -31991 -31992 -31993 -31994 -31995 -31996 -31997 -31998 -31999 -32000 -32001 -32002 -32003 -32004 -32005 -32006 -32007 -32008 -32009 -32010 -32011 -32012 -32013 -32014 -32015 -32016 -32017 -32018 -32019 -32020 -32021 -32022 -32023 -32024 -32025 -32026 -32027 -32028 -32029 -32030 -32031 -32032 -32033 -32034 -32035 -32036 -32037 -32038 -32039 -32040 -32041 -32042 -32043 -32044 -32045 -32046 -32047 -32048 -32049 -32050 -32051 -32052 -32053 -32054 -32055 -32056 -32057 -32058 -32059 -32060 -32061 -32062 -32063 -32064 -32065 -32066 -32067 -32068 -32069 -32070 -32071 -32072 -32073 -32074 -32075 -32076 -32077 -32078 -32079 -32080 -32081 -32082 -32083 -32084 -32085 -32086 -32087 -32088 -32089 -32090 -32091 -32092 -32093 -32094 -32095 -32096 -32097 -32098 -32099 -32100 -32101 -32102 -32103 -32104 -32105 -32106 -32107 -32108 -32109 -32110 -32111 -32112 -32113 -32114 -32115 -32116 -32117 -32118 -32119 -32120 -32121 -32122 -32123 -32124 -32125 -32126 -32127 -32128 -32129 -32130 -32131 -32132 -32133 -32134 -32135 -32136 -32137 -32138 -32139 -32140 -32141 -32142 -32143 -32144 -32145 -32146 -32147 -32148 -32149 -32150 -32151 -32152 -32153 -32154 -32155 -32156 -32157 -32158 -32159 -32160 -32161 -32162 -32163 -32164 -32165 -32166 -32167 -32168 -32169 -32170 -32171 -32172 -32173 -32174 -32175 -32176 -32177 -32178 -32179 -32180 -32181 -32182 -32183 -32184 -32185 -32186 -32187 -32188 -32189 -32190 -32191 -32192 -32193 -32194 -32195 -32196 -32197 -32198 -32199 -32200 -32201 -32202 -32203 -32204 -32205 -32206 -32207 -32208 -32209 -32210 -32211 -32212 -32213 -32214 -32215 -32216 -32217 -32218 -32219 -32220 -32221 -32222 -32223 -32224 -32225 -32226 -32227 -32228 -32229 -32230 -32231 -32232 -32233 -32234 -32235 -32236 -32237 -32238 -32239 -32240 -32241 -32242 -32243 -32244 -32245 -32246 -32247 -32248 -32249 -32250 -32251 -32252 -32253 -32254 -32255 -32256 -32257 -32258 -32259 -32260 -32261 -32262 -32263 -32264 -32265 -32266 -32267 -32268 -32269 -32270 -32271 -32272 -32273 -32274 -32275 -32276 -32277 -32278 -32279 -32280 -32281 -32282 -32283 -32284 -32285 -32286 -32287 -32288 -32289 -32290 -32291 -32292 -32293 -32294 -32295 -32296 -32297 -32298 -32299 -32300 -32301 -32302 -32303 -32304 -32305 -32306 -32307 -32308 -32309 -32310 -32311 -32312 -32313 -32314 -32315 -32316 -32317 -32318 -32319 -32320 -32321 -32322 -32323 -32324 -32325 -32326 -32327 -32328 -32329 -32330 -32331 -32332 -32333 -32334 -32335 -32336 -32337 -32338 -32339 -32340 -32341 -32342 -32343 -32344 -32345 -32346 -32347 -32348 -32349 -32350 -32351 -32352 -32353 -32354 -32355 -32356 -32357 -32358 -32359 -32360 -32361 -32362 -32363 -32364 -32365 -32366 -32367 -32368 -32369 -32370 -32371 -32372 -32373 -32374 -32375 -32376 -32377 -32378 -32379 -32380 -32381 -32382 -32383 -32384 -32385 -32386 -32387 -32388 -32389 -32390 -32391 -32392 -32393 -32394 -32395 -32396 -32397 -32398 -32399 -32400 -32401 -32402 -32403 -32404 -32405 -32406 -32407 -32408 -32409 -32410 -32411 -32412 -32413 -32414 -32415 -32416 -32417 -32418 -32419 -32420 -32421 -32422 -32423 -32424 -32425 -32426 -32427 -32428 -32429 -32430 -32431 -32432 -32433 -32434 -32435 -32436 -32437 -32438 -32439 -32440 -32441 -32442 -32443 -32444 -32445 -32446 -32447 -32448 -32449 -32450 -32451 -32452 -32453 -32454 -32455 -32456 -32457 -32458 -32459 -32460 -32461 -32462 -32463 -32464 -32465 -32466 -32467 -32468 -32469 -32470 -32471 -32472 -32473 -32474 -32475 -32476 -32477 -32478 -32479 -32480 -32481 -32482 -32483 -32484 -32485 -32486 -32487 -32488 -32489 -32490 -32491 -32492 -32493 -32494 -32495 -32496 -32497 -32498 -32499 -32500 -32501 -32502 -32503 -32504 -32505 -32506 -32507 -32508 -32509 -32510 -32511 -32512 -32513 -32514 -32515 -32516 -32517 -32518 -32519 -32520 -32521 -32522 -32523 -32524 -32525 -32526 -32527 -32528 -32529 -32530 -32531 -32532 -32533 -32534 -32535 -32536 -32537 -32538 -32539 -32540 -32541 -32542 -32543 -32544 -32545 -32546 -32547 -32548 -32549 -32550 -32551 -32552 -32553 -32554 -32555 -32556 -32557 -32558 -32559 -32560 -32561 -32562 -32563 -32564 -32565 -32566 -32567 -32568 -32569 -32570 -32571 -32572 -32573 -32574 -32575 -32576 -32577 -32578 -32579 -32580 -32581 -32582 -32583 -32584 -32585 -32586 -32587 -32588 -32589 -32590 -32591 -32592 -32593 -32594 -32595 -32596 -32597 -32598 -32599 -32600 -32601 -32602 -32603 -32604 -32605 -32606 -32607 -32608 -32609 -32610 -32611 -32612 -32613 -32614 -32615 -32616 -32617 -32618 -32619 -32620 -32621 -32622 -32623 -32624 -32625 -32626 -32627 -32628 -32629 -32630 -32631 -32632 -32633 -32634 -32635 -32636 -32637 -32638 -32639 -32640 -32641 -32642 -32643 -32644 -32645 -32646 -32647 -32648 -32649 -32650 -32651 -32652 -32653 -32654 -32655 -32656 -32657 -32658 -32659 -32660 -32661 -32662 -32663 -32664 -32665 -32666 -32667 -32668 -32669 -32670 -32671 -32672 -32673 -32674 -32675 -32676 -32677 -32678 -32679 -32680 -32681 -32682 -32683 -32684 -32685 -32686 -32687 -32688 -32689 -32690 -32691 -32692 -32693 -32694 -32695 -32696 -32697 -32698 -32699 -32700 -32701 -32702 -32703 -32704 -32705 -32706 -32707 -32708 -32709 -32710 -32711 -32712 -32713 -32714 -32715 -32716 -32717 -32718 -32719 -32720 -32721 -32722 -32723 -32724 -32725 -32726 -32727 -32728 -32729 -32730 -32731 -32732 -32733 -32734 -32735 -32736 -32737 -32738 -32739 -32740 -32741 -32742 -32743 -32744 -32745 -32746 -32747 -32748 -32749 -32750 -32751 -32752 -32753 -32754 -32755 -32756 -32757 -32758 -32759 -32760 -32761 -32762 -32763 -32764 -32765 -32766 -32767 -) - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes index c563a4cd8fe840a8bbabf755739cbf83ae20fff5..a6ed1d41742c9330925f532a0f080cce8bdbe21e 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSolution b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSolution index 2ca306273d2f9178a190c71b10c6f37cbc5ac67a..fe7b6a88515a806090e82ac24cc50f10c9ea01df 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSolution +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-08; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner @@ -122,9 +122,8 @@ PISO nAlphaSubCycles 3; cAlpha 1; - pdRefPoint (0.51 0.51 0.51); - pdRefValue 0; - pRefValue 0; + pRefPoint (0.51 0.51 0.51); + pRefValue 0; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/0/pd b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/0/p similarity index 98% rename from tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/0/pd rename to tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/0/p index 020ff7cc00a27e6b27aed9640ba406c34958cb98..c69b424dc75602864a806fc737b9f17d4017de74 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/0/pd +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/controlDict b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/controlDict index e4a69588f6ea514229a8f1616348508e27a1bc41..35735bacbbe1f9b409860731920c58c2bb23e935 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/controlDict +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/controlDict @@ -54,7 +54,7 @@ functions probes { type probes; - name probes; + functionObjectLibs ( "libsampling.so" ); outputControl timeStep; outputInterval 1; probeLocations diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes index 3a940dbe40590b8a3661aaa877dc5c159edb986e..2f7da16bb6cae840274d0344b5c92de2fc959ed3 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSolution b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSolution index c9dccc239e4610d982bc3f6e8a70b36aad0e9d79..77e4ff75cfbdbc79a7a241312acdab31fb65a954 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSolution +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-08; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner @@ -99,8 +99,7 @@ PISO cAlpha 1.5; correctPhi no; - pdRefPoint (0 0 0.15); - pdRefValue 0; + pRefPoint (0 0 0.15); pRefValue 1e5; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/setFieldsDict b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/setFieldsDict index 7ff571c6d130cf0424493bcc96a52251eedc746a..ec8d1717d50aba095d49655c4509cd75692a659b 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/setFieldsDict +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/setFieldsDict @@ -25,7 +25,10 @@ regions boxToCell { box ( -100 -100 -100 ) ( 100 100 0 ); - fieldValues ( volScalarFieldValue alpha1 1 ); + fieldValues + ( + volScalarFieldValue alpha1 1 + ); } ); diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/0/pd b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/0/p similarity index 98% rename from tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/0/pd rename to tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/0/p index 020ff7cc00a27e6b27aed9640ba406c34958cb98..c69b424dc75602864a806fc737b9f17d4017de74 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/0/pd +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes index d4eb5a19662e68864722f579d30296c6d4fbfd87..b5c55ba3d740f3873f7f59512cfcb73893801262 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSolution b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSolution index c9dccc239e4610d982bc3f6e8a70b36aad0e9d79..77e4ff75cfbdbc79a7a241312acdab31fb65a954 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSolution +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-08; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner @@ -99,8 +99,7 @@ PISO cAlpha 1.5; correctPhi no; - pdRefPoint (0 0 0.15); - pdRefValue 0; + pRefPoint (0 0 0.15); pRefValue 1e5; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/setFieldsDict b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/setFieldsDict index 7ff571c6d130cf0424493bcc96a52251eedc746a..ec8d1717d50aba095d49655c4509cd75692a659b 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/setFieldsDict +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/setFieldsDict @@ -25,7 +25,10 @@ regions boxToCell { box ( -100 -100 -100 ) ( 100 100 0 ); - fieldValues ( volScalarFieldValue alpha1 1 ); + fieldValues + ( + volScalarFieldValue alpha1 1 + ); } ); diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/0/pd b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/0/p similarity index 97% rename from tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/0/pd rename to tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/0/p index ac7e49da81a5ead98e613c5891faccae05ef2629..d27ad70eb9ed4cdf91ec9cf25222554b271898e7 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/0/pd +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes index d4eb5a19662e68864722f579d30296c6d4fbfd87..b5c55ba3d740f3873f7f59512cfcb73893801262 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSolution b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSolution index c9dccc239e4610d982bc3f6e8a70b36aad0e9d79..77e4ff75cfbdbc79a7a241312acdab31fb65a954 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSolution +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-08; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner @@ -99,8 +99,7 @@ PISO cAlpha 1.5; correctPhi no; - pdRefPoint (0 0 0.15); - pdRefValue 0; + pRefPoint (0 0 0.15); pRefValue 1e5; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/setFieldsDict b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/setFieldsDict index 2f947e62416f71a3ff19b87376388cab9269939a..bceaad67cefa6f8fed8a77df0e41275a7d0dc295 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/setFieldsDict +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/setFieldsDict @@ -25,7 +25,10 @@ regions boxToCell { box ( -100 -100 -100 ) ( 100 100 0 ); - fieldValues ( volScalarFieldValue alpha1 1 ); + fieldValues + ( + volScalarFieldValue alpha1 1 + ); } ); diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/0/pd b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/0/p similarity index 97% rename from tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/0/pd rename to tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/0/p index ac7e49da81a5ead98e613c5891faccae05ef2629..d27ad70eb9ed4cdf91ec9cf25222554b271898e7 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/0/pd +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes index d4eb5a19662e68864722f579d30296c6d4fbfd87..b5c55ba3d740f3873f7f59512cfcb73893801262 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSolution b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSolution index c9dccc239e4610d982bc3f6e8a70b36aad0e9d79..77e4ff75cfbdbc79a7a241312acdab31fb65a954 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSolution +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-08; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner @@ -99,8 +99,7 @@ PISO cAlpha 1.5; correctPhi no; - pdRefPoint (0 0 0.15); - pdRefValue 0; + pRefPoint (0 0 0.15); pRefValue 1e5; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/setFieldsDict b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/setFieldsDict index 7ff571c6d130cf0424493bcc96a52251eedc746a..ec8d1717d50aba095d49655c4509cd75692a659b 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/setFieldsDict +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/setFieldsDict @@ -25,7 +25,10 @@ regions boxToCell { box ( -100 -100 -100 ) ( 100 100 0 ); - fieldValues ( volScalarFieldValue alpha1 1 ); + fieldValues + ( + volScalarFieldValue alpha1 1 + ); } ); diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/0/pd b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/0/p similarity index 97% rename from tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/0/pd rename to tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/0/p index ac7e49da81a5ead98e613c5891faccae05ef2629..d27ad70eb9ed4cdf91ec9cf25222554b271898e7 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/0/pd +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes index d4eb5a19662e68864722f579d30296c6d4fbfd87..b5c55ba3d740f3873f7f59512cfcb73893801262 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSolution b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSolution index c9dccc239e4610d982bc3f6e8a70b36aad0e9d79..77e4ff75cfbdbc79a7a241312acdab31fb65a954 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSolution +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-08; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner @@ -99,8 +99,7 @@ PISO cAlpha 1.5; correctPhi no; - pdRefPoint (0 0 0.15); - pdRefValue 0; + pRefPoint (0 0 0.15); pRefValue 1e5; } diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/MRFInterFoam.C b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/MRFInterFoam.C new file mode 100644 index 0000000000000000000000000000000000000000..9f1efad337fce1be11e0728662c8980823f3ab80 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/MRFInterFoam.C @@ -0,0 +1,109 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + MRFInterFoam + +Description + Solver for 2 incompressible, isothermal immiscible fluids using a VOF + (volume of fluid) phase-fraction based interface capturing approach. + The momentum and other fluid properties are of the "mixture" and a single + momentum equation is solved. + + Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected. + + For a two-fluid approach see twoPhaseEulerFoam. + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "MULES.H" +#include "subCycle.H" +#include "interfaceProperties.H" +#include "twoPhaseMixture.H" +#include "turbulenceModel.H" +#include "MRFZones.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + #include "createTime.H" + #include "createMesh.H" + #include "readEnvironmentalProperties.H" + #include "readPISOControls.H" + #include "initContinuityErrs.H" + #include "createFields.H" + #include "createMRFZones.H" + #include "readTimeControls.H" + #include "correctPhi.H" + #include "CourantNo.H" + #include "setInitialDeltaT.H" + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + Info<< "\nStarting time loop\n" << endl; + + while (runTime.run()) + { + #include "readPISOControls.H" + #include "readTimeControls.H" + #include "CourantNo.H" + #include "setDeltaT.H" + + runTime++; + + Info<< "Time = " << runTime.timeName() << nl << endl; + + twoPhaseProperties.correct(); + + #include "alphaEqnSubCycle.H" + + #include "UEqn.H" + + // --- PISO loop + for (int corr=0; corr<nCorr; corr++) + { + #include "pEqn.H" + } + + #include "continuityErrs.H" + + turbulence->correct(); + + runTime.write(); + + Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" + << " ClockTime = " << runTime.elapsedClockTime() << " s" + << nl << endl; + } + + Info<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/Make/files b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..706858442e6a56a1a60fb8bb7377b9879e221fd0 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/Make/files @@ -0,0 +1,3 @@ +MRFInterFoam.C + +EXE = $(FOAM_USER_APPBIN)/MRFInterFoam diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/Make/options b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..e4acc4ce993fdad66ddeb7fb84c06b2824ccbc53 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/Make/options @@ -0,0 +1,14 @@ +EXE_INC = \ + -I$(FOAM_SOLVERS)/multiphase/interFoam \ + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ + -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -linterfaceProperties \ + -lincompressibleTransportModels \ + -lincompressibleRASModels \ + -lincompressibleLESModels \ + -lfiniteVolume diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/UEqn.H b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/UEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..ae944a9d0e5b4060da256b629f1ff0326d014967 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/UEqn.H @@ -0,0 +1,35 @@ + surfaceScalarField muEff + ( + "muEff", + twoPhaseProperties.muf() + + fvc::interpolate(rho*turbulence->nut()) + ); + + fvVectorMatrix UEqn + ( + fvm::ddt(rho, U) + + fvm::div(rhoPhi, U) + - fvm::laplacian(muEff, U) + - (fvc::grad(U) & fvc::grad(muEff)) + //- fvc::div(muEff*(fvc::interpolate(dev(fvc::grad(U))) & mesh.Sf())) + ); + mrfZones.addCoriolis(rho, UEqn); + + UEqn.relax(); + + if (momentumPredictor) + { + solve + ( + UEqn + == + fvc::reconstruct + ( + fvc::interpolate(rho)*(g & mesh.Sf()) + + ( + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1) + - fvc::snGrad(p) + ) * mesh.magSf() + ) + ); + } diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/createMRFZones.H b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/createMRFZones.H new file mode 100644 index 0000000000000000000000000000000000000000..161446a8e6f2397982c0579c232b8ce3e458053d --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/createMRFZones.H @@ -0,0 +1,2 @@ + MRFZones mrfZones(mesh); + mrfZones.correctBoundaryVelocity(U); diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H new file mode 100644 index 0000000000000000000000000000000000000000..5a67dd0497b150c4a46f62f306afdf814cfe17aa --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/MRFInterFoam/pEqn.H @@ -0,0 +1,48 @@ +{ + volScalarField rUA = 1.0/UEqn.A(); + surfaceScalarField rUAf = fvc::interpolate(rUA); + + U = rUA*UEqn.H(); + + surfaceScalarField phiU + ( + "phiU", + (fvc::interpolate(U) & mesh.Sf()) + //+ fvc::ddtPhiCorr(rUA, rho, U, phi) + ); + mrfZones.relativeFlux(phiU); + + phi = phiU + + ( + fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)*mesh.magSf() + + fvc::interpolate(rho)*(g & mesh.Sf()) + )*rUAf; + adjustPhi(phi, U, p); + + for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) + { + fvScalarMatrix pEqn + ( + fvm::laplacian(rUAf, p) == fvc::div(phi) + ); + + pEqn.setReference(pRefCell, pRefValue); + + if (corr == nCorr-1 && nonOrth == nNonOrthCorr) + { + pEqn.solve(mesh.solver(p.name() + "Final")); + } + else + { + pEqn.solve(mesh.solver(p.name())); + } + + if (nonOrth == nNonOrthCorr) + { + phi -= pEqn.flux(); + } + } + + U += rUA*fvc::reconstruct((phi - phiU)/rUAf); + U.correctBoundaryConditions(); +} diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/U b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/U new file mode 100644 index 0000000000000000000000000000000000000000..500a0fbea165c8862b993215de7a33f21267fd13 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/U @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + location "0"; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + rotor + { + type fixedValue; + value uniform (0 0 0); + } + stator + { + type fixedValue; + value uniform (0 0 0); + } + front + { + type empty; + } + back + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/alpha1 b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/alpha1 new file mode 100644 index 0000000000000000000000000000000000000000..f4e647e372dc3641e186e02d763fdb92a4217d95 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/alpha1 @@ -0,0 +1,3119 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alpha1; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField nonuniform List<scalar> +3072 +( +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +) +; + +boundaryField +{ + rotor + { + type zeroGradient; + } + stator + { + type zeroGradient; + } + front + { + type empty; + } + back + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/alpha1.org b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/alpha1.org new file mode 100644 index 0000000000000000000000000000000000000000..adc19d7f15a738efc8b7f2d48da4e25141e3e6d3 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/alpha1.org @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object alpha1; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + rotor + { + type zeroGradient; + } + + stator + { + type zeroGradient; + } + + front + { + type empty; + } + + back + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/p b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/p new file mode 100644 index 0000000000000000000000000000000000000000..25b3e3f0d4d589ff4a01f1f88a5c627252dd7288 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/0/p @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + rotor + { + type zeroGradient; + } + + stator + { + type zeroGradient; + } + + front + { + type empty; + } + + back + { + type empty; + } +} + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/Allrun b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..e8e310bf86a0faa6481cf8e4284b6fbfaf5780ce --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/Allrun @@ -0,0 +1,9 @@ +#!/bin/sh + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="MRFInterFoam" + +./makeMesh +runApplication $application diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/MRFZones b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/MRFZones new file mode 100644 index 0000000000000000000000000000000000000000..855e3864ce8f3fcf79fe47d6301ddaa13ae78306 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/MRFZones @@ -0,0 +1,31 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object MRFZones; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +1 +( + rotor + { + // Fixed patches (by default they 'move' with the MRF zone) + nonRotatingPatches (); + + origin origin [0 1 0 0 0 0 0] (0 0 0); + axis axis [0 0 0 0 0 0 0] (0 0 1); + omega omega [0 0 -1 0 0 0 0] 6.2831853; + } +) + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/transportProperties b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/environmentalProperties similarity index 90% rename from tutorials/compressible/sonicFoam/laminar/forwardStep/constant/transportProperties rename to tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/environmentalProperties index 1e9d5be60c285c2403250e1961ee8d1552dd14a8..1f0ea06a3cb5296cd1202223d4955977d562ca1f 100644 --- a/tutorials/compressible/sonicFoam/laminar/forwardStep/constant/transportProperties +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/environmentalProperties @@ -11,11 +11,10 @@ FoamFile format ascii; class dictionary; location "constant"; - object transportProperties; + object environmentalProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -mu mu [ 1 -1 -1 0 0 0 0 ] 0; - +g g [0 1 -2 0 0 0 0] (0 0 0); // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..554df2afd61191c9b3b121c440c6fad3d4ceb429 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict @@ -0,0 +1,818 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// General macros to create 2D/extruded-2D meshes + + + + + + + + + + + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.1; + +// Hub radius + + +// Impeller-tip radius + + +// Baffle-tip radius + + +// Tank radius + + +// MRF region radius + + +// Thickness of 2D slab + + +// Base z + + +// Top z + + +// Number of cells radially between hub and impeller tip + + +// Number of cells radially in each of the two regions between +// impeller and baffle tips + + +// Number of cells radially between baffle tip and tank + + +// Number of cells azimuthally in each of the 8 blocks + + +// Number of cells in the thickness of the slab + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +vertices +( + (0.2 0 0) // Vertex r0b = 0 + (0.2 0 0) // Vertex r0sb = 1 + (0.141421356364228 -0.141421356110391 0) // Vertex r1b = 2 + (3.58979347393082e-10 -0.2 0) // Vertex r2b = 3 + (3.58979347393082e-10 -0.2 0) // Vertex r2sb = 4 + (-0.141421355856554 -0.141421356618065 0) // Vertex r3b = 5 + (-0.2 7.17958694786164e-10 0) // Vertex r4b = 6 + (-0.2 7.17958694786164e-10 0) // Vertex r4sb = 7 + (-0.141421355856554 0.141421356618065 0) // Vertex r5b = 8 + (3.58979347393082e-10 0.2 0) // Vertex r6b = 9 + (3.58979347393082e-10 0.2 0) // Vertex r6sb = 10 + (0.141421356364228 0.141421356110391 0) // Vertex r7b = 11 + + (0.5 0 0) // Vertex rb0b = 12 + (0.353553390910569 -0.353553390275978 0) // Vertex rb1b = 13 + (8.97448368482705e-10 -0.5 0) // Vertex rb2b = 14 + (-0.353553389641386 -0.353553391545162 0) // Vertex rb3b = 15 + (-0.5 1.79489673696541e-09 0) // Vertex rb4b = 16 + (-0.353553389641386 0.353553391545162 0) // Vertex rb5b = 17 + (8.97448368482705e-10 0.5 0) // Vertex rb6b = 18 + (0.353553390910569 0.353553390275978 0) // Vertex rb7b = 19 + + (0.6 0 0) // Vertex ri0b = 20 + (0.424264069092683 -0.424264068331174 0) // Vertex ri1b = 21 + (1.07693804217925e-09 -0.6 0) // Vertex ri2b = 22 + (-0.424264067569663 -0.424264069854194 0) // Vertex ri3b = 23 + (-0.6 2.15387608435849e-09 0) // Vertex ri4b = 24 + (-0.424264067569663 0.424264069854194 0) // Vertex ri5b = 25 + (1.07693804217925e-09 0.6 0) // Vertex ri6b = 26 + (0.424264069092683 0.424264068331174 0) // Vertex ri7b = 27 + + (0.7 0 0) // Vertex Rb0b = 28 + (0.494974747274797 -0.494974746386369 0) // Vertex Rb1b = 29 + (1.25642771587579e-09 -0.7 0) // Vertex Rb2b = 30 + (-0.49497474549794 -0.494974748163226 0) // Vertex Rb3b = 31 + (-0.7 2.51285543175157e-09 0) // Vertex Rb4b = 32 + (-0.49497474549794 0.494974748163226 0) // Vertex Rb5b = 33 + (1.25642771587579e-09 0.7 0) // Vertex Rb6b = 34 + (0.494974747274797 0.494974746386369 0) // Vertex Rb7b = 35 + + (1 0 0) // Vertex R0b = 36 + (0.707106781821139 -0.707106780551956 0) // Vertex R1b = 37 + (0.707106781821139 -0.707106780551956 0) // Vertex R1sb = 38 + (1.79489673696541e-09 -1 0) // Vertex R2b = 39 + (-0.707106779282772 -0.707106783090323 0) // Vertex R3b = 40 + (-0.707106779282772 -0.707106783090323 0) // Vertex R3sb = 41 + (-1 3.58979347393082e-09 0) // Vertex R4b = 42 + (-0.707106779282772 0.707106783090323 0) // Vertex R5b = 43 + (-0.707106779282772 0.707106783090323 0) // Vertex R5sb = 44 + (1.79489673696541e-09 1 0) // Vertex R6b = 45 + (0.707106781821139 0.707106780551956 0) // Vertex R7b = 46 + (0.707106781821139 0.707106780551956 0) // Vertex R7sb = 47 + + (0.2 0 0.1) // Vertex r0t = 48 + (0.2 0 0.1) // Vertex r0st = 49 + (0.141421356364228 -0.141421356110391 0.1) // Vertex r1t = 50 + (3.58979347393082e-10 -0.2 0.1) // Vertex r2t = 51 + (3.58979347393082e-10 -0.2 0.1) // Vertex r2st = 52 + (-0.141421355856554 -0.141421356618065 0.1) // Vertex r3t = 53 + (-0.2 7.17958694786164e-10 0.1) // Vertex r4t = 54 + (-0.2 7.17958694786164e-10 0.1) // Vertex r4st = 55 + (-0.141421355856554 0.141421356618065 0.1) // Vertex r5t = 56 + (3.58979347393082e-10 0.2 0.1) // Vertex r6t = 57 + (3.58979347393082e-10 0.2 0.1) // Vertex r6st = 58 + (0.141421356364228 0.141421356110391 0.1) // Vertex r7t = 59 + + (0.5 0 0.1) // Vertex rb0t = 60 + (0.353553390910569 -0.353553390275978 0.1) // Vertex rb1t = 61 + (8.97448368482705e-10 -0.5 0.1) // Vertex rb2t = 62 + (-0.353553389641386 -0.353553391545162 0.1) // Vertex rb3t = 63 + (-0.5 1.79489673696541e-09 0.1) // Vertex rb4t = 64 + (-0.353553389641386 0.353553391545162 0.1) // Vertex rb5t = 65 + (8.97448368482705e-10 0.5 0.1) // Vertex rb6t = 66 + (0.353553390910569 0.353553390275978 0.1) // Vertex rb7t = 67 + + (0.6 0 0.1) // Vertex ri0t = 68 + (0.424264069092683 -0.424264068331174 0.1) // Vertex ri1t = 69 + (1.07693804217925e-09 -0.6 0.1) // Vertex ri2t = 70 + (-0.424264067569663 -0.424264069854194 0.1) // Vertex ri3t = 71 + (-0.6 2.15387608435849e-09 0.1) // Vertex ri4t = 72 + (-0.424264067569663 0.424264069854194 0.1) // Vertex ri5t = 73 + (1.07693804217925e-09 0.6 0.1) // Vertex ri6t = 74 + (0.424264069092683 0.424264068331174 0.1) // Vertex ri7t = 75 + + (0.7 0 0.1) // Vertex Rb0t = 76 + (0.494974747274797 -0.494974746386369 0.1) // Vertex Rb1t = 77 + (1.25642771587579e-09 -0.7 0.1) // Vertex Rb2t = 78 + (-0.49497474549794 -0.494974748163226 0.1) // Vertex Rb3t = 79 + (-0.7 2.51285543175157e-09 0.1) // Vertex Rb4t = 80 + (-0.49497474549794 0.494974748163226 0.1) // Vertex Rb5t = 81 + (1.25642771587579e-09 0.7 0.1) // Vertex Rb6t = 82 + (0.494974747274797 0.494974746386369 0.1) // Vertex Rb7t = 83 + + (1 0 0.1) // Vertex R0t = 84 + (0.707106781821139 -0.707106780551956 0.1) // Vertex R1t = 85 + (0.707106781821139 -0.707106780551956 0.1) // Vertex R1st = 86 + (1.79489673696541e-09 -1 0.1) // Vertex R2t = 87 + (-0.707106779282772 -0.707106783090323 0.1) // Vertex R3t = 88 + (-0.707106779282772 -0.707106783090323 0.1) // Vertex R3st = 89 + (-1 3.58979347393082e-09 0.1) // Vertex R4t = 90 + (-0.707106779282772 0.707106783090323 0.1) // Vertex R5t = 91 + (-0.707106779282772 0.707106783090323 0.1) // Vertex R5st = 92 + (1.79489673696541e-09 1 0.1) // Vertex R6t = 93 + (0.707106781821139 0.707106780551956 0.1) // Vertex R7t = 94 + (0.707106781821139 0.707106780551956 0.1) // Vertex R7st = 95 +); + +blocks +( + // block0 + hex (0 2 13 12 48 50 61 60) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block1 + hex (2 4 14 13 50 52 62 61) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block2 + hex (3 5 15 14 51 53 63 62) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block3 + hex (5 7 16 15 53 55 64 63) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block4 + hex (6 8 17 16 54 56 65 64) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block5 + hex (8 10 18 17 56 58 66 65) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block6 + hex (9 11 19 18 57 59 67 66) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block7 + hex (11 1 12 19 59 49 60 67) + rotor + (12 12 1) + simpleGrading (1 1 1) + + // block0 + hex (12 13 21 20 60 61 69 68) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block1 + hex (13 14 22 21 61 62 70 69) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block2 + hex (14 15 23 22 62 63 71 70) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block3 + hex (15 16 24 23 63 64 72 71) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block4 + hex (16 17 25 24 64 65 73 72) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block5 + hex (17 18 26 25 65 66 74 73) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block6 + hex (18 19 27 26 66 67 75 74) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block7 + hex (19 12 20 27 67 60 68 75) + rotor + (12 4 1) + simpleGrading (1 1 1) + + // block0 + hex (20 21 29 28 68 69 77 76) + (12 4 1) + simpleGrading (1 1 1) + + // block1 + hex (21 22 30 29 69 70 78 77) + (12 4 1) + simpleGrading (1 1 1) + + // block2 + hex (22 23 31 30 70 71 79 78) + (12 4 1) + simpleGrading (1 1 1) + + // block3 + hex (23 24 32 31 71 72 80 79) + (12 4 1) + simpleGrading (1 1 1) + + // block4 + hex (24 25 33 32 72 73 81 80) + (12 4 1) + simpleGrading (1 1 1) + + // block5 + hex (25 26 34 33 73 74 82 81) + (12 4 1) + simpleGrading (1 1 1) + + // block6 + hex (26 27 35 34 74 75 83 82) + (12 4 1) + simpleGrading (1 1 1) + + // block7 + hex (27 20 28 35 75 68 76 83) + (12 4 1) + simpleGrading (1 1 1) + + // block0 + hex (28 29 38 36 76 77 86 84) + (12 12 1) + simpleGrading (1 1 1) + + // block1 + hex (29 30 39 37 77 78 87 85) + (12 12 1) + simpleGrading (1 1 1) + + // block2 + hex (30 31 41 39 78 79 89 87) + (12 12 1) + simpleGrading (1 1 1) + + // block3 + hex (31 32 42 40 79 80 90 88) + (12 12 1) + simpleGrading (1 1 1) + + // block4 + hex (32 33 44 42 80 81 92 90) + (12 12 1) + simpleGrading (1 1 1) + + // block5 + hex (33 34 45 43 81 82 93 91) + (12 12 1) + simpleGrading (1 1 1) + + // block6 + hex (34 35 47 45 82 83 95 93) + (12 12 1) + simpleGrading (1 1 1) + + // block7 + hex (35 28 36 46 83 76 84 94) + (12 12 1) + simpleGrading (1 1 1) +); + +edges +( + arc 0 2 (0.184775906536601 -0.0765366863901046 0) + arc 2 4 (0.0765366867217582 -0.184775906399226 0) + arc 3 5 (-0.0765366860584508 -0.184775906673977 0) + arc 5 7 (-0.18477590626185 -0.0765366870534118 0) + arc 6 8 (-0.18477590626185 0.0765366870534118 0) + arc 8 10 (-0.0765366860584508 0.184775906673977 0) + arc 9 11 (0.0765366867217582 0.184775906399226 0) + arc 11 1 (0.184775906536601 0.0765366863901046 0) + + arc 12 13 (0.461939766341503 -0.191341715975262 0) + arc 13 14 (0.191341716804395 -0.461939765998065 0) + arc 14 15 (-0.191341715146127 -0.461939766684942 0) + arc 15 16 (-0.461939765654626 -0.19134171763353 0) + arc 16 17 (-0.461939765654626 0.19134171763353 0) + arc 17 18 (-0.191341715146127 0.461939766684942 0) + arc 18 19 (0.191341716804395 0.461939765998065 0) + arc 19 12 (0.461939766341503 0.191341715975262 0) + + arc 20 21 (0.554327719609804 -0.229610059170314 0) + arc 21 22 (0.229610060165275 -0.554327719197677 0) + arc 22 23 (-0.229610058175352 -0.55432772002193 0) + arc 23 24 (-0.554327718785551 -0.229610061160235 0) + arc 24 25 (-0.554327718785551 0.229610061160235 0) + arc 25 26 (-0.229610058175352 0.55432772002193 0) + arc 26 27 (0.229610060165275 0.554327719197677 0) + arc 27 20 (0.554327719609804 0.229610059170314 0) + + arc 28 29 (0.646715672878104 -0.267878402365366 0) + arc 29 30 (0.267878403526154 -0.64671567239729 0) + arc 30 31 (-0.267878401204578 -0.646715673358918 0) + arc 31 32 (-0.646715671916476 -0.267878404686941 0) + arc 32 33 (-0.646715671916476 0.267878404686941 0) + arc 33 34 (-0.267878401204578 0.646715673358918 0) + arc 34 35 (0.267878403526154 0.64671567239729 0) + arc 35 28 (0.646715672878104 0.267878402365366 0) + + arc 36 38 (0.923879532683006 -0.382683431950523 0) + arc 37 39 (0.382683433608791 -0.923879531996129 0) + arc 39 41 (-0.382683430292254 -0.923879533369883 0) + arc 40 42 (-0.923879531309252 -0.382683435267059 0) + arc 42 44 (-0.923879531309252 0.382683435267059 0) + arc 43 45 (-0.382683430292254 0.923879533369883 0) + arc 45 47 (0.382683433608791 0.923879531996129 0) + arc 46 36 (0.923879532683006 0.382683431950523 0) + + arc 48 50 (0.184775906536601 -0.0765366863901046 0.1) + arc 50 52 (0.0765366867217582 -0.184775906399226 0.1) + arc 51 53 (-0.0765366860584508 -0.184775906673977 0.1) + arc 53 55 (-0.18477590626185 -0.0765366870534118 0.1) + arc 54 56 (-0.18477590626185 0.0765366870534118 0.1) + arc 56 58 (-0.0765366860584508 0.184775906673977 0.1) + arc 57 59 (0.0765366867217582 0.184775906399226 0.1) + arc 59 49 (0.184775906536601 0.0765366863901046 0.1) + + arc 60 61 (0.461939766341503 -0.191341715975262 0.1) + arc 61 62 (0.191341716804395 -0.461939765998065 0.1) + arc 62 63 (-0.191341715146127 -0.461939766684942 0.1) + arc 63 64 (-0.461939765654626 -0.19134171763353 0.1) + arc 64 65 (-0.461939765654626 0.19134171763353 0.1) + arc 65 66 (-0.191341715146127 0.461939766684942 0.1) + arc 66 67 (0.191341716804395 0.461939765998065 0.1) + arc 67 60 (0.461939766341503 0.191341715975262 0.1) + + arc 68 69 (0.554327719609804 -0.229610059170314 0.1) + arc 69 70 (0.229610060165275 -0.554327719197677 0.1) + arc 70 71 (-0.229610058175352 -0.55432772002193 0.1) + arc 71 72 (-0.554327718785551 -0.229610061160235 0.1) + arc 72 73 (-0.554327718785551 0.229610061160235 0.1) + arc 73 74 (-0.229610058175352 0.55432772002193 0.1) + arc 74 75 (0.229610060165275 0.554327719197677 0.1) + arc 75 68 (0.554327719609804 0.229610059170314 0.1) + + arc 76 77 (0.646715672878104 -0.267878402365366 0.1) + arc 77 78 (0.267878403526154 -0.64671567239729 0.1) + arc 78 79 (-0.267878401204578 -0.646715673358918 0.1) + arc 79 80 (-0.646715671916476 -0.267878404686941 0.1) + arc 80 81 (-0.646715671916476 0.267878404686941 0.1) + arc 81 82 (-0.267878401204578 0.646715673358918 0.1) + arc 82 83 (0.267878403526154 0.64671567239729 0.1) + arc 83 76 (0.646715672878104 0.267878402365366 0.1) + + arc 84 86 (0.923879532683006 -0.382683431950523 0.1) + arc 85 87 (0.382683433608791 -0.923879531996129 0.1) + arc 87 89 (-0.382683430292254 -0.923879533369883 0.1) + arc 88 90 (-0.923879531309252 -0.382683435267059 0.1) + arc 90 92 (-0.923879531309252 0.382683435267059 0.1) + arc 91 93 (-0.382683430292254 0.923879533369883 0.1) + arc 93 95 (0.382683433608791 0.923879531996129 0.1) + arc 94 84 (0.923879532683006 0.382683431950523 0.1) +); + +patches +( + wall rotor + ( + (0 2 50 48) + (2 4 52 50) + (3 5 53 51) + (5 7 55 53) + (6 8 56 54) + (8 10 58 56) + (9 11 59 57) + (11 1 49 59) + + (0 12 60 48) + (1 12 60 49) + + (3 14 62 51) + (4 14 62 52) + + (6 16 64 54) + (7 16 64 55) + + (9 18 66 57) + (10 18 66 58) + ) + + wall stator + ( + (36 38 86 84) + (37 39 87 85) + (39 41 89 87) + (40 42 90 88) + (42 44 92 90) + (43 45 93 91) + (45 47 95 93) + (46 36 84 94) + + (37 29 77 85) + (38 29 77 86) + + (40 31 79 88) + (41 31 79 89) + + (43 33 81 91) + (44 33 81 92) + + (46 35 83 94) + (47 35 83 95) + ) + + empty front + ( + (48 50 61 60) + (50 52 62 61) + (51 53 63 62) + (53 55 64 63) + (54 56 65 64) + (56 58 66 65) + (57 59 67 66) + (59 49 60 67) + (60 61 69 68) + (61 62 70 69) + (62 63 71 70) + (63 64 72 71) + (64 65 73 72) + (65 66 74 73) + (66 67 75 74) + (67 60 68 75) + (68 69 77 76) + (69 70 78 77) + (70 71 79 78) + (71 72 80 79) + (72 73 81 80) + (73 74 82 81) + (74 75 83 82) + (75 68 76 83) + (76 77 86 84) + (77 78 87 85) + (78 79 89 87) + (79 80 90 88) + (80 81 92 90) + (81 82 93 91) + (82 83 95 93) + (83 76 84 94) + ) + + empty back + ( + (0 12 13 2) + (2 13 14 4) + (3 14 15 5) + (5 15 16 7) + (6 16 17 8) + (8 17 18 10) + (9 18 19 11) + (11 19 12 1) + (12 20 21 13) + (13 21 22 14) + (14 22 23 15) + (15 23 24 16) + (16 24 25 17) + (17 25 26 18) + (18 26 27 19) + (19 27 20 12) + (20 28 29 21) + (21 29 30 22) + (22 30 31 23) + (23 31 32 24) + (24 32 33 25) + (25 33 34 26) + (26 34 35 27) + (27 35 28 20) + (28 36 38 29) + (29 37 39 30) + (30 39 41 31) + (31 40 42 32) + (32 42 44 33) + (33 43 45 34) + (34 45 47 35) + (35 46 36 28) + ) +); + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4 b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4 new file mode 100644 index 0000000000000000000000000000000000000000..eaa448596c06a89b270603aaabd722cf44fa7f3e --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/blockMeshDict.m4 @@ -0,0 +1,818 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + `format' ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// General macros to create 2D/extruded-2D meshes + +changecom(//)changequote([,]) +define(calc, [esyscmd(perl -e 'print ($1)')]) +define(VCOUNT, 0) +define(vlabel, [[// ]Vertex $1 = VCOUNT define($1, VCOUNT)define([VCOUNT], incr(VCOUNT))]) +define(pi, 3.14159265) + +define(hex2D, hex ($1b $2b $3b $4b $1t $2t $3t $4t)) +define(quad2D, ($1b $2b $2t $1t)) +define(frontQuad, ($1t $2t $3t $4t)) +define(backQuad, ($1b $4b $3b $2b)) + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 0.1; + +// Hub radius +define(r, 0.2) + +// Impeller-tip radius +define(rb, 0.5) + +// Baffle-tip radius +define(Rb, 0.7) + +// Tank radius +define(R, 1) + +// MRF region radius +define(ri, calc(0.5*(rb + Rb))) + +// Thickness of 2D slab +define(z, 0.1) + +// Base z +define(Zb, 0) + +// Top z +define(Zt, calc(Zb + z)) + +// Number of cells radially between hub and impeller tip +define(Nr, 12) + +// Number of cells radially in each of the two regions between +// impeller and baffle tips +define(Ni, 4) + +// Number of cells radially between baffle tip and tank +define(NR, 12) + +// Number of cells azimuthally in each of the 8 blocks +define(Na, 12) + +// Number of cells in the thickness of the slab +define(Nz, 1) + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +define(vert, (x$1$2 y$1$2 $3)) +define(evert, (ex$1$2 ey$1$2 $3)) + +define(a0, 0) +define(a1, -45) +define(a2, -90) +define(a3, -135) +define(a4, 180) +define(a5, 135) +define(a6, 90) +define(a7, 45) + +define(ea0, -22.5) +define(ea1, -67.5) +define(ea2, -112.5) +define(ea3, -157.5) +define(ea4, 157.5) +define(ea5, 112.5) +define(ea6, 67.5) +define(ea7, 22.5) + +define(ca0, calc(cos((pi/180)*a0))) +define(ca1, calc(cos((pi/180)*a1))) +define(ca2, calc(cos((pi/180)*a2))) +define(ca3, calc(cos((pi/180)*a3))) +define(ca4, calc(cos((pi/180)*a4))) +define(ca5, calc(cos((pi/180)*a5))) +define(ca6, calc(cos((pi/180)*a6))) +define(ca7, calc(cos((pi/180)*a7))) + +define(sa0, calc(sin((pi/180)*a0))) +define(sa1, calc(sin((pi/180)*a1))) +define(sa2, calc(sin((pi/180)*a2))) +define(sa3, calc(sin((pi/180)*a3))) +define(sa4, calc(sin((pi/180)*a4))) +define(sa5, calc(sin((pi/180)*a5))) +define(sa6, calc(sin((pi/180)*a6))) +define(sa7, calc(sin((pi/180)*a7))) + +define(cea0, calc(cos((pi/180)*ea0))) +define(cea1, calc(cos((pi/180)*ea1))) +define(cea2, calc(cos((pi/180)*ea2))) +define(cea3, calc(cos((pi/180)*ea3))) +define(cea4, calc(cos((pi/180)*ea4))) +define(cea5, calc(cos((pi/180)*ea5))) +define(cea6, calc(cos((pi/180)*ea6))) +define(cea7, calc(cos((pi/180)*ea7))) + +define(sea0, calc(sin((pi/180)*ea0))) +define(sea1, calc(sin((pi/180)*ea1))) +define(sea2, calc(sin((pi/180)*ea2))) +define(sea3, calc(sin((pi/180)*ea3))) +define(sea4, calc(sin((pi/180)*ea4))) +define(sea5, calc(sin((pi/180)*ea5))) +define(sea6, calc(sin((pi/180)*ea6))) +define(sea7, calc(sin((pi/180)*ea7))) + +define(x00, calc(r*ca0)) +define(x01, calc(r*ca1)) +define(x02, calc(r*ca2)) +define(x03, calc(r*ca3)) +define(x04, calc(r*ca4)) +define(x05, calc(r*ca5)) +define(x06, calc(r*ca6)) +define(x07, calc(r*ca7)) + +define(x10, calc(rb*ca0)) +define(x11, calc(rb*ca1)) +define(x12, calc(rb*ca2)) +define(x13, calc(rb*ca3)) +define(x14, calc(rb*ca4)) +define(x15, calc(rb*ca5)) +define(x16, calc(rb*ca6)) +define(x17, calc(rb*ca7)) + +define(x20, calc(ri*ca0)) +define(x21, calc(ri*ca1)) +define(x22, calc(ri*ca2)) +define(x23, calc(ri*ca3)) +define(x24, calc(ri*ca4)) +define(x25, calc(ri*ca5)) +define(x26, calc(ri*ca6)) +define(x27, calc(ri*ca7)) + +define(x30, calc(Rb*ca0)) +define(x31, calc(Rb*ca1)) +define(x32, calc(Rb*ca2)) +define(x33, calc(Rb*ca3)) +define(x34, calc(Rb*ca4)) +define(x35, calc(Rb*ca5)) +define(x36, calc(Rb*ca6)) +define(x37, calc(Rb*ca7)) + +define(x40, calc(R*ca0)) +define(x41, calc(R*ca1)) +define(x42, calc(R*ca2)) +define(x43, calc(R*ca3)) +define(x44, calc(R*ca4)) +define(x45, calc(R*ca5)) +define(x46, calc(R*ca6)) +define(x47, calc(R*ca7)) + +define(y00, calc(r*sa0)) +define(y01, calc(r*sa1)) +define(y02, calc(r*sa2)) +define(y03, calc(r*sa3)) +define(y04, calc(r*sa4)) +define(y05, calc(r*sa5)) +define(y06, calc(r*sa6)) +define(y07, calc(r*sa7)) + +define(y10, calc(rb*sa0)) +define(y11, calc(rb*sa1)) +define(y12, calc(rb*sa2)) +define(y13, calc(rb*sa3)) +define(y14, calc(rb*sa4)) +define(y15, calc(rb*sa5)) +define(y16, calc(rb*sa6)) +define(y17, calc(rb*sa7)) + +define(y20, calc(ri*sa0)) +define(y21, calc(ri*sa1)) +define(y22, calc(ri*sa2)) +define(y23, calc(ri*sa3)) +define(y24, calc(ri*sa4)) +define(y25, calc(ri*sa5)) +define(y26, calc(ri*sa6)) +define(y27, calc(ri*sa7)) + +define(y30, calc(Rb*sa0)) +define(y31, calc(Rb*sa1)) +define(y32, calc(Rb*sa2)) +define(y33, calc(Rb*sa3)) +define(y34, calc(Rb*sa4)) +define(y35, calc(Rb*sa5)) +define(y36, calc(Rb*sa6)) +define(y37, calc(Rb*sa7)) + +define(y40, calc(R*sa0)) +define(y41, calc(R*sa1)) +define(y42, calc(R*sa2)) +define(y43, calc(R*sa3)) +define(y44, calc(R*sa4)) +define(y45, calc(R*sa5)) +define(y46, calc(R*sa6)) +define(y47, calc(R*sa7)) + +define(ex00, calc(r*cea0)) +define(ex01, calc(r*cea1)) +define(ex02, calc(r*cea2)) +define(ex03, calc(r*cea3)) +define(ex04, calc(r*cea4)) +define(ex05, calc(r*cea5)) +define(ex06, calc(r*cea6)) +define(ex07, calc(r*cea7)) + +define(ex10, calc(rb*cea0)) +define(ex11, calc(rb*cea1)) +define(ex12, calc(rb*cea2)) +define(ex13, calc(rb*cea3)) +define(ex14, calc(rb*cea4)) +define(ex15, calc(rb*cea5)) +define(ex16, calc(rb*cea6)) +define(ex17, calc(rb*cea7)) + +define(ex20, calc(ri*cea0)) +define(ex21, calc(ri*cea1)) +define(ex22, calc(ri*cea2)) +define(ex23, calc(ri*cea3)) +define(ex24, calc(ri*cea4)) +define(ex25, calc(ri*cea5)) +define(ex26, calc(ri*cea6)) +define(ex27, calc(ri*cea7)) + +define(ex30, calc(Rb*cea0)) +define(ex31, calc(Rb*cea1)) +define(ex32, calc(Rb*cea2)) +define(ex33, calc(Rb*cea3)) +define(ex34, calc(Rb*cea4)) +define(ex35, calc(Rb*cea5)) +define(ex36, calc(Rb*cea6)) +define(ex37, calc(Rb*cea7)) + +define(ex40, calc(R*cea0)) +define(ex41, calc(R*cea1)) +define(ex42, calc(R*cea2)) +define(ex43, calc(R*cea3)) +define(ex44, calc(R*cea4)) +define(ex45, calc(R*cea5)) +define(ex46, calc(R*cea6)) +define(ex47, calc(R*cea7)) + +define(ey00, calc(r*sea0)) +define(ey01, calc(r*sea1)) +define(ey02, calc(r*sea2)) +define(ey03, calc(r*sea3)) +define(ey04, calc(r*sea4)) +define(ey05, calc(r*sea5)) +define(ey06, calc(r*sea6)) +define(ey07, calc(r*sea7)) + +define(ey10, calc(rb*sea0)) +define(ey11, calc(rb*sea1)) +define(ey12, calc(rb*sea2)) +define(ey13, calc(rb*sea3)) +define(ey14, calc(rb*sea4)) +define(ey15, calc(rb*sea5)) +define(ey16, calc(rb*sea6)) +define(ey17, calc(rb*sea7)) + +define(ey20, calc(ri*sea0)) +define(ey21, calc(ri*sea1)) +define(ey22, calc(ri*sea2)) +define(ey23, calc(ri*sea3)) +define(ey24, calc(ri*sea4)) +define(ey25, calc(ri*sea5)) +define(ey26, calc(ri*sea6)) +define(ey27, calc(ri*sea7)) + +define(ey30, calc(Rb*sea0)) +define(ey31, calc(Rb*sea1)) +define(ey32, calc(Rb*sea2)) +define(ey33, calc(Rb*sea3)) +define(ey34, calc(Rb*sea4)) +define(ey35, calc(Rb*sea5)) +define(ey36, calc(Rb*sea6)) +define(ey37, calc(Rb*sea7)) + +define(ey40, calc(R*sea0)) +define(ey41, calc(R*sea1)) +define(ey42, calc(R*sea2)) +define(ey43, calc(R*sea3)) +define(ey44, calc(R*sea4)) +define(ey45, calc(R*sea5)) +define(ey46, calc(R*sea6)) +define(ey47, calc(R*sea7)) + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +vertices +( + vert(0, 0, Zb) vlabel(r0b) + vert(0, 0, Zb) vlabel(r0sb) + vert(0, 1, Zb) vlabel(r1b) + vert(0, 2, Zb) vlabel(r2b) + vert(0, 2, Zb) vlabel(r2sb) + vert(0, 3, Zb) vlabel(r3b) + vert(0, 4, Zb) vlabel(r4b) + vert(0, 4, Zb) vlabel(r4sb) + vert(0, 5, Zb) vlabel(r5b) + vert(0, 6, Zb) vlabel(r6b) + vert(0, 6, Zb) vlabel(r6sb) + vert(0, 7, Zb) vlabel(r7b) + + vert(1, 0, Zb) vlabel(rb0b) + vert(1, 1, Zb) vlabel(rb1b) + vert(1, 2, Zb) vlabel(rb2b) + vert(1, 3, Zb) vlabel(rb3b) + vert(1, 4, Zb) vlabel(rb4b) + vert(1, 5, Zb) vlabel(rb5b) + vert(1, 6, Zb) vlabel(rb6b) + vert(1, 7, Zb) vlabel(rb7b) + + vert(2, 0, Zb) vlabel(ri0b) + vert(2, 1, Zb) vlabel(ri1b) + vert(2, 2, Zb) vlabel(ri2b) + vert(2, 3, Zb) vlabel(ri3b) + vert(2, 4, Zb) vlabel(ri4b) + vert(2, 5, Zb) vlabel(ri5b) + vert(2, 6, Zb) vlabel(ri6b) + vert(2, 7, Zb) vlabel(ri7b) + + vert(3, 0, Zb) vlabel(Rb0b) + vert(3, 1, Zb) vlabel(Rb1b) + vert(3, 2, Zb) vlabel(Rb2b) + vert(3, 3, Zb) vlabel(Rb3b) + vert(3, 4, Zb) vlabel(Rb4b) + vert(3, 5, Zb) vlabel(Rb5b) + vert(3, 6, Zb) vlabel(Rb6b) + vert(3, 7, Zb) vlabel(Rb7b) + + vert(4, 0, Zb) vlabel(R0b) + vert(4, 1, Zb) vlabel(R1b) + vert(4, 1, Zb) vlabel(R1sb) + vert(4, 2, Zb) vlabel(R2b) + vert(4, 3, Zb) vlabel(R3b) + vert(4, 3, Zb) vlabel(R3sb) + vert(4, 4, Zb) vlabel(R4b) + vert(4, 5, Zb) vlabel(R5b) + vert(4, 5, Zb) vlabel(R5sb) + vert(4, 6, Zb) vlabel(R6b) + vert(4, 7, Zb) vlabel(R7b) + vert(4, 7, Zb) vlabel(R7sb) + + vert(0, 0, Zt) vlabel(r0t) + vert(0, 0, Zt) vlabel(r0st) + vert(0, 1, Zt) vlabel(r1t) + vert(0, 2, Zt) vlabel(r2t) + vert(0, 2, Zt) vlabel(r2st) + vert(0, 3, Zt) vlabel(r3t) + vert(0, 4, Zt) vlabel(r4t) + vert(0, 4, Zt) vlabel(r4st) + vert(0, 5, Zt) vlabel(r5t) + vert(0, 6, Zt) vlabel(r6t) + vert(0, 6, Zt) vlabel(r6st) + vert(0, 7, Zt) vlabel(r7t) + + vert(1, 0, Zt) vlabel(rb0t) + vert(1, 1, Zt) vlabel(rb1t) + vert(1, 2, Zt) vlabel(rb2t) + vert(1, 3, Zt) vlabel(rb3t) + vert(1, 4, Zt) vlabel(rb4t) + vert(1, 5, Zt) vlabel(rb5t) + vert(1, 6, Zt) vlabel(rb6t) + vert(1, 7, Zt) vlabel(rb7t) + + vert(2, 0, Zt) vlabel(ri0t) + vert(2, 1, Zt) vlabel(ri1t) + vert(2, 2, Zt) vlabel(ri2t) + vert(2, 3, Zt) vlabel(ri3t) + vert(2, 4, Zt) vlabel(ri4t) + vert(2, 5, Zt) vlabel(ri5t) + vert(2, 6, Zt) vlabel(ri6t) + vert(2, 7, Zt) vlabel(ri7t) + + vert(3, 0, Zt) vlabel(Rb0t) + vert(3, 1, Zt) vlabel(Rb1t) + vert(3, 2, Zt) vlabel(Rb2t) + vert(3, 3, Zt) vlabel(Rb3t) + vert(3, 4, Zt) vlabel(Rb4t) + vert(3, 5, Zt) vlabel(Rb5t) + vert(3, 6, Zt) vlabel(Rb6t) + vert(3, 7, Zt) vlabel(Rb7t) + + vert(4, 0, Zt) vlabel(R0t) + vert(4, 1, Zt) vlabel(R1t) + vert(4, 1, Zt) vlabel(R1st) + vert(4, 2, Zt) vlabel(R2t) + vert(4, 3, Zt) vlabel(R3t) + vert(4, 3, Zt) vlabel(R3st) + vert(4, 4, Zt) vlabel(R4t) + vert(4, 5, Zt) vlabel(R5t) + vert(4, 5, Zt) vlabel(R5st) + vert(4, 6, Zt) vlabel(R6t) + vert(4, 7, Zt) vlabel(R7t) + vert(4, 7, Zt) vlabel(R7st) +); + +blocks +( + // block0 + hex2D(r0, r1, rb1, rb0) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block1 + hex2D(r1, r2s, rb2, rb1) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block2 + hex2D(r2, r3, rb3, rb2) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block3 + hex2D(r3, r4s, rb4, rb3) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block4 + hex2D(r4, r5, rb5, rb4) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block5 + hex2D(r5, r6s, rb6, rb5) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block6 + hex2D(r6, r7, rb7, rb6) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block7 + hex2D(r7, r0s, rb0, rb7) + rotor + (Na Nr Nz) + simpleGrading (1 1 1) + + // block0 + hex2D(rb0, rb1, ri1, ri0) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block1 + hex2D(rb1, rb2, ri2, ri1) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block2 + hex2D(rb2, rb3, ri3, ri2) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block3 + hex2D(rb3, rb4, ri4, ri3) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block4 + hex2D(rb4, rb5, ri5, ri4) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block5 + hex2D(rb5, rb6, ri6, ri5) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block6 + hex2D(rb6, rb7, ri7, ri6) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block7 + hex2D(rb7, rb0, ri0, ri7) + rotor + (Na Ni Nz) + simpleGrading (1 1 1) + + // block0 + hex2D(ri0, ri1, Rb1, Rb0) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block1 + hex2D(ri1, ri2, Rb2, Rb1) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block2 + hex2D(ri2, ri3, Rb3, Rb2) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block3 + hex2D(ri3, ri4, Rb4, Rb3) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block4 + hex2D(ri4, ri5, Rb5, Rb4) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block5 + hex2D(ri5, ri6, Rb6, Rb5) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block6 + hex2D(ri6, ri7, Rb7, Rb6) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block7 + hex2D(ri7, ri0, Rb0, Rb7) + (Na Ni Nz) + simpleGrading (1 1 1) + + // block0 + hex2D(Rb0, Rb1, R1s, R0) + (Na NR Nz) + simpleGrading (1 1 1) + + // block1 + hex2D(Rb1, Rb2, R2, R1) + (Na NR Nz) + simpleGrading (1 1 1) + + // block2 + hex2D(Rb2, Rb3, R3s, R2) + (Na NR Nz) + simpleGrading (1 1 1) + + // block3 + hex2D(Rb3, Rb4, R4, R3) + (Na NR Nz) + simpleGrading (1 1 1) + + // block4 + hex2D(Rb4, Rb5, R5s, R4) + (Na NR Nz) + simpleGrading (1 1 1) + + // block5 + hex2D(Rb5, Rb6, R6, R5) + (Na NR Nz) + simpleGrading (1 1 1) + + // block6 + hex2D(Rb6, Rb7, R7s, R6) + (Na NR Nz) + simpleGrading (1 1 1) + + // block7 + hex2D(Rb7, Rb0, R0, R7) + (Na NR Nz) + simpleGrading (1 1 1) +); + +edges +( + arc r0b r1b evert(0, 0, Zb) + arc r1b r2sb evert(0, 1, Zb) + arc r2b r3b evert(0, 2, Zb) + arc r3b r4sb evert(0, 3, Zb) + arc r4b r5b evert(0, 4, Zb) + arc r5b r6sb evert(0, 5, Zb) + arc r6b r7b evert(0, 6, Zb) + arc r7b r0sb evert(0, 7, Zb) + + arc rb0b rb1b evert(1, 0, Zb) + arc rb1b rb2b evert(1, 1, Zb) + arc rb2b rb3b evert(1, 2, Zb) + arc rb3b rb4b evert(1, 3, Zb) + arc rb4b rb5b evert(1, 4, Zb) + arc rb5b rb6b evert(1, 5, Zb) + arc rb6b rb7b evert(1, 6, Zb) + arc rb7b rb0b evert(1, 7, Zb) + + arc ri0b ri1b evert(2, 0, Zb) + arc ri1b ri2b evert(2, 1, Zb) + arc ri2b ri3b evert(2, 2, Zb) + arc ri3b ri4b evert(2, 3, Zb) + arc ri4b ri5b evert(2, 4, Zb) + arc ri5b ri6b evert(2, 5, Zb) + arc ri6b ri7b evert(2, 6, Zb) + arc ri7b ri0b evert(2, 7, Zb) + + arc Rb0b Rb1b evert(3, 0, Zb) + arc Rb1b Rb2b evert(3, 1, Zb) + arc Rb2b Rb3b evert(3, 2, Zb) + arc Rb3b Rb4b evert(3, 3, Zb) + arc Rb4b Rb5b evert(3, 4, Zb) + arc Rb5b Rb6b evert(3, 5, Zb) + arc Rb6b Rb7b evert(3, 6, Zb) + arc Rb7b Rb0b evert(3, 7, Zb) + + arc R0b R1sb evert(4, 0, Zb) + arc R1b R2b evert(4, 1, Zb) + arc R2b R3sb evert(4, 2, Zb) + arc R3b R4b evert(4, 3, Zb) + arc R4b R5sb evert(4, 4, Zb) + arc R5b R6b evert(4, 5, Zb) + arc R6b R7sb evert(4, 6, Zb) + arc R7b R0b evert(4, 7, Zb) + + arc r0t r1t evert(0, 0, Zt) + arc r1t r2st evert(0, 1, Zt) + arc r2t r3t evert(0, 2, Zt) + arc r3t r4st evert(0, 3, Zt) + arc r4t r5t evert(0, 4, Zt) + arc r5t r6st evert(0, 5, Zt) + arc r6t r7t evert(0, 6, Zt) + arc r7t r0st evert(0, 7, Zt) + + arc rb0t rb1t evert(1, 0, Zt) + arc rb1t rb2t evert(1, 1, Zt) + arc rb2t rb3t evert(1, 2, Zt) + arc rb3t rb4t evert(1, 3, Zt) + arc rb4t rb5t evert(1, 4, Zt) + arc rb5t rb6t evert(1, 5, Zt) + arc rb6t rb7t evert(1, 6, Zt) + arc rb7t rb0t evert(1, 7, Zt) + + arc ri0t ri1t evert(2, 0, Zt) + arc ri1t ri2t evert(2, 1, Zt) + arc ri2t ri3t evert(2, 2, Zt) + arc ri3t ri4t evert(2, 3, Zt) + arc ri4t ri5t evert(2, 4, Zt) + arc ri5t ri6t evert(2, 5, Zt) + arc ri6t ri7t evert(2, 6, Zt) + arc ri7t ri0t evert(2, 7, Zt) + + arc Rb0t Rb1t evert(3, 0, Zt) + arc Rb1t Rb2t evert(3, 1, Zt) + arc Rb2t Rb3t evert(3, 2, Zt) + arc Rb3t Rb4t evert(3, 3, Zt) + arc Rb4t Rb5t evert(3, 4, Zt) + arc Rb5t Rb6t evert(3, 5, Zt) + arc Rb6t Rb7t evert(3, 6, Zt) + arc Rb7t Rb0t evert(3, 7, Zt) + + arc R0t R1st evert(4, 0, Zt) + arc R1t R2t evert(4, 1, Zt) + arc R2t R3st evert(4, 2, Zt) + arc R3t R4t evert(4, 3, Zt) + arc R4t R5st evert(4, 4, Zt) + arc R5t R6t evert(4, 5, Zt) + arc R6t R7st evert(4, 6, Zt) + arc R7t R0t evert(4, 7, Zt) +); + +patches +( + wall rotor + ( + quad2D(r0, r1) + quad2D(r1, r2s) + quad2D(r2, r3) + quad2D(r3, r4s) + quad2D(r4, r5) + quad2D(r5, r6s) + quad2D(r6, r7) + quad2D(r7, r0s) + + quad2D(r0, rb0) + quad2D(r0s, rb0) + + quad2D(r2, rb2) + quad2D(r2s, rb2) + + quad2D(r4, rb4) + quad2D(r4s, rb4) + + quad2D(r6, rb6) + quad2D(r6s, rb6) + ) + + wall stator + ( + quad2D(R0, R1s) + quad2D(R1, R2) + quad2D(R2, R3s) + quad2D(R3, R4) + quad2D(R4, R5s) + quad2D(R5, R6) + quad2D(R6, R7s) + quad2D(R7, R0) + + quad2D(R1, Rb1) + quad2D(R1s, Rb1) + + quad2D(R3, Rb3) + quad2D(R3s, Rb3) + + quad2D(R5, Rb5) + quad2D(R5s, Rb5) + + quad2D(R7, Rb7) + quad2D(R7s, Rb7) + ) + + empty front + ( + frontQuad(r0, r1, rb1, rb0) + frontQuad(r1, r2s, rb2, rb1) + frontQuad(r2, r3, rb3, rb2) + frontQuad(r3, r4s, rb4, rb3) + frontQuad(r4, r5, rb5, rb4) + frontQuad(r5, r6s, rb6, rb5) + frontQuad(r6, r7, rb7, rb6) + frontQuad(r7, r0s, rb0, rb7) + frontQuad(rb0, rb1, ri1, ri0) + frontQuad(rb1, rb2, ri2, ri1) + frontQuad(rb2, rb3, ri3, ri2) + frontQuad(rb3, rb4, ri4, ri3) + frontQuad(rb4, rb5, ri5, ri4) + frontQuad(rb5, rb6, ri6, ri5) + frontQuad(rb6, rb7, ri7, ri6) + frontQuad(rb7, rb0, ri0, ri7) + frontQuad(ri0, ri1, Rb1, Rb0) + frontQuad(ri1, ri2, Rb2, Rb1) + frontQuad(ri2, ri3, Rb3, Rb2) + frontQuad(ri3, ri4, Rb4, Rb3) + frontQuad(ri4, ri5, Rb5, Rb4) + frontQuad(ri5, ri6, Rb6, Rb5) + frontQuad(ri6, ri7, Rb7, Rb6) + frontQuad(ri7, ri0, Rb0, Rb7) + frontQuad(Rb0, Rb1, R1s, R0) + frontQuad(Rb1, Rb2, R2, R1) + frontQuad(Rb2, Rb3, R3s, R2) + frontQuad(Rb3, Rb4, R4, R3) + frontQuad(Rb4, Rb5, R5s, R4) + frontQuad(Rb5, Rb6, R6, R5) + frontQuad(Rb6, Rb7, R7s, R6) + frontQuad(Rb7, Rb0, R0, R7) + ) + + empty back + ( + backQuad(r0, r1, rb1, rb0) + backQuad(r1, r2s, rb2, rb1) + backQuad(r2, r3, rb3, rb2) + backQuad(r3, r4s, rb4, rb3) + backQuad(r4, r5, rb5, rb4) + backQuad(r5, r6s, rb6, rb5) + backQuad(r6, r7, rb7, rb6) + backQuad(r7, r0s, rb0, rb7) + backQuad(rb0, rb1, ri1, ri0) + backQuad(rb1, rb2, ri2, ri1) + backQuad(rb2, rb3, ri3, ri2) + backQuad(rb3, rb4, ri4, ri3) + backQuad(rb4, rb5, ri5, ri4) + backQuad(rb5, rb6, ri6, ri5) + backQuad(rb6, rb7, ri7, ri6) + backQuad(rb7, rb0, ri0, ri7) + backQuad(ri0, ri1, Rb1, Rb0) + backQuad(ri1, ri2, Rb2, Rb1) + backQuad(ri2, ri3, Rb3, Rb2) + backQuad(ri3, ri4, Rb4, Rb3) + backQuad(ri4, ri5, Rb5, Rb4) + backQuad(ri5, ri6, Rb6, Rb5) + backQuad(ri6, ri7, Rb7, Rb6) + backQuad(ri7, ri0, Rb0, Rb7) + backQuad(Rb0, Rb1, R1s, R0) + backQuad(Rb1, Rb2, R2, R1) + backQuad(Rb2, Rb3, R3s, R2) + backQuad(Rb3, Rb4, R4, R3) + backQuad(Rb4, Rb5, R5s, R4) + backQuad(Rb5, Rb6, R6, R5) + backQuad(Rb6, Rb7, R7s, R6) + backQuad(Rb7, Rb0, R0, R7) + ) +); + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/boundary b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..292f25b806357d9df75c7731f74dee0ec0aa3a40 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/polyMesh/boundary @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +4 +( + rotor + { + type wall; + nFaces 192; + startFace 5952; + } + stator + { + type wall; + nFaces 192; + startFace 6144; + } + front + { + type empty; + nFaces 3072; + startFace 6336; + } + back + { + type empty; + nFaces 3072; + startFace 9408; + } +) + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/transportProperties b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..e29c7f9fc04be3aafc3bf54d2ac9208b0250c4e6 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/transportProperties @@ -0,0 +1,35 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object transportProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +phase1 +{ + transportModel Newtonian; + nu nu [ 0 2 -1 0 0 0 0 ] 1e-4; + rho rho [ 1 -3 0 0 0 0 0 ] 1000; +} + +phase2 +{ + transportModel Newtonian; + nu nu [ 0 2 -1 0 0 0 0 ] 1e-4; + rho rho [ 1 -3 0 0 0 0 0 ] 500; +} + +sigma sigma [ 1 0 -2 0 0 0 0 ] 0.05; + + +// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/laminar/shockTube/constant/transportProperties b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/turbulenceProperties similarity index 91% rename from tutorials/compressible/sonicFoam/laminar/shockTube/constant/transportProperties rename to tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/turbulenceProperties index 1e9d5be60c285c2403250e1961ee8d1552dd14a8..886d34bdef135c39216d342240a96bf0530bdd62 100644 --- a/tutorials/compressible/sonicFoam/laminar/shockTube/constant/transportProperties +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/constant/turbulenceProperties @@ -11,11 +11,11 @@ FoamFile format ascii; class dictionary; location "constant"; - object transportProperties; + object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -mu mu [ 1 -1 -1 0 0 0 0 ] 0; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/makeMesh b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/makeMesh new file mode 100755 index 0000000000000000000000000000000000000000..b0be10d8e5f2b0525cec8f23c93585fde73f5879 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/makeMesh @@ -0,0 +1,11 @@ +#!/bin/sh + +m4 < constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict +blockMesh +cellSet +#- MRF determines its own faceZone if not supplied +#cp system/faceSetDict_rotorFaces system/faceSetDict +#faceSet +#cp system/faceSetDict_noBoundaryFaces system/faceSetDict +#faceSet +setsToZones -noFlipMap diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/cellSetDict b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/cellSetDict new file mode 100644 index 0000000000000000000000000000000000000000..6d1af846e3c61c753852a90c8c8bcc5cfd68cf4d --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/cellSetDict @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object cellSetDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +name rotor; + +action new; + +topoSetSources ( zoneToCell { name rotor ; } ); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/controlDict b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..249378f87cac7f374e958053846a949d585e047e --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/controlDict @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 4; + +deltaT 1e-3; + +writeControl adjustableRunTime; + +writeInterval 0.125; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 0.5; + +maxDeltaT 1; + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict new file mode 100644 index 0000000000000000000000000000000000000000..5507dbd729453219d583c8c3f7e8867eee0ac1a4 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object faceSetDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +name rotor; + +action delete; + +topoSetSources ( boundaryToFace { } ); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict_noBoundaryFaces b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict_noBoundaryFaces new file mode 100644 index 0000000000000000000000000000000000000000..062727698328907a23480d3aaae086f2030a1537 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict_noBoundaryFaces @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object faceSetDict_noBoundaryFaces; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +name rotor; + +action delete; + +topoSetSources ( boundaryToFace { } ); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict_rotorFaces b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict_rotorFaces new file mode 100644 index 0000000000000000000000000000000000000000..5e7917b2fe4f3eae8b3dd4db38d66a39f29a92a3 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/faceSetDict_rotorFaces @@ -0,0 +1,25 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object faceSetDict_rotorFaces; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +name rotor; + +action new; + +topoSetSources ( cellToFace { set rotor ; option all ; } ); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSchemes b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/fvSchemes similarity index 80% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSchemes rename to tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/fvSchemes index f923afcfacf038c5cd521b7e67b1c11b4d535866..75d5813812fc769d95a0204eab2181acc078ca8c 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSchemes +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/fvSchemes @@ -23,26 +23,25 @@ ddtSchemes gradSchemes { default Gauss linear; - grad(p) Gauss linear; + grad(U) Gauss linear; + grad(alpha1) Gauss linear; } divSchemes { - default none; - div(phi,U) Gauss linear; + div(rho*phi,U) Gauss linear; + div(phi,alpha) Gauss vanLeer; + div(phirb,alpha) Gauss interfaceCompression; } laplacianSchemes { - default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; + default Gauss linear corrected; } interpolationSchemes { default linear; - interpolate(HbyA) linear; } snGradSchemes @@ -54,6 +53,8 @@ fluxRequired { default no; p ; + pcorr ; + alpha1 ; } diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSolution b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/fvSolution similarity index 73% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSolution rename to tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/fvSolution index 46670343363af32a79fcf7bd788316556b9de7d7..febd619c4824c91a5fee8280895288ecf80e408e 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSolution +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/fvSolution @@ -17,11 +17,27 @@ FoamFile solvers { + pcorr + { + solver PCG; + preconditioner DIC; + tolerance 1e-10; + relTol 0; + } + p { solver PCG; preconditioner DIC; - tolerance 1e-06; + tolerance 1e-07; + relTol 0.05; + } + + pFinal + { + solver PCG; + preconditioner DIC; + tolerance 1e-07; relTol 0; } @@ -29,15 +45,19 @@ solvers { solver PBiCG; preconditioner DILU; - tolerance 1e-05; + tolerance 1e-06; relTol 0; } } PISO { - nCorrectors 2; + momentumPredictor no; + nCorrectors 3; nNonOrthogonalCorrectors 0; + nAlphaCorr 1; + nAlphaSubCycles 2; + cAlpha 1; pRefCell 0; pRefValue 0; } diff --git a/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/setFieldsDict b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/setFieldsDict new file mode 100644 index 0000000000000000000000000000000000000000..2de344506d223ab76e1bb8cc7b273c285b37d5a3 --- /dev/null +++ b/tutorials/multiphase/interFoam/MRFInterFoam/mixerVessel2D/system/setFieldsDict @@ -0,0 +1,37 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object setFieldsDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +defaultFieldValues +( + volScalarFieldValue alpha1 0 + volVectorFieldValue U (0 0 0) +); + +regions +( + boxToCell + { + box (0 0 -1) (1 1 1); + fieldValues + ( + volScalarFieldValue alpha1 1 + ); + } +); + + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/0/pd b/tutorials/multiphase/interFoam/laminar/damBreak/0/p similarity index 98% rename from tutorials/multiphase/interFoam/ras/damBreak/0/pd rename to tutorials/multiphase/interFoam/laminar/damBreak/0/p index 520a3e9b0b291a7913c871b614d8fe9845e8ab08..15ab9897a899264f52a2cfb792b0fc6c39324dc4 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/0/pd +++ b/tutorials/multiphase/interFoam/laminar/damBreak/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes index d242b76b754914e7115105855ad61600253674b9..0b17c289c20ba9a27c48d9ddec20f44f1c47f8f3 100644 --- a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes +++ b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes @@ -52,9 +52,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha1 ; + p; + pcorr; + alpha1; } diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution index b1b00223fcd0bbe688671476a0173185fb0313f5..6c3a8c5da3dd2e83b7454a5ed945bc9684310a0f 100644 --- a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution @@ -25,7 +25,7 @@ solvers relTol 0; } - pd + p { solver PCG; preconditioner DIC; @@ -33,7 +33,7 @@ solvers relTol 0.05; } - pdFinal + pFinal { solver PCG; preconditioner DIC; diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/pd b/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/p similarity index 98% rename from tutorials/multiphase/interFoam/les/nozzleFlow2D/0/pd rename to tutorials/multiphase/interFoam/les/nozzleFlow2D/0/p index b533fbc016f7cc5b593988af8555c43a371cd0a1..8f01f473bbda69c4823f35737c47695029173338 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/pd +++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/c0 b/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/c0 deleted file mode 100644 index 04d478574abae87d7877c2a6465c449190ebb533..0000000000000000000000000000000000000000 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/c0 +++ /dev/null @@ -1,7092 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class cellSet; - location "constant/polyMesh/sets"; - object c0; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - -7069 -( -10832 -0 -10833 -1 -10834 -2 -10835 -3 -10836 -4 -10837 -5 -10838 -6 -10839 -7 -10840 -8 -10841 -9 -10842 -10 -10843 -11 -10844 -12 -10845 -13 -10846 -14 -10847 -15 -10848 -16 -10849 -17 -10850 -18 -10851 -19 -10852 -20 -10853 -21 -10854 -22 -10855 -23 -10856 -24 -10857 -25 -10858 -26 -10859 -27 -10860 -28 -10861 -29 -10862 -30 -10863 -31 -10864 -32 -10865 -33 -10866 -34 -10867 -35 -10868 -36 -10869 -37 -10870 -38 -10871 -39 -10872 -40 -10873 -41 -10874 -42 -10875 -43 -10876 -44 -10877 -45 -10878 -46 -10879 -47 -10880 -48 -10881 -49 -10882 -50 -10883 -51 -10884 -52 -10885 -53 -10886 -54 -10887 -55 -10888 -56 -10889 -57 -10890 -58 -10891 -59 -10892 -60 -10893 -61 -10894 -62 -10895 -63 -10896 -64 -10897 -65 -10898 -66 -10899 -67 -10900 -68 -10901 -69 -10902 -70 -10903 -71 -10904 -72 -10905 -73 -10906 -74 -10907 -75 -10908 -76 -10909 -77 -10910 -78 -10911 -79 -10912 -80 -10913 -81 -10914 -82 -10915 -83 -10916 -84 -10917 -85 -10918 -86 -10919 -87 -10920 -88 -10921 -89 -10922 -90 -10923 -91 -10924 -92 -10925 -93 -10926 -94 -10927 -95 -10928 -96 -10929 -97 -10930 -98 -10931 -99 -10932 -100 -10933 -101 -10934 -102 -10935 -103 -10936 -104 -10937 -105 -10938 -106 -10939 -107 -10940 -108 -10941 -109 -10942 -110 -10943 -111 -10944 -112 -10945 -113 -10946 -114 -10947 -115 -10948 -116 -10949 -117 -10950 -118 -10951 -119 -10952 -120 -10953 -121 -10954 -122 -10955 -123 -10956 -124 -10957 -125 -10958 -126 -10959 -127 -10960 -128 -10961 -129 -10962 -130 -10963 -131 -10964 -132 -10965 -133 -10966 -134 -10967 -135 -10968 -136 -10969 -137 -10970 -138 -10971 -139 -10972 -140 -10973 -141 -10974 -142 -10975 -143 -10976 -144 -10977 -145 -10978 -146 -10979 -147 -10980 -148 -10981 -149 -10982 -150 -10983 -151 -10984 -152 -10985 -153 -10986 -154 -10987 -155 -10988 -156 -10989 -157 -10990 -158 -10991 -159 -10992 -160 -10993 -161 -10994 -162 -10995 -163 -10996 -164 -10997 -165 -10998 -166 -10999 -167 -11000 -168 -11001 -169 -11002 -170 -11003 -171 -11004 -172 -11005 -173 -11006 -174 -11007 -175 -11008 -176 -11009 -177 -11010 -178 -11011 -179 -11012 -180 -11013 -181 -11014 -182 -11015 -183 -11016 -184 -11017 -185 -11018 -186 -11019 -187 -11020 -188 -11021 -189 -11022 -190 -11023 -191 -11024 -192 -11025 -193 -11026 -194 -11027 -195 -11028 -196 -11029 -197 -11030 -198 -11031 -199 -11032 -200 -11033 -201 -11034 -202 -11035 -203 -11036 -204 -11037 -205 -11038 -206 -11039 -207 -11040 -208 -11041 -209 -11042 -210 -11043 -211 -11044 -212 -11045 -213 -11046 -214 -11047 -215 -11048 -216 -11049 -217 -11050 -218 -11051 -219 -11052 -220 -11053 -221 -11054 -222 -11055 -223 -11056 -224 -11057 -225 -11058 -226 -11059 -227 -11060 -228 -11061 -229 -11062 -230 -11063 -231 -11064 -232 -11065 -233 -11066 -234 -11067 -235 -11068 -236 -11069 -237 -11070 -238 -11071 -239 -11072 -240 -11073 -241 -11074 -242 -11075 -243 -11076 -244 -11077 -245 -11078 -246 -11079 -247 -11080 -248 -11081 -249 -11082 -250 -11083 -251 -11084 -252 -11085 -253 -11086 -254 -11087 -255 -11088 -256 -11089 -257 -11090 -258 -11091 -259 -11092 -260 -11093 -261 -11094 -262 -11095 -263 -11096 -264 -11097 -265 -11098 -266 -11099 -267 -11100 -268 -11101 -269 -11102 -270 -11103 -271 -11104 -272 -11105 -273 -11106 -274 -11107 -275 -11108 -276 -11109 -277 -11110 -278 -11111 -279 -11112 -280 -11113 -281 -11114 -282 -11115 -283 -11116 -284 -11117 -285 -11118 -286 -11119 -287 -11120 -288 -11121 -289 -11122 -290 -11123 -291 -11124 -292 -11125 -293 -11126 -294 -11127 -295 -11128 -296 -11129 -297 -11130 -298 -11131 -299 -11132 -300 -11133 -301 -11134 -302 -11135 -303 -11136 -304 -11137 -305 -11138 -306 -11139 -307 -11140 -308 -11141 -309 -11142 -310 -11143 -311 -11144 -312 -11145 -313 -11146 -314 -11147 -315 -11148 -316 -11149 -317 -11150 -318 -11151 -319 -11152 -320 -11153 -321 -11154 -322 -11155 -323 -11156 -324 -11157 -325 -11158 -326 -11159 -327 -11160 -328 -11161 -329 -11162 -330 -11163 -331 -11164 -332 -11165 -333 -11166 -334 -11167 -335 -11168 -336 -11169 -337 -11170 -338 -11171 -339 -11172 -340 -11173 -341 -11174 -342 -11175 -343 -11176 -344 -11177 -345 -11178 -346 -11179 -347 -11180 -348 -11181 -349 -11182 -350 -11183 -351 -11184 -352 -11185 -353 -11186 -354 -11187 -355 -11188 -356 -11189 -357 -11190 -358 -11191 -359 -11192 -360 -11193 -361 -11194 -362 -11195 -363 -11196 -364 -11197 -365 -11198 -366 -11199 -367 -11200 -368 -11201 -369 -11202 -370 -11203 -371 -11204 -372 -11205 -373 -11206 -374 -11207 -375 -11208 -376 -11209 -377 -11210 -378 -11211 -379 -11212 -380 -11213 -381 -11214 -382 -11215 -383 -11216 -384 -11217 -385 -11218 -386 -11219 -387 -11220 -388 -11221 -389 -11222 -390 -11223 -391 -11224 -392 -11225 -393 -11226 -394 -11227 -395 -11228 -396 -11229 -397 -11230 -398 -11231 -399 -11232 -400 -11233 -401 -11234 -402 -11235 -403 -11236 -404 -11237 -405 -11238 -406 -11239 -407 -11240 -408 -11241 -409 -11242 -410 -11243 -411 -11244 -412 -11245 -413 -11246 -414 -11247 -415 -11248 -416 -11249 -417 -11250 -418 -11251 -419 -11252 -420 -11253 -421 -11254 -422 -11255 -423 -11256 -424 -11257 -425 -11258 -426 -11259 -427 -11260 -428 -11261 -429 -11262 -430 -11263 -431 -11264 -432 -11265 -433 -11266 -434 -11267 -435 -11268 -436 -11269 -437 -11270 -438 -11271 -439 -11272 -440 -11273 -441 -11274 -442 -11275 -443 -11276 -444 -11277 -445 -11278 -446 -11279 -447 -11280 -448 -11281 -449 -11282 -450 -11283 -451 -11284 -452 -11285 -453 -11286 -454 -11287 -455 -11288 -456 -11289 -457 -11290 -458 -11291 -459 -11292 -460 -11293 -461 -11294 -462 -11295 -463 -11296 -464 -11297 -465 -11298 -466 -11299 -467 -11300 -468 -11301 -469 -11302 -470 -11303 -471 -11304 -472 -11305 -473 -11306 -474 -11307 -475 -11308 -476 -11309 -477 -11310 -478 -11311 -479 -11312 -480 -11313 -481 -11314 -482 -11315 -483 -11316 -484 -11317 -485 -11318 -486 -11319 -487 -11320 -488 -11321 -489 -11322 -490 -11323 -491 -11324 -492 -11325 -493 -11326 -494 -11327 -495 -11328 -496 -11329 -497 -11330 -498 -11331 -499 -11332 -500 -11333 -501 -11334 -502 -11335 -503 -11336 -504 -11337 -505 -11338 -506 -11339 -507 -11340 -508 -11341 -509 -11342 -510 -11343 -511 -11344 -512 -11345 -513 -11346 -514 -11347 -515 -11348 -516 -11349 -517 -11350 -518 -11351 -519 -11352 -520 -11353 -521 -11354 -522 -11355 -523 -11356 -524 -11357 -525 -11358 -526 -11359 -527 -11360 -528 -11361 -529 -11362 -530 -11363 -531 -11364 -532 -11365 -533 -11366 -534 -11367 -535 -11368 -536 -11369 -537 -11370 -538 -11371 -539 -11372 -540 -11373 -541 -11374 -542 -11375 -543 -11376 -544 -11377 -545 -11378 -546 -11379 -547 -11380 -548 -11381 -549 -11382 -550 -11383 -551 -11384 -552 -11385 -553 -11386 -554 -11387 -555 -11388 -556 -11389 -557 -11390 -558 -11391 -559 -11392 -560 -11393 -561 -11394 -562 -11395 -563 -11396 -564 -11397 -565 -11398 -566 -11399 -567 -11400 -568 -11401 -569 -11402 -570 -11403 -571 -11404 -572 -11405 -573 -11406 -574 -11407 -575 -11408 -576 -11409 -577 -11410 -578 -11411 -579 -11412 -580 -11413 -581 -11414 -582 -11415 -583 -11416 -584 -11417 -585 -11418 -586 -11419 -587 -11420 -588 -11421 -589 -11422 -590 -11423 -591 -11424 -592 -11425 -593 -11426 -594 -11427 -595 -11428 -596 -11429 -597 -11430 -598 -11431 -599 -11432 -600 -11433 -601 -11434 -602 -11435 -603 -11436 -604 -11437 -605 -11438 -606 -11439 -607 -11440 -608 -11441 -609 -11442 -610 -11443 -611 -11444 -612 -11445 -613 -11446 -614 -11447 -615 -11448 -616 -11449 -617 -11450 -618 -11451 -619 -11452 -620 -11453 -621 -11454 -622 -11455 -623 -11456 -624 -11457 -625 -11458 -626 -11459 -627 -11460 -628 -11461 -629 -11462 -630 -11463 -631 -11464 -632 -11465 -633 -11466 -634 -11467 -635 -11468 -636 -11469 -637 -11470 -638 -11471 -639 -11472 -640 -11473 -641 -11474 -642 -11475 -643 -11476 -644 -11477 -645 -11478 -646 -11479 -647 -11480 -648 -11481 -649 -11482 -650 -11483 -651 -11484 -652 -11485 -653 -11486 -654 -11487 -655 -11488 -656 -11489 -657 -11490 -658 -11491 -659 -11492 -660 -11493 -661 -11494 -662 -11495 -663 -11496 -664 -11497 -665 -11498 -666 -11499 -667 -11500 -668 -11501 -669 -11502 -670 -11503 -671 -11504 -672 -11505 -673 -11506 -674 -11507 -675 -11508 -676 -11509 -677 -11510 -678 -11511 -679 -11512 -680 -11513 -681 -11514 -682 -11515 -683 -11516 -684 -11517 -685 -11518 -686 -11519 -687 -11520 -688 -11521 -689 -11522 -690 -11523 -691 -11524 -692 -11525 -693 -11526 -694 -11527 -695 -11528 -696 -11529 -697 -11530 -698 -11531 -699 -11532 -700 -11533 -701 -11534 -702 -11535 -703 -11536 -704 -11537 -705 -11538 -706 -11539 -707 -11540 -708 -11541 -709 -11542 -710 -11543 -711 -11544 -712 -11545 -713 -11546 -714 -11547 -715 -11548 -716 -11549 -717 -11550 -718 -11551 -719 -11552 -720 -11553 -721 -11554 -722 -11555 -723 -11556 -724 -11557 -725 -11558 -726 -11559 -727 -11560 -728 -11561 -729 -11562 -730 -11563 -731 -11564 -732 -11565 -733 -11566 -734 -11567 -735 -11568 -736 -11569 -737 -11570 -738 -11571 -739 -11572 -740 -11573 -741 -11574 -742 -11575 -743 -11576 -744 -11577 -745 -11578 -746 -11579 -747 -11580 -748 -11581 -749 -11582 -750 -11583 -751 -11584 -752 -11585 -753 -11586 -754 -11587 -755 -11588 -756 -11589 -757 -11590 -758 -11591 -759 -11592 -760 -11593 -761 -11594 -762 -11595 -763 -11596 -764 -11597 -765 -11598 -766 -11599 -767 -11600 -768 -11601 -769 -11602 -770 -11603 -771 -11604 -772 -11605 -773 -11606 -774 -11607 -775 -11608 -776 -11609 -777 -11610 -778 -11611 -779 -11612 -780 -11613 -781 -11614 -782 -11615 -783 -11616 -784 -11617 -785 -11618 -786 -11619 -787 -11620 -788 -11621 -789 -11622 -790 -11623 -791 -11624 -792 -11625 -793 -11626 -794 -11627 -795 -11628 -796 -11629 -797 -11630 -798 -11631 -799 -11632 -800 -11633 -801 -11634 -802 -11635 -803 -11636 -804 -11637 -805 -11638 -806 -11639 -807 -11640 -808 -11641 -809 -11642 -810 -11643 -811 -11644 -812 -11645 -813 -11646 -814 -11647 -815 -11648 -816 -11649 -817 -11650 -818 -11651 -819 -11652 -820 -11653 -821 -11654 -822 -11655 -823 -11656 -824 -11657 -825 -11658 -826 -11659 -827 -11660 -828 -11661 -829 -11662 -830 -11663 -831 -11664 -832 -11665 -833 -11666 -834 -11667 -835 -11668 -836 -11669 -837 -11670 -838 -11671 -839 -11672 -840 -11673 -841 -11674 -842 -11675 -843 -11676 -844 -11677 -845 -11678 -846 -11679 -847 -11680 -848 -11681 -849 -11682 -850 -11683 -851 -11684 -852 -11685 -853 -11686 -854 -11687 -855 -11688 -856 -11689 -857 -11690 -858 -11691 -859 -11692 -860 -11693 -861 -11694 -862 -11695 -863 -11696 -864 -11697 -865 -11698 -866 -11699 -867 -11700 -868 -11701 -869 -11702 -870 -11703 -871 -11704 -872 -11705 -873 -11706 -874 -11707 -875 -11708 -876 -11709 -877 -11710 -878 -11711 -879 -11712 -880 -11713 -881 -11714 -882 -11715 -883 -11716 -884 -11717 -885 -11718 -886 -11719 -887 -11720 -888 -11721 -889 -11722 -890 -11723 -891 -11724 -892 -11725 -893 -11726 -894 -11727 -895 -11728 -896 -11729 -897 -11730 -898 -11731 -899 -11732 -900 -11733 -901 -11734 -902 -903 -904 -905 -906 -907 -908 -909 -11742 -910 -11743 -911 -11744 -912 -11745 -913 -11746 -914 -11747 -915 -11748 -916 -11749 -917 -11750 -918 -11751 -919 -11752 -920 -11753 -921 -11754 -922 -11755 -923 -11756 -924 -11757 -925 -11758 -926 -11759 -927 -11760 -928 -11761 -929 -11762 -930 -11763 -931 -11764 -932 -11765 -933 -11766 -934 -11767 -935 -11768 -936 -11769 -937 -11770 -938 -11771 -939 -11772 -940 -11773 -941 -11774 -942 -11775 -943 -11776 -944 -11777 -945 -11778 -946 -11779 -947 -11780 -948 -11781 -949 -11782 -950 -11783 -951 -11784 -952 -11785 -953 -11786 -954 -11787 -955 -11788 -956 -11789 -957 -11790 -958 -11791 -959 -11792 -960 -11793 -961 -11794 -962 -11795 -963 -11796 -964 -11797 -965 -11798 -966 -11799 -967 -11800 -968 -11801 -969 -11802 -970 -11803 -971 -11804 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -11817 -985 -11818 -986 -11819 -987 -11820 -988 -11821 -989 -11822 -990 -11823 -991 -11824 -992 -11825 -993 -11826 -994 -11827 -995 -11828 -996 -11829 -997 -11830 -998 -11831 -999 -11832 -1000 -11833 -1001 -11834 -1002 -11835 -1003 -11836 -1004 -11837 -1005 -11838 -1006 -11839 -1007 -11840 -1008 -11841 -1009 -11842 -1010 -11843 -1011 -11844 -1012 -11845 -1013 -11846 -1014 -11847 -1015 -11848 -1016 -11849 -1017 -11850 -1018 -11851 -1019 -11852 -1020 -11853 -1021 -11854 -1022 -11855 -1023 -11856 -1024 -11857 -1025 -11858 -1026 -11859 -1027 -11860 -1028 -11861 -1029 -11862 -1030 -11863 -1031 -11864 -1032 -11865 -1033 -11866 -1034 -11867 -1035 -11868 -1036 -11869 -1037 -11870 -1038 -11871 -1039 -11872 -1040 -11873 -1041 -11874 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -11892 -1060 -11893 -1061 -11894 -1062 -11895 -1063 -11896 -1064 -11897 -1065 -11898 -1066 -11899 -1067 -11900 -1068 -11901 -1069 -11902 -1070 -11903 -1071 -11904 -1072 -11905 -1073 -11906 -1074 -11907 -1075 -11908 -1076 -11909 -1077 -11910 -1078 -11911 -1079 -11912 -1080 -11913 -1081 -11914 -1082 -11915 -1083 -11916 -1084 -11917 -1085 -11918 -1086 -11919 -1087 -11920 -1088 -11921 -1089 -11922 -1090 -11923 -1091 -11924 -1092 -11925 -1093 -11926 -1094 -11927 -1095 -11928 -1096 -11929 -1097 -11930 -1098 -11931 -1099 -11932 -1100 -11933 -1101 -11934 -1102 -11935 -1103 -11936 -1104 -11937 -1105 -11938 -1106 -11939 -1107 -11940 -1108 -11941 -1109 -11942 -1110 -11943 -1111 -11944 -1112 -11945 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -11967 -1135 -11968 -1136 -11969 -1137 -11970 -1138 -11971 -1139 -11972 -1140 -11973 -1141 -11974 -1142 -11975 -1143 -11976 -1144 -11977 -1145 -11978 -1146 -11979 -1147 -11980 -1148 -11981 -1149 -11982 -1150 -11983 -1151 -11984 -1152 -11985 -1153 -11986 -1154 -11987 -1155 -11988 -1156 -11989 -1157 -11990 -1158 -11991 -1159 -11992 -1160 -11993 -1161 -11994 -1162 -11995 -1163 -11996 -1164 -11997 -1165 -11998 -1166 -11999 -1167 -12000 -1168 -12001 -1169 -12002 -1170 -12003 -1171 -12004 -1172 -12005 -1173 -12006 -1174 -12007 -1175 -12008 -1176 -12009 -1177 -12010 -1178 -12011 -1179 -12012 -1180 -12013 -1181 -12014 -1182 -12015 -1183 -12016 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -12042 -1210 -12043 -1211 -12044 -1212 -12045 -1213 -12046 -1214 -12047 -1215 -12048 -1216 -12049 -1217 -12050 -1218 -12051 -1219 -12052 -1220 -12053 -1221 -12054 -1222 -12055 -1223 -12056 -1224 -12057 -1225 -12058 -1226 -12059 -1227 -12060 -1228 -12061 -1229 -12062 -1230 -12063 -1231 -12064 -1232 -12065 -1233 -12066 -1234 -12067 -1235 -12068 -1236 -12069 -1237 -12070 -1238 -12071 -1239 -12072 -1240 -12073 -1241 -12074 -1242 -12075 -1243 -12076 -1244 -12077 -1245 -12078 -1246 -12079 -1247 -12080 -1248 -12081 -1249 -12082 -1250 -12083 -1251 -12084 -1252 -12085 -1253 -12086 -1254 -12087 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283 -1284 -12117 -1285 -12118 -1286 -12119 -1287 -12120 -1288 -12121 -1289 -12122 -1290 -12123 -1291 -12124 -1292 -12125 -1293 -12126 -1294 -12127 -1295 -12128 -1296 -12129 -1297 -12130 -1298 -12131 -1299 -12132 -1300 -12133 -1301 -12134 -1302 -12135 -1303 -12136 -1304 -12137 -1305 -12138 -1306 -12139 -1307 -12140 -1308 -12141 -1309 -12142 -1310 -12143 -1311 -12144 -1312 -12145 -1313 -12146 -1314 -12147 -1315 -12148 -1316 -12149 -1317 -12150 -1318 -12151 -1319 -12152 -1320 -12153 -1321 -12154 -1322 -12155 -1323 -12156 -1324 -12157 -1325 -12158 -1326 -1327 -1328 -1329 -1330 -1331 -1332 -1333 -1334 -1335 -1336 -1337 -1338 -1339 -1340 -1341 -1342 -1343 -1344 -1345 -1346 -1347 -1348 -1349 -1350 -1351 -1352 -1353 -1354 -1355 -1356 -1357 -1358 -1359 -12192 -1360 -12193 -1361 -12194 -1362 -12195 -1363 -12196 -1364 -12197 -1365 -12198 -1366 -12199 -1367 -12200 -1368 -12201 -1369 -12202 -1370 -12203 -1371 -12204 -1372 -12205 -1373 -12206 -1374 -12207 -1375 -12208 -1376 -12209 -1377 -12210 -1378 -12211 -1379 -12212 -1380 -12213 -1381 -12214 -1382 -12215 -1383 -12216 -1384 -12217 -1385 -12218 -1386 -12219 -1387 -12220 -1388 -12221 -1389 -12222 -1390 -12223 -1391 -12224 -1392 -12225 -1393 -12226 -1394 -12227 -1395 -12228 -1396 -12229 -1397 -12230 -1398 -1399 -1400 -1401 -1402 -1403 -1404 -1405 -1406 -1407 -1408 -1409 -1410 -1411 -1412 -1413 -1414 -1415 -1416 -1417 -1418 -1419 -1420 -1421 -1422 -1423 -1424 -1425 -1426 -1427 -1428 -1429 -1430 -1431 -1432 -1433 -1434 -12267 -1435 -12268 -1436 -12269 -1437 -12270 -1438 -12271 -1439 -12272 -1440 -12273 -1441 -12274 -1442 -12275 -1443 -12276 -1444 -12277 -1445 -12278 -1446 -12279 -1447 -12280 -1448 -12281 -1449 -12282 -1450 -12283 -1451 -12284 -1452 -12285 -1453 -12286 -1454 -12287 -1455 -12288 -1456 -12289 -1457 -12290 -1458 -12291 -1459 -12292 -1460 -12293 -1461 -12294 -1462 -12295 -1463 -12296 -1464 -12297 -1465 -12298 -1466 -12299 -1467 -12300 -1468 -12301 -1469 -12302 -1470 -1471 -1472 -1473 -1474 -1475 -1476 -1477 -1478 -1479 -1480 -1481 -1482 -1483 -1484 -1485 -1486 -1487 -1488 -1489 -1490 -1491 -1492 -1493 -1494 -1495 -1496 -1497 -1498 -1499 -1500 -1501 -1502 -1503 -1504 -1505 -1506 -1507 -1508 -1509 -12342 -1510 -12343 -1511 -12344 -1512 -12345 -1513 -12346 -1514 -12347 -1515 -12348 -1516 -12349 -1517 -12350 -1518 -12351 -1519 -12352 -1520 -12353 -1521 -12354 -1522 -12355 -1523 -12356 -1524 -12357 -1525 -12358 -1526 -12359 -1527 -12360 -1528 -12361 -1529 -12362 -1530 -12363 -1531 -12364 -1532 -12365 -1533 -12366 -1534 -12367 -1535 -12368 -1536 -12369 -1537 -12370 -1538 -12371 -1539 -12372 -1540 -12373 -1541 -12374 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 -1552 -1553 -1554 -1555 -1556 -1557 -1558 -1559 -1560 -1561 -1562 -1563 -1564 -1565 -1566 -1567 -1568 -1569 -1570 -1571 -1572 -1573 -1574 -1575 -1576 -1577 -1578 -1579 -1580 -1581 -1582 -1583 -1584 -12417 -1585 -12418 -1586 -12419 -1587 -12420 -1588 -12421 -1589 -12422 -1590 -12423 -1591 -12424 -1592 -12425 -1593 -12426 -1594 -12427 -1595 -12428 -1596 -12429 -1597 -12430 -1598 -12431 -1599 -12432 -1600 -12433 -1601 -12434 -1602 -12435 -1603 -12436 -1604 -12437 -1605 -12438 -1606 -12439 -1607 -12440 -1608 -12441 -1609 -12442 -1610 -12443 -1611 -12444 -1612 -12445 -1613 -12446 -1614 -1615 -1616 -1617 -1618 -1619 -1620 -1621 -1622 -1623 -1624 -1625 -1626 -1627 -1628 -1629 -1630 -1631 -1632 -1633 -1634 -1635 -1636 -1637 -1638 -1639 -1640 -1641 -1642 -1643 -1644 -1645 -1646 -1647 -1648 -1649 -1650 -1651 -1652 -1653 -1654 -1655 -1656 -1657 -1658 -1659 -12492 -1660 -12493 -1661 -12494 -1662 -12495 -1663 -12496 -1664 -12497 -1665 -12498 -1666 -12499 -1667 -12500 -1668 -12501 -1669 -12502 -1670 -12503 -1671 -12504 -1672 -12505 -1673 -12506 -1674 -12507 -1675 -12508 -1676 -12509 -1677 -12510 -1678 -12511 -1679 -12512 -1680 -12513 -1681 -12514 -1682 -12515 -1683 -12516 -1684 -12517 -1685 -1686 -1687 -1688 -1689 -1690 -1691 -1692 -1693 -1694 -1695 -1696 -1697 -1698 -1699 -1700 -1701 -1702 -1703 -1704 -1705 -1706 -1707 -1708 -1709 -1710 -1711 -1712 -1713 -1714 -1715 -1716 -1717 -1718 -1719 -1720 -1721 -1722 -1723 -1724 -1725 -1726 -1727 -1728 -1729 -1730 -1731 -1732 -1733 -1734 -12567 -1735 -12568 -1736 -12569 -1737 -12570 -1738 -12571 -1739 -12572 -1740 -12573 -1741 -12574 -1742 -12575 -1743 -12576 -1744 -12577 -1745 -12578 -1746 -12579 -1747 -12580 -1748 -12581 -1749 -12582 -1750 -12583 -1751 -12584 -1752 -12585 -1753 -12586 -1754 -12587 -1755 -12588 -1756 -12589 -1757 -1758 -1759 -1760 -1761 -1762 -1763 -1764 -1765 -1766 -1767 -1768 -1769 -1770 -1771 -1772 -1773 -1774 -1775 -1776 -1777 -1778 -1779 -1780 -1781 -1782 -1783 -1784 -1785 -1786 -1787 -1788 -1789 -1790 -1791 -1792 -1793 -1794 -1795 -1796 -1797 -1798 -1799 -1800 -1801 -1802 -1803 -1804 -1805 -1806 -1807 -1808 -1809 -12642 -1810 -12643 -1811 -12644 -1812 -12645 -1813 -12646 -1814 -12647 -1815 -12648 -1816 -12649 -1817 -12650 -1818 -12651 -1819 -12652 -1820 -12653 -1821 -12654 -1822 -12655 -1823 -12656 -1824 -12657 -1825 -12658 -1826 -12659 -1827 -12660 -1828 -1829 -1830 -1831 -1832 -1833 -1834 -1835 -1836 -1837 -1838 -1839 -1840 -1841 -1842 -1843 -1844 -1845 -1846 -1847 -1848 -1849 -1850 -1851 -1852 -1853 -1854 -1855 -1856 -1857 -1858 -1859 -1860 -1861 -1862 -1863 -1864 -1865 -1866 -1867 -1868 -1869 -1870 -1871 -1872 -1873 -1874 -1875 -1876 -1877 -1878 -1879 -1880 -1881 -1882 -1883 -1884 -12717 -1885 -12718 -1886 -12719 -1887 -12720 -1888 -12721 -1889 -12722 -1890 -12723 -1891 -12724 -1892 -12725 -1893 -12726 -1894 -12727 -1895 -12728 -1896 -12729 -1897 -12730 -1898 -12731 -1899 -1900 -1901 -1902 -1903 -1904 -1905 -1906 -1907 -1908 -1909 -1910 -1911 -1912 -1913 -1914 -1915 -1916 -1917 -1918 -1919 -1920 -1921 -1922 -1923 -1924 -1925 -1926 -1927 -1928 -1929 -1930 -1931 -1932 -1933 -1934 -1935 -1936 -1937 -1938 -1939 -1940 -1941 -1942 -1943 -1944 -1945 -1946 -1947 -1948 -1949 -1950 -1951 -1952 -1953 -1954 -1955 -1956 -1957 -1958 -1959 -12792 -1960 -12793 -1961 -12794 -1962 -12795 -1963 -12796 -1964 -12797 -1965 -12798 -1966 -12799 -1967 -12800 -1968 -12801 -1969 -1970 -1971 -1972 -1973 -1974 -1975 -1976 -1977 -1978 -1979 -1980 -1981 -1982 -1983 -1984 -1985 -1986 -1987 -1988 -1989 -1990 -1991 -1992 -1993 -1994 -1995 -1996 -1997 -1998 -1999 -2000 -2001 -2002 -2003 -2004 -2005 -2006 -2007 -2008 -2009 -2010 -2011 -2012 -2013 -2014 -2015 -2016 -2017 -2018 -2019 -2020 -2021 -2022 -2023 -2024 -2025 -2026 -2027 -2028 -2029 -2030 -2031 -2032 -2033 -2034 -12867 -2035 -12868 -2036 -12869 -2037 -12870 -2038 -12871 -2039 -2040 -2041 -2042 -2043 -2044 -2045 -2046 -2047 -2048 -2049 -2050 -2051 -2052 -2053 -2054 -2055 -2056 -2057 -2058 -2059 -2060 -2061 -2062 -2063 -2064 -2065 -2066 -2067 -2068 -2069 -2070 -2071 -2072 -2073 -2074 -2075 -2076 -2077 -2078 -2079 -2080 -2081 -2082 -2083 -2084 -2085 -2086 -2087 -2088 -2089 -2090 -2091 -2092 -2093 -2094 -2095 -2096 -2097 -2098 -2099 -2100 -2101 -2102 -2103 -2104 -2105 -2106 -2107 -2108 -2109 -2110 -2111 -2112 -2113 -2114 -2115 -2116 -2117 -2118 -2119 -2120 -2121 -2122 -2123 -2124 -2125 -2126 -2127 -2128 -2129 -2130 -2131 -2132 -2133 -2134 -2135 -2136 -2137 -2138 -2139 -2140 -2141 -2142 -2143 -2144 -2145 -2146 -2147 -2148 -2149 -2150 -2151 -2152 -2153 -2154 -2155 -2156 -2157 -2158 -2159 -2160 -2161 -2162 -2163 -2164 -2165 -2166 -2167 -2168 -2169 -2170 -2171 -2172 -2173 -2174 -2175 -2176 -2177 -2178 -2179 -2180 -2181 -2182 -2183 -2184 -2185 -2186 -2187 -2188 -2189 -2190 -2191 -2192 -2193 -2194 -2195 -2196 -2197 -2198 -2199 -2200 -2201 -2202 -2203 -2204 -2205 -2206 -2207 -2208 -2209 -2210 -2211 -2212 -2213 -2214 -2215 -2216 -2217 -2218 -2219 -2220 -2221 -2222 -2223 -2224 -2225 -2226 -2227 -2228 -2229 -2230 -2231 -2232 -2233 -2234 -2235 -2236 -2237 -2238 -2239 -2240 -2241 -2242 -2243 -2244 -2245 -2246 -2247 -2248 -2249 -2250 -2251 -2252 -2253 -2254 -2255 -2256 -2257 -2258 -2259 -2260 -2261 -2262 -2263 -2264 -2265 -2266 -2267 -2268 -2269 -2270 -2271 -2272 -2273 -2274 -2275 -2276 -2277 -2278 -2279 -2280 -2281 -2282 -2283 -2284 -2285 -2286 -2287 -2288 -2289 -2290 -2291 -2292 -2293 -2294 -2295 -2296 -2297 -2298 -2299 -2300 -2301 -2302 -2303 -2304 -2305 -2306 -2307 -2308 -2309 -2310 -2311 -2312 -2313 -2314 -2315 -2316 -2317 -2318 -2319 -2320 -2321 -2322 -2325 -2326 -2327 -2328 -2329 -2330 -2331 -2332 -2333 -2334 -2335 -2336 -2337 -2338 -2339 -2340 -2341 -2342 -2343 -2344 -2345 -2346 -2347 -2348 -2349 -2350 -2351 -2352 -2353 -2354 -2355 -2356 -2357 -2358 -2359 -2360 -2361 -2362 -2363 -2364 -2365 -2366 -2367 -2368 -2369 -2370 -2371 -2372 -2373 -2374 -2375 -2376 -2377 -2378 -2379 -2380 -2381 -2382 -2383 -2384 -2385 -2386 -2387 -2388 -2389 -2390 -2391 -2392 -2393 -2394 -2400 -2401 -2402 -2403 -2404 -2405 -2406 -2407 -2408 -2409 -2410 -2411 -2412 -2413 -2414 -2415 -2416 -2417 -2418 -2419 -2420 -2421 -2422 -2423 -2424 -2425 -2426 -2427 -2428 -2429 -2430 -2431 -2432 -2433 -2434 -2435 -2436 -2437 -2438 -2439 -2440 -2441 -2442 -2443 -2444 -2445 -2446 -2447 -2448 -2449 -2450 -2451 -2452 -2453 -2454 -2455 -2456 -2457 -2458 -2459 -2460 -2461 -2462 -2463 -2464 -2465 -2466 -2475 -2476 -2477 -2478 -2479 -2480 -2481 -2482 -2483 -2484 -2485 -2486 -2487 -2488 -2489 -2490 -2491 -2492 -2493 -2494 -2495 -2496 -2497 -2498 -2499 -2500 -2501 -2502 -2503 -2504 -2505 -2506 -2507 -2508 -2509 -2510 -2511 -2512 -2513 -2514 -2515 -2516 -2517 -2518 -2519 -2520 -2521 -2522 -2523 -2524 -2525 -2526 -2527 -2528 -2529 -2530 -2531 -2532 -2533 -2534 -2535 -2536 -2537 -2538 -2550 -2551 -2552 -2553 -2554 -2555 -2556 -2557 -2558 -2559 -2560 -2561 -2562 -2563 -2564 -2565 -2566 -2567 -2568 -2569 -2570 -2571 -2572 -2573 -2574 -2575 -2576 -2577 -2578 -2579 -2580 -2581 -2582 -2583 -2584 -2585 -2586 -2587 -2588 -2589 -2590 -2591 -2592 -2593 -2594 -2595 -2596 -2597 -2598 -2599 -2600 -2601 -2602 -2603 -2604 -2605 -2606 -2607 -2608 -2609 -2610 -2625 -2626 -2627 -2628 -2629 -2630 -2631 -2632 -2633 -2634 -2635 -2636 -2637 -2638 -2639 -2640 -2641 -2642 -2643 -2644 -2645 -2646 -2647 -2648 -2649 -2650 -2651 -2652 -2653 -2654 -2655 -2656 -2657 -2658 -2659 -2660 -2661 -2662 -2663 -2664 -2665 -2666 -2667 -2668 -2669 -2670 -2671 -2672 -2673 -2674 -2675 -2676 -2677 -2678 -2679 -2680 -2681 -2682 -2683 -2700 -2701 -2702 -2703 -2704 -2705 -2706 -2707 -2708 -2709 -2710 -2711 -2712 -2713 -2714 -2715 -2716 -2717 -2718 -2719 -2720 -2721 -2722 -2723 -2724 -2725 -2726 -2727 -2728 -2729 -2730 -2731 -2732 -2733 -2734 -2735 -2736 -2737 -2738 -2739 -2740 -2741 -2742 -2743 -2744 -2745 -2746 -2747 -2748 -2749 -2750 -2751 -2752 -2753 -2754 -2755 -2775 -2776 -2777 -2778 -2779 -2780 -2781 -2782 -2783 -2784 -2785 -2786 -2787 -2788 -2789 -2790 -2791 -2792 -2793 -2794 -2795 -2796 -2797 -2798 -2799 -2800 -2801 -2802 -2803 -2804 -2805 -2806 -2807 -2808 -2809 -2810 -2811 -2812 -2813 -2814 -2815 -2816 -2817 -2818 -2819 -2820 -2821 -2822 -2823 -2824 -2825 -2826 -2827 -2828 -2850 -2851 -2852 -2853 -2854 -2855 -2856 -2857 -2858 -2859 -2860 -2861 -2862 -2863 -2864 -2865 -2866 -2867 -2868 -2869 -2870 -2871 -2872 -2873 -2874 -2875 -2876 -2877 -2878 -2879 -2880 -2881 -2882 -2883 -2884 -2885 -2886 -2887 -2888 -2889 -2890 -2891 -2892 -2893 -2894 -2895 -2896 -2897 -2898 -2899 -2900 -2901 -2925 -2926 -2927 -2928 -2929 -2930 -2931 -2932 -2933 -2934 -2935 -2936 -2937 -2938 -2939 -2940 -2941 -2942 -2943 -2944 -2945 -2946 -2947 -2948 -2949 -2950 -2951 -2952 -2953 -2954 -2955 -2956 -2957 -2958 -2959 -2960 -2961 -2962 -2963 -2964 -2965 -2966 -2967 -2968 -2969 -2970 -2971 -2972 -2973 -2974 -3000 -3001 -3002 -3003 -3004 -3005 -3006 -3007 -3008 -3009 -3010 -3011 -3012 -3013 -3014 -3015 -3016 -3017 -3018 -3019 -3020 -3021 -3022 -3023 -3024 -3025 -3026 -3027 -3028 -3029 -3030 -3031 -3032 -3033 -3034 -3035 -3036 -3037 -3038 -3039 -3040 -3041 -3042 -3043 -3044 -3045 -3046 -3047 -3075 -3076 -3077 -3078 -3079 -3080 -3081 -3082 -3083 -3084 -3085 -3086 -3087 -3088 -3089 -3090 -3091 -3092 -3093 -3094 -3095 -3096 -3097 -3098 -3099 -3100 -3101 -3102 -3103 -3104 -3105 -3106 -3107 -3108 -3109 -3110 -3111 -3112 -3113 -3114 -3115 -3116 -3117 -3118 -3119 -3120 -3150 -3151 -3152 -3153 -3154 -3155 -3156 -3157 -3158 -3159 -3160 -3161 -3162 -3163 -3164 -3165 -3166 -3167 -3168 -3169 -3170 -3171 -3172 -3173 -3174 -3175 -3176 -3177 -3178 -3179 -3180 -3181 -3182 -3183 -3184 -3185 -3186 -3187 -3188 -3189 -3190 -3191 -3192 -3193 -3194 -3225 -3226 -3227 -3228 -3229 -3230 -3231 -3232 -3233 -3234 -3235 -3236 -3237 -3238 -3239 -3240 -3241 -3242 -3243 -3244 -3245 -3246 -3247 -3248 -3249 -3250 -3251 -3252 -3253 -3254 -3255 -3256 -3257 -3258 -3259 -3260 -3261 -3262 -3263 -3264 -3265 -3266 -3267 -3300 -3301 -3302 -3303 -3304 -3305 -3306 -3307 -3308 -3309 -3310 -3311 -3312 -3313 -3314 -3315 -3316 -3317 -3318 -3319 -3320 -3321 -3322 -3323 -3324 -3325 -3326 -3327 -3328 -3329 -3330 -3331 -3332 -3333 -3334 -3335 -3336 -3337 -3338 -3339 -3340 -3375 -3376 -3377 -3378 -3379 -3380 -3381 -3382 -3383 -3384 -3385 -3386 -3387 -3388 -3389 -3390 -3391 -3392 -3393 -3394 -3395 -3396 -3397 -3398 -3399 -3400 -3401 -3402 -3403 -3404 -3405 -3406 -3407 -3408 -3409 -3410 -3411 -3412 -3413 -3414 -3450 -3451 -3452 -3453 -3454 -3455 -3456 -3457 -3458 -3459 -3460 -3461 -3462 -3463 -3464 -3465 -3466 -3467 -3468 -3469 -3470 -3471 -3472 -3473 -3474 -3475 -3476 -3477 -3478 -3479 -3480 -3481 -3482 -3483 -3484 -3485 -3486 -3487 -3525 -3526 -3527 -3528 -3529 -3530 -3531 -3532 -3533 -3534 -3535 -3536 -3537 -3538 -3539 -3540 -3541 -3542 -3543 -3544 -3545 -3546 -3547 -3548 -3549 -3550 -3551 -3552 -3553 -3554 -3555 -3556 -3557 -3558 -3559 -3560 -3600 -3601 -3602 -3603 -3604 -3605 -3606 -3607 -3608 -3609 -3610 -3611 -3612 -3613 -3614 -3615 -3616 -3617 -3618 -3619 -3620 -3621 -3622 -3623 -3624 -3625 -3626 -3627 -3628 -3629 -3630 -3631 -3632 -3633 -3634 -3675 -3676 -3677 -3678 -3679 -3680 -3681 -3682 -3683 -3684 -3685 -3686 -3687 -3688 -3689 -3690 -3691 -3692 -3693 -3694 -3695 -3696 -3697 -3698 -3699 -3700 -3701 -3702 -3703 -3704 -3705 -3706 -3707 -3750 -3751 -3752 -3753 -3754 -3755 -3756 -3757 -3758 -3759 -3760 -3761 -3762 -3763 -3764 -3765 -3766 -3767 -3768 -3769 -3770 -3771 -3772 -3773 -3774 -3775 -3776 -3777 -3778 -3779 -3780 -3781 -3825 -3826 -3827 -3828 -3829 -3830 -3831 -3832 -3833 -3834 -3835 -3836 -3837 -3838 -3839 -3840 -3841 -3842 -3843 -3844 -3845 -3846 -3847 -3848 -3849 -3850 -3851 -3852 -3853 -3854 -3900 -3901 -3902 -3903 -3904 -3905 -3906 -3907 -3908 -3909 -3910 -3911 -3912 -3913 -3914 -3915 -3916 -3917 -3918 -3919 -3920 -3921 -3922 -3923 -3924 -3925 -3926 -3927 -3928 -3975 -3976 -3977 -3978 -3979 -3980 -3981 -3982 -3983 -3984 -3985 -3986 -3987 -3988 -3989 -3990 -3991 -3992 -3993 -3994 -3995 -3996 -3997 -3998 -3999 -4000 -4001 -4050 -4051 -4052 -4053 -4054 -4055 -4056 -4057 -4058 -4059 -4060 -4061 -4062 -4063 -4064 -4065 -4066 -4067 -4068 -4069 -4070 -4071 -4072 -4073 -4074 -4125 -4126 -4127 -4128 -4129 -4130 -4131 -4132 -4133 -4134 -4135 -4136 -4137 -4138 -4139 -4140 -4141 -4142 -4143 -4144 -4145 -4146 -4147 -4148 -4200 -4201 -4202 -4203 -4204 -4205 -4206 -4207 -4208 -4209 -4210 -4211 -4212 -4213 -4214 -4215 -4216 -4217 -4218 -4219 -4220 -4221 -4275 -4276 -4277 -4278 -4279 -4280 -4281 -4282 -4283 -4284 -4285 -4286 -4287 -4288 -4289 -4290 -4291 -4292 -4293 -4294 -4350 -4351 -4352 -4353 -4354 -4355 -4356 -4357 -4358 -4359 -4360 -4361 -4362 -4363 -4364 -4365 -4366 -4367 -4425 -4426 -4427 -4428 -4429 -4430 -4431 -4432 -4433 -4434 -4435 -4436 -4437 -4438 -4439 -4440 -4500 -4501 -4502 -4503 -4504 -4505 -4506 -4507 -4508 -4509 -4510 -4511 -4512 -4575 -4576 -4577 -4578 -4579 -4580 -4581 -4582 -4583 -4584 -4585 -4650 -4651 -4652 -4653 -4654 -4655 -4656 -4657 -4725 -4726 -4727 -4728 -4729 -4800 -4801 -7500 -7501 -7502 -7503 -7504 -7505 -7506 -7507 -7508 -7509 -7510 -7511 -7512 -7513 -7514 -7515 -7516 -7517 -7518 -7519 -7520 -7521 -7522 -7523 -7524 -7525 -7526 -7527 -7528 -7529 -7530 -7531 -7532 -7533 -7534 -7535 -7536 -7537 -7538 -7539 -7540 -7541 -7542 -7543 -7544 -7545 -7546 -7547 -7548 -7549 -7550 -7551 -7552 -7553 -7554 -7555 -7556 -7557 -7558 -7559 -7560 -7561 -7562 -7563 -7564 -7565 -7566 -7567 -7568 -7569 -7570 -7571 -7572 -7573 -7574 -7575 -7576 -7577 -7578 -7579 -7580 -7581 -7582 -7583 -7584 -7585 -7586 -7587 -7588 -7589 -7590 -7591 -7592 -7593 -7594 -7595 -7596 -7597 -7598 -7599 -7600 -7601 -7602 -7603 -7604 -7605 -7606 -7607 -7608 -7609 -7610 -7611 -7612 -7613 -7614 -7615 -7616 -7617 -7618 -7619 -7620 -7621 -7622 -7623 -7624 -7625 -7626 -7627 -7628 -7629 -7630 -7631 -7632 -7633 -7634 -7635 -7636 -7637 -7638 -7639 -7640 -7641 -7642 -7643 -7644 -7645 -7646 -7647 -7648 -7649 -7650 -7651 -7652 -7653 -7654 -7655 -7656 -7657 -7658 -7659 -7660 -7661 -7662 -7663 -7664 -7665 -7666 -7667 -7668 -7669 -7670 -7671 -7672 -7673 -7674 -7675 -7676 -7677 -7678 -7679 -7680 -7681 -7682 -7683 -7684 -7685 -7686 -7687 -7688 -7689 -7690 -7691 -7692 -7693 -7694 -7695 -7696 -7697 -7698 -7699 -7700 -7701 -7702 -7703 -7704 -7705 -7706 -7707 -7708 -7709 -7710 -7711 -7712 -7713 -7714 -7715 -7716 -7717 -7718 -7719 -7720 -7721 -7722 -7723 -7724 -7725 -7726 -7727 -7728 -7729 -7730 -7731 -7732 -7733 -7734 -7735 -7736 -7737 -7738 -7739 -7740 -7741 -7742 -7743 -7744 -7745 -7746 -7747 -7748 -7749 -7750 -7751 -7752 -7753 -7754 -7755 -7756 -7757 -7758 -7759 -7760 -7761 -7762 -7763 -7764 -7765 -7766 -7767 -7768 -7769 -7770 -7771 -7772 -7773 -7774 -7775 -7776 -7777 -7778 -7779 -7780 -7781 -7782 -7783 -7784 -7785 -7786 -7787 -7788 -7789 -7790 -7791 -7792 -7793 -7794 -7795 -7796 -7797 -7798 -7799 -7800 -7801 -7802 -7803 -7804 -7805 -7806 -7807 -7808 -7809 -7810 -7811 -7812 -7813 -7814 -7815 -7816 -7817 -7818 -7819 -7820 -7821 -7822 -7823 -7824 -7825 -7826 -7827 -7828 -7829 -7830 -7831 -7832 -7833 -7834 -7835 -7836 -7837 -7838 -7839 -7840 -7841 -7842 -7843 -7844 -7845 -7846 -7847 -7848 -7849 -7850 -7851 -7852 -7853 -7854 -7855 -7856 -7857 -7858 -7859 -7860 -7861 -7862 -7863 -7864 -7865 -7866 -7867 -7868 -7869 -7870 -7871 -7872 -7873 -7874 -7875 -7876 -7877 -7878 -7879 -7880 -7881 -7882 -7883 -7884 -7885 -7886 -7887 -7888 -7889 -7890 -7891 -7892 -7893 -7894 -7895 -7896 -7897 -7898 -7899 -7900 -7901 -7902 -7903 -7904 -7905 -7906 -7907 -7908 -7909 -7910 -7911 -7912 -7913 -7914 -7915 -7916 -7917 -7918 -7919 -7920 -7921 -7922 -7923 -7924 -7925 -7926 -7927 -7928 -7929 -7930 -7931 -7932 -7933 -7934 -7935 -7936 -7937 -7938 -7939 -7940 -7941 -7942 -7943 -7944 -7945 -7946 -7947 -7948 -7949 -7950 -7951 -7952 -7953 -7954 -7955 -7956 -7957 -7958 -7959 -7960 -7961 -7962 -7963 -7964 -7965 -7966 -7967 -7968 -7969 -7970 -7971 -7972 -7973 -7974 -7975 -7976 -7977 -7978 -7979 -7980 -7981 -7982 -7983 -7984 -7985 -7986 -7987 -7988 -7989 -7990 -7991 -7992 -7993 -7994 -7995 -7996 -7997 -7998 -7999 -8000 -8001 -8002 -8003 -8004 -8005 -8006 -8007 -8008 -8009 -8010 -8011 -8012 -8013 -8014 -8015 -8016 -8017 -8018 -8019 -8020 -8021 -8022 -8023 -8024 -8025 -8026 -8027 -8028 -8029 -8030 -8031 -8032 -8033 -8034 -8035 -8036 -8037 -8038 -8039 -8040 -8041 -8042 -8043 -8044 -8045 -8046 -8047 -8048 -8049 -8050 -8051 -8052 -8053 -8054 -8055 -8056 -8057 -8058 -8059 -8060 -8061 -8062 -8063 -8064 -8065 -8066 -8067 -8068 -8069 -8070 -8071 -8072 -8073 -8074 -8075 -8076 -8077 -8078 -8079 -8080 -8081 -8082 -8083 -8084 -8085 -8086 -8087 -8088 -8089 -8090 -8091 -8092 -8093 -8094 -8095 -8096 -8097 -8098 -8099 -8100 -8101 -8102 -8103 -8104 -8105 -8106 -8107 -8108 -8109 -8110 -8111 -8112 -8113 -8114 -8115 -8116 -8117 -8118 -8119 -8120 -8121 -8122 -8123 -8124 -8125 -8126 -8127 -8128 -8129 -8130 -8131 -8132 -8133 -8134 -8135 -8136 -8137 -8138 -8139 -8140 -8141 -8142 -8143 -8144 -8145 -8146 -8147 -8148 -8149 -8150 -8151 -8152 -8153 -8154 -8155 -8156 -8157 -8158 -8159 -8160 -8161 -8162 -8163 -8164 -8165 -8166 -8167 -8168 -8169 -8170 -8171 -8172 -8173 -8174 -8175 -8176 -8177 -8178 -8179 -8180 -8181 -8182 -8183 -8184 -8185 -8186 -8187 -8188 -8189 -8190 -8191 -8192 -8193 -8194 -8195 -8196 -8197 -8198 -8199 -8200 -8201 -8202 -8203 -8204 -8205 -8206 -8207 -8208 -8209 -8210 -8211 -8212 -8213 -8214 -8215 -8216 -8217 -8218 -8219 -8220 -8221 -8222 -8223 -8224 -8225 -8226 -8227 -8228 -8229 -8230 -8231 -8232 -8233 -8234 -8235 -8236 -8237 -8238 -8239 -8240 -8241 -8242 -8243 -8244 -8245 -8246 -8247 -8248 -8249 -8250 -8251 -8252 -8253 -8254 -8255 -8256 -8257 -8258 -8259 -8260 -8261 -8262 -8263 -8264 -8265 -8266 -8267 -8268 -8269 -8270 -8271 -8272 -8273 -8274 -8275 -8276 -8277 -8278 -8279 -8280 -8281 -8282 -8283 -8284 -8285 -8286 -8287 -8288 -8289 -8290 -8291 -8292 -8293 -8294 -8295 -8296 -8297 -8298 -8299 -8300 -8301 -8302 -8303 -8304 -8305 -8306 -8307 -8308 -8309 -8310 -8311 -8312 -8313 -8314 -8315 -8316 -8317 -8318 -8319 -8320 -8321 -8322 -8323 -8324 -8325 -8326 -8327 -8328 -8329 -8330 -8331 -8332 -8333 -8334 -8335 -8336 -8337 -8338 -8339 -8340 -8341 -8342 -8343 -8344 -8345 -8346 -8347 -8348 -8349 -8350 -8351 -8352 -8353 -8354 -8355 -8356 -8357 -8358 -8359 -8360 -8361 -8362 -8363 -8364 -8365 -8366 -8367 -8368 -8369 -8370 -8371 -8372 -8373 -8374 -8375 -8376 -8377 -8378 -8379 -8380 -8381 -8382 -8383 -8384 -8385 -8386 -8387 -8388 -8389 -8390 -8391 -8392 -8393 -8394 -8395 -8396 -8397 -8398 -8399 -8400 -8401 -8402 -8403 -8404 -8405 -8406 -8407 -8408 -8409 -8410 -8411 -8412 -8413 -8414 -8415 -8416 -8417 -8418 -8419 -8420 -8421 -8422 -8423 -8424 -8425 -8426 -8427 -8428 -8429 -8430 -8431 -8432 -8433 -8434 -8435 -8436 -8437 -8438 -8439 -8440 -8441 -8442 -8443 -8444 -8445 -8446 -8447 -8448 -8449 -8450 -8451 -8452 -8453 -8454 -8455 -8456 -8457 -8458 -8459 -8460 -8461 -8462 -8463 -8464 -8465 -8466 -8467 -8468 -8469 -8470 -8471 -8472 -8473 -8474 -8475 -8476 -8477 -8478 -8479 -8480 -8481 -8482 -8483 -8484 -8485 -8486 -8487 -8488 -8489 -8490 -8491 -8492 -8493 -8494 -8495 -8496 -8497 -8498 -8499 -8500 -8501 -8502 -8503 -8504 -8505 -8506 -8507 -8508 -8509 -8510 -8511 -8512 -8513 -8514 -8515 -8516 -8517 -8518 -8519 -8520 -8521 -8522 -8523 -8524 -8525 -8526 -8527 -8528 -8529 -8530 -8531 -8532 -8533 -8534 -8535 -8536 -8537 -8538 -8539 -8540 -8541 -8542 -8543 -8544 -8545 -8546 -8547 -8548 -8549 -8550 -8551 -8552 -8553 -8554 -8555 -8556 -8557 -8558 -8559 -8560 -8561 -8562 -8563 -8564 -8565 -8566 -8567 -8568 -8569 -8570 -8571 -8572 -8573 -8574 -8575 -8576 -8577 -8578 -8579 -8580 -8581 -8582 -8583 -8584 -8585 -8586 -8587 -8588 -8589 -8590 -8591 -8592 -8593 -8594 -8595 -8596 -8597 -8598 -8599 -8600 -8601 -8602 -8603 -8604 -8605 -8606 -8607 -8608 -8609 -8610 -8611 -8612 -8613 -8614 -8615 -8616 -8617 -8618 -8619 -8620 -8621 -8622 -8623 -8624 -8625 -8626 -8627 -8628 -8629 -8630 -8631 -8632 -8633 -8634 -8635 -8636 -8637 -8638 -8639 -8640 -8641 -8642 -8643 -8644 -8645 -8646 -8647 -8648 -8649 -8650 -8651 -8652 -8653 -8654 -8655 -8656 -8657 -8658 -8659 -8660 -8661 -8662 -8663 -8664 -8665 -8666 -8667 -8668 -8669 -8670 -8671 -8672 -8673 -8674 -8675 -8676 -8677 -8678 -8679 -8680 -8681 -8682 -8683 -8684 -8685 -8686 -8687 -8688 -8689 -8690 -8691 -8692 -8693 -8694 -8695 -8696 -8697 -8700 -8701 -8702 -8703 -8704 -8705 -8712 -8713 -8714 -8715 -8716 -8717 -8718 -8719 -8720 -8721 -8722 -8723 -8724 -8725 -8726 -8727 -8728 -8729 -8730 -8731 -8732 -8733 -8734 -8735 -8736 -8737 -8738 -8739 -8740 -8741 -8742 -8743 -8744 -8745 -8746 -8747 -8748 -8749 -8750 -8751 -8752 -8753 -8754 -8755 -8756 -8757 -8758 -8759 -8760 -8761 -8762 -8763 -8764 -8765 -8766 -8767 -8768 -8769 -8770 -8771 -8772 -8773 -8774 -8787 -8788 -8789 -8790 -8791 -8792 -8793 -8794 -8795 -8796 -8797 -8798 -8799 -8800 -8801 -8802 -8803 -8804 -8805 -8806 -8807 -8808 -8809 -8810 -8811 -8812 -8813 -8814 -8815 -8816 -8817 -8818 -8819 -8820 -8821 -8822 -8823 -8824 -8825 -8826 -8827 -8828 -8829 -8830 -8831 -8832 -8833 -8834 -8835 -8836 -8837 -8838 -8839 -8840 -8841 -8842 -8843 -8844 -8845 -8846 -8847 -8862 -8863 -8864 -8865 -8866 -8867 -8868 -8869 -8870 -8871 -8872 -8873 -8874 -8875 -8876 -8877 -8878 -8879 -8880 -8881 -8882 -8883 -8884 -8885 -8886 -8887 -8888 -8889 -8890 -8891 -8892 -8893 -8894 -8895 -8896 -8897 -8898 -8899 -8900 -8901 -8902 -8903 -8904 -8905 -8906 -8907 -8908 -8909 -8910 -8911 -8912 -8913 -8914 -8915 -8916 -8917 -8937 -8938 -8939 -8940 -8941 -8942 -8943 -8944 -8945 -8946 -8947 -8948 -8949 -8950 -8951 -8952 -8953 -8954 -8955 -8956 -8957 -8958 -8959 -8960 -8961 -8962 -8963 -8964 -8965 -8966 -8967 -8968 -8969 -8970 -8971 -8972 -8973 -8974 -8975 -8976 -8977 -8978 -8979 -8980 -8981 -8982 -8983 -8984 -8985 -8986 -8987 -8988 -9012 -9013 -9014 -9015 -9016 -9017 -9018 -9019 -9020 -9021 -9022 -9023 -9024 -9025 -9026 -9027 -9028 -9029 -9030 -9031 -9032 -9033 -9034 -9035 -9036 -9037 -9038 -9039 -9040 -9041 -9042 -9043 -9044 -9045 -9046 -9047 -9048 -9049 -9050 -9051 -9052 -9053 -9054 -9055 -9056 -9057 -9058 -9059 -9087 -9088 -9089 -9090 -9091 -9092 -9093 -9094 -9095 -9096 -9097 -9098 -9099 -9100 -9101 -9102 -9103 -9104 -9105 -9106 -9107 -9108 -9109 -9110 -9111 -9112 -9113 -9114 -9115 -9116 -9117 -9118 -9119 -9120 -9121 -9122 -9123 -9124 -9125 -9126 -9127 -9128 -9129 -9130 -9162 -9163 -9164 -9165 -9166 -9167 -9168 -9169 -9170 -9171 -9172 -9173 -9174 -9175 -9176 -9177 -9178 -9179 -9180 -9181 -9182 -9183 -9184 -9185 -9186 -9187 -9188 -9189 -9190 -9191 -9192 -9193 -9194 -9195 -9196 -9197 -9198 -9199 -9200 -9201 -9202 -9237 -9238 -9239 -9240 -9241 -9242 -9243 -9244 -9245 -9246 -9247 -9248 -9249 -9250 -9251 -9252 -9253 -9254 -9255 -9256 -9257 -9258 -9259 -9260 -9261 -9262 -9263 -9264 -9265 -9266 -9267 -9268 -9269 -9270 -9271 -9272 -9273 -9274 -9312 -9313 -9314 -9315 -9316 -9317 -9318 -9319 -9320 -9321 -9322 -9323 -9324 -9325 -9326 -9327 -9328 -9329 -9330 -9331 -9332 -9333 -9334 -9335 -9336 -9337 -9338 -9339 -9340 -9341 -9342 -9343 -9344 -9345 -9387 -9388 -9389 -9390 -9391 -9392 -9393 -9394 -9395 -9396 -9397 -9398 -9399 -9400 -9401 -9402 -9403 -9404 -9405 -9406 -9407 -9408 -9409 -9410 -9411 -9412 -9413 -9414 -9415 -9416 -9417 -9462 -9463 -9464 -9465 -9466 -9467 -9468 -9469 -9470 -9471 -9472 -9473 -9474 -9475 -9476 -9477 -9478 -9479 -9480 -9481 -9482 -9483 -9484 -9485 -9486 -9487 -9488 -9489 -9537 -9538 -9539 -9540 -9541 -9542 -9543 -9544 -9545 -9546 -9547 -9548 -9549 -9550 -9551 -9552 -9553 -9554 -9555 -9556 -9557 -9558 -9559 -9560 -9561 -9612 -9613 -9614 -9615 -9616 -9617 -9618 -9619 -9620 -9621 -9622 -9623 -9624 -9625 -9626 -9627 -9628 -9629 -9630 -9631 -9632 -9687 -9688 -9689 -9690 -9691 -9692 -9693 -9694 -9695 -9696 -9697 -9698 -9699 -9700 -9701 -9702 -9703 -9762 -9763 -9764 -9765 -9766 -9767 -9768 -9769 -9770 -9771 -9772 -9773 -9774 -9837 -9838 -9839 -9840 -9841 -9842 -9843 -9844 -9912 -9913 -10544 -10545 -10546 -10547 -10548 -10549 -10550 -10551 -10552 -10553 -10554 -10555 -10556 -10557 -10558 -10559 -10560 -10561 -10562 -10563 -10564 -10565 -10566 -10567 -10568 -10569 -10570 -10571 -10572 -10573 -10574 -10575 -10576 -10577 -10578 -10579 -10580 -10581 -10582 -10583 -10584 -10585 -10586 -10587 -10588 -10589 -10590 -10591 -10592 -10593 -10594 -10595 -10596 -10597 -10598 -10599 -10600 -10601 -10602 -10603 -10604 -10605 -10606 -10607 -10608 -10609 -10610 -10611 -10612 -10613 -10614 -10615 -10616 -10617 -10618 -10619 -10620 -10621 -10622 -10623 -10624 -10625 -10626 -10627 -10628 -10629 -10630 -10631 -10632 -10633 -10634 -10635 -10636 -10637 -10638 -10639 -10640 -10641 -10642 -10643 -10644 -10645 -10646 -10647 -10648 -10649 -10650 -10651 -10652 -10653 -10654 -10655 -10656 -10657 -10658 -10659 -10660 -10661 -10662 -10663 -10664 -10665 -10666 -10667 -10668 -10669 -10670 -10671 -10672 -10673 -10674 -10675 -10676 -10677 -10678 -10679 -10680 -10681 -10682 -10683 -10684 -10685 -10686 -10687 -10688 -10689 -10690 -10691 -10692 -10693 -10694 -10695 -10696 -10697 -10698 -10699 -10700 -10701 -10702 -10703 -10704 -10705 -10706 -10707 -10708 -10709 -10710 -10711 -10712 -10713 -10714 -10715 -10716 -10717 -10718 -10719 -10720 -10721 -10722 -10723 -10724 -10725 -10726 -10727 -10728 -10729 -10730 -10731 -10732 -10733 -10734 -10735 -10736 -10737 -10738 -10739 -10740 -10741 -10742 -10743 -10744 -10745 -10746 -10747 -10748 -10749 -10750 -10751 -10752 -10753 -10754 -10755 -10756 -10757 -10758 -10759 -10760 -10761 -10762 -10763 -10764 -10765 -10766 -10767 -10768 -10769 -10770 -10771 -10772 -10773 -10774 -10775 -10776 -10777 -10778 -10779 -10780 -10781 -10782 -10783 -10784 -10785 -10786 -10787 -10788 -10789 -10790 -10791 -10792 -10793 -10794 -10795 -10796 -10797 -10798 -10799 -10800 -10801 -10802 -10803 -10804 -10805 -10806 -10807 -10808 -10809 -10810 -10811 -10812 -10813 -10814 -10815 -10816 -10817 -10818 -10819 -10820 -10821 -10822 -10823 -10824 -10825 -10826 -10827 -10828 -10829 -10830 -10831 -) - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/refinedCells b/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/refinedCells deleted file mode 100644 index 276e2ccb5f5c8196dc1021dedc004f9e6a72ee1c..0000000000000000000000000000000000000000 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/polyMesh/sets/refinedCells +++ /dev/null @@ -1,14161 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class cellSet; - location "1e-08/polyMesh/sets"; - object refinedCells; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - -14138 -( -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804 -805 -806 -807 -808 -809 -810 -811 -812 -813 -814 -815 -816 -817 -818 -819 -820 -821 -822 -823 -824 -825 -826 -827 -828 -829 -830 -831 -832 -833 -834 -835 -836 -837 -838 -839 -840 -841 -842 -843 -844 -845 -846 -847 -848 -849 -850 -851 -852 -853 -854 -855 -856 -857 -858 -859 -860 -861 -862 -863 -864 -865 -866 -867 -868 -869 -870 -871 -872 -873 -874 -875 -876 -877 -878 -879 -880 -881 -882 -883 -884 -885 -886 -887 -888 -889 -890 -891 -892 -893 -894 -895 -896 -897 -898 -899 -900 -901 -902 -903 -904 -905 -906 -907 -908 -909 -910 -911 -912 -913 -914 -915 -916 -917 -918 -919 -920 -921 -922 -923 -924 -925 -926 -927 -928 -929 -930 -931 -932 -933 -934 -935 -936 -937 -938 -939 -940 -941 -942 -943 -944 -945 -946 -947 -948 -949 -950 -951 -952 -953 -954 -955 -956 -957 -958 -959 -960 -961 -962 -963 -964 -965 -966 -967 -968 -969 -970 -971 -972 -973 -974 -975 -976 -977 -978 -979 -980 -981 -982 -983 -984 -985 -986 -987 -988 -989 -990 -991 -992 -993 -994 -995 -996 -997 -998 -999 -1000 -1001 -1002 -1003 -1004 -1005 -1006 -1007 -1008 -1009 -1010 -1011 -1012 -1013 -1014 -1015 -1016 -1017 -1018 -1019 -1020 -1021 -1022 -1023 -1024 -1025 -1026 -1027 -1028 -1029 -1030 -1031 -1032 -1033 -1034 -1035 -1036 -1037 -1038 -1039 -1040 -1041 -1042 -1043 -1044 -1045 -1046 -1047 -1048 -1049 -1050 -1051 -1052 -1053 -1054 -1055 -1056 -1057 -1058 -1059 -1060 -1061 -1062 -1063 -1064 -1065 -1066 -1067 -1068 -1069 -1070 -1071 -1072 -1073 -1074 -1075 -1076 -1077 -1078 -1079 -1080 -1081 -1082 -1083 -1084 -1085 -1086 -1087 -1088 -1089 -1090 -1091 -1092 -1093 -1094 -1095 -1096 -1097 -1098 -1099 -1100 -1101 -1102 -1103 -1104 -1105 -1106 -1107 -1108 -1109 -1110 -1111 -1112 -1113 -1114 -1115 -1116 -1117 -1118 -1119 -1120 -1121 -1122 -1123 -1124 -1125 -1126 -1127 -1128 -1129 -1130 -1131 -1132 -1133 -1134 -1135 -1136 -1137 -1138 -1139 -1140 -1141 -1142 -1143 -1144 -1145 -1146 -1147 -1148 -1149 -1150 -1151 -1152 -1153 -1154 -1155 -1156 -1157 -1158 -1159 -1160 -1161 -1162 -1163 -1164 -1165 -1166 -1167 -1168 -1169 -1170 -1171 -1172 -1173 -1174 -1175 -1176 -1177 -1178 -1179 -1180 -1181 -1182 -1183 -1184 -1185 -1186 -1187 -1188 -1189 -1190 -1191 -1192 -1193 -1194 -1195 -1196 -1197 -1198 -1199 -1200 -1201 -1202 -1203 -1204 -1205 -1206 -1207 -1208 -1209 -1210 -1211 -1212 -1213 -1214 -1215 -1216 -1217 -1218 -1219 -1220 -1221 -1222 -1223 -1224 -1225 -1226 -1227 -1228 -1229 -1230 -1231 -1232 -1233 -1234 -1235 -1236 -1237 -1238 -1239 -1240 -1241 -1242 -1243 -1244 -1245 -1246 -1247 -1248 -1249 -1250 -1251 -1252 -1253 -1254 -1255 -1256 -1257 -1258 -1259 -1260 -1261 -1262 -1263 -1264 -1265 -1266 -1267 -1268 -1269 -1270 -1271 -1272 -1273 -1274 -1275 -1276 -1277 -1278 -1279 -1280 -1281 -1282 -1283 -1284 -1285 -1286 -1287 -1288 -1289 -1290 -1291 -1292 -1293 -1294 -1295 -1296 -1297 -1298 -1299 -1300 -1301 -1302 -1303 -1304 -1305 -1306 -1307 -1308 -1309 -1310 -1311 -1312 -1313 -1314 -1315 -1316 -1317 -1318 -1319 -1320 -1321 -1322 -1323 -1324 -1325 -1326 -1327 -1328 -1329 -1330 -1331 -1332 -1333 -1334 -1335 -1336 -1337 -1338 -1339 -1340 -1341 -1342 -1343 -1344 -1345 -1346 -1347 -1348 -1349 -1350 -1351 -1352 -1353 -1354 -1355 -1356 -1357 -1358 -1359 -1360 -1361 -1362 -1363 -1364 -1365 -1366 -1367 -1368 -1369 -1370 -1371 -1372 -1373 -1374 -1375 -1376 -1377 -1378 -1379 -1380 -1381 -1382 -1383 -1384 -1385 -1386 -1387 -1388 -1389 -1390 -1391 -1392 -1393 -1394 -1395 -1396 -1397 -1398 -1399 -1400 -1401 -1402 -1403 -1404 -1405 -1406 -1407 -1408 -1409 -1410 -1411 -1412 -1413 -1414 -1415 -1416 -1417 -1418 -1419 -1420 -1421 -1422 -1423 -1424 -1425 -1426 -1427 -1428 -1429 -1430 -1431 -1432 -1433 -1434 -1435 -1436 -1437 -1438 -1439 -1440 -1441 -1442 -1443 -1444 -1445 -1446 -1447 -1448 -1449 -1450 -1451 -1452 -1453 -1454 -1455 -1456 -1457 -1458 -1459 -1460 -1461 -1462 -1463 -1464 -1465 -1466 -1467 -1468 -1469 -1470 -1471 -1472 -1473 -1474 -1475 -1476 -1477 -1478 -1479 -1480 -1481 -1482 -1483 -1484 -1485 -1486 -1487 -1488 -1489 -1490 -1491 -1492 -1493 -1494 -1495 -1496 -1497 -1498 -1499 -1500 -1501 -1502 -1503 -1504 -1505 -1506 -1507 -1508 -1509 -1510 -1511 -1512 -1513 -1514 -1515 -1516 -1517 -1518 -1519 -1520 -1521 -1522 -1523 -1524 -1525 -1526 -1527 -1528 -1529 -1530 -1531 -1532 -1533 -1534 -1535 -1536 -1537 -1538 -1539 -1540 -1541 -1542 -1543 -1544 -1545 -1546 -1547 -1548 -1549 -1550 -1551 -1552 -1553 -1554 -1555 -1556 -1557 -1558 -1559 -1560 -1561 -1562 -1563 -1564 -1565 -1566 -1567 -1568 -1569 -1570 -1571 -1572 -1573 -1574 -1575 -1576 -1577 -1578 -1579 -1580 -1581 -1582 -1583 -1584 -1585 -1586 -1587 -1588 -1589 -1590 -1591 -1592 -1593 -1594 -1595 -1596 -1597 -1598 -1599 -1600 -1601 -1602 -1603 -1604 -1605 -1606 -1607 -1608 -1609 -1610 -1611 -1612 -1613 -1614 -1615 -1616 -1617 -1618 -1619 -1620 -1621 -1622 -1623 -1624 -1625 -1626 -1627 -1628 -1629 -1630 -1631 -1632 -1633 -1634 -1635 -1636 -1637 -1638 -1639 -1640 -1641 -1642 -1643 -1644 -1645 -1646 -1647 -1648 -1649 -1650 -1651 -1652 -1653 -1654 -1655 -1656 -1657 -1658 -1659 -1660 -1661 -1662 -1663 -1664 -1665 -1666 -1667 -1668 -1669 -1670 -1671 -1672 -1673 -1674 -1675 -1676 -1677 -1678 -1679 -1680 -1681 -1682 -1683 -1684 -1685 -1686 -1687 -1688 -1689 -1690 -1691 -1692 -1693 -1694 -1695 -1696 -1697 -1698 -1699 -1700 -1701 -1702 -1703 -1704 -1705 -1706 -1707 -1708 -1709 -1710 -1711 -1712 -1713 -1714 -1715 -1716 -1717 -1718 -1719 -1720 -1721 -1722 -1723 -1724 -1725 -1726 -1727 -1728 -1729 -1730 -1731 -1732 -1733 -1734 -1735 -1736 -1737 -1738 -1739 -1740 -1741 -1742 -1743 -1744 -1745 -1746 -1747 -1748 -1749 -1750 -1751 -1752 -1753 -1754 -1755 -1756 -1757 -1758 -1759 -1760 -1761 -1762 -1763 -1764 -1765 -1766 -1767 -1768 -1769 -1770 -1771 -1772 -1773 -1774 -1775 -1776 -1777 -1778 -1779 -1780 -1781 -1782 -1783 -1784 -1785 -1786 -1787 -1788 -1789 -1790 -1791 -1792 -1793 -1794 -1795 -1796 -1797 -1798 -1799 -1800 -1801 -1802 -1803 -1804 -1805 -1806 -1807 -1808 -1809 -1810 -1811 -1812 -1813 -1814 -1815 -1816 -1817 -1818 -1819 -1820 -1821 -1822 -1823 -1824 -1825 -1826 -1827 -1828 -1829 -1830 -1831 -1832 -1833 -1834 -1835 -1836 -1837 -1838 -1839 -1840 -1841 -1842 -1843 -1844 -1845 -1846 -1847 -1848 -1849 -1850 -1851 -1852 -1853 -1854 -1855 -1856 -1857 -1858 -1859 -1860 -1861 -1862 -1863 -1864 -1865 -1866 -1867 -1868 -1869 -1870 -1871 -1872 -1873 -1874 -1875 -1876 -1877 -1878 -1879 -1880 -1881 -1882 -1883 -1884 -1885 -1886 -1887 -1888 -1889 -1890 -1891 -1892 -1893 -1894 -1895 -1896 -1897 -1898 -1899 -1900 -1901 -1902 -1903 -1904 -1905 -1906 -1907 -1908 -1909 -1910 -1911 -1912 -1913 -1914 -1915 -1916 -1917 -1918 -1919 -1920 -1921 -1922 -1923 -1924 -1925 -1926 -1927 -1928 -1929 -1930 -1931 -1932 -1933 -1934 -1935 -1936 -1937 -1938 -1939 -1940 -1941 -1942 -1943 -1944 -1945 -1946 -1947 -1948 -1949 -1950 -1951 -1952 -1953 -1954 -1955 -1956 -1957 -1958 -1959 -1960 -1961 -1962 -1963 -1964 -1965 -1966 -1967 -1968 -1969 -1970 -1971 -1972 -1973 -1974 -1975 -1976 -1977 -1978 -1979 -1980 -1981 -1982 -1983 -1984 -1985 -1986 -1987 -1988 -1989 -1990 -1991 -1992 -1993 -1994 -1995 -1996 -1997 -1998 -1999 -2000 -2001 -2002 -2003 -2004 -2005 -2006 -2007 -2008 -2009 -2010 -2011 -2012 -2013 -2014 -2015 -2016 -2017 -2018 -2019 -2020 -2021 -2022 -2023 -2024 -2025 -2026 -2027 -2028 -2029 -2030 -2031 -2032 -2033 -2034 -2035 -2036 -2037 -2038 -2039 -2040 -2041 -2042 -2043 -2044 -2045 -2046 -2047 -2048 -2049 -2050 -2051 -2052 -2053 -2054 -2055 -2056 -2057 -2058 -2059 -2060 -2061 -2062 -2063 -2064 -2065 -2066 -2067 -2068 -2069 -2070 -2071 -2072 -2073 -2074 -2075 -2076 -2077 -2078 -2079 -2080 -2081 -2082 -2083 -2084 -2085 -2086 -2087 -2088 -2089 -2090 -2091 -2092 -2093 -2094 -2095 -2096 -2097 -2098 -2099 -2100 -2101 -2102 -2103 -2104 -2105 -2106 -2107 -2108 -2109 -2110 -2111 -2112 -2113 -2114 -2115 -2116 -2117 -2118 -2119 -2120 -2121 -2122 -2123 -2124 -2125 -2126 -2127 -2128 -2129 -2130 -2131 -2132 -2133 -2134 -2135 -2136 -2137 -2138 -2139 -2140 -2141 -2142 -2143 -2144 -2145 -2146 -2147 -2148 -2149 -2150 -2151 -2152 -2153 -2154 -2155 -2156 -2157 -2158 -2159 -2160 -2161 -2162 -2163 -2164 -2165 -2166 -2167 -2168 -2169 -2170 -2171 -2172 -2173 -2174 -2175 -2176 -2177 -2178 -2179 -2180 -2181 -2182 -2183 -2184 -2185 -2186 -2187 -2188 -2189 -2190 -2191 -2192 -2193 -2194 -2195 -2196 -2197 -2198 -2199 -2200 -2201 -2202 -2203 -2204 -2205 -2206 -2207 -2208 -2209 -2210 -2211 -2212 -2213 -2214 -2215 -2216 -2217 -2218 -2219 -2220 -2221 -2222 -2223 -2224 -2225 -2226 -2227 -2228 -2229 -2230 -2231 -2232 -2233 -2234 -2235 -2236 -2237 -2238 -2239 -2240 -2241 -2242 -2243 -2244 -2245 -2246 -2247 -2248 -2249 -2250 -2251 -2252 -2253 -2254 -2255 -2256 -2257 -2258 -2259 -2260 -2261 -2262 -2263 -2264 -2265 -2266 -2267 -2268 -2269 -2270 -2271 -2272 -2273 -2274 -2275 -2276 -2277 -2278 -2279 -2280 -2281 -2282 -2283 -2284 -2285 -2286 -2287 -2288 -2289 -2290 -2291 -2292 -2293 -2294 -2295 -2296 -2297 -2298 -2299 -2300 -2301 -2302 -2303 -2304 -2305 -2306 -2307 -2308 -2309 -2310 -2311 -2312 -2313 -2314 -2315 -2316 -2317 -2318 -2319 -2320 -2321 -2322 -2325 -2326 -2327 -2328 -2329 -2330 -2331 -2332 -2333 -2334 -2335 -2336 -2337 -2338 -2339 -2340 -2341 -2342 -2343 -2344 -2345 -2346 -2347 -2348 -2349 -2350 -2351 -2352 -2353 -2354 -2355 -2356 -2357 -2358 -2359 -2360 -2361 -2362 -2363 -2364 -2365 -2366 -2367 -2368 -2369 -2370 -2371 -2372 -2373 -2374 -2375 -2376 -2377 -2378 -2379 -2380 -2381 -2382 -2383 -2384 -2385 -2386 -2387 -2388 -2389 -2390 -2391 -2392 -2393 -2394 -2400 -2401 -2402 -2403 -2404 -2405 -2406 -2407 -2408 -2409 -2410 -2411 -2412 -2413 -2414 -2415 -2416 -2417 -2418 -2419 -2420 -2421 -2422 -2423 -2424 -2425 -2426 -2427 -2428 -2429 -2430 -2431 -2432 -2433 -2434 -2435 -2436 -2437 -2438 -2439 -2440 -2441 -2442 -2443 -2444 -2445 -2446 -2447 -2448 -2449 -2450 -2451 -2452 -2453 -2454 -2455 -2456 -2457 -2458 -2459 -2460 -2461 -2462 -2463 -2464 -2465 -2466 -2475 -2476 -2477 -2478 -2479 -2480 -2481 -2482 -2483 -2484 -2485 -2486 -2487 -2488 -2489 -2490 -2491 -2492 -2493 -2494 -2495 -2496 -2497 -2498 -2499 -2500 -2501 -2502 -2503 -2504 -2505 -2506 -2507 -2508 -2509 -2510 -2511 -2512 -2513 -2514 -2515 -2516 -2517 -2518 -2519 -2520 -2521 -2522 -2523 -2524 -2525 -2526 -2527 -2528 -2529 -2530 -2531 -2532 -2533 -2534 -2535 -2536 -2537 -2538 -2550 -2551 -2552 -2553 -2554 -2555 -2556 -2557 -2558 -2559 -2560 -2561 -2562 -2563 -2564 -2565 -2566 -2567 -2568 -2569 -2570 -2571 -2572 -2573 -2574 -2575 -2576 -2577 -2578 -2579 -2580 -2581 -2582 -2583 -2584 -2585 -2586 -2587 -2588 -2589 -2590 -2591 -2592 -2593 -2594 -2595 -2596 -2597 -2598 -2599 -2600 -2601 -2602 -2603 -2604 -2605 -2606 -2607 -2608 -2609 -2610 -2625 -2626 -2627 -2628 -2629 -2630 -2631 -2632 -2633 -2634 -2635 -2636 -2637 -2638 -2639 -2640 -2641 -2642 -2643 -2644 -2645 -2646 -2647 -2648 -2649 -2650 -2651 -2652 -2653 -2654 -2655 -2656 -2657 -2658 -2659 -2660 -2661 -2662 -2663 -2664 -2665 -2666 -2667 -2668 -2669 -2670 -2671 -2672 -2673 -2674 -2675 -2676 -2677 -2678 -2679 -2680 -2681 -2682 -2683 -2700 -2701 -2702 -2703 -2704 -2705 -2706 -2707 -2708 -2709 -2710 -2711 -2712 -2713 -2714 -2715 -2716 -2717 -2718 -2719 -2720 -2721 -2722 -2723 -2724 -2725 -2726 -2727 -2728 -2729 -2730 -2731 -2732 -2733 -2734 -2735 -2736 -2737 -2738 -2739 -2740 -2741 -2742 -2743 -2744 -2745 -2746 -2747 -2748 -2749 -2750 -2751 -2752 -2753 -2754 -2755 -2775 -2776 -2777 -2778 -2779 -2780 -2781 -2782 -2783 -2784 -2785 -2786 -2787 -2788 -2789 -2790 -2791 -2792 -2793 -2794 -2795 -2796 -2797 -2798 -2799 -2800 -2801 -2802 -2803 -2804 -2805 -2806 -2807 -2808 -2809 -2810 -2811 -2812 -2813 -2814 -2815 -2816 -2817 -2818 -2819 -2820 -2821 -2822 -2823 -2824 -2825 -2826 -2827 -2828 -2850 -2851 -2852 -2853 -2854 -2855 -2856 -2857 -2858 -2859 -2860 -2861 -2862 -2863 -2864 -2865 -2866 -2867 -2868 -2869 -2870 -2871 -2872 -2873 -2874 -2875 -2876 -2877 -2878 -2879 -2880 -2881 -2882 -2883 -2884 -2885 -2886 -2887 -2888 -2889 -2890 -2891 -2892 -2893 -2894 -2895 -2896 -2897 -2898 -2899 -2900 -2901 -2925 -2926 -2927 -2928 -2929 -2930 -2931 -2932 -2933 -2934 -2935 -2936 -2937 -2938 -2939 -2940 -2941 -2942 -2943 -2944 -2945 -2946 -2947 -2948 -2949 -2950 -2951 -2952 -2953 -2954 -2955 -2956 -2957 -2958 -2959 -2960 -2961 -2962 -2963 -2964 -2965 -2966 -2967 -2968 -2969 -2970 -2971 -2972 -2973 -2974 -3000 -3001 -3002 -3003 -3004 -3005 -3006 -3007 -3008 -3009 -3010 -3011 -3012 -3013 -3014 -3015 -3016 -3017 -3018 -3019 -3020 -3021 -3022 -3023 -3024 -3025 -3026 -3027 -3028 -3029 -3030 -3031 -3032 -3033 -3034 -3035 -3036 -3037 -3038 -3039 -3040 -3041 -3042 -3043 -3044 -3045 -3046 -3047 -3075 -3076 -3077 -3078 -3079 -3080 -3081 -3082 -3083 -3084 -3085 -3086 -3087 -3088 -3089 -3090 -3091 -3092 -3093 -3094 -3095 -3096 -3097 -3098 -3099 -3100 -3101 -3102 -3103 -3104 -3105 -3106 -3107 -3108 -3109 -3110 -3111 -3112 -3113 -3114 -3115 -3116 -3117 -3118 -3119 -3120 -3150 -3151 -3152 -3153 -3154 -3155 -3156 -3157 -3158 -3159 -3160 -3161 -3162 -3163 -3164 -3165 -3166 -3167 -3168 -3169 -3170 -3171 -3172 -3173 -3174 -3175 -3176 -3177 -3178 -3179 -3180 -3181 -3182 -3183 -3184 -3185 -3186 -3187 -3188 -3189 -3190 -3191 -3192 -3193 -3194 -3225 -3226 -3227 -3228 -3229 -3230 -3231 -3232 -3233 -3234 -3235 -3236 -3237 -3238 -3239 -3240 -3241 -3242 -3243 -3244 -3245 -3246 -3247 -3248 -3249 -3250 -3251 -3252 -3253 -3254 -3255 -3256 -3257 -3258 -3259 -3260 -3261 -3262 -3263 -3264 -3265 -3266 -3267 -3300 -3301 -3302 -3303 -3304 -3305 -3306 -3307 -3308 -3309 -3310 -3311 -3312 -3313 -3314 -3315 -3316 -3317 -3318 -3319 -3320 -3321 -3322 -3323 -3324 -3325 -3326 -3327 -3328 -3329 -3330 -3331 -3332 -3333 -3334 -3335 -3336 -3337 -3338 -3339 -3340 -3375 -3376 -3377 -3378 -3379 -3380 -3381 -3382 -3383 -3384 -3385 -3386 -3387 -3388 -3389 -3390 -3391 -3392 -3393 -3394 -3395 -3396 -3397 -3398 -3399 -3400 -3401 -3402 -3403 -3404 -3405 -3406 -3407 -3408 -3409 -3410 -3411 -3412 -3413 -3414 -3450 -3451 -3452 -3453 -3454 -3455 -3456 -3457 -3458 -3459 -3460 -3461 -3462 -3463 -3464 -3465 -3466 -3467 -3468 -3469 -3470 -3471 -3472 -3473 -3474 -3475 -3476 -3477 -3478 -3479 -3480 -3481 -3482 -3483 -3484 -3485 -3486 -3487 -3525 -3526 -3527 -3528 -3529 -3530 -3531 -3532 -3533 -3534 -3535 -3536 -3537 -3538 -3539 -3540 -3541 -3542 -3543 -3544 -3545 -3546 -3547 -3548 -3549 -3550 -3551 -3552 -3553 -3554 -3555 -3556 -3557 -3558 -3559 -3560 -3600 -3601 -3602 -3603 -3604 -3605 -3606 -3607 -3608 -3609 -3610 -3611 -3612 -3613 -3614 -3615 -3616 -3617 -3618 -3619 -3620 -3621 -3622 -3623 -3624 -3625 -3626 -3627 -3628 -3629 -3630 -3631 -3632 -3633 -3634 -3675 -3676 -3677 -3678 -3679 -3680 -3681 -3682 -3683 -3684 -3685 -3686 -3687 -3688 -3689 -3690 -3691 -3692 -3693 -3694 -3695 -3696 -3697 -3698 -3699 -3700 -3701 -3702 -3703 -3704 -3705 -3706 -3707 -3750 -3751 -3752 -3753 -3754 -3755 -3756 -3757 -3758 -3759 -3760 -3761 -3762 -3763 -3764 -3765 -3766 -3767 -3768 -3769 -3770 -3771 -3772 -3773 -3774 -3775 -3776 -3777 -3778 -3779 -3780 -3781 -3825 -3826 -3827 -3828 -3829 -3830 -3831 -3832 -3833 -3834 -3835 -3836 -3837 -3838 -3839 -3840 -3841 -3842 -3843 -3844 -3845 -3846 -3847 -3848 -3849 -3850 -3851 -3852 -3853 -3854 -3900 -3901 -3902 -3903 -3904 -3905 -3906 -3907 -3908 -3909 -3910 -3911 -3912 -3913 -3914 -3915 -3916 -3917 -3918 -3919 -3920 -3921 -3922 -3923 -3924 -3925 -3926 -3927 -3928 -3975 -3976 -3977 -3978 -3979 -3980 -3981 -3982 -3983 -3984 -3985 -3986 -3987 -3988 -3989 -3990 -3991 -3992 -3993 -3994 -3995 -3996 -3997 -3998 -3999 -4000 -4001 -4050 -4051 -4052 -4053 -4054 -4055 -4056 -4057 -4058 -4059 -4060 -4061 -4062 -4063 -4064 -4065 -4066 -4067 -4068 -4069 -4070 -4071 -4072 -4073 -4074 -4125 -4126 -4127 -4128 -4129 -4130 -4131 -4132 -4133 -4134 -4135 -4136 -4137 -4138 -4139 -4140 -4141 -4142 -4143 -4144 -4145 -4146 -4147 -4148 -4200 -4201 -4202 -4203 -4204 -4205 -4206 -4207 -4208 -4209 -4210 -4211 -4212 -4213 -4214 -4215 -4216 -4217 -4218 -4219 -4220 -4221 -4275 -4276 -4277 -4278 -4279 -4280 -4281 -4282 -4283 -4284 -4285 -4286 -4287 -4288 -4289 -4290 -4291 -4292 -4293 -4294 -4350 -4351 -4352 -4353 -4354 -4355 -4356 -4357 -4358 -4359 -4360 -4361 -4362 -4363 -4364 -4365 -4366 -4367 -4425 -4426 -4427 -4428 -4429 -4430 -4431 -4432 -4433 -4434 -4435 -4436 -4437 -4438 -4439 -4440 -4500 -4501 -4502 -4503 -4504 -4505 -4506 -4507 -4508 -4509 -4510 -4511 -4512 -4575 -4576 -4577 -4578 -4579 -4580 -4581 -4582 -4583 -4584 -4585 -4650 -4651 -4652 -4653 -4654 -4655 -4656 -4657 -4725 -4726 -4727 -4728 -4729 -4800 -4801 -7500 -7501 -7502 -7503 -7504 -7505 -7506 -7507 -7508 -7509 -7510 -7511 -7512 -7513 -7514 -7515 -7516 -7517 -7518 -7519 -7520 -7521 -7522 -7523 -7524 -7525 -7526 -7527 -7528 -7529 -7530 -7531 -7532 -7533 -7534 -7535 -7536 -7537 -7538 -7539 -7540 -7541 -7542 -7543 -7544 -7545 -7546 -7547 -7548 -7549 -7550 -7551 -7552 -7553 -7554 -7555 -7556 -7557 -7558 -7559 -7560 -7561 -7562 -7563 -7564 -7565 -7566 -7567 -7568 -7569 -7570 -7571 -7572 -7573 -7574 -7575 -7576 -7577 -7578 -7579 -7580 -7581 -7582 -7583 -7584 -7585 -7586 -7587 -7588 -7589 -7590 -7591 -7592 -7593 -7594 -7595 -7596 -7597 -7598 -7599 -7600 -7601 -7602 -7603 -7604 -7605 -7606 -7607 -7608 -7609 -7610 -7611 -7612 -7613 -7614 -7615 -7616 -7617 -7618 -7619 -7620 -7621 -7622 -7623 -7624 -7625 -7626 -7627 -7628 -7629 -7630 -7631 -7632 -7633 -7634 -7635 -7636 -7637 -7638 -7639 -7640 -7641 -7642 -7643 -7644 -7645 -7646 -7647 -7648 -7649 -7650 -7651 -7652 -7653 -7654 -7655 -7656 -7657 -7658 -7659 -7660 -7661 -7662 -7663 -7664 -7665 -7666 -7667 -7668 -7669 -7670 -7671 -7672 -7673 -7674 -7675 -7676 -7677 -7678 -7679 -7680 -7681 -7682 -7683 -7684 -7685 -7686 -7687 -7688 -7689 -7690 -7691 -7692 -7693 -7694 -7695 -7696 -7697 -7698 -7699 -7700 -7701 -7702 -7703 -7704 -7705 -7706 -7707 -7708 -7709 -7710 -7711 -7712 -7713 -7714 -7715 -7716 -7717 -7718 -7719 -7720 -7721 -7722 -7723 -7724 -7725 -7726 -7727 -7728 -7729 -7730 -7731 -7732 -7733 -7734 -7735 -7736 -7737 -7738 -7739 -7740 -7741 -7742 -7743 -7744 -7745 -7746 -7747 -7748 -7749 -7750 -7751 -7752 -7753 -7754 -7755 -7756 -7757 -7758 -7759 -7760 -7761 -7762 -7763 -7764 -7765 -7766 -7767 -7768 -7769 -7770 -7771 -7772 -7773 -7774 -7775 -7776 -7777 -7778 -7779 -7780 -7781 -7782 -7783 -7784 -7785 -7786 -7787 -7788 -7789 -7790 -7791 -7792 -7793 -7794 -7795 -7796 -7797 -7798 -7799 -7800 -7801 -7802 -7803 -7804 -7805 -7806 -7807 -7808 -7809 -7810 -7811 -7812 -7813 -7814 -7815 -7816 -7817 -7818 -7819 -7820 -7821 -7822 -7823 -7824 -7825 -7826 -7827 -7828 -7829 -7830 -7831 -7832 -7833 -7834 -7835 -7836 -7837 -7838 -7839 -7840 -7841 -7842 -7843 -7844 -7845 -7846 -7847 -7848 -7849 -7850 -7851 -7852 -7853 -7854 -7855 -7856 -7857 -7858 -7859 -7860 -7861 -7862 -7863 -7864 -7865 -7866 -7867 -7868 -7869 -7870 -7871 -7872 -7873 -7874 -7875 -7876 -7877 -7878 -7879 -7880 -7881 -7882 -7883 -7884 -7885 -7886 -7887 -7888 -7889 -7890 -7891 -7892 -7893 -7894 -7895 -7896 -7897 -7898 -7899 -7900 -7901 -7902 -7903 -7904 -7905 -7906 -7907 -7908 -7909 -7910 -7911 -7912 -7913 -7914 -7915 -7916 -7917 -7918 -7919 -7920 -7921 -7922 -7923 -7924 -7925 -7926 -7927 -7928 -7929 -7930 -7931 -7932 -7933 -7934 -7935 -7936 -7937 -7938 -7939 -7940 -7941 -7942 -7943 -7944 -7945 -7946 -7947 -7948 -7949 -7950 -7951 -7952 -7953 -7954 -7955 -7956 -7957 -7958 -7959 -7960 -7961 -7962 -7963 -7964 -7965 -7966 -7967 -7968 -7969 -7970 -7971 -7972 -7973 -7974 -7975 -7976 -7977 -7978 -7979 -7980 -7981 -7982 -7983 -7984 -7985 -7986 -7987 -7988 -7989 -7990 -7991 -7992 -7993 -7994 -7995 -7996 -7997 -7998 -7999 -8000 -8001 -8002 -8003 -8004 -8005 -8006 -8007 -8008 -8009 -8010 -8011 -8012 -8013 -8014 -8015 -8016 -8017 -8018 -8019 -8020 -8021 -8022 -8023 -8024 -8025 -8026 -8027 -8028 -8029 -8030 -8031 -8032 -8033 -8034 -8035 -8036 -8037 -8038 -8039 -8040 -8041 -8042 -8043 -8044 -8045 -8046 -8047 -8048 -8049 -8050 -8051 -8052 -8053 -8054 -8055 -8056 -8057 -8058 -8059 -8060 -8061 -8062 -8063 -8064 -8065 -8066 -8067 -8068 -8069 -8070 -8071 -8072 -8073 -8074 -8075 -8076 -8077 -8078 -8079 -8080 -8081 -8082 -8083 -8084 -8085 -8086 -8087 -8088 -8089 -8090 -8091 -8092 -8093 -8094 -8095 -8096 -8097 -8098 -8099 -8100 -8101 -8102 -8103 -8104 -8105 -8106 -8107 -8108 -8109 -8110 -8111 -8112 -8113 -8114 -8115 -8116 -8117 -8118 -8119 -8120 -8121 -8122 -8123 -8124 -8125 -8126 -8127 -8128 -8129 -8130 -8131 -8132 -8133 -8134 -8135 -8136 -8137 -8138 -8139 -8140 -8141 -8142 -8143 -8144 -8145 -8146 -8147 -8148 -8149 -8150 -8151 -8152 -8153 -8154 -8155 -8156 -8157 -8158 -8159 -8160 -8161 -8162 -8163 -8164 -8165 -8166 -8167 -8168 -8169 -8170 -8171 -8172 -8173 -8174 -8175 -8176 -8177 -8178 -8179 -8180 -8181 -8182 -8183 -8184 -8185 -8186 -8187 -8188 -8189 -8190 -8191 -8192 -8193 -8194 -8195 -8196 -8197 -8198 -8199 -8200 -8201 -8202 -8203 -8204 -8205 -8206 -8207 -8208 -8209 -8210 -8211 -8212 -8213 -8214 -8215 -8216 -8217 -8218 -8219 -8220 -8221 -8222 -8223 -8224 -8225 -8226 -8227 -8228 -8229 -8230 -8231 -8232 -8233 -8234 -8235 -8236 -8237 -8238 -8239 -8240 -8241 -8242 -8243 -8244 -8245 -8246 -8247 -8248 -8249 -8250 -8251 -8252 -8253 -8254 -8255 -8256 -8257 -8258 -8259 -8260 -8261 -8262 -8263 -8264 -8265 -8266 -8267 -8268 -8269 -8270 -8271 -8272 -8273 -8274 -8275 -8276 -8277 -8278 -8279 -8280 -8281 -8282 -8283 -8284 -8285 -8286 -8287 -8288 -8289 -8290 -8291 -8292 -8293 -8294 -8295 -8296 -8297 -8298 -8299 -8300 -8301 -8302 -8303 -8304 -8305 -8306 -8307 -8308 -8309 -8310 -8311 -8312 -8313 -8314 -8315 -8316 -8317 -8318 -8319 -8320 -8321 -8322 -8323 -8324 -8325 -8326 -8327 -8328 -8329 -8330 -8331 -8332 -8333 -8334 -8335 -8336 -8337 -8338 -8339 -8340 -8341 -8342 -8343 -8344 -8345 -8346 -8347 -8348 -8349 -8350 -8351 -8352 -8353 -8354 -8355 -8356 -8357 -8358 -8359 -8360 -8361 -8362 -8363 -8364 -8365 -8366 -8367 -8368 -8369 -8370 -8371 -8372 -8373 -8374 -8375 -8376 -8377 -8378 -8379 -8380 -8381 -8382 -8383 -8384 -8385 -8386 -8387 -8388 -8389 -8390 -8391 -8392 -8393 -8394 -8395 -8396 -8397 -8398 -8399 -8400 -8401 -8402 -8403 -8404 -8405 -8406 -8407 -8408 -8409 -8410 -8411 -8412 -8413 -8414 -8415 -8416 -8417 -8418 -8419 -8420 -8421 -8422 -8423 -8424 -8425 -8426 -8427 -8428 -8429 -8430 -8431 -8432 -8433 -8434 -8435 -8436 -8437 -8438 -8439 -8440 -8441 -8442 -8443 -8444 -8445 -8446 -8447 -8448 -8449 -8450 -8451 -8452 -8453 -8454 -8455 -8456 -8457 -8458 -8459 -8460 -8461 -8462 -8463 -8464 -8465 -8466 -8467 -8468 -8469 -8470 -8471 -8472 -8473 -8474 -8475 -8476 -8477 -8478 -8479 -8480 -8481 -8482 -8483 -8484 -8485 -8486 -8487 -8488 -8489 -8490 -8491 -8492 -8493 -8494 -8495 -8496 -8497 -8498 -8499 -8500 -8501 -8502 -8503 -8504 -8505 -8506 -8507 -8508 -8509 -8510 -8511 -8512 -8513 -8514 -8515 -8516 -8517 -8518 -8519 -8520 -8521 -8522 -8523 -8524 -8525 -8526 -8527 -8528 -8529 -8530 -8531 -8532 -8533 -8534 -8535 -8536 -8537 -8538 -8539 -8540 -8541 -8542 -8543 -8544 -8545 -8546 -8547 -8548 -8549 -8550 -8551 -8552 -8553 -8554 -8555 -8556 -8557 -8558 -8559 -8560 -8561 -8562 -8563 -8564 -8565 -8566 -8567 -8568 -8569 -8570 -8571 -8572 -8573 -8574 -8575 -8576 -8577 -8578 -8579 -8580 -8581 -8582 -8583 -8584 -8585 -8586 -8587 -8588 -8589 -8590 -8591 -8592 -8593 -8594 -8595 -8596 -8597 -8598 -8599 -8600 -8601 -8602 -8603 -8604 -8605 -8606 -8607 -8608 -8609 -8610 -8611 -8612 -8613 -8614 -8615 -8616 -8617 -8618 -8619 -8620 -8621 -8622 -8623 -8624 -8625 -8626 -8627 -8628 -8629 -8630 -8631 -8632 -8633 -8634 -8635 -8636 -8637 -8638 -8639 -8640 -8641 -8642 -8643 -8644 -8645 -8646 -8647 -8648 -8649 -8650 -8651 -8652 -8653 -8654 -8655 -8656 -8657 -8658 -8659 -8660 -8661 -8662 -8663 -8664 -8665 -8666 -8667 -8668 -8669 -8670 -8671 -8672 -8673 -8674 -8675 -8676 -8677 -8678 -8679 -8680 -8681 -8682 -8683 -8684 -8685 -8686 -8687 -8688 -8689 -8690 -8691 -8692 -8693 -8694 -8695 -8696 -8697 -8700 -8701 -8702 -8703 -8704 -8705 -8712 -8713 -8714 -8715 -8716 -8717 -8718 -8719 -8720 -8721 -8722 -8723 -8724 -8725 -8726 -8727 -8728 -8729 -8730 -8731 -8732 -8733 -8734 -8735 -8736 -8737 -8738 -8739 -8740 -8741 -8742 -8743 -8744 -8745 -8746 -8747 -8748 -8749 -8750 -8751 -8752 -8753 -8754 -8755 -8756 -8757 -8758 -8759 -8760 -8761 -8762 -8763 -8764 -8765 -8766 -8767 -8768 -8769 -8770 -8771 -8772 -8773 -8774 -8787 -8788 -8789 -8790 -8791 -8792 -8793 -8794 -8795 -8796 -8797 -8798 -8799 -8800 -8801 -8802 -8803 -8804 -8805 -8806 -8807 -8808 -8809 -8810 -8811 -8812 -8813 -8814 -8815 -8816 -8817 -8818 -8819 -8820 -8821 -8822 -8823 -8824 -8825 -8826 -8827 -8828 -8829 -8830 -8831 -8832 -8833 -8834 -8835 -8836 -8837 -8838 -8839 -8840 -8841 -8842 -8843 -8844 -8845 -8846 -8847 -8862 -8863 -8864 -8865 -8866 -8867 -8868 -8869 -8870 -8871 -8872 -8873 -8874 -8875 -8876 -8877 -8878 -8879 -8880 -8881 -8882 -8883 -8884 -8885 -8886 -8887 -8888 -8889 -8890 -8891 -8892 -8893 -8894 -8895 -8896 -8897 -8898 -8899 -8900 -8901 -8902 -8903 -8904 -8905 -8906 -8907 -8908 -8909 -8910 -8911 -8912 -8913 -8914 -8915 -8916 -8917 -8937 -8938 -8939 -8940 -8941 -8942 -8943 -8944 -8945 -8946 -8947 -8948 -8949 -8950 -8951 -8952 -8953 -8954 -8955 -8956 -8957 -8958 -8959 -8960 -8961 -8962 -8963 -8964 -8965 -8966 -8967 -8968 -8969 -8970 -8971 -8972 -8973 -8974 -8975 -8976 -8977 -8978 -8979 -8980 -8981 -8982 -8983 -8984 -8985 -8986 -8987 -8988 -9012 -9013 -9014 -9015 -9016 -9017 -9018 -9019 -9020 -9021 -9022 -9023 -9024 -9025 -9026 -9027 -9028 -9029 -9030 -9031 -9032 -9033 -9034 -9035 -9036 -9037 -9038 -9039 -9040 -9041 -9042 -9043 -9044 -9045 -9046 -9047 -9048 -9049 -9050 -9051 -9052 -9053 -9054 -9055 -9056 -9057 -9058 -9059 -9087 -9088 -9089 -9090 -9091 -9092 -9093 -9094 -9095 -9096 -9097 -9098 -9099 -9100 -9101 -9102 -9103 -9104 -9105 -9106 -9107 -9108 -9109 -9110 -9111 -9112 -9113 -9114 -9115 -9116 -9117 -9118 -9119 -9120 -9121 -9122 -9123 -9124 -9125 -9126 -9127 -9128 -9129 -9130 -9162 -9163 -9164 -9165 -9166 -9167 -9168 -9169 -9170 -9171 -9172 -9173 -9174 -9175 -9176 -9177 -9178 -9179 -9180 -9181 -9182 -9183 -9184 -9185 -9186 -9187 -9188 -9189 -9190 -9191 -9192 -9193 -9194 -9195 -9196 -9197 -9198 -9199 -9200 -9201 -9202 -9237 -9238 -9239 -9240 -9241 -9242 -9243 -9244 -9245 -9246 -9247 -9248 -9249 -9250 -9251 -9252 -9253 -9254 -9255 -9256 -9257 -9258 -9259 -9260 -9261 -9262 -9263 -9264 -9265 -9266 -9267 -9268 -9269 -9270 -9271 -9272 -9273 -9274 -9312 -9313 -9314 -9315 -9316 -9317 -9318 -9319 -9320 -9321 -9322 -9323 -9324 -9325 -9326 -9327 -9328 -9329 -9330 -9331 -9332 -9333 -9334 -9335 -9336 -9337 -9338 -9339 -9340 -9341 -9342 -9343 -9344 -9345 -9387 -9388 -9389 -9390 -9391 -9392 -9393 -9394 -9395 -9396 -9397 -9398 -9399 -9400 -9401 -9402 -9403 -9404 -9405 -9406 -9407 -9408 -9409 -9410 -9411 -9412 -9413 -9414 -9415 -9416 -9417 -9462 -9463 -9464 -9465 -9466 -9467 -9468 -9469 -9470 -9471 -9472 -9473 -9474 -9475 -9476 -9477 -9478 -9479 -9480 -9481 -9482 -9483 -9484 -9485 -9486 -9487 -9488 -9489 -9537 -9538 -9539 -9540 -9541 -9542 -9543 -9544 -9545 -9546 -9547 -9548 -9549 -9550 -9551 -9552 -9553 -9554 -9555 -9556 -9557 -9558 -9559 -9560 -9561 -9612 -9613 -9614 -9615 -9616 -9617 -9618 -9619 -9620 -9621 -9622 -9623 -9624 -9625 -9626 -9627 -9628 -9629 -9630 -9631 -9632 -9687 -9688 -9689 -9690 -9691 -9692 -9693 -9694 -9695 -9696 -9697 -9698 -9699 -9700 -9701 -9702 -9703 -9762 -9763 -9764 -9765 -9766 -9767 -9768 -9769 -9770 -9771 -9772 -9773 -9774 -9837 -9838 -9839 -9840 -9841 -9842 -9843 -9844 -9912 -9913 -10544 -10545 -10546 -10547 -10548 -10549 -10550 -10551 -10552 -10553 -10554 -10555 -10556 -10557 -10558 -10559 -10560 -10561 -10562 -10563 -10564 -10565 -10566 -10567 -10568 -10569 -10570 -10571 -10572 -10573 -10574 -10575 -10576 -10577 -10578 -10579 -10580 -10581 -10582 -10583 -10584 -10585 -10586 -10587 -10588 -10589 -10590 -10591 -10592 -10593 -10594 -10595 -10596 -10597 -10598 -10599 -10600 -10601 -10602 -10603 -10604 -10605 -10606 -10607 -10608 -10609 -10610 -10611 -10612 -10613 -10614 -10615 -10616 -10617 -10618 -10619 -10620 -10621 -10622 -10623 -10624 -10625 -10626 -10627 -10628 -10629 -10630 -10631 -10632 -10633 -10634 -10635 -10636 -10637 -10638 -10639 -10640 -10641 -10642 -10643 -10644 -10645 -10646 -10647 -10648 -10649 -10650 -10651 -10652 -10653 -10654 -10655 -10656 -10657 -10658 -10659 -10660 -10661 -10662 -10663 -10664 -10665 -10666 -10667 -10668 -10669 -10670 -10671 -10672 -10673 -10674 -10675 -10676 -10677 -10678 -10679 -10680 -10681 -10682 -10683 -10684 -10685 -10686 -10687 -10688 -10689 -10690 -10691 -10692 -10693 -10694 -10695 -10696 -10697 -10698 -10699 -10700 -10701 -10702 -10703 -10704 -10705 -10706 -10707 -10708 -10709 -10710 -10711 -10712 -10713 -10714 -10715 -10716 -10717 -10718 -10719 -10720 -10721 -10722 -10723 -10724 -10725 -10726 -10727 -10728 -10729 -10730 -10731 -10732 -10733 -10734 -10735 -10736 -10737 -10738 -10739 -10740 -10741 -10742 -10743 -10744 -10745 -10746 -10747 -10748 -10749 -10750 -10751 -10752 -10753 -10754 -10755 -10756 -10757 -10758 -10759 -10760 -10761 -10762 -10763 -10764 -10765 -10766 -10767 -10768 -10769 -10770 -10771 -10772 -10773 -10774 -10775 -10776 -10777 -10778 -10779 -10780 -10781 -10782 -10783 -10784 -10785 -10786 -10787 -10788 -10789 -10790 -10791 -10792 -10793 -10794 -10795 -10796 -10797 -10798 -10799 -10800 -10801 -10802 -10803 -10804 -10805 -10806 -10807 -10808 -10809 -10810 -10811 -10812 -10813 -10814 -10815 -10816 -10817 -10818 -10819 -10820 -10821 -10822 -10823 -10824 -10825 -10826 -10827 -10828 -10829 -10830 -10831 -10832 -10833 -10834 -10835 -10836 -10837 -10838 -10839 -10840 -10841 -10842 -10843 -10844 -10845 -10846 -10847 -10848 -10849 -10850 -10851 -10852 -10853 -10854 -10855 -10856 -10857 -10858 -10859 -10860 -10861 -10862 -10863 -10864 -10865 -10866 -10867 -10868 -10869 -10870 -10871 -10872 -10873 -10874 -10875 -10876 -10877 -10878 -10879 -10880 -10881 -10882 -10883 -10884 -10885 -10886 -10887 -10888 -10889 -10890 -10891 -10892 -10893 -10894 -10895 -10896 -10897 -10898 -10899 -10900 -10901 -10902 -10903 -10904 -10905 -10906 -10907 -10908 -10909 -10910 -10911 -10912 -10913 -10914 -10915 -10916 -10917 -10918 -10919 -10920 -10921 -10922 -10923 -10924 -10925 -10926 -10927 -10928 -10929 -10930 -10931 -10932 -10933 -10934 -10935 -10936 -10937 -10938 -10939 -10940 -10941 -10942 -10943 -10944 -10945 -10946 -10947 -10948 -10949 -10950 -10951 -10952 -10953 -10954 -10955 -10956 -10957 -10958 -10959 -10960 -10961 -10962 -10963 -10964 -10965 -10966 -10967 -10968 -10969 -10970 -10971 -10972 -10973 -10974 -10975 -10976 -10977 -10978 -10979 -10980 -10981 -10982 -10983 -10984 -10985 -10986 -10987 -10988 -10989 -10990 -10991 -10992 -10993 -10994 -10995 -10996 -10997 -10998 -10999 -11000 -11001 -11002 -11003 -11004 -11005 -11006 -11007 -11008 -11009 -11010 -11011 -11012 -11013 -11014 -11015 -11016 -11017 -11018 -11019 -11020 -11021 -11022 -11023 -11024 -11025 -11026 -11027 -11028 -11029 -11030 -11031 -11032 -11033 -11034 -11035 -11036 -11037 -11038 -11039 -11040 -11041 -11042 -11043 -11044 -11045 -11046 -11047 -11048 -11049 -11050 -11051 -11052 -11053 -11054 -11055 -11056 -11057 -11058 -11059 -11060 -11061 -11062 -11063 -11064 -11065 -11066 -11067 -11068 -11069 -11070 -11071 -11072 -11073 -11074 -11075 -11076 -11077 -11078 -11079 -11080 -11081 -11082 -11083 -11084 -11085 -11086 -11087 -11088 -11089 -11090 -11091 -11092 -11093 -11094 -11095 -11096 -11097 -11098 -11099 -11100 -11101 -11102 -11103 -11104 -11105 -11106 -11107 -11108 -11109 -11110 -11111 -11112 -11113 -11114 -11115 -11116 -11117 -11118 -11119 -11120 -11121 -11122 -11123 -11124 -11125 -11126 -11127 -11128 -11129 -11130 -11131 -11132 -11133 -11134 -11135 -11136 -11137 -11138 -11139 -11140 -11141 -11142 -11143 -11144 -11145 -11146 -11147 -11148 -11149 -11150 -11151 -11152 -11153 -11154 -11155 -11156 -11157 -11158 -11159 -11160 -11161 -11162 -11163 -11164 -11165 -11166 -11167 -11168 -11169 -11170 -11171 -11172 -11173 -11174 -11175 -11176 -11177 -11178 -11179 -11180 -11181 -11182 -11183 -11184 -11185 -11186 -11187 -11188 -11189 -11190 -11191 -11192 -11193 -11194 -11195 -11196 -11197 -11198 -11199 -11200 -11201 -11202 -11203 -11204 -11205 -11206 -11207 -11208 -11209 -11210 -11211 -11212 -11213 -11214 -11215 -11216 -11217 -11218 -11219 -11220 -11221 -11222 -11223 -11224 -11225 -11226 -11227 -11228 -11229 -11230 -11231 -11232 -11233 -11234 -11235 -11236 -11237 -11238 -11239 -11240 -11241 -11242 -11243 -11244 -11245 -11246 -11247 -11248 -11249 -11250 -11251 -11252 -11253 -11254 -11255 -11256 -11257 -11258 -11259 -11260 -11261 -11262 -11263 -11264 -11265 -11266 -11267 -11268 -11269 -11270 -11271 -11272 -11273 -11274 -11275 -11276 -11277 -11278 -11279 -11280 -11281 -11282 -11283 -11284 -11285 -11286 -11287 -11288 -11289 -11290 -11291 -11292 -11293 -11294 -11295 -11296 -11297 -11298 -11299 -11300 -11301 -11302 -11303 -11304 -11305 -11306 -11307 -11308 -11309 -11310 -11311 -11312 -11313 -11314 -11315 -11316 -11317 -11318 -11319 -11320 -11321 -11322 -11323 -11324 -11325 -11326 -11327 -11328 -11329 -11330 -11331 -11332 -11333 -11334 -11335 -11336 -11337 -11338 -11339 -11340 -11341 -11342 -11343 -11344 -11345 -11346 -11347 -11348 -11349 -11350 -11351 -11352 -11353 -11354 -11355 -11356 -11357 -11358 -11359 -11360 -11361 -11362 -11363 -11364 -11365 -11366 -11367 -11368 -11369 -11370 -11371 -11372 -11373 -11374 -11375 -11376 -11377 -11378 -11379 -11380 -11381 -11382 -11383 -11384 -11385 -11386 -11387 -11388 -11389 -11390 -11391 -11392 -11393 -11394 -11395 -11396 -11397 -11398 -11399 -11400 -11401 -11402 -11403 -11404 -11405 -11406 -11407 -11408 -11409 -11410 -11411 -11412 -11413 -11414 -11415 -11416 -11417 -11418 -11419 -11420 -11421 -11422 -11423 -11424 -11425 -11426 -11427 -11428 -11429 -11430 -11431 -11432 -11433 -11434 -11435 -11436 -11437 -11438 -11439 -11440 -11441 -11442 -11443 -11444 -11445 -11446 -11447 -11448 -11449 -11450 -11451 -11452 -11453 -11454 -11455 -11456 -11457 -11458 -11459 -11460 -11461 -11462 -11463 -11464 -11465 -11466 -11467 -11468 -11469 -11470 -11471 -11472 -11473 -11474 -11475 -11476 -11477 -11478 -11479 -11480 -11481 -11482 -11483 -11484 -11485 -11486 -11487 -11488 -11489 -11490 -11491 -11492 -11493 -11494 -11495 -11496 -11497 -11498 -11499 -11500 -11501 -11502 -11503 -11504 -11505 -11506 -11507 -11508 -11509 -11510 -11511 -11512 -11513 -11514 -11515 -11516 -11517 -11518 -11519 -11520 -11521 -11522 -11523 -11524 -11525 -11526 -11527 -11528 -11529 -11530 -11531 -11532 -11533 -11534 -11535 -11536 -11537 -11538 -11539 -11540 -11541 -11542 -11543 -11544 -11545 -11546 -11547 -11548 -11549 -11550 -11551 -11552 -11553 -11554 -11555 -11556 -11557 -11558 -11559 -11560 -11561 -11562 -11563 -11564 -11565 -11566 -11567 -11568 -11569 -11570 -11571 -11572 -11573 -11574 -11575 -11576 -11577 -11578 -11579 -11580 -11581 -11582 -11583 -11584 -11585 -11586 -11587 -11588 -11589 -11590 -11591 -11592 -11593 -11594 -11595 -11596 -11597 -11598 -11599 -11600 -11601 -11602 -11603 -11604 -11605 -11606 -11607 -11608 -11609 -11610 -11611 -11612 -11613 -11614 -11615 -11616 -11617 -11618 -11619 -11620 -11621 -11622 -11623 -11624 -11625 -11626 -11627 -11628 -11629 -11630 -11631 -11632 -11633 -11634 -11635 -11636 -11637 -11638 -11639 -11640 -11641 -11642 -11643 -11644 -11645 -11646 -11647 -11648 -11649 -11650 -11651 -11652 -11653 -11654 -11655 -11656 -11657 -11658 -11659 -11660 -11661 -11662 -11663 -11664 -11665 -11666 -11667 -11668 -11669 -11670 -11671 -11672 -11673 -11674 -11675 -11676 -11677 -11678 -11679 -11680 -11681 -11682 -11683 -11684 -11685 -11686 -11687 -11688 -11689 -11690 -11691 -11692 -11693 -11694 -11695 -11696 -11697 -11698 -11699 -11700 -11701 -11702 -11703 -11704 -11705 -11706 -11707 -11708 -11709 -11710 -11711 -11712 -11713 -11714 -11715 -11716 -11717 -11718 -11719 -11720 -11721 -11722 -11723 -11724 -11725 -11726 -11727 -11728 -11729 -11730 -11731 -11732 -11733 -11734 -11742 -11743 -11744 -11745 -11746 -11747 -11748 -11749 -11750 -11751 -11752 -11753 -11754 -11755 -11756 -11757 -11758 -11759 -11760 -11761 -11762 -11763 -11764 -11765 -11766 -11767 -11768 -11769 -11770 -11771 -11772 -11773 -11774 -11775 -11776 -11777 -11778 -11779 -11780 -11781 -11782 -11783 -11784 -11785 -11786 -11787 -11788 -11789 -11790 -11791 -11792 -11793 -11794 -11795 -11796 -11797 -11798 -11799 -11800 -11801 -11802 -11803 -11804 -11817 -11818 -11819 -11820 -11821 -11822 -11823 -11824 -11825 -11826 -11827 -11828 -11829 -11830 -11831 -11832 -11833 -11834 -11835 -11836 -11837 -11838 -11839 -11840 -11841 -11842 -11843 -11844 -11845 -11846 -11847 -11848 -11849 -11850 -11851 -11852 -11853 -11854 -11855 -11856 -11857 -11858 -11859 -11860 -11861 -11862 -11863 -11864 -11865 -11866 -11867 -11868 -11869 -11870 -11871 -11872 -11873 -11874 -11892 -11893 -11894 -11895 -11896 -11897 -11898 -11899 -11900 -11901 -11902 -11903 -11904 -11905 -11906 -11907 -11908 -11909 -11910 -11911 -11912 -11913 -11914 -11915 -11916 -11917 -11918 -11919 -11920 -11921 -11922 -11923 -11924 -11925 -11926 -11927 -11928 -11929 -11930 -11931 -11932 -11933 -11934 -11935 -11936 -11937 -11938 -11939 -11940 -11941 -11942 -11943 -11944 -11945 -11967 -11968 -11969 -11970 -11971 -11972 -11973 -11974 -11975 -11976 -11977 -11978 -11979 -11980 -11981 -11982 -11983 -11984 -11985 -11986 -11987 -11988 -11989 -11990 -11991 -11992 -11993 -11994 -11995 -11996 -11997 -11998 -11999 -12000 -12001 -12002 -12003 -12004 -12005 -12006 -12007 -12008 -12009 -12010 -12011 -12012 -12013 -12014 -12015 -12016 -12042 -12043 -12044 -12045 -12046 -12047 -12048 -12049 -12050 -12051 -12052 -12053 -12054 -12055 -12056 -12057 -12058 -12059 -12060 -12061 -12062 -12063 -12064 -12065 -12066 -12067 -12068 -12069 -12070 -12071 -12072 -12073 -12074 -12075 -12076 -12077 -12078 -12079 -12080 -12081 -12082 -12083 -12084 -12085 -12086 -12087 -12117 -12118 -12119 -12120 -12121 -12122 -12123 -12124 -12125 -12126 -12127 -12128 -12129 -12130 -12131 -12132 -12133 -12134 -12135 -12136 -12137 -12138 -12139 -12140 -12141 -12142 -12143 -12144 -12145 -12146 -12147 -12148 -12149 -12150 -12151 -12152 -12153 -12154 -12155 -12156 -12157 -12158 -12192 -12193 -12194 -12195 -12196 -12197 -12198 -12199 -12200 -12201 -12202 -12203 -12204 -12205 -12206 -12207 -12208 -12209 -12210 -12211 -12212 -12213 -12214 -12215 -12216 -12217 -12218 -12219 -12220 -12221 -12222 -12223 -12224 -12225 -12226 -12227 -12228 -12229 -12230 -12267 -12268 -12269 -12270 -12271 -12272 -12273 -12274 -12275 -12276 -12277 -12278 -12279 -12280 -12281 -12282 -12283 -12284 -12285 -12286 -12287 -12288 -12289 -12290 -12291 -12292 -12293 -12294 -12295 -12296 -12297 -12298 -12299 -12300 -12301 -12302 -12342 -12343 -12344 -12345 -12346 -12347 -12348 -12349 -12350 -12351 -12352 -12353 -12354 -12355 -12356 -12357 -12358 -12359 -12360 -12361 -12362 -12363 -12364 -12365 -12366 -12367 -12368 -12369 -12370 -12371 -12372 -12373 -12374 -12417 -12418 -12419 -12420 -12421 -12422 -12423 -12424 -12425 -12426 -12427 -12428 -12429 -12430 -12431 -12432 -12433 -12434 -12435 -12436 -12437 -12438 -12439 -12440 -12441 -12442 -12443 -12444 -12445 -12446 -12492 -12493 -12494 -12495 -12496 -12497 -12498 -12499 -12500 -12501 -12502 -12503 -12504 -12505 -12506 -12507 -12508 -12509 -12510 -12511 -12512 -12513 -12514 -12515 -12516 -12517 -12567 -12568 -12569 -12570 -12571 -12572 -12573 -12574 -12575 -12576 -12577 -12578 -12579 -12580 -12581 -12582 -12583 -12584 -12585 -12586 -12587 -12588 -12589 -12642 -12643 -12644 -12645 -12646 -12647 -12648 -12649 -12650 -12651 -12652 -12653 -12654 -12655 -12656 -12657 -12658 -12659 -12660 -12717 -12718 -12719 -12720 -12721 -12722 -12723 -12724 -12725 -12726 -12727 -12728 -12729 -12730 -12731 -12792 -12793 -12794 -12795 -12796 -12797 -12798 -12799 -12800 -12801 -12867 -12868 -12869 -12870 -12871 -13534 -13535 -13536 -13537 -13538 -13539 -13540 -13541 -13542 -13543 -13544 -13545 -13546 -13547 -13548 -13549 -13550 -13551 -13552 -13553 -13554 -13555 -13556 -13557 -13558 -13559 -13560 -13561 -13562 -13563 -13564 -13565 -13566 -13567 -13568 -13569 -13570 -13571 -13572 -13573 -13574 -13575 -13576 -13577 -13578 -13579 -13580 -13581 -13582 -13583 -13584 -13585 -13586 -13587 -13588 -13589 -13590 -13591 -13592 -13593 -13594 -13595 -13596 -13597 -13598 -13599 -13600 -13601 -13602 -13603 -13604 -13605 -13606 -13607 -13608 -13609 -13610 -13611 -13612 -13613 -13614 -13615 -13616 -13617 -13618 -13619 -13620 -13621 -13622 -13623 -13624 -13625 -13626 -13627 -13628 -13629 -13630 -13631 -13632 -13633 -13634 -13635 -13636 -13637 -13638 -13639 -13640 -13641 -13642 -13643 -13644 -13645 -13646 -13647 -13648 -13649 -13650 -13651 -13652 -13653 -13654 -13655 -13656 -13657 -13658 -13659 -13660 -13661 -13662 -13663 -13664 -13665 -13666 -13667 -13668 -13669 -13670 -13671 -13672 -13673 -13674 -13675 -13676 -13677 -13678 -13679 -13680 -13681 -13682 -13683 -13684 -13685 -13686 -13687 -13688 -13689 -13690 -13691 -13692 -13693 -13694 -13695 -13696 -13697 -13698 -13699 -13700 -13701 -13702 -13703 -13704 -13705 -13706 -13707 -13708 -13709 -13710 -13711 -13712 -13713 -13714 -13715 -13716 -13717 -13718 -13719 -13720 -13721 -13722 -13723 -13724 -13725 -13726 -13727 -13728 -13729 -13730 -13731 -13732 -13733 -13734 -13735 -13736 -13737 -13738 -13739 -13740 -13741 -13742 -13743 -13744 -13745 -13746 -13747 -13748 -13749 -13750 -13751 -13752 -13753 -13754 -13755 -13756 -13757 -13758 -13759 -13760 -13761 -13762 -13763 -13764 -13765 -13766 -13767 -13768 -13769 -13770 -13771 -13772 -13773 -13774 -13775 -13776 -13777 -13778 -13779 -13780 -13781 -13782 -13783 -13784 -13785 -13786 -13787 -13788 -13789 -13790 -13791 -13792 -13793 -13794 -13795 -13796 -13797 -13798 -13799 -13800 -13801 -13802 -13803 -13804 -13805 -13806 -13807 -13808 -13809 -13810 -13811 -13812 -13813 -13814 -13815 -13816 -13817 -13818 -13819 -13820 -13821 -13822 -13823 -13824 -13825 -13826 -13827 -13828 -13829 -13830 -13831 -13832 -13833 -13834 -13835 -13836 -13837 -13838 -13839 -13840 -13841 -13842 -13843 -13844 -13845 -13846 -13847 -13848 -13849 -13850 -13851 -13852 -13853 -13854 -13855 -13856 -13857 -13858 -13859 -13860 -13861 -13862 -13863 -13864 -13865 -13866 -13867 -13868 -13869 -13870 -13871 -13872 -13873 -13874 -13875 -13876 -13877 -13878 -13879 -13880 -13881 -13882 -13883 -13884 -13885 -13886 -13887 -13888 -13889 -13890 -13891 -13892 -13893 -13894 -13895 -13896 -13897 -13898 -13899 -13900 -13901 -13902 -13903 -13904 -13905 -13906 -13907 -13908 -13909 -13910 -13911 -13912 -13913 -13914 -13915 -13916 -13917 -13918 -13919 -13920 -13921 -13922 -13923 -13924 -13925 -13926 -13927 -13928 -13929 -13930 -13931 -13932 -13933 -13934 -13935 -13936 -13937 -13938 -13939 -13940 -13941 -13942 -13943 -13944 -13945 -13946 -13947 -13948 -13949 -13950 -13951 -13952 -13953 -13954 -13955 -13956 -13957 -13958 -13959 -13960 -13961 -13962 -13963 -13964 -13965 -13966 -13967 -13968 -13969 -13970 -13971 -13972 -13973 -13974 -13975 -13976 -13977 -13978 -13979 -13980 -13981 -13982 -13983 -13984 -13985 -13986 -13987 -13988 -13989 -13990 -13991 -13992 -13993 -13994 -13995 -13996 -13997 -13998 -13999 -14000 -14001 -14002 -14003 -14004 -14005 -14006 -14007 -14008 -14009 -14010 -14011 -14012 -14013 -14014 -14015 -14016 -14017 -14018 -14019 -14020 -14021 -14022 -14023 -14024 -14025 -14026 -14027 -14028 -14029 -14030 -14031 -14032 -14033 -14034 -14035 -14036 -14037 -14038 -14039 -14040 -14041 -14042 -14043 -14044 -14045 -14046 -14047 -14048 -14049 -14050 -14051 -14052 -14053 -14054 -14055 -14056 -14057 -14058 -14059 -14060 -14061 -14062 -14063 -14064 -14065 -14066 -14067 -14068 -14069 -14070 -14071 -14072 -14073 -14074 -14075 -14076 -14077 -14078 -14079 -14080 -14081 -14082 -14083 -14084 -14085 -14086 -14087 -14088 -14089 -14090 -14091 -14092 -14093 -14094 -14095 -14096 -14097 -14098 -14099 -14100 -14101 -14102 -14103 -14104 -14105 -14106 -14107 -14108 -14109 -14110 -14111 -14112 -14113 -14114 -14115 -14116 -14117 -14118 -14119 -14120 -14121 -14122 -14123 -14124 -14125 -14126 -14127 -14128 -14129 -14130 -14131 -14132 -14133 -14134 -14135 -14136 -14137 -14138 -14139 -14140 -14141 -14142 -14143 -14144 -14145 -14146 -14147 -14148 -14149 -14150 -14151 -14152 -14153 -14154 -14155 -14156 -14157 -14158 -14159 -14160 -14161 -14162 -14163 -14164 -14165 -14166 -14167 -14168 -14169 -14170 -14171 -14172 -14173 -14174 -14175 -14176 -14177 -14178 -14179 -14180 -14181 -14182 -14183 -14184 -14185 -14186 -14187 -14188 -14189 -14190 -14191 -14192 -14193 -14194 -14195 -14196 -14197 -14198 -14199 -14200 -14201 -14202 -14203 -14204 -14205 -14206 -14207 -14208 -14209 -14210 -14211 -14212 -14213 -14214 -14215 -14216 -14217 -14218 -14219 -14220 -14221 -14222 -14223 -14224 -14225 -14226 -14227 -14228 -14229 -14230 -14231 -14232 -14233 -14234 -14235 -14236 -14237 -14238 -14239 -14240 -14241 -14242 -14243 -14244 -14245 -14246 -14247 -14248 -14249 -14250 -14251 -14252 -14253 -14254 -14255 -14256 -14257 -14258 -14259 -14260 -14261 -14262 -14263 -14264 -14265 -14266 -14267 -14268 -14269 -14270 -14271 -14272 -14273 -14274 -14275 -14276 -14277 -14278 -14279 -14280 -14281 -14282 -14283 -14284 -14285 -14286 -14287 -14288 -14289 -14290 -14291 -14292 -14293 -14294 -14295 -14296 -14297 -14298 -14299 -14300 -14301 -14302 -14303 -14304 -14305 -14306 -14307 -14308 -14309 -14310 -14311 -14312 -14313 -14314 -14315 -14316 -14317 -14318 -14319 -14320 -14321 -14322 -14323 -14324 -14325 -14326 -14327 -14328 -14329 -14330 -14331 -14332 -14333 -14334 -14335 -14336 -14337 -14338 -14339 -14340 -14341 -14342 -14343 -14344 -14345 -14346 -14347 -14348 -14349 -14350 -14351 -14352 -14353 -14354 -14355 -14356 -14357 -14358 -14359 -14360 -14361 -14362 -14363 -14364 -14365 -14366 -14367 -14368 -14369 -14370 -14371 -14372 -14373 -14374 -14375 -14376 -14377 -14378 -14379 -14380 -14381 -14382 -14383 -14384 -14385 -14386 -14387 -14388 -14389 -14390 -14391 -14392 -14393 -14394 -14395 -14396 -14397 -14398 -14399 -14400 -14401 -14402 -14403 -14404 -14405 -14406 -14407 -14408 -14409 -14410 -14411 -14412 -14413 -14414 -14415 -14416 -14417 -14418 -14419 -14420 -14421 -14422 -14423 -14424 -14425 -14426 -14427 -14428 -14429 -14430 -14431 -14432 -14433 -14434 -14435 -14436 -14437 -14438 -14439 -14440 -14441 -14442 -14443 -14444 -14445 -14446 -14447 -14448 -14449 -14450 -14451 -14452 -14453 -14454 -14455 -14456 -14457 -14458 -14459 -14460 -14461 -14462 -14463 -14464 -14465 -14466 -14467 -14468 -14469 -14470 -14471 -14472 -14473 -14474 -14475 -14476 -14477 -14478 -14479 -14480 -14481 -14482 -14483 -14484 -14485 -14486 -14487 -14488 -14489 -14490 -14491 -14492 -14493 -14494 -14495 -14496 -14497 -14498 -14499 -14500 -14501 -14502 -14503 -14504 -14505 -14506 -14507 -14508 -14509 -14510 -14511 -14512 -14513 -14514 -14515 -14516 -14517 -14518 -14519 -14520 -14521 -14522 -14523 -14524 -14525 -14526 -14527 -14528 -14529 -14530 -14531 -14532 -14533 -14534 -14535 -14536 -14537 -14538 -14539 -14540 -14541 -14542 -14543 -14544 -14545 -14546 -14547 -14548 -14549 -14550 -14551 -14552 -14553 -14554 -14555 -14556 -14557 -14558 -14559 -14560 -14561 -14562 -14563 -14564 -14565 -14566 -14567 -14568 -14569 -14570 -14571 -14572 -14573 -14574 -14575 -14576 -14577 -14578 -14579 -14580 -14581 -14582 -14583 -14584 -14585 -14586 -14587 -14588 -14589 -14590 -14591 -14592 -14593 -14594 -14595 -14596 -14597 -14598 -14599 -14600 -14601 -14602 -14603 -14604 -14605 -14606 -14607 -14608 -14609 -14610 -14611 -14612 -14613 -14614 -14615 -14616 -14617 -14618 -14619 -14620 -14621 -14622 -14623 -14624 -14625 -14626 -14627 -14628 -14629 -14630 -14631 -14632 -14633 -14634 -14635 -14636 -14637 -14638 -14639 -14640 -14641 -14642 -14643 -14644 -14645 -14646 -14647 -14648 -14649 -14650 -14651 -14652 -14653 -14654 -14655 -14656 -14657 -14658 -14659 -14660 -14661 -14662 -14663 -14664 -14665 -14666 -14667 -14668 -14669 -14670 -14671 -14672 -14673 -14674 -14675 -14676 -14677 -14678 -14679 -14680 -14681 -14682 -14683 -14684 -14685 -14686 -14687 -14688 -14689 -14690 -14691 -14692 -14693 -14694 -14695 -14696 -14697 -14698 -14699 -14700 -14701 -14702 -14703 -14704 -14705 -14706 -14707 -14708 -14709 -14710 -14711 -14712 -14713 -14714 -14715 -14716 -14717 -14718 -14719 -14720 -14721 -14722 -14723 -14724 -14725 -14726 -14727 -14728 -14729 -14730 -14731 -14732 -14733 -14734 -14735 -14736 -14737 -14738 -14739 -14740 -14741 -14742 -14743 -14744 -14745 -14746 -14747 -14748 -14749 -14750 -14751 -14752 -14753 -14754 -14755 -14756 -14757 -14758 -14759 -14760 -14761 -14762 -14763 -14764 -14765 -14766 -14767 -14768 -14769 -14770 -14771 -14772 -14773 -14774 -14775 -14776 -14777 -14778 -14779 -14780 -14781 -14782 -14783 -14784 -14785 -14786 -14787 -14788 -14789 -14790 -14791 -14792 -14793 -14794 -14795 -14796 -14797 -14798 -14799 -14800 -14801 -14802 -14803 -14804 -14805 -14806 -14807 -14808 -14809 -14810 -14811 -14812 -14813 -14814 -14815 -14816 -14817 -14818 -14819 -14820 -14821 -14822 -14823 -14824 -14825 -14826 -14827 -14828 -14829 -14830 -14831 -14832 -14833 -14834 -14835 -14836 -14837 -14838 -14839 -14840 -14841 -14842 -14843 -14844 -14845 -14846 -14847 -14848 -14849 -14850 -14851 -14852 -14853 -14854 -14855 -14856 -14857 -14858 -14859 -14860 -14861 -14862 -14863 -14864 -14865 -14866 -14867 -14868 -14869 -14870 -14871 -14872 -14873 -14874 -14875 -14876 -14877 -14878 -14879 -14880 -14881 -14882 -14883 -14884 -14885 -14886 -14887 -14888 -14889 -14890 -14891 -14892 -14893 -14894 -14895 -14896 -14897 -14898 -14899 -14900 -14901 -14902 -14903 -14904 -14905 -14906 -14907 -14908 -14909 -14910 -14911 -14912 -14913 -14914 -14915 -14916 -14917 -14918 -14919 -14920 -14921 -14922 -14923 -14924 -14925 -14926 -14927 -14928 -14929 -14930 -14931 -14932 -14933 -14934 -14935 -14936 -14937 -14938 -14939 -14940 -14941 -14942 -14943 -14944 -14945 -14946 -14947 -14948 -14949 -14950 -14951 -14952 -14953 -14954 -14955 -14956 -14957 -14958 -14959 -14960 -14961 -14962 -14963 -14964 -14965 -14966 -14967 -14968 -14969 -14970 -14971 -14972 -14973 -14974 -14975 -14976 -14977 -14978 -14979 -14980 -14981 -14982 -14983 -14984 -14985 -14986 -14987 -14988 -14989 -14990 -14991 -14992 -14993 -14994 -14995 -14996 -14997 -14998 -14999 -15000 -15001 -15002 -15003 -15004 -15005 -15006 -15007 -15008 -15009 -15010 -15011 -15012 -15013 -15014 -15015 -15016 -15017 -15018 -15019 -15020 -15021 -15022 -15023 -15024 -15025 -15026 -15027 -15028 -15029 -15030 -15031 -15032 -15033 -15034 -15035 -15036 -15037 -15038 -15039 -15040 -15041 -15042 -15043 -15044 -15045 -15046 -15047 -15048 -15049 -15050 -15051 -15052 -15053 -15054 -15055 -15056 -15057 -15058 -15059 -15060 -15061 -15062 -15063 -15064 -15065 -15066 -15067 -15068 -15069 -15070 -15071 -15072 -15073 -15074 -15075 -15076 -15077 -15078 -15079 -15080 -15081 -15082 -15083 -15084 -15085 -15086 -15087 -15088 -15089 -15090 -15091 -15092 -15093 -15094 -15095 -15096 -15097 -15098 -15099 -15100 -15101 -15102 -15103 -15104 -15105 -15106 -15107 -15108 -15109 -15110 -15111 -15112 -15113 -15114 -15115 -15116 -15117 -15118 -15119 -15120 -15121 -15122 -15123 -15124 -15125 -15126 -15127 -15128 -15129 -15130 -15131 -15132 -15133 -15134 -15135 -15136 -15137 -15138 -15139 -15140 -15141 -15142 -15143 -15144 -15145 -15146 -15147 -15148 -15149 -15150 -15151 -15152 -15153 -15154 -15155 -15156 -15157 -15158 -15159 -15160 -15161 -15162 -15163 -15164 -15165 -15166 -15167 -15168 -15169 -15170 -15171 -15172 -15173 -15174 -15175 -15176 -15177 -15178 -15179 -15180 -15181 -15182 -15183 -15184 -15185 -15186 -15187 -15188 -15189 -15190 -15191 -15192 -15193 -15194 -15195 -15196 -15197 -15198 -15199 -15200 -15201 -15202 -15203 -15204 -15205 -15206 -15207 -15208 -15209 -15210 -15211 -15212 -15213 -15214 -15215 -15216 -15217 -15218 -15219 -15220 -15221 -15222 -15223 -15224 -15225 -15226 -15227 -15228 -15229 -15230 -15231 -15232 -15233 -15234 -15235 -15236 -15237 -15238 -15239 -15240 -15241 -15242 -15243 -15244 -15245 -15246 -15247 -15248 -15249 -15250 -15251 -15252 -15253 -15254 -15255 -15256 -15257 -15258 -15259 -15260 -15261 -15262 -15263 -15264 -15265 -15266 -15267 -15268 -15269 -15270 -15271 -15272 -15273 -15274 -15275 -15276 -15277 -15278 -15279 -15280 -15281 -15282 -15283 -15284 -15285 -15286 -15287 -15288 -15289 -15290 -15291 -15292 -15293 -15294 -15295 -15296 -15297 -15298 -15299 -15300 -15301 -15302 -15303 -15304 -15305 -15306 -15307 -15308 -15309 -15310 -15311 -15312 -15313 -15314 -15315 -15316 -15317 -15318 -15319 -15320 -15321 -15322 -15323 -15324 -15325 -15326 -15327 -15328 -15329 -15330 -15331 -15332 -15333 -15334 -15335 -15336 -15337 -15338 -15339 -15340 -15341 -15342 -15343 -15344 -15345 -15346 -15347 -15348 -15349 -15350 -15351 -15352 -15353 -15354 -15355 -15356 -15357 -15358 -15359 -15360 -15361 -15362 -15363 -15364 -15365 -15366 -15367 -15368 -15369 -15370 -15371 -15372 -15373 -15374 -15375 -15376 -15377 -15378 -15379 -15380 -15381 -15382 -15383 -15384 -15385 -15386 -15387 -15388 -15389 -15390 -15391 -15392 -15393 -15394 -15395 -15396 -15397 -15398 -15399 -15400 -15401 -15402 -15403 -15404 -15405 -15406 -15407 -15408 -15409 -15410 -15411 -15412 -15413 -15414 -15415 -15416 -15417 -15418 -15419 -15420 -15421 -15422 -15423 -15424 -15425 -15426 -15427 -15428 -15429 -15430 -15431 -15432 -15433 -15434 -15435 -15436 -15437 -15438 -15439 -15440 -15441 -15442 -15443 -15444 -15445 -15446 -15447 -15448 -15449 -15450 -15451 -15452 -15453 -15454 -15455 -15456 -15457 -15458 -15459 -15460 -15461 -15462 -15463 -15464 -15465 -15466 -15467 -15468 -15469 -15470 -15471 -15472 -15473 -15474 -15475 -15476 -15477 -15478 -15479 -15480 -15481 -15482 -15483 -15484 -15485 -15486 -15487 -15488 -15489 -15490 -15491 -15492 -15493 -15494 -15495 -15496 -15497 -15498 -15499 -15500 -15501 -15502 -15503 -15504 -15505 -15506 -15507 -15508 -15509 -15510 -15511 -15512 -15513 -15514 -15515 -15516 -15517 -15518 -15519 -15520 -15521 -15522 -15523 -15524 -15525 -15526 -15527 -15528 -15529 -15530 -15531 -15532 -15533 -15534 -15535 -15536 -15537 -15538 -15539 -15540 -15541 -15542 -15543 -15544 -15545 -15546 -15547 -15548 -15549 -15550 -15551 -15552 -15553 -15554 -15555 -15556 -15557 -15558 -15559 -15560 -15561 -15562 -15563 -15564 -15565 -15566 -15567 -15568 -15569 -15570 -15571 -15572 -15573 -15574 -15575 -15576 -15577 -15578 -15579 -15580 -15581 -15582 -15583 -15584 -15585 -15586 -15587 -15588 -15589 -15590 -15591 -15592 -15593 -15594 -15595 -15596 -15597 -15598 -15599 -15600 -15601 -15602 -15603 -15604 -15605 -15606 -15607 -15608 -15609 -15610 -15611 -15612 -15613 -15614 -15615 -15616 -15617 -15618 -15619 -15620 -15621 -15622 -15623 -15624 -15625 -15626 -15627 -15628 -15629 -15630 -15631 -15632 -15633 -15634 -15635 -15636 -15637 -15638 -15639 -15640 -15641 -15642 -15643 -15644 -15645 -15646 -15647 -15648 -15649 -15650 -15651 -15652 -15653 -15654 -15655 -15656 -15657 -15658 -15659 -15660 -15661 -15662 -15663 -15664 -15665 -15666 -15667 -15668 -15669 -15670 -15671 -15672 -15673 -15674 -15675 -15676 -15677 -15678 -15679 -15680 -15681 -15682 -15683 -15684 -15685 -15686 -15687 -15688 -15689 -15690 -15691 -15692 -15693 -15694 -15695 -15696 -15697 -15698 -15699 -15700 -15701 -15702 -15703 -15704 -15705 -15706 -15707 -15708 -15709 -15710 -15711 -15712 -15713 -15714 -15715 -15716 -15717 -15718 -15719 -15720 -15721 -15722 -15723 -15724 -15725 -15726 -15727 -15728 -15729 -15730 -15731 -15732 -15733 -15734 -15735 -15736 -15737 -15738 -15739 -15740 -15741 -15742 -15743 -15744 -15745 -15746 -15747 -15748 -15749 -15750 -15751 -15752 -15753 -15754 -15755 -15756 -15757 -15758 -15759 -15760 -15761 -15762 -15763 -15764 -15765 -15766 -15767 -15768 -15769 -15770 -15771 -15772 -15773 -15774 -15775 -15776 -15777 -15778 -15779 -15780 -15781 -15782 -15783 -15784 -15785 -15786 -15787 -15788 -15789 -15790 -15791 -15792 -15793 -15794 -15795 -15796 -15797 -15798 -15799 -15800 -15801 -15802 -15803 -15804 -15805 -15806 -15807 -15808 -15809 -15810 -15811 -15812 -15813 -15814 -15815 -15816 -15817 -15818 -15819 -15820 -15821 -15822 -15823 -15824 -15825 -15826 -15827 -15828 -15829 -15830 -15831 -15832 -15833 -15834 -15835 -15836 -15837 -15838 -15839 -15840 -15841 -15842 -15843 -15844 -15845 -15846 -15847 -15848 -15849 -15850 -15851 -15852 -15853 -15854 -15855 -15856 -15857 -15858 -15859 -15860 -15861 -15862 -15863 -15864 -15865 -15866 -15867 -15868 -15869 -15870 -15871 -15872 -15873 -15874 -15875 -15876 -15877 -15878 -15879 -15880 -15881 -15882 -15883 -15884 -15885 -15886 -15887 -15888 -15889 -15890 -15891 -15892 -15893 -15894 -15895 -15896 -15897 -15898 -15899 -15900 -15901 -15902 -15903 -15904 -15905 -15906 -15907 -15908 -15909 -15910 -15911 -15912 -15913 -15914 -15915 -15916 -15917 -15918 -15919 -15920 -15921 -15922 -15923 -15924 -15925 -15926 -15927 -15928 -15929 -15930 -15931 -15932 -15933 -15934 -15935 -15936 -15937 -15938 -15939 -15940 -15941 -15942 -15943 -15944 -15945 -15946 -15947 -15948 -15949 -15950 -15951 -15952 -15953 -15954 -15955 -15956 -15957 -15958 -15959 -15960 -15961 -15962 -15963 -15964 -15965 -15966 -15967 -15968 -15969 -15970 -15971 -15972 -15973 -15974 -15975 -15976 -15977 -15978 -15979 -15980 -15981 -15982 -15983 -15984 -15985 -15986 -15987 -15988 -15989 -15990 -15991 -15992 -15993 -15994 -15995 -15996 -15997 -15998 -15999 -16000 -16001 -16002 -16003 -16004 -16005 -16006 -16007 -16008 -16009 -16010 -16011 -16012 -16013 -16014 -16015 -16016 -16017 -16018 -16019 -16020 -16021 -16022 -16023 -16024 -16025 -16026 -16027 -16028 -16029 -16030 -16031 -16032 -16033 -16034 -16035 -16036 -16037 -16038 -16039 -16040 -16041 -16042 -16043 -16044 -16045 -16046 -16047 -16048 -16049 -16050 -16051 -16052 -16053 -16054 -16055 -16056 -16057 -16058 -16059 -16060 -16061 -16062 -16063 -16064 -16065 -16066 -16067 -16068 -16069 -16070 -16071 -16072 -16073 -16074 -16075 -16076 -16077 -16078 -16079 -16080 -16081 -16082 -16083 -16084 -16085 -16086 -16087 -16088 -16089 -16090 -16091 -16092 -16093 -16094 -16095 -16096 -16097 -16098 -16099 -16100 -16101 -16102 -16103 -16104 -16105 -16106 -16107 -16108 -16109 -16110 -16111 -16112 -16113 -16114 -16115 -16116 -16117 -16118 -16119 -16120 -16121 -16122 -16123 -16124 -16125 -16126 -16127 -16128 -16129 -16130 -16131 -16132 -16133 -16134 -16135 -16136 -16137 -16138 -16139 -16140 -16141 -16142 -16143 -16144 -16145 -16146 -16147 -16148 -16149 -16150 -16151 -16152 -16153 -16154 -16155 -16156 -16157 -16158 -16159 -16160 -16161 -16162 -16163 -16164 -16165 -16166 -16167 -16168 -16169 -16170 -16171 -16172 -16173 -16174 -16175 -16176 -16177 -16178 -16179 -16180 -16181 -16182 -16183 -16184 -16185 -16186 -16187 -16188 -16189 -16190 -16191 -16192 -16193 -16194 -16195 -16196 -16197 -16198 -16199 -16200 -16201 -16202 -16203 -16204 -16205 -16206 -16207 -16208 -16209 -16210 -16211 -16212 -16213 -16214 -16215 -16216 -16217 -16218 -16219 -16220 -16221 -16222 -16223 -16224 -16225 -16226 -16227 -16228 -16229 -16230 -16231 -16232 -16233 -16234 -16235 -16236 -16237 -16238 -16239 -16240 -16241 -16242 -16243 -16244 -16245 -16246 -16247 -16248 -16249 -16250 -16251 -16252 -16253 -16254 -16255 -16256 -16257 -16258 -16259 -16260 -16261 -16262 -16263 -16264 -16265 -16266 -16267 -16268 -16269 -16270 -16271 -16272 -16273 -16274 -16275 -16276 -16277 -16278 -16279 -16280 -16281 -16282 -16283 -16284 -16285 -16286 -16287 -16288 -16289 -16290 -16291 -16292 -16293 -16294 -16295 -16296 -16297 -16298 -16299 -16300 -16301 -16302 -16303 -16304 -16305 -16306 -16307 -16308 -16309 -16310 -16311 -16312 -16313 -16314 -16315 -16316 -16317 -16318 -16319 -16320 -16321 -16322 -16323 -16324 -16325 -16326 -16327 -16328 -16329 -16330 -16331 -16332 -16333 -16334 -16335 -16336 -16337 -16338 -16339 -16340 -16341 -16342 -16343 -16344 -16345 -16346 -16347 -16348 -16349 -16350 -16351 -16352 -16353 -16354 -16355 -16356 -16357 -16358 -16359 -16360 -16361 -16362 -16363 -16364 -16365 -16366 -16367 -16368 -16369 -16370 -16371 -16372 -16373 -16374 -16375 -16376 -16377 -16378 -16379 -16380 -16381 -16382 -16383 -16384 -16385 -16386 -16387 -16388 -16389 -16390 -16391 -16392 -16393 -16394 -16395 -16396 -16397 -16398 -16399 -16400 -16401 -16402 -16403 -16404 -16405 -16406 -16407 -16408 -16409 -16410 -16411 -16412 -16413 -16414 -16415 -16416 -16417 -16418 -16419 -16420 -16421 -16422 -16423 -16424 -16425 -16426 -16427 -16428 -16429 -16430 -16431 -16432 -16433 -16434 -16435 -16436 -16437 -16438 -16439 -16440 -16441 -16442 -16443 -16444 -16445 -16446 -16447 -16448 -16449 -16450 -16451 -16452 -16453 -16454 -16455 -16456 -16457 -16458 -16459 -16460 -16461 -16462 -16463 -16464 -16465 -16466 -16467 -16468 -16469 -16470 -16471 -16472 -16473 -16474 -16475 -16476 -16477 -16478 -16479 -16480 -16481 -16482 -16483 -16484 -16485 -16486 -16487 -16488 -16489 -16490 -16491 -16492 -16493 -16494 -16495 -16496 -16497 -16498 -16499 -16500 -16501 -16502 -16503 -16504 -16505 -16506 -16507 -16508 -16509 -16510 -16511 -16512 -16513 -16514 -16515 -16516 -16517 -16518 -16519 -16520 -16521 -16522 -16523 -16524 -16525 -16526 -16527 -16528 -16529 -16530 -16531 -16532 -16533 -16534 -16535 -16536 -16537 -16538 -16539 -16540 -16541 -16542 -16543 -16544 -16545 -16546 -16547 -16548 -16549 -16550 -16551 -16552 -16553 -16554 -16555 -16556 -16557 -16558 -16559 -16560 -16561 -16562 -16563 -16564 -16565 -16566 -16567 -16568 -16569 -16570 -16571 -16572 -16573 -16574 -16575 -16576 -16577 -16578 -16579 -16580 -16581 -16582 -16583 -16584 -16585 -16586 -16587 -16588 -16589 -16590 -16591 -16592 -16593 -16594 -16595 -16596 -16597 -16598 -16599 -16600 -16601 -16602 -16603 -16604 -16605 -16606 -16607 -16608 -16609 -16610 -16611 -16612 -16613 -16614 -16615 -16616 -16617 -16618 -16619 -16620 -16621 -16622 -16623 -16624 -16625 -16626 -16627 -16628 -16629 -16630 -16631 -16632 -16633 -16634 -16635 -16636 -16637 -16638 -16639 -16640 -16641 -16642 -16643 -16644 -16645 -16646 -16647 -16648 -16649 -16650 -16651 -16652 -16653 -16654 -16655 -16656 -16657 -16658 -16659 -16660 -16661 -16662 -16663 -16664 -16665 -16666 -16667 -16668 -16669 -16670 -16671 -16672 -16673 -16674 -16675 -16676 -16677 -16678 -16679 -16680 -16681 -16682 -16683 -16684 -16685 -16686 -16687 -16688 -16689 -16690 -16691 -16692 -16693 -16694 -16695 -16696 -16697 -16698 -16699 -16700 -16701 -16702 -16703 -16704 -16705 -16706 -16707 -16708 -16709 -16710 -16711 -16712 -16713 -16714 -16715 -16716 -16717 -16718 -16719 -16720 -16721 -16722 -16723 -16724 -16725 -16726 -16727 -16728 -16729 -16730 -16731 -16732 -16733 -16734 -16735 -16736 -16737 -16738 -16739 -16740 -16741 -16742 -16743 -16744 -16745 -16746 -16747 -16748 -16749 -16750 -16751 -16752 -16753 -16754 -16755 -16756 -16757 -16758 -16759 -16760 -16761 -16762 -16763 -16764 -16765 -16766 -16767 -16768 -16769 -16770 -16771 -16772 -16773 -16774 -16775 -16776 -16777 -16778 -16779 -16780 -16781 -16782 -16783 -16784 -16785 -16786 -16787 -16788 -16789 -16790 -16791 -16792 -16793 -16794 -16795 -16796 -16797 -16798 -16799 -16800 -16801 -16802 -16803 -16804 -16805 -16806 -16807 -16808 -16809 -16810 -16811 -16812 -16813 -16814 -16815 -16816 -16817 -16818 -16819 -16820 -16821 -16822 -16823 -16824 -16825 -16826 -16827 -16828 -16829 -16830 -16831 -16832 -16833 -16834 -16835 -16836 -16837 -16838 -16839 -16840 -16841 -16842 -16843 -16844 -16845 -16846 -16847 -16848 -16849 -16850 -16851 -16852 -16853 -16854 -16855 -16856 -16857 -16858 -16859 -16860 -16861 -16862 -16863 -16864 -16865 -16866 -16867 -16868 -16869 -16870 -16871 -16872 -16873 -16874 -16875 -16876 -16877 -16878 -16879 -16880 -16881 -16882 -16883 -16884 -16885 -16886 -16887 -16888 -16889 -16890 -16891 -16892 -16893 -16894 -16895 -16896 -16897 -16898 -16899 -16900 -16901 -16902 -16903 -16904 -16905 -16906 -16907 -16908 -16909 -16910 -16911 -16912 -16913 -16914 -16915 -16916 -16917 -16918 -16919 -16920 -16921 -16922 -16923 -16924 -16925 -16926 -16927 -16928 -16929 -16930 -16931 -16932 -16933 -16934 -16935 -16936 -16937 -16938 -16939 -16940 -16941 -16942 -16943 -16944 -16945 -16946 -16947 -16948 -16949 -16950 -16951 -16952 -16953 -16954 -16955 -16956 -16957 -16958 -16959 -16960 -16961 -16962 -16963 -16964 -16965 -16966 -16967 -16968 -16969 -16970 -16971 -16972 -16973 -16974 -16975 -16976 -16977 -16978 -16979 -16980 -16981 -16982 -16983 -16984 -16985 -16986 -16987 -16988 -16989 -16990 -16991 -16992 -16993 -16994 -16995 -16996 -16997 -16998 -16999 -17000 -17001 -17002 -17003 -17004 -17005 -17006 -17007 -17008 -17009 -17010 -17011 -17012 -17013 -17014 -17015 -17016 -17017 -17018 -17019 -17020 -17021 -17022 -17023 -17024 -17025 -17026 -17027 -17028 -17029 -17030 -17031 -17032 -17033 -17034 -17035 -17036 -17037 -17038 -17039 -17040 -17041 -17042 -17043 -17044 -17045 -17046 -17047 -17048 -17049 -17050 -17051 -17052 -17053 -17054 -17055 -17056 -17057 -17058 -17059 -17060 -17061 -17062 -17063 -17064 -17065 -17066 -17067 -17068 -17069 -17070 -17071 -17072 -17073 -17074 -17075 -17076 -17077 -17078 -17079 -17080 -17081 -17082 -17083 -17084 -17085 -17086 -17087 -17088 -17089 -17090 -17091 -17092 -17093 -17094 -17095 -17096 -17097 -17098 -17099 -17100 -17101 -17102 -17103 -17104 -17105 -17106 -17107 -17108 -17109 -17110 -17111 -17112 -17113 -17114 -17115 -17116 -17117 -17118 -17119 -17120 -17121 -17122 -17123 -17124 -17125 -17126 -17127 -17128 -17129 -17130 -17131 -17132 -17133 -17134 -17135 -17136 -17137 -17138 -17139 -17140 -17141 -17142 -17143 -17144 -17145 -17146 -17147 -17148 -17149 -17150 -17151 -17152 -17153 -17154 -17155 -17156 -17157 -17158 -17159 -17160 -17161 -17162 -17163 -17164 -17165 -17166 -17167 -17168 -17169 -17170 -17171 -17172 -17173 -17174 -17175 -17176 -17177 -17178 -17179 -17180 -17181 -17182 -17183 -17184 -17185 -17186 -17187 -17188 -17189 -17190 -17191 -17192 -17193 -17194 -17195 -17196 -17197 -17198 -17199 -17200 -17201 -17202 -17203 -17204 -17205 -17206 -17207 -17208 -17209 -17210 -17211 -17212 -17213 -17214 -17215 -17216 -17217 -17218 -17219 -17220 -17221 -17222 -17223 -17224 -17225 -17226 -17227 -17228 -17229 -17230 -17231 -17232 -17233 -17234 -17235 -17236 -17237 -17238 -17239 -17240 -17241 -17242 -17243 -17244 -17245 -17246 -17247 -17248 -17249 -17250 -17251 -17252 -17253 -17254 -17255 -17256 -17257 -17258 -17259 -17260 -17261 -17262 -17263 -17264 -17265 -17266 -17267 -17268 -17269 -17270 -17271 -17272 -17273 -17274 -17275 -17276 -17277 -17278 -17279 -17280 -17281 -17282 -17283 -17284 -17285 -17286 -17287 -17288 -17289 -17290 -17291 -17292 -17293 -17294 -17295 -17296 -17297 -17298 -17299 -17300 -17301 -17302 -17303 -17304 -17305 -17306 -17307 -17308 -17309 -17310 -17311 -17312 -17313 -17314 -17315 -17316 -17317 -17318 -17319 -17320 -17321 -17322 -17323 -17324 -17325 -17326 -17327 -17328 -17329 -17330 -17331 -17332 -17333 -17334 -17335 -17336 -17337 -17338 -17339 -17340 -17341 -17342 -17343 -17344 -17345 -17346 -17347 -17348 -17349 -17350 -17351 -17352 -17353 -17354 -17355 -17356 -17357 -17358 -17359 -17360 -17361 -17362 -17363 -17364 -17365 -17366 -17367 -17368 -17369 -17370 -17371 -17372 -17373 -17374 -17375 -17376 -17377 -17378 -17379 -17380 -17381 -17382 -17383 -17384 -17385 -17386 -17387 -17388 -17389 -17390 -17391 -17392 -17393 -17394 -17395 -17396 -17397 -17398 -17399 -17400 -17401 -17402 -17403 -17404 -17405 -17406 -17407 -17408 -17409 -17410 -17411 -17412 -17413 -17414 -17415 -17416 -17417 -17418 -17419 -17420 -17421 -17422 -17423 -17424 -17425 -17426 -17427 -17428 -17429 -17430 -17431 -17432 -17433 -17434 -17435 -17436 -17437 -17438 -17439 -17440 -17441 -17442 -17443 -17444 -17445 -17446 -17447 -17448 -17449 -17450 -17451 -17452 -17453 -17454 -17455 -17456 -17457 -17458 -17459 -17460 -17461 -17462 -17463 -17464 -17465 -17466 -17467 -17468 -17469 -17470 -17471 -17472 -17473 -17474 -17475 -17476 -17477 -17478 -17479 -17480 -17481 -17482 -17483 -17484 -17485 -17486 -17487 -17488 -17489 -17490 -17491 -17492 -17493 -17494 -17495 -17496 -17497 -17498 -17499 -17500 -17501 -17502 -17503 -17504 -17505 -17506 -17507 -17508 -17509 -17510 -17511 -17512 -17513 -17514 -17515 -17516 -17517 -17518 -17519 -17520 -17521 -17522 -17523 -17524 -17525 -17526 -17527 -17528 -17529 -17530 -17531 -17532 -17533 -17534 -17535 -17536 -17537 -17538 -17539 -17540 -17541 -17542 -17543 -17544 -17545 -17546 -17547 -17548 -17549 -17550 -17551 -17552 -17553 -17554 -17555 -17556 -17557 -17558 -17559 -17560 -17561 -17562 -17563 -17564 -17565 -17566 -17567 -17568 -17569 -17570 -17571 -17572 -17573 -17574 -17575 -17576 -17577 -17578 -17579 -17580 -17581 -17582 -17583 -17584 -17585 -17586 -17587 -17588 -17589 -17590 -17591 -17592 -17593 -17594 -17595 -17596 -17597 -17598 -17599 -17600 -17601 -17602 -17603 -17604 -17605 -17606 -17607 -17608 -17609 -17610 -17611 -17612 -17613 -17614 -17615 -17616 -17617 -17618 -17619 -17620 -17621 -17622 -17623 -17624 -17625 -17626 -17627 -17628 -17629 -17630 -17631 -17632 -17633 -17634 -17635 -17636 -17637 -17638 -17639 -17640 -17641 -17642 -17643 -17644 -17645 -17646 -17647 -17648 -17649 -17650 -17651 -17652 -17653 -17654 -17655 -17656 -17657 -17658 -17659 -17660 -17661 -17662 -17663 -17664 -17665 -17666 -17667 -17668 -17669 -17670 -17671 -17672 -17673 -17674 -17675 -17676 -17677 -17678 -17679 -17680 -17681 -17682 -17683 -17684 -17685 -17686 -17687 -17688 -17689 -17690 -17691 -17692 -17693 -17694 -17695 -17696 -17697 -17698 -17699 -17700 -17701 -17702 -17703 -17704 -17705 -17706 -17707 -17708 -17709 -17710 -17711 -17712 -17713 -17714 -17715 -17716 -17717 -17718 -17719 -17720 -17721 -17722 -17723 -17724 -17725 -17726 -17727 -17728 -17729 -17730 -17731 -17732 -17733 -17734 -17735 -17736 -17737 -17738 -17739 -17740 -17741 -17742 -17743 -17744 -17745 -17746 -17747 -17748 -17749 -17750 -17751 -17752 -17753 -17754 -17755 -17756 -17757 -17758 -17759 -17760 -17761 -17762 -17763 -17764 -17765 -17766 -17767 -17768 -17769 -17770 -17771 -17772 -17773 -17774 -17775 -17776 -17777 -17778 -17779 -17780 -17781 -17782 -17783 -17784 -17785 -17786 -17787 -17788 -17789 -17790 -17791 -17792 -17793 -17794 -17795 -17796 -17797 -17798 -17799 -17800 -17801 -17802 -17803 -17804 -17805 -17806 -17807 -17808 -17809 -17810 -17811 -17812 -17813 -17814 -17815 -17816 -17817 -17818 -17819 -17820 -17821 -17822 -17823 -17824 -17825 -17826 -17827 -17828 -17829 -17830 -17831 -17832 -17833 -17834 -17835 -17836 -17837 -17838 -17839 -17840 -17841 -17842 -17843 -17844 -17845 -17846 -17847 -17848 -17849 -17850 -17851 -17852 -17853 -17854 -17855 -17856 -17857 -17858 -17859 -17860 -17861 -17862 -17863 -17864 -17865 -17866 -17867 -17868 -17869 -17870 -17871 -17872 -17873 -17874 -17875 -17876 -17877 -17878 -17879 -17880 -17881 -17882 -17883 -17884 -17885 -17886 -17887 -17888 -17889 -17890 -17891 -17892 -17893 -17894 -17895 -17896 -17897 -17898 -17899 -17900 -17901 -17902 -17903 -17904 -17905 -17906 -17907 -17908 -17909 -17910 -17911 -17912 -17913 -17914 -17915 -17916 -17917 -17918 -17919 -17920 -17921 -17922 -17923 -17924 -17925 -17926 -17927 -17928 -17929 -17930 -17931 -17932 -17933 -17934 -17935 -17936 -17937 -17938 -17939 -17940 -17941 -17942 -17943 -17944 -17945 -17946 -17947 -17948 -17949 -17950 -17951 -17952 -17953 -17954 -17955 -17956 -17957 -17958 -17959 -17960 -17961 -17962 -17963 -17964 -17965 -17966 -17967 -17968 -17969 -17970 -17971 -17972 -17973 -17974 -17975 -17976 -17977 -17978 -17979 -17980 -17981 -17982 -17983 -17984 -17985 -17986 -17987 -17988 -17989 -17990 -17991 -17992 -17993 -17994 -17995 -17996 -17997 -17998 -17999 -18000 -18001 -18002 -18003 -18004 -18005 -18006 -18007 -18008 -18009 -18010 -18011 -18012 -18013 -18014 -18015 -18016 -18017 -18018 -18019 -18020 -18021 -18022 -18023 -18024 -18025 -18026 -18027 -18028 -18029 -18030 -18031 -18032 -18033 -18034 -18035 -18036 -18037 -18038 -18039 -18040 -18041 -18042 -18043 -18044 -18045 -18046 -18047 -18048 -18049 -18050 -18051 -18052 -18053 -18054 -18055 -18056 -18057 -18058 -18059 -18060 -18061 -18062 -18063 -18064 -18065 -18066 -18067 -18068 -18069 -18070 -18071 -18072 -18073 -18074 -18075 -18076 -18077 -18078 -18079 -18080 -18081 -18082 -18083 -18084 -18085 -18086 -18087 -18088 -18089 -18090 -18091 -18092 -18093 -18094 -18095 -18096 -18097 -18098 -18099 -18100 -18101 -18102 -18103 -18104 -18105 -18106 -18107 -18108 -18109 -18110 -18111 -18112 -18113 -18114 -18115 -18116 -18117 -18118 -18119 -18120 -18121 -18122 -18123 -18124 -18125 -18126 -18127 -18128 -18129 -18130 -18131 -18132 -18133 -18134 -18135 -18136 -18137 -18138 -18139 -18140 -18141 -18142 -18143 -18144 -18145 -18146 -18147 -18148 -18149 -18150 -18151 -18152 -18153 -18154 -18155 -18156 -18157 -18158 -18159 -18160 -18161 -18162 -18163 -18164 -18165 -18166 -18167 -18168 -18169 -18170 -18171 -18172 -18173 -18174 -18175 -18176 -18177 -18178 -18179 -18180 -18181 -18182 -18183 -18184 -18185 -18186 -18187 -18188 -18189 -18190 -18191 -18192 -18193 -18194 -18195 -18196 -18197 -18198 -18199 -18200 -18201 -18202 -18203 -18204 -18205 -18206 -18207 -18208 -18209 -18210 -18211 -18212 -18213 -18214 -18215 -18216 -18217 -18218 -18219 -18220 -18221 -18222 -18223 -18224 -18225 -18226 -18227 -18228 -18229 -18230 -18231 -18232 -18233 -18234 -18235 -18236 -18237 -18238 -18239 -18240 -18241 -18242 -18243 -18244 -18245 -18246 -18247 -18248 -18249 -18250 -18251 -18252 -18253 -18254 -18255 -18256 -18257 -18258 -18259 -18260 -18261 -18262 -18263 -18264 -18265 -18266 -18267 -18268 -18269 -18270 -18271 -18272 -18273 -18274 -18275 -18276 -18277 -18278 -18279 -18280 -18281 -18282 -18283 -18284 -18285 -18286 -18287 -18288 -18289 -18290 -18291 -18292 -18293 -18294 -18295 -18296 -18297 -18298 -18299 -18300 -18301 -18302 -18303 -18304 -18305 -18306 -18307 -18308 -18309 -18310 -18311 -18312 -18313 -18314 -18315 -18316 -18317 -18318 -18319 -18320 -18321 -18322 -18323 -18324 -18325 -18326 -18327 -18328 -18329 -18330 -18331 -18332 -18333 -18334 -18335 -18336 -18337 -18338 -18339 -18340 -18341 -18342 -18343 -18344 -18345 -18346 -18347 -18348 -18349 -18350 -18351 -18352 -18353 -18354 -18355 -18356 -18357 -18358 -18359 -18360 -18361 -18362 -18363 -18364 -18365 -18366 -18367 -18368 -18369 -18370 -18371 -18372 -18373 -18374 -18375 -18376 -18377 -18378 -18379 -18380 -18381 -18382 -18383 -18384 -18385 -18386 -18387 -18388 -18389 -18390 -18391 -18392 -18393 -18394 -18395 -18396 -18397 -18398 -18399 -18400 -18401 -18402 -18403 -18404 -18405 -18406 -18407 -18408 -18409 -18410 -18411 -18412 -18413 -18414 -18415 -18416 -18417 -18418 -18419 -18420 -18421 -18422 -18423 -18424 -18425 -18426 -18427 -18428 -18429 -18430 -18431 -18432 -18433 -18434 -18435 -18436 -18437 -18438 -18439 -18440 -18441 -18442 -18443 -18444 -18445 -18446 -18447 -18448 -18449 -18450 -18451 -18452 -18453 -18454 -18455 -18456 -18457 -18458 -18459 -18460 -18461 -18462 -18463 -18464 -18465 -18466 -18467 -18468 -18469 -18470 -18471 -18472 -18473 -18474 -18475 -18476 -18477 -18478 -18479 -18480 -18481 -18482 -18483 -18484 -18485 -18486 -18487 -18488 -18489 -18490 -18491 -18492 -18493 -18494 -18495 -18496 -18497 -18498 -18499 -18500 -18501 -18502 -18503 -18504 -18505 -18506 -18507 -18508 -18509 -18510 -18511 -18512 -18513 -18514 -18515 -18516 -18517 -18518 -18519 -18520 -18521 -18522 -18523 -18524 -18525 -18526 -18527 -18528 -18529 -18530 -18531 -18532 -18533 -18534 -18535 -18536 -18537 -18538 -18539 -18540 -18541 -18542 -18543 -18544 -18545 -18546 -18547 -18548 -18549 -18550 -18551 -18552 -18553 -18554 -18555 -18556 -18557 -18558 -18559 -18560 -18561 -18562 -18563 -18564 -18565 -18566 -18567 -18568 -18569 -18570 -18571 -18572 -18573 -18574 -18575 -18576 -18577 -18578 -18579 -18580 -18581 -18582 -18583 -18584 -18585 -18586 -18587 -18588 -18589 -18590 -18591 -18592 -18593 -18594 -18595 -18596 -18597 -18598 -18599 -18600 -18601 -18602 -18603 -18604 -18605 -18606 -18607 -18608 -18609 -18610 -18611 -18612 -18613 -18614 -18615 -18616 -18617 -18618 -18619 -18620 -18621 -18622 -18623 -18624 -18625 -18626 -18627 -18628 -18629 -18630 -18631 -18632 -18633 -18634 -18635 -18636 -18637 -18638 -18639 -18640 -18641 -18642 -18643 -18644 -18645 -18646 -18647 -18648 -18649 -18650 -18651 -18652 -18653 -18654 -18655 -18656 -18657 -18658 -18659 -18660 -18661 -18662 -18663 -18664 -18665 -18666 -18667 -18668 -18669 -18670 -18671 -18672 -18673 -18674 -18675 -18676 -18677 -18678 -18679 -18680 -18681 -18682 -18683 -18684 -18685 -18686 -18687 -18688 -18689 -18690 -18691 -18692 -18693 -18694 -18695 -18696 -18697 -18698 -18699 -18700 -18701 -18702 -18703 -18704 -18705 -18706 -18707 -18708 -18709 -18710 -18711 -18712 -18713 -18714 -18715 -18716 -18717 -18718 -18719 -18720 -18721 -18722 -18723 -18724 -18725 -18726 -18727 -18728 -18729 -18730 -18731 -18732 -18733 -18734 -18735 -18736 -18737 -18738 -18739 -18740 -18741 -18742 -18743 -18744 -18745 -18746 -18747 -18748 -18749 -18750 -18751 -18752 -18753 -18754 -18755 -18756 -18757 -18758 -18759 -18760 -18761 -18762 -18763 -18764 -18765 -18766 -18767 -18768 -18769 -18770 -18771 -18772 -18773 -18774 -18775 -18776 -18777 -18778 -18779 -18780 -18781 -18782 -18783 -18784 -18785 -18786 -18787 -18788 -18789 -18790 -18791 -18792 -18793 -18794 -18795 -18796 -18797 -18798 -18799 -18800 -18801 -18802 -18803 -18804 -18805 -18806 -18807 -18808 -18809 -18810 -18811 -18812 -18813 -18814 -18815 -18816 -18817 -18818 -18819 -18820 -18821 -18822 -18823 -18824 -18825 -18826 -18827 -18828 -18829 -18830 -18831 -18832 -18833 -18834 -18835 -18836 -18837 -18838 -18839 -18840 -18841 -18842 -18843 -18844 -18845 -18846 -18847 -18848 -18849 -18850 -18851 -18852 -18853 -18854 -18855 -18856 -18857 -18858 -18859 -18860 -18861 -18862 -18863 -18864 -18865 -18866 -18867 -18868 -18869 -18870 -18871 -18872 -18873 -18874 -18875 -18876 -18877 -18878 -18879 -18880 -18881 -18882 -18883 -18884 -18885 -18886 -18887 -18888 -18889 -18890 -18891 -18892 -18893 -18894 -18895 -18896 -18897 -18898 -18899 -18900 -18901 -18902 -18903 -18904 -18905 -18906 -18907 -18908 -18909 -18910 -18911 -18912 -18913 -18914 -18915 -18916 -18917 -18918 -18919 -18920 -18921 -18922 -18923 -18924 -18925 -18926 -18927 -18928 -18929 -18930 -18931 -18932 -18933 -18934 -18935 -18936 -18937 -18938 -18939 -18940 -18941 -18942 -18943 -18944 -18945 -18946 -18947 -18948 -18949 -18950 -18951 -18952 -18953 -18954 -18955 -18956 -18957 -18958 -18959 -18960 -18961 -18962 -18963 -18964 -18965 -18966 -18967 -18968 -18969 -18970 -18971 -18972 -18973 -18974 -18975 -18976 -18977 -18978 -18979 -18980 -18981 -18982 -18983 -18984 -18985 -18986 -18987 -18988 -18989 -18990 -18991 -18992 -18993 -18994 -18995 -18996 -18997 -18998 -18999 -19000 -19001 -19002 -19003 -19004 -19005 -19006 -19007 -19008 -19009 -19010 -19011 -19012 -19013 -19014 -19015 -19016 -19017 -19018 -19019 -19020 -19021 -19022 -19023 -19024 -19025 -19026 -19027 -19028 -19029 -19030 -19031 -19032 -19033 -19034 -19035 -19036 -19037 -19038 -19039 -19040 -19041 -19042 -19043 -19044 -19045 -19046 -19047 -19048 -19049 -19050 -19051 -19052 -19053 -19054 -19055 -19056 -19057 -19058 -19059 -19060 -19061 -19062 -19063 -19064 -19065 -19066 -19067 -19068 -19069 -19070 -19071 -19072 -19073 -19074 -19075 -19076 -19077 -19078 -19079 -19080 -19081 -19082 -19083 -19084 -19085 -19086 -19087 -19088 -19089 -19090 -19091 -19092 -19093 -19094 -19095 -19096 -19097 -19098 -19099 -19100 -19101 -19102 -19103 -19104 -19105 -19106 -19107 -19108 -19109 -19110 -19111 -19112 -19113 -19114 -19115 -19116 -19117 -19118 -19119 -19120 -19121 -19122 -19123 -19124 -19125 -19126 -19127 -19128 -19129 -19130 -19131 -19132 -19133 -19134 -19135 -19136 -19137 -19138 -19139 -19140 -19141 -19142 -19143 -19144 -19145 -19146 -19147 -19148 -19149 -19150 -19151 -19152 -19153 -19154 -19155 -19156 -19157 -19158 -19159 -19160 -19161 -19162 -19163 -19164 -19165 -19166 -19167 -19168 -19169 -19170 -19171 -19172 -19173 -19174 -19175 -19176 -19177 -19178 -19179 -19180 -19181 -19182 -19183 -19184 -19185 -19186 -19187 -19188 -19189 -19190 -19191 -19192 -19193 -19194 -19195 -19196 -19197 -19198 -19199 -19200 -19201 -19202 -19203 -19204 -19205 -19206 -19207 -19208 -19209 -19210 -19211 -19212 -19213 -19214 -19215 -19216 -19217 -19218 -19219 -19220 -19221 -19222 -19223 -19224 -19225 -19226 -19227 -19228 -19229 -19230 -19231 -19232 -19233 -19234 -19235 -19236 -19237 -19238 -19239 -19240 -19241 -19242 -19243 -19244 -19245 -19246 -19247 -19248 -19249 -19250 -19251 -19252 -19253 -19254 -19255 -19256 -19257 -19258 -19259 -19260 -19261 -19262 -19263 -19264 -19265 -19266 -19267 -19268 -19269 -19270 -19271 -19272 -19273 -19274 -19275 -19276 -19277 -19278 -19279 -19280 -19281 -19282 -19283 -19284 -19285 -19286 -19287 -19288 -19289 -19290 -19291 -19292 -19293 -19294 -19295 -19296 -19297 -19298 -19299 -19300 -19301 -19302 -19303 -19304 -19305 -19306 -19307 -19308 -19309 -19310 -19311 -19312 -19313 -19314 -19315 -19316 -19317 -19318 -19319 -19320 -19321 -19322 -19323 -19324 -19325 -19326 -19327 -19328 -19329 -19330 -19331 -19332 -19333 -19334 -19335 -19336 -19337 -19338 -19339 -19340 -19341 -19342 -19343 -19344 -19345 -19346 -19347 -19348 -19349 -19350 -19351 -19352 -19353 -19354 -19355 -19356 -19357 -19358 -19359 -19360 -19361 -19362 -19363 -19364 -19365 -19366 -19367 -19368 -19369 -19370 -19371 -19372 -19373 -19374 -19375 -19376 -19377 -19378 -19379 -19380 -19381 -19382 -19383 -19384 -19385 -19386 -19387 -19388 -19389 -19390 -19391 -19392 -19393 -19394 -19395 -19396 -19397 -19398 -19399 -19400 -19401 -19402 -19403 -19404 -19405 -19406 -19407 -19408 -19409 -19410 -19411 -19412 -19413 -19414 -19415 -19416 -19417 -19418 -19419 -19420 -19421 -19422 -19423 -19424 -19425 -19426 -19427 -19428 -19429 -19430 -19431 -19432 -19433 -19434 -19435 -19436 -19437 -19438 -19439 -19440 -19441 -19442 -19443 -19444 -19445 -19446 -19447 -19448 -19449 -19450 -19451 -19452 -19453 -19454 -19455 -19456 -19457 -19458 -19459 -19460 -19461 -19462 -19463 -19464 -19465 -19466 -19467 -19468 -19469 -19470 -19471 -19472 -19473 -19474 -19475 -19476 -19477 -19478 -19479 -19480 -19481 -19482 -19483 -19484 -19485 -19486 -19487 -19488 -19489 -19490 -19491 -19492 -19493 -19494 -19495 -19496 -19497 -19498 -19499 -19500 -19501 -19502 -19503 -19504 -19505 -19506 -19507 -19508 -19509 -19510 -19511 -19512 -19513 -19514 -19515 -19516 -19517 -19518 -19519 -19520 -19521 -19522 -19523 -19524 -19525 -19526 -19527 -19528 -19529 -19530 -19531 -19532 -19533 -19534 -19535 -19536 -19537 -19538 -19539 -19540 -19541 -19542 -19543 -19544 -19545 -19546 -19547 -19548 -19549 -19550 -19551 -19552 -19553 -19554 -19555 -19556 -19557 -19558 -19559 -19560 -19561 -19562 -19563 -19564 -19565 -19566 -19567 -19568 -19569 -19570 -19571 -19572 -19573 -19574 -19575 -19576 -19577 -19578 -19579 -19580 -19581 -19582 -19583 -19584 -19585 -19586 -19587 -19588 -19589 -19590 -19591 -19592 -19593 -19594 -19595 -19596 -19597 -19598 -19599 -19600 -19601 -19602 -19603 -19604 -19605 -19606 -19607 -19608 -19609 -19610 -19611 -19612 -19613 -19614 -19615 -19616 -19617 -19618 -19619 -19620 -19621 -19622 -19623 -19624 -19625 -19626 -19627 -19628 -19629 -19630 -19631 -19632 -19633 -19634 -19635 -19636 -19637 -19638 -19639 -19640 -19641 -19642 -19643 -19644 -19645 -19646 -19647 -19648 -19649 -19650 -19651 -19652 -19653 -19654 -19655 -19656 -19657 -19658 -19659 -19660 -19661 -19662 -19663 -19664 -19665 -19666 -19667 -19668 -19669 -19670 -19671 -19672 -19673 -19674 -19675 -19676 -19677 -19678 -19679 -19680 -19681 -19682 -19683 -19684 -19685 -19686 -19687 -19688 -19689 -19690 -19691 -19692 -19693 -19694 -19695 -19696 -19697 -19698 -19699 -19700 -19701 -19702 -19703 -19704 -19705 -19706 -19707 -19708 -19709 -19710 -19711 -19712 -19713 -19714 -19715 -19716 -19717 -19718 -19719 -19720 -19721 -19722 -19723 -19724 -19725 -19726 -19727 -19728 -19729 -19730 -19731 -19732 -19733 -19734 -19735 -19736 -19737 -19738 -19739 -19740 -19741 -19742 -19743 -19744 -19745 -19746 -19747 -19748 -19749 -19750 -19751 -19752 -19753 -19754 -19755 -19756 -19757 -19758 -19759 -19760 -19761 -19762 -19763 -19764 -19765 -19766 -19767 -19768 -19769 -19770 -19771 -19772 -19773 -19774 -19775 -19776 -19777 -19778 -19779 -19780 -19781 -19782 -19783 -19784 -19785 -19786 -19787 -19788 -19789 -19790 -19791 -19792 -19793 -19794 -19795 -19796 -19797 -19798 -19799 -19800 -19801 -19802 -19803 -19804 -19805 -19806 -19807 -19808 -19809 -19810 -19811 -19812 -19813 -19814 -19815 -19816 -19817 -19818 -19819 -19820 -19821 -19822 -19823 -19824 -19825 -19826 -19827 -19828 -19829 -19830 -19831 -19832 -19833 -19834 -19835 -19836 -19837 -19838 -19839 -19840 -19841 -19842 -19843 -19844 -19845 -19846 -19847 -19848 -19849 -19850 -19851 -19852 -19853 -19854 -19855 -19856 -19857 -19858 -19859 -19860 -19861 -19862 -19863 -19864 -19865 -19866 -19867 -19868 -19869 -19870 -19871 -19872 -19873 -19874 -19875 -19876 -19877 -19878 -19879 -19880 -19881 -19882 -19883 -19884 -19885 -19886 -19887 -19888 -19889 -19890 -19891 -19892 -19893 -19894 -19895 -19896 -19897 -19898 -19899 -19900 -19901 -19902 -19903 -19904 -19905 -19906 -19907 -19908 -19909 -19910 -19911 -19912 -19913 -19914 -19915 -19916 -19917 -19918 -19919 -19920 -19921 -19922 -19923 -19924 -19925 -19926 -19927 -19928 -19929 -19930 -19931 -19932 -19933 -19934 -19935 -19936 -19937 -19938 -19939 -19940 -19941 -19942 -19943 -19944 -19945 -19946 -19947 -19948 -19949 -19950 -19951 -19952 -19953 -19954 -19955 -19956 -19957 -19958 -19959 -19960 -19961 -19962 -19963 -19964 -19965 -19966 -19967 -19968 -19969 -19970 -19971 -19972 -19973 -19974 -19975 -19976 -19977 -19978 -19979 -19980 -19981 -19982 -19983 -19984 -19985 -19986 -19987 -19988 -19989 -19990 -19991 -19992 -19993 -19994 -19995 -19996 -19997 -19998 -19999 -20000 -20001 -20002 -20003 -20004 -20005 -20006 -20007 -20008 -20009 -20010 -20011 -20012 -20013 -20014 -20015 -20016 -20017 -20018 -20019 -20020 -20021 -20022 -20023 -20024 -20025 -20026 -20027 -20028 -20029 -20030 -20031 -20032 -20033 -20034 -20035 -20036 -20037 -20038 -20039 -20040 -20041 -20042 -20043 -20044 -20045 -20046 -20047 -20048 -20049 -20050 -20051 -20052 -20053 -20054 -20055 -20056 -20057 -20058 -20059 -20060 -20061 -20062 -20063 -20064 -20065 -20066 -20067 -20068 -20069 -20070 -20071 -20072 -20073 -20074 -20075 -20076 -20077 -20078 -20079 -20080 -20081 -20082 -20083 -20084 -20085 -20086 -20087 -20088 -20089 -20090 -20091 -20092 -20093 -20094 -20095 -20096 -20097 -20098 -20099 -20100 -20101 -20102 -20103 -20104 -20105 -20106 -20107 -20108 -20109 -20110 -20111 -20112 -20113 -20114 -20115 -20116 -20117 -20118 -20119 -20120 -20121 -20122 -20123 -20124 -20125 -20126 -20127 -20128 -20129 -20130 -20131 -20132 -20133 -20134 -20135 -20136 -20137 -20138 -20139 -20140 -20141 -20142 -20143 -20144 -20145 -20146 -20147 -20148 -20149 -20150 -20151 -20152 -20153 -20154 -20155 -20156 -20157 -20158 -20159 -20160 -20161 -20162 -20163 -20164 -20165 -20166 -20167 -20168 -20169 -20170 -20171 -20172 -20173 -20174 -20175 -20176 -20177 -20178 -20179 -20180 -20181 -20182 -20183 -20184 -20185 -20186 -20187 -20188 -20189 -20190 -20191 -20192 -20193 -20194 -20195 -20196 -20197 -20198 -20199 -20200 -20201 -20202 -20203 -20204 -20205 -20206 -20207 -20208 -20209 -20210 -20211 -20212 -20213 -20214 -20215 -20216 -20217 -20218 -20219 -20220 -20221 -20222 -20223 -20224 -20225 -20226 -20227 -20228 -20229 -20230 -20231 -20232 -20233 -20234 -20235 -20236 -20237 -20238 -20239 -20240 -20241 -20242 -20243 -20244 -20245 -20246 -20247 -20248 -20249 -20250 -20251 -20252 -20253 -20254 -20255 -20256 -20257 -20258 -20259 -20260 -20261 -20262 -20263 -20264 -20265 -20266 -20267 -20268 -20269 -20270 -20271 -20272 -20273 -20274 -20275 -20276 -20277 -20278 -20279 -20280 -20281 -20282 -20283 -20284 -20285 -20286 -20287 -20288 -20289 -20290 -20291 -20292 -20293 -20294 -20295 -20296 -20297 -20298 -20299 -20300 -20301 -20302 -20303 -20304 -20305 -20306 -20307 -20308 -20309 -20310 -20311 -20312 -20313 -20314 -20315 -20316 -20317 -20318 -20319 -20320 -20321 -20322 -20323 -20324 -20325 -20326 -20327 -20328 -20329 -20330 -20331 -20332 -20333 -20334 -20335 -20336 -20337 -20338 -20339 -20340 -20341 -20342 -20343 -20344 -20345 -20346 -20347 -20348 -20349 -20350 -20351 -20352 -20353 -20354 -20355 -20356 -20357 -20358 -20359 -20360 -20361 -20362 -20363 -20364 -20365 -20366 -20367 -20368 -20369 -20370 -20371 -20372 -20373 -20374 -20375 -20376 -20377 -20378 -20379 -20380 -20381 -20382 -20383 -20384 -20385 -20386 -20387 -20388 -20389 -20390 -20391 -20392 -20393 -20394 -20395 -20396 -20397 -20398 -20399 -20400 -20401 -20402 -20403 -20404 -20405 -20406 -20407 -20408 -20409 -20410 -20411 -20412 -20413 -20414 -20415 -20416 -20417 -20418 -20419 -20420 -20421 -20422 -20423 -20424 -20425 -20426 -20427 -20428 -20429 -20430 -20431 -20432 -20433 -20434 -20435 -20436 -20437 -20438 -20439 -20440 -20441 -20442 -20443 -20444 -20445 -20446 -20447 -20448 -20449 -20450 -20451 -20452 -20453 -20454 -20455 -20456 -20457 -20458 -20459 -20460 -20461 -20462 -20463 -20464 -20465 -20466 -20467 -20468 -20469 -20470 -20471 -20472 -20473 -20474 -20475 -20476 -20477 -20478 -20479 -20480 -20481 -20482 -20483 -20484 -20485 -20486 -20487 -20488 -20489 -20490 -20491 -20492 -20493 -20494 -20495 -20496 -20497 -20498 -20499 -20500 -20501 -20502 -20503 -20504 -20505 -20506 -20507 -20508 -20509 -20510 -20511 -20512 -20513 -20514 -20515 -20516 -20517 -20518 -20519 -20520 -20521 -20522 -20523 -20524 -20525 -20526 -20527 -20528 -20529 -20530 -20531 -20532 -20533 -20534 -20535 -20536 -20537 -20538 -20539 -20540 -20541 -20542 -20543 -20544 -20545 -20546 -20547 -20548 -20549 -20550 -20551 -20552 -20553 -20554 -20555 -20556 -20557 -20558 -20559 -20560 -20561 -20562 -20563 -20564 -20565 -20566 -20567 -20568 -20569 -20570 -20571 -20572 -20573 -20574 -20575 -20576 -20577 -20578 -20579 -20580 -20581 -20582 -20583 -20584 -20585 -20586 -20587 -20588 -20589 -20590 -20591 -20592 -20593 -20594 -20595 -20596 -20597 -20598 -20599 -20600 -20601 -20602 -) - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes b/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes index 2a273c5e51cb5bcdaf8b079c33459db6568e75a2..153a1ea73a20a1f11684eee3085622aa9375be87 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes +++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes @@ -56,9 +56,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - alpha1 ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSolution b/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSolution index 660482ad377d9745a5a8fd4b6fc67486640c3726..4642da139683a71541d7b045c40507ee0b02627f 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSolution +++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-07; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner diff --git a/tutorials/multiphase/interFoam/ras/Allclean b/tutorials/multiphase/interFoam/ras/Allclean index 62275784712aebe76b90f3356879dce098912e1e..6ad97e1a0bd7ffd8f0073bb9a1f9f9d3391d7c6b 100755 --- a/tutorials/multiphase/interFoam/ras/Allclean +++ b/tutorials/multiphase/interFoam/ras/Allclean @@ -12,7 +12,7 @@ do if [ "$case" = "damBreak" ] then - cp $case/0/gamma.org $case/0/gamma + cp $case/0/alpha1.org $case/0/alpha1 fi done diff --git a/tutorials/multiphase/interFoam/ras/Allrun b/tutorials/multiphase/interFoam/ras/Allrun index c01b35fcbd4aa6d8576f8c96ef86fd924006b8dc..e222cf7e15d05f8a2f8d11bb3e86ba15491bffd2 100755 --- a/tutorials/multiphase/interFoam/ras/Allrun +++ b/tutorials/multiphase/interFoam/ras/Allrun @@ -32,7 +32,7 @@ cloneCase damBreak damBreakFine cd damBreakFine # Modify case setDamBreakFine - cp ../damBreak/0/gamma.org 0/gamma + cp ../damBreak/0/alpha1.org 0/alpha1 # And execute runApplication blockMesh runApplication setFields diff --git a/tutorials/multiphase/interFoam/ras/damBreak/0/U b/tutorials/multiphase/interFoam/ras/damBreak/0/U index d4cc4c65a67476de08b56cbb2efd682e88a46db6..7ea3a0c32328d93fd01ba3c580c7d73b54473d22 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/0/U +++ b/tutorials/multiphase/interFoam/ras/damBreak/0/U @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,6 +10,7 @@ FoamFile version 2.0; format ascii; class volVectorField; + location "0"; object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -38,7 +39,6 @@ boundaryField atmosphere { type pressureInletOutletVelocity; - phi phi; value uniform (0 0 0); } defaultFaces @@ -47,4 +47,5 @@ boundaryField } } + // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/0/gamma.org b/tutorials/multiphase/interFoam/ras/damBreak/0/alpha1 similarity index 98% rename from tutorials/multiphase/interFoam/ras/damBreak/0/gamma.org rename to tutorials/multiphase/interFoam/ras/damBreak/0/alpha1 index 742f2974431e8ab23664341603ef199480f49c68..36d4d31dcdd7caa199ad6f5be76cff952156cb96 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/0/gamma.org +++ b/tutorials/multiphase/interFoam/ras/damBreak/0/alpha1 @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object gamma; + object alpha1; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/0/gamma b/tutorials/multiphase/interFoam/ras/damBreak/0/alpha1.org similarity index 98% rename from tutorials/multiphase/interFoam/ras/damBreak/0/gamma rename to tutorials/multiphase/interFoam/ras/damBreak/0/alpha1.org index 742f2974431e8ab23664341603ef199480f49c68..36d4d31dcdd7caa199ad6f5be76cff952156cb96 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/0/gamma +++ b/tutorials/multiphase/interFoam/ras/damBreak/0/alpha1.org @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object gamma; + object alpha1; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/0/epsilon b/tutorials/multiphase/interFoam/ras/damBreak/0/epsilon index 92ed8a7d75e228fe370ae2c54f67161b484f4973..b49a80428493c25ee922fb2501e11cd749b3ddf7 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/0/epsilon +++ b/tutorials/multiphase/interFoam/ras/damBreak/0/epsilon @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 0 2 -3 0 0 0 0 ]; +dimensions [0 2 -3 0 0 0 0]; internalField uniform 0.1; @@ -24,28 +24,24 @@ boundaryField leftWall { type epsilonWallFunction; - value uniform 0; + value uniform 0.1; } - rightWall { type epsilonWallFunction; - value uniform 0; + value uniform 0.1; } - lowerWall { type epsilonWallFunction; - value uniform 0; + value uniform 0.1; } - atmosphere { type inletOutlet; inletValue uniform 0.1; value uniform 0.1; } - defaultFaces { type empty; diff --git a/tutorials/multiphase/interFoam/ras/damBreak/0/k b/tutorials/multiphase/interFoam/ras/damBreak/0/k index c8071de03ba06ce1292fe0b5ebb3e018c88efc6d..897224d725f3bd8e0f02800a735dae854a9b03e9 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/0/k +++ b/tutorials/multiphase/interFoam/ras/damBreak/0/k @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 0 2 -2 0 0 0 0 ]; +dimensions [0 2 -2 0 0 0 0]; internalField uniform 0.1; @@ -24,28 +24,24 @@ boundaryField leftWall { type kQRWallFunction; - value uniform 0; + value uniform 0.1; } - rightWall { type kQRWallFunction; - value uniform 0; + value uniform 0.1; } - lowerWall { type kQRWallFunction; - value uniform 0; + value uniform 0.1; } - atmosphere { type inletOutlet; inletValue uniform 0.1; value uniform 0.1; } - defaultFaces { type empty; diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/0/pd b/tutorials/multiphase/interFoam/ras/damBreak/0/p similarity index 98% rename from tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/0/pd rename to tutorials/multiphase/interFoam/ras/damBreak/0/p index 520a3e9b0b291a7913c871b614d8fe9845e8ab08..15ab9897a899264f52a2cfb792b0fc6c39324dc4 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/0/pd +++ b/tutorials/multiphase/interFoam/ras/damBreak/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes b/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes index 499ad01e5c625d5e9cb16c5f3693f73f17a84206..81f8e2c48bd5283e46a085104826d809ae7169be 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes @@ -28,8 +28,8 @@ gradSchemes divSchemes { div(rho*phi,U) Gauss linear; - div(phi,gamma) Gauss vanLeer; - div(phirb,gamma) Gauss interfaceCompression; + div(phi,alpha) Gauss vanLeer; + div(phirb,alpha) Gauss interfaceCompression; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; @@ -57,9 +57,9 @@ snGradSchemes fluxRequired { default no; - pd ; - pcorr ; - gamma ; + p; + pcorr; + alpha; } diff --git a/tutorials/multiphase/interFoam/ras/damBreak/system/fvSolution b/tutorials/multiphase/interFoam/ras/damBreak/system/fvSolution index ea7bd97c27c3f83f3dd9ab1b2c0da77625af3bd2..6af3dad37e44b40c8d5a8f4d48d2b5f1207423ec 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/system/fvSolution +++ b/tutorials/multiphase/interFoam/ras/damBreak/system/fvSolution @@ -25,7 +25,7 @@ solvers relTol 0; } - pd + p { solver PCG; preconditioner DIC; @@ -33,7 +33,7 @@ solvers relTol 0.05; } - pdFinal + pFinal { solver PCG; preconditioner DIC; @@ -87,9 +87,9 @@ PISO momentumPredictor no; nCorrectors 3; nNonOrthogonalCorrectors 0; - nGammaCorr 1; - nGammaSubCycles 4; - cGamma 2; + nAlphaCorr 1; + nAlphaSubCycles 4; + cAlpha 2; } diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/0/pd b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/0/p similarity index 98% rename from tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/0/pd rename to tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/0/p index 520a3e9b0b291a7913c871b614d8fe9845e8ab08..15ab9897a899264f52a2cfb792b0fc6c39324dc4 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/0/pd +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSolution b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSolution index 8c303f95402ad22e64766b3e454753746a7c68cf..47957b22b37e777ec21a079ffcb3b6dc1399d7a0 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSolution +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-07; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/0/pd b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/0/p similarity index 98% rename from tutorials/multiphase/interFoam/laminar/damBreak/0/pd rename to tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/0/p index 520a3e9b0b291a7913c871b614d8fe9845e8ab08..15ab9897a899264f52a2cfb792b0fc6c39324dc4 100644 --- a/tutorials/multiphase/interFoam/laminar/damBreak/0/pd +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/0/p @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object pd; + object p; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSolution b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSolution index 8c303f95402ad22e64766b3e454753746a7c68cf..47957b22b37e777ec21a079ffcb3b6dc1399d7a0 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSolution +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSolution @@ -40,7 +40,7 @@ solvers maxIter 100; } - pd + p { solver GAMG; tolerance 1e-07; @@ -55,7 +55,7 @@ solvers mergeLevels 1; } - pdFinal + pFinal { solver PCG; preconditioner diff --git a/wmake/rules/General/cint b/wmake/rules/General/cint deleted file mode 100644 index f09d622977cbfe33bf69eaeb2cb118442fbc92d2..0000000000000000000000000000000000000000 --- a/wmake/rules/General/cint +++ /dev/null @@ -1,12 +0,0 @@ -.SUFFIXES: .ldf - -ifeq ($(origin WM_SCHEDULER), undefined) - EVAL_LDF = eval -else - EVAL_LDF = $(WM_SCHEDULER) -endif - -ldftoo = $(EVAL_LDF) m4 $$SOURCE \> $*.H \; cint -n$*.C -N$(*F) -p -c-1 -A -I${CINTSYSDIR}/inc -I${WM_PROJECT_DIR}/src/OpenFOAM/lnInclude -D__MAKECINT__ -DG__MAKECINT -DG__SHAREDLIB -DG__OSFDLL -DG__ANSI -DG__ERRORCALLBACK -DG__SIGNEDCHAR -DG__NEWSTDHEADER -DG__CINT_VER6 -DG__NATIVELONGLONG -DG__P2FCAST -DG__STD_EXCEPTION -DG__HAVE_CONFIG -DG__NOMAKEINFO -DDP -D__restrict__= -Y0 -DNoInline $*.H \; $(CC) $(c++FLAGS) -c $*.C -o $@ - -.ldf.dep: - $(MAKE_DEP) diff --git a/wmake/rules/General/general b/wmake/rules/General/general index 2f2a67cb568190ebce735a24924acc639dbf0505..419d9b1d38244cee1ab5fba753e639089474df7f 100644 --- a/wmake/rules/General/general +++ b/wmake/rules/General/general @@ -3,7 +3,7 @@ ARFLAGS = cr RANLIB = ranlib LD = ld -GFLAGS = -D$(WM_ARCH) -D$(WM_PRECISION_OPTION) -GINC = +GFLAGS = -D$(WM_ARCH) -DWM_$(WM_PRECISION_OPTION) +GINC = GLIBS = -lm -GLIB_LIBS = +GLIB_LIBS = diff --git a/wmake/rules/SiCortex64Gcc/general b/wmake/rules/SiCortex64Gcc/general index 11b48acc3fc0c67c177b464c70de18248881c12d..d70a77cdb037212e12f9b54cd0c80005dcae4ccb 100644 --- a/wmake/rules/SiCortex64Gcc/general +++ b/wmake/rules/SiCortex64Gcc/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/SunOS64Gcc/general b/wmake/rules/SunOS64Gcc/general index 70ee588d82de5943cd89d28acc2703bf3476940b..f9b563219850dada6751ec3cf50b17291f212d0f 100644 --- a/wmake/rules/SunOS64Gcc/general +++ b/wmake/rules/SunOS64Gcc/general @@ -1,11 +1,10 @@ CPP = /lib/cpp $(GFLAGS) LD = ld -64 -PROJECT_LIBS = -l$(WM_PROJECT) -liberty -lnsl -lsocket -L$(FOAM_LIBBIN)/dummy -lPstream +PROJECT_LIBS = -l$(WM_PROJECT) -liberty -lnsl -lsocket -L$(FOAM_LIBBIN)/dummy -lPstream include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linux64Gcc/c++ b/wmake/rules/linux64Gcc/c++ index 36b5c29b20b6297dcc3d42dcc5b46342cd34a116..9d074e2715ef9cacfdc2f29e0a6c06bf13ed2413 100644 --- a/wmake/rules/linux64Gcc/c++ +++ b/wmake/rules/linux64Gcc/c++ @@ -1,6 +1,6 @@ .SUFFIXES: .C .cxx .cc .cpp -c++WARN = -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast +c++WARN = -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor CC = g++ -m64 diff --git a/wmake/rules/linux64Gcc/c++Opt b/wmake/rules/linux64Gcc/c++Opt index 8ac07d2124e4b49b9bda82d3ea0c4380b9c6b8e6..3446f7f58cbeb23e1753e982a9734bbf1a180b43 100644 --- a/wmake/rules/linux64Gcc/c++Opt +++ b/wmake/rules/linux64Gcc/c++Opt @@ -1,4 +1,4 @@ -c++DBUG = +c++DBUG = c++OPT = -O3 #c++OPT = -march=nocona -O3 # -ftree-vectorize -ftree-vectorizer-verbose=3 diff --git a/wmake/rules/linux64Gcc/general b/wmake/rules/linux64Gcc/general index 3c2e4db2ee31ca84bfb6adcd135f9b3651195c0a..10237bd1b67211d2d008b2e9fe5c52248e359ab6 100644 --- a/wmake/rules/linux64Gcc/general +++ b/wmake/rules/linux64Gcc/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linux64Gcc42/general b/wmake/rules/linux64Gcc42/general index 11b48acc3fc0c67c177b464c70de18248881c12d..d70a77cdb037212e12f9b54cd0c80005dcae4ccb 100644 --- a/wmake/rules/linux64Gcc42/general +++ b/wmake/rules/linux64Gcc42/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linux64Gcc43/general b/wmake/rules/linux64Gcc43/general index 3c2e4db2ee31ca84bfb6adcd135f9b3651195c0a..10237bd1b67211d2d008b2e9fe5c52248e359ab6 100644 --- a/wmake/rules/linux64Gcc43/general +++ b/wmake/rules/linux64Gcc43/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linuxGcc/general b/wmake/rules/linuxGcc/general index d009001a6e3a18369eb608cede9eed6bdc600606..02ad6973ff3f0dd9498c091f427642d23c867508 100644 --- a/wmake/rules/linuxGcc/general +++ b/wmake/rules/linuxGcc/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linuxGcc43/general b/wmake/rules/linuxGcc43/general index d009001a6e3a18369eb608cede9eed6bdc600606..02ad6973ff3f0dd9498c091f427642d23c867508 100644 --- a/wmake/rules/linuxGcc43/general +++ b/wmake/rules/linuxGcc43/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linuxPPC64Gcc/general b/wmake/rules/linuxPPC64Gcc/general index 2626ab65d12cbba1680848fdc93cfb2b05f3920b..76d507634a936cc0b01185048dfdd9bbb7da4ec6 100644 --- a/wmake/rules/linuxPPC64Gcc/general +++ b/wmake/rules/linuxPPC64Gcc/general @@ -8,4 +8,3 @@ include $(GENERAL_RULES)/standard include $(RULES)/X include $(RULES)/c include $(RULES)/c++ -include $(GENERAL_RULES)/cint