From 84c23adf23c8168547ec6ad5457512710135be95 Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 6 Jun 2011 17:36:48 +0100 Subject: [PATCH 1/8] ENH: porousExplicitSourceReactingParcelFoam/filter: emissivity as field --- .../porousExplicitSourceReactingParcelFoam/filter/0.org/G | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G index 993b5237c3..3ae5fafc79 100644 --- a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G @@ -26,7 +26,7 @@ boundaryField type MarshakRadiation; T T; emissivityMode lookup; - emissivity 1; + emissivity uniform 1; value uniform 0; refValue uniform 0; refGradient uniform 0; @@ -37,7 +37,7 @@ boundaryField type MarshakRadiation; T T; emissivityMode lookup; - emissivity 1; + emissivity uniform 1; value uniform 0; refValue uniform 0; refGradient uniform 0; From 64c9989d76e69a690778ccd39717cb0a9f011127 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 6 Jun 2011 17:45:06 +0100 Subject: [PATCH 2/8] BUG: mapDistribute on radiation BC and changes on reactingParcelFilPyrolysisFoam --- .../Make/options | 2 +- .../reactingParcelFilmPyrolysisFoam/YhsEqn.H | 3 +- .../reactingParcelFilmPyrolysisFoam.C | 9 ++- ...iffusiveRadiationMixedFvPatchScalarField.C | 7 ++- .../radiationCoupledBase.C | 14 +++-- .../radiationCoupledBase.H | 2 +- ...iffusiveRadiationMixedFvPatchScalarField.C | 6 +- ...eratureRadCoupledMixedFvPatchScalarField.C | 11 ++-- .../constant/polyMesh/boundary | 58 ------------------- 9 files changed, 31 insertions(+), 81 deletions(-) delete mode 100644 tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options index 7782cc45cc..495defbeec 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options +++ b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options @@ -9,7 +9,7 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/combustionModels/lnInclude \ + -I$(LIB_SRC)/combustionModels/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \ diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H index 7606d9ce72..f985a650b9 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H +++ b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H @@ -9,6 +9,7 @@ tmp > mvConvection ) ); { + radiation->correct(); combustion->correct(); dQ = combustion->dQ(); label inertIndex = -1; @@ -65,7 +66,7 @@ tmp > mvConvection thermo.correct(); - radiation->correct(); + //radiation->correct(); Info<< "min/max(T) = " << min(T).value() << ", " << max(T).value() << endl; } diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C index ac029bea86..178ceadcd6 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C @@ -30,6 +30,7 @@ Description \*---------------------------------------------------------------------------*/ +#include "mapDistribute.H" #include "fvCFD.H" #include "turbulenceModel.H" #include "basicReactingCloud.H" @@ -54,9 +55,9 @@ int main(int argc, char *argv[]) #include "readGravitationalAcceleration.H" #include "createFields.H" #include "createClouds.H" - #include "createRadiationModel.H" #include "createSurfaceFilmModel.H" #include "createPyrolysisModel.H" + #include "createRadiationModel.H" #include "initContinuityErrs.H" #include "readTimeControls.H" #include "compressibleCourantNo.H" @@ -111,10 +112,8 @@ int main(int argc, char *argv[]) rho = thermo.rho(); } - else - { - runTime.write(); - } + + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C index e231144b92..90727e381b 100644 --- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C +++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C @@ -189,6 +189,8 @@ updateCoeffs() ray.Qr().boundaryField()[patchI] += Iw*(n & ray.dAve()); + scalarList temissivity = emissivity(); + forAll(Iw, faceI) { scalar Ir = 0.0; @@ -217,8 +219,8 @@ updateCoeffs() valueFraction()[faceI] = 1.0; refValue()[faceI] = ( - Ir*(scalar(1.0) - emissivity()()[faceI]) - + emissivity()()[faceI]*physicoChemical::sigma.value() + Ir*(scalar(1.0) - temissivity[faceI]) + + temissivity[faceI]*physicoChemical::sigma.value() * pow4(Tp[faceI]) )/pi; @@ -238,7 +240,6 @@ updateCoeffs() Iw[faceI]*(n[faceI] & ray.dAve()); } } - mixedFvPatchScalarField::updateCoeffs(); } diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C index f8d034ca34..580342d92a 100644 --- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C +++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C @@ -127,7 +127,7 @@ Foam::radiationCoupledBase::radiationCoupledBase // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::tmp Foam::radiationCoupledBase::emissivity() const +Foam::scalarField Foam::radiationCoupledBase::emissivity() const { switch (method_) { @@ -142,6 +142,9 @@ Foam::tmp Foam::radiationCoupledBase::emissivity() const const polyMesh& nbrMesh = mpp.sampleMesh(); + // Force recalculation of mapping and schedule + const mapDistribute& distMap = mpp.map(); + const fvPatch& nbrPatch = refCast ( nbrMesh @@ -160,12 +163,11 @@ Foam::tmp Foam::radiationCoupledBase::emissivity() const ) ); - scalarField& emissivity = temissivity(); - + scalarField emissivity(temissivity); // Use direct map mapping to exchange data - mpp.map().distribute(emissivity); - - return temissivity; + distMap.distribute(emissivity); + //Pout << emissivity << endl; + return emissivity; } else { diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H index 405d0f75a5..0b9fe86c74 100644 --- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H +++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H @@ -114,7 +114,7 @@ public: //- Calculate corresponding emissivity field - tmp emissivity() const; + scalarField emissivity() const; //- Write void write(Ostream&) const; diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C index 45ab196b5c..c985ea5e3a 100644 --- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C +++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C @@ -189,6 +189,8 @@ updateCoeffs() dom.blackBody().bLambda(lambdaId).boundaryField()[patchI] ); + scalarList temissivity = emissivity(); + forAll(Iw, faceI) { scalar Ir = 0.0; @@ -215,8 +217,8 @@ updateCoeffs() valueFraction()[faceI] = 1.0; refValue()[faceI] = ( - Ir*(1.0 - emissivity()()[faceI]) - + emissivity()()[faceI]*Eb[faceI] + Ir*(1.0 - temissivity[faceI]) + + temissivity[faceI]*Eb[faceI] )/pi; } else diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C index 262b9da61f..b5f81301b5 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C +++ b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C @@ -158,6 +158,9 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs() const fvPatch& nbrPatch = refCast(nbrMesh).boundary()[samplePatchI]; + // Force recalculation of mapping and schedule + const mapDistribute& distMap = mpp.map(); + scalarField Tc(patchInternalField()); scalarField& Tp = *this; @@ -170,13 +173,13 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs() // Swap to obtain full local values of neighbour internal field scalarField TcNbr(nbrField.patchInternalField()); + distMap.distribute(TcNbr); - mpp.map().distribute(TcNbr); // Swap to obtain full local values of neighbour K*delta - scalarField KDeltaNbr(nbrField.K(TcNbr)*nbrPatch.deltaCoeffs()); + scalarField KDeltaNbr(nbrField.K(nbrField)*nbrPatch.deltaCoeffs()); + distMap.distribute(KDeltaNbr); - mpp.map().distribute(KDeltaNbr); scalarField KDelta(K(*this)*patch().deltaCoeffs()); @@ -190,7 +193,7 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs() if (QrNbrName_ != "none") { QrNbr = nbrPatch.lookupPatchField(QrNbrName_); - mpp.map().distribute(QrNbr); + distMap.distribute(QrNbr); } scalarField alpha(KDeltaNbr - (Qr + QrNbr)/Tp); diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary deleted file mode 100644 index 39c75e0d21..0000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary +++ /dev/null @@ -1,58 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class polyBoundaryMesh; - location "constant/polyMesh"; - object boundary; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -6 -( - maxY - { - type wall; - nFaces 300; - startFace 8300; - } - minX - { - type patch; - nFaces 100; - startFace 8600; - } - maxX - { - type patch; - nFaces 100; - startFace 8700; - } - minY - { - type wall; - nFaces 300; - startFace 8800; - } - minZ - { - type wall; - nFaces 300; - startFace 9100; - } - maxZ - { - type wall; - nFaces 300; - startFace 9400; - } -) - -// ************************************************************************* // From 0f20e65f6f09091add267a0d1485be3dbb281999 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 6 Jun 2011 17:55:27 +0100 Subject: [PATCH 3/8] STY: change from reactingParcelsFilPyrosysisFoam to fireFoam --- .../solvers/combustion/fireFoam/Allwclean | 8 - .../solvers/combustion/fireFoam/Allwmake | 8 - .../solvers/combustion/fireFoam/Make/files | 1 - .../solvers/combustion/fireFoam/Make/options | 56 +++- .../solvers/combustion/fireFoam/UEqn.H | 46 +-- .../fireFoam}/YhsEqn.H | 0 .../fireFoam/combustionModels/Make/files | 9 - .../fireFoam/combustionModels/Make/options | 9 - .../combustionModel/combustionModel.C | 108 ------- .../combustionModel/combustionModel.H | 209 ------------- .../combustionModel/newCombustionModel.C | 66 ----- .../infinitelyFastChemistry.C | 93 ------ .../infinitelyFastChemistry.H | 118 -------- .../noCombustion/noCombustion.C | 102 ------- .../noCombustion/noCombustion.H | 112 ------- .../fireFoam}/createClouds.H | 0 .../combustion/fireFoam/createFields.H | 275 +++++++++--------- .../fireFoam}/createPyrolysisModel.H | 0 .../fireFoam}/createSurfaceFilmModel.H | 1 - .../solvers/combustion/fireFoam/fireFoam.C | 73 +++-- .../solvers/combustion/fireFoam/ftEqn.H | 25 -- .../solvers/combustion/fireFoam/fuhsEqn.H | 47 --- .../solvers/combustion/fireFoam/pEqn.H | 10 +- .../fireFoam}/readChemistryProperties.H | 0 .../fireFoam}/readPyrolysisTimeControls.H | 0 .../fireFoam}/rhoEqn.H | 0 .../fireFoam}/setMultiRegionDeltaT.H | 0 .../fireFoam}/solidRegionDiffusionNo.H | 1 - .../Make/files | 3 - .../Make/options | 52 ---- .../reactingParcelFilmPyrolysisFoam/UEqn.H | 26 -- .../createFields.H | 154 ---------- .../reactingParcelFilmPyrolysisFoam/pEqn.H | 50 ---- .../reactingParcelFilmPyrolysisFoam.C | 129 -------- 34 files changed, 263 insertions(+), 1528 deletions(-) delete mode 100755 applications/solvers/combustion/fireFoam/Allwclean delete mode 100755 applications/solvers/combustion/fireFoam/Allwmake rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/YhsEqn.H (100%) delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/Make/files delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/Make/options delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C delete mode 100644 applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/createClouds.H (100%) rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/createPyrolysisModel.H (100%) rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/createSurfaceFilmModel.H (99%) delete mode 100644 applications/solvers/combustion/fireFoam/ftEqn.H delete mode 100644 applications/solvers/combustion/fireFoam/fuhsEqn.H rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/readChemistryProperties.H (100%) rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/readPyrolysisTimeControls.H (100%) rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/rhoEqn.H (100%) rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/setMultiRegionDeltaT.H (100%) rename applications/solvers/{lagrangian/reactingParcelFilmPyrolysisFoam => combustion/fireFoam}/solidRegionDiffusionNo.H (97%) delete mode 100644 applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files delete mode 100644 applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options delete mode 100644 applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H delete mode 100644 applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H delete mode 100644 applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H delete mode 100644 applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C diff --git a/applications/solvers/combustion/fireFoam/Allwclean b/applications/solvers/combustion/fireFoam/Allwclean deleted file mode 100755 index 713a055201..0000000000 --- a/applications/solvers/combustion/fireFoam/Allwclean +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # run from this directory -set -x - -wclean libso combustionModels -wclean - -# ----------------------------------------------------------------- end-of-file diff --git a/applications/solvers/combustion/fireFoam/Allwmake b/applications/solvers/combustion/fireFoam/Allwmake deleted file mode 100755 index f32c72860d..0000000000 --- a/applications/solvers/combustion/fireFoam/Allwmake +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # run from this directory -set -x - -wmake libso combustionModels -wmake - -# ----------------------------------------------------------------- end-of-file diff --git a/applications/solvers/combustion/fireFoam/Make/files b/applications/solvers/combustion/fireFoam/Make/files index 826d736bd0..2d50e5e765 100644 --- a/applications/solvers/combustion/fireFoam/Make/files +++ b/applications/solvers/combustion/fireFoam/Make/files @@ -1,4 +1,3 @@ fireFoam.C EXE = $(FOAM_APPBIN)/fireFoam - diff --git a/applications/solvers/combustion/fireFoam/Make/options b/applications/solvers/combustion/fireFoam/Make/options index 9f7a66b39e..cf5b4b0976 100644 --- a/applications/solvers/combustion/fireFoam/Make/options +++ b/applications/solvers/combustion/fireFoam/Make/options @@ -1,20 +1,52 @@ EXE_INC = \ - -IcombustionModels/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I${LIB_SRC}/meshTools/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ - -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude + -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solid/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \ + -I$(LIB_SRC)/combustionModels/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \ + -I$(LIB_SRC)/combustionModels/lnInclude \ + -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ + -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ + -I$(LIB_SRC)/regionModels/pyrolysisModels/lnInclude \ + -I$(LIB_SRC)/lagrangian/basic/lnInclude \ + -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ + -I$(LIB_SRC)/ODE/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude EXE_LIBS = \ - -lfireFoamCombustionModels \ - -lspecie \ - -lreactionThermophysicalModels \ - -lbasicThermophysicalModels \ -lfiniteVolume \ - -lcompressibleTurbulenceModel \ - -lcompressibleLESModels \ + -lmeshTools \ -lcompressibleRASModels \ - -lradiationModels + -lcompressibleLESModels \ + -lspecie \ + -lbasicThermophysicalModels \ + -lsolidProperties \ + -lsolidMixtureProperties \ + -lthermophysicalFunctions \ + -lreactionThermophysicalModels \ + -lSLGThermo \ + -lchemistryModel \ + -lsolidChemistryModel \ + -lcombustionModels \ + -lregionModels \ + -lradiationModels \ + -lsurfaceFilmModels \ + -lpyrolysisModels \ + -llagrangianIntermediate \ + -lODE \ + -lsampling diff --git a/applications/solvers/combustion/fireFoam/UEqn.H b/applications/solvers/combustion/fireFoam/UEqn.H index c4a865300d..a64e50a2d2 100644 --- a/applications/solvers/combustion/fireFoam/UEqn.H +++ b/applications/solvers/combustion/fireFoam/UEqn.H @@ -1,24 +1,26 @@ -fvVectorMatrix UEqn -( - fvm::ddt(rho, U) - + fvm::div(phi, U) - + turbulence->divDevRhoReff(U) -); - -UEqn.relax(); - -if (pimple.momentumPredictor()) -{ - solve + fvVectorMatrix UEqn ( - UEqn - == - fvc::reconstruct - ( - ( - - ghf*fvc::snGrad(rho) - - fvc::snGrad(p_rgh) - )*mesh.magSf() - ) + fvm::ddt(rho, U) + + fvm::div(phi, U) + + turbulence->divDevRhoReff(U) + == + parcels.SU(U) ); -} + + UEqn.relax(); + + if (pimple.momentumPredictor()) + { + solve + ( + UEqn + == + fvc::reconstruct + ( + ( + - ghf*fvc::snGrad(rho) + - fvc::snGrad(p_rgh) + )*mesh.magSf() + ) + ); + } diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H b/applications/solvers/combustion/fireFoam/YhsEqn.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H rename to applications/solvers/combustion/fireFoam/YhsEqn.H diff --git a/applications/solvers/combustion/fireFoam/combustionModels/Make/files b/applications/solvers/combustion/fireFoam/combustionModels/Make/files deleted file mode 100644 index bef447f0b0..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/Make/files +++ /dev/null @@ -1,9 +0,0 @@ -combustionModel/combustionModel.C -combustionModel/newCombustionModel.C - -infinitelyFastChemistry/infinitelyFastChemistry.C - -noCombustion/noCombustion.C - -LIB = $(FOAM_LIBBIN)/libfireFoamCombustionModels - diff --git a/applications/solvers/combustion/fireFoam/combustionModels/Make/options b/applications/solvers/combustion/fireFoam/combustionModels/Make/options deleted file mode 100644 index 3f557113c4..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/Make/options +++ /dev/null @@ -1,9 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(FOAM_SRC)/turbulenceModels/compressible/turbulenceModel \ - -I$(FOAM_SRC)/finiteVolume/lnInclude - -LIB_LIBS = \ - -lfiniteVolume diff --git a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C b/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C deleted file mode 100644 index bd5f92db36..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C +++ /dev/null @@ -1,108 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "combustionModel.H" -#include "fvm.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(combustionModel, 0); - defineRunTimeSelectionTable(combustionModel, dictionary); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::combustionModel::combustionModel -( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho -) -: - combustionModelCoeffs_ - ( - combustionProperties.subDict - ( - word(combustionProperties.lookup("combustionModel")) + "Coeffs" - ) - ), - thermo_(thermo), - turbulence_(turbulence), - mesh_(phi.mesh()), - phi_(phi), - rho_(rho), - stoicRatio_(thermo.lookup("stoichiometricAirFuelMassRatio")), - s_(thermo.lookup("stoichiometricOxygenFuelMassRatio")), - qFuel_(thermo_.lookup("qFuel")), - composition_(thermo.composition()) -{} - - -// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * // - -Foam::combustionModel::~combustionModel() -{} - - -// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // - -Foam::tmp -Foam::combustionModel::combustionModel::R(volScalarField& fu) const -{ - const basicMultiComponentMixture& composition = thermo_.composition(); - const volScalarField& ft = composition.Y("ft"); - volScalarField fres(composition.fres(ft, stoicRatio_.value())); - volScalarField wFuelNorm(this->wFuelNorm()*pos(fu - fres)); - - return wFuelNorm*fres - fvm::Sp(wFuelNorm, fu); -} - - -Foam::tmp Foam::combustionModel::combustionModel::dQ -( - const fvScalarMatrix& Rfu -) const -{ - const basicMultiComponentMixture& composition = thermo_.composition(); - const volScalarField& fu = composition.Y("fu"); - - return (-qFuel_)*(Rfu & fu); -} - - -bool Foam::combustionModel::read(const dictionary& combustionProperties) -{ - combustionModelCoeffs_ = combustionProperties.subDict(type() + "Coeffs"); - - return true; -} - - -// ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H b/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H deleted file mode 100644 index 1aa44ffcad..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H +++ /dev/null @@ -1,209 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::combustionModel - -Description - Base class for all non-premixed combustion models. - -SourceFiles - combustionModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef combustionModel_H -#define combustionModel_H - -#include "IOdictionary.H" -#include "hsCombustionThermo.H" -#include "turbulenceModel.H" -#include "multivariateSurfaceInterpolationScheme.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class combustionModel Declaration -\*---------------------------------------------------------------------------*/ - -class combustionModel -{ - -protected: - - // Protected data - - //- Dictionary of coefficients for the particular model - dictionary combustionModelCoeffs_; - - //- Reference to the thermodynamic - const hsCombustionThermo& thermo_; - - //- Reference to the turbulence model - const compressible::turbulenceModel& turbulence_; - - //- Reference to the mesh database - const fvMesh& mesh_; - - //- Reference to mass-flux field - const surfaceScalarField& phi_; - - //- Reference to the density field - const volScalarField& rho_; - - //- Stoichiometric air-fuel mass ratio - dimensionedScalar stoicRatio_; - - //- Stoichiometric oxygen-fuel mass ratio - dimensionedScalar s_; - - //- Heat of combustion (J/Kg) - dimensionedScalar qFuel_; - - -private: - - // Private Member Functions - - //- Disallow copy construct - combustionModel(const combustionModel&); - - //- Disallow default bitwise assignment - void operator=(const combustionModel&); - - const basicMultiComponentMixture& composition_; - - -public: - - //- Runtime type information - TypeName("combustionModel"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - combustionModel, - dictionary, - ( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho - ), - ( - combustionProperties, - thermo, - turbulence, - phi, - rho - ) - ); - - - // Selectors - - //- Return a reference to the selected combustion model - static autoPtr New - ( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho - ); - - - // Constructors - - //- Construct from components - combustionModel - ( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho - ); - - - //- Destructor - virtual ~combustionModel(); - - - // Member Functions - - // Access functions - - //- Access composition - const basicMultiComponentMixture& composition() const - { - return composition_; - } - - //- Access combustion dictionary - const dictionary combustionModelCoeffs() const - { - return combustionModelCoeffs_; - } - - //- Access heat of combustion - const dimensionedScalar qFuel() const - { - return qFuel_; - } - - //- Return normalised consumption rate of (fu - fres) - virtual tmp wFuelNorm() const = 0; - - //- Fuel consumption rate matrix i.e. source-term for the fuel equation - virtual tmp R(volScalarField& fu) const; - - //- Heat-release rate calculated from the given - // fuel consumption rate matrix - virtual tmp dQ(const fvScalarMatrix& Rfu) const; - - //- Correct combustion rate - virtual void correct() = 0; - - //- Update properties from given dictionary - virtual bool read(const dictionary& combustionProperties) = 0; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C b/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C deleted file mode 100644 index 7164844577..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C +++ /dev/null @@ -1,66 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "combustionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -Foam::autoPtr Foam::combustionModel::New -( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho -) -{ - word combustionModelTypeName = combustionProperties.lookup - ( - "combustionModel" - ); - - Info<< "Selecting combustion model " << combustionModelTypeName << endl; - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(combustionModelTypeName); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "combustionModel::New" - ) << "Unknown combustionModel type " - << combustionModelTypeName << endl << endl - << "Valid combustionModels are : " << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr - (cstrIter()(combustionProperties, thermo, turbulence, phi, rho)); -} - - -// ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C b/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C deleted file mode 100644 index f147911f76..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C +++ /dev/null @@ -1,93 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "infinitelyFastChemistry.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace combustionModels -{ - defineTypeNameAndDebug(infinitelyFastChemistry, 0); - addToRunTimeSelectionTable - ( - combustionModel, - infinitelyFastChemistry, - dictionary - ); -} -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::combustionModels::infinitelyFastChemistry::infinitelyFastChemistry -( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho -) -: - combustionModel(combustionProperties, thermo, turbulence, phi, rho), - C_(readScalar(combustionModelCoeffs_.lookup("C"))) -{} - - -// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * // - -Foam::combustionModels::infinitelyFastChemistry::~infinitelyFastChemistry() -{} - - -// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // - -void Foam::combustionModels::infinitelyFastChemistry::correct() -{} - - -Foam::tmp -Foam::combustionModels::infinitelyFastChemistry::wFuelNorm() const -{ - return rho_/(mesh_.time().deltaT()*C_); -} - - -bool Foam::combustionModels::infinitelyFastChemistry::read -( - const dictionary& combustionProperties -) -{ - combustionModel::read(combustionProperties); - combustionModelCoeffs_.lookup("C") >> C_ ; - - return true; -} - - -// ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H b/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H deleted file mode 100644 index 80d55328df..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H +++ /dev/null @@ -1,118 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::combustionModels::infinitelyFastChemistry - -Description - Simple infinitely fast chemistry combustion model based on the principle - mixed is burnt. Additional parameter C is used to distribute the heat - release rate.in time - -SourceFiles - infinitelyFastChemistry.C - -\*---------------------------------------------------------------------------*/ - -#ifndef infinitelyFastChemistry_H -#define infinitelyFastChemistry_H - -#include "fvc.H" -#include "combustionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace combustionModels -{ - -/*---------------------------------------------------------------------------*\ - Class infinitelyFastChemistry Declaration -\*---------------------------------------------------------------------------*/ - -class infinitelyFastChemistry -: - public combustionModel -{ - // Private data - - //- Model constant - scalar C_; - - // Private Member Functions - - //- Disallow copy construct - infinitelyFastChemistry(const infinitelyFastChemistry&); - - //- Disallow default bitwise assignment - void operator=(const infinitelyFastChemistry&); - - -public: - - //- Runtime type information - TypeName("infinitelyFastChemistry"); - - - // Constructors - - //- Construct from components - infinitelyFastChemistry - ( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho - ); - - - // Destructor - - virtual ~infinitelyFastChemistry(); - - - // Member Functions - - //- Update properties from given dictionary - virtual bool read(const dictionary& combustionProperties); - - //- Correct combustion rate - virtual void correct(); - - //- Return normalised consumption rate of (fu - fres) - virtual tmp wFuelNorm() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace combustionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C b/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C deleted file mode 100644 index fd709b75e1..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C +++ /dev/null @@ -1,102 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "noCombustion.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace combustionModels -{ - defineTypeNameAndDebug(noCombustion, 0); - addToRunTimeSelectionTable - ( - combustionModel, - noCombustion, - dictionary - ); -} -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::combustionModels::noCombustion::noCombustion -( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho -) -: - combustionModel(combustionProperties, thermo, turbulence, phi, rho) -{} - - -// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * // - -Foam::combustionModels::noCombustion::~noCombustion() -{} - - -void Foam::combustionModels::noCombustion::correct() -{} - - -Foam::tmp -Foam::combustionModels::noCombustion::wFuelNorm() const -{ - return tmp - ( - new volScalarField - ( - IOobject - ( - "wFuelNorm", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("wFuelNorm", dimMass/dimTime/pow3(dimLength), 0.0) - ) - ); -} - - -bool Foam::combustionModels::noCombustion::read -( - const dictionary& combustionProperties -) -{ - return combustionModel::read(combustionProperties); -} - - -// ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H b/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H deleted file mode 100644 index 2ae12b891c..0000000000 --- a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H +++ /dev/null @@ -1,112 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::combustionModel::noCombustion - -Description - No combustion - -SourceFiles - noCombustion.C - -\*---------------------------------------------------------------------------*/ - -#ifndef noCombustion_H -#define noCombustion_H - -#include "combustionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace combustionModels -{ - -/*---------------------------------------------------------------------------*\ - Class noCombustion Declaration -\*---------------------------------------------------------------------------*/ - -class noCombustion -: - public combustionModel -{ - // Private data - - - // Private Member Functions - - //- Disallow copy construct - noCombustion(const noCombustion&); - - //- Disallow default bitwise assignment - void operator=(const noCombustion&); - - -public: - - //- Runtime type information - TypeName("noCombustion"); - - - // Constructors - - //- Construct from components - noCombustion - ( - const dictionary& combustionProperties, - const hsCombustionThermo& thermo, - const compressible::turbulenceModel& turbulence, - const surfaceScalarField& phi, - const volScalarField& rho - ); - - - // Destructor - - virtual ~noCombustion(); - - // Member Functions - - //- Update properties from given dictionary - virtual bool read(const dictionary& combustionProperties); - - //- Correct combustion rate - virtual void correct(); - - //- Return normalised consumption rate of (fu - fres) - virtual tmp wFuelNorm() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace combustionModels -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createClouds.H b/applications/solvers/combustion/fireFoam/createClouds.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createClouds.H rename to applications/solvers/combustion/fireFoam/createClouds.H diff --git a/applications/solvers/combustion/fireFoam/createFields.H b/applications/solvers/combustion/fireFoam/createFields.H index 73686c5668..f1e152dc32 100644 --- a/applications/solvers/combustion/fireFoam/createFields.H +++ b/applications/solvers/combustion/fireFoam/createFields.H @@ -1,147 +1,154 @@ -Info<< "Reading thermophysical properties\n" << endl; + Info<< "Reading thermophysical properties\n" << endl; -autoPtr pThermo -( - hsCombustionThermo::New(mesh) -); - -hsCombustionThermo& thermo = pThermo(); - -basicMultiComponentMixture& composition = thermo.composition(); - -volScalarField rho -( - IOobject + autoPtr pThermo ( - "rho", - runTime.timeName(), + hsCombustionThermo::New(mesh) + ); + hsCombustionThermo& thermo = pThermo(); + + SLGThermo slgThermo(mesh, thermo); + + basicMultiComponentMixture& composition = thermo.composition(); + PtrList& Y = composition.Y(); + + const word inertSpecie(thermo.lookup("inertSpecie")); + + Info<< "Creating field rho\n" << endl; + volScalarField rho + ( + IOobject + ( + "rho", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + thermo.rho() + ); + + volScalarField& p = thermo.p(); + volScalarField& hs = thermo.hs(); + const volScalarField& T = thermo.T(); + const volScalarField& psi = thermo.psi(); + + Info<< "\nReading field U\n" << endl; + volVectorField U + ( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + #include "compressibleCreatePhi.H" + + Info<< "Creating turbulence model\n" << endl; + autoPtr turbulence + ( + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + IOdictionary combustionProperties + ( + IOobject + ( + "combustionProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ_IF_MODIFIED, + IOobject::NO_WRITE + ) + ); + + Info<< "Creating combustion model\n" << endl; + autoPtr combustion + ( + combustionModel::combustionModel::New + ( + combustionProperties, + thermo, + turbulence(), + phi, + rho + ) + ); + + volScalarField dQ + ( + IOobject + ( + "dQ", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - thermo.rho() -); + dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0) + ); -dimensionedScalar stoicRatio -( - thermo.lookup("stoichiometricAirFuelMassRatio") -); - -volScalarField& p = thermo.p(); -volScalarField& hs = thermo.hs(); - -const volScalarField& psi = thermo.psi(); - -volScalarField& ft = composition.Y("ft"); -volScalarField& fu = composition.Y("fu"); - - -Info<< "Reading field U\n" << endl; - -volVectorField U -( - IOobject + Info<< "Creating field DpDt\n" << endl; + volScalarField DpDt ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh -); + "DpDt", + fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p) + ); -#include "compressibleCreatePhi.H" -Info<< "Creating turbulence model\n" << endl; -autoPtr turbulence -( - compressible::turbulenceModel::New(rho, U, phi, thermo) -); + Info<< "Calculating field g.h\n" << endl; + volScalarField gh("gh", g & mesh.C()); -IOdictionary combustionProperties -( - IOobject + surfaceScalarField ghf("ghf", g & mesh.Cf()); + + volScalarField p_rgh ( - "combustionProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) -); + IOobject + ( + "p_rgh", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); -Info<< "Creating combustion model\n" << endl; -autoPtr combustion -( - combustionModel::combustionModel::New + // Force p_rgh to be consistent with p + p_rgh = p - rho*gh; + + multivariateSurfaceInterpolationScheme::fieldTable fields; + + forAll(Y, i) + { + fields.add(Y[i]); + } + fields.add(hs); + + IOdictionary additionalControlsDict ( - combustionProperties, - thermo, - turbulence(), - phi, - rho - ) -); + IOobject + ( + "additionalControls", + runTime.constant(), + mesh, + IOobject::MUST_READ_IF_MODIFIED, + IOobject::NO_WRITE + ) + ); - -Info<< "Calculating field g.h\n" << endl; -volScalarField gh("gh", g & mesh.C()); -surfaceScalarField ghf("gh", g & mesh.Cf()); - -Info<< "Reading field p_rgh\n" << endl; -volScalarField p_rgh -( - IOobject + Switch solvePrimaryRegion ( - "p_rgh", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh -); - -// Force p_rgh to be consistent with p -p_rgh = p - rho*gh; - - -volScalarField dQ -( - IOobject - ( - "dQ", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - mesh, - dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0) -); - - -Info<< "Creating field DpDt\n" << endl; -volScalarField DpDt -( - fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p) -); - - -dimensionedScalar initialMass = fvc::domainIntegrate(rho); - - -multivariateSurfaceInterpolationScheme::fieldTable fields; - -if (composition.contains("ft")) -{ - fields.add(composition.Y("ft")); -} - -if (composition.contains("fu")) -{ - fields.add(composition.Y("fu")); -} - -fields.add(hs); + additionalControlsDict.lookup("solvePrimaryRegion") + ); diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createPyrolysisModel.H b/applications/solvers/combustion/fireFoam/createPyrolysisModel.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createPyrolysisModel.H rename to applications/solvers/combustion/fireFoam/createPyrolysisModel.H diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createSurfaceFilmModel.H b/applications/solvers/combustion/fireFoam/createSurfaceFilmModel.H similarity index 99% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createSurfaceFilmModel.H rename to applications/solvers/combustion/fireFoam/createSurfaceFilmModel.H index 1db870f0aa..8ddcc77a5f 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createSurfaceFilmModel.H +++ b/applications/solvers/combustion/fireFoam/createSurfaceFilmModel.H @@ -4,4 +4,3 @@ typedef regionModels::surfaceFilmModels::surfaceFilmModel filmModelType; autoPtr tsurfaceFilm(filmModelType::New(mesh, g)); filmModelType& surfaceFilm = tsurfaceFilm(); - diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C index a517eccde1..7c58a722d1 100644 --- a/applications/solvers/combustion/fireFoam/fireFoam.C +++ b/applications/solvers/combustion/fireFoam/fireFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,15 +25,22 @@ Application fireFoam Description - Transient Solver for Fires and turbulent diffusion flames + Transient PIMPLE solver for Fires and turbulent diffusion flames with + reacting Lagrangian parcels, surface film and pyrolysis modelling. \*---------------------------------------------------------------------------*/ +#include "mapDistribute.H" #include "fvCFD.H" -#include "hsCombustionThermo.H" #include "turbulenceModel.H" -#include "combustionModel.H" +#include "basicReactingCloud.H" +#include "surfaceFilmModel.H" +#include "pyrolysisModel.H" #include "radiationModel.H" +#include "SLGThermo.H" +#include "hsCombustionThermo.H" +#include "solidChemistryModel.H" +#include "combustionModel.H" #include "pimpleControl.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -41,19 +48,25 @@ Description int main(int argc, char *argv[]) { #include "setRootCase.H" + #include "createTime.H" #include "createMesh.H" + #include "readChemistryProperties.H" #include "readGravitationalAcceleration.H" - #include "initContinuityErrs.H" #include "createFields.H" + #include "createClouds.H" + #include "createSurfaceFilmModel.H" + #include "createPyrolysisModel.H" #include "createRadiationModel.H" + #include "initContinuityErrs.H" #include "readTimeControls.H" #include "compressibleCourantNo.H" #include "setInitialDeltaT.H" + #include "readPyrolysisTimeControls.H" pimpleControl pimple(mesh); - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; @@ -61,46 +74,56 @@ int main(int argc, char *argv[]) { #include "readTimeControls.H" #include "compressibleCourantNo.H" + #include "solidRegionDiffusionNo.H" + #include "setMultiRegionDeltaT.H" #include "setDeltaT.H" runTime++; + Info<< "Time = " << runTime.timeName() << nl << endl; - #include "rhoEqn.H" + parcels.evolve(); - // --- Pressure-velocity PIMPLE corrector loop - for (pimple.start(); pimple.loop(); pimple++) + surfaceFilm.evolve(); + + pyrolysis->evolve(); + + if (solvePrimaryRegion) { - #include "UEqn.H" + #include "rhoEqn.H" - #include "ftEqn.H" - #include "fuhsEqn.H" - - // --- PISO loop - for (int corr=0; corrcorrect(); + } } - if (pimple.turbCorr()) - { - turbulence->correct(); - } + rho = thermo.rho(); } - rho = thermo.rho(); - runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; - } - Info<< "End\n" << endl; + Info<< "End" << endl; - return 0; + return(0); } + // ************************************************************************* // diff --git a/applications/solvers/combustion/fireFoam/ftEqn.H b/applications/solvers/combustion/fireFoam/ftEqn.H deleted file mode 100644 index 57406da753..0000000000 --- a/applications/solvers/combustion/fireFoam/ftEqn.H +++ /dev/null @@ -1,25 +0,0 @@ -tmp > mvConvection -( - fv::convectionScheme::New - ( - mesh, - fields, - phi, - mesh.divScheme("div(phi,ft_b_h)") - ) -); - -{ - fvScalarMatrix ftEqn - ( - fvm::ddt(rho, ft) - + mvConvection->fvmDiv(phi, ft) - - fvm::laplacian(turbulence->alphaEff(), ft) - ); - - ftEqn.relax(); - ftEqn.solve(); -} - -Info<< "max(ft) = " << max(ft).value() << endl; -Info<< "min(ft) = " << min(ft).value() << endl; diff --git a/applications/solvers/combustion/fireFoam/fuhsEqn.H b/applications/solvers/combustion/fireFoam/fuhsEqn.H deleted file mode 100644 index 6494ead4f4..0000000000 --- a/applications/solvers/combustion/fireFoam/fuhsEqn.H +++ /dev/null @@ -1,47 +0,0 @@ -{ - // Solve fuel equation - // ~~~~~~~~~~~~~~~~~~~ - fvScalarMatrix R(combustion->R(fu)); - - { - fvScalarMatrix fuEqn - ( - fvm::ddt(rho, fu) - + mvConvection->fvmDiv(phi, fu) - - fvm::laplacian(turbulence->alphaEff(), fu) - == - R - ); - - fuEqn.relax(); - fuEqn.solve(); - } - - Info<< "max(fu) = " << max(fu).value() << endl; - Info<< "min(fu) = " << min(fu).value() << endl; - - - // Solve sensible enthalpy equation - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - radiation->correct(); - dQ = combustion->dQ(R); - - { - fvScalarMatrix hsEqn - ( - fvm::ddt(rho, hs) - + mvConvection->fvmDiv(phi,hs) - - fvm::laplacian(turbulence->alphaEff(), hs) - == - DpDt - + dQ - + radiation->Shs(thermo) - ); - - hsEqn.relax(); - hsEqn.solve(); - } - - thermo.correct(); - combustion->correct(); -} diff --git a/applications/solvers/combustion/fireFoam/pEqn.H b/applications/solvers/combustion/fireFoam/pEqn.H index 6813950e19..5c7a4ae33e 100644 --- a/applications/solvers/combustion/fireFoam/pEqn.H +++ b/applications/solvers/combustion/fireFoam/pEqn.H @@ -1,7 +1,7 @@ rho = thermo.rho(); volScalarField rAU(1.0/UEqn.A()); -surfaceScalarField rhorAUf("(rho*(1|A(U)))", fvc::interpolate(rho*rAU)); +surfaceScalarField rhorAUf(rAU.name() + 'f', fvc::interpolate(rho*rAU)); U = rAU*UEqn.H(); surfaceScalarField phiU @@ -17,13 +17,15 @@ phi = phiU - rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf(); for (int nonOrth=0; nonOrth<=pimple.nNonOrthCorr(); nonOrth++) { - surfaceScalarField rhorAUf(fvc::interpolate(rho*rAU)); - fvScalarMatrix p_rghEqn ( - fvm::ddt(psi, p_rgh) + fvc::ddt(psi, rho)*gh + fvc::ddt(psi, rho)*gh + fvc::div(phi) + + fvm::ddt(psi, p_rgh) - fvm::laplacian(rhorAUf, p_rgh) + == + parcels.Srho() + + surfaceFilm.Srho() ); p_rghEqn.solve diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readChemistryProperties.H b/applications/solvers/combustion/fireFoam/readChemistryProperties.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readChemistryProperties.H rename to applications/solvers/combustion/fireFoam/readChemistryProperties.H diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readPyrolysisTimeControls.H b/applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readPyrolysisTimeControls.H rename to applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/rhoEqn.H b/applications/solvers/combustion/fireFoam/rhoEqn.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/rhoEqn.H rename to applications/solvers/combustion/fireFoam/rhoEqn.H diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/setMultiRegionDeltaT.H b/applications/solvers/combustion/fireFoam/setMultiRegionDeltaT.H similarity index 100% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/setMultiRegionDeltaT.H rename to applications/solvers/combustion/fireFoam/setMultiRegionDeltaT.H diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/solidRegionDiffusionNo.H b/applications/solvers/combustion/fireFoam/solidRegionDiffusionNo.H similarity index 97% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/solidRegionDiffusionNo.H rename to applications/solvers/combustion/fireFoam/solidRegionDiffusionNo.H index a6ab0eb14a..2d443c50bf 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/solidRegionDiffusionNo.H +++ b/applications/solvers/combustion/fireFoam/solidRegionDiffusionNo.H @@ -1,2 +1 @@ scalar DiNum = pyrolysis->solidRegionDiffNo(); - diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files deleted file mode 100644 index 7910a02965..0000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -reactingParcelFilmPyrolysisFoam.C - -EXE = $(FOAM_APPBIN)/reactingParcelFilmPyrolysisFoam diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options deleted file mode 100644 index cf5b4b0976..0000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options +++ /dev/null @@ -1,52 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I${LIB_SRC}/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ - -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/solid/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \ - -I$(LIB_SRC)/combustionModels/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \ - -I$(LIB_SRC)/combustionModels/lnInclude \ - -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ - -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ - -I$(LIB_SRC)/regionModels/pyrolysisModels/lnInclude \ - -I$(LIB_SRC)/lagrangian/basic/lnInclude \ - -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ - -I$(LIB_SRC)/ODE/lnInclude \ - -I$(LIB_SRC)/sampling/lnInclude - - -EXE_LIBS = \ - -lfiniteVolume \ - -lmeshTools \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lspecie \ - -lbasicThermophysicalModels \ - -lsolidProperties \ - -lsolidMixtureProperties \ - -lthermophysicalFunctions \ - -lreactionThermophysicalModels \ - -lSLGThermo \ - -lchemistryModel \ - -lsolidChemistryModel \ - -lcombustionModels \ - -lregionModels \ - -lradiationModels \ - -lsurfaceFilmModels \ - -lpyrolysisModels \ - -llagrangianIntermediate \ - -lODE \ - -lsampling diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H deleted file mode 100644 index a64e50a2d2..0000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H +++ /dev/null @@ -1,26 +0,0 @@ - fvVectorMatrix UEqn - ( - fvm::ddt(rho, U) - + fvm::div(phi, U) - + turbulence->divDevRhoReff(U) - == - parcels.SU(U) - ); - - UEqn.relax(); - - if (pimple.momentumPredictor()) - { - solve - ( - UEqn - == - fvc::reconstruct - ( - ( - - ghf*fvc::snGrad(rho) - - fvc::snGrad(p_rgh) - )*mesh.magSf() - ) - ); - } diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H deleted file mode 100644 index f1e152dc32..0000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H +++ /dev/null @@ -1,154 +0,0 @@ - Info<< "Reading thermophysical properties\n" << endl; - - autoPtr pThermo - ( - hsCombustionThermo::New(mesh) - ); - hsCombustionThermo& thermo = pThermo(); - - SLGThermo slgThermo(mesh, thermo); - - basicMultiComponentMixture& composition = thermo.composition(); - PtrList& Y = composition.Y(); - - const word inertSpecie(thermo.lookup("inertSpecie")); - - Info<< "Creating field rho\n" << endl; - volScalarField rho - ( - IOobject - ( - "rho", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - thermo.rho() - ); - - volScalarField& p = thermo.p(); - volScalarField& hs = thermo.hs(); - const volScalarField& T = thermo.T(); - const volScalarField& psi = thermo.psi(); - - Info<< "\nReading field U\n" << endl; - volVectorField U - ( - IOobject - ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - #include "compressibleCreatePhi.H" - - Info<< "Creating turbulence model\n" << endl; - autoPtr turbulence - ( - compressible::turbulenceModel::New - ( - rho, - U, - phi, - thermo - ) - ); - - IOdictionary combustionProperties - ( - IOobject - ( - "combustionProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ); - - Info<< "Creating combustion model\n" << endl; - autoPtr combustion - ( - combustionModel::combustionModel::New - ( - combustionProperties, - thermo, - turbulence(), - phi, - rho - ) - ); - - volScalarField dQ - ( - IOobject - ( - "dQ", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - mesh, - dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0) - ); - - Info<< "Creating field DpDt\n" << endl; - volScalarField DpDt - ( - "DpDt", - 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()); - - volScalarField p_rgh - ( - IOobject - ( - "p_rgh", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - // Force p_rgh to be consistent with p - p_rgh = p - rho*gh; - - multivariateSurfaceInterpolationScheme::fieldTable fields; - - forAll(Y, i) - { - fields.add(Y[i]); - } - fields.add(hs); - - IOdictionary additionalControlsDict - ( - IOobject - ( - "additionalControls", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ); - - Switch solvePrimaryRegion - ( - additionalControlsDict.lookup("solvePrimaryRegion") - ); diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H deleted file mode 100644 index 5c7a4ae33e..0000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H +++ /dev/null @@ -1,50 +0,0 @@ -rho = thermo.rho(); - -volScalarField rAU(1.0/UEqn.A()); -surfaceScalarField rhorAUf(rAU.name() + 'f', fvc::interpolate(rho*rAU)); -U = rAU*UEqn.H(); - -surfaceScalarField phiU -( - fvc::interpolate(rho) - *( - (fvc::interpolate(U) & mesh.Sf()) - + fvc::ddtPhiCorr(rAU, rho, U, phi) - ) -); - -phi = phiU - rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf(); - -for (int nonOrth=0; nonOrth<=pimple.nNonOrthCorr(); nonOrth++) -{ - fvScalarMatrix p_rghEqn - ( - fvc::ddt(psi, rho)*gh - + fvc::div(phi) - + fvm::ddt(psi, p_rgh) - - fvm::laplacian(rhorAUf, p_rgh) - == - parcels.Srho() - + surfaceFilm.Srho() - ); - - p_rghEqn.solve - ( - mesh.solver(p_rgh.select(pimple.finalInnerIter(corr, nonOrth))) - ); - - if (nonOrth == pimple.nNonOrthCorr()) - { - phi += p_rghEqn.flux(); - } -} - -p = p_rgh + rho*gh; - -#include "rhoEqn.H" -#include "compressibleContinuityErrs.H" - -U += rAU*fvc::reconstruct((phi - phiU)/rhorAUf); -U.correctBoundaryConditions(); - -DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p); diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C deleted file mode 100644 index 178ceadcd6..0000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C +++ /dev/null @@ -1,129 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2009-2011 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Application - reactingParcelFilmPyrolysisFoam - -Description - Transient PIMPLE solver for Fires and turbulent diffusion flames with - reacting Lagrangian parcels, surface film and pyrolysis modelling. - -\*---------------------------------------------------------------------------*/ - -#include "mapDistribute.H" -#include "fvCFD.H" -#include "turbulenceModel.H" -#include "basicReactingCloud.H" -#include "surfaceFilmModel.H" -#include "pyrolysisModel.H" -#include "radiationModel.H" -#include "SLGThermo.H" -#include "hsCombustionThermo.H" -#include "solidChemistryModel.H" -#include "combustionModel.H" -#include "pimpleControl.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -int main(int argc, char *argv[]) -{ - #include "setRootCase.H" - - #include "createTime.H" - #include "createMesh.H" - #include "readChemistryProperties.H" - #include "readGravitationalAcceleration.H" - #include "createFields.H" - #include "createClouds.H" - #include "createSurfaceFilmModel.H" - #include "createPyrolysisModel.H" - #include "createRadiationModel.H" - #include "initContinuityErrs.H" - #include "readTimeControls.H" - #include "compressibleCourantNo.H" - #include "setInitialDeltaT.H" - #include "readPyrolysisTimeControls.H" - - pimpleControl pimple(mesh); - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - Info<< "\nStarting time loop\n" << endl; - - while (runTime.run()) - { - #include "readTimeControls.H" - #include "compressibleCourantNo.H" - #include "solidRegionDiffusionNo.H" - #include "setMultiRegionDeltaT.H" - #include "setDeltaT.H" - - runTime++; - - Info<< "Time = " << runTime.timeName() << nl << endl; - - parcels.evolve(); - - surfaceFilm.evolve(); - - pyrolysis->evolve(); - - if (solvePrimaryRegion) - { - #include "rhoEqn.H" - - // --- PIMPLE loop - for (pimple.start(); pimple.loop(); pimple++) - { - #include "UEqn.H" - #include "YhsEqn.H" - - // --- PISO loop - for (int corr=1; corr<=pimple.nCorr(); corr++) - { - #include "pEqn.H" - } - - if (pimple.turbCorr()) - { - turbulence->correct(); - } - } - - rho = thermo.rho(); - } - - runTime.write(); - - Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" - << " ClockTime = " << runTime.elapsedClockTime() << " s" - << nl << endl; - } - - Info<< "End" << endl; - - return(0); -} - - -// ************************************************************************* // From 51bdfb51fd4d4934f85fd0cfd3fd31072f41bcc0 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 6 Jun 2011 19:07:15 +0100 Subject: [PATCH 4/8] STY: Update fireFoam tutorials for multispecies solver --- .../les/smallPoolFire2D/0/{ft => CH4} | 2 +- .../fireFoam/les/smallPoolFire2D/0/N2 | 52 ++ .../fireFoam/les/smallPoolFire2D/0/O2 | 52 ++ .../les/smallPoolFire2D/0/{fu => Ydefault} | 31 +- .../les/smallPoolFire2D/constant/SpeciesTable | 491 ------------------ .../constant/additionalControls | 20 + .../constant/chemistryProperties} | 33 +- .../constant/pyrolysisProperties | 37 ++ .../constant/radiationProperties | 2 +- .../constant/reactingCloud1Properties | 165 ++++++ .../les/smallPoolFire2D/constant/reactions | 17 + .../constant/surfaceFilmProperties | 22 + .../constant/thermo.compressibleGas | 126 +++++ .../constant/thermophysicalProperties | 78 +-- .../les/smallPoolFire2D/system/fvSchemes | 12 +- .../les/smallPoolFire2D/system/fvSolution | 14 +- .../les/smallPoolFire3D/0/{ft => CH4} | 2 +- .../fireFoam/les/smallPoolFire3D/0/N2 | 48 ++ .../fireFoam/les/smallPoolFire3D/0/O2 | 52 ++ .../les/smallPoolFire3D/0/{fu => Ydefault} | 30 +- .../les/smallPoolFire3D/constant/SpeciesTable | 491 ------------------ .../constant/additionalControls | 20 + .../constant/chemistryProperties} | 38 +- .../constant/pyrolysisProperties | 37 ++ .../constant/radiationProperties | 2 +- .../constant/reactingCloud1Properties | 165 ++++++ .../les/smallPoolFire3D/constant/reactions | 17 + .../constant/surfaceFilmProperties | 22 + .../constant/thermo.compressibleGas | 126 +++++ .../constant/thermophysicalProperties | 78 +-- .../les/smallPoolFire3D/system/fvSchemes | 16 +- .../les/smallPoolFire3D/system/fvSolution | 16 +- 32 files changed, 1093 insertions(+), 1221 deletions(-) rename tutorials/combustion/fireFoam/les/smallPoolFire2D/0/{ft => CH4} (98%) create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 rename tutorials/combustion/fireFoam/les/smallPoolFire2D/0/{fu => Ydefault} (86%) mode change 100644 => 100755 delete mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls rename tutorials/combustion/fireFoam/les/{smallPoolFire3D/0/b => smallPoolFire2D/constant/chemistryProperties} (66%) create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas rename tutorials/combustion/fireFoam/les/smallPoolFire3D/0/{ft => CH4} (98%) create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2 create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2 rename tutorials/combustion/fireFoam/les/smallPoolFire3D/0/{fu => Ydefault} (86%) mode change 100644 => 100755 delete mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls rename tutorials/combustion/fireFoam/les/{smallPoolFire2D/0/b => smallPoolFire3D/constant/chemistryProperties} (63%) create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties create mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 similarity index 98% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 index d84a10a7d6..0b1e0de832 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object ft; + object CH4; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 new file mode 100644 index 0000000000..d03d685b40 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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.76699; + +boundaryField +{ + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + base + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0; + } + frontBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 new file mode 100644 index 0000000000..b433139678 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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.23301; + +boundaryField +{ + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + base + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0; + } + frontBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault old mode 100644 new mode 100755 similarity index 86% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault index 8451b3a9ef..9536e7a9f2 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object fu; + object Ydefault; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,26 +21,29 @@ internalField uniform 0; boundaryField { - outlet - { - type inletOutlet; - inletValue uniform 0; - value uniform 0; - } - sides - { - type inletOutlet; - inletValue uniform 0; - value uniform 0; - } base { type zeroGradient; } + + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + inlet { type fixedValue; - value uniform 1.0; + value uniform 0; + } + + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; } frontBack { diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable deleted file mode 100644 index e387970281..0000000000 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable +++ /dev/null @@ -1,491 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "constant"; - object SpeciesTable; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -fields -1 -( - -{ - name ft; - min 0; - max 1; - N 100; -} - -) -; -output -5 -( - -{ - name CH4; -} - - -{ - name CO2; -} - - -{ - name H2O; -} - - -{ - name CO; -} - - -{ - name soot; -} - -) -; -values -6 -( - -101 -( -0.001 -0.011 -0.021 -0.031 -0.041 -0.051 -0.061 -0.071 -0.081 -0.091 -0.101 -0.111 -0.121 -0.131 -0.141 -0.151 -0.161 -0.171 -0.181 -0.191 -0.201 -0.211 -0.221 -0.231 -0.241 -0.251 -0.261 -0.271 -0.281 -0.291 -0.301 -0.311 -0.321 -0.331 -0.341 -0.351 -0.361 -0.371 -0.381 -0.391 -0.401 -0.411 -0.421 -0.431 -0.441 -0.451 -0.461 -0.471 -0.481 -0.491 -0.501 -0.511 -0.521 -0.531 -0.541 -0.551 -0.561 -0.571 -0.581 -0.591 -0.601 -0.611 -0.621 -0.631 -0.641 -0.651 -0.661 -0.671 -0.681 -0.691 -0.701 -0.711 -0.721 -0.731 -0.741 -0.751 -0.761 -0.771 -0.781 -0.791 -0.801 -0.811 -0.821 -0.831 -0.841 -0.851 -0.861 -0.871 -0.881 -0.891 -0.901 -0.911 -0.921 -0.931 -0.941 -0.951 -0.961 -0.971 -0.981 -0.991 -0.999 -) - - -101 -( -0 -0 -0 -0 -0 -0 -0.0105883 -0.0285208 -0.0461843 -0.0635849 -0.0807284 -0.0976204 -0.114266 -0.130672 -0.146842 -0.162782 -0.178496 -0.193989 -0.209266 -0.224332 -0.23919 -0.253845 -0.268301 -0.282563 -0.296633 -0.310517 -0.324216 -0.337736 -0.35108 -0.364251 -0.377252 -0.390087 -0.402759 -0.415271 -0.427625 -0.439826 -0.451876 -0.463777 -0.475532 -0.487144 -0.498616 -0.50995 -0.521148 -0.532214 -0.543149 -0.553955 -0.564635 -0.575191 -0.585626 -0.595941 -0.606138 -0.61622 -0.626187 -0.636044 -0.64579 -0.655428 -0.66496 -0.674387 -0.683712 -0.692935 -0.702059 -0.711085 -0.720014 -0.728849 -0.73759 -0.74624 -0.754799 -0.763269 -0.771652 -0.779948 -0.788159 -0.796287 -0.804332 -0.812297 -0.820181 -0.827987 -0.835715 -0.843367 -0.850943 -0.858445 -0.865875 -0.873232 -0.880518 -0.887735 -0.894882 -0.901961 -0.908974 -0.91592 -0.922802 -0.929619 -0.936373 -0.943064 -0.949694 -0.956263 -0.962772 -0.969222 -0.975614 -0.981948 -0.988226 -0.994448 -0.999385 -) - - -101 -( -0.00200328 -0.0213922 -0.0396804 -0.0569589 -0.0733092 -0.088804 -0.0940165 -0.0923125 -0.0906341 -0.0889806 -0.0873516 -0.0857465 -0.0841647 -0.0826058 -0.0810693 -0.0795547 -0.0780615 -0.0765893 -0.0751376 -0.073706 -0.0722942 -0.0709016 -0.0695279 -0.0681728 -0.0668357 -0.0655165 -0.0642147 -0.06293 -0.0616621 -0.0604105 -0.0591751 -0.0579555 -0.0567514 -0.0555625 -0.0543885 -0.0532292 -0.0520842 -0.0509534 -0.0498363 -0.0487329 -0.0476428 -0.0465658 -0.0455017 -0.0444503 -0.0434112 -0.0423844 -0.0413695 -0.0403664 -0.0393749 -0.0383948 -0.0374258 -0.0364678 -0.0355206 -0.0345841 -0.033658 -0.0327421 -0.0318364 -0.0309406 -0.0300546 -0.0291781 -0.0283112 -0.0274535 -0.026605 -0.0257655 -0.0249349 -0.024113 -0.0232997 -0.0224948 -0.0216983 -0.0209099 -0.0201297 -0.0193573 -0.0185928 -0.0178361 -0.0170869 -0.0163452 -0.0156108 -0.0148837 -0.0141638 -0.0134509 -0.0127449 -0.0120458 -0.0113535 -0.0106678 -0.00998859 -0.00931588 -0.00864953 -0.00798947 -0.00733558 -0.0066878 -0.00604604 -0.00541021 -0.00478022 -0.00415601 -0.00353749 -0.00292458 -0.00231721 -0.00171531 -0.00111879 -0.000527591 -5.8413e-05 -) - - -101 -( -0.00400655 -0.0427844 -0.0793607 -0.113918 -0.146618 -0.177608 -0.188033 -0.184625 -0.181268 -0.177961 -0.174703 -0.171493 -0.168329 -0.165212 -0.162139 -0.159109 -0.156123 -0.153179 -0.150275 -0.147412 -0.144588 -0.141803 -0.139056 -0.136346 -0.133671 -0.131033 -0.128429 -0.12586 -0.123324 -0.120821 -0.11835 -0.115911 -0.113503 -0.111125 -0.108777 -0.106458 -0.104168 -0.101907 -0.0996727 -0.0974658 -0.0952856 -0.0931317 -0.0910035 -0.0889006 -0.0868225 -0.0847688 -0.082739 -0.0807328 -0.0787498 -0.0767895 -0.0748516 -0.0729356 -0.0710413 -0.0691682 -0.067316 -0.0654843 -0.0636728 -0.0618812 -0.0601091 -0.0583563 -0.0566223 -0.054907 -0.05321 -0.051531 -0.0498697 -0.0482259 -0.0465993 -0.0449896 -0.0433965 -0.0418198 -0.0402593 -0.0387147 -0.0371857 -0.0356721 -0.0341737 -0.0326903 -0.0312216 -0.0297674 -0.0283276 -0.0269018 -0.0254899 -0.0240917 -0.022707 -0.0213355 -0.0199772 -0.0186318 -0.0172991 -0.0159789 -0.0146712 -0.0133756 -0.0120921 -0.0108204 -0.00956045 -0.00831202 -0.00707498 -0.00584917 -0.00463443 -0.00343062 -0.00223758 -0.00105518 -0.000116826 -) - -101{0} -101{0} -) -; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls new file mode 100644 index 0000000000..af372fbcbe --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object additionalControls; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvePrimaryRegion true; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties similarity index 66% rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties index 242f45c943..fca4f15a5c 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties @@ -9,36 +9,21 @@ FoamFile { version 2.0; format ascii; - class volScalarField; - location "0"; - object b; + class dictionary; + location "constant"; + object chemistryProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [0 0 0 0 0 0 0]; +psiChemistryModel ODEChemistryModel; -internalField uniform 0; +chemistry off; -boundaryField -{ - outlet - { - type zeroGradient; - } - sides - { - type zeroGradient; - } - base - { - type zeroGradient; - } - inlet - { - type zeroGradient; - } +turbulentReaction off; -} +chemistrySolver noChemistrySolver; + +initialChemicalTimeStep 1e-07; // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties new file mode 100644 index 0000000000..3dfb0fbe71 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object pyrolysisProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +active false; + +pyrolysisModel none; + +regionName panelRegion; + +reactingOneDimCoeffs +{ + filmCoupled false; + + radFluxName Qr; + + minimumDelta 1e-8; + + moveMesh false; +} + +infoOutput false; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties index d7b2c3f4e3..8d7ce6f129 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties @@ -49,7 +49,7 @@ constantAbsorptionEmissionCoeffs greyMeanAbsorptionEmissionCoeffs { - lookUpTableFileName "SpeciesTable"; + lookUpTableFileName none; EhrrCoeff 0.0; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties new file mode 100644 index 0000000000..f975d237d3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties @@ -0,0 +1,165 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object reactingCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solution +{ + active false; + coupled yes; + transient yes; + cellValueSourceCorrection yes; + + sourceTerms + { + schemes + { + rho explicit 1; + U explicit 1; + Yi explicit 1; + hs explicit 1; + } + } + + interpolationSchemes + { + rho cell; + U cellPoint; + mu cell; + T cell; + Cp cell; + p cell; + } + + integrationSchemes + { + U Euler; + T analytical; + } +} + +constantProperties +{ + parcelTypeId 1; + + rhoMin 1e-15; + TMin 200; + pMin 1000; + minParticleMass 1e-15; + + rho0 1000; + T0 300; + Cp0 4187; + + youngsModulus 1e9; + poissonsRatio 0.35; + + epsilon0 1; + f0 0.5; + Pr 0.7; + Tvap 273; + Tbp 373; + + constantVolume false; +} + +subModels +{ + particleForces + { + sphereDrag; + gravity; + } + + injectionModel coneInjection; + + dispersionModel none; + + patchInteractionModel standardWallInteraction; + + heatTransferModel none; + + compositionModel singlePhaseMixture; + + phaseChangeModel none; + + surfaceFilmModel thermoSurfaceFilm; + + radiation off; + + coneInjectionCoeffs + { + SOI 0.000; + duration 20.000; + positionAxis + ( + ((0.3 0.35 1.45) (0 0 -1)) + ((0.6 0.35 1.45) (0 0 -1)) + ); + + massTotal 10; + parcelsPerInjector 20000; + parcelsPerSecond 500; + parcelBasisType mass; + flowRateProfile constant 0.1; + Umag constant 3.0; + thetaInner constant 0; + thetaOuter constant 45; + + sizeDistribution + { + type RosinRammler; + RosinRammlerDistribution + { + minValue 5e-04; + maxValue 0.0012; + d 7.5e-05; + n 0.5; + } + } + } + + standardWallInteractionCoeffs + { + type rebound; + } + + singlePhaseMixtureCoeffs + { + phases + ( + liquid + { + H2O 1; + } + ); + } + + thermoSurfaceFilmCoeffs + { + interactionType splashBai; + deltaWet 0.0005; + Adry 2630; + Awet 1320; + Cf 0.6; + } +} + + +cloudFunctions +{} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions new file mode 100644 index 0000000000..c174cf789e --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions @@ -0,0 +1,17 @@ +species +( + O2 + H2O + CH4 + CO2 + N2 +); + +reactions +{ + propaneReaction + { + type irreversibleinfiniteReaction; + reaction "CH4 + 2O2 = CO2 + 2H2O"; + } +} diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties new file mode 100644 index 0000000000..db5db22ec3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object SurfaceFilmProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +surfaceFilmModel none; + +regionName none; + +active false; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas new file mode 100644 index 0000000000..367faadefd --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas @@ -0,0 +1,126 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermo.compressibleGas; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +O2 +{ + specie + { + nMoles 1; + molWeight 31.9988; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 ); + lowCpCoeffs ( 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +H2O +{ + specie + { + nMoles 1; + molWeight 18.0153; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 ); + lowCpCoeffs ( 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +CH4 +{ + specie + { + nMoles 1; + molWeight 16.0428; + } + thermodynamics + { + Tlow 200; + Thigh 6000; + Tcommon 1000; + highCpCoeffs ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 ); + lowCpCoeffs ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +CO2 +{ + specie + { + nMoles 1; + molWeight 44.01; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 4.45362 0.00314017 -1.27841e-06 2.394e-10 -1.66903e-14 -48967 -0.955396 ); + lowCpCoeffs ( 2.27572 0.00992207 -1.04091e-05 6.86669e-09 -2.11728e-12 -48373.1 10.1885 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +N2 +{ + specie + { + nMoles 1; + molWeight 28.0134; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 ); + lowCpCoeffs ( 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties index 021d554355..f593a1dd12 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties @@ -15,79 +15,23 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hsPsiMixtureThermo>>>>; +thermoType hsPsiMixtureThermo>; -stoichiometricAirFuelMassRatio stoichiometricAirFuelMassRatio [ 0 0 0 0 0 0 0 ] 17.1271; +inertSpecie N2; +fuel CH4; -stoichiometricOxygenFuelMassRatio stoichiometricOxygenFuelMassRatio [ 0 0 0 0 0 0 0 ] 4; +chemistryReader foamChemistryReader; -qFuel qFuel [ 0 2 -2 0 0 0 0 ] 5.00264e+07; +foamChemistryFile "$FOAM_CASE/constant/reactions"; -fuel +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas"; + +liquids { - specie - { - nMoles 1; - molWeight 16.0428; - } - thermodynamics - { - Tlow 200; - Thigh 6000; - Tcommon 1000; - highCpCoeffs ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 ); - lowCpCoeffs ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 ); - } - transport - { - As 1.67212e-06; - Ts 170.672; - } -} + liquidComponents + (); -oxidant -{ - specie - { - nMoles 1; - molWeight 28.8504; - } - thermodynamics - { - Tlow 200; - Thigh 6000; - Tcommon 1000; - highCpCoeffs ( 3.10131 0.00124137 -4.18816e-07 6.64158e-11 -3.91274e-15 -985.266 5.35597 ); - lowCpCoeffs ( 3.58378 -0.000727005 1.67057e-06 -1.09203e-10 -4.31765e-13 -1050.53 3.11239 ); - } - transport - { - As 1.67212e-06; - Ts 170.672; - } + H2O H2O defaultCoeffs; } -burntProducts -{ -specie -{ - nMoles 1; - molWeight 27.6334; -} -thermodynamics -{ - Tlow 200; - Thigh 6000; - Tcommon 1000; - highCpCoeffs ( 3.0602 0.00182422 -5.93878e-07 8.93807e-11 -4.97595e-15 -10998.7 5.32209 ); - lowCpCoeffs ( 3.54628 0.000378279 2.02797e-07 9.31602e-10 -6.84016e-13 -11102.1 2.90098 ); -} -transport -{ - As 1.67212e-06; - Ts 170.672; -} -} - - // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes index 4402f37252..5c8063431d 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes @@ -30,11 +30,13 @@ divSchemes default none; div(phi,U) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; - flux(phi,ft) Gauss limitedLinear01 1; - div(phi,ft_b_h) Gauss multivariateSelection + div(phi,Yi_hs) Gauss multivariateSelection { - fu limitedLinear01 1; - ft limitedLinear01 1; + O2 limitedLinear01 1; + CH4 limitedLinear01 1; + N2 limitedLinear01 1; + H2O limitedLinear01 1; + CO2 limitedLinear01 1; hs limitedLinear 1; }; div((muEff*dev2(T(grad(U))))) Gauss linear; @@ -44,7 +46,7 @@ divSchemes laplacianSchemes { - default Gauss linear uncorrected; + default Gauss linear corrected; } interpolationSchemes diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution index 10c1c27de7..5a7b7a980a 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution @@ -53,16 +53,16 @@ solvers }; - "(U|ft|fu|k|hs)" + "(U|Yi|k|hs)" { - solver smoothSolver; - smoother GaussSeidel; + solver PBiCG; + preconditioner DILU; tolerance 1e-7; relTol 0.1; nSweeps 1; }; - "(U|ft|fu|k|hs)Final" + "(U|Yi|k|hs)Final" { $U; tolerance 1e-7; @@ -100,4 +100,10 @@ PIMPLE nNonOrthogonalCorrectors 0; } +relaxationFactors +{ + "(U|k).*" 1; + "(C3H8|O2|H2O|CO2|hs).*" 0.9; +} + // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/ft b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/CH4 similarity index 98% rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/ft rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/0/CH4 index d24a5478e1..219f5ffe60 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/ft +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/CH4 @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object ft; + object CH4; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2 b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2 new file mode 100644 index 0000000000..c1511f9827 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2 @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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.76699; + +boundaryField +{ + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + base + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2 b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2 new file mode 100644 index 0000000000..b433139678 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2 @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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.23301; + +boundaryField +{ + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + base + { + type zeroGradient; + } + inlet + { + type fixedValue; + value uniform 0; + } + frontBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/fu b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/Ydefault old mode 100644 new mode 100755 similarity index 86% rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/fu rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/0/Ydefault index 8782fc3987..bc81b33f52 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/fu +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/Ydefault @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object fu; + object Ydefault; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,28 +21,30 @@ internalField uniform 0; boundaryField { - outlet - { - type inletOutlet; - inletValue uniform 0; - value uniform 0; - } - sides - { - type inletOutlet; - inletValue uniform 0; - value uniform 0; - } base { type zeroGradient; } + + outlet + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + inlet { type fixedValue; - value uniform 1.0; + value uniform 0; } + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable deleted file mode 100644 index e387970281..0000000000 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable +++ /dev/null @@ -1,491 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "constant"; - object SpeciesTable; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -fields -1 -( - -{ - name ft; - min 0; - max 1; - N 100; -} - -) -; -output -5 -( - -{ - name CH4; -} - - -{ - name CO2; -} - - -{ - name H2O; -} - - -{ - name CO; -} - - -{ - name soot; -} - -) -; -values -6 -( - -101 -( -0.001 -0.011 -0.021 -0.031 -0.041 -0.051 -0.061 -0.071 -0.081 -0.091 -0.101 -0.111 -0.121 -0.131 -0.141 -0.151 -0.161 -0.171 -0.181 -0.191 -0.201 -0.211 -0.221 -0.231 -0.241 -0.251 -0.261 -0.271 -0.281 -0.291 -0.301 -0.311 -0.321 -0.331 -0.341 -0.351 -0.361 -0.371 -0.381 -0.391 -0.401 -0.411 -0.421 -0.431 -0.441 -0.451 -0.461 -0.471 -0.481 -0.491 -0.501 -0.511 -0.521 -0.531 -0.541 -0.551 -0.561 -0.571 -0.581 -0.591 -0.601 -0.611 -0.621 -0.631 -0.641 -0.651 -0.661 -0.671 -0.681 -0.691 -0.701 -0.711 -0.721 -0.731 -0.741 -0.751 -0.761 -0.771 -0.781 -0.791 -0.801 -0.811 -0.821 -0.831 -0.841 -0.851 -0.861 -0.871 -0.881 -0.891 -0.901 -0.911 -0.921 -0.931 -0.941 -0.951 -0.961 -0.971 -0.981 -0.991 -0.999 -) - - -101 -( -0 -0 -0 -0 -0 -0 -0.0105883 -0.0285208 -0.0461843 -0.0635849 -0.0807284 -0.0976204 -0.114266 -0.130672 -0.146842 -0.162782 -0.178496 -0.193989 -0.209266 -0.224332 -0.23919 -0.253845 -0.268301 -0.282563 -0.296633 -0.310517 -0.324216 -0.337736 -0.35108 -0.364251 -0.377252 -0.390087 -0.402759 -0.415271 -0.427625 -0.439826 -0.451876 -0.463777 -0.475532 -0.487144 -0.498616 -0.50995 -0.521148 -0.532214 -0.543149 -0.553955 -0.564635 -0.575191 -0.585626 -0.595941 -0.606138 -0.61622 -0.626187 -0.636044 -0.64579 -0.655428 -0.66496 -0.674387 -0.683712 -0.692935 -0.702059 -0.711085 -0.720014 -0.728849 -0.73759 -0.74624 -0.754799 -0.763269 -0.771652 -0.779948 -0.788159 -0.796287 -0.804332 -0.812297 -0.820181 -0.827987 -0.835715 -0.843367 -0.850943 -0.858445 -0.865875 -0.873232 -0.880518 -0.887735 -0.894882 -0.901961 -0.908974 -0.91592 -0.922802 -0.929619 -0.936373 -0.943064 -0.949694 -0.956263 -0.962772 -0.969222 -0.975614 -0.981948 -0.988226 -0.994448 -0.999385 -) - - -101 -( -0.00200328 -0.0213922 -0.0396804 -0.0569589 -0.0733092 -0.088804 -0.0940165 -0.0923125 -0.0906341 -0.0889806 -0.0873516 -0.0857465 -0.0841647 -0.0826058 -0.0810693 -0.0795547 -0.0780615 -0.0765893 -0.0751376 -0.073706 -0.0722942 -0.0709016 -0.0695279 -0.0681728 -0.0668357 -0.0655165 -0.0642147 -0.06293 -0.0616621 -0.0604105 -0.0591751 -0.0579555 -0.0567514 -0.0555625 -0.0543885 -0.0532292 -0.0520842 -0.0509534 -0.0498363 -0.0487329 -0.0476428 -0.0465658 -0.0455017 -0.0444503 -0.0434112 -0.0423844 -0.0413695 -0.0403664 -0.0393749 -0.0383948 -0.0374258 -0.0364678 -0.0355206 -0.0345841 -0.033658 -0.0327421 -0.0318364 -0.0309406 -0.0300546 -0.0291781 -0.0283112 -0.0274535 -0.026605 -0.0257655 -0.0249349 -0.024113 -0.0232997 -0.0224948 -0.0216983 -0.0209099 -0.0201297 -0.0193573 -0.0185928 -0.0178361 -0.0170869 -0.0163452 -0.0156108 -0.0148837 -0.0141638 -0.0134509 -0.0127449 -0.0120458 -0.0113535 -0.0106678 -0.00998859 -0.00931588 -0.00864953 -0.00798947 -0.00733558 -0.0066878 -0.00604604 -0.00541021 -0.00478022 -0.00415601 -0.00353749 -0.00292458 -0.00231721 -0.00171531 -0.00111879 -0.000527591 -5.8413e-05 -) - - -101 -( -0.00400655 -0.0427844 -0.0793607 -0.113918 -0.146618 -0.177608 -0.188033 -0.184625 -0.181268 -0.177961 -0.174703 -0.171493 -0.168329 -0.165212 -0.162139 -0.159109 -0.156123 -0.153179 -0.150275 -0.147412 -0.144588 -0.141803 -0.139056 -0.136346 -0.133671 -0.131033 -0.128429 -0.12586 -0.123324 -0.120821 -0.11835 -0.115911 -0.113503 -0.111125 -0.108777 -0.106458 -0.104168 -0.101907 -0.0996727 -0.0974658 -0.0952856 -0.0931317 -0.0910035 -0.0889006 -0.0868225 -0.0847688 -0.082739 -0.0807328 -0.0787498 -0.0767895 -0.0748516 -0.0729356 -0.0710413 -0.0691682 -0.067316 -0.0654843 -0.0636728 -0.0618812 -0.0601091 -0.0583563 -0.0566223 -0.054907 -0.05321 -0.051531 -0.0498697 -0.0482259 -0.0465993 -0.0449896 -0.0433965 -0.0418198 -0.0402593 -0.0387147 -0.0371857 -0.0356721 -0.0341737 -0.0326903 -0.0312216 -0.0297674 -0.0283276 -0.0269018 -0.0254899 -0.0240917 -0.022707 -0.0213355 -0.0199772 -0.0186318 -0.0172991 -0.0159789 -0.0146712 -0.0133756 -0.0120921 -0.0108204 -0.00956045 -0.00831202 -0.00707498 -0.00584917 -0.00463443 -0.00343062 -0.00223758 -0.00105518 -0.000116826 -) - -101{0} -101{0} -) -; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls new file mode 100644 index 0000000000..af372fbcbe --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object additionalControls; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvePrimaryRegion true; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties similarity index 63% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties index 69d723a7e1..fca4f15a5c 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties @@ -9,39 +9,21 @@ FoamFile { version 2.0; format ascii; - class volScalarField; - location "0"; - object b; + class dictionary; + location "constant"; + object chemistryProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [0 0 0 0 0 0 0]; +psiChemistryModel ODEChemistryModel; -internalField uniform 0; +chemistry off; -boundaryField -{ - outlet - { - type zeroGradient; - } - sides - { - type zeroGradient; - } - base - { - type zeroGradient; - } - inlet - { - type zeroGradient; - } - frontBack - { - type empty; - } -} +turbulentReaction off; + +chemistrySolver noChemistrySolver; + +initialChemicalTimeStep 1e-07; // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties new file mode 100644 index 0000000000..3dfb0fbe71 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object pyrolysisProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +active false; + +pyrolysisModel none; + +regionName panelRegion; + +reactingOneDimCoeffs +{ + filmCoupled false; + + radFluxName Qr; + + minimumDelta 1e-8; + + moveMesh false; +} + +infoOutput false; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties index e48fc02f42..ff2d2c0d24 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties @@ -50,7 +50,7 @@ constantAbsorptionEmissionCoeffs greyMeanAbsorptionEmissionCoeffs { - lookUpTableFileName "SpeciesTable"; + lookUpTableFileName none; EhrrCoeff 0.0; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties new file mode 100644 index 0000000000..f975d237d3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties @@ -0,0 +1,165 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object reactingCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solution +{ + active false; + coupled yes; + transient yes; + cellValueSourceCorrection yes; + + sourceTerms + { + schemes + { + rho explicit 1; + U explicit 1; + Yi explicit 1; + hs explicit 1; + } + } + + interpolationSchemes + { + rho cell; + U cellPoint; + mu cell; + T cell; + Cp cell; + p cell; + } + + integrationSchemes + { + U Euler; + T analytical; + } +} + +constantProperties +{ + parcelTypeId 1; + + rhoMin 1e-15; + TMin 200; + pMin 1000; + minParticleMass 1e-15; + + rho0 1000; + T0 300; + Cp0 4187; + + youngsModulus 1e9; + poissonsRatio 0.35; + + epsilon0 1; + f0 0.5; + Pr 0.7; + Tvap 273; + Tbp 373; + + constantVolume false; +} + +subModels +{ + particleForces + { + sphereDrag; + gravity; + } + + injectionModel coneInjection; + + dispersionModel none; + + patchInteractionModel standardWallInteraction; + + heatTransferModel none; + + compositionModel singlePhaseMixture; + + phaseChangeModel none; + + surfaceFilmModel thermoSurfaceFilm; + + radiation off; + + coneInjectionCoeffs + { + SOI 0.000; + duration 20.000; + positionAxis + ( + ((0.3 0.35 1.45) (0 0 -1)) + ((0.6 0.35 1.45) (0 0 -1)) + ); + + massTotal 10; + parcelsPerInjector 20000; + parcelsPerSecond 500; + parcelBasisType mass; + flowRateProfile constant 0.1; + Umag constant 3.0; + thetaInner constant 0; + thetaOuter constant 45; + + sizeDistribution + { + type RosinRammler; + RosinRammlerDistribution + { + minValue 5e-04; + maxValue 0.0012; + d 7.5e-05; + n 0.5; + } + } + } + + standardWallInteractionCoeffs + { + type rebound; + } + + singlePhaseMixtureCoeffs + { + phases + ( + liquid + { + H2O 1; + } + ); + } + + thermoSurfaceFilmCoeffs + { + interactionType splashBai; + deltaWet 0.0005; + Adry 2630; + Awet 1320; + Cf 0.6; + } +} + + +cloudFunctions +{} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions new file mode 100644 index 0000000000..c174cf789e --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions @@ -0,0 +1,17 @@ +species +( + O2 + H2O + CH4 + CO2 + N2 +); + +reactions +{ + propaneReaction + { + type irreversibleinfiniteReaction; + reaction "CH4 + 2O2 = CO2 + 2H2O"; + } +} diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties new file mode 100644 index 0000000000..db5db22ec3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object SurfaceFilmProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +surfaceFilmModel none; + +regionName none; + +active false; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas new file mode 100644 index 0000000000..367faadefd --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas @@ -0,0 +1,126 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermo.compressibleGas; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +O2 +{ + specie + { + nMoles 1; + molWeight 31.9988; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 ); + lowCpCoeffs ( 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +H2O +{ + specie + { + nMoles 1; + molWeight 18.0153; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 ); + lowCpCoeffs ( 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +CH4 +{ + specie + { + nMoles 1; + molWeight 16.0428; + } + thermodynamics + { + Tlow 200; + Thigh 6000; + Tcommon 1000; + highCpCoeffs ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 ); + lowCpCoeffs ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +CO2 +{ + specie + { + nMoles 1; + molWeight 44.01; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 4.45362 0.00314017 -1.27841e-06 2.394e-10 -1.66903e-14 -48967 -0.955396 ); + lowCpCoeffs ( 2.27572 0.00992207 -1.04091e-05 6.86669e-09 -2.11728e-12 -48373.1 10.1885 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +N2 +{ + specie + { + nMoles 1; + molWeight 28.0134; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 ); + lowCpCoeffs ( 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties index 9060c18a70..f593a1dd12 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties @@ -15,79 +15,23 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hsPsiMixtureThermo>>>>; +thermoType hsPsiMixtureThermo>; -stoichiometricAirFuelMassRatio stoichiometricAirFuelMassRatio [ 0 0 0 0 0 0 0 ] 17.1271; +inertSpecie N2; +fuel CH4; -stoichiometricOxygenFuelMassRatio stoichiometricOxygenFuelMassRatio [ 0 0 0 0 0 0 0 ] 4; +chemistryReader foamChemistryReader; -qFuel qFuel [ 0 2 -2 0 0 0 0 ] 5.00264e+07; +foamChemistryFile "$FOAM_CASE/constant/reactions"; -fuel +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas"; + +liquids { - specie - { - nMoles 1; - molWeight 16.0428; - } - thermodynamics - { - Tlow 200; - Thigh 6000; - Tcommon 1000; - highCpCoeffs ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 ); - lowCpCoeffs ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 ); - } - transport - { - As 1.67212e-06; - Ts 170.672; - } -} + liquidComponents + (); -oxidant -{ - specie - { - nMoles 1; - molWeight 28.8504; - } - thermodynamics - { - Tlow 200; - Thigh 6000; - Tcommon 1000; - highCpCoeffs ( 3.10131 0.00124137 -4.18816e-07 6.64158e-11 -3.91274e-15 -985.266 5.35597 ); - lowCpCoeffs ( 3.58378 -0.000727005 1.67057e-06 -1.09203e-10 -4.31765e-13 -1050.53 3.11239 ); - } - transport - { - As 1.67212e-06; - Ts 170.672; - } + H2O H2O defaultCoeffs; } -burntProducts -{ - specie - { - nMoles 1; - molWeight 27.6334; - } - thermodynamics - { - Tlow 200; - Thigh 6000; - Tcommon 1000; - highCpCoeffs ( 3.0602 0.00182422 -5.93878e-07 8.93807e-11 -4.97595e-15 -10998.7 5.32209 ); - lowCpCoeffs ( 3.54628 0.000378279 2.02797e-07 9.31602e-10 -6.84016e-13 -11102.1 2.90098 ); - } - transport - { - As 1.67212e-06; - Ts 170.672; - } -} - - // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes index ce3527c153..eed3d83301 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes @@ -30,12 +30,14 @@ divSchemes default none; div(phi,U) Gauss linear; div(phi,k) Gauss limitedLinear 0.1; - flux(phi,ft) Gauss limitedLinear01 0.1; - div(phi,ft_b_h) Gauss multivariateSelection + div(phi,Yi_hs) Gauss multivariateSelection { - fu limitedLinear 0.1; - ft limitedLinear 0.1; - hs limitedLinear 0.1; + O2 limitedLinear01 1; + CH4 limitedLinear01 1; + N2 limitedLinear01 1; + H2O limitedLinear01 1; + CO2 limitedLinear01 1; + hs limitedLinear 1; }; div((muEff*dev2(T(grad(U))))) Gauss linear; div(phiU,p) Gauss linear; @@ -44,7 +46,7 @@ divSchemes laplacianSchemes { - default Gauss linear uncorrected; + default Gauss linear corrected; } interpolationSchemes @@ -54,7 +56,7 @@ interpolationSchemes snGradSchemes { - default uncorrected; + default corrected; } fluxRequired diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution index ef95fada40..37e6164a4f 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution @@ -45,16 +45,16 @@ solvers }; - "(U|ft|fu|k|hs)" + "(U|Yi|k|hs)" { - solver smoothSolver; - smoother GaussSeidel; + solver PBiCG; + preconditioner DILU; tolerance 1e-7; relTol 0.1; nSweeps 1; }; - "(U|ft|fu|k|hs)Final" + "(U|Yi|k|hs)Final" { $U; tolerance 1e-8; @@ -85,10 +85,16 @@ solvers PIMPLE { - momentumPredictor no; + momentumPredictor yes; nOuterCorrectors 1; nCorrectors 1; nNonOrthogonalCorrectors 0; } +relaxationFactors +{ + "(U|k).*" 1; + "(C3H8|O2|H2O|CO2|hs).*" 0.9; +} + // ************************************************************************* // From c473c6a6a18071a3654320983763ed6106d6a709 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 7 Jun 2011 10:20:46 +0100 Subject: [PATCH 5/8] ENH: update thermo for gas in ODESoliudchemistry and other minor stuff --- .../singleStepReactingMixture.C | 4 +--- .../ODESolidChemistryModel.C | 16 +++++++--------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C index 65749dca89..5ac41aa0e6 100644 --- a/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C @@ -108,8 +108,6 @@ void Foam::singleStepReactingMixture::calculateMaxProducts() Yprod0_[specieI] = this->speciesData()[specieI].W()/Wm*Xi[i]; } - Info << "Max products: " << Yprod0_ << endl; - // Normalize the stoichiometric coeff to mass forAll(specieStoichCoeffs_, i) { @@ -208,7 +206,7 @@ Foam::singleStepReactingMixture::singleStepReactingMixture mesh.time().timeName(), mesh, IOobject::NO_READ, - IOobject::AUTO_WRITE + IOobject::NO_WRITE ); fres_.set diff --git a/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C b/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C index 7d716a8a88..bd7ac96a46 100644 --- a/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C +++ b/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C @@ -139,7 +139,6 @@ ODESolidChemistryModel // Calculate inital values of Ysi0 = rho*delta*Yi Ys0_[fieldI].internalField() = - //this->solidThermo().rho()*Ys_[fieldI]*mesh.V(); this->solidThermo().rho()*max(Ys_[fieldI],scalar(0.001))*mesh.V(); } @@ -148,15 +147,18 @@ ODESolidChemistryModel RRg_.set(fieldI, new scalarField(mesh.nCells(), 0.0)); } - dictionary thermoDict = - mesh.lookupObject("chemistryProperties"); - forAll(gasThermo_, gasI) { + dictionary thermoDict = + mesh.lookupObject + ( + "chemistryProperties" + ).subDict(pyrolisisGases_[gasI]); + gasThermo_.set ( gasI, - new GasThermo(thermoDict.lookup(pyrolisisGases_[gasI])) + new GasThermo(thermoDict) ); } @@ -275,7 +277,6 @@ Foam::ODESolidChemistryModel::omega label si = R.slhs()[s]; kf *= -// pow(c1[si]/max(Ys0_[si][cellI], 0.001), exponent) pow(c1[si]/Ys0_[si][cellI], exponent) *(Ys0_[si][cellI]); } @@ -312,7 +313,6 @@ void Foam::ODESolidChemistryModel::derivatives scalar dYidt = dcdt[i]/cTot; scalar Yi = c[i]/cTot; newCp += Yi*solidThermo_[i].Cp(T); - //newhi += dYidt*solidThermo_[i].hf(); newhi -= dYidt*solidThermo_[i].hf(); } @@ -465,7 +465,6 @@ Foam::ODESolidChemistryModel::Sh() const forAll(Sh, cellI) { scalar hf = solidThermo_[i].hf(); - //Sh[cellI] += hf*RRs_[i][cellI]; Sh[cellI] -= hf*RRs_[i][cellI]; } } @@ -695,7 +694,6 @@ Foam::ODESolidChemistryModel::solve scalar dYi = dcdt[i]/cTot; scalar Yi = c[i]/cTot; newCp += Yi*solidThermo_[i].Cp(Ti); - //newhi += dYi*solidThermo_[i].hf(); newhi -= dYi*solidThermo_[i].hf(); invRho += Yi/solidThermo_[i].rho(Ti); } From f3ab801a82c9e88698114b570bf7bc3e55f2cbff Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 7 Jun 2011 10:28:35 +0100 Subject: [PATCH 6/8] ENH: oppositeburningpPanels tutorial --- .../fireFoam/les/oppositeBurningPanels/0/C3H8 | 57 + .../les/oppositeBurningPanels/0/IDefault | 40 + .../fireFoam/les/oppositeBurningPanels/0/N2 | 54 + .../fireFoam/les/oppositeBurningPanels/0/O2 | 55 + .../fireFoam/les/oppositeBurningPanels/0/T | 62 + .../fireFoam/les/oppositeBurningPanels/0/U | 62 + .../les/oppositeBurningPanels/0/Ydefault | 56 + .../les/oppositeBurningPanels/0/alphaSgs | 53 + .../fireFoam/les/oppositeBurningPanels/0/k | 56 + .../les/oppositeBurningPanels/0/muSgs | 52 + .../fireFoam/les/oppositeBurningPanels/0/p | 56 + .../les/oppositeBurningPanels/0/p_rgh | 62 + .../oppositeBurningPanels/0/panelRegion/Qr | 67 + .../les/oppositeBurningPanels/0/panelRegion/T | 54 + .../0/panelRegion/Y0Default | 47 + .../0/panelRegion/Ydefault | 47 + .../oppositeBurningPanels/0/panelRegion/Yv | 46 + .../les/oppositeBurningPanels/Allclean | 10 + .../fireFoam/les/oppositeBurningPanels/Allrun | 32 + .../les/oppositeBurningPanels/cRefine.setSet | 1 + .../constant/LESProperties | 93 + .../constant/additionalControls | 20 + .../constant/chemistryProperties | 29 + .../constant/combustionProperties | 25 + .../les/oppositeBurningPanels/constant/g | 21 + .../constant/panelRegion/cellDecomposition | 34104 ++++++++++++++++ .../constant/panelRegion/chemistryProperties | 69 + .../panelRegion/solidThermophysicalProperties | 71 + .../constant/polyMesh/blockMeshDict | 77 + .../constant/pyrolysisProperties | 37 + .../constant/radiationProperties | 151 + .../constant/reactingCloud1Properties | 165 + .../oppositeBurningPanels/constant/reactions | 17 + .../constant/surfaceFilmProperties | 22 + .../constant/thermo.compressibleGas | 126 + .../constant/thermophysicalProperties | 45 + .../constant/turbulenceProperties | 23 + .../les/oppositeBurningPanels/f.setSet | 2 + .../les/oppositeBurningPanels/fBurner.setSet | 1 + .../les/oppositeBurningPanels/fZone.setSet | 2 + .../oppositeBurningPanels/system/controlDict | 57 + .../system/createPatchDict | 72 + .../system/decomposeParDict | 44 + .../system/extrudeToRegionMeshDict | 38 + .../oppositeBurningPanels/system/fvSchemes | 76 + .../oppositeBurningPanels/system/fvSolution | 118 + .../system/panelRegion/decomposeParDict | 53 + .../system/panelRegion/fvSchemes | 53 + .../system/panelRegion/fvSolution | 55 + .../system/refineMeshDict | 65 + 50 files changed, 36700 insertions(+) create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2 create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2 create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean create mode 100755 tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution create mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 new file mode 100644 index 0000000000..24a5701fc1 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.openfoam.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object C3H8; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + top + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + ground + { + type zeroGradient; + value $internalField; + } + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + burner + { + type totalFlowRateAdvectiveDiffusive; + phi phi; + rho rho; + value uniform 1.0; + } + "(region0_to.*)" + { + type totalFlowRateAdvectiveDiffusive; + phi phi; + rho rho; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault new file mode 100644 index 0000000000..77797e828a --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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; + emissivityMode lookup; + emissivity uniform 1.0; + value uniform 0; + } + "(region0_to.*)" + { + type greyDiffusiveRadiation; + T T; + emissivityMode solidThermo; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2 new file mode 100644 index 0000000000..901e8fa36c --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2 @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object N2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.76699; + +boundaryField +{ + top + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + ground + { + type zeroGradient; + } + + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + burner + { + type fixedValue; + value uniform 0; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2 new file mode 100644 index 0000000000..9167d834ac --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2 @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object O2; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0.23301; + +boundaryField +{ + top + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + ground + { + type zeroGradient; + } + + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + burner + { + type fixedValue; + value uniform 0; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T new file mode 100755 index 0000000000..6e28b36318 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T @@ -0,0 +1,62 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 298.15; + +boundaryField +{ + ground + { + type zeroGradient; + } + + top + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + burner + { + type fixedValue; + value $internalField; + } + + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + "(region0_to.*)" + { + type compressible::turbulentTemperatureRadCoupledMixed; + Tnbr T; + K basicThermo; + QrNbr none; + Qr Qr; + KName none; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U new file mode 100755 index 0000000000..2fe05e7a26 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U @@ -0,0 +1,62 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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 +{ + ground + { + type fixedValue; + value $internalField; + } + + top + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + burner + { + type flowRateInletVelocity; + flowRate 0.001294; //60kW C3H8 + value uniform (0 0 0); + } + + sides + { + type pressureInletOutletVelocity; + phi phi; + value $internalField; + } + + "(region0_to.*)" + { + type directMappedFlowRate; + phi phi; + nbrPhi phiGas; + rho rho; + value uniform (0 0 0); + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault new file mode 100755 index 0000000000..5e6d1eba5b --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object Ydefault; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type zeroGradient; + } + + top + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + burner + { + type fixedValue; + value uniform 0; + } + + sides + { + type inletOutlet; + inletValue $internalField; + value $internalField; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs new file mode 100755 index 0000000000..948eedffbd --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphaSgs; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type alphaSgsWallFunction; + value uniform 0; + } + + top + { + type zeroGradient; + } + + burner + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } + + "(region0_to.*)" + { + type alphaSgsWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k new file mode 100755 index 0000000000..f7c0531029 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 1e-05; + +boundaryField +{ + ground + { + type zeroGradient; + } + + top + { + type inletOutlet; + inletValue uniform 1e-05; + value uniform 1e-05; + } + + burner + { + type fixedValue; + value uniform 1e-05; + } + + sides + { + type inletOutlet; + inletValue uniform 1e-05; + value uniform 1e-05; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs new file mode 100755 index 0000000000..5e2ea9252c --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object muSgs; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type fixedValue; + value uniform 0; + } + + top + { + type zeroGradient; + } + + burner + { + type zeroGradient; + } + + sides + { + type zeroGradient; + } + + "(region0_to.*)" + { + type muSgsUSpaldingWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p new file mode 100755 index 0000000000..7cd9c8727d --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p @@ -0,0 +1,56 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 101325; + +boundaryField +{ + ground + { + type calculated; + value $internalField; + } + + top + { + type calculated; + value $internalField; + } + + burner + { + type calculated; + value $internalField; + } + + sides + { + type calculated; + value $internalField; + } + + "(region0_to.*)" + { + type calculated; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh new file mode 100755 index 0000000000..e21fb90581 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh @@ -0,0 +1,62 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object p_rgh; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -2 0 0 0 0]; + +internalField uniform 101325; + +boundaryField +{ + ground + { + type buoyantPressure; + value $internalField; + } + + top + { + type zeroGradient; + value $internalField; + } + + burner + { + type buoyantPressure; + value $internalField; + } + + sides + { + type totalPressure; + U U; + phi phi; + rho rho; + psi none; + gamma 1.4; + p0 $internalField; + value $internalField; + } + + "(region0_to.*)" + { + type buoyantPressure; + value $internalField; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr new file mode 100644 index 0000000000..e81ca02002 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr @@ -0,0 +1,67 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object Qr; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 0 -3 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ".*" + { + type zeroGradient; + } + + fRight_zone_side + { + type wedge; + } + + fLeft_zone_side + { + type wedge; + } + + region0_to_panelRegion_left_face + { + type directMappedField; + sampleRegion region0; + sampleMode nearestPatchFace; + samplePatch region0_to_panelRegion_left_face; + offset (0 0 0); + fieldName Qr; + setAverage no; + average 0; + value uniform 0; + } + + region0_to_panelRegion_right_face + { + type directMappedField; + sampleRegion region0; + sampleMode nearestPatchFace; + samplePatch region0_to_panelRegion_right_face; + offset (0 0 0); + fieldName Qr; + setAverage no; + average 0; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T new file mode 100755 index 0000000000..3a2ee1dfad --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T @@ -0,0 +1,54 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 298.15; + +boundaryField +{ + + ".*" + { + type zeroGradient; + } + + fRight_zone_side + { + type wedge; + } + + fLeft_zone_side + { + type wedge; + } + + "(region0_to.*)" + { + type compressible::turbulentTemperatureRadCoupledMixed; + Tnbr T; + K solidThermo; + KName none; + QrNbr Qr; + Qr none; + value uniform 298.15; + } + +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default new file mode 100755 index 0000000000..77bcb76e39 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object Ydefault; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + + ".*" + { + type zeroGradient; + } + + fRight_zone_side + { + type wedge; + } + + fLeft_zone_side + { + type wedge; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault new file mode 100755 index 0000000000..6835758e27 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.7 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object Ydefault; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + + ".*" + { + type zeroGradient; + } + + fRight_zone_side + { + type wedge; + } + + fLeft_zone_side + { + type wedge; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv new file mode 100755 index 0000000000..7f2048e1e9 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object Yv; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 0 0 0 0]; + +internalField uniform 1; + +boundaryField +{ + ".*" + { + type zeroGradient; + } + + fRight_zone_side + { + type wedge; + } + + fLeft_zone_side + { + type wedge; + } + + "(region0_to.*)" + { + type zeroGradient; + } +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean new file mode 100755 index 0000000000..07dc128240 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean @@ -0,0 +1,10 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase + +rm -r constant/panelRegion/polyMesh +# ----------------------------------------------------------------- end-of-file diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun new file mode 100755 index 0000000000..17b4dd27af --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun @@ -0,0 +1,32 @@ +#!/bin/sh + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +# Set application name +application=`getApplication` + +runApplication blockMesh + +runApplication setSet -batch cRefine.setSet +runApplication refineMesh -overwrite -dict + +rm log.setSet +runApplication setSet -batch f.setSet +rm log.setSet +runApplication setSet -batch fZone.setSet + +# create the pyrolysis region. +runApplication extrudeToRegionMesh -overwrite + + +rm log.setSet +runApplication setSet -batch fBurner.setSet + +runApplication createPatch -overwrite + +decomposePar -force > log.decomposePar.log 2>&1 + +decomposePar -region panelRegion > log.decomposParPanelRegion.log 2>&1 + +runParallel `getApplication` 6 diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet new file mode 100644 index 0000000000..526bfc6a73 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet @@ -0,0 +1 @@ +cellSet refineCells new boxToCell (-0.15 0.0 -0.3)(0.15 2.4 0.3) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties new file mode 100644 index 0000000000..0967c7e079 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties @@ -0,0 +1,93 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object LESProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +LESModel oneEqEddy; + +delta cubeRootVol; + +turbulence on; + +printCoeffs on; + +oneEqEddyCoeffs +{ + Prt 1; +} + +cubeRootVolCoeffs +{ + deltaCoeff 1; +} + +PrandtlCoeffs +{ + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; +} + +vanDriestCoeffs +{ + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; +} + +smoothCoeffs +{ + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls new file mode 100644 index 0000000000..af372fbcbe --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object additionalControls; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvePrimaryRegion true; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties new file mode 100644 index 0000000000..fca4f15a5c --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties @@ -0,0 +1,29 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +psiChemistryModel ODEChemistryModel; + +chemistry off; + +turbulentReaction off; + +chemistrySolver noChemistrySolver; + +initialChemicalTimeStep 1e-07; + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties new file mode 100644 index 0000000000..2693103086 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties @@ -0,0 +1,25 @@ +/*--------------------------------*- 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 combustionProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +combustionModel infinitelyFastChemistry; + +infinitelyFastChemistryCoeffs +{ + C 10; +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g new file mode 100644 index 0000000000..710f2a6ab5 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class uniformDimensionedVectorField; + location "constant"; + object g; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -2 0 0 0 0]; +value (0 -9.80665 0); + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition new file mode 100644 index 0000000000..07dc8690bb --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition @@ -0,0 +1,34104 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class labelList; + location "constant"; + object cellDecomposition; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +34080 +( +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +) + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties new file mode 100644 index 0000000000..3a803e8b10 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties @@ -0,0 +1,69 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.7.0 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solidChemistryModel ODESolidChemistryModel; + +gasThermoModel gasThermoPhysics; + +chemistry on; + +chemistrySolver ode; + +initialChemicalTimeStep 1e-07; + +odeCoeffs +{ + solver SIBS; + eps 0.05; +} + +species +( + gas +); + +reactions +( + irreversibleSolidArrheniusReaction + v = gas + char + (7.83e10 15274.57 400 4.86) +); + + +gas +{ + specie + { + nMoles 1; + molWeight 18.0153; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.67215 0.00305629 -8.73026e-07 1.20100e-10 -6.39162e-15 -29899.2 6.86282 ); + lowCpCoeffs ( 3.38684 0.00347498 -6.35470e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties new file mode 100644 index 0000000000..855cb612f4 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties @@ -0,0 +1,71 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object solidThermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +solidMixtureThermo>>>>; + +solidComponents +( + v char +); + +vCoeffs +{ + transport + { + K 0.135; + } + radiation + { + sigmaS 0.0; + kappa 0.0; //opaque + emissivity 0.17; + } + thermodynamics + { + Cp 696; + Hf -1.41e6; + } + density + { + rho 114.7; + } +}; + +charCoeffs +{ + transport + { + K 0.4; + } + radiation + { + sigmaS 0.0; + kappa 0.0; + emissivity 0.85; + } + thermodynamics + { + Cp 611; + Hf 0; + } + density + { + rho 11.5; + } +}; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000..0f22bb42f9 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict @@ -0,0 +1,77 @@ +/*--------------------------------*- 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; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (-0.15 0 -0.6) + ( 0.15 0 -0.6) + ( 0.15 4.2 -0.6) + (-0.15 4.2 -0.6) + (-0.15 0 0.6) + ( 0.15 0 0.6) + ( 0.15 4.2 0.6) + (-0.15 4.2 0.6) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (16 124 24) simpleGrading (1 1 1) +); + +edges +( +); + +boundary +( + ground + { + type wall; + faces + ( + (0 1 5 4) + ); + } + + sides + { + type patch; + faces + ( + (1 2 6 5) + (0 3 2 1) + (0 4 7 3) + (6 7 4 5) + ); + } + + top + { + type patch; + faces + ( + (7 6 2 3) + ); + } +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties new file mode 100644 index 0000000000..aba5535e40 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object pyrolysisProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +active true; + +pyrolysisModel reactingOneDim; + +regionName panelRegion; + +reactingOneDimCoeffs +{ + filmCoupled false; + + radFluxName Qr; + + minimumDelta 1e-8; + + moveMesh false; +} + +infoOutput true; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties new file mode 100644 index 0000000000..70e53cfd14 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties @@ -0,0 +1,151 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / 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 6; // polar angles in PI (from Z to X-Y plane) + convergence 1e-4; // convergence criteria for radiation iteration + maxIter 4; // maximum number of iterations +} + +// Number of flow iterations per radiation iteration +solverFreq 10; + +//absorptionEmissionModel constantAbsorptionEmission; +absorptionEmissionModel greyMeanAbsorptionEmission; + +constantAbsorptionEmissionCoeffs +{ + a a [ 0 -1 0 0 0 0 0 ] 0.01; + e e [ 0 -1 0 0 0 0 0 ] 0.01; + E E [ 1 -1 -3 0 0 0 0 ] 0; +} + +greyMeanAbsorptionEmissionCoeffs +{ + lookUpTableFileName none; + + EhrrCoeff 0.2; + + CO2 + { + Tcommon 300; //Common Temp + invTemp true; //Is the polynomio using inverse temperature. + Tlow 200; //Low Temp + Thigh 2000; //High Temp + + loTcoeffs //coefss for T < Tcommon + ( + 0 // a0 + + 0 // a1*T + + 0 // a2*T^(+/-)2 + + 0 // a3*T^(+/-)3 + + 0 // a4*T^(+/-)4 + + 0 // a5*T^(+/-)5 + + ); + hiTcoeffs //coefss for T > Tcommon + ( + 18.741 + -121.31e3 + 273.5e6 + -194.05e9 + 56.31e12 + -5.8169e15 + ); + + } + + H2O + { + Tcommon 300; + invTemp true; + Tlow 200; + Thigh 2000; + + loTcoeffs + ( + 0 + 0 + 0 + 0 + 0 + 0 + ); + hiTcoeffs + ( + -0.23093 + -1.12390e3 + 9.4153e6 + -2.99885e9 + 0.51382e12 + -1.868e10 + ); + } + + C3H8//CH4 + { + Tcommon 300; + Tlow 200; + Thigh 2000; + invTemp false; + + loTcoeffs + ( + 0 + 0 + 0 + 0 + 0 + 0 + ); + hiTcoeffs + ( + 6.6334 + -0.0035686 + 1.6682e-8 + 2.5611e-10 + -2.6558e-14 + 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/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties new file mode 100644 index 0000000000..f975d237d3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties @@ -0,0 +1,165 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object reactingCloud1Properties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solution +{ + active false; + coupled yes; + transient yes; + cellValueSourceCorrection yes; + + sourceTerms + { + schemes + { + rho explicit 1; + U explicit 1; + Yi explicit 1; + hs explicit 1; + } + } + + interpolationSchemes + { + rho cell; + U cellPoint; + mu cell; + T cell; + Cp cell; + p cell; + } + + integrationSchemes + { + U Euler; + T analytical; + } +} + +constantProperties +{ + parcelTypeId 1; + + rhoMin 1e-15; + TMin 200; + pMin 1000; + minParticleMass 1e-15; + + rho0 1000; + T0 300; + Cp0 4187; + + youngsModulus 1e9; + poissonsRatio 0.35; + + epsilon0 1; + f0 0.5; + Pr 0.7; + Tvap 273; + Tbp 373; + + constantVolume false; +} + +subModels +{ + particleForces + { + sphereDrag; + gravity; + } + + injectionModel coneInjection; + + dispersionModel none; + + patchInteractionModel standardWallInteraction; + + heatTransferModel none; + + compositionModel singlePhaseMixture; + + phaseChangeModel none; + + surfaceFilmModel thermoSurfaceFilm; + + radiation off; + + coneInjectionCoeffs + { + SOI 0.000; + duration 20.000; + positionAxis + ( + ((0.3 0.35 1.45) (0 0 -1)) + ((0.6 0.35 1.45) (0 0 -1)) + ); + + massTotal 10; + parcelsPerInjector 20000; + parcelsPerSecond 500; + parcelBasisType mass; + flowRateProfile constant 0.1; + Umag constant 3.0; + thetaInner constant 0; + thetaOuter constant 45; + + sizeDistribution + { + type RosinRammler; + RosinRammlerDistribution + { + minValue 5e-04; + maxValue 0.0012; + d 7.5e-05; + n 0.5; + } + } + } + + standardWallInteractionCoeffs + { + type rebound; + } + + singlePhaseMixtureCoeffs + { + phases + ( + liquid + { + H2O 1; + } + ); + } + + thermoSurfaceFilmCoeffs + { + interactionType splashBai; + deltaWet 0.0005; + Adry 2630; + Awet 1320; + Cf 0.6; + } +} + + +cloudFunctions +{} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions new file mode 100644 index 0000000000..5f29a1d872 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions @@ -0,0 +1,17 @@ +species +( + O2 + H2O + C3H8 + CO2 + N2 +); + +reactions +{ + propaneReaction + { + type irreversibleinfiniteReaction; + reaction "C3H8 + 5O2 + 18.8N2 = 3CO2 + 4H2O + 18.8N2"; + } +} diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties new file mode 100644 index 0000000000..db5db22ec3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties @@ -0,0 +1,22 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object SurfaceFilmProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +surfaceFilmModel none; + +regionName none; + +active false; diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas new file mode 100644 index 0000000000..e5c21d81c7 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas @@ -0,0 +1,126 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermo.compressibleGas; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +O2 +{ + specie + { + nMoles 1; + molWeight 31.9988; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 ); + lowCpCoeffs ( 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +H2O +{ + specie + { + nMoles 1; + molWeight 18.0153; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 ); + lowCpCoeffs ( 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +C3H8 +{ + specie + { + nMoles 1; + molWeight 44.01; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 7.5341368 0.018872239 -6.2718491e-06 9.1475649e-10 -4.7838069e-14 -16467.516 -17.892349 ); + lowCpCoeffs ( 0.93355381 0.026424579 6.1059727e-06 -2.1977499e-08 9.5149253e-12 -13958.52 19.201691 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +CO2 +{ + specie + { + nMoles 1; + molWeight 44.01; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 4.45362 0.00314017 -1.27841e-06 2.394e-10 -1.66903e-14 -48967 -0.955396 ); + lowCpCoeffs ( 2.27572 0.00992207 -1.04091e-05 6.86669e-09 -2.11728e-12 -48373.1 10.1885 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + +N2 +{ + specie + { + nMoles 1; + molWeight 28.0134; + } + thermodynamics + { + Tlow 200; + Thigh 5000; + Tcommon 1000; + highCpCoeffs ( 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 ); + lowCpCoeffs ( 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties new file mode 100644 index 0000000000..094244696a --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.openfoam.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType hsPsiMixtureThermo>; + + +inertSpecie N2; +fuel C3H8; + +chemistryReader foamChemistryReader; + +foamChemistryFile "$FOAM_CASE/constant/reactions"; + +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas"; + + +liquids +{ + liquidComponents + (); + + H2O H2O defaultCoeffs; +} + + +solids +{ + solidComponents + (); +} diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties new file mode 100644 index 0000000000..574f7f99b2 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties @@ -0,0 +1,23 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object turbulenceProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +simulationType LESModel; + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet new file mode 100644 index 0000000000..10dfed3e4a --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet @@ -0,0 +1,2 @@ +faceSet fLeft new boxToFace (-0.151 0 -0.3)(-0.14999 2.4 0.3) +faceSet fRight new boxToFace (0.14999 0 -0.3)(0.151 2.4 0.3) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet new file mode 100644 index 0000000000..eebf5d28b3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet @@ -0,0 +1 @@ +faceSet fBurner new boxToFace (-0.15 -0.001 -0.30) (0.15 0.001 0.30) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet new file mode 100644 index 0000000000..75644274d5 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet @@ -0,0 +1,2 @@ +faceZoneSet fRight_zone new setToFaceZone fRight +faceZoneSet fLeft_zone new setToFaceZone fLeft diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict new file mode 100644 index 0000000000..d64e7f0a06 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.openfoam.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application fireFoam; + +startFrom latestTime; + +startTime 0; + +stopAt endTime; + +endTime 15.0; + +deltaT 0.03; + +writeControl adjustableRunTime; + +writeInterval 0.5; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +graphFormat raw; + +runTimeModifiable yes; + +adjustTimeStep yes; + +maxCo 0.5; + +maxDi 0.25; + +maxDeltaT 0.02; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict new file mode 100644 index 0000000000..0cc1b3d564 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object createPatchDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// This application/dictionary controls: +// - optional: create new patches from boundary faces (either given as +// a set of patches or as a faceSet) +// - always: order faces on coupled patches such that they are opposite. This +// is done for all coupled faces, not just for any patches created. +// - optional: synchronise points on coupled patches. + +// 1. Create cyclic: +// - specify where the faces should come from +// - specify the type of cyclic. If a rotational specify the rotationAxis +// and centre to make matching easier +// - always create both halves in one invocation with correct 'neighbourPatch' +// setting. +// - optionally pointSync true to guarantee points to line up. + +// 2. Correct incorrect cyclic: +// This will usually fail upon loading: +// "face 0 area does not match neighbour 2 by 0.0100005%" +// " -- possible face ordering problem." +// - in polyMesh/boundary file: +// - loosen matchTolerance of all cyclics to get case to load +// - or change patch type from 'cyclic' to 'patch' +// and regenerate cyclic as above + + +// Do a synchronisation of coupled points after creation of any patches. +// Note: this does not work with points that are on multiple coupled patches +// with transformations (i.e. cyclics). +pointSync false; + +// Patches to create. +patches +( + { + // Name of new patch + name burner; + + // Dictionary to construct new patch from + patchInfo + { + type patch; + } + + // How to construct: either from 'patches' or 'set' + constructFrom set; + + // If constructFrom = patches : names of patches. Wildcards allowed. + //patches (periodic1); + + // If constructFrom = set : name of faceSet + set fBurner; + } +); + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict new file mode 100644 index 0000000000..1b4915684a --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict @@ -0,0 +1,44 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 6; + +method simple; + +simpleCoeffs +{ + n ( 1 3 2 ); + delta 0.001; +} + +hierarchicalCoeffs +{ + n ( 1 2 2 ); + delta 0.001; + order xyz; +} + +manualCoeffs +{ + dataFile "cellDecomposition"; +} + +scotchCoeffs +{ +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict new file mode 100644 index 0000000000..5d47b1b657 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict @@ -0,0 +1,38 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object extrudeToRegionMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +region panelRegion; + +faceZones (fRight_zone fLeft_zone); + +oneD true; + +oneDPolyPatchType emptyPolyPatch; //wedgePolyPatch + +extrudeModel linearNormal; + +nLayers 5; + +expansionRatio 1; + +adaptMesh true; // directMapped for both + +linearNormalCoeffs +{ + thickness 0.01; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes new file mode 100644 index 0000000000..1675c61780 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes @@ -0,0 +1,76 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.openfoam.com | +| \\/ 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 limitedLinear 1; + div(phi,k) Gauss limitedLinear 1; + div(phi,Yi_hs) Gauss multivariateSelection + { + O2 limitedLinear01 1; + N2 limitedLinear01 1; + C3H8 limitedLinear01 1; + H2O limitedLinear01 1; + CO2 limitedLinear01 1; + hs limitedLinear 1; + }; + div((muEff*dev2(T(grad(U))))) Gauss linear; + div(phiU,p) Gauss linear; + div(Ji,Ii_h) Gauss upwind; +} + +laplacianSchemes +{ + //default none; + default Gauss linear corrected; + laplacian(muEff,U) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(alphaEff,hs) Gauss linear corrected; + laplacian((((rho*(1|A(U)))*rho)*gh)) Gauss linear corrected; + laplacian(interpolate((rho*(1|A(U)))),p) Gauss linear corrected; + laplacian(gammaRad,G) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p_rgh; +} + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution new file mode 100644 index 0000000000..511ee374cb --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution @@ -0,0 +1,118 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.openfoam.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + rho + { + solver PCG; + preconditioner DIC; + tolerance 1e-6; + relTol 0; + }; + + "(rho)Final" + { + $rho; + relTol 0; + } + + p_rgh + { + solver GAMG; + tolerance 1e-5; + relTol 0.01; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + + p_rghFinal + { + solver GAMG; + tolerance 1e-6; + relTol 0; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + + + "(U|k)" + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-6; + relTol 0.01; + }; + + "(U|k)Final" + { + $U; + relTol 0; + }; + + + "(hs|hsFinal|Yi)" + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-8; + relTol 0; + }; + + Ii + { + solver GAMG; + tolerance 1e-4; + relTol 0; + smoother DILU; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + } + + G + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0; + } + +} + +PIMPLE +{ + momentumPredictor yes; + nOuterCorrectors 2; + nCorrectors 1; + nNonOrthogonalCorrectors 0; +} + +relaxationFactors +{ + "(U|k).*" 1; + "(C3H8|O2|H2O|CO2|hs).*" 1; +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict new file mode 100644 index 0000000000..49efdc7a03 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 6; + + +method structured; + +structuredCoeffs +{ + method hierarchical; + patches (region0_to_panelRegion_fRight_zone region0_to_panelRegion_fLeft_zone); + + hierarchicalCoeffs + { + n ( 2 3 1 ); + delta 0.001; + order xyz; + } +} + + +hierarchicalCoeffs +{ + n ( 1 2 2 ); + delta 0.001; + order xyz; +} + +manualCoeffs +{ + dataFile "cellDecomposition"; +} + +metisCoeffs +{ +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes new file mode 100644 index 0000000000..5d3a6809a3 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes @@ -0,0 +1,53 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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 uncorrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default uncorrected; +} + +fluxRequired +{ + default no; +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution new file mode 100644 index 0000000000..98aec611d7 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution @@ -0,0 +1,55 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + T + { + solver PCG; + preconditioner DIC; + tolerance 1e-6; + relTol 0; + } + + "Yi" + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-06; + relTol 0; + } + + "rho|rhot" + { + solver PCG; + preconditioner DIC; + tolerance 0; + relTol 0; + }; + +} + +SIMPLE +{ + nNonOrthCorr 0; +} + +relaxationFactors +{ + T 1; +} + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict new file mode 100644 index 0000000000..db2ca3e3b0 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict @@ -0,0 +1,65 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.6 | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object refineMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Cells to refine; name of cell set +set refineCells; + +// Type of coordinate system: +// - global : coordinate system same for every cell. Usually aligned with +// x,y,z axis. Specify in globalCoeffs section below. +// - patchLocal : coordinate system different for every cell. Specify in +// patchLocalCoeffs section below. +//coordinateSystem global; +coordinateSystem global; + + +// .. and its coefficients. x,y in this case. (normal direction is calculated +// as tan1^tan2) +globalCoeffs +{ + tan1 (0 1 0); + tan2 (0 0 1); +} + +patchLocalCoeffs +{ + patch patchName; //Normal direction is facenormal of zero'th face of patch + tan1 (0 1 0); + tan2 (0 0 1); +} + +// List of directions to refine +directions +( + tan1 + tan2 + normal +); + +// Whether to use hex topology. This will +// - if patchLocal: all cells on selected patch should be hex +// - split all hexes in 2x2x2 through the middle of edges. +useHexTopology true; + +// Cut purely geometric (will cut hexes through vertices) or take topology +// into account. Incompatible with useHexTopology +geometricCut false; + +// Write meshes from intermediate steps +writeMesh false; + +// ************************************************************************* // From 11687f40b8e8f04bd6452e7ae35988b768aef26b Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 7 Jun 2011 10:34:42 +0100 Subject: [PATCH 7/8] STY: Headers change in tutorial --- .../fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault | 4 ++-- .../constant/panelRegion/chemistryProperties | 2 +- .../les/oppositeBurningPanels/constant/radiationProperties | 4 ++-- .../fireFoam/les/oppositeBurningPanels/system/refineMeshDict | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault index 6835758e27..77bcb76e39 100755 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.7 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties index 3a803e8b10..bef3a6db5e 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.7.0 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties index 70e53cfd14..16f7207638 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict index db2ca3e3b0..2735737bb8 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.6 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ From 3648f3953dbc0a26918833cfe789bfb71a557241 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 7 Jun 2011 10:37:23 +0100 Subject: [PATCH 8/8] STY: Web address --- tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 | 2 +- .../les/oppositeBurningPanels/constant/combustionProperties | 2 +- .../les/oppositeBurningPanels/constant/polyMesh/blockMeshDict | 2 +- .../les/oppositeBurningPanels/constant/thermophysicalProperties | 2 +- .../fireFoam/les/oppositeBurningPanels/system/controlDict | 2 +- .../fireFoam/les/oppositeBurningPanels/system/fvSchemes | 2 +- .../fireFoam/les/oppositeBurningPanels/system/fvSolution | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 index 24a5701fc1..3b232b3642 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.openfoam.com | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties index 2693103086..c6378c0612 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict index 0f22bb42f9..75241f1947 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties index 094244696a..ae4f537c47 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.openfoam.com | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict index d64e7f0a06..586afc015e 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.openfoam.com | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes index 1675c61780..b4775a5990 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.openfoam.com | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution index 511ee374cb..74f77b4283 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | -| \\ / A nd | Web: www.openfoam.com | +| \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile