diff --git a/ReleaseNotes-dev b/ReleaseNotes-dev index 7583a3d999..2e9a025ec8 100644 --- a/ReleaseNotes-dev +++ b/ReleaseNotes-dev @@ -240,6 +240,13 @@ + =snappyHexMesh=: + extrude across multi-processor boundaries + preserve faceZones during layering + + *Warning*: + - minMedianAxisAngle angle fixed w.r.t. 17x. Set to + 90 to get same behaviour as 130 in 17x. + - nGrow did not work in 17x. Set to 0 + to get same behaviour as 130 in 17x. + - new minTetQuality setting (see tracking). Disable for 17x + compatibility. * Post-processing + =paraFoam=, =foamToVTK=: full support for polyhedral cell type in recent Paraview versions. diff --git a/applications/solvers/combustion/PDRFoam/Make/files b/applications/solvers/combustion/PDRFoam/Make/files index 1e5d200ccb..0a8358cdb6 100644 --- a/applications/solvers/combustion/PDRFoam/Make/files +++ b/applications/solvers/combustion/PDRFoam/Make/files @@ -27,7 +27,7 @@ PDRModels/XiGModels/basicXiSubG/basicXiSubG.C laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C -/* PDRFoamAutoRefine.C */ +/*PDRFoamAutoRefine.C*/ PDRFoam.C EXE = $(FOAM_APPBIN)/PDRFoam diff --git a/applications/solvers/combustion/PDRFoam/Make/options b/applications/solvers/combustion/PDRFoam/Make/options index 3432f09ef7..b9937a8a69 100644 --- a/applications/solvers/combustion/PDRFoam/Make/options +++ b/applications/solvers/combustion/PDRFoam/Make/options @@ -9,13 +9,14 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ + -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/triSurface/lnInclude EXE_LIBS = \ -lengine \ diff --git a/applications/solvers/combustion/PDRFoam/PDRFoam.C b/applications/solvers/combustion/PDRFoam/PDRFoam.C index 0197d8e0b3..2f11a8db1a 100644 --- a/applications/solvers/combustion/PDRFoam/PDRFoam.C +++ b/applications/solvers/combustion/PDRFoam/PDRFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) #include "createFields.H" #include "initContinuityErrs.H" #include "readTimeControls.H" - #include "CourantNo.H" + #include "compressibleCourantNo.H" #include "setInitialDeltaT.H" scalar StCoNum = 0.0; @@ -91,11 +91,10 @@ int main(int argc, char *argv[]) { #include "readTimeControls.H" #include "readPISOControls.H" - #include "CourantNo.H" + #include "compressibleCourantNo.H" #include "setDeltaT.H" runTime++; - Info<< "\n\nTime = " << runTime.timeName() << endl; #include "rhoEqn.H" diff --git a/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C b/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C index bf31388aaa..b7d4b42bc9 100644 --- a/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C +++ b/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -80,7 +80,7 @@ int main(int argc, char *argv[]) #include "createFields.H" #include "initContinuityErrs.H" #include "readTimeControls.H" - #include "CourantNo.H" + #include "compressibleCourantNo.H" #include "setInitialDeltaT.H" scalar StCoNum = 0.0; @@ -89,17 +89,15 @@ int main(int argc, char *argv[]) Info<< "\nStarting time loop\n" << endl; + bool hasChanged = false; + while (runTime.run()) { #include "readTimeControls.H" #include "readPISOControls.H" - #include "CourantNo.H" + #include "compressibleCourantNo.H" #include "setDeltaT.H" - runTime++; - - Info<< "\n\nTime = " << runTime.timeName() << endl; - // Indicators for refinement. Note: before runTime++ // only for postprocessing reasons. tmp tmagGradP = mag(fvc::grad(p)); @@ -111,7 +109,10 @@ int main(int argc, char *argv[]) normalisedGradP.writeOpt() = IOobject::AUTO_WRITE; tmagGradP.clear(); - bool meshChanged = false; + runTime++; + + Info<< "\n\nTime = " << runTime.timeName() << endl; + { // Make the fluxes absolute fvc::makeAbsolute(phi, rho, U); @@ -134,29 +135,27 @@ int main(int argc, char *argv[]) } } - //volScalarField pIndicator("pIndicator", - // p*(fvc::laplacian(p)) - // / ( - // magSqr(fvc::grad(p)) - // + dimensionedScalar - // ( - // "smallish", - // sqr(p.dimensions()/dimLength), - // 1E-6 - // ) - // )); - //pIndicator.writeOpt() = IOobject::AUTO_WRITE; - // Flux estimate for introduced faces. volVectorField rhoU("rhoU", rho*U); // Do any mesh changes - meshChanged = mesh.update(); + bool meshChanged = mesh.update(); -// if (mesh.moving() || meshChanged) -// { -// #include "correctPhi.H" -// } + + if (meshChanged) + { + hasChanged = true; + } + + if (runTime.write() && hasChanged) + { + betav.write(); + Lobs.write(); + CT.write(); + drag->writeFields(); + flameWrinkling->writeFields(); + hasChanged = false; + } // Make the fluxes relative to the mesh motion fvc::makeRelative(phi, rho, U); diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C index 35f9bb02f3..70933519bb 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -50,55 +50,12 @@ Foam::XiEqModels::basicSubGrid::basicSubGrid : XiEqModel(XiEqProperties, thermo, turbulence, Su), - N_ - ( - IOobject - ( - "N", - Su.mesh().time().findInstance(polyMesh::meshSubDir, "N"), - polyMesh::meshSubDir, - Su.mesh(), - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - Su.mesh() - ), - - ns_ - ( - IOobject - ( - "ns", - Su.mesh().time().findInstance(polyMesh::meshSubDir, "ns"), - polyMesh::meshSubDir, - Su.mesh(), - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - Su.mesh() - ), - B_ ( IOobject ( "B", - Su.mesh().time().findInstance(polyMesh::meshSubDir, "B"), - polyMesh::meshSubDir, - Su.mesh(), - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - Su.mesh() - ), - - Lobs_ - ( - IOobject - ( - "Lobs", - Su.mesh().time().findInstance(polyMesh::meshSubDir, "Lobs"), - polyMesh::meshSubDir, + Su.mesh().facesInstance(), Su.mesh(), IOobject::MUST_READ, IOobject::NO_WRITE @@ -120,8 +77,12 @@ Foam::XiEqModels::basicSubGrid::~basicSubGrid() Foam::tmp Foam::XiEqModels::basicSubGrid::XiEq() const { - const objectRegistry& db = Su_.db(); - const volVectorField& U = db.lookupObject("U"); + const fvMesh& mesh = Su_.mesh(); + const volVectorField& U = mesh.lookupObject("U"); + + const volScalarField& Nv = mesh.lookupObject("Nv"); + const volSymmTensorField& nsv = + mesh.lookupObject("nsv"); volScalarField magU(mag(U)); volVectorField Uhat @@ -129,20 +90,71 @@ Foam::tmp Foam::XiEqModels::basicSubGrid::XiEq() const U/(mag(U) + dimensionedScalar("Usmall", U.dimensions(), 1e-4)) ); - volScalarField n(max(N_ - (Uhat & ns_ & Uhat), scalar(1e-4))); + const scalarField Cw = pow(mesh.V(), 2.0/3.0); - volScalarField b((Uhat & B_ & Uhat)/n); + tmp tN + ( + new volScalarField + ( + IOobject + ( + "tN", + mesh.time().constant(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedScalar("zero", Nv.dimensions(), 0.0), + zeroGradientFvPatchVectorField::typeName + ) + ); + + volScalarField& N = tN(); + + N.internalField() = Nv.internalField()*Cw; + + tmp tns + ( + new volSymmTensorField + ( + IOobject + ( + "tns", + U.mesh().time().timeName(), + U.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + U.mesh(), + dimensionedSymmTensor + ( + "zero", + nsv.dimensions(), + pTraits::zero + ), + zeroGradientFvPatchSymmTensorField::typeName + ) + ); + + volSymmTensorField& ns = tns(); + + ns.internalField() = nsv.internalField()*Cw; + + volScalarField n(max(N - (Uhat & ns & Uhat), scalar(1e-4))); + + volScalarField b((Uhat & B_ & Uhat)/sqrt(n)); volScalarField up(sqrt((2.0/3.0)*turbulence_.k())); volScalarField XiSubEq ( scalar(1) - + max(2.2*sqrt(b), min(0.34*magU/up, scalar(1.6))) - *min(0.25*n, scalar(1)) + + max(2.2*sqrt(b), min(0.34*magU/up*sqrt(b), scalar(1.6))) + * min(n, scalar(1)) ); - return XiSubEq*XiEqModel_->XiEq(); + return (XiSubEq*XiEqModel_->XiEq()); } diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H index a9d915d2a4..c510399971 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -85,18 +85,9 @@ class basicSubGrid { // Private data - //- Count - volScalarField N_; - - //- Sub-count - volSymmTensorField ns_; - //- tblock volSymmTensorField B_; - //- Typical obstacle diameters per cell - volScalarField Lobs_; - //- Equilibrium Xi model due to turbulence autoPtr XiEqModel_; diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C index cc8e7ee2aa..3be4385857 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,8 +34,8 @@ namespace XiGModels { defineTypeNameAndDebug(basicSubGrid, 0); addToRunTimeSelectionTable(XiGModel, basicSubGrid, dictionary); -} -} +}; +}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -66,12 +66,37 @@ Foam::tmp Foam::XiGModels::basicSubGrid::G() const { const objectRegistry& db = Su_.db(); const volVectorField& U = db.lookupObject("U"); - const volScalarField& N = db.lookupObject("N"); + const volScalarField& Nv = db.lookupObject("Nv"); const volScalarField& Lobs = db.lookupObject("Lobs"); tmp tGtot = XiGModel_->G(); volScalarField& Gtot = tGtot(); + const scalarField Cw = pow(Su_.mesh().V(), 2.0/3.0); + + tmp tN + ( + new volScalarField + ( + IOobject + ( + "tN", + Su_.mesh().time().timeName(), + Su_.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + Su_.mesh(), + dimensionedScalar("zero", Nv.dimensions(), 0.0), + zeroGradientFvPatchVectorField::typeName + ) + ); + + volScalarField& N = tN(); + + N.internalField() = Nv.internalField()*Cw; + forAll(N, celli) { if (N[celli] > 1e-3) diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H index 22e23a1278..097d0e02f1 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C index 5caaadef14..31cd0165fe 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,7 +31,7 @@ namespace Foam { defineTypeNameAndDebug(PDRDragModel, 0); defineRunTimeSelectionTable(PDRDragModel, dictionary); -} +}; // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H index c9efeab3c4..d6d8a73906 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -162,6 +162,11 @@ public: { return true; } + + virtual void writeFields() const + { + notImplemented("PDRDragModel::write()"); + } }; diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C index 6e485a7a3c..785490db2f 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,34 +53,12 @@ Foam::PDRDragModels::basic::basic Csu("Csu", dimless, PDRDragModelCoeffs_.lookup("Csu")), Csk("Csk", dimless, PDRDragModelCoeffs_.lookup("Csk")), - Aw2_ - ( - "Aw2", - sqr - ( - volScalarField - ( - IOobject - ( - "Aw", - U_.mesh().time().findInstance(polyMesh::meshSubDir, "Aw"), - polyMesh::meshSubDir, - U_.mesh(), - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - U_.mesh() - ) - ) - ), - - CR_ + Aw_ ( IOobject ( - "CR", - U_.mesh().time().findInstance(polyMesh::meshSubDir, "CR"), - polyMesh::meshSubDir, + "Aw", + U_.mesh().facesInstance(), U_.mesh(), IOobject::MUST_READ, IOobject::NO_WRITE @@ -88,13 +66,12 @@ Foam::PDRDragModels::basic::basic U_.mesh() ), - CT_ + CR_ ( IOobject ( - "CT", - U_.mesh().time().findInstance(polyMesh::meshSubDir, "CT"), - polyMesh::meshSubDir, + "CR", + U_.mesh().facesInstance(), U_.mesh(), IOobject::MUST_READ, IOobject::NO_WRITE @@ -114,19 +91,24 @@ Foam::PDRDragModels::basic::~basic() Foam::tmp Foam::PDRDragModels::basic::Dcu() const { - const volScalarField& betav = U_.db().lookupObject("betav"); + const volScalarField& betav = + U_.db().lookupObject("betav"); - return (0.5*rho_)*CR_*mag(U_) + (Csu*I)*betav*turbulence_.muEff()*Aw2_; + return (0.5*rho_)*CR_*mag(U_) + (Csu*I)*betav*turbulence_.muEff()*sqr(Aw_); } Foam::tmp Foam::PDRDragModels::basic::Gk() const { - const volScalarField& betav = U_.db().lookupObject("betav"); + const volScalarField& betav = + U_.db().lookupObject("betav"); + + const volSymmTensorField& CT = + U_.db().lookupObject("CT"); return - (0.5*rho_)*mag(U_)*(U_ & CT_ & U_) - + Csk*betav*turbulence_.muEff()*Aw2_*magSqr(U_); + (0.5*rho_)*mag(U_)*(U_ & CT & U_) + + Csk*betav*turbulence_.muEff()*sqr(Aw_)*magSqr(U_); } @@ -141,4 +123,10 @@ bool Foam::PDRDragModels::basic::read(const dictionary& PDRProperties) } +void Foam::PDRDragModels::basic::writeFields() const +{ + Aw_.write(); + CR_.write(); +} + // ************************************************************************* // diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H index 83df5fa11b..0c5e49a661 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -102,9 +102,8 @@ class basic dimensionedScalar Csu; dimensionedScalar Csk; - volScalarField Aw2_; + volScalarField Aw_; volSymmTensorField CR_; - volSymmTensorField CT_; // Private Member Functions @@ -149,6 +148,9 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& PDRProperties); + + //- Write fields + void writeFields() const; }; diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C index c96477d9c6..06aa68b228 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,12 +55,42 @@ PDRkEpsilon::PDRkEpsilon const word& modelName ) : - kEpsilon(rho, U, phi, thermophysicalModel, turbulenceModelName, modelName) + kEpsilon(rho, U, phi, thermophysicalModel, turbulenceModelName, modelName), + + C4_ + ( + dimensioned::lookupOrAddToDict + ( + "C4", + coeffDict_, + 0.1 + ) + ) +{} + + +// * * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // + +PDRkEpsilon::~PDRkEpsilon() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +bool PDRkEpsilon::read() +{ + if (RASModel::read()) + { + C4_.readIfPresent(coeffDict_); + return true; + } + else + { + return false; + } +} + + void PDRkEpsilon::correct() { if (!turbulence_) @@ -89,18 +119,25 @@ void PDRkEpsilon::correct() volScalarField G("RASModel::G", mut_*(tgradU() && dev(twoSymm(tgradU())))); tgradU.clear(); - // Update epsilon and G at the wall + // Update espsilon and G at the wall epsilon_.boundaryField().updateCoeffs(); // Add the blockage generation term so that it is included consistently // in both the k and epsilon equations - const volScalarField& betav = U_.db().lookupObject("betav"); + const volScalarField& betav = + U_.db().lookupObject("betav"); + + const volScalarField& Lobs = + U_.db().lookupObject("Lobs"); const PDRDragModel& drag = U_.db().lookupObject("PDRDragModel"); volScalarField GR(drag.Gk()); + volScalarField LI = + C4_*(Lobs + dimensionedScalar("minLength", dimLength, VSMALL)); + // Dissipation equation tmp epsEqn ( @@ -108,7 +145,8 @@ void PDRkEpsilon::correct() + fvm::div(phi_, epsilon_) - fvm::laplacian(DepsilonEff(), epsilon_) == - C1_*(betav*G + GR)*epsilon_/k_ + C1_*betav*G*epsilon_/k_ + + 1.5*pow(Cmu_, 3.0/4.0)*GR*sqrt(k_)/LI - fvm::SuSp(((2.0/3.0)*C1_)*betav*rho_*divU, epsilon_) - fvm::Sp(C2_*betav*rho_*epsilon_/k_, epsilon_) ); @@ -138,7 +176,6 @@ void PDRkEpsilon::correct() solve(kEqn); bound(k_, kMin_); - // Re-calculate viscosity mut_ = rho_*Cmu_*sqr(k_)/epsilon_; mut_.correctBoundaryConditions(); diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H index 45f172377d..4588950825 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H @@ -25,23 +25,23 @@ Class Foam::compressible::RASModels::PDRkEpsilon Description - Standard k-epsilon turbulence model for compressible flow - with additional source terms + Standard k-epsilon turbulence model with additional source terms corresponding to PDR basic drag model (\link basic.H \endlink) The default model coefficients correspond to the following: - \verbatim + @verbatim PDRkEpsilonCoeffs { Cmu 0.09; C1 1.44; C2 1.92; C3 -0.33; // only for compressible + C4 0.1; sigmak 1.0; // only for compressible sigmaEps 1.3; Prt 1.0; // only for compressible } - \endverbatim + @endverbatim The turbulence source term \f$ G_{R} \f$ appears in the \f$ \kappa-\epsilon \f$ equation for the generation of turbulence due to @@ -60,7 +60,7 @@ SourceFiles #ifndef compressiblePDRkEpsilon_H #define compressiblePDRkEpsilon_H -#include "RASModel.H" + #include "kEpsilon.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -80,6 +80,11 @@ class PDRkEpsilon : public kEpsilon { + // Private data + + // Model coefficients + dimensionedScalar C4_; + public: @@ -102,15 +107,16 @@ public: //- Destructor - virtual ~PDRkEpsilon() - {} + virtual ~PDRkEpsilon(); // Member Functions //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); + void correct(); + //- Read turbulenceProperties dictionary + bool read(); }; diff --git a/applications/solvers/combustion/PDRFoam/StCourantNo.H b/applications/solvers/combustion/PDRFoam/StCourantNo.H index 5f870711fa..55140320a4 100644 --- a/applications/solvers/combustion/PDRFoam/StCourantNo.H +++ b/applications/solvers/combustion/PDRFoam/StCourantNo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ Description if (mesh.nInternalFaces()) { - scalarField sumPhi + scalarField sumPhi ( fvc::surfaceSum(mag(phiSt))().internalField() / rho.internalField() diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C index 9e62af2e48..70a069475f 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,8 +49,9 @@ Foam::XiEqModels::Gulder::Gulder ) : XiEqModel(XiEqProperties, thermo, turbulence, Su), - XiEqCoef(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))), - SuMin(0.01*Su.average()) + XiEqCoef_(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))), + SuMin_(0.01*Su.average()), + uPrimeCoef_(readScalar(XiEqModelCoeffs_.lookup("uPrimeCoef"))) {} @@ -66,19 +67,92 @@ Foam::tmp Foam::XiEqModels::Gulder::XiEq() const { volScalarField up(sqrt((2.0/3.0)*turbulence_.k())); const volScalarField& epsilon = turbulence_.epsilon(); + const fvMesh& mesh = Su_.mesh(); + + const volVectorField& U = mesh.lookupObject("U"); + + const volSymmTensorField& CT = mesh.lookupObject("CT"); + const volScalarField& Nv = mesh.lookupObject("Nv"); + const volSymmTensorField& nsv = + mesh.lookupObject("nsv"); + + tmp tN + ( + new volScalarField + ( + IOobject + ( + "tN", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + mesh, + dimensionedScalar("zero", Nv.dimensions(), 0.0), + zeroGradientFvPatchVectorField::typeName + ) + ); + + volScalarField& N = tN(); + + N.internalField() = Nv.internalField()*pow(mesh.V(), 2.0/3.0); + + tmp tns + ( + new volSymmTensorField + ( + IOobject + ( + "tns", + mesh.time().timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + dimensionedSymmTensor + ( + "zero", + nsv.dimensions(), + pTraits::zero + ) + ) + ); + + volSymmTensorField& ns = tns(); + + ns.internalField() = nsv.internalField()*pow(mesh.V(), 2.0/3.0); + + const volVectorField Uhat + ( + U/(mag(U) + dimensionedScalar("Usmall", U.dimensions(), 1e-4)) + ); + + const volScalarField nr(sqrt(max(N - (Uhat & ns & Uhat), 1e-4))); + + const scalarField cellWidth(pow(mesh.V(), 1.0/3.0)); + + const scalarField upLocal(uPrimeCoef_*sqrt((U & CT & U)*cellWidth)); + + const scalarField deltaUp(upLocal*(max(1.0, pow(nr, 0.5)) - 1.0)); + + up.internalField() += deltaUp; volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon)))); - volScalarField Reta + volScalarField Reta = ( up - / ( + / + ( sqrt(epsilon*tauEta) + dimensionedScalar("1e-8", up.dimensions(), 1e-8) ) ); - return 1.0 + XiEqCoef*sqrt(up/(Su_ + SuMin))*Reta; + return (1.0 + XiEqCoef_*sqrt(up/(Su_ + SuMin_))*Reta); } @@ -86,7 +160,8 @@ bool Foam::XiEqModels::Gulder::read(const dictionary& XiEqProperties) { XiEqModel::read(XiEqProperties); - XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef; + XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef_; + XiEqModelCoeffs_.lookup("uPrimeCoef") >> uPrimeCoef_; return true; } diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H index ebfeaa39a7..e1bbb3d708 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/Gulder/Gulder.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,8 +55,14 @@ class Gulder { // Private data - scalar XiEqCoef; - dimensionedScalar SuMin; + //- Model constant + scalar XiEqCoef_; + + //- Minimum laminar burning velocity + const dimensionedScalar SuMin_; + + //- Model constant + scalar uPrimeCoef_; // Private Member Functions @@ -97,6 +103,7 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiEqProperties); + }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEBlendXiEq/SCOPEBlendXiEq.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEBlendXiEq/SCOPEBlendXiEq.H index 740fc7d57b..7d38c1bb23 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEBlendXiEq/SCOPEBlendXiEq.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEBlendXiEq/SCOPEBlendXiEq.H @@ -27,7 +27,7 @@ Class Description Simple SCOPEBlendXiEq model for XiEq based on SCOPEXiEqs correlation with a linear correction function to give a plausible profile for XiEq. - See \link SCOPELaminarFlameSpeed.H \endlink for details on the SCOPE + See @link SCOPELaminarFlameSpeed.H @endlink for details on the SCOPE laminar flame speed model. SourceFiles @@ -105,6 +105,7 @@ public: { return true; } + }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C index ac6c129202..d0b7efeded 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,10 +49,10 @@ Foam::XiEqModels::SCOPEXiEq::SCOPEXiEq ) : XiEqModel(XiEqProperties, thermo, turbulence, Su), - XiEqCoef(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))), - XiEqExp(readScalar(XiEqModelCoeffs_.lookup("XiEqExp"))), - lCoef(readScalar(XiEqModelCoeffs_.lookup("lCoef"))), - SuMin(0.01*Su.average()), + XiEqCoef_(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))), + XiEqExp_(readScalar(XiEqModelCoeffs_.lookup("XiEqExp"))), + lCoef_(readScalar(XiEqModelCoeffs_.lookup("lCoef"))), + SuMin_(0.01*Su.average()), MaModel ( IOdictionary @@ -62,7 +62,7 @@ Foam::XiEqModels::SCOPEXiEq::SCOPEXiEq "combustionProperties", Su.mesh().time().constant(), Su.mesh(), - IOobject::MUST_READ_IF_MODIFIED + IOobject::MUST_READ ) ), thermo @@ -84,10 +84,10 @@ Foam::tmp Foam::XiEqModels::SCOPEXiEq::XiEq() const const volScalarField& epsilon = turbulence_.epsilon(); volScalarField up(sqrt((2.0/3.0)*k)); - volScalarField l((lCoef*sqrt(3.0/2.0))*up*k/epsilon); + volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon); volScalarField Rl(up*l*thermo_.rhou()/thermo_.muu()); - volScalarField upBySu(up/(Su_ + SuMin)); + volScalarField upBySu(up/(Su_ + SuMin_)); volScalarField K(0.157*upBySu/sqrt(Rl)); volScalarField Ma(MaModel.Ma()); @@ -114,7 +114,7 @@ Foam::tmp Foam::XiEqModels::SCOPEXiEq::XiEq() const if (Ma[celli] > 0.01) { xieq[celli] = - XiEqCoef*pow(K[celli]*Ma[celli], -XiEqExp)*upBySu[celli]; + XiEqCoef_*pow(K[celli]*Ma[celli], -XiEqExp_)*upBySu[celli]; } } @@ -130,7 +130,8 @@ Foam::tmp Foam::XiEqModels::SCOPEXiEq::XiEq() const if (Ma[facei] > 0.01) { xieqp[facei] = - XiEqCoef*pow(Kp[facei]*Map[facei], -XiEqExp)*upBySup[facei]; + XiEqCoef_*pow(Kp[facei]*Map[facei], -XiEqExp_) + *upBySup[facei]; } } } @@ -143,9 +144,9 @@ bool Foam::XiEqModels::SCOPEXiEq::read(const dictionary& XiEqProperties) { XiEqModel::read(XiEqProperties); - XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef; - XiEqModelCoeffs_.lookup("XiEqExp") >> XiEqExp; - XiEqModelCoeffs_.lookup("lCoef") >> lCoef; + XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef_; + XiEqModelCoeffs_.lookup("XiEqExp") >> XiEqExp_; + XiEqModelCoeffs_.lookup("lCoef") >> lCoef_; return true; } diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H index 63415ad33c..ff49390a6d 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,10 +58,10 @@ class SCOPEXiEq { // Private data - scalar XiEqCoef; - scalar XiEqExp; - scalar lCoef; - dimensionedScalar SuMin; + scalar XiEqCoef_; + scalar XiEqExp_; + scalar lCoef_; + dimensionedScalar SuMin_; //- The SCOPE laminar flame speed model used to obtain the // Marstein number. Note: the laminar flame speed need not be @@ -107,6 +107,7 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiEqProperties); + }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C index 1524643108..de5850e913 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,7 +53,31 @@ Foam::XiEqModel::XiEqModel ), thermo_(thermo), turbulence_(turbulence), - Su_(Su) + Su_(Su), + Nv_ + ( + IOobject + ( + "Nv", + Su.mesh().facesInstance(), + Su.mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + Su.mesh() + ), + nsv_ + ( + IOobject + ( + "nsv", + Su.mesh().facesInstance(), + Su.mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + Su.mesh() + ) {} @@ -73,4 +97,16 @@ bool Foam::XiEqModel::read(const dictionary& XiEqProperties) } +void Foam::XiEqModel::writeFields() const +{ + Nv_.write(); + nsv_.write(); + if (Su_.mesh().foundObject("B")) + { + const volSymmTensorField& B = + Su_.mesh().lookupObject("B"); + B.write(); + } +} + // ************************************************************************* // diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H index 85a151c216..664fcf8b2e 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -67,6 +67,8 @@ protected: const hhuCombustionThermo& thermo_; const compressible::RASModel& turbulence_; const volScalarField& Su_; + volScalarField Nv_; + volSymmTensorField nsv_; private: @@ -146,6 +148,9 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiEqProperties) = 0; + + //- Write fields + void writeFields() const; }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.C index cd25337a75..e5f04b7483 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,7 +64,7 @@ Foam::XiEqModels::instability::~instability() Foam::tmp Foam::XiEqModels::instability::XiEq() const { - volScalarField turbXiEq(XiEqModel_->XiEq()); + volScalarField turbXiEq = XiEqModel_->XiEq(); return XiEqIn/turbXiEq + turbXiEq; } diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.H index 3b0bd1fa63..64732baa75 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.H @@ -27,7 +27,7 @@ Class Description This is the equilibrium level of the flame wrinkling generated by instability. It is a constant (default 2.5). It is used in - \link XiModel.H \endlink. + @link XiModel.H @endlink. SourceFiles instability.C @@ -101,6 +101,7 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiEqProperties); + }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.C b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.C index caf44f2ec4..b74f4f3ae7 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,7 +49,7 @@ Foam::XiGModels::KTS::KTS ) : XiGModel(XiGProperties, thermo, turbulence, Su), - GEtaCoef(readScalar(XiGModelCoeffs_.lookup("GEtaCoef"))) + GEtaCoef_(readScalar(XiGModelCoeffs_.lookup("GEtaCoef"))) {} @@ -63,13 +63,12 @@ Foam::XiGModels::KTS::~KTS() Foam::tmp Foam::XiGModels::KTS::G() const { - // volScalarField up(sqrt((2.0/3.0)*turbulence_.k())); + volScalarField up(sqrt((2.0/3.0)*turbulence_.k())); const volScalarField& epsilon = turbulence_.epsilon(); - tmp tauEta = - sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon))); + volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon)))); - return GEtaCoef/tauEta; + return (GEtaCoef_/tauEta); } @@ -77,7 +76,7 @@ bool Foam::XiGModels::KTS::read(const dictionary& XiGProperties) { XiGModel::read(XiGProperties); - XiGModelCoeffs_.lookup("GEtaCoef") >> GEtaCoef; + XiGModelCoeffs_.lookup("GEtaCoef") >> GEtaCoef_; return true; } diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.H b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.H index eb87a7dc8e..46f170140e 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/KTS/KTS.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,7 +55,7 @@ class KTS { // Private data - scalar GEtaCoef; + scalar GEtaCoef_; // Private Member Functions diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H index 40eeba53ac..5694c311f4 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.C b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.C index 277dfb1d9e..7def10da2b 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,8 +49,8 @@ Foam::XiGModels::instabilityG::instabilityG ) : XiGModel(XiGProperties, thermo, turbulence, Su), - GIn(XiGModelCoeffs_.lookup("GIn")), - lambdaIn(XiGModelCoeffs_.lookup("lambdaIn")), + GIn_(XiGModelCoeffs_.lookup("GIn")), + lambdaIn_(XiGModelCoeffs_.lookup("lambdaIn")), XiGModel_(XiGModel::New(XiGModelCoeffs_, thermo, turbulence, Su)) {} @@ -66,7 +66,7 @@ Foam::XiGModels::instabilityG::~instabilityG() Foam::tmp Foam::XiGModels::instabilityG::G() const { volScalarField turbXiG(XiGModel_->G()); - return GIn*GIn/(GIn + turbXiG) + turbXiG; + return (GIn_*GIn_/(GIn_ + turbXiG) + turbXiG); } @@ -78,7 +78,7 @@ Foam::tmp Foam::XiGModels::instabilityG::Db() const const volScalarField& mgb = db.lookupObject("mgb"); return XiGModel_->Db() - + rho*Su_*(Xi - 1.0)*mgb*(0.5*lambdaIn)/(mgb + 1.0/lambdaIn); + + rho*Su_*(Xi - 1.0)*mgb*(0.5*lambdaIn_)/(mgb + 1.0/lambdaIn_); } @@ -86,8 +86,8 @@ bool Foam::XiGModels::instabilityG::read(const dictionary& XiGProperties) { XiGModel::read(XiGProperties); - XiGModelCoeffs_.lookup("GIn") >> GIn; - XiGModelCoeffs_.lookup("lambdaIn") >> lambdaIn; + XiGModelCoeffs_.lookup("GIn") >> GIn_; + XiGModelCoeffs_.lookup("lambdaIn") >> lambdaIn_; return true; } diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.H b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.H index 948d4a35ad..35f0f4a77f 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/instabilityG/instabilityG.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,10 +58,10 @@ class instabilityG // Private data //- Flame instabilityG wrinling generation rate coefficient - dimensionedScalar GIn; + dimensionedScalar GIn_; //- InstabilityG length-scale - dimensionedScalar lambdaIn; + dimensionedScalar lambdaIn_; //- Xi generation rate model due to all other processes autoPtr XiGModel_; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H index 8f7b0c0422..346a6c4968 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -237,6 +237,9 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiProperties) = 0; + + //- Write fields related to Xi model + virtual void writeFields() = 0; }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.C b/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.C index fbf8baff49..c58339940e 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 1991-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.H b/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.H index d08cb0a6be..6cfb29e7fc 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/algebraic/algebraic.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -109,6 +109,13 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiProperties); + + //- Write fields of the XiEq model + virtual void writeFields() + { + XiEqModel_().writeFields(); + } + }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.C b/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.C index bc2df338a6..4c271bba2e 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.H b/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.H index 5829768be8..d508a0eb3a 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/fixed/fixed.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -95,6 +95,11 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiProperties); + + //- Write fields of the XiEq model + virtual void writeFields() + {} + }; diff --git a/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.H b/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.H index f65984d631..8b5236978d 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -124,6 +124,12 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& XiProperties); + + //- Write fields of the XiEq model + virtual void writeFields() + { + XiEqModel_().writeFields(); + } }; diff --git a/applications/solvers/combustion/PDRFoam/bEqn.H b/applications/solvers/combustion/PDRFoam/bEqn.H index bdc21c1bab..348e4b8991 100644 --- a/applications/solvers/combustion/PDRFoam/bEqn.H +++ b/applications/solvers/combustion/PDRFoam/bEqn.H @@ -30,7 +30,7 @@ if (ign.ignited()) // Calculate flame normal etc. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // volVectorField n(fvc::grad(b)); + //volVectorField n(fvc::grad(b)); volVectorField n(fvc::reconstruct(fvc::snGrad(b)*mesh.magSf())); volScalarField mgb("mgb", mag(n)); diff --git a/applications/solvers/combustion/PDRFoam/createFields.H b/applications/solvers/combustion/PDRFoam/createFields.H index 233383ab1c..15a0ecafea 100644 --- a/applications/solvers/combustion/PDRFoam/createFields.H +++ b/applications/solvers/combustion/PDRFoam/createFields.H @@ -30,7 +30,6 @@ //const volScalarField& T = thermo->T(); - Info<< "\nReading field U\n" << endl; volVectorField U ( @@ -94,8 +93,35 @@ IOobject ( "betav", - runTime.findInstance(polyMesh::meshSubDir, "betav"), - polyMesh::meshSubDir, + mesh.facesInstance(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + mesh + ); + + Info<< "Reading field Lobs\n" << endl; + volScalarField Lobs + ( + IOobject + ( + "Lobs", + mesh.facesInstance(), + mesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + mesh + ); + + Info<< "Reading field CT\n" << endl; + volSymmTensorField CT + ( + IOobject + ( + "CT", + mesh.facesInstance(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE diff --git a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C index 7ce9a6da3f..ed860d9ca9 100644 --- a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C +++ b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 1991-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,6 +23,7 @@ License \*---------------------------------------------------------------------------*/ +#include "IFstream.H" #include "SCOPELaminarFlameSpeed.H" #include "addToRunTimeSelectionTable.H" @@ -68,7 +69,19 @@ Foam::laminarFlameSpeedModels::SCOPE::SCOPE : laminarFlameSpeed(dict, ct), - coeffsDict_(dict.subDict(typeName + "Coeffs").subDict(fuel_)), + coeffsDict_ + ( + dictionary + ( + IFstream + ( + fileName + ( + dict.lookup("fuelFile") + ) + )() + ).subDict(typeName + "Coeffs") + ), LFL_(readScalar(coeffsDict_.lookup("lowerFlamabilityLimit"))), UFL_(readScalar(coeffsDict_.lookup("upperFlamabilityLimit"))), SuPolyL_(coeffsDict_.subDict("lowerSuPolynomial")), diff --git a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H index 7f4a6c0d14..83689c5ec7 100644 --- a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H +++ b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -134,7 +134,7 @@ class SCOPE polynomial MaPolyU_; - // Private Member Functions + // Private member functions //- Polynomial evaluated from the given equivalence ratio // and polynomial coefficients diff --git a/applications/solvers/combustion/rhoReactingFoam/pEqn.H b/applications/solvers/combustion/rhoReactingFoam/pEqn.H index f11c979224..ee03ece751 100644 --- a/applications/solvers/combustion/rhoReactingFoam/pEqn.H +++ b/applications/solvers/combustion/rhoReactingFoam/pEqn.H @@ -24,12 +24,17 @@ fvc::interpolate(thermo.psi())*phiv ); + fvScalarMatrix pDDtEqn + ( + fvc::ddt(rho) + fvc::div(phi) + + correction(fvm::ddt(psi, p) + fvm::div(phid, p)) + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( - fvc::ddt(rho) + fvc::div(phi) - + correction(fvm::ddt(psi, p) + fvm::div(phid, p)) + pDDtEqn - fvm::laplacian(rho*rAU, p) ); @@ -63,12 +68,17 @@ + fvc::ddtPhiCorr(rAU, rho, U, phi) ); + fvScalarMatrix pDDtEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + + fvc::div(phi) + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( - fvc::ddt(rho) + psi*correction(fvm::ddt(p)) - + fvc::div(phi) + pDDtEqn - fvm::laplacian(rho*rAU, p) ); diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H index 768876c316..c6d1ad5e3c 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/pEqn.H @@ -19,12 +19,17 @@ surfaceScalarField buoyancyPhi(-rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf()); phi += buoyancyPhi; + fvScalarMatrix p_rghDDtEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh)) + + fvc::div(phi) + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix p_rghEqn ( - fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh)) - + fvc::div(phi) + p_rghDDtEqn - fvm::laplacian(rhorAUf, p_rgh) ); diff --git a/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H index fccb98c8cb..9fb91f1d36 100644 --- a/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H +++ b/applications/solvers/lagrangian/LTSReactingParcelFoam/pEqn.H @@ -23,7 +23,7 @@ ); } - fvScalarMatrix DrhoDtEqn + fvScalarMatrix pDDtEqn ( fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + fvc::div(phi) @@ -36,7 +36,7 @@ { fvScalarMatrix pEqn ( - DrhoDtEqn + pDDtEqn - fvm::laplacian(rho*rAU, p) ); diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files new file mode 100644 index 0000000000..2cce02e105 --- /dev/null +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/files @@ -0,0 +1,3 @@ +icoUncoupledKinematicParcelDyMFoam.C + +EXE = $(FOAM_APPBIN)/icoUncoupledKinematicParcelDyMFoam diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/options similarity index 96% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/options index 34ba95f0dc..7b471b791a 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I../icoUncoupledKinematicParcelFoam \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C similarity index 96% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C index 40b642a284..e6a33f6c8d 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description #include "dynamicFvMesh.H" #include "singlePhaseTransportModel.H" #include "turbulenceModel.H" -#include "basicKinematicCloud.H" +#include "basicKinematicCollidingCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files new file mode 100644 index 0000000000..95c98aff1d --- /dev/null +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/files @@ -0,0 +1,3 @@ +icoUncoupledKinematicParcelFoam.C + +EXE = $(FOAM_APPBIN)/icoUncoupledKinematicParcelFoam diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options similarity index 100% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/options rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H similarity index 70% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H index 31be0cf8ee..9ef9d6a1a0 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createFields.H @@ -75,7 +75,7 @@ args.optionReadIfPresent("cloudName", kinematicCloudName); Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; - basicKinematicCloud kinematicCloud + basicKinematicCollidingCloud kinematicCloud ( kinematicCloudName, rhoInf, @@ -89,30 +89,17 @@ "H", runTime.timeName(), mesh, - IOobject::NO_READ + IOobject::MUST_READ, + IOobject::AUTO_WRITE ); - autoPtr HPtr_; + autoPtr HPtr; if (Hheader.headerOk()) { Info<< "\nReading field H\n" << endl; - HPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "H", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); + HPtr.reset(new volVectorField (Hheader, mesh)); } IOobject HdotGradHheader @@ -120,28 +107,17 @@ "HdotGradH", runTime.timeName(), mesh, - IOobject::NO_READ + IOobject::MUST_READ, + IOobject::AUTO_WRITE ); - autoPtr HdotGradHPtr_; + autoPtr HdotGradHPtr; if (HdotGradHheader.headerOk()) { Info<< "Reading field HdotGradH" << endl; - HdotGradHPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "HdotGradH", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); + HdotGradHPtr.reset(new volVectorField(HdotGradHheader, mesh)); } + + #include "createNonInertialFrameFields.H" diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H new file mode 100644 index 0000000000..abaede9385 --- /dev/null +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/createNonInertialFrameFields.H @@ -0,0 +1,88 @@ + Info<< "Reading non-inertial frame fields" << endl; + + IOobject linearAccelerationHeader + ( + "linearAcceleration", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr linearAccelerationPtr; + + if (linearAccelerationHeader.headerOk()) + { + Info<< " Reading " << linearAccelerationHeader.name() << endl; + + linearAccelerationPtr.reset + ( + new uniformDimensionedVectorField(linearAccelerationHeader) + ); + } + + + IOobject angularVelocityHeader + ( + "angularVelocity", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr angularVelocityPtr; + + if (angularVelocityHeader.headerOk()) + { + Info<< " Reading " << angularVelocityHeader.name() << endl; + + angularVelocityPtr.reset + ( + new uniformDimensionedVectorField(angularVelocityHeader) + ); + } + + + IOobject angularAccelerationHeader + ( + "angularAcceleration", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr angularAccelerationPtr; + + if (angularAccelerationHeader.headerOk()) + { + Info<< " Reading " << angularAccelerationHeader.name() << endl; + + angularAccelerationPtr.reset + ( + new uniformDimensionedVectorField(angularAccelerationHeader) + ); + } + + + IOobject centreOfRotationHeader + ( + "centreOfRotation", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ); + + autoPtr centreOfRotationPtr; + + if (centreOfRotationHeader.headerOk()) + { + Info<< " Reading " << centreOfRotationHeader.name() << endl; + + centreOfRotationPtr.reset + ( + new uniformDimensionedVectorField(centreOfRotationHeader) + ); + } diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C similarity index 95% rename from applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C rename to applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C index 34d1d3adaa..c04ee90a7b 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/incompressibleUncoupledKinematicParcelFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" #include "turbulenceModel.H" -#include "basicKinematicCloud.H" +#include "basicKinematicCollidingCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files deleted file mode 100644 index e233a549b8..0000000000 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -incompressibleUncoupledKinematicParcelDyMFoam.C - -EXE = $(FOAM_APPBIN)/incompressibleUncoupledKinematicParcelDyMFoam diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H deleted file mode 100644 index 31be0cf8ee..0000000000 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H +++ /dev/null @@ -1,147 +0,0 @@ - Info<< "\nReading transportProperties\n" << endl; - - IOdictionary transportProperties - ( - IOobject - ( - "transportProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ); - - dimensionedScalar rhoInfValue - ( - transportProperties.lookup("rhoInf") - ); - - volScalarField rhoInf - ( - IOobject - ( - "rho", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - mesh, - rhoInfValue - ); - - Info<< "Reading field U\n" << endl; - volVectorField U - ( - IOobject - ( - "U", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ); - - #include "createPhi.H" - - Info<< "Creating turbulence model\n" << endl; - - singlePhaseTransportModel laminarTransport(U, phi); - - const volScalarField nu(laminarTransport.nu()); - - autoPtr turbulence - ( - incompressible::turbulenceModel::New(U, phi, laminarTransport) - ); - - volScalarField mu - ( - IOobject - ( - "mu", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - nu*rhoInfValue - ); - - word kinematicCloudName("kinematicCloud"); - args.optionReadIfPresent("cloudName", kinematicCloudName); - - Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; - basicKinematicCloud kinematicCloud - ( - kinematicCloudName, - rhoInf, - U, - mu, - g - ); - - IOobject Hheader - ( - "H", - runTime.timeName(), - mesh, - IOobject::NO_READ - ); - - autoPtr HPtr_; - - if (Hheader.headerOk()) - { - Info<< "\nReading field H\n" << endl; - - HPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "H", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); - } - - IOobject HdotGradHheader - ( - "HdotGradH", - runTime.timeName(), - mesh, - IOobject::NO_READ - ); - - autoPtr HdotGradHPtr_; - - if (HdotGradHheader.headerOk()) - { - Info<< "Reading field HdotGradH" << endl; - - HdotGradHPtr_.reset - ( - new volVectorField - ( - IOobject - ( - "HdotGradH", - runTime.timeName(), - mesh, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh - ) - ); - } diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files deleted file mode 100644 index 7a27f008c8..0000000000 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -incompressibleUncoupledKinematicParcelFoam.C - -EXE = $(FOAM_APPBIN)/incompressibleUncoupledKinematicParcelFoam diff --git a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H index 4a28b0dd94..e173fa858b 100644 --- a/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H +++ b/applications/solvers/lagrangian/porousExplicitSourceReactingParcelFoam/pEqn.H @@ -23,16 +23,21 @@ ); } + fvScalarMatrix pDDtEqn + ( + fvc::ddt(rho) + psi*correction(fvm::ddt(p)) + + fvc::div(phi) + == + parcels.Srho() + + massSource.SuTot() + ); + for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix pEqn ( - fvc::ddt(rho) + psi*correction(fvm::ddt(p)) - + fvc::div(phi) + pDDtEqn - fvm::laplacian(rho*rAU, p) - == - parcels.Srho() - + massSource.SuTot() ); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) diff --git a/applications/utilities/mesh/advanced/PDRMesh/Make/files b/applications/utilities/mesh/advanced/PDRMesh/Make/files new file mode 100644 index 0000000000..998d5028f2 --- /dev/null +++ b/applications/utilities/mesh/advanced/PDRMesh/Make/files @@ -0,0 +1,3 @@ +PDRMesh.C + +EXE = $(FOAM_APPBIN)/PDRMesh diff --git a/applications/utilities/mesh/advanced/PDRMesh/Make/options b/applications/utilities/mesh/advanced/PDRMesh/Make/options new file mode 100644 index 0000000000..4ce2e001ea --- /dev/null +++ b/applications/utilities/mesh/advanced/PDRMesh/Make/options @@ -0,0 +1,10 @@ +EXE_INC = \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -lmeshTools \ + -ldynamicMesh \ + -lfiniteVolume \ + -lcompressibleRASModels diff --git a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C new file mode 100644 index 0000000000..c69e102bc2 --- /dev/null +++ b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C @@ -0,0 +1,1181 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + Mesh and field preparation utility for PDR type simulations. + + Reads + - cellSet giving blockedCells + - faceSets giving blockedFaces and the patch they should go into + + NOTE: To avoid exposing wrong fields values faceSets should include + faces contained in the blockedCells cellset. + + - coupledFaces reads coupledFacesSet to introduces mixe-coupled baffles + + Subsets out the blocked cells and splits the blockedFaces and updates + fields. + + The face splitting is done by duplicating the faces. No duplication of + points for now (so checkMesh will show a lot of 'duplicate face' messages) + +\*---------------------------------------------------------------------------*/ + +#include "fvMeshSubset.H" +#include "argList.H" +#include "cellSet.H" +#include "IOobjectList.H" +#include "volFields.H" +#include "mapPolyMesh.H" +#include "faceSet.H" +#include "cellSet.H" +#include "syncTools.H" +#include "polyTopoChange.H" +#include "polyModifyFace.H" +#include "polyAddFace.H" +#include "regionSplit.H" +#include "Tuple2.H" +#include "cyclicFvPatch.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +void modifyOrAddFace +( + polyTopoChange& meshMod, + const face& f, + const label faceI, + const label own, + const bool flipFaceFlux, + const label newPatchI, + const label zoneID, + const bool zoneFlip, + + PackedBoolList& modifiedFace +) +{ + if (!modifiedFace[faceI]) + { + // First usage of face. Modify. + meshMod.setAction + ( + polyModifyFace + ( + f, // modified face + faceI, // label of face + own, // owner + -1, // neighbour + flipFaceFlux, // face flip + newPatchI, // patch for face + false, // remove from zone + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + modifiedFace[faceI] = 1; + } + else + { + // Second or more usage of face. Add. + meshMod.setAction + ( + polyAddFace + ( + f, // modified face + own, // owner + -1, // neighbour + -1, // master point + -1, // master edge + faceI, // master face + flipFaceFlux, // face flip + newPatchI, // patch for face + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + } +} + + +template +void subsetVolFields +( + const fvMeshSubset& subsetter, + const IOobjectList& objectsList, + const label patchI, + const Type& exposedValue, + const word GeomVolType, + PtrList >& subFields +) +{ + const fvMesh& baseMesh = subsetter.baseMesh(); + + label i = 0; + + forAllConstIter(IOobjectList , objectsList, iter) + { + if (iter()->headerClassName() == GeomVolType) + { + const word fieldName = iter()->name(); + + Info<< "Subsetting field " << fieldName << endl; + + GeometricField volField + ( + *iter(), + baseMesh + ); + + subFields.set(i, subsetter.interpolate(volField)); + + // Explicitly set exposed faces (in patchI) to exposedValue. + if (patchI >= 0) + { + fvPatchField& fld = + subFields[i++].boundaryField()[patchI]; + + label newStart = fld.patch().patch().start(); + + label oldPatchI = subsetter.patchMap()[patchI]; + + if (oldPatchI == -1) + { + // New patch. Reset whole value. + fld = exposedValue; + } + else + { + // Reset those faces that originate from different patch + // or internal faces. + label oldSize = volField.boundaryField()[oldPatchI].size(); + label oldStart = volField.boundaryField() + [ + oldPatchI + ].patch().patch().start(); + + forAll(fld, j) + { + label oldFaceI = subsetter.faceMap()[newStart+j]; + + if(oldFaceI < oldStart || oldFaceI >= oldStart+oldSize) + { + fld[j] = exposedValue; + } + } + } + } + } + } +} + + +template +void subsetSurfaceFields +( + const fvMeshSubset& subsetter, + const IOobjectList& objectsList, + const label patchI, + const Type& exposedValue, + const word GeomSurfType, + PtrList >& subFields +) +{ + const fvMesh& baseMesh = subsetter.baseMesh(); + + label i(0); + + forAllConstIter(IOobjectList , objectsList, iter) + { + if (iter()->headerClassName() == GeomSurfType) + { + const word& fieldName = iter.key(); + + Info<< "Subsetting field " << fieldName << endl; + + GeometricField volField + ( + *iter(), + baseMesh + ); + + subFields.set(i, subsetter.interpolate(volField)); + + + // Explicitly set exposed faces (in patchI) to exposedValue. + if (patchI >= 0) + { + fvsPatchField& fld = + subFields[i++].boundaryField()[patchI]; + + label newStart = fld.patch().patch().start(); + + label oldPatchI = subsetter.patchMap()[patchI]; + + if (oldPatchI == -1) + { + // New patch. Reset whole value. + fld = exposedValue; + } + else + { + // Reset those faces that originate from different patch + // or internal faces. + label oldSize = volField.boundaryField()[oldPatchI].size(); + label oldStart = volField.boundaryField() + [ + oldPatchI + ].patch().patch().start(); + + forAll(fld, j) + { + label oldFaceI = subsetter.faceMap()[newStart+j]; + + if(oldFaceI < oldStart || oldFaceI >= oldStart+oldSize) + { + fld[j] = exposedValue; + } + } + } + } + } + } +} + + +// Faces introduced into zero-sized patches don't get a value at all. +// This is hack to set them to an initial value. +template +void initCreatedPatches +( + const fvMesh& mesh, + const mapPolyMesh& map, + const typename GeoField::value_type initValue +) +{ + HashTable fields + ( + mesh.objectRegistry::lookupClass() + ); + + for + ( + typename HashTable:: + iterator fieldIter = fields.begin(); + fieldIter != fields.end(); + ++fieldIter + ) + { + GeoField& field = const_cast(*fieldIter()); + + forAll(field.boundaryField(), patchi) + { + if (map.oldPatchSizes()[patchi] == 0) + { + // Not mapped. + field.boundaryField()[patchi] = initValue; + + if (field.boundaryField()[patchi].fixesValue()) + { + field.boundaryField()[patchi] == initValue; + } + } + } + } +} + + +void createCoupledBaffles +( + fvMesh& mesh, + const labelList& coupledWantedPatch, + polyTopoChange& meshMod, + PackedBoolList& modifiedFace +) +{ + const faceZoneMesh& faceZones = mesh.faceZones(); + + forAll(coupledWantedPatch, faceI) + { + if (coupledWantedPatch[faceI] != -1) + { + const face& f = mesh.faces()[faceI]; + label zoneID = faceZones.whichZone(faceI); + bool zoneFlip = false; + + if (zoneID >= 0) + { + const faceZone& fZone = faceZones[zoneID]; + zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + } + + // Use owner side of face + modifyOrAddFace + ( + meshMod, + f, // modified face + faceI, // label of face + mesh.faceOwner()[faceI], // owner + false, // face flip + coupledWantedPatch[faceI], // patch for face + zoneID, // zone for face + zoneFlip, // face flip in zone + modifiedFace // modify or add status + ); + + if (mesh.isInternalFace(faceI)) + { + label zoneID = faceZones.whichZone(faceI); + bool zoneFlip = false; + + if (zoneID >= 0) + { + const faceZone& fZone = faceZones[zoneID]; + zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + } + // Use neighbour side of face + modifyOrAddFace + ( + meshMod, + f.reverseFace(), // modified face + faceI, // label of face + mesh.faceNeighbour()[faceI],// owner + false, // face flip + coupledWantedPatch[faceI], // patch for face + zoneID, // zone for face + zoneFlip, // face flip in zone + modifiedFace // modify or add status + ); + } + } + } +} + + +void createCyclicCoupledBaffles +( + fvMesh& mesh, + const labelList& cyclicMasterPatch, + const labelList& cyclicSlavePatch, + polyTopoChange& meshMod, + PackedBoolList& modifiedFace +) +{ + const faceZoneMesh& faceZones = mesh.faceZones(); + + forAll(cyclicMasterPatch, faceI) + { + if (cyclicMasterPatch[faceI] != -1) + { + const face& f = mesh.faces()[faceI]; + + label zoneID = faceZones.whichZone(faceI); + bool zoneFlip = false; + + if (zoneID >= 0) + { + const faceZone& fZone = faceZones[zoneID]; + zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + } + + modifyOrAddFace + ( + meshMod, + f.reverseFace(), // modified face + faceI, // label of face + mesh.faceNeighbour()[faceI], // owner + false, // face flip + cyclicMasterPatch[faceI], // patch for face + zoneID, // zone for face + zoneFlip, // face flip in zone + modifiedFace // modify or add + ); + } + } + + forAll(cyclicSlavePatch, faceI) + { + if (cyclicSlavePatch[faceI] != -1) + { + const face& f = mesh.faces()[faceI]; + if (mesh.isInternalFace(faceI)) + { + label zoneID = faceZones.whichZone(faceI); + bool zoneFlip = false; + + if (zoneID >= 0) + { + const faceZone& fZone = faceZones[zoneID]; + zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + } + // Use owner side of face + modifyOrAddFace + ( + meshMod, + f, // modified face + faceI, // label of face + mesh.faceOwner()[faceI], // owner + false, // face flip + cyclicSlavePatch[faceI], // patch for face + zoneID, // zone for face + zoneFlip, // face flip in zone + modifiedFace // modify or add status + ); + } + } + } +} + + +void createBaffles +( + fvMesh& mesh, + const labelList& wantedPatch, + polyTopoChange& meshMod +) +{ + const faceZoneMesh& faceZones = mesh.faceZones(); + Info << "faceZone:createBaffle " << faceZones << endl; + forAll(wantedPatch, faceI) + { + if (wantedPatch[faceI] != -1) + { + const face& f = mesh.faces()[faceI]; + + label zoneID = faceZones.whichZone(faceI); + bool zoneFlip = false; + + if (zoneID >= 0) + { + const faceZone& fZone = faceZones[zoneID]; + zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + } + + meshMod.setAction + ( + polyModifyFace + ( + f, // modified face + faceI, // label of face + mesh.faceOwner()[faceI], // owner + -1, // neighbour + false, // face flip + wantedPatch[faceI], // patch for face + false, // remove from zone + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + + if (mesh.isInternalFace(faceI)) + { + label zoneID = faceZones.whichZone(faceI); + bool zoneFlip = false; + + if (zoneID >= 0) + { + const faceZone& fZone = faceZones[zoneID]; + zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + } + + meshMod.setAction + ( + polyAddFace + ( + f.reverseFace(), // modified face + mesh.faceNeighbour()[faceI],// owner + -1, // neighbour + -1, // masterPointID + -1, // masterEdgeID + faceI, // masterFaceID, + false, // face flip + wantedPatch[faceI], // patch for face + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + } + } + } +} + + +// Wrapper around find patch. Also makes sure same patch in parallel. +label findPatch(const polyBoundaryMesh& patches, const word& patchName) +{ + label patchI = patches.findPatchID(patchName); + + if (patchI == -1) + { + FatalErrorIn("findPatch(const polyBoundaryMesh&, const word&)") + << "Illegal patch " << patchName + << nl << "Valid patches are " << patches.names() + << exit(FatalError); + } + + // Check same patch for all procs + { + label newPatch = patchI; + reduce(newPatch, minOp