diff --git a/applications/solvers/combustion/fireFoam/Allwmake b/applications/solvers/combustion/fireFoam/Allwmake deleted file mode 100755 index f32c72860dbd12c0d8ea29e4b94bc36fb7b85547..0000000000000000000000000000000000000000 --- 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 826d736bd0f66081e00d868f15363948aa6211a5..2d50e5e7650b2b6cb48440ca6b6ddebbc91f4f2d 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 9f7a66b39e38bd6c8e73320f22a01b59bd83e2a9..cf5b4b09764eea8074ad571a9942bbb1b7b61924 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 c4a865300d2b26df03a76af95d0710d60a9f5818..a64e50a2d24d19b3f1dd25e4bc73acbcfc27a356 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) -); + fvVectorMatrix UEqn + ( + fvm::ddt(rho, U) + + fvm::div(phi, U) + + turbulence->divDevRhoReff(U) + == + parcels.SU(U) + ); -UEqn.relax(); + UEqn.relax(); -if (pimple.momentumPredictor()) -{ - solve - ( - UEqn - == - fvc::reconstruct + if (pimple.momentumPredictor()) + { + solve ( + UEqn + == + fvc::reconstruct ( - - ghf*fvc::snGrad(rho) - - fvc::snGrad(p_rgh) - )*mesh.magSf() - ) - ); -} + ( + - 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 99% rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H rename to applications/solvers/combustion/fireFoam/YhsEqn.H index 18ebd5915f69e76d97bc63c4b3ea2abbb8ad46ab..aed41a4431359997c531556cab966fd23d2c514e 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H +++ b/applications/solvers/combustion/fireFoam/YhsEqn.H @@ -9,6 +9,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection ) ); { + radiation->correct(); combustion->correct(); dQ = combustion->dQ(); label inertIndex = -1; @@ -65,7 +66,5 @@ tmp<fv::convectionScheme<scalar> > mvConvection thermo.correct(); - radiation->correct(); - Info<< "min/max(T) = " << min(T).value() << ", " << max(T).value() << endl; } diff --git a/applications/solvers/combustion/fireFoam/combustionModels/Make/files b/applications/solvers/combustion/fireFoam/combustionModels/Make/files deleted file mode 100644 index bef447f0b0d9bf3da970aca33fdb029843e3ca33..0000000000000000000000000000000000000000 --- 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 3f557113c4810506ff138816c8473206d06f49fb..0000000000000000000000000000000000000000 --- 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 bd5f92db36b6f486efc507d22fb1e73b4de094e2..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#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::fvScalarMatrix> -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::volScalarField> 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 1aa44ffcad15cf0e5d9ce903263e2ea4767c40c5..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -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<combustionModel> 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<volScalarField> wFuelNorm() const = 0; - - //- Fuel consumption rate matrix i.e. source-term for the fuel equation - virtual tmp<fvScalarMatrix> R(volScalarField& fu) const; - - //- Heat-release rate calculated from the given - // fuel consumption rate matrix - virtual tmp<volScalarField> 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 7164844577ba4227e75ae3db3e9dfbd57e49e70a..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#include "combustionModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -Foam::autoPtr<Foam::combustionModel> 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<combustionModel> - (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 f147911f765fa2ee94ffbaceffb3978bda4c362d..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#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::volScalarField> -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 80d55328dfe295d8deaa61ff9df46e4d65adf75f..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -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<volScalarField> 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 fd709b75e1699acf92b3c95d469f28ed43ff7fd5..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#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::volScalarField> -Foam::combustionModels::noCombustion::wFuelNorm() const -{ - return tmp<Foam::volScalarField> - ( - 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 2ae12b891c507ae3b3671642eb239ebe8d81e411..0000000000000000000000000000000000000000 --- 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 <http://www.gnu.org/licenses/>. - -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<volScalarField> 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 73686c56682d8c2734550e4df957577109454894..f1e152dc320b47f428e326350f66aae48c947338 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<hsCombustionThermo> pThermo -( - hsCombustionThermo::New(mesh) -); - -hsCombustionThermo& thermo = pThermo(); - -basicMultiComponentMixture& composition = thermo.composition(); - -volScalarField rho -( - IOobject + autoPtr<hsCombustionThermo> pThermo ( - "rho", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - thermo.rho() -); - -dimensionedScalar stoicRatio -( - thermo.lookup("stoichiometricAirFuelMassRatio") -); - -volScalarField& p = thermo.p(); -volScalarField& hs = thermo.hs(); + hsCombustionThermo::New(mesh) + ); + hsCombustionThermo& thermo = pThermo(); -const volScalarField& psi = thermo.psi(); + SLGThermo slgThermo(mesh, thermo); -volScalarField& ft = composition.Y("ft"); -volScalarField& fu = composition.Y("fu"); + basicMultiComponentMixture& composition = thermo.composition(); + PtrList<volScalarField>& Y = composition.Y(); + const word inertSpecie(thermo.lookup("inertSpecie")); -Info<< "Reading field U\n" << endl; - -volVectorField U -( - IOobject + Info<< "Creating field rho\n" << endl; + volScalarField rho ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh -); - -#include "compressibleCreatePhi.H" - -Info<< "Creating turbulence model\n" << endl; -autoPtr<compressible::turbulenceModel> turbulence -( - compressible::turbulenceModel::New(rho, U, phi, thermo) -); - -IOdictionary combustionProperties -( - IOobject + 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 ( - "combustionProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) -); - -Info<< "Creating combustion model\n" << endl; -autoPtr<combustionModel> combustion -( - combustionModel::combustionModel::New + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh + ); + + #include "compressibleCreatePhi.H" + + Info<< "Creating turbulence model\n" << endl; + autoPtr<compressible::turbulenceModel> turbulence ( - combustionProperties, - thermo, - turbulence(), - phi, - rho - ) -); - - -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 + compressible::turbulenceModel::New + ( + rho, + U, + phi, + thermo + ) + ); + + IOdictionary combustionProperties ( - "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 + IOobject + ( + "combustionProperties", + runTime.constant(), + mesh, + IOobject::MUST_READ_IF_MODIFIED, + IOobject::NO_WRITE + ) + ); + + Info<< "Creating combustion model\n" << endl; + autoPtr<combustionModel> combustion + ( + combustionModel::combustionModel::New + ( + combustionProperties, + thermo, + turbulence(), + phi, + rho + ) + ); + + volScalarField dQ ( - "dQ", - runTime.timeName(), + IOobject + ( + "dQ", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), 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); + 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) + ); -multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields; -if (composition.contains("ft")) -{ - fields.add(composition.Y("ft")); -} + Info<< "Calculating field g.h\n" << endl; + volScalarField gh("gh", g & mesh.C()); -if (composition.contains("fu")) -{ - fields.add(composition.Y("fu")); -} + surfaceScalarField ghf("ghf", g & mesh.Cf()); -fields.add(hs); + 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<scalar>::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/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 1db870f0aa76f02a89cc98748782f97fd0f1242b..8ddcc77a5f00eaf83c912e5bf90de389fb336a7f 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<filmModelType> 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 a517eccde11383f0a6f4215df73f821917d55405..7c58a722d1676bfa6a6845e754df62344e9c386a 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++) - { - #include "UEqn.H" + surfaceFilm.evolve(); - #include "ftEqn.H" - #include "fuhsEqn.H" + pyrolysis->evolve(); - // --- PISO loop - for (int corr=0; corr<pimple.nCorr(); corr++) - { - #include "pEqn.H" - } + if (solvePrimaryRegion) + { + #include "rhoEqn.H" - if (pimple.turbCorr()) + // --- PIMPLE loop + for (pimple.start(); pimple.loop(); pimple++) { - turbulence->correct(); + #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(); + 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 57406da753360b61b8b352bf5f737a64cb057bf3..0000000000000000000000000000000000000000 --- a/applications/solvers/combustion/fireFoam/ftEqn.H +++ /dev/null @@ -1,25 +0,0 @@ -tmp<fv::convectionScheme<scalar> > mvConvection -( - fv::convectionScheme<scalar>::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 6494ead4f4d7a343df5a78c4a9f7023e840dd984..0000000000000000000000000000000000000000 --- 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 6813950e19e9f2aaa48e3dc90e138fe3688350a5..5c7a4ae33e30c7b3dd4bf145e5687f500ce8857a 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 a6ab0eb14a6741700fa0379190cbc7b52b21426d..2d443c50bf9c54920dfa744ff9927adadba41fd7 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 7910a0296578f689ba0cb09fe8212f09a2eae6ae..0000000000000000000000000000000000000000 --- 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 49ab49307723b946e354d4b00e9ca46772e8d26f..0000000000000000000000000000000000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options +++ /dev/null @@ -1,51 +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)/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 a64e50a2d24d19b3f1dd25e4bc73acbcfc27a356..0000000000000000000000000000000000000000 --- 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 f1e152dc320b47f428e326350f66aae48c947338..0000000000000000000000000000000000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H +++ /dev/null @@ -1,154 +0,0 @@ - Info<< "Reading thermophysical properties\n" << endl; - - autoPtr<hsCombustionThermo> pThermo - ( - hsCombustionThermo::New(mesh) - ); - hsCombustionThermo& thermo = pThermo(); - - SLGThermo slgThermo(mesh, thermo); - - basicMultiComponentMixture& composition = thermo.composition(); - PtrList<volScalarField>& 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<compressible::turbulenceModel> 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<combustionModel> 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<scalar>::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 5c7a4ae33e30c7b3dd4bf145e5687f500ce8857a..0000000000000000000000000000000000000000 --- 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 ac029bea8642464f79f80b037ee791504bc34a92..0000000000000000000000000000000000000000 --- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C +++ /dev/null @@ -1,130 +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 <http://www.gnu.org/licenses/>. - -Application - reactingParcelFilmPyrolysisFoam - -Description - Transient PIMPLE solver for Fires and turbulent diffusion flames with - reacting Lagrangian parcels, surface film and pyrolysis modelling. - -\*---------------------------------------------------------------------------*/ - -#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 "createRadiationModel.H" - #include "createSurfaceFilmModel.H" - #include "createPyrolysisModel.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(); - } - else - { - runTime.write(); - } - - Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" - << " ClockTime = " << runTime.elapsedClockTime() << " s" - << nl << endl; - } - - Info<< "End" << endl; - - return(0); -} - - -// ************************************************************************* // diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C index e231144b9208021b21bebff47cc170a4b256e0cf..90727e381bd1e118b279af75a8ad46cab3e01957 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 f8d034ca34963952df97d50bd540e15c05e87379..580342d92a50ae650ec6bb653fcc5c9b0ad44d2b 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::scalarField> Foam::radiationCoupledBase::emissivity() const +Foam::scalarField Foam::radiationCoupledBase::emissivity() const { switch (method_) { @@ -142,6 +142,9 @@ Foam::tmp<Foam::scalarField> Foam::radiationCoupledBase::emissivity() const const polyMesh& nbrMesh = mpp.sampleMesh(); + // Force recalculation of mapping and schedule + const mapDistribute& distMap = mpp.map(); + const fvPatch& nbrPatch = refCast<const fvMesh> ( nbrMesh @@ -160,12 +163,11 @@ Foam::tmp<Foam::scalarField> 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 405d0f75a54ef6723d169f997bf1cdaaadf9d706..0b9fe86c74a618fd28976be156856cd6389e8c9a 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<scalarField> 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 45ab196b5c0780f5bae069d5aa06d97e2e2393dc..c985ea5e3a708b0126073f4a15415ba15c03dcfd 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/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C index 65749dca89726f56c0fe752fd4f6791558729623..5ac41aa0e6c3f59791254eb45d03843a1905b460 100644 --- a/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C +++ b/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C @@ -108,8 +108,6 @@ void Foam::singleStepReactingMixture<ThermoType>::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<ThermoType>::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 7d716a8a8847ccbf5b28d967d6f386316ed78a81..bd7ac96a4640222dd5ff69bb99b92fe0757f318e 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<dictionary>("chemistryProperties"); - forAll(gasThermo_, gasI) { + dictionary thermoDict = + mesh.lookupObject<dictionary> + ( + "chemistryProperties" + ).subDict(pyrolisisGases_[gasI]); + gasThermo_.set ( gasI, - new GasThermo(thermoDict.lookup(pyrolisisGases_[gasI])) + new GasThermo(thermoDict) ); } @@ -275,7 +277,6 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::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<CompType, SolidThermo, GasThermo>::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<CompType, SolidThermo, GasThermo>::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<CompType, SolidThermo, GasThermo>::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); } diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C index 262b9da61f0256a1efae6baa70f5835c63a7bf6d..b5f81301b593e428c6bc56d5523323252fe20ecd 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<const fvMesh>(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<volScalarField, scalar>(QrNbrName_); - mpp.map().distribute(QrNbr); + distMap.distribute(QrNbr); } scalarField alpha(KDeltaNbr - (Qr + QrNbr)/Tp); diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 new file mode 100644 index 0000000000000000000000000000000000000000..3b232b3642a7cb5f792a18b2d17c81cd2e334560 --- /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 0000000000000000000000000000000000000000..77797e828abeaf12d89d0a590a894c85beebec47 --- /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 0000000000000000000000000000000000000000..901e8fa36c87404ada89391e944d321a40e905ae --- /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 0000000000000000000000000000000000000000..9167d834acf43c03c223f333951790797ec1a250 --- /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 0000000000000000000000000000000000000000..6e28b36318d0a95e7a4ff595b53993c0680a9f10 --- /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 0000000000000000000000000000000000000000..2fe05e7a26c4ef6c88c94d8b96d9be945dde83c9 --- /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 0000000000000000000000000000000000000000..5e6d1eba5b6b99abc15f8d3400f3f84c77e509cd --- /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 0000000000000000000000000000000000000000..948eedffbda16d2dd7afe8ef806bbb1c92a2e10e --- /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 0000000000000000000000000000000000000000..f7c0531029e26da5cd4b22e26a3a0f41b920dca3 --- /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 0000000000000000000000000000000000000000..5e2ea9252c3aeeb0860a7d2cf074aea9d6f930c5 --- /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 0000000000000000000000000000000000000000..7cd9c8727d5fd2eb6eb1973271a5095207acb20f --- /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 0000000000000000000000000000000000000000..e21fb90581a2ce5d0d34dd3bf724750bf1f39cbc --- /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 0000000000000000000000000000000000000000..e81ca0200252518827a92488006f4bb9e22ae32b --- /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 0000000000000000000000000000000000000000..3a2ee1dfad03c71c08d33c50754b66d6c2017687 --- /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/smallPoolFire3D/0/b b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default old mode 100644 new mode 100755 similarity index 86% rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default index 242f45c9433d5e0c38dbd781351fee02196f2582..77bcb76e39a4a772ba44179cac1136f63f77b161 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object b; + object Ydefault; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,23 +21,26 @@ internalField uniform 0; boundaryField { - outlet + + ".*" { type zeroGradient; } - sides + + fRight_zone_side { - type zeroGradient; + type wedge; } - base + + fLeft_zone_side { - type zeroGradient; + type wedge; } - inlet + + "(region0_to.*)" { type zeroGradient; } - } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault old mode 100644 new mode 100755 similarity index 84% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault index 69d723a7e10054813556b11c8e44bee2d23f9853..77bcb76e39a4a772ba44179cac1136f63f77b161 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object b; + object Ydefault; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,26 +21,26 @@ internalField uniform 0; boundaryField { - outlet + + ".*" { type zeroGradient; } - sides + + fRight_zone_side { - type zeroGradient; + type wedge; } - base + + fLeft_zone_side { - type zeroGradient; + type wedge; } - inlet + + "(region0_to.*)" { type zeroGradient; } - frontBack - { - type empty; - } } 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 0000000000000000000000000000000000000000..7f2048e1e94ff3312de1ad4d14b1caf3708fdf6f --- /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/applications/solvers/combustion/fireFoam/Allwclean b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean similarity index 53% rename from applications/solvers/combustion/fireFoam/Allwclean rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean index 713a0552018db8ec0774d506ed003e54a58054df..07dc128240dd5705bf192dcc6f40d91e770e01a6 100755 --- a/applications/solvers/combustion/fireFoam/Allwclean +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean @@ -1,8 +1,10 @@ #!/bin/sh cd ${0%/*} || exit 1 # run from this directory -set -x -wclean libso combustionModels -wclean +# 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 0000000000000000000000000000000000000000..17b4dd27afd7cd43849767b9d0dc1827ea716a2a --- /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 0000000000000000000000000000000000000000..526bfc6a738fad8a5de7c18642399a386a799a8e --- /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 0000000000000000000000000000000000000000..0967c7e0799d7b90f399b760f096e46f8bfe5923 --- /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 0000000000000000000000000000000000000000..af372fbcbec69d98d26ebbc0e17c1158c3590e12 --- /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 0000000000000000000000000000000000000000..fca4f15a5cacd9815e78fb5fd469bb34807f1c5e --- /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<gasThermoPhysics>; + +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 0000000000000000000000000000000000000000..c6378c0612e0b1e1bfd5f9f4ddcbbf9a3b723e70 --- /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.com | +| \\/ 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 0000000000000000000000000000000000000000..710f2a6ab52f36f1f771df6bec241ee2361134c5 --- /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 0000000000000000000000000000000000000000..07dc8690bb106cb53695b765b617e1eb8a5d167a --- /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 0000000000000000000000000000000000000000..bef3a6db5e883fb34e680752c4e4a9cea86f1648 --- /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: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format binary; + class dictionary; + location "constant"; + object chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solidChemistryModel ODESolidChemistryModel<constSolidThermoPhysics>; + +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/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties similarity index 52% rename from tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties index 39c75e0d212e04c31d992b8a6bc1e7be7caa6a45..855cb612f4ac82d3794c5b159abd6821ac0f0349 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties @@ -9,50 +9,63 @@ FoamFile { version 2.0; format ascii; - class polyBoundaryMesh; - location "constant/polyMesh"; - object boundary; + class dictionary; + object solidThermophysicalProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -6 +thermoType +solidMixtureThermo<reactingSolidMixture<constSolidTransport<constSolidRad<constSolidThermo<constRho>>>>>; + +solidComponents ( - maxY + v char +); + +vCoeffs +{ + transport + { + K 0.135; + } + radiation { - type wall; - nFaces 300; - startFace 8300; + sigmaS 0.0; + kappa 0.0; //opaque + emissivity 0.17; } - minX + thermodynamics { - type patch; - nFaces 100; - startFace 8600; + Cp 696; + Hf -1.41e6; } - maxX + density + { + rho 114.7; + } +}; + +charCoeffs +{ + transport { - type patch; - nFaces 100; - startFace 8700; + K 0.4; } - minY + radiation { - type wall; - nFaces 300; - startFace 8800; + sigmaS 0.0; + kappa 0.0; + emissivity 0.85; } - minZ + thermodynamics { - type wall; - nFaces 300; - startFace 9100; + Cp 611; + Hf 0; } - maxZ + density { - type wall; - nFaces 300; - startFace 9400; + 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 0000000000000000000000000000000000000000..75241f19471efb1ef10e78889200c9ded8050cdb --- /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.com | +| \\/ 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 0000000000000000000000000000000000000000..aba5535e401a9c00c5975e33e364599eb4d02397 --- /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 0000000000000000000000000000000000000000..16f720763867d797e80d191cc31e870c136343f9 --- /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: dev | +| \\ / A nd | Web: www.OpenFOAM.com | +| \\/ 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 0000000000000000000000000000000000000000..f975d237d38c9a9f91f615b90996e21d78a04924 --- /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 0000000000000000000000000000000000000000..5f29a1d87257a272858a2dbeed2ce599b8f7918d --- /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 0000000000000000000000000000000000000000..db5db22ec3ca2858880cd1644c582b526a90019d --- /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 0000000000000000000000000000000000000000..e5c21d81c7fc7076fb0b88c18bb44791ae1ed977 --- /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 0000000000000000000000000000000000000000..ae4f537c47fdaa7f83d1fab5bbe94b880863252c --- /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<singleStepReactingMixture<gasThermoPhysics>>; + + +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 0000000000000000000000000000000000000000..574f7f99b213508c2ad5b35a9cb3f2d4a367904e --- /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 0000000000000000000000000000000000000000..10dfed3e4a81368889da1d0cdabd8a853f0f0792 --- /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 0000000000000000000000000000000000000000..eebf5d28b30c20bb406310053bfdc907ef7a09de --- /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 0000000000000000000000000000000000000000..75644274d55e4b78b9edc3e064e75b2fa450c226 --- /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 0000000000000000000000000000000000000000..586afc015e058c12e2072dc07f9899fc0c3f1abc --- /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 0000000000000000000000000000000000000000..0cc1b3d564d1457be271d75b25b338c3839a4464 --- /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 0000000000000000000000000000000000000000..1b4915684a65e65265d0f680e38875c11a3cc7c6 --- /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 0000000000000000000000000000000000000000..5d47b1b657c4b5d1f73155c82e31dfa45383080e --- /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 0000000000000000000000000000000000000000..b4775a599000844ec36b19c5b1c693be62fb83ec --- /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 0000000000000000000000000000000000000000..74f77b4283f460e1478cc8b1184ea712fd5e8100 --- /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 0000000000000000000000000000000000000000..49efdc7a03b83d57b9bd734508d1a1b20cc311ef --- /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 0000000000000000000000000000000000000000..5d3a6809a33fa262929f9e9fda321050a634263d --- /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 0000000000000000000000000000000000000000..98aec611d77b50f4acce6ea658f6aafd191d330a --- /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 0000000000000000000000000000000000000000..2735737bb826b72d57390fdbf6162031daf709d3 --- /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: dev | +| \\ / 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; + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 similarity index 98% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 index 8451b3a9efb36e534d3d2faef0f86bc0363d8f27..0b1e0de832de26e3b346ee85c47d3188e7e9bd37 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object fu; + 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 0000000000000000000000000000000000000000..d03d685b405a00e177a447500e24432f60173ec9 --- /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 0000000000000000000000000000000000000000..b433139678f169ca2a8d21e89b1d262721cfc6f7 --- /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/ft 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/ft rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault index d84a10a7d653e81a04ca98eb08c8cc7cce4e2099..9536e7a9f2e144881e276b928aff2533ec9bf383 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object ft; + object Ydefault; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,26 +21,29 @@ internalField uniform 0; boundaryField { - outlet + base { - type inletOutlet; - inletValue uniform 0; - value uniform 0; + type zeroGradient; } - sides + + outlet { type inletOutlet; - inletValue uniform 0; - value uniform 0; - } - base - { - type zeroGradient; + 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 e387970281a9821705966649484bbf24343832d7..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..af372fbcbec69d98d26ebbc0e17c1158c3590e12 --- /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/smallPoolFire2D/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties new file mode 100644 index 0000000000000000000000000000000000000000..fca4f15a5cacd9815e78fb5fd469bb34807f1c5e --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/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<gasThermoPhysics>; + +chemistry off; + +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 0000000000000000000000000000000000000000..3dfb0fbe7153e173cdc5c627b55078ced053771f --- /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 d7b2c3f4e38267cd4802f7d1d330a0f10753ff63..8d7ce6f129074f9c5a1e8cc7a9236559f352a060 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 0000000000000000000000000000000000000000..f975d237d38c9a9f91f615b90996e21d78a04924 --- /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 0000000000000000000000000000000000000000..c174cf789ecfdfbaf6128592efbd6123e013f690 --- /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 0000000000000000000000000000000000000000..db5db22ec3ca2858880cd1644c582b526a90019d --- /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 0000000000000000000000000000000000000000..367faadefd70ebf2c4d580105ef0ea3a76dc4dad --- /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 021d55435533c1b0946c50504e9f63b1d864a44a..f593a1dd1264a63aebc98419d9edacb6369ef97f 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties @@ -15,79 +15,23 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hsPsiMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>; +thermoType hsPsiMixtureThermo<singleStepReactingMixture<gasThermoPhysics>>; -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 -{ - 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; - } -} +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas"; -oxidant +liquids { - 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; - } -} + liquidComponents + (); -burntProducts -{ -specie -{ - nMoles 1; - molWeight 27.6334; + H2O H2O defaultCoeffs; } -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 4402f372524239fd37cf34718cfb27eff9b5beb2..5c8063431d1ba700472f497ecd6d10701c8368fe 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 10c1c27de7506d06df5735086d5f8661e0aa782f..5a7b7a980a4652f368af9e122b3f3b8f93119d90 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 d24a5478e180909c4c274b78b140437fb0b7b837..219f5ffe6097a249e767bbdd3b62f1a617d6458a 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 0000000000000000000000000000000000000000..c1511f982799e593750ece78b3d4eb87c811a581 --- /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 0000000000000000000000000000000000000000..b433139678f169ca2a8d21e89b1d262721cfc6f7 --- /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 8782fc3987226248544dff0e07fd18506d70013f..bc81b33f523e33c8b03b6404dcf7419a659d9379 --- 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 + base { - type inletOutlet; - inletValue uniform 0; - value uniform 0; + type zeroGradient; } - sides + + outlet { type inletOutlet; - inletValue uniform 0; - value uniform 0; - } - base - { - type zeroGradient; + 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 e387970281a9821705966649484bbf24343832d7..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..af372fbcbec69d98d26ebbc0e17c1158c3590e12 --- /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/smallPoolFire3D/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties new file mode 100644 index 0000000000000000000000000000000000000000..fca4f15a5cacd9815e78fb5fd469bb34807f1c5e --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/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<gasThermoPhysics>; + +chemistry off; + +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 0000000000000000000000000000000000000000..3dfb0fbe7153e173cdc5c627b55078ced053771f --- /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 e48fc02f42e395678b75379c7cd5fe89fbd056aa..ff2d2c0d2448835c63d4971b6363928ce3b9a7fd 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 0000000000000000000000000000000000000000..f975d237d38c9a9f91f615b90996e21d78a04924 --- /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 0000000000000000000000000000000000000000..c174cf789ecfdfbaf6128592efbd6123e013f690 --- /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 0000000000000000000000000000000000000000..db5db22ec3ca2858880cd1644c582b526a90019d --- /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 0000000000000000000000000000000000000000..367faadefd70ebf2c4d580105ef0ea3a76dc4dad --- /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 9060c18a70884fe51828e299fff28f54435f5828..f593a1dd1264a63aebc98419d9edacb6369ef97f 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties @@ -15,79 +15,23 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -thermoType hsPsiMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>; +thermoType hsPsiMixtureThermo<singleStepReactingMixture<gasThermoPhysics>>; -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 -{ - 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; - } -} +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas"; -oxidant +liquids { - 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; - } -} + liquidComponents + (); -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; - } + H2O H2O defaultCoeffs; } - // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes index ce3527c1531bec417a2d889e396378ba1c874924..eed3d8330130d88618267aa02db972201d58dc95 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 ef95fada40f1ed14d204e24830c26b5e5b397720..37e6164a4f57aa1753948a1ae5a798e1d7f473c1 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; +} + // ************************************************************************* // diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G index 993b5237c3226380e7c25bd56fa6af96997ae926..3ae5fafc79444698d9f8aca27c7ceb72b5feeb0a 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;