diff --git a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C index 208b7b9ce9816741241969f37bc9ff11e89ba6dc..475e48a1cc02d1eb38652be80d74955b90762f75 100644 --- a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C +++ b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C @@ -37,7 +37,7 @@ Description #include "fvCFD.H" #include "turbulenceModel.H" -#include "fluidThermoCloud.H" +#include "basicThermoCloud.H" #include "coalCloud.H" #include "psiCombustionModel.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H b/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H index 87c882c9a6a34a67136fe5c844e1c175830ea23a..5dcfe1df4fa11c97439b34517bb6edf4ebae649e 100644 --- a/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H +++ b/applications/solvers/lagrangian/coalChemistryFoam/createClouds.H @@ -9,7 +9,7 @@ coalCloud coalParcels ); Info<< "\nConstructing limestone cloud" << endl; -fluidThermoCloud limestoneParcels +basicThermoCloud limestoneParcels ( "limestoneCloud1", rho, diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/EEqns.H b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/EEqns.H index 1f12fc9a121bcdafe7f9ea906210bbd83d6c140c..1810bdd4d9f07377f8f7cb42702f3bd4e4a19ef9 100644 --- a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/EEqns.H +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/EEqns.H @@ -28,8 +28,8 @@ + ( he1.name() == thermo1.phasePropertyName("e") - ? fvc::div(alphaPhi1, p) - : -dalpha1pdt + ? fvc::ddt(alpha1)*p + fvc::div(alphaPhi1, p) + : -alpha1*dpdt )/rho1 - fvm::laplacian(k1, he1) @@ -50,8 +50,8 @@ + ( he2.name() == thermo2.phasePropertyName("e") - ? fvc::div(alphaPhi2, p) - : -dalpha2pdt + ? fvc::ddt(alpha2)*p + fvc::div(alphaPhi2, p) + : -alpha2*dpdt )/rho2 - fvm::laplacian(k2, he2) diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createFields.H b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createFields.H index cc5b3ebe21915bc2b19c97c32a3bc067a28b73d7..5b030b95ea64522589ec0583b07e58b51f61d73f 100644 --- a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createFields.H +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/createFields.H @@ -275,8 +275,8 @@ ); - Info<< "Creating field dalpha1pdt\n" << endl; - volScalarField dalpha1pdt + Info<< "Creating field dpdt\n" << endl; + volScalarField dpdt ( IOobject ( @@ -285,21 +285,9 @@ mesh ), mesh, - dimensionedScalar("dalpha1pdt", p.dimensions()/dimTime, 0) + dimensionedScalar("dpdt", p.dimensions()/dimTime, 0) ); - Info<< "Creating field dalpha2pdt\n" << endl; - volScalarField dalpha2pdt - ( - IOobject - ( - "dpdt", - runTime.timeName(), - mesh - ), - mesh, - dimensionedScalar("dalpha2pdt", p.dimensions()/dimTime, 0) - ); Info<< "Creating field kinetic energy K\n" << endl; volScalarField K1("K" + phase1Name, 0.5*magSqr(U1)); diff --git a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H index 02e49b56618430559a3482700ec6fa02971f22c9..756a231fc2f589ad5bb35bc021d44737260d38b5 100644 --- a/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H +++ b/applications/solvers/multiphase/compressibleTwoPhaseEulerFoam/pEqn.H @@ -208,13 +208,8 @@ K1 = 0.5*magSqr(U1); K2 = 0.5*magSqr(U2); - if (thermo1.dpdt()) + if (thermo1.dpdt() || thermo2.dpdt()) { - dalpha1pdt = fvc::ddt(alpha1, p); - } - - if (thermo2.dpdt()) - { - dalpha2pdt = fvc::ddt(alpha2, p); + dpdt = fvc::ddt(p); } } diff --git a/applications/solvers/multiphase/interFoam/interMixingFoam/threePhaseInterfaceProperties/threePhaseInterfaceProperties.C b/applications/solvers/multiphase/interFoam/interMixingFoam/threePhaseInterfaceProperties/threePhaseInterfaceProperties.C index e16f83bd2e8cd79ba3a112dc4763085e4a0c1e8c..f7edec641502a8bf50baab79700fa53d10958e27 100644 --- a/applications/solvers/multiphase/interFoam/interMixingFoam/threePhaseInterfaceProperties/threePhaseInterfaceProperties.C +++ b/applications/solvers/multiphase/interFoam/interMixingFoam/threePhaseInterfaceProperties/threePhaseInterfaceProperties.C @@ -174,8 +174,10 @@ Foam::threePhaseInterfaceProperties::threePhaseInterfaceProperties ( readScalar ( - mixture.U().mesh().solutionDict().subDict("PIMPLE"). - lookup("cAlpha") + mixture.U().mesh().solverDict + ( + mixture_.alpha1().name() + ).lookup("cAlpha") ) ), sigma12_(mixture.lookup("sigma12")), diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C b/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C index 5e142f9d857dc756bb5d81246e7a4907d64416dd..9d7acc986d5dc09e02f8a2ef66dac353d58de8ae 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C @@ -148,7 +148,7 @@ bool Foam::checkWedges { Info<< " ***Wedge patch " << pp.name() << " not planar." << " Point " << pt << " is not in patch plane by " - << d << " meter." + << d << " metre." << endl; } return true; diff --git a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C index 00df77dfc522e7579b92dd2f32cde08872ca957c..9be145648fa8ae53ee6e0c9c6090b5f71288ea2a 100644 --- a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C +++ b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C @@ -62,7 +62,7 @@ int main(int argc, char *argv[]) boundBox bb(points); Info<< "bounding box: min = " << bb.min() - << " max = " << bb.max() << " meters." + << " max = " << bb.max() << " metres." << endl; diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index d29bfeca1a21cb8199fed3ed79782365e0a8200f..d253be35178eefcf1885e8f148f0b4761b9b98a5 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -1043,7 +1043,6 @@ int main(int argc, char *argv[]) surfaceMeshWriter writer ( - vMesh, binary, pp, fz.name(), diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.C index dc37b02d457dbca1212d53acf0d578d99b64aef0..08840858049eb45779373a2a18cc63cdd7c115bc 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,14 +30,12 @@ License Foam::surfaceMeshWriter::surfaceMeshWriter ( - const vtkMesh& vMesh, const bool binary, const indirectPrimitivePatch& pp, const word& name, const fileName& fName ) : - vMesh_(vMesh), binary_(binary), pp_(pp), fName_(fName), @@ -78,8 +76,4 @@ Foam::surfaceMeshWriter::surfaceMeshWriter } -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - - // ************************************************************************* // diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.H index 66bfbdb91b0eca36ef09c2ac3884d2673227360e..a89ba19582136085737dc053c672aaf7a050daf8 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriter.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,13 +53,11 @@ namespace Foam class volPointInterpolation; /*---------------------------------------------------------------------------*\ - Class surfaceMeshWriter Declaration + Class surfaceMeshWriter Declaration \*---------------------------------------------------------------------------*/ class surfaceMeshWriter { - const vtkMesh& vMesh_; - const bool binary_; const indirectPrimitivePatch& pp_; @@ -68,9 +66,6 @@ class surfaceMeshWriter std::ofstream os_; -// label nPoints_; -// -// label nFaces_; public: @@ -79,7 +74,6 @@ public: //- Construct from components surfaceMeshWriter ( - const vtkMesh&, const bool binary, const indirectPrimitivePatch& pp, const word& name, @@ -94,19 +88,6 @@ public: return os_; } -// label nPoints() const -// { -// return nPoints_; -// } -// -// label nFaces() const -// { -// return nFaces_; -// } -// -// //- Write cellIDs -// void writePatchIDs(); - //- Extract face data template<class Type> tmp<Field<Type> > getFaceField diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriterTemplates.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriterTemplates.C index f3c3db6bdcf2b98c895b80bf4c118c929e7b73d5..3ae7b08be26cb3671fba616b9c258490260f0358 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriterTemplates.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/surfaceMeshWriterTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/postProcessing/graphics/PV398Readers/PV398FoamReader/vtkPV398Foam/vtkPV398FoamMesh.C b/applications/utilities/postProcessing/graphics/PV398Readers/PV398FoamReader/vtkPV398Foam/vtkPV398FoamMesh.C index b4fc7858b22302ad4cb4ebf5a64b99a5ed1369a4..c04f2be85a555c52be5a1f4fc3a8db339bbeddf8 100644 --- a/applications/utilities/postProcessing/graphics/PV398Readers/PV398FoamReader/vtkPV398Foam/vtkPV398FoamMesh.C +++ b/applications/utilities/postProcessing/graphics/PV398Readers/PV398FoamReader/vtkPV398Foam/vtkPV398FoamMesh.C @@ -179,12 +179,13 @@ void Foam::vtkPV398Foam::convertMeshPatches const word patchName = getPartName(partId); - labelHashSet patchIds(patches.patchSet(List<wordRe>(1, patchName))); + labelHashSet + patchIds(patches.patchSet(List<wordRe>(1, wordRe(patchName)))); if (debug) { Info<< "Creating VTK mesh for patches [" << patchIds <<"] " - << patchName << endl; + << patchName << endl; } vtkPolyData* vtkmesh = NULL; diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index fb36589061da30f47554bd93d38876b8076d5199..a01705595849555fb88428ec101d8e796c1f4ba5 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -435,7 +435,7 @@ int main(int argc, char *argv[]) scalar smallDim = 1e-6 * bb.mag(); Info<< "Checking for points less than 1e-6 of bounding box (" - << bb.span() << " meter) apart." + << bb.span() << " metre) apart." << endl; // Sort points diff --git a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C index b63686881ae08d6baab542a9d1d77df7591299bf..585072d7c02e8ece5a1debfe5121fe96bcd3a67d 100644 --- a/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C +++ b/applications/utilities/surface/surfacePointMerge/surfacePointMerge.C @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) const fileName outFileName = args[3]; Info<< "Reading surface from " << surfFileName << " ..." << endl; - Info<< "Merging points within " << mergeTol << " meter." << endl; + Info<< "Merging points within " << mergeTol << " metre." << endl; triSurface surf1(surfFileName); diff --git a/etc/config/settings.csh b/etc/config/settings.csh index a909e02de69799ddaa6c2a63f12d12b4a24fcb29..a276a9716725b88a466290744756dd6390d9d675 100644 --- a/etc/config/settings.csh +++ b/etc/config/settings.csh @@ -224,6 +224,13 @@ case ThirdParty: set mpfr_version=mpfr-3.1.0 set mpc_version=mpc-0.9 breaksw + case Gcc48: + case Gcc48++0x: + set gcc_version=gcc-4.8.0 + set gmp_version=gmp-5.0.4 + set mpfr_version=mpfr-3.1.0 + set mpc_version=mpc-0.9 + breaksw case Gcc47: case Gcc47++0x: set gcc_version=gcc-4.7.2 diff --git a/etc/config/settings.sh b/etc/config/settings.sh index 1d4800d471bd8462b3f4c89ca415f9142eeecd1d..0a46c308a9cbab995f1d5ca63130e4dc3391d703 100644 --- a/etc/config/settings.sh +++ b/etc/config/settings.sh @@ -246,6 +246,12 @@ OpenFOAM | ThirdParty) mpfr_version=mpfr-3.1.0 mpc_version=mpc-0.9 ;; + Gcc48 | Gcc48++0x) + gcc_version=gcc-4.8.0 + gmp_version=gmp-5.0.4 + mpfr_version=mpfr-3.1.0 + mpc_version=mpc-0.9 + ;; Gcc47 | Gcc47++0x) gcc_version=gcc-4.7.2 gmp_version=gmp-5.0.4 diff --git a/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C b/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C index 986922f61d8c83c2ff8d15bc9cba785c427ca4bf..00aabb3bd61b8e2ec2a6a59868de6bbd44a4e434 100644 --- a/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C +++ b/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C @@ -1542,7 +1542,7 @@ void Foam::faceCoupleInfo::perfectPointMatch ) << "Did not match all of the master faces to the slave faces" << endl << "This usually means that the slave patch and master patch" - << " do not align to within " << absTol << " meter." + << " do not align to within " << absTol << " metre." << abort(FatalError); } diff --git a/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C b/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C index a1cfc83aebe47fd7c87ece182fc09465df179594..3241a79c2de88e7ec9299f491fa1ae6435f5c597 100644 --- a/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C +++ b/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C @@ -485,7 +485,7 @@ Foam::polyMeshFilter::polyMeshFilter(const fvMesh& mesh) faceFilterFactor_() { Info<< "Merging:" << nl - << " edges with length less than " << minLen_ << " meters" << nl + << " edges with length less than " << minLen_ << " metres" << nl << " edges split by a point with edges in line to within " << radToDeg(::acos(maxCos_)) << " degrees" << nl << " Minimum edge length reduction factor = " diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 5f87a9ceef9f8e2de3b3df88a3b47455f57a5c5d..35a308ff000e995d632460df6f2b26885522fcba 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -181,6 +181,7 @@ $(derivedFvPatchFields)/translatingWallVelocity/translatingWallVelocityFvPatchVe $(derivedFvPatchFields)/turbulentInlet/turbulentInletFvPatchFields.C $(derivedFvPatchFields)/turbulentIntensityKineticEnergyInlet/turbulentIntensityKineticEnergyInletFvPatchScalarField.C $(derivedFvPatchFields)/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C +$(derivedFvPatchFields)/uniformFixedGradient/uniformFixedGradientFvPatchFields.C $(derivedFvPatchFields)/uniformFixedValue/uniformFixedValueFvPatchFields.C $(derivedFvPatchFields)/uniformJump/uniformJumpFvPatchFields.C $(derivedFvPatchFields)/uniformJumpAMI/uniformJumpAMIFvPatchFields.C @@ -402,5 +403,4 @@ $(SRF)/SRFModel/rpm/rpm.C $(SRF)/derivedFvPatchFields/SRFVelocityFvPatchVectorField/SRFVelocityFvPatchVectorField.C $(SRF)/derivedFvPatchFields/SRFFreestreamVelocityFvPatchVectorField/SRFFreestreamVelocityFvPatchVectorField.C - LIB = $(FOAM_LIBBIN)/libfiniteVolume diff --git a/src/finiteVolume/cfdTools/general/include/alphaControls.H b/src/finiteVolume/cfdTools/general/include/alphaControls.H index b5ae1f94d83db4f45bd267e0a700a318f1482e79..c172904f4f0fc6e88bb5dc788ed98c4f9a46210e 100644 --- a/src/finiteVolume/cfdTools/general/include/alphaControls.H +++ b/src/finiteVolume/cfdTools/general/include/alphaControls.H @@ -1,7 +1,7 @@ const dictionary& alphaControls = mesh.solverDict(alpha1.name()); label nAlphaCorr(readLabel(alphaControls.lookup("nAlphaCorr"))); label nAlphaSubCycles(readLabel(alphaControls.lookup("nAlphaSubCycles"))); -Switch MULESCorr(alphaControls.lookup("MULESCorr")); +Switch MULESCorr(alphaControls.lookupOrDefault<Switch>("MULESCorr", false)); if (nAlphaSubCycles > 1 && pimple.nCorrPIMPLE() != 1) { diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchField.C new file mode 100644 index 0000000000000000000000000000000000000000..877e413dbed58111a2d8f9fa247def60ea3c4f12 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchField.C @@ -0,0 +1,172 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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 "uniformFixedGradientFvPatchField.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class Type> +uniformFixedGradientFvPatchField<Type>::uniformFixedGradientFvPatchField +( + const fvPatch& p, + const DimensionedField<Type, volMesh>& iF +) +: + fixedGradientFvPatchField<Type>(p, iF), + uniformGradient_() +{} + + +template<class Type> +uniformFixedGradientFvPatchField<Type>::uniformFixedGradientFvPatchField +( + const fvPatch& p, + const DimensionedField<Type, volMesh>& iF, + const Field<Type>& fld +) +: + fixedGradientFvPatchField<Type>(p, iF, fld), + uniformGradient_() +{} + + +template<class Type> +uniformFixedGradientFvPatchField<Type>::uniformFixedGradientFvPatchField +( + const uniformFixedGradientFvPatchField<Type>& ptf, + const fvPatch& p, + const DimensionedField<Type, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedGradientFvPatchField<Type>(ptf, p, iF, mapper), + uniformGradient_(ptf.uniformGradient_().clone().ptr()) +{ + // For safety re-evaluate + const scalar t = this->db().time().timeOutputValue(); + this->gradient() = uniformGradient_->value(t); +} + + +template<class Type> +uniformFixedGradientFvPatchField<Type>::uniformFixedGradientFvPatchField +( + const fvPatch& p, + const DimensionedField<Type, volMesh>& iF, + const dictionary& dict +) +: + fixedGradientFvPatchField<Type>(p, iF), + uniformGradient_(DataEntry<Type>::New("uniformGradient", dict)) +{ + if (dict.found("gradient")) + { + this->gradient() = Field<Type>("gradient", dict, p.size()); + } + else + { + const scalar t = this->db().time().timeOutputValue(); + this->gradient() = uniformGradient_->value(t); + } +} + + +template<class Type> +uniformFixedGradientFvPatchField<Type>::uniformFixedGradientFvPatchField +( + const uniformFixedGradientFvPatchField<Type>& ptf +) +: + fixedGradientFvPatchField<Type>(ptf), + uniformGradient_ + ( + ptf.uniformGradient_.valid() + ? ptf.uniformGradient_().clone().ptr() + : NULL + ) +{} + + +template<class Type> +uniformFixedGradientFvPatchField<Type>::uniformFixedGradientFvPatchField +( + const uniformFixedGradientFvPatchField<Type>& ptf, + const DimensionedField<Type, volMesh>& iF +) +: + fixedGradientFvPatchField<Type>(ptf, iF), + uniformGradient_ + ( + ptf.uniformGradient_.valid() + ? ptf.uniformGradient_().clone().ptr() + : NULL + ) +{ + // For safety re-evaluate + const scalar t = this->db().time().timeOutputValue(); + + if (ptf.uniformGradient_.valid()) + { + this->gradient() = uniformGradient_->value(t); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Type> +void uniformFixedGradientFvPatchField<Type>::updateCoeffs() +{ + if (this->updated()) + { + return; + } + + const scalar t = this->db().time().timeOutputValue(); + this->gradient() = uniformGradient_->value(t); + + fixedGradientFvPatchField<Type>::updateCoeffs(); +} + + +template<class Type> +void uniformFixedGradientFvPatchField<Type>::write(Ostream& os) const +{ + fixedGradientFvPatchField<Type>::write(os); + uniformGradient_->writeData(os); + this->writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchField.H new file mode 100644 index 0000000000000000000000000000000000000000..5659297fecc0c37610440c7336b1e79fb302da59 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchField.H @@ -0,0 +1,193 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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::uniformFixedGradientFvPatchField + +Group + grpGenericBoundaryConditions + +Description + This boundary condition provides a uniform fixed gradient condition. + + \heading Patch usage + + \table + Property | Description | Required | Default value + uniformGradient | uniform gradient | yes | + \endtable + + Example of the boundary condition specification: + \verbatim + myPatch + { + type uniformFixedGradient; + uniformGradient constant 0.2; + } + \endverbatim + +Note + The uniformGradient entry is a DataEntry type, able to describe time + varying functions. The example above gives the usage for supplying a + constant value. + +SeeAlso + Foam::DataEntry + Foam::fixedGradientFvPatchField + +SourceFiles + uniformFixedGradientFvPatchField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef uniformFixedGradientFvPatchField_H +#define uniformFixedGradientFvPatchField_H + +#include "fixedGradientFvPatchFields.H" +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class uniformFixedGradientFvPatchField Declaration +\*---------------------------------------------------------------------------*/ + +template<class Type> +class uniformFixedGradientFvPatchField +: + public fixedGradientFvPatchField<Type> +{ + // Private data + + //- Gradient + autoPtr<DataEntry<Type> > uniformGradient_; + + +public: + + //- Runtime type information + TypeName("uniformFixedGradient"); + + + // Constructors + + //- Construct from patch and internal field + uniformFixedGradientFvPatchField + ( + const fvPatch&, + const DimensionedField<Type, volMesh>& + ); + + //- Construct from patch and internal field and patch field + uniformFixedGradientFvPatchField + ( + const fvPatch&, + const DimensionedField<Type, volMesh>&, + const Field<Type>& fld + ); + + //- Construct from patch, internal field and dictionary + uniformFixedGradientFvPatchField + ( + const fvPatch&, + const DimensionedField<Type, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given uniformFixedGradientFvPatchField + // onto a new patch + uniformFixedGradientFvPatchField + ( + const uniformFixedGradientFvPatchField<Type>&, + const fvPatch&, + const DimensionedField<Type, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + uniformFixedGradientFvPatchField + ( + const uniformFixedGradientFvPatchField<Type>& + ); + + //- Construct and return a clone + virtual tmp<fvPatchField<Type> > clone() const + { + return tmp<fvPatchField<Type> > + ( + new uniformFixedGradientFvPatchField<Type>(*this) + ); + } + + //- Construct as copy setting internal field reference + uniformFixedGradientFvPatchField + ( + const uniformFixedGradientFvPatchField<Type>&, + const DimensionedField<Type, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchField<Type> > clone + ( + const DimensionedField<Type, volMesh>& iF + ) const + { + return tmp<fvPatchField<Type> > + ( + new uniformFixedGradientFvPatchField<Type>(*this, iF) + ); + } + + + // Member functions + + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "uniformFixedGradientFvPatchField.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFields.C new file mode 100644 index 0000000000000000000000000000000000000000..a0b72644ac73045e06c772d4f05770714166b278 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFields.C @@ -0,0 +1,43 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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 "uniformFixedGradientFvPatchFields.H" +#include "addToRunTimeSelectionTable.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +makePatchFields(uniformFixedGradient); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFields.H b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFields.H new file mode 100644 index 0000000000000000000000000000000000000000..83560205a2d2f2c0bc5cde4b785cc28ba2d59c3c --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFields.H @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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/>. + +\*---------------------------------------------------------------------------*/ + +#ifndef uniformFixedGradientFvPatchFields_H +#define uniformFixedGradientFvPatchFields_H + +#include "uniformFixedGradientFvPatchField.H" +#include "fieldTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePatchTypeFieldTypedefs(uniformFixedGradient); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFieldsFwd.H b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFieldsFwd.H new file mode 100644 index 0000000000000000000000000000000000000000..9eaa07e2a69e7b2a5310a0b2ab9317cc237b2cf4 --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformFixedGradient/uniformFixedGradientFvPatchFieldsFwd.H @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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/>. + +\*---------------------------------------------------------------------------*/ + +#ifndef uniformFixedGradientFvPatchFieldsFwd_H +#define uniformFixedGradientFvPatchFieldsFwd_H + +#include "fieldTypes.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class Type> class uniformFixedGradientFvPatchField; + +makePatchTypeFieldTypedefs(uniform); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/distributionModels/uniform/uniform.C b/src/lagrangian/distributionModels/uniform/uniform.C index 4d1504b646821fcaaaa134d74b001197fa58efe7..83284905887d3fbe4527788f0ccb1c1a00fc796c 100644 --- a/src/lagrangian/distributionModels/uniform/uniform.C +++ b/src/lagrangian/distributionModels/uniform/uniform.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,8 +47,7 @@ Foam::distributionModels::uniform::uniform : distributionModel(typeName, dict, rndGen), minValue_(readScalar(distributionModelDict_.lookup("minValue"))), - maxValue_(readScalar(distributionModelDict_.lookup("maxValue"))), - range_(maxValue_ - minValue_) + maxValue_(readScalar(distributionModelDict_.lookup("maxValue"))) { check(); } diff --git a/src/lagrangian/distributionModels/uniform/uniform.H b/src/lagrangian/distributionModels/uniform/uniform.H index 5a8f6650fdba08fb2cb416918a55a7a90e55ab8d..cd4a6733a0465db228871bd336d2e332cf7cd29d 100644 --- a/src/lagrangian/distributionModels/uniform/uniform.H +++ b/src/lagrangian/distributionModels/uniform/uniform.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,9 +60,6 @@ class uniform //- Distribution maximum scalar maxValue_; - //- Distribution range - scalar range_; - public: diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files index ae4c1f9d66075f32b3590f0feebcd52a15b09ef5..9165621d6c9826698e074934e1a5831f6055c35b 100644 --- a/src/lagrangian/intermediate/Make/files +++ b/src/lagrangian/intermediate/Make/files @@ -25,7 +25,7 @@ $(KINEMATICCOLLIDINGPARCEL)/makeBasicKinematicCollidingParcelSubmodels.C /* thermo parcel sub-models */ -THERMOPARCEL=$(DERIVEDPARCELS)/fluidThermoParcel +THERMOPARCEL=$(DERIVEDPARCELS)/basicThermoParcel $(THERMOPARCEL)/defineBasicThermoParcel.C $(THERMOPARCEL)/makeBasicThermoParcelSubmodels.C diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 03765b5c5720eefd46be227fb87b188d6382c18a..66e54468e5cf9eb3239598adcde3e8b3300f4710 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -31,6 +31,7 @@ License #include "InjectionModelList.H" #include "DispersionModel.H" #include "PatchInteractionModel.H" +#include "StochasticCollisionModel.H" #include "SurfaceFilmModel.H" // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // @@ -56,6 +57,15 @@ void Foam::KinematicCloud<CloudType>::setModels() ).ptr() ); + stochasticCollisionModel_.reset + ( + StochasticCollisionModel<KinematicCloud<CloudType> >::New + ( + subModelProperties_, + *this + ).ptr() + ); + surfaceFilmModel_.reset ( SurfaceFilmModel<KinematicCloud<CloudType> >::New @@ -181,7 +191,6 @@ void Foam::KinematicCloud<CloudType>::evolveCloud(TrackData& td) if (preInjectionSize != this->size()) { updateCellOccupancy(); - preInjectionSize = this->size(); } @@ -191,6 +200,8 @@ void Foam::KinematicCloud<CloudType>::evolveCloud(TrackData& td) // Assume that motion will update the cellOccupancy as necessary // before it is required. td.cloud().motion(td); + + stochasticCollision().update(solution_.trackTime()); } else { @@ -249,6 +260,7 @@ void Foam::KinematicCloud<CloudType>::cloudReset(KinematicCloud<CloudType>& c) dispersionModel_.reset(c.dispersionModel_.ptr()); patchInteractionModel_.reset(c.patchInteractionModel_.ptr()); + stochasticCollisionModel_.reset(c.stochasticCollisionModel_.ptr()); surfaceFilmModel_.reset(c.surfaceFilmModel_.ptr()); UIntegrator_.reset(c.UIntegrator_.ptr()); @@ -338,6 +350,7 @@ Foam::KinematicCloud<CloudType>::KinematicCloud ), dispersionModel_(NULL), patchInteractionModel_(NULL), + stochasticCollisionModel_(NULL), surfaceFilmModel_(NULL), UIntegrator_(NULL), UTrans_ @@ -418,6 +431,7 @@ Foam::KinematicCloud<CloudType>::KinematicCloud injectors_(c.injectors_), dispersionModel_(c.dispersionModel_->clone()), patchInteractionModel_(c.patchInteractionModel_->clone()), + stochasticCollisionModel_(c.stochasticCollisionModel_->clone()), surfaceFilmModel_(c.surfaceFilmModel_->clone()), UIntegrator_(c.UIntegrator_->clone()), UTrans_ @@ -507,6 +521,7 @@ Foam::KinematicCloud<CloudType>::KinematicCloud injectors_(*this), dispersionModel_(NULL), patchInteractionModel_(NULL), + stochasticCollisionModel_(NULL), surfaceFilmModel_(NULL), UIntegrator_(NULL), UTrans_(NULL), diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 7cf68d8d5be1d80a0730b5c2a44a4d475fd61826..cae86032ca836ece080f114433b96ba526a185aa 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -39,6 +39,7 @@ Description - dispersion model - injection model - patch interaction model + - stochastic collision model - surface film model SourceFiles @@ -84,6 +85,9 @@ class PatchInteractionModel; template<class CloudType> class SurfaceFilmModel; +template<class CloudType> +class StochasticCollisionModel; + /*---------------------------------------------------------------------------*\ Class KinematicCloud Declaration @@ -203,6 +207,10 @@ protected: autoPtr<PatchInteractionModel<KinematicCloud<CloudType> > > patchInteractionModel_; + //- Stochastic collision model + autoPtr<StochasticCollisionModel<KinematicCloud<CloudType> > > + stochasticCollisionModel_; + //- Surface film model autoPtr<SurfaceFilmModel<KinematicCloud<CloudType> > > surfaceFilmModel_; @@ -416,6 +424,15 @@ public: inline PatchInteractionModel<KinematicCloud<CloudType> >& patchInteraction(); + //- Return const-access to the stochastic collision model + inline const + StochasticCollisionModel<KinematicCloud<CloudType> >& + stochasticCollision() const; + + //- Return reference to the stochastic collision model + inline StochasticCollisionModel<KinematicCloud<CloudType> >& + stochasticCollision(); + //- Return const-access to the surface film model inline const SurfaceFilmModel<KinematicCloud<CloudType> >& surfaceFilm() const; @@ -482,6 +499,9 @@ public: // Fields + //- Volume swept rate of parcels per cell + inline const tmp<volScalarField> vDotSweep() const; + //- Return the particle volume fraction field // Note: for particles belonging to this cloud only inline const tmp<volScalarField> theta() const; diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index 7e50b0b67c26427ea6393b612ced236c8979b09d..bef2f78a60937c00bd3626d32c63183d30275223 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -204,6 +204,22 @@ Foam::KinematicCloud<CloudType>::patchInteraction() } +template<class CloudType> +inline const Foam::StochasticCollisionModel<Foam::KinematicCloud<CloudType> >& +Foam::KinematicCloud<CloudType>::stochasticCollision() const +{ + return stochasticCollisionModel_(); +} + + +template<class CloudType> +inline Foam::StochasticCollisionModel<Foam::KinematicCloud<CloudType> >& +Foam::KinematicCloud<CloudType>::stochasticCollision() +{ + return stochasticCollisionModel_(); +} + + template<class CloudType> inline const Foam::SurfaceFilmModel<Foam::KinematicCloud<CloudType> >& Foam::KinematicCloud<CloudType>::surfaceFilm() const @@ -571,6 +587,45 @@ Foam::KinematicCloud<CloudType>::SU(volVectorField& U) const } +template<class CloudType> +inline const Foam::tmp<Foam::volScalarField> +Foam::KinematicCloud<CloudType>::vDotSweep() const +{ + tmp<volScalarField> tvDotSweep + ( + new volScalarField + ( + IOobject + ( + this->name() + ":vDotSweep", + this->db().time().timeName(), + this->db(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + mesh_, + dimensionedScalar("zero", dimless/dimTime, 0.0), + zeroGradientFvPatchScalarField::typeName + ) + ); + + volScalarField& vDotSweep = tvDotSweep(); + forAllConstIter(typename KinematicCloud<CloudType>, *this, iter) + { + const parcelType& p = iter(); + const label cellI = p.cell(); + + vDotSweep[cellI] += p.nParticle()*p.areaP()*mag(p.U() - U_[cellI]); + } + + vDotSweep.internalField() /= mesh_.V(); + vDotSweep.correctBoundaryConditions(); + + return tvDotSweep; +} + + template<class CloudType> inline const Foam::tmp<Foam::volScalarField> Foam::KinematicCloud<CloudType>::theta() const diff --git a/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H b/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H index d7a0fcf0d03056df7411dac483549f62240cbca0..84a98dd6b7bde4a4fe82d481b210d4da9471d4b8 100644 --- a/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/baseClasses/kinematicCloud/kinematicCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -100,6 +100,9 @@ public: // Fields + //- Volume swept rate of parcels per cell + virtual const tmp<volScalarField> vDotSweep() const = 0; + //- Return the particle volume fraction field // Note: for particles belonging to this cloud only virtual const tmp<volScalarField> theta() const = 0; diff --git a/src/lagrangian/intermediate/clouds/derived/fluidThermoCloud/fluidThermoCloud.H b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H similarity index 87% rename from src/lagrangian/intermediate/clouds/derived/fluidThermoCloud/fluidThermoCloud.H rename to src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H index 5f024b0ee0099523706cab737302f39d344bd82a..00ee07d17e0ed857a2820453926c99a754a875ff 100644 --- a/src/lagrangian/intermediate/clouds/derived/fluidThermoCloud/fluidThermoCloud.H +++ b/src/lagrangian/intermediate/clouds/derived/basicThermoCloud/basicThermoCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,18 +22,18 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::fluidThermoCloud + Foam::basicThermoCloud Description Cloud class to introduce thermodynamic parcels \*---------------------------------------------------------------------------*/ -#ifndef fluidThermoCloud_H -#define fluidThermoCloud_H +#ifndef basicThermoCloud_H +#define basicThermoCloud_H #include "ThermoCloud.H" -#include "fluidThermoParcel.H" +#include "basicThermoParcel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,10 +45,10 @@ namespace Foam < Cloud < - fluidThermoParcel + basicThermoParcel > > - > fluidThermoCloud; + > basicThermoCloud; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C index 186fbff0cf85f9599774c24430fc5122fbd3a642..97c531b21f0cf18f41a5e25fd6a341dfc06397db 100644 --- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -138,6 +138,8 @@ bool Foam::CollidingParcel<ParcelType>::move } p.age() += dt; + + td.cloud().functions().postMove(p, cellI, dt, td.keepParticle); } break; diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index ee860ad478dc325305b57ba1d41997a831391526..3460fe401b8866c22120e400df45c3015b9a303e 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -520,8 +520,7 @@ public: // Helper functions - //- Return the index of the face to be used in the interpolation - // routine + //- Return the index of the face used in the interpolation routine inline label faceInterpolation() const; //- Cell owner mass diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C index 9350e1251ed9208395e9f7c5f4e83a8a55da31ca..aab07b4d7ddddcc284e4a9edc1b7cb2d3cf15ea5 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -498,7 +498,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation const scalarField& YGasEff, const scalarField& YLiquidEff, const scalarField& YSolidEff, - bool& canCombust, + label& canCombust, scalarField& dMassDV, scalar& Sh, scalar& N, @@ -512,6 +512,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation ( !td.cloud().devolatilisation().active() || T < td.cloud().constProps().Tvap() + || canCombust == -1 ) { return; @@ -588,7 +589,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions const scalar d, const scalar T, const scalar mass, - const bool canCombust, + const label canCombust, const scalar N, const scalarField& YMix, const scalarField& YGas, @@ -603,7 +604,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions ) const { // Check that model is active - if (!td.cloud().surfaceReaction().active() || !canCombust) + if (!td.cloud().surfaceReaction().active() || (canCombust != 1)) { return; } diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H index db20b8d9c744607339a264404195c73b58e0a081..ff13d240b9aacee8c20d35d96b59d70f6769f1ab 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -183,9 +183,13 @@ protected: //- Mass fractions of solids [] scalarField YSolid_; - //- Flag to say that the particle is allowed to combust - // Only true after volatile content falls below threshold value - bool canCombust_; + //- Flag to identify if the particle can devolatilise and combust + // Combustion possible only after volatile content falls below + // threshold value. States include: + // 0 = can devolatilise, cannot combust but can change + // 1 = can devolatilise, can combust + // -1 = cannot devolatilise or combust, and cannot change + label canCombust_; // Protected Member Functions @@ -205,7 +209,7 @@ protected: const scalarField& YGasEff,// gas component mass fractions const scalarField& YLiquidEff,// liquid component mass fractions const scalarField& YSolidEff,// solid component mass fractions - bool& canCombust, // 'can combust' flag + label& canCombust, // 'can combust' flag scalarField& dMassDV, // mass transfer - local to particle scalar& Sh, // explicit particle enthalpy source scalar& N, // flux of species emitted from particle @@ -223,7 +227,7 @@ protected: const scalar d, // diameter const scalar T, // temperature const scalar mass, // mass - const bool canCombust, // 'can combust' flag + const label canCombust, // 'can combust' flag const scalar N, // flux of species emitted from particle const scalarField& YMix, // mixture mass fractions const scalarField& YGas, // gas-phase mass fractions @@ -362,7 +366,7 @@ public: inline const scalarField& YSolid() const; //- Return const access to the canCombust flag - inline bool canCombust() const; + inline label canCombust() const; // Edit @@ -377,7 +381,7 @@ public: inline scalarField& YSolid(); //- Return access to the canCombust flag - inline bool& canCombust(); + inline label& canCombust(); // Main calculation loop diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H index e610de174e8e23230b9bcb50f4996a6d2a61da42..4a4a97eddfacaaa7333ffe1f79fdfb1daf099576 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -94,7 +94,7 @@ inline Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel YGas_(0), YLiquid_(0), YSolid_(0), - canCombust_(false) + canCombust_(0) {} @@ -142,7 +142,7 @@ inline Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel YGas_(YGas0), YLiquid_(YLiquid0), YSolid_(YSolid0), - canCombust_(false) + canCombust_(0) {} @@ -192,7 +192,8 @@ YSolid() const template<class ParcelType> -inline bool Foam::ReactingMultiphaseParcel<ParcelType>::canCombust() const +inline Foam::label +Foam::ReactingMultiphaseParcel<ParcelType>::canCombust() const { return canCombust_; } @@ -220,7 +221,7 @@ inline Foam::scalarField& Foam::ReactingMultiphaseParcel<ParcelType>::YSolid() template<class ParcelType> -inline bool& Foam::ReactingMultiphaseParcel<ParcelType>::canCombust() +inline Foam::label& Foam::ReactingMultiphaseParcel<ParcelType>::canCombust() { return canCombust_; } diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C index fa1e6e0428f3810844da7e53c1642a0a998c92d6..9495376322a0c49b3c3e663025359e7ed871abca 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcelIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,7 +47,7 @@ Foam::ReactingMultiphaseParcel<ParcelType>::ReactingMultiphaseParcel YGas_(0), YLiquid_(0), YSolid_(0), - canCombust_(false) + canCombust_(0) { if (readFields) { diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C index 4906280cf9f8c3a3ecae5f2a79e34e7edcc4a295..efb73ecae86f9f0e186f01c2229be8c1d63b3057 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C @@ -32,6 +32,169 @@ using namespace Foam::constant::mathematical; // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // +template<class ParcelType> +template<class TrackData> +void Foam::ReactingParcel<ParcelType>::calcPhaseChange +( + TrackData& td, + const scalar dt, + const label cellI, + const scalar Re, + const scalar Pr, + const scalar Ts, + const scalar nus, + const scalar d, + const scalar T, + const scalar mass, + const label idPhase, + const scalar YPhase, + const scalarField& YComponents, + scalarField& dMassPC, + scalar& Sh, + scalar& N, + scalar& NCpW, + scalarField& Cs +) +{ + if + ( + !td.cloud().phaseChange().active() + || T < td.cloud().constProps().Tvap() + || YPhase < SMALL + ) + { + return; + } + + typedef typename TrackData::cloudType::reactingCloudType reactingCloudType; + const CompositionModel<reactingCloudType>& composition = + td.cloud().composition(); + + const scalar TMax = td.cloud().phaseChange().TMax(pc_, this->Tc_); + const scalar Tdash = min(T, TMax); + const scalar Tsdash = min(Ts, TMax); + + // Calculate mass transfer due to phase change + td.cloud().phaseChange().calculate + ( + dt, + cellI, + Re, + Pr, + d, + nus, + Tdash, + Tsdash, + pc_, + this->Tc_, + YComponents, + dMassPC + ); + + // Limit phase change mass by availability of each specie + dMassPC = min(mass*YPhase*YComponents, dMassPC); + + const scalar dMassTot = sum(dMassPC); + + // Add to cumulative phase change mass + td.cloud().phaseChange().addToPhaseChangeMass(this->nParticle_*dMassTot); + + forAll(dMassPC, i) + { + const label idc = composition.localToGlobalCarrierId(idPhase, i); + const label idl = composition.globalIds(idPhase)[i]; + + const scalar dh = td.cloud().phaseChange().dh(idc, idl, pc_, Tdash); + Sh -= dMassPC[i]*dh/dt; + } + + + // Update molar emissions + if (td.cloud().heatTransfer().BirdCorrection()) + { + // Average molecular weight of carrier mix - assumes perfect gas + const scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_; + + + forAll(dMassPC, i) + { + const label idc = composition.localToGlobalCarrierId(idPhase, i); + const label idl = composition.globalIds(idPhase)[i]; + + const scalar Cp = composition.carrier().Cp(idc, pc_, Tsdash); + const scalar W = composition.carrier().W(idc); + const scalar Ni = dMassPC[i]/(this->areaS(d)*dt*W); + + const scalar Dab = + composition.liquids().properties()[idl].D(pc_, Tsdash, Wc); + + // Molar flux of species coming from the particle (kmol/m^2/s) + N += Ni; + + // Sum of Ni*Cpi*Wi of emission species + NCpW += Ni*Cp*W; + + // Concentrations of emission species + Cs[idc] += Ni*d/(2.0*Dab); + } + } +} + + +template<class ParcelType> +Foam::scalar Foam::ReactingParcel<ParcelType>::updateMassFraction +( + const scalar mass0, + const scalarField& dMass, + scalarField& Y +) const +{ + scalar mass1 = mass0 - sum(dMass); + + // only update the mass fractions if the new particle mass is finite + if (mass1 > ROOTVSMALL) + { + forAll(Y, i) + { + Y[i] = (Y[i]*mass0 - dMass[i])/mass1; + } + } + + return mass1; +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class ParcelType> +Foam::ReactingParcel<ParcelType>::ReactingParcel +( + const ReactingParcel<ParcelType>& p +) +: + ParcelType(p), + mass0_(p.mass0_), + Y_(p.Y_), + pc_(p.pc_) +{} + + +template<class ParcelType> +Foam::ReactingParcel<ParcelType>::ReactingParcel +( + const ReactingParcel<ParcelType>& p, + const polyMesh& mesh +) +: + ParcelType(p, mesh), + mass0_(p.mass0_), + Y_(p.Y_), + pc_(p.pc_) +{} + + +// * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * * // + template<class ParcelType> template<class TrackData> void Foam::ReactingParcel<ParcelType>::setCellValues @@ -165,7 +328,7 @@ void Foam::ReactingParcel<ParcelType>::correctSurfaceValues const SLGThermo& thermo = td.cloud().thermo(); // Far field carrier molar fractions - scalarField Xinf(td.cloud().thermo().carrier().species().size()); + scalarField Xinf(thermo.carrier().species().size()); forAll(Xinf, i) { @@ -234,29 +397,6 @@ void Foam::ReactingParcel<ParcelType>::correctSurfaceValues } -template<class ParcelType> -Foam::scalar Foam::ReactingParcel<ParcelType>::updateMassFraction -( - const scalar mass0, - const scalarField& dMass, - scalarField& Y -) const -{ - scalar mass1 = mass0 - sum(dMass); - - // only update the mass fractions if the new particle mass is finite - if (mass1 > ROOTVSMALL) - { - forAll(Y, i) - { - Y[i] = (Y[i]*mass0 - dMass[i])/mass1; - } - } - - return mass1; -} - - template<class ParcelType> template<class TrackData> void Foam::ReactingParcel<ParcelType>::calc @@ -472,144 +612,6 @@ void Foam::ReactingParcel<ParcelType>::calc } -template<class ParcelType> -template<class TrackData> -void Foam::ReactingParcel<ParcelType>::calcPhaseChange -( - TrackData& td, - const scalar dt, - const label cellI, - const scalar Re, - const scalar Pr, - const scalar Ts, - const scalar nus, - const scalar d, - const scalar T, - const scalar mass, - const label idPhase, - const scalar YPhase, - const scalarField& YComponents, - scalarField& dMassPC, - scalar& Sh, - scalar& N, - scalar& NCpW, - scalarField& Cs -) -{ - if - ( - !td.cloud().phaseChange().active() - || T < td.cloud().constProps().Tvap() - || YPhase < SMALL - ) - { - return; - } - - typedef typename TrackData::cloudType::reactingCloudType reactingCloudType; - const CompositionModel<reactingCloudType>& composition = - td.cloud().composition(); - - const scalar TMax = td.cloud().phaseChange().TMax(pc_, this->Tc_); - const scalar Tdash = min(T, TMax); - const scalar Tsdash = min(Ts, TMax); - - // Calculate mass transfer due to phase change - td.cloud().phaseChange().calculate - ( - dt, - cellI, - Re, - Pr, - d, - nus, - Tdash, - Tsdash, - pc_, - this->Tc_, - YComponents, - dMassPC - ); - - // Limit phase change mass by availability of each specie - dMassPC = min(mass*YPhase*YComponents, dMassPC); - - const scalar dMassTot = sum(dMassPC); - - // Add to cumulative phase change mass - td.cloud().phaseChange().addToPhaseChangeMass(this->nParticle_*dMassTot); - - forAll(dMassPC, i) - { - const label idc = composition.localToGlobalCarrierId(idPhase, i); - const label idl = composition.globalIds(idPhase)[i]; - - const scalar dh = td.cloud().phaseChange().dh(idc, idl, pc_, Tdash); - Sh -= dMassPC[i]*dh/dt; - } - - - // Update molar emissions - if (td.cloud().heatTransfer().BirdCorrection()) - { - // Average molecular weight of carrier mix - assumes perfect gas - const scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_; - - - forAll(dMassPC, i) - { - const label idc = composition.localToGlobalCarrierId(idPhase, i); - const label idl = composition.globalIds(idPhase)[i]; - - const scalar Cp = composition.carrier().Cp(idc, pc_, Tsdash); - const scalar W = composition.carrier().W(idc); - const scalar Ni = dMassPC[i]/(this->areaS(d)*dt*W); - - const scalar Dab = - composition.liquids().properties()[idl].D(pc_, Tsdash, Wc); - - // Molar flux of species coming from the particle (kmol/m^2/s) - N += Ni; - - // Sum of Ni*Cpi*Wi of emission species - NCpW += Ni*Cp*W; - - // Concentrations of emission species - Cs[idc] += Ni*d/(2.0*Dab); - } - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class ParcelType> -Foam::ReactingParcel<ParcelType>::ReactingParcel -( - const ReactingParcel<ParcelType>& p -) -: - ParcelType(p), - mass0_(p.mass0_), - Y_(p.Y_), - pc_(p.pc_) -{} - - -template<class ParcelType> -Foam::ReactingParcel<ParcelType>::ReactingParcel -( - const ReactingParcel<ParcelType>& p, - const polyMesh& mesh -) -: - ParcelType(p, mesh), - mass0_(p.mass0_), - Y_(p.Y_), - pc_(p.pc_) -{} - - // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "ReactingParcelIO.C" diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H index 0bb8f3704e8c177315a74968be3aa449cd58ba7f..7b4fea251a17cf4358f892c167c17f585ad8b1d3 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C index 5ed566d4b9e7081ea0a866d31fb38d074e653971..b07c64638e7559f7e63089629c3c9c7feffeca2a 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicCollidingParcel/makeBasicKinematicCollidingParcelSubmodels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,6 +33,7 @@ License #include "makeParcelInjectionModels.H" #include "makeParcelCollisionModels.H" #include "makeParcelPatchInteractionModels.H" +#include "makeParcelStochasticCollisionModels.H" #include "makeParcelSurfaceFilmModels.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,6 +48,7 @@ namespace Foam makeParcelInjectionModels(basicKinematicCollidingCloud); makeParcelCollisionModels(basicKinematicCollidingCloud); makeParcelPatchInteractionModels(basicKinematicCollidingCloud); + makeParcelStochasticCollisionModels(basicKinematicCollidingCloud); makeParcelSurfaceFilmModels(basicKinematicCollidingCloud); } diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C index 8ad62161721a1db9af3c51bab20a6f60bce410f8..1aaa9590fc3320dbaf88553736d785e80d9c00da 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/makeBasicKinematicParcelSubmodels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,6 +32,7 @@ License #include "makeParcelDispersionModels.H" #include "makeParcelInjectionModels.H" #include "makeParcelPatchInteractionModels.H" +#include "makeParcelStochasticCollisionModels.H" #include "makeParcelSurfaceFilmModels.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,6 +46,7 @@ namespace Foam makeParcelDispersionModels(basicKinematicCloud); makeParcelInjectionModels(basicKinematicCloud); makeParcelPatchInteractionModels(basicKinematicCloud); + makeParcelStochasticCollisionModels(basicKinematicCloud); makeParcelSurfaceFilmModels(basicKinematicCloud); } diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C index b14f905032a781fc8c99b7d8e56fb1529b07d535..bafe2cdd26aaaf6b8ec2bf395b35615fcdcd9749 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/makeBasicReactingMultiphaseParcelSubmodels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,6 +32,8 @@ License #include "makeParcelDispersionModels.H" #include "makeReactingMultiphaseParcelInjectionModels.H" // MP variant #include "makeParcelPatchInteractionModels.H" +#include "makeReactingMultiphaseParcelStochasticCollisionModels.H" // MP variant +#include "makeReactingParcelSurfaceFilmModels.H" // Reacting variant // Thermodynamic #include "makeParcelHeatTransferModels.H" @@ -39,7 +41,6 @@ License // Reacting #include "makeReactingMultiphaseParcelCompositionModels.H" // MP Variant #include "makeReactingParcelPhaseChangeModels.H" -#include "makeReactingParcelSurfaceFilmModels.H" // Reacting multiphase #include "makeReactingMultiphaseParcelDevolatilisationModels.H" @@ -56,6 +57,11 @@ namespace Foam makeParcelDispersionModels(basicReactingMultiphaseCloud); makeReactingMultiphaseParcelInjectionModels(basicReactingMultiphaseCloud); makeParcelPatchInteractionModels(basicReactingMultiphaseCloud); + makeReactingMultiphaseParcelStochasticCollisionModels + ( + basicReactingMultiphaseCloud + ); + makeReactingParcelSurfaceFilmModels(basicReactingMultiphaseCloud); // Thermo sub-models makeParcelHeatTransferModels(basicReactingMultiphaseCloud); @@ -72,10 +78,6 @@ namespace Foam ( basicReactingMultiphaseCloud ); - makeReactingParcelSurfaceFilmModels - ( - basicReactingMultiphaseCloud - ); makeReactingMultiphaseParcelSurfaceReactionModels ( basicReactingMultiphaseCloud diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C index bd425895b6c9004648efd85d1382d5a9077dc520..e9eb87a2cd06c54853cf897fb59286f8140bd1c0 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/makeBasicReactingParcelSubmodels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,6 +32,8 @@ License #include "makeParcelDispersionModels.H" #include "makeReactingParcelInjectionModels.H" // Reacting variant #include "makeParcelPatchInteractionModels.H" +#include "makeParcelStochasticCollisionModels.H" +#include "makeReactingParcelSurfaceFilmModels.H" // Reacting variant // Thermodynamic #include "makeParcelHeatTransferModels.H" @@ -39,7 +41,6 @@ License // Reacting #include "makeReactingParcelCompositionModels.H" #include "makeReactingParcelPhaseChangeModels.H" -#include "makeReactingParcelSurfaceFilmModels.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -52,6 +53,8 @@ namespace Foam makeParcelDispersionModels(basicReactingCloud); makeReactingParcelInjectionModels(basicReactingCloud); makeParcelPatchInteractionModels(basicReactingCloud); + makeParcelStochasticCollisionModels(basicReactingCloud); + makeReactingParcelSurfaceFilmModels(basicReactingCloud); // Thermo sub-models makeParcelHeatTransferModels(basicReactingCloud); @@ -59,7 +62,6 @@ namespace Foam // Reacting sub-models makeReactingParcelCompositionModels(basicReactingCloud); makeReactingParcelPhaseChangeModels(basicReactingCloud); - makeReactingParcelSurfaceFilmModels(basicReactingCloud); } diff --git a/src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/fluidThermoParcel.H b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H similarity index 84% rename from src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/fluidThermoParcel.H rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H index 12e863b7b8b5e11d06d3e6b133ba4fc2f0ba6d03..c7778ac1cfe8d76e2f4ab676c41820703b2966e6 100644 --- a/src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/fluidThermoParcel.H +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/basicThermoParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,18 +22,18 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::fluidThermoParcel + Foam::basicThermoParcel Description Definition of basic thermo parcel SourceFiles - fluidThermoParcel.C + basicThermoParcel.C \*---------------------------------------------------------------------------*/ -#ifndef fluidThermoParcel_H -#define fluidThermoParcel_H +#ifndef basicThermoParcel_H +#define basicThermoParcel_H #include "contiguous.H" #include "particle.H" @@ -44,10 +44,10 @@ SourceFiles namespace Foam { - typedef ThermoParcel<KinematicParcel<particle> > fluidThermoParcel; + typedef ThermoParcel<KinematicParcel<particle> > basicThermoParcel; template<> - inline bool contiguous<fluidThermoParcel>() + inline bool contiguous<basicThermoParcel>() { return true; } diff --git a/src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/defineBasicThermoParcel.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C similarity index 85% rename from src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/defineBasicThermoParcel.C rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C index 45381d280d61d77d663070328da308794e0f1ea0..7c300a22b5d6f5d5defa0e4e0d1fad8ebda85647 100644 --- a/src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/defineBasicThermoParcel.C +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/defineBasicThermoParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,15 +23,15 @@ License \*---------------------------------------------------------------------------*/ -#include "fluidThermoParcel.H" +#include "basicThermoParcel.H" #include "Cloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - defineTemplateTypeNameAndDebug(fluidThermoParcel, 0); - defineTemplateTypeNameAndDebug(Cloud<fluidThermoParcel>, 0); + defineTemplateTypeNameAndDebug(basicThermoParcel, 0); + defineTemplateTypeNameAndDebug(Cloud<basicThermoParcel>, 0); } // ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/makeBasicThermoParcelSubmodels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelSubmodels.C similarity index 72% rename from src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/makeBasicThermoParcelSubmodels.C rename to src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelSubmodels.C index 1a685395aeb5769042fd7a53ecf7a7a62380f867..ba6d30bb91ca1c09292c0343abfa4e894cba528d 100644 --- a/src/lagrangian/intermediate/parcels/derived/fluidThermoParcel/makeBasicThermoParcelSubmodels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/makeBasicThermoParcelSubmodels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,7 +23,7 @@ License \*---------------------------------------------------------------------------*/ -#include "fluidThermoCloud.H" +#include "basicThermoCloud.H" #include "makeParcelCloudFunctionObjects.H" @@ -32,26 +32,28 @@ License #include "makeParcelDispersionModels.H" #include "makeParcelInjectionModels.H" #include "makeParcelPatchInteractionModels.H" +#include "makeParcelStochasticCollisionModels.H" +#include "makeThermoParcelSurfaceFilmModels.H" // thermo variant // Thermodynamic #include "makeParcelHeatTransferModels.H" -#include "makeThermoParcelSurfaceFilmModels.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { - makeParcelCloudFunctionObjects(fluidThermoCloud); + makeParcelCloudFunctionObjects(basicThermoCloud); // Kinematic sub-models - makeThermoParcelForces(fluidThermoCloud); - makeParcelDispersionModels(fluidThermoCloud); - makeParcelInjectionModels(fluidThermoCloud); - makeParcelPatchInteractionModels(fluidThermoCloud); + makeThermoParcelForces(basicThermoCloud); + makeParcelDispersionModels(basicThermoCloud); + makeParcelInjectionModels(basicThermoCloud); + makeParcelPatchInteractionModels(basicThermoCloud); + makeParcelStochasticCollisionModels(basicThermoCloud); + makeParcelSurfaceFilmModels(basicThermoCloud); // Thermo sub-models - makeParcelHeatTransferModels(fluidThermoCloud); - makeParcelSurfaceFilmModels(fluidThermoCloud); + makeParcelHeatTransferModels(basicThermoCloud); } diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelStochasticCollisionModels.H b/src/lagrangian/intermediate/parcels/include/makeParcelStochasticCollisionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..e949d6e0ad57afaedb2de797d1d63487257e70f0 --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeParcelStochasticCollisionModels.H @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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/>. + +\*---------------------------------------------------------------------------*/ + +#ifndef makeParcelStochasticCollisionModels_H +#define makeParcelStochasticCollisionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "NoStochasticCollision.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeParcelStochasticCollisionModels(CloudType) \ + \ + makeStochasticCollisionModel(CloudType); \ + makeStochasticCollisionModelType(NoStochasticCollision, CloudType); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelStochasticCollisionModels.H b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelStochasticCollisionModels.H new file mode 100644 index 0000000000000000000000000000000000000000..ea8436b119d0c55cc3e26f23569bcd8afdb012ea --- /dev/null +++ b/src/lagrangian/intermediate/parcels/include/makeReactingMultiphaseParcelStochasticCollisionModels.H @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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/>. + +\*---------------------------------------------------------------------------*/ + +#ifndef makeReactingMultiphaseParcelStochasticCollisionModels_H +#define makeReactingMultiphaseParcelStochasticCollisionModels_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "NoStochasticCollision.H" +#include "SuppressionCollision.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#define makeReactingMultiphaseParcelStochasticCollisionModels(CloudType) \ + \ + makeStochasticCollisionModel(CloudType); \ + makeStochasticCollisionModelType(NoStochasticCollision, CloudType); \ + makeStochasticCollisionModelType(SuppressionCollision, CloudType); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/spray/submodels/StochasticCollision/NoStochasticCollision/NoStochasticCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/NoStochasticCollision/NoStochasticCollision.C similarity index 77% rename from src/lagrangian/spray/submodels/StochasticCollision/NoStochasticCollision/NoStochasticCollision.C rename to src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/NoStochasticCollision/NoStochasticCollision.C index 024ccd313fdaf56e757076d04a61c46bd97c86bd..563c0caaef69eb33063e7b143de1d0d93a44e856 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/NoStochasticCollision/NoStochasticCollision.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/NoStochasticCollision/NoStochasticCollision.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,15 @@ License #include "NoStochasticCollision.H" +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +template<class CloudType> +void Foam::NoStochasticCollision<CloudType>::collide(const scalar) +{ + // do nothing +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class CloudType> @@ -64,37 +73,4 @@ bool Foam::NoStochasticCollision<CloudType>::active() const } -template<class CloudType> -bool Foam::NoStochasticCollision<CloudType>::update -( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj -) const -{ - return false; -} - - // ************************************************************************* // diff --git a/src/lagrangian/spray/submodels/StochasticCollision/NoStochasticCollision/NoStochasticCollision.H b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/NoStochasticCollision/NoStochasticCollision.H similarity index 77% rename from src/lagrangian/spray/submodels/StochasticCollision/NoStochasticCollision/NoStochasticCollision.H rename to src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/NoStochasticCollision/NoStochasticCollision.H index 0e93cbc031db9fa1b27197a35f8cbf573fcad5f9..81338611e340330ca23965dfe9c2b28619ca8d0a 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/NoStochasticCollision/NoStochasticCollision.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/NoStochasticCollision/NoStochasticCollision.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,7 +39,7 @@ Description namespace Foam { /*---------------------------------------------------------------------------*\ - Class NoStochasticCollision Declaration + Class NoStochasticCollision Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -47,6 +47,14 @@ class NoStochasticCollision : public StochasticCollisionModel<CloudType> { +protected: + + // Protected Member Functions + + //- Update the model + virtual void collide(const scalar dt); + + public: //- Runtime type information @@ -79,34 +87,6 @@ public: //- Flag to indicate whether model activates collision model virtual bool active() const; - - virtual bool update - ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj - ) const; }; diff --git a/src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C similarity index 63% rename from src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C rename to src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C index fa22d59f0b3f9df69ed1fae4d3a9a2e23e6892a8..f177613232cffc94e15233d736309dded3403feb 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,18 @@ License #include "StochasticCollisionModel.H" +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +template<class CloudType> +void Foam::StochasticCollisionModel<CloudType>::collide(const scalar dt) +{ + notImplemented + ( + "void Foam::NoStochasticCollision<CloudType>::collide(const scalar)" + ); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class CloudType> @@ -69,66 +81,12 @@ Foam::StochasticCollisionModel<CloudType>::~StochasticCollisionModel() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class CloudType> -bool Foam::StochasticCollisionModel<CloudType>::update -( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U1, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj -) const +void Foam::StochasticCollisionModel<CloudType>::update(const scalar dt) { - notImplemented - ( - "bool Foam::StochasticCollisionModel<CloudType>::update" - "(" - "const scalar, " - "cachedRandom&, " - "vector&, " - "scalar&, " - "scalar&, " - "scalar&, " - "vector&, " - "scalar&, " - "scalar&, " - "scalarField&, " - "const scalar, " - "const label, " - "const scalar, " - "vector&, " - "scalar&, " - "scalar&, " - "scalar&, " - "vector&, " - "scalar&, " - "scalar&, " - "scalarField&, " - "const scalar, " - "const label, " - "const scalar" - ") const" - ); - - return false; + if (this->active()) + { + this->collide(dt); + } } @@ -137,4 +95,3 @@ bool Foam::StochasticCollisionModel<CloudType>::update #include "StochasticCollisionModelNew.C" // ************************************************************************* // - diff --git a/src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H similarity index 78% rename from src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H rename to src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H index 87ebafab24e6c3b30ef01e0f707967cd4802c4cc..0ca8935b18300796693425399b5e77aff75188dc 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,6 +55,12 @@ class StochasticCollisionModel : public SubModelBase<CloudType> { +protected: + + //- Main collision routine + virtual void collide(const scalar dt); + + public: //- Runtime type information @@ -114,33 +120,8 @@ public: // Member Functions - virtual bool update - ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U1, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj - ) const; + //- Update the model + void update(const scalar dt); }; @@ -152,27 +133,27 @@ public: #define makeStochasticCollisionModel(CloudType) \ \ - typedef CloudType::sprayCloudType sprayCloudType; \ + typedef CloudType::kinematicCloudType kinematicCloudType; \ defineNamedTemplateTypeNameAndDebug \ ( \ - StochasticCollisionModel<sprayCloudType>, \ + StochasticCollisionModel<kinematicCloudType>, \ 0 \ ); \ defineTemplateRunTimeSelectionTable \ ( \ - StochasticCollisionModel<sprayCloudType>, \ + StochasticCollisionModel<kinematicCloudType>, \ dictionary \ ); #define makeStochasticCollisionModelType(SS, CloudType) \ \ - typedef CloudType::sprayCloudType sprayCloudType; \ - defineNamedTemplateTypeNameAndDebug(SS<sprayCloudType>, 0); \ + typedef CloudType::kinematicCloudType kinematicCloudType; \ + defineNamedTemplateTypeNameAndDebug(SS<kinematicCloudType>, 0); \ \ - StochasticCollisionModel<sprayCloudType>:: \ - adddictionaryConstructorToTable<SS<sprayCloudType> > \ - add##SS##CloudType##sprayCloudType##ConstructorToTable_; + StochasticCollisionModel<kinematicCloudType>:: \ + adddictionaryConstructorToTable<SS<kinematicCloudType> > \ + add##SS##CloudType##kinematicCloudType##ConstructorToTable_; diff --git a/src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModelNew.C b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModelNew.C similarity index 88% rename from src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModelNew.C rename to src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModelNew.C index 1cfc31a16f95f15b4755533348ecbf96d44c855a..5c2a4b80f099ca3b9d4e0fc86c6087b05f716f60 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/StochasticCollisionModel/StochasticCollisionModelNew.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/StochasticCollision/StochasticCollisionModel/StochasticCollisionModelNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ Foam::StochasticCollisionModel<CloudType>::New { word modelType(dict.lookup("stochasticCollisionModel")); - Info<< "Selecting StochasticCollisionModel " << modelType << endl; + Info<< "Selecting stochastic collision model " << modelType << endl; typename dictionaryConstructorTable::iterator cstrIter = dictionaryConstructorTablePtr_->find(modelType); @@ -51,9 +51,9 @@ Foam::StochasticCollisionModel<CloudType>::New "const dictionary&, " "CloudType&" ")" - ) << "Unknown StochasticCollisionModelType type " + ) << "Unknown model type type " << modelType << ", constructor not in hash table" << nl << nl - << " Valid StochasticCollisionModel types are:" << nl + << " Valid model types are:" << nl << dictionaryConstructorTablePtr_->sortedToc() << exit(FatalError); } diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C index 0de07723819a21e16cc3959e41b81da81853886c..a98e959392d06a4c296691054d6bb65026a93fcc 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -109,7 +109,7 @@ void Foam::ConstantRateDevolatilisation<CloudType>::calculate const scalarField& YGasEff, const scalarField& YLiquidEff, const scalarField& YSolidEff, - bool& canCombust, + label& canCombust, scalarField& dMassDV ) const { @@ -130,7 +130,10 @@ void Foam::ConstantRateDevolatilisation<CloudType>::calculate dMassDV[id] = min(dt*A0*massVolatile0, massVolatile); } - canCombust = done; + if (done && canCombust != -1) + { + canCombust = 1; + } } diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H index 7faffb990da36a57c34473bd7faaf626bc6ad8c1..4b61de316d6add07753afe6a82ee60278b7bf995 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/ConstantRateDevolatilisation/ConstantRateDevolatilisation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -111,7 +111,7 @@ public: const scalarField& YGasEff, const scalarField& YLiquidEff, const scalarField& YSolidEff, - bool& canCombust, + label& canCombust, scalarField& dMassDV ) const; }; diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C index 6b4325db4fa36966a3f1181dd5138941bbaf1dc9..48a0a4ee5fb0dfb116433d00199583466b98e5d8 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -82,7 +82,7 @@ void Foam::DevolatilisationModel<CloudType>::calculate const scalarField&, const scalarField&, const scalarField&, - bool&, + label&, scalarField& ) const { @@ -98,7 +98,7 @@ void Foam::DevolatilisationModel<CloudType>::calculate "const scalarField&, " "const scalarField&, " "const scalarField&, " - "bool&, " + "label&, " "scalarField&" ") const" ); diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H index 7cff8d426a3ab795a56bab9831837bd32bbfea5a..f467aa7470ab4ab54ce668536c9e34724e13f8db 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/DevolatilisationModel/DevolatilisationModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -133,7 +133,7 @@ public: const scalarField& YGasEff, const scalarField& YLiquidEff, const scalarField& YSolidEff, - bool& canCombust, + label& canCombust, scalarField& dMassDV ) const; diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C index fe4b856cfbcf36dba3d44ff1a9bed0eedf61bc57..d3a8ca8aed6d12e1203266485afd219c32f3ab22 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -112,7 +112,7 @@ void Foam::SingleKineticRateDevolatilisation<CloudType>::calculate const scalarField& YGasEff, const scalarField& YLiquidEff, const scalarField& YSolidEff, - bool& canCombust, + label& canCombust, scalarField& dMassDV ) const { @@ -137,7 +137,10 @@ void Foam::SingleKineticRateDevolatilisation<CloudType>::calculate dMassDV[id] = min(dt*kappa*massVolatile, massVolatile); } - canCombust = done; + if (done && canCombust != -1) + { + canCombust = 1; + } } diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H index d9c3064ce9a09205245489eb494a8c038d4de820..6b4802c8f655cc05bae95dc56587b33631656eee 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -236,7 +236,7 @@ public: const scalarField& YGasEff, const scalarField& YLiquidEff, const scalarField& YSolidEff, - bool& canCombust, + label& canCombust, scalarField& dMassDV ) const; }; diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/StochasticCollision/SuppressionCollision/SuppressionCollision.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/StochasticCollision/SuppressionCollision/SuppressionCollision.C new file mode 100644 index 0000000000000000000000000000000000000000..b486fa02b7fec4b07bef3292e7d96384616973d2 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/StochasticCollision/SuppressionCollision/SuppressionCollision.C @@ -0,0 +1,96 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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 "SuppressionCollision.H" +#include "kinematicCloud.H" + +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +template<class CloudType> +void Foam::SuppressionCollision<CloudType>::collide(const scalar dt) +{ + const kinematicCloud& sc = + this->owner().mesh().template + lookupObject<kinematicCloud>(suppressionCloud_); + + volScalarField vDotSweep(sc.vDotSweep()); + + dimensionedScalar Dt("dt", dimTime, dt); + volScalarField P(type() + ":p", 1.0 - exp(-vDotSweep*Dt)); + + forAllIter(typename CloudType, this->owner(), iter) + { + typename CloudType::parcelType& p = iter(); + label cellI = p.cell(); + + scalar xx = this->owner().rndGen().template sample01<scalar>(); + + if (xx < P[cellI]) + { + p.canCombust() = -1; + p.typeId() = max(p.typeId(), suppressedParcelType_); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::SuppressionCollision<CloudType>::SuppressionCollision +( + const dictionary& dict, + CloudType& owner +) +: + StochasticCollisionModel<CloudType>(dict, owner, typeName), + suppressionCloud_(this->coeffDict().lookup("suppressionCloud")), + suppressedParcelType_ + ( + this->coeffDict().lookupOrDefault("suppressedParcelType", -1) + ) +{} + + +template<class CloudType> +Foam::SuppressionCollision<CloudType>::SuppressionCollision +( + const SuppressionCollision<CloudType>& cm +) +: + StochasticCollisionModel<CloudType>(cm), + suppressionCloud_(cm.suppressionCloud_), + suppressedParcelType_(cm.suppressedParcelType_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::SuppressionCollision<CloudType>::~SuppressionCollision() +{} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/StochasticCollision/SuppressionCollision/SuppressionCollision.H b/src/lagrangian/intermediate/submodels/ReactingMultiphase/StochasticCollision/SuppressionCollision/SuppressionCollision.H new file mode 100644 index 0000000000000000000000000000000000000000..5d02ad48430d61c917773423658cf729c27f2071 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/StochasticCollision/SuppressionCollision/SuppressionCollision.H @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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::SuppressionCollision + +Description + Inter-cloud collision model, whereby the \c canReact flag can be used + to inhibit devolatilisation and surface reactions + +\*---------------------------------------------------------------------------*/ + +#ifndef SuppressionCollision_H +#define SuppressionCollision_H + +#include "StochasticCollisionModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +/*---------------------------------------------------------------------------*\ + Class SuppressionCollision Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class SuppressionCollision +: + public StochasticCollisionModel<CloudType> +{ +protected: + + // Protected data + + //- Name of cloud used for suppression + const word suppressionCloud_; + + //- Suppressed parcel type - optional + const label suppressedParcelType_; + + + // Protected Member Functions + + //- Update the model + virtual void collide(const scalar dt); + + +public: + + //- Runtime type information + TypeName("suppressionCollision"); + + + // Constructors + + //- Construct from dictionary + SuppressionCollision(const dictionary& dict, CloudType& owner); + + //- Construct copy + SuppressionCollision(const SuppressionCollision<CloudType>& cm); + + //- Construct and return a clone + virtual autoPtr<StochasticCollisionModel<CloudType> > clone() const + { + return autoPtr<StochasticCollisionModel<CloudType> > + ( + new SuppressionCollision<CloudType>(*this) + ); + } + + + //- Destructor + virtual ~SuppressionCollision(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "SuppressionCollision.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C index bf418468bd9d7ec3190c6f2e69683a50d09a323d..4bc55c989ec65a574d5f325127949e5c71dcf6b5 100644 --- a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C +++ b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,7 +26,6 @@ License #include "SprayCloud.H" #include "AtomizationModel.H" #include "BreakupModel.H" -#include "StochasticCollisionModel.H" // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // @@ -50,15 +49,6 @@ void Foam::SprayCloud<CloudType>::setModels() *this ).ptr() ); - - stochasticCollisionModel_.reset - ( - StochasticCollisionModel<SprayCloud<CloudType> >::New - ( - this->subModelProperties(), - *this - ).ptr() - ); } @@ -72,7 +62,6 @@ void Foam::SprayCloud<CloudType>::cloudReset atomizationModel_.reset(c.atomizationModel_.ptr()); breakupModel_.reset(c.breakupModel_.ptr()); - stochasticCollisionModel_.reset(c.stochasticCollisionModel_.ptr()); } @@ -94,8 +83,7 @@ Foam::SprayCloud<CloudType>::SprayCloud cloudCopyPtr_(NULL), averageParcelMass_(0.0), atomizationModel_(NULL), - breakupModel_(NULL), - stochasticCollisionModel_(NULL) + breakupModel_(NULL) { if (this->solution().active()) { @@ -130,8 +118,7 @@ Foam::SprayCloud<CloudType>::SprayCloud cloudCopyPtr_(NULL), averageParcelMass_(c.averageParcelMass_), atomizationModel_(c.atomizationModel_->clone()), - breakupModel_(c.breakupModel_->clone()), - stochasticCollisionModel_(c.stochasticCollisionModel_->clone()) + breakupModel_(c.breakupModel_->clone()) {} @@ -148,8 +135,7 @@ Foam::SprayCloud<CloudType>::SprayCloud cloudCopyPtr_(NULL), averageParcelMass_(0.0), atomizationModel_(NULL), - breakupModel_(NULL), - stochasticCollisionModel_(NULL) + breakupModel_(NULL) {} @@ -179,6 +165,8 @@ void Foam::SprayCloud<CloudType>::setParcelThermoProperties // override rho and Cp from constantProperties parcel.Cp() = liqMix.Cp(parcel.pc(), parcel.T(), X); parcel.rho() = liqMix.rho(parcel.pc(), parcel.T(), X); + parcel.sigma() = liqMix.sigma(parcel.pc(), parcel.T(), X); + parcel.mu() = liqMix.mu(parcel.pc(), parcel.T(), X); } @@ -237,128 +225,6 @@ void Foam::SprayCloud<CloudType>::evolve() } -template<class CloudType> -template<class TrackData> -void Foam::SprayCloud<CloudType>::motion(TrackData& td) -{ - const scalar dt = this->solution().trackTime(); - - td.part() = TrackData::tpLinearTrack; - CloudType::move(td, dt); - - this->updateCellOccupancy(); - - if (stochasticCollision().active()) - { - const liquidMixtureProperties& liqMix = this->composition().liquids(); - - label i = 0; - forAllIter(typename SprayCloud<CloudType>, *this, iter) - { - label j = 0; - forAllIter(typename SprayCloud<CloudType>, *this, jter) - { - if (j > i) - { - parcelType& p = iter(); - scalar Vi = this->mesh().V()[p.cell()]; - scalarField X1(liqMix.X(p.Y())); - scalar sigma1 = liqMix.sigma(p.pc(), p.T(), X1); - scalar mp = p.mass()*p.nParticle(); - - parcelType& q = jter(); - scalar Vj = this->mesh().V()[q.cell()]; - scalarField X2(liqMix.X(q.Y())); - scalar sigma2 = liqMix.sigma(q.pc(), q.T(), X2); - scalar mq = q.mass()*q.nParticle(); - - bool updateProperties = stochasticCollision().update - ( - dt, - this->rndGen(), - p.position(), - mp, - p.d(), - p.nParticle(), - p.U(), - p.rho(), - p.T(), - p.Y(), - sigma1, - p.cell(), - Vi, - q.position(), - mq, - q.d(), - q.nParticle(), - q.U(), - q.rho(), - q.T(), - q.Y(), - sigma2, - q.cell(), - Vj - ); - - // for coalescence we need to update the density and - // the diameter cause of the temp/conc/mass-change - if (updateProperties) - { - if (mp > VSMALL) - { - scalarField Xp(liqMix.X(p.Y())); - p.rho() = liqMix.rho(p.pc(), p.T(), Xp); - p.Cp() = liqMix.Cp(p.pc(), p.T(), Xp); - p.d() = - cbrt - ( - 6.0*mp - /( - p.nParticle() - *p.rho() - *constant::mathematical::pi - ) - ); - } - - if (mq > VSMALL) - { - scalarField Xq(liqMix.X(q.Y())); - q.rho() = liqMix.rho(q.pc(), q.T(), Xq); - q.Cp() = liqMix.Cp(q.pc(), q.T(), Xq); - q.d() = - cbrt - ( - 6.0*mq - /( - q.nParticle() - *q.rho() - *constant::mathematical::pi - ) - ); - } - } - } - j++; - } - i++; - } - - // remove coalesced parcels that fall below minimum mass threshold - forAllIter(typename SprayCloud<CloudType>, *this, iter) - { - parcelType& p = iter(); - scalar mass = p.nParticle()*p.mass(); - - if (mass < td.cloud().constProps().minParticleMass()) - { - this->deleteParticle(p); - } - } - } -} - - template<class CloudType> void Foam::SprayCloud<CloudType>::info() { diff --git a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H index f8ffbbc7df91059bf456883efcb674dd0d677b19..2055c375e8242e91d06defe94e8b03068117c07f 100644 --- a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H +++ b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,6 +27,10 @@ Class Description Templated base class for spray cloud + - sub-models: + - atomization model + - break-up model + \*---------------------------------------------------------------------------*/ #ifndef SprayCloud_H @@ -46,9 +50,6 @@ class AtomizationModel; template<class CloudType> class BreakupModel; -template<class CloudType> -class StochasticCollisionModel; - /*---------------------------------------------------------------------------*\ Class SprayCloud Declaration \*---------------------------------------------------------------------------*/ @@ -106,10 +107,6 @@ protected: //- Break-up model autoPtr<BreakupModel<SprayCloud<CloudType> > > breakupModel_; - //- Collision model - autoPtr<StochasticCollisionModel<SprayCloud<CloudType> > > - stochasticCollisionModel_; - // Protected Member Functions @@ -202,14 +199,6 @@ public: //- Return reference to the breakup model inline BreakupModel<SprayCloud<CloudType> >& breakup(); - //- Return const-access to the breakup model - inline const StochasticCollisionModel<SprayCloud<CloudType> >& - stochasticCollision() const; - - //- Return reference to the breakup model - inline StochasticCollisionModel<SprayCloud<CloudType> >& - stochasticCollision(); - // Cloud evolution functions @@ -236,10 +225,6 @@ public: //- Evolve the spray (inject, move) void evolve(); - //- Particle motion - - template<class TrackData> - void motion(TrackData& td); // I-O @@ -249,7 +234,6 @@ public: }; - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloudI.H b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloudI.H index fc0746267063e40de6d37b19f64ffcab8876fdba..834dbbddd415a61e7702b618063a6667b47b01c7 100644 --- a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloudI.H +++ b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloudI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,22 +65,6 @@ Foam::SprayCloud<CloudType>::breakup() } -template<class CloudType> -inline const Foam::StochasticCollisionModel<Foam::SprayCloud<CloudType> >& -Foam::SprayCloud<CloudType>::stochasticCollision() const -{ - return stochasticCollisionModel_; -} - - -template<class CloudType> -inline Foam::StochasticCollisionModel<Foam::SprayCloud<CloudType> >& -Foam::SprayCloud<CloudType>::stochasticCollision() -{ - return stochasticCollisionModel_(); -} - - template<class CloudType> inline Foam::scalar Foam::SprayCloud<CloudType>::averageParcelMass() const { diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C index b93d687c209ef7775a97448267f9bf09792bdd01..d0d3814bc72abcb09bf328ca15a0f20194ed955e 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C @@ -82,6 +82,7 @@ void Foam::SprayParcel<ParcelType>::calc scalar T0 = this->T(); this->Cp() = td.cloud().composition().liquids().Cp(this->pc_, T0, X); + sigma_ = td.cloud().composition().liquids().sigma(this->pc_, T0, X); scalar rho0 = td.cloud().composition().liquids().rho(this->pc_, T0, X); this->rho() = rho0; @@ -89,13 +90,14 @@ void Foam::SprayParcel<ParcelType>::calc if (td.keepParticle) { - // update Cp, diameter and density due to change in temperature + // update Cp, sigma, diameter and density due to change in temperature // and/or composition scalar T1 = this->T(); const scalarField& Y1(this->Y()); scalarField X1(td.cloud().composition().liquids().X(Y1)); this->Cp() = td.cloud().composition().liquids().Cp(this->pc_, T1, X1); + sigma_ = td.cloud().composition().liquids().sigma(this->pc_, T1, X); scalar rho1 = td.cloud().composition().liquids().rho(this->pc_, T1, X1); this->rho() = rho1; @@ -139,15 +141,6 @@ void Foam::SprayParcel<ParcelType>::calcAtomization const AtomizationModel<sprayCloudType>& atomization = td.cloud().atomization(); - - // cell state info is updated in ReactingParcel calc - const scalarField& Y(this->Y()); - scalarField X(composition.liquids().X(Y)); - - scalar rho = composition.liquids().rho(this->pc(), this->T(), X); - scalar mu = composition.liquids().mu(this->pc(), this->T(), X); - scalar sigma = composition.liquids().sigma(this->pc(), this->T(), X); - // Average molecular weight of carrier mix - assumes perfect gas scalar Wc = this->rhoc_*specie::RR*this->Tc()/this->pc(); scalar R = specie::RR/Wc; @@ -174,7 +167,7 @@ void Foam::SprayParcel<ParcelType>::calcAtomization scalar chi = 0.0; if (atomization.calcChi()) { - chi = this->chi(td, X); + chi = this->chi(td, composition.liquids().X(this->Y())); } atomization.update @@ -183,9 +176,9 @@ void Foam::SprayParcel<ParcelType>::calcAtomization this->d(), this->liquidCore(), this->tc(), - rho, - mu, - sigma, + this->rho(), + mu_, + sigma_, volFlowRate, rhoAv, Urel, @@ -207,10 +200,6 @@ void Foam::SprayParcel<ParcelType>::calcBreakup const label cellI ) { - typedef typename TrackData::cloudType::reactingCloudType reactingCloudType; - const CompositionModel<reactingCloudType>& composition = - td.cloud().composition(); - typedef typename TrackData::cloudType cloudType; typedef typename cloudType::parcelType parcelType; typedef typename cloudType::forceType forceType; @@ -223,14 +212,6 @@ void Foam::SprayParcel<ParcelType>::calcBreakup solveTABEq(td, dt); } - // cell state info is updated in ReactingParcel calc - const scalarField& Y(this->Y()); - scalarField X(composition.liquids().X(Y)); - - scalar rho = composition.liquids().rho(this->pc(), this->T(), X); - scalar mu = composition.liquids().mu(this->pc(), this->T(), X); - scalar sigma = composition.liquids().sigma(this->pc(), this->T(), X); - // Average molecular weight of carrier mix - assumes perfect gas scalar Wc = this->rhoc()*specie::RR*this->Tc()/this->pc(); scalar R = specie::RR/Wc; @@ -266,9 +247,9 @@ void Foam::SprayParcel<ParcelType>::calcBreakup this->y(), this->yDot(), this->d0(), - rho, - mu, - sigma, + this->rho(), + mu_, + sigma_, this->U(), rhoAv, muAv, @@ -287,7 +268,7 @@ void Foam::SprayParcel<ParcelType>::calcBreakup SprayParcel<ParcelType>* child = new SprayParcel<ParcelType>(*this); child->mass0() = massChild; child->d() = dChild; - child->nParticle() = massChild/rho*this->volume(dChild); + child->nParticle() = massChild/this->rho()*this->volume(dChild); const forceSuSp Fcp = forces.calcCoupled(*child, dt, massChild, Re, muAv); @@ -447,6 +428,8 @@ Foam::SprayParcel<ParcelType>::SprayParcel(const SprayParcel<ParcelType>& p) ParcelType(p), d0_(p.d0_), position0_(p.position0_), + sigma_(p.sigma_), + mu_(p.mu_), liquidCore_(p.liquidCore_), KHindex_(p.KHindex_), y_(p.y_), @@ -469,6 +452,8 @@ Foam::SprayParcel<ParcelType>::SprayParcel ParcelType(p, mesh), d0_(p.d0_), position0_(p.position0_), + sigma_(p.sigma_), + mu_(p.mu_), liquidCore_(p.liquidCore_), KHindex_(p.KHindex_), y_(p.y_), diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H index 19529b7d0b92d4ef5ac5b2c4754b762f207007c2..1ac1663d288770c7615279ab5b199504bb6b0c93 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -59,6 +59,74 @@ class SprayParcel public ParcelType { +public: + + //- Class to hold reacting particle constant properties + class constantProperties + : + public ParcelType::constantProperties + { + // Private data + + //- Particle initial surface tension [N/m] + scalar sigma0_; + + //- Particle initial dynamic viscosity [Pa.s] + scalar mu0_; + + + public: + + // Constructors + + //- Null constructor + constantProperties(); + + //- Copy constructor + constantProperties(const constantProperties& cp); + + //- Constructor from dictionary + constantProperties + ( + const dictionary& parentDict, + const bool readFields = true + ); + + //- Construct from components + constantProperties + ( + const label parcelTypeId, + const scalar rhoMin, + const scalar rho0, + const scalar minParticleMass, + const scalar youngsModulus, + const scalar poissonsRatio, + const scalar T0, + const scalar TMin, + const scalar TMax, + const scalar Cp0, + const scalar epsilon0, + const scalar f0, + const scalar Pr, + const scalar pMin, + const Switch& constantVolume, + const scalar Tvap, + const scalar Tbp, + const scalar sigma0, + const scalar mu0 + ); + + + // Access + + //- Return const access to the initial surface tension + inline scalar sigma0() const; + + //- Return const access to the initial dynamic viscosity + inline scalar mu0() const; + }; + + protected: // Protected data @@ -71,6 +139,12 @@ protected: //- Injection position vector position0_; + //- Liquid surface tension [N/m] + scalar sigma_; + + //- Liquid dynamic viscosity [Pa.s] + scalar mu_; + //- Part of liquid core ( >0.5=liquid, <0.5=droplet ) scalar liquidCore_; @@ -219,6 +293,12 @@ public: //- Return const access to initial droplet position inline const vector& position0() const; + //- Return const access to the liquid surface tension + inline scalar sigma() const; + + //- Return const access to the liquid dynamic viscosity + inline scalar mu() const; + //- Return const access to liquid core inline scalar liquidCore() const; @@ -255,6 +335,12 @@ public: //- Return access to initial droplet position inline vector& position0(); + //- Return access to the liquid surface tension + inline scalar& sigma(); + + //- Return access to the liquid dynamic viscosity + inline scalar& mu(); + //- Return access to liquid core inline scalar& liquidCore(); diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelI.H b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelI.H index 0ec6aad0e44df9da728f1f6961298c359e3dd543..66e5dc616faa7a6130c1e3e01ce14d565a511f55 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelI.H +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,94 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class ParcelType> +inline Foam::SprayParcel<ParcelType>::constantProperties::constantProperties() +: + ParcelType::constantProperties(), + sigma0_(0.0), + mu0_(0.0) +{} + + +template<class ParcelType> +inline Foam::SprayParcel<ParcelType>::constantProperties::constantProperties +( + const constantProperties& cp +) +: + ParcelType::constantProperties(cp), + sigma0_(cp.sigma0_), + mu0_(cp.mu0_) +{} + + +template<class ParcelType> +inline Foam::SprayParcel<ParcelType>::constantProperties::constantProperties +( + const dictionary& parentDict, + const bool readFields +) +: + ParcelType::constantProperties(parentDict, readFields), + sigma0_(0.0), + mu0_(0.0) +{ + if (readFields) + { + this->dict().lookup("sigma0") >> sigma0_; + } +} + + +template<class ParcelType> +inline Foam::SprayParcel<ParcelType>::constantProperties::constantProperties +( + const label parcelTypeId, + const scalar rhoMin, + const scalar rho0, + const scalar minParticleMass, + const scalar youngsModulus, + const scalar poissonsRatio, + const scalar T0, + const scalar TMin, + const scalar TMax, + const scalar Cp0, + const scalar epsilon0, + const scalar f0, + const scalar Pr, + const scalar pMin, + const Switch& constantVolume, + const scalar Tvap, + const scalar Tbp, + const scalar sigma0, + const scalar mu0 +) +: + ParcelType::constantProperties + ( + parcelTypeId, + rhoMin, + rho0, + minParticleMass, + youngsModulus, + poissonsRatio, + T0, + TMin, + TMax, + Cp0, + epsilon0, + f0, + Pr, + pMin, + constantVolume, + Tvap, + Tbp + ), + sigma0_(sigma0), + mu0_(mu0) +{} + + template<class ParcelType> inline Foam::SprayParcel<ParcelType>::SprayParcel ( @@ -38,6 +126,8 @@ inline Foam::SprayParcel<ParcelType>::SprayParcel ParcelType(mesh, position, cellI, tetFaceI, tetPtI), d0_(this->d()), position0_(position), + sigma_(0.0), + mu_(0.0), liquidCore_(0.0), KHindex_(0.0), y_(0.0), @@ -99,6 +189,8 @@ inline Foam::SprayParcel<ParcelType>::SprayParcel ), d0_(d0), position0_(position), + sigma_(constProps.sigma0()), + mu_(constProps.mu0()), liquidCore_(liquidCore), KHindex_(KHindex), y_(y), @@ -127,6 +219,20 @@ inline const Foam::vector& Foam::SprayParcel<ParcelType>::position0() const } +template<class ParcelType> +inline Foam::scalar Foam::SprayParcel<ParcelType>::sigma() const +{ + return sigma_; +} + + +template<class ParcelType> +inline Foam::scalar Foam::SprayParcel<ParcelType>::mu() const +{ + return mu_; +} + + template<class ParcelType> inline Foam::scalar Foam::SprayParcel<ParcelType>::liquidCore() const { @@ -204,6 +310,20 @@ inline Foam::vector& Foam::SprayParcel<ParcelType>::position0() } +template<class ParcelType> +inline Foam::scalar& Foam::SprayParcel<ParcelType>::sigma() +{ + return sigma_; +} + + +template<class ParcelType> +inline Foam::scalar& Foam::SprayParcel<ParcelType>::mu() +{ + return mu_; +} + + template<class ParcelType> inline Foam::scalar& Foam::SprayParcel<ParcelType>::liquidCore() { diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C index f4d443f92a7bc27a2f3bf70d87b7678f1725c8f8..6708e73e7b3d35cec6c7887f2d48b8e1f5cd5a8d 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C @@ -33,6 +33,8 @@ Foam::string Foam::SprayParcel<ParcelType>::propHeader = ParcelType::propHeader + " d0" + " position0" + + " sigma" + + " mu" + " liquidCore" + " KHindex" + " y" @@ -57,6 +59,8 @@ Foam::SprayParcel<ParcelType>::SprayParcel ParcelType(mesh, is, readFields), d0_(0.0), position0_(vector::zero), + sigma_(0.0), + mu_(0.0), liquidCore_(0.0), KHindex_(0.0), y_(0.0), @@ -74,6 +78,8 @@ Foam::SprayParcel<ParcelType>::SprayParcel { d0_ = readScalar(is); is >> position0_; + sigma_ = readScalar(is); + mu_ = readScalar(is); liquidCore_ = readScalar(is); KHindex_ = readScalar(is); y_ = readScalar(is); @@ -91,6 +97,8 @@ Foam::SprayParcel<ParcelType>::SprayParcel reinterpret_cast<char*>(&d0_), sizeof(d0_) + sizeof(position0_) + + sizeof(sigma_) + + sizeof(mu_) + sizeof(liquidCore_) + sizeof(KHindex_) + sizeof(y_) @@ -154,6 +162,12 @@ void Foam::SprayParcel<ParcelType>::readFields ); c.checkFieldIOobject(c, position0); + IOField<scalar> sigma(c.fieldIOobject("sigma", IOobject::MUST_READ)); + c.checkFieldIOobject(c, sigma); + + IOField<scalar> mu(c.fieldIOobject("mu", IOobject::MUST_READ)); + c.checkFieldIOobject(c, mu); + IOField<scalar> liquidCore(c.fieldIOobject ( "liquidCore", IOobject::MUST_READ) @@ -190,6 +204,8 @@ void Foam::SprayParcel<ParcelType>::readFields SprayParcel<ParcelType>& p = iter(); p.d0_ = d0[i]; p.position0_ = position0[i]; + p.sigma_ = sigma[i]; + p.mu_ = mu[i]; p.liquidCore_ = liquidCore[i]; p.KHindex_ = KHindex[i]; p.y_ = y[i]; @@ -230,6 +246,8 @@ void Foam::SprayParcel<ParcelType>::writeFields c.fieldIOobject("position0", IOobject::NO_READ), np ); + IOField<scalar> sigma(c.fieldIOobject("sigma", IOobject::NO_READ), np); + IOField<scalar> mu(c.fieldIOobject("mu", IOobject::NO_READ), np); IOField<scalar> liquidCore ( c.fieldIOobject("liquidCore", IOobject::NO_READ), @@ -254,6 +272,8 @@ void Foam::SprayParcel<ParcelType>::writeFields const SprayParcel<ParcelType>& p = iter(); d0[i] = p.d0_; position0[i] = p.position0_; + sigma[i] = p.sigma_; + mu[i] = p.mu_; liquidCore[i] = p.liquidCore_; KHindex[i] = p.KHindex_; y[i] = p.y_; @@ -268,6 +288,8 @@ void Foam::SprayParcel<ParcelType>::writeFields d0.write(); position0.write(); + sigma.write(); + mu.write(); liquidCore.write(); KHindex.write(); y.write(); @@ -294,6 +316,8 @@ Foam::Ostream& Foam::operator<< os << static_cast<const ParcelType&>(p) << token::SPACE << p.d0() << token::SPACE << p.position0() + << token::SPACE << p.sigma() + << token::SPACE << p.mu() << token::SPACE << p.liquidCore() << token::SPACE << p.KHindex() << token::SPACE << p.y() @@ -312,6 +336,8 @@ Foam::Ostream& Foam::operator<< reinterpret_cast<const char*>(&p.d0_), sizeof(p.d0()) + sizeof(p.position0()) + + sizeof(p.sigma()) + + sizeof(p.mu()) + sizeof(p.liquidCore()) + sizeof(p.KHindex()) + sizeof(p.y()) diff --git a/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C b/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C index 01a480bab24d869687bf2d86c161b96918f2530e..3af2751d2f8bb8eecd904aab13022787c0321cf7 100644 --- a/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C +++ b/src/lagrangian/spray/parcels/derived/basicSprayParcel/makeBasicSprayParcelSubmodels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,6 +32,7 @@ License #include "makeParcelDispersionModels.H" #include "makeSprayParcelInjectionModels.H" // Spray variant #include "makeParcelPatchInteractionModels.H" +#include "makeSprayParcelStochasticCollisionModels.H" // Spray variant // Thermodynamic #include "makeParcelHeatTransferModels.H" @@ -44,7 +45,6 @@ License // Spray #include "makeSprayParcelAtomizationModels.H" #include "makeSprayParcelBreakupModels.H" -#include "makeSprayParcelCollisionModels.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -57,6 +57,7 @@ namespace Foam makeParcelDispersionModels(basicSprayCloud); makeSprayParcelInjectionModels(basicSprayCloud); makeParcelPatchInteractionModels(basicSprayCloud); + makeSprayParcelStochasticCollisionModels(basicSprayCloud); // Thermo sub-models makeParcelHeatTransferModels(basicSprayCloud); @@ -69,7 +70,6 @@ namespace Foam // Spray sub-models makeSprayParcelAtomizationModels(basicSprayCloud); makeSprayParcelBreakupModels(basicSprayCloud); - makeSprayParcelCollisionModels(basicSprayCloud); }; diff --git a/src/lagrangian/spray/parcels/include/makeSprayParcelCollisionModels.H b/src/lagrangian/spray/parcels/include/makeSprayParcelStochasticCollisionModels.H similarity index 88% rename from src/lagrangian/spray/parcels/include/makeSprayParcelCollisionModels.H rename to src/lagrangian/spray/parcels/include/makeSprayParcelStochasticCollisionModels.H index b5fc1ce39bbc4285c19928b3bfbe0eab7089e84f..2d9fdbf4a300ce62aac6994a912b58d00b252545 100644 --- a/src/lagrangian/spray/parcels/include/makeSprayParcelCollisionModels.H +++ b/src/lagrangian/spray/parcels/include/makeSprayParcelStochasticCollisionModels.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,8 +23,8 @@ License \*---------------------------------------------------------------------------*/ -#ifndef makeSprayParcelCollisionModels_H -#define makeSprayParcelCollisionModels_H +#ifndef makeSprayParcelStochasticCollisionModels_H +#define makeSprayParcelStochasticCollisionModels_H // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -34,7 +34,7 @@ License // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeSprayParcelCollisionModels(CloudType) \ +#define makeSprayParcelStochasticCollisionModels(CloudType) \ \ makeStochasticCollisionModel(CloudType); \ makeStochasticCollisionModelType(NoStochasticCollision, CloudType); \ diff --git a/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C b/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C index 793eb50a35e7986d7f697e226252d05d45f3f385..258dd588a35ba1751d5a45b4ab4bdf634c4663f9 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C +++ b/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C @@ -24,150 +24,120 @@ License \*---------------------------------------------------------------------------*/ #include "ORourkeCollision.H" +#include "mathematicalConstants.H" +#include "SLGThermo.H" -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class CloudType> -Foam::ORourkeCollision<CloudType>::ORourkeCollision -( - const dictionary& dict, - CloudType& owner -) -: - StochasticCollisionModel<CloudType>(dict, owner, typeName), - coalescence_(this->coeffDict().lookup("coalescence")) -{} +using namespace Foam::constant::mathematical; +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // template<class CloudType> -Foam::ORourkeCollision<CloudType>::ORourkeCollision -( - const ORourkeCollision<CloudType>& cm -) -: - StochasticCollisionModel<CloudType>(cm), - coalescence_(cm.coalescence_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // +void Foam::ORourkeCollision<CloudType>::collide(const scalar dt) +{ + label i = 0; + forAllIter(typename CloudType, this->owner(), iter1) + { + label j = 0; + forAllIter(typename CloudType, this->owner(), iter2) + { + if (j > i) + { + parcelType& p1 = iter1(); + parcelType& p2 = iter2(); + + scalar m1 = p1.nParticle()*p1.mass(); + scalar m2 = p2.nParticle()*p2.mass(); + + bool massChanged = collideParcels(dt, p1, p2, m1, m2); + + if (massChanged) + { + if (m1 > ROOTVSMALL) + { + const scalarField X(liquids_.X(p1.Y())); + p1.rho() = liquids_.rho(p1.pc(), p1.T(), X); + p1.Cp() = liquids_.Cp(p1.pc(), p1.T(), X); + p1.sigma() = liquids_.sigma(p1.pc(), p1.T(), X); + p1.mu() = liquids_.mu(p1.pc(), p1.T(), X); + p1.d() = cbrt(6.0*m1/(p1.nParticle()*p1.rho()*pi)); + } + + if (m2 > ROOTVSMALL) + { + const scalarField X(liquids_.X(p2.Y())); + p2.rho() = liquids_.rho(p2.pc(), p2.T(), X); + p2.Cp() = liquids_.Cp(p2.pc(), p2.T(), X); + p2.sigma() = liquids_.sigma(p2.pc(), p2.T(), X); + p2.mu() = liquids_.mu(p2.pc(), p2.T(), X); + p2.d() = cbrt(6.0*m2/(p2.nParticle()*p2.rho()*pi)); + } + } + } + j++; + } + i++; + } -template<class CloudType> -Foam::ORourkeCollision<CloudType>::~ORourkeCollision() -{} + // remove coalesced parcels that fall below minimum mass threshold + forAllIter(typename CloudType, this->owner(), iter) + { + parcelType& p = iter(); + scalar mass = p.nParticle()*p.mass(); + if (mass < this->owner().constProps().minParticleMass()) + { + this->owner().deleteParticle(p); + } + } +} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class CloudType> -bool Foam::ORourkeCollision<CloudType>::update +bool Foam::ORourkeCollision<CloudType>::collideParcels ( const scalar dt, - cachedRandom& rndGen, - vector& pos1, + parcelType& p1, + parcelType& p2, scalar& m1, - scalar& d1, - scalar& N1, - vector& U1, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj -) const + scalar& m2 +) { + const label cell1 = p1.cell(); + const label cell2 = p2.cell(); + // check if parcels belong to same cell - if ((celli != cellj) || (m1 < VSMALL) || (m2 < VSMALL)) + if ((cell1 != cell2) || (m1 < ROOTVSMALL) || (m2 < ROOTVSMALL)) { return false; } bool coalescence = false; - scalar magVrel = mag(U1-U2); + const scalar Vc = this->owner().mesh().V()[cell1]; + const scalar d1 = p1.d(); + const scalar d2 = p2.d(); + + scalar magUrel = mag(p1.U() - p2.U()); scalar sumD = d1 + d2; - scalar nu0 = 0.25*constant::mathematical::pi*sumD*sumD*magVrel*dt/volj; - scalar nMin = min(N1, N2); + scalar nu0 = 0.25*constant::mathematical::pi*sqr(sumD)*magUrel*dt/Vc; + scalar nMin = min(p1.nParticle(), p2.nParticle()); scalar nu = nMin*nu0; scalar collProb = exp(-nu); - scalar xx = rndGen.sample01<scalar>(); + scalar xx = this->owner().rndGen().template sample01<scalar>(); // collision occurs if (xx > collProb) { if (d1 > d2) { - coalescence = collideSorted - ( - dt, - rndGen, - pos1, - m1, - d1, - N1, - U1, - rho1, - T1, - Y1, - sigma1, - celli, - voli, - pos2, - m2, - d2, - N2, - U2, - rho2, - T2, - Y2, - sigma2, - cellj, - volj - ); + coalescence = collideSorted(dt, p1, p2, m1, m2); } else { - coalescence = collideSorted - ( - dt, - rndGen, - pos2, - m2, - d2, - N2, - U2, - rho2, - T2, - Y2, - sigma2, - cellj, - volj, - pos1, - m1, - d1, - N1, - U1, - rho1, - T1, - Y1, - sigma1, - celli, - voli - ); + coalescence = collideSorted(dt, p2, p1, m2, m1); } } + return coalescence; } @@ -176,85 +146,81 @@ template<class CloudType> bool Foam::ORourkeCollision<CloudType>::collideSorted ( const scalar dt, - cachedRandom& rndGen, - vector& pos1, + parcelType& p1, + parcelType& p2, scalar& m1, - scalar& d1, - scalar& N1, - vector& U1, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj -) const + scalar& m2 +) { bool coalescence = false; - vector vRel = U1 - U2; - scalar magVRel = mag(vRel); + const scalar sigma1 = p1.sigma(); + const scalar sigma2 = p2.sigma(); - scalar mdMin = m2/N2; + const scalar d1 = p1.d(); + const scalar d2 = p2.d(); - scalar mTot = m1 + m2; + const scalar T1 = p1.T(); + const scalar T2 = p2.T(); + + const scalar rho1 = p1.rho(); + const scalar rho2 = p2.rho(); - scalar gamma = d1/max(d2, 1.0e-12); - scalar f = gamma*gamma*gamma + 2.7*gamma - 2.4*gamma*gamma; + const vector& U1 = p1.U(); + const vector& U2 = p2.U(); - vector momMax = m1*U1; - vector momMin = m2*U2; + const label& nP1 = p1.nParticle(); + const label& nP2 = p2.nParticle(); - // use mass-averaged temperature to calculate We number - scalar Tm = (T1*m1 + T2*m2)/mTot; - // interpolate the averaged surface tension - scalar sigma = sigma1 + (sigma2 - sigma1)*(Tm - T1)/(T2 - T1); + vector URel = U1 - U2; + scalar magURel = mag(URel); + + scalar mTot = m1 + m2; + + scalar gamma = d1/max(ROOTVSMALL, d2); + scalar f = pow3(gamma) + 2.7*gamma - 2.4*sqr(gamma); + + // mass-averaged temperature + scalar Tave = (T1*m1 + T2*m2)/mTot; + + // interpolate to find average surface tension + scalar sigmaAve = sigma1 + (sigma2 - sigma1)*(Tave - T1)/(T2 - T1); - sigma = max(1.0e-6, sigma); scalar Vtot = m1/rho1 + m2/rho2; - scalar rho = mTot/Vtot; + scalar rhoAve = mTot/Vtot; - scalar dMean = sqrt(d1*d2); - scalar WeColl = max(1.0e-12, 0.5*rho*magVRel*magVRel*dMean/sigma); + scalar dAve = sqrt(d1*d2); + scalar WeColl = 0.5*rhoAve*sqr(magURel)*dAve/max(ROOTVSMALL, sigmaAve); - scalar coalesceProb = min(1.0, 2.4*f/WeColl); + scalar coalesceProb = min(1.0, 2.4*f/max(ROOTVSMALL, WeColl)); - scalar prob = rndGen.sample01<scalar>(); + scalar prob = this->owner().rndGen().template sample01<scalar>(); // Coalescence if (prob < coalesceProb && coalescence_) { coalescence = true; - // How 'many' of the droplets coalesce - scalar nProb = prob*N2/N1; - // Conservation of mass, momentum and energy - scalar m2Org = m2; - scalar dm = N1*nProb*mdMin; - m2 -= dm; - scalar V2 = constant::mathematical::pi*pow3(d2)/6.0; - N2 = m2/(rho2*V2); + // number of the droplets that coalesce + scalar nProb = prob*nP2/nP1; + // conservation of mass, momentum and energy scalar m1Org = m1; + scalar m2Org = m2; + + scalar dm = nP1*nProb*m2/scalar(nP2); + m1 += dm; - T1 = (Tm*mTot - m2*T2)/m1; + m2 -= dm; + + p1.T() = (Tave*mTot - m2*T2)/m1; + + p1.U() = (m1*U1 + (1.0 - m2/m2Org)*m2*U2)/m1; - U1 =(momMax + (1.0 - m2/m2Org)*momMin)/m1; + p1.Y() = (m1Org*p1.Y() + dm*p2.Y())/m1; - // update the liquid mass fractions - Y1 = (m1Org*Y1 + dm*Y2)/m1; + p2.nParticle() = m2/(rho2*p2.volume()); } // Grazing collision (no coalescence) else @@ -271,28 +237,65 @@ bool Foam::ORourkeCollision<CloudType>::collideSorted // and these parcels should have coalesced gf = max(0.0, gf); - // gf -> 1 => v1p -> p1().U() ... - // gf -> 0 => v1p -> momentum/(m1+m2) + // gf -> 1 => v1p -> U1 ... + // gf -> 0 => v1p -> momentum/mTot vector mr = m1*U1 + m2*U2; - vector v1p = (mr + m2*gf*vRel)/(m1+m2); - vector v2p = (mr - m1*gf*vRel)/(m1+m2); + vector v1p = (mr + m2*gf*URel)/mTot; + vector v2p = (mr - m1*gf*URel)/mTot; - if (N1 < N2) + if (nP1 < nP2) { - U1 = v1p; - U2 = (N1*v2p + (N2-N1)*U2)/N2; + p1.U() = v1p; + p2.U() = (nP1*v2p + (nP2 - nP1)*U2)/nP2; } else { - U1 = (N2*v1p + (N1-N2)*U1)/N1; - U2 = v2p; + p1.U() = (nP2*v1p + (nP1 - nP2)*U1)/nP1; + p2.U() = v2p; } - } return coalescence; } +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ORourkeCollision<CloudType>::ORourkeCollision +( + const dictionary& dict, + CloudType& owner, + const word& modelName +) +: + StochasticCollisionModel<CloudType>(dict, owner, modelName), + liquids_ + ( + owner.db().template lookupObject<SLGThermo>("SLGThermo").liquids() + ), + coalescence_(this->coeffDict().lookup("coalescence")) +{} + + +template<class CloudType> +Foam::ORourkeCollision<CloudType>::ORourkeCollision +( + const ORourkeCollision<CloudType>& cm +) +: + StochasticCollisionModel<CloudType>(cm), + liquids_(cm.liquids_), + coalescence_(cm.coalescence_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::ORourkeCollision<CloudType>::~ORourkeCollision() +{} + + // ************************************************************************* // diff --git a/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.H b/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.H index 1a98c9e5f9b4650bc01c124f05a3d2bc069e1043..0e3381a9af40fb7443604f9acf641c5690afc665 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.H +++ b/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,13 +34,14 @@ Description #define ORourkeCollision_H #include "StochasticCollisionModel.H" +#include "liquidMixtureProperties.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ - Class ORourkeCollision Declaration + Class ORourkeCollision Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -48,10 +49,44 @@ class ORourkeCollision : public StochasticCollisionModel<CloudType> { -private: +protected: + + // Protected Data + + //- Convenience typedef to the cloud's parcel type + typedef typename CloudType::parcelType parcelType; + + const liquidMixtureProperties& liquids_; + + //- Coalescence activation switch + Switch coalescence_; + + + // Protected Member Functions + + //- Main collision routine + virtual void collide(const scalar dt); + + //- Collide parcels and return true if mass has changed + virtual bool collideParcels + ( + const scalar dt, + parcelType& p1, + parcelType& p2, + scalar& m1, + scalar& m2 + ); + + // 1 is the larger drop and 2 is the smaller + virtual bool collideSorted + ( + const scalar dt, + parcelType& p1, + parcelType& p2, + scalar& m1, + scalar& m2 + ); - dictionary coeffsDict_; - Switch coalescence_; public: @@ -62,7 +97,12 @@ public: // Constructors //- Construct from dictionary - ORourkeCollision(const dictionary& dict, CloudType& cloud); + ORourkeCollision + ( + const dictionary& dict, + CloudType& cloud, + const word& modelName = typeName + ); //- Construct copy ORourkeCollision(const ORourkeCollision<CloudType>& cm); @@ -79,67 +119,6 @@ public: //- Destructor virtual ~ORourkeCollision(); - - - // Member Functions - - virtual bool update - ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj - ) const; - - - // 1 is the larger drop and 2 is the smaller - bool collideSorted - ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj - ) const; }; diff --git a/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.C b/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.C index fa09dfc2ca9f162b01680ad292e91df74e70409c..4abc032432b2683f26988af4f2f3ce40f85e84c3 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.C +++ b/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.C @@ -25,187 +25,96 @@ License #include "TrajectoryCollision.H" -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class CloudType> -Foam::TrajectoryCollision<CloudType>::TrajectoryCollision -( - const dictionary& dict, - CloudType& owner -) -: - StochasticCollisionModel<CloudType>(dict, owner, typeName), - cSpace_(readScalar(this->coeffDict().lookup("cSpace"))), - cTime_(readScalar(this->coeffDict().lookup("cTime"))), - coalescence_(this->coeffDict().lookup("coalescence")) -{} - - -template<class CloudType> -Foam::TrajectoryCollision<CloudType>::TrajectoryCollision -( - const TrajectoryCollision<CloudType>& cm -) -: - StochasticCollisionModel<CloudType>(cm), - cSpace_(cm.cSpace_), - cTime_(cm.cTime_), - coalescence_(cm.coalescence_) -{} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // template<class CloudType> -Foam::TrajectoryCollision<CloudType>::~TrajectoryCollision() -{} - +void Foam::TrajectoryCollision<CloudType>::collide(const scalar dt) +{ + ORourkeCollision<CloudType>::collide(dt); +} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class CloudType> -bool Foam::TrajectoryCollision<CloudType>::update +bool Foam::TrajectoryCollision<CloudType>::collideParcels ( const scalar dt, - cachedRandom& rndGen, - vector& pos1, + parcelType& p1, + parcelType& p2, scalar& m1, - scalar& d1, - scalar& N1, - vector& U1, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj -) const + scalar& m2 +) { bool coalescence = false; - vector vRel = U1 - U2; + const vector& pos1 = p1.position(); + const vector& pos2 = p2.position(); + + const vector& U1 = p1.U(); + const vector& U2 = p2.U(); - vector p = pos2 - pos1; - scalar dist = mag(p); + vector URel = U1 - U2; - scalar vAlign = vRel & (p/(dist + SMALL)); + vector d = pos2 - pos1; + scalar magd = mag(d); + + scalar vAlign = URel & (d/(magd + ROOTVSMALL)); if (vAlign > 0) { + const scalar d1 = p1.d(); + const scalar d2 = p2.d(); + scalar sumD = d1 + d2; - if (vAlign*dt > dist - 0.5*sumD) + if (vAlign*dt > magd - 0.5*sumD) { - scalar v1Mag = mag(U1); - scalar v2Mag = mag(U2); - vector nv1 = U1/v1Mag; - vector nv2 = U2/v2Mag; + scalar magU1 = mag(U1) + ROOTVSMALL; + scalar magU2 = mag(U2) + ROOTVSMALL; + vector n1 = U1/magU1; + vector n2 = U2/magU2; - scalar v1v2 = nv1 & nv2; - scalar v1p = nv1 & p; - scalar v2p = nv2 & p; + scalar n1n2 = n1 & n2; + scalar n1d = n1 & d; + scalar n2d = n2 & d; - scalar det = 1.0 - v1v2*v1v2; + scalar det = 1.0 - sqr(n1n2); - scalar alpha = 1.0e+20; - scalar beta = 1.0e+20; + scalar alpha = GREAT; + scalar beta = GREAT; if (mag(det) > 1.0e-4) { - beta = -(v2p - v1v2*v1p)/det; - alpha = v1p + v1v2*beta; + beta = -(n2d - n1n2*n1d)/det; + alpha = n1d + n1n2*beta; } - alpha /= v1Mag*dt; - beta /= v2Mag*dt; + alpha /= magU1*dt; + beta /= magU2*dt; // is collision possible within this timestep - if ((alpha>0) && (alpha<1.0) && (beta>0) && (beta<1.0)) + if ((alpha > 0) && (alpha < 1.0) && (beta > 0) && (beta < 1.0)) { vector p1c = pos1 + alpha*U1*dt; vector p2c = pos2 + beta*U2*dt; - scalar closestDist = mag(p1c-p2c); + scalar closestDist = mag(p1c - p2c); scalar collProb = pow(0.5*sumD/max(0.5*sumD, closestDist), cSpace_) - * exp(-cTime_*mag(alpha-beta)); + *exp(-cTime_*mag(alpha - beta)); - scalar xx = rndGen.sample01<scalar>(); + scalar xx = this->owner().rndGen().template sample01<scalar>(); - // collision occur - if ((xx < collProb) && (m1 > VSMALL) && (m2 > VSMALL)) + // collision occurs + if (xx > collProb) { if (d1 > d2) { - coalescence = collideSorted - ( - dt, - rndGen, - pos1, - m1, - d1, - N1, - U1, - rho1, - T1, - Y1, - sigma1, - celli, - voli, - pos2, - m2, - d2, - N2, - U2, - rho2, - T2, - Y2, - sigma2, - cellj, - volj - ); + coalescence = this->collideSorted(dt, p1, p2, m1, m2); } else { - coalescence = collideSorted - ( - dt, - rndGen, - pos2, - m2, - d2, - N2, - U2, - rho2, - T2, - Y2, - sigma2, - cellj, - volj, - pos1, - m1, - d1, - N1, - U1, - rho1, - T1, - Y1, - sigma1, - celli, - voli - ); + coalescence = this->collideSorted(dt, p2, p1, m2, m1); } } } @@ -216,128 +125,38 @@ bool Foam::TrajectoryCollision<CloudType>::update } +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + template<class CloudType> -bool Foam::TrajectoryCollision<CloudType>::collideSorted +Foam::TrajectoryCollision<CloudType>::TrajectoryCollision ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U1, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj -) const -{ - bool coalescence = false; - - vector vRel = U1 - U2; - - scalar mdMin = m2/N2; - - scalar mTot = m1 + m2; - - scalar gamma = d1/max(d2, 1.0e-12); - scalar f = gamma*gamma*gamma + 2.7*gamma - 2.4*gamma*gamma; - - vector momMax = m1*U1; - vector momMin = m2*U2; - - // use mass-averaged temperature to calculate We number - scalar Tm = (T1*m1 + T2*m2)/mTot; - - // and mass averaged fractions ... - //scalarField Yav((m1*Y1 + m2*Y2)/mTot; - - // interpolate the averaged surface tension - scalar sigma = sigma1 + (sigma2 - sigma1)*(Tm - T1)/(T2 - T1); - - sigma = max(1.0e-6, sigma); - scalar Vtot = m1/rho1 + m2/rho2; - scalar rho = mTot/Vtot; - - scalar dMean = sqrt(d1*d2); - scalar WeColl = max(1.0e-12, 0.5*rho*magSqr(vRel)*dMean/sigma); - - scalar coalesceProb = min(1.0, 2.4*f/WeColl); - - scalar prob = rndGen.sample01<scalar>(); - - // Coalescence - if ( prob < coalesceProb && coalescence_) - { - coalescence = true; - // How 'many' of the droplets coalesce - scalar nProb = prob*N2/N1; - - // Conservation of mass, momentum and energy - scalar m2Org = m2; - scalar dm = N1*nProb*mdMin; - m2 -= dm; - scalar V2 = constant::mathematical::pi*pow3(d2)/6.0; - N2 = m2/(rho2*V2); - - scalar m1Org = m1; - m1 += dm; - T1 = (Tm*mTot - m2*T2)/m1; - - U1 =(momMax + (1.0 - m2/m2Org)*momMin)/m1; - - // update the liquid mass fractions - Y1 = (m1Org*Y1 + dm*Y2)/m1; - } - // Grazing collision (no coalescence) - else - { - scalar gf = sqrt(prob) - sqrt(coalesceProb); - scalar denom = 1.0 - sqrt(coalesceProb); - if (denom < 1.0e-5) - { - denom = 1.0; - } - gf /= denom; + const dictionary& dict, + CloudType& owner +) +: + ORourkeCollision<CloudType>(dict, owner, typeName), + cSpace_(readScalar(this->coeffDict().lookup("cSpace"))), + cTime_(readScalar(this->coeffDict().lookup("cTime"))) +{} - // if gf negative, this means that coalescence is turned off - // and these parcels should have coalesced - gf = max(0.0, gf); - // gf -> 1 => v1p -> p1().U() ... - // gf -> 0 => v1p -> momentum/(m1 + m2) +template<class CloudType> +Foam::TrajectoryCollision<CloudType>::TrajectoryCollision +( + const TrajectoryCollision<CloudType>& cm +) +: + ORourkeCollision<CloudType>(cm), + cSpace_(cm.cSpace_), + cTime_(cm.cTime_) +{} - vector mr = m1*U1 + m2*U2; - vector v1p = (mr + m2*gf*vRel)/(m1 + m2); - vector v2p = (mr - m1*gf*vRel)/(m1 + m2); - if (N1 < N2) - { - U1 = v1p; - U2 = (N1*v2p + (N2 - N1)*U2)/N2; - } - else - { - U1 = (N2*v1p + (N1 - N2)*U1)/N1; - U2 = v2p; - } - } +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - return coalescence; -} +template<class CloudType> +Foam::TrajectoryCollision<CloudType>::~TrajectoryCollision() +{} // ************************************************************************* // diff --git a/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.H b/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.H index 979d84b49004f08556385258c39a9b3a3b1cc07e..ebd23198a06b5d7969c55afbb144c35889b272bc 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.H +++ b/src/lagrangian/spray/submodels/StochasticCollision/TrajectoryCollision/TrajectoryCollision.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,35 +25,57 @@ Class Foam::TrajectoryCollision Description - Trajectory collision model by N. Nordin. + Trajectory collision model by N. Nordin, based on O'Rourke's collision + model \*---------------------------------------------------------------------------*/ #ifndef TrajectoryCollision_H #define TrajectoryCollision_H -#include "StochasticCollisionModel.H" +#include "ORourkeCollision.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ - Class TrajectoryCollision Declaration + Class TrajectoryCollision Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> class TrajectoryCollision : - public StochasticCollisionModel<CloudType> + public ORourkeCollision<CloudType> { -private: +protected: - // Private data + // Protected Data + //- Convenience typedef to the cloud's parcel type + typedef typename CloudType::parcelType parcelType; + + //- Space coefficient scalar cSpace_; + + //- Time coefficient scalar cTime_; - Switch coalescence_; + + + // Protected Member Functions + + //- Main collision routine + virtual void collide(const scalar dt); + + //- Collide parcels and return true if mass has changed + virtual bool collideParcels + ( + const scalar dt, + parcelType& p1, + parcelType& p2, + scalar& m1, + scalar& m2 + ); public: @@ -82,66 +104,6 @@ public: //- Destructor virtual ~TrajectoryCollision(); - - - // Member Functions - - virtual bool update - ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj - ) const; - - // 1 is the larger drop and 2 is the smaller - bool collideSorted - ( - const scalar dt, - cachedRandom& rndGen, - vector& pos1, - scalar& m1, - scalar& d1, - scalar& N1, - vector& U, - scalar& rho1, - scalar& T1, - scalarField& Y1, - const scalar sigma1, - const label celli, - const scalar voli, - vector& pos2, - scalar& m2, - scalar& d2, - scalar& N2, - vector& U2, - scalar& rho2, - scalar& T2, - scalarField& Y2, - const scalar sigma2, - const label cellj, - const scalar volj - ) const; }; diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C index 0178c1387537fa855195bb85a802a52784b57099..4c262bd132049c99532332526fc94d9e4c059e80 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C @@ -918,7 +918,7 @@ Foam::vectorField Foam::autoSnapDriver::calcNearestSurface << " coordinate:" << localPoints[pointI] << " did not find any surface within:" << minSnapDist[pointI] - << " meter." << endl; + << " metre." << endl; } } diff --git a/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C b/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C index 9c8f08630f189deeda3eacee7cc520896c58f7c0..f3d969e69113b09948af15f631a9c8f1672ad404 100644 --- a/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C +++ b/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C @@ -133,7 +133,7 @@ void Foam::refinementFeatures::read { Info<< " level " << levels_[featI][j] << " for all cells within " << distances_[featI][j] - << " meter." << endl; + << " metre." << endl; } } } diff --git a/src/mesh/autoMesh/autoHexMesh/shellSurfaces/shellSurfaces.C b/src/mesh/autoMesh/autoHexMesh/shellSurfaces/shellSurfaces.C index a7a44f3fbfb388de08469b2a80f6616d4b31c685..8de805a692817c3ffff4f47b449190fd9a407ef6 100644 --- a/src/mesh/autoMesh/autoHexMesh/shellSurfaces/shellSurfaces.C +++ b/src/mesh/autoMesh/autoHexMesh/shellSurfaces/shellSurfaces.C @@ -119,7 +119,7 @@ void Foam::shellSurfaces::setAndCheckLevels { Info<< " level " << levels_[shellI][j] << " for all cells within " << distances_[shellI][j] - << " meter." << endl; + << " metre." << endl; } } else diff --git a/src/mesh/blockMesh/blockMesh/blockMesh.H b/src/mesh/blockMesh/blockMesh/blockMesh.H index 0188d28dca533568885987e9b2535457a2131444..e3a6619ce9a377d53ed71395ef94cb88ea36a875 100644 --- a/src/mesh/blockMesh/blockMesh/blockMesh.H +++ b/src/mesh/blockMesh/blockMesh/blockMesh.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -69,7 +69,7 @@ class blockMesh //- The list of curved edges curvedEdgeList edges_; - //- The scaling factor to convert to meters + //- The scaling factor to convert to metres scalar scaleFactor_; //- The blocks themselves (the topology) as a polyMesh @@ -171,7 +171,7 @@ public: return edges_; } - //- The scaling factor used to convert to meters + //- The scaling factor used to convert to metres scalar scaleFactor() const; //- The points for the entire mesh diff --git a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H index c169a98ca16106a7515fed0212aeab7b218b4347..1344cda2d9ed5fc4da35dcea0e3ca7a57e1284e2 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H +++ b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,7 +65,7 @@ private: // Private Member Data - //- gap size in meter + //- gap size in metre const scalar gap_; //- Underlying geometry (size 1) diff --git a/src/meshTools/sets/topoSets/topoSet.C b/src/meshTools/sets/topoSets/topoSet.C index 561d9fbe46c3958de7ef911258ce58f0fd7b30bf..37fe9a0595883afdd500942c603056dcc7f39812 100644 --- a/src/meshTools/sets/topoSets/topoSet.C +++ b/src/meshTools/sets/topoSets/topoSet.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -269,7 +269,7 @@ void Foam::topoSet::writeDebug boundBox bb(pointField(coords, toc()), true); os << "Set bounding box: min = " - << bb.min() << " max = " << bb.max() << " meters. " << endl << endl; + << bb.min() << " max = " << bb.max() << " metres. " << endl << endl; label n = 0; diff --git a/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H b/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H index a0c703dd1cc555d600b628b6744749e3c805d010..533b063750c6bdce678f5645363c0421b149bf50 100644 --- a/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H +++ b/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H @@ -49,7 +49,7 @@ Description d/dt(fmm) + div(U*fmm) = - (1/T)*(M && M - flm) + (1/T)*(M && M - fmm) where diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties index 91b20eee70e0e31a2b2c602b95ecd7581809aa31..1de9320ac1ad84e40ae98d77419d38d6289d429e 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties @@ -89,6 +89,8 @@ subModels phaseChangeModel none; + stochasticCollisionModel none; + surfaceFilmModel thermoSurfaceFilm; radiation off; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties index 91b20eee70e0e31a2b2c602b95ecd7581809aa31..1de9320ac1ad84e40ae98d77419d38d6289d429e 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties @@ -89,6 +89,8 @@ subModels phaseChangeModel none; + stochasticCollisionModel none; + surfaceFilmModel thermoSurfaceFilm; radiation off; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties index 91b20eee70e0e31a2b2c602b95ecd7581809aa31..1de9320ac1ad84e40ae98d77419d38d6289d429e 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties @@ -89,6 +89,8 @@ subModels phaseChangeModel none; + stochasticCollisionModel none; + surfaceFilmModel thermoSurfaceFilm; radiation off; diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties index aa8b02241a5b7ed42e112ad151f2340bb5ea59db..6b759cd17e3e038b3f29bdac510f4dc3b72e4621 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties @@ -144,6 +144,8 @@ subModels surfaceReactionModel none; + stochasticCollisionModel none; + surfaceFilmModel none; radiation off; diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties index bc122d0a3791682a799e6ab51be69453dafc5428..77742fd0180b23d33f2337fd6a4d93a8d5711ddb 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/coalCloud1Properties @@ -117,6 +117,8 @@ subModels devolatilisationModel constantRateDevolatilisation; + stochasticCollisionModel none; + surfaceReactionModel COxidationKineticDiffusionLimitedRate; surfaceFilmModel none; diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties index 0517933f4d4b7470debddaedb58196a8662a04ad..1177f8fc321c5ec9277ae8a9816a8150dedf3f33 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/limestoneCloud1Properties @@ -104,6 +104,8 @@ subModels heatTransferModel RanzMarshall; + stochasticCollisionModel none; + surfaceFilmModel none; radiation on; diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties index 36014706556c8524d4ff3e3ab9b26cfb0c95518d..20eed6f6e0e785cd4e37eeb988c69c98396ada00 100644 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties +++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/kinematicCloudProperties @@ -70,6 +70,8 @@ subModels heatTransferModel none; + stochasticCollisionModel none; + surfaceFilmModel none; collisionModel pairCollision; diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties index fbd8c9f174c499ac0d2829f7e958bc6ae1702691..b24dcb63b23eba2f077124ac95e021fd7d0744a8 100644 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties +++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/kinematicCloudProperties @@ -80,6 +80,8 @@ subModels heatTransferModel none; + stochasticCollisionModel none; + surfaceFilmModel none; collisionModel pairCollision; diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties index 68e6be961fcf77de5a29026e74b7ae2c5f7d9773..45ae8875b737fc122940315d9d3ff594744a9512 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/constant/reactingCloud1Properties @@ -101,6 +101,8 @@ subModels phaseChangeModel none; + stochasticCollisionModel none; + surfaceFilmModel thermoSurfaceFilm; radiation off; diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties index a4d326c0411c0f9831860b14739a1294fa5cac6d..fb559463aade92aabea4545fd8a48dde00ba5646 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/reactingCloud1Properties @@ -123,6 +123,8 @@ subModels phaseChangeModel none; + stochasticCollisionModel none; + surfaceFilmModel thermoSurfaceFilm; radiation off; diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties index b59b42445e9092a2997977b7433fd3d158f968d4..c25468b554f13ea9ffe18c18a972fb1a5538385a 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties @@ -101,6 +101,8 @@ subModels phaseChangeModel none; + stochasticCollisionModel none; + surfaceFilmModel thermoSurfaceFilm; radiation off; diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties index cb6c2dd3becd14a73d94c1392f5671307b8e7898..5a1582cead67ec7a347edce8a3fc920e365ef92b 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFoam/filter/constant/reactingCloud1Properties @@ -110,6 +110,8 @@ subModels surfaceReactionModel none; + stochasticCollisionModel none; + surfaceFilmModel none; radiation off; diff --git a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties index 56b0a2d3e7c473f1316a983cbfa0e1aed79c467d..478bbe13595bf8beb9ee5c04f6b1970a70f44ce7 100644 --- a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/constant/reactingCloud1Properties @@ -118,6 +118,8 @@ subModels surfaceReactionModel none; + stochasticCollisionModel none; + surfaceFilmModel none; radiation off; diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties index b4d1d9abdf50879e95417c9dbe5aac5e873ca786..47cd1a3bb693eec15eb18a46377e26275325fa76 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/reactingCloud1Properties @@ -139,6 +139,8 @@ subModels surfaceReactionModel none; + stochasticCollisionModel none; + surfaceFilmModel none; radiation off; diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties index aa8b02241a5b7ed42e112ad151f2340bb5ea59db..6b759cd17e3e038b3f29bdac510f4dc3b72e4621 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/reactingCloud1Properties @@ -144,6 +144,8 @@ subModels surfaceReactionModel none; + stochasticCollisionModel none; + surfaceFilmModel none; radiation off; diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties index 0ce1e3bbc8a22230ffde01e1393f55c4e6c05deb..dc08a39d09b9ecbab2837cc9282400335c5b5ef0 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/sprayCloudProperties @@ -161,14 +161,14 @@ subModels phaseChangeModel liquidEvaporationBoil; + stochasticCollisionModel none; + surfaceFilmModel none; atomizationModel none; breakupModel ReitzDiwakar; // ReitzKHRT; - stochasticCollisionModel none; - radiation off; standardWallInteractionCoeffs diff --git a/tutorials/multiphase/compressibleTwoPhaseEulerFoam/fluidisedBed/system/fvSolution b/tutorials/multiphase/compressibleTwoPhaseEulerFoam/fluidisedBed/system/fvSolution index a2906e9722b1ed3183c4eb5484fd25c103863e38..e0cc208e4ef5f8e59ae5a5ce3a4871e631eb1303 100644 --- a/tutorials/multiphase/compressibleTwoPhaseEulerFoam/fluidisedBed/system/fvSolution +++ b/tutorials/multiphase/compressibleTwoPhaseEulerFoam/fluidisedBed/system/fvSolution @@ -17,6 +17,12 @@ FoamFile solvers { + alpha1 + { + nAlphaCorr 1; + nAlphaSubCycles 2; + } + p { solver GAMG; @@ -90,11 +96,9 @@ solvers PIMPLE { - nOuterCorrectors 3; - nCorrectors 1; + nOuterCorrectors 1; + nCorrectors 3; nNonOrthogonalCorrectors 0; - nAlphaCorr 1; - nAlphaSubCycles 2; } relaxationFactors diff --git a/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSolution b/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSolution index 569a58a3403abae5f9073d2d6bc8a4f507530857..6bea5720564eeb6cd3d9694e2caf5caa5f566c0a 100644 --- a/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSolution @@ -17,6 +17,13 @@ FoamFile solvers { + alpha1 + { + nAlphaCorr 1; + nAlphaSubCycles 2; + cAlpha 1; + } + pcorr { solver PCG; @@ -54,9 +61,6 @@ PIMPLE momentumPredictor no; nCorrectors 3; nNonOrthogonalCorrectors 0; - nAlphaCorr 1; - nAlphaSubCycles 2; - cAlpha 1; } diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution index 569a58a3403abae5f9073d2d6bc8a4f507530857..6bea5720564eeb6cd3d9694e2caf5caa5f566c0a 100644 --- a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution +++ b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSolution @@ -17,6 +17,13 @@ FoamFile solvers { + alpha1 + { + nAlphaCorr 1; + nAlphaSubCycles 2; + cAlpha 1; + } + pcorr { solver PCG; @@ -54,9 +61,6 @@ PIMPLE momentumPredictor no; nCorrectors 3; nNonOrthogonalCorrectors 0; - nAlphaCorr 1; - nAlphaSubCycles 2; - cAlpha 1; } diff --git a/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSolution b/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSolution index d4ae062a470951edde85acbefaecfd94e98dacbc..235c7014d026ce19570cd1470824b2fdf1bdfcb6 100644 --- a/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSolution +++ b/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSolution @@ -19,6 +19,10 @@ solvers { "alpha." { + nAlphaCorr 1; + nAlphaSubCycles 2; + cAlpha 1; + solver smoothSolver; smoother GaussSeidel; tolerance 1e-06; @@ -64,9 +68,6 @@ PIMPLE momentumPredictor no; nCorrectors 3; nNonOrthogonalCorrectors 0; - nAlphaCorr 1; - nAlphaSubCycles 2; - cAlpha 1; } diff --git a/wmake/rules/linux64Gcc48/c b/wmake/rules/linux64Gcc48/c new file mode 100644 index 0000000000000000000000000000000000000000..f4114be3143d1210ffea500a2b361008910abed0 --- /dev/null +++ b/wmake/rules/linux64Gcc48/c @@ -0,0 +1,16 @@ +.SUFFIXES: .c .h + +cWARN = -Wall + +cc = gcc -m64 + +include $(RULES)/c$(WM_COMPILE_OPTION) + +cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC + +ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@ + +LINK_LIBS = $(cDBUG) + +LINKLIBSO = $(cc) -shared +LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs diff --git a/wmake/rules/linux64Gcc48/c++ b/wmake/rules/linux64Gcc48/c++ new file mode 100644 index 0000000000000000000000000000000000000000..98b25ed1fea2a1baa0ad749c09a76bd877ea4a6d --- /dev/null +++ b/wmake/rules/linux64Gcc48/c++ @@ -0,0 +1,21 @@ +.SUFFIXES: .C .cxx .cc .cpp + +c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast + +CC = g++ -m64 + +include $(RULES)/c++$(WM_COMPILE_OPTION) + +ptFLAGS = -DNoRepository -ftemplate-depth-100 + +c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC + +Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@ +cxxtoo = $(Ctoo) +cctoo = $(Ctoo) +cpptoo = $(Ctoo) + +LINK_LIBS = $(c++DBUG) + +LINKLIBSO = $(CC) $(c++FLAGS) -shared -Xlinker --add-needed -Xlinker --no-as-needed +LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed -Xlinker --no-as-needed diff --git a/wmake/rules/linux64Gcc48/c++Debug b/wmake/rules/linux64Gcc48/c++Debug new file mode 100644 index 0000000000000000000000000000000000000000..19bdb9c3346fc7a69380dfedd6e7911fe220a965 --- /dev/null +++ b/wmake/rules/linux64Gcc48/c++Debug @@ -0,0 +1,2 @@ +c++DBUG = -ggdb3 -DFULLDEBUG +c++OPT = -O0 -fdefault-inline diff --git a/wmake/rules/linux64Gcc48/c++Opt b/wmake/rules/linux64Gcc48/c++Opt new file mode 100644 index 0000000000000000000000000000000000000000..2aedabd6280a3476bc58db13139a0a3aa579502b --- /dev/null +++ b/wmake/rules/linux64Gcc48/c++Opt @@ -0,0 +1,2 @@ +c++DBUG = +c++OPT = -O3 diff --git a/wmake/rules/linux64Gcc48/c++Prof b/wmake/rules/linux64Gcc48/c++Prof new file mode 100644 index 0000000000000000000000000000000000000000..3bda4dad55e898a8198f6e8bfe21e8d829d7230a --- /dev/null +++ b/wmake/rules/linux64Gcc48/c++Prof @@ -0,0 +1,2 @@ +c++DBUG = -pg +c++OPT = -O2 diff --git a/wmake/rules/linux64Gcc48/cDebug b/wmake/rules/linux64Gcc48/cDebug new file mode 100644 index 0000000000000000000000000000000000000000..72b638f458220e329d52b59e3566a3c807101f9d --- /dev/null +++ b/wmake/rules/linux64Gcc48/cDebug @@ -0,0 +1,2 @@ +cDBUG = -ggdb -DFULLDEBUG +cOPT = -O1 -fdefault-inline -finline-functions diff --git a/wmake/rules/linux64Gcc48/cOpt b/wmake/rules/linux64Gcc48/cOpt new file mode 100644 index 0000000000000000000000000000000000000000..17318709f1fa39e6bf89cbe87778bc6fa459de17 --- /dev/null +++ b/wmake/rules/linux64Gcc48/cOpt @@ -0,0 +1,2 @@ +cDBUG = +cOPT = -O3 diff --git a/wmake/rules/linux64Gcc48/cProf b/wmake/rules/linux64Gcc48/cProf new file mode 100644 index 0000000000000000000000000000000000000000..ca3ac9bf5f0cd61fe99e0f05fa1bd4bdf9fa6cf7 --- /dev/null +++ b/wmake/rules/linux64Gcc48/cProf @@ -0,0 +1,2 @@ +cDBUG = -pg +cOPT = -O2 diff --git a/wmake/rules/linux64Gcc48/general b/wmake/rules/linux64Gcc48/general new file mode 100644 index 0000000000000000000000000000000000000000..4a42b11b1ee6aebe596e3cd2e2633d9c70cb5e9a --- /dev/null +++ b/wmake/rules/linux64Gcc48/general @@ -0,0 +1,8 @@ +CPP = cpp -traditional-cpp + +PROJECT_LIBS = -l$(WM_PROJECT) -ldl + +include $(GENERAL_RULES)/standard + +include $(RULES)/c +include $(RULES)/c++ diff --git a/wmake/rules/linux64Gcc48/mplibHPMPI b/wmake/rules/linux64Gcc48/mplibHPMPI new file mode 100644 index 0000000000000000000000000000000000000000..574492a236a32f7d87d00bf0e3507a5ac8e54f55 --- /dev/null +++ b/wmake/rules/linux64Gcc48/mplibHPMPI @@ -0,0 +1,3 @@ +PFLAGS = +PINC = -I$(MPI_ARCH_PATH)/include -D_MPICC_H +PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi diff --git a/wmake/rules/linux64Gcc48/mplibINTELMPI b/wmake/rules/linux64Gcc48/mplibINTELMPI new file mode 100644 index 0000000000000000000000000000000000000000..cf80ec2eaf68d1c2f6adf208964b6490c4c8fd36 --- /dev/null +++ b/wmake/rules/linux64Gcc48/mplibINTELMPI @@ -0,0 +1,3 @@ +PFLAGS = -DMPICH_SKIP_MPICXX +PINC = -I$(MPI_ARCH_PATH)/include64 +PLIBS = -L$(MPI_ARCH_PATH)/lib64 -lmpi diff --git a/wmake/rules/linuxGcc48/c b/wmake/rules/linuxGcc48/c new file mode 100644 index 0000000000000000000000000000000000000000..d914fcd37d084b82a1833722d6ad7a0db3dd1c93 --- /dev/null +++ b/wmake/rules/linuxGcc48/c @@ -0,0 +1,16 @@ +.SUFFIXES: .c .h + +cWARN = -Wall + +cc = gcc -m32 + +include $(RULES)/c$(WM_COMPILE_OPTION) + +cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC + +ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@ + +LINK_LIBS = $(cDBUG) + +LINKLIBSO = $(cc) -shared +LINKEXE = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs diff --git a/wmake/rules/linuxGcc48/c++ b/wmake/rules/linuxGcc48/c++ new file mode 100644 index 0000000000000000000000000000000000000000..357f4106e10d7d1108a6713802e6f0d01cd8be9a --- /dev/null +++ b/wmake/rules/linuxGcc48/c++ @@ -0,0 +1,21 @@ +.SUFFIXES: .C .cxx .cc .cpp + +c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast + +CC = g++ -m32 + +include $(RULES)/c++$(WM_COMPILE_OPTION) + +ptFLAGS = -DNoRepository -ftemplate-depth-100 + +c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC + +Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@ +cxxtoo = $(Ctoo) +cctoo = $(Ctoo) +cpptoo = $(Ctoo) + +LINK_LIBS = $(c++DBUG) + +LINKLIBSO = $(CC) $(c++FLAGS) -shared -Xlinker --add-needed -Xlinker --no-as-needed +LINKEXE = $(CC) $(c++FLAGS) -Xlinker --add-needed -Xlinker --no-as-needed diff --git a/wmake/rules/linuxGcc48/c++Debug b/wmake/rules/linuxGcc48/c++Debug new file mode 100644 index 0000000000000000000000000000000000000000..19bdb9c3346fc7a69380dfedd6e7911fe220a965 --- /dev/null +++ b/wmake/rules/linuxGcc48/c++Debug @@ -0,0 +1,2 @@ +c++DBUG = -ggdb3 -DFULLDEBUG +c++OPT = -O0 -fdefault-inline diff --git a/wmake/rules/linuxGcc48/c++Opt b/wmake/rules/linuxGcc48/c++Opt new file mode 100644 index 0000000000000000000000000000000000000000..2aedabd6280a3476bc58db13139a0a3aa579502b --- /dev/null +++ b/wmake/rules/linuxGcc48/c++Opt @@ -0,0 +1,2 @@ +c++DBUG = +c++OPT = -O3 diff --git a/wmake/rules/linuxGcc48/c++Prof b/wmake/rules/linuxGcc48/c++Prof new file mode 100644 index 0000000000000000000000000000000000000000..3bda4dad55e898a8198f6e8bfe21e8d829d7230a --- /dev/null +++ b/wmake/rules/linuxGcc48/c++Prof @@ -0,0 +1,2 @@ +c++DBUG = -pg +c++OPT = -O2 diff --git a/wmake/rules/linuxGcc48/cDebug b/wmake/rules/linuxGcc48/cDebug new file mode 100644 index 0000000000000000000000000000000000000000..72b638f458220e329d52b59e3566a3c807101f9d --- /dev/null +++ b/wmake/rules/linuxGcc48/cDebug @@ -0,0 +1,2 @@ +cDBUG = -ggdb -DFULLDEBUG +cOPT = -O1 -fdefault-inline -finline-functions diff --git a/wmake/rules/linuxGcc48/cOpt b/wmake/rules/linuxGcc48/cOpt new file mode 100644 index 0000000000000000000000000000000000000000..17318709f1fa39e6bf89cbe87778bc6fa459de17 --- /dev/null +++ b/wmake/rules/linuxGcc48/cOpt @@ -0,0 +1,2 @@ +cDBUG = +cOPT = -O3 diff --git a/wmake/rules/linuxGcc48/cProf b/wmake/rules/linuxGcc48/cProf new file mode 100644 index 0000000000000000000000000000000000000000..ca3ac9bf5f0cd61fe99e0f05fa1bd4bdf9fa6cf7 --- /dev/null +++ b/wmake/rules/linuxGcc48/cProf @@ -0,0 +1,2 @@ +cDBUG = -pg +cOPT = -O2 diff --git a/wmake/rules/linuxGcc48/general b/wmake/rules/linuxGcc48/general new file mode 100644 index 0000000000000000000000000000000000000000..4b051e6b9840df29cac2e8ced14c7d18b0b337d5 --- /dev/null +++ b/wmake/rules/linuxGcc48/general @@ -0,0 +1,9 @@ +CPP = cpp -traditional-cpp +LD = ld -melf_i386 + +PROJECT_LIBS = -l$(WM_PROJECT) -ldl + +include $(GENERAL_RULES)/standard + +include $(RULES)/c +include $(RULES)/c++ diff --git a/wmake/rules/linuxGcc48/mplibHPMPI b/wmake/rules/linuxGcc48/mplibHPMPI new file mode 100644 index 0000000000000000000000000000000000000000..8aff40632bd23af9607d63c4eb675a8de0cd287c --- /dev/null +++ b/wmake/rules/linuxGcc48/mplibHPMPI @@ -0,0 +1,3 @@ +PFLAGS = +PINC = -I$(MPI_ARCH_PATH)/include -D_MPICC_H +PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi