Compare commits

..

17 Commits

Author SHA1 Message Date
55d5f99047 WIP: TUT: tutorial adjustment for backward compatibility 2023-01-31 16:14:43 +00:00
d439440453 WIP: TUT: tutorial adjustments for backward compatibility 2023-01-20 16:56:11 +00:00
6c66cc58a6 WIP: Updated lagrangian solvers followinf library changes 2023-01-10 13:35:42 +00:00
265b3dd2f8 WIP: deprecated lagrangian coal combustion - models added to reactingMultiphase 2023-01-10 13:35:42 +00:00
b17a9128a1 ENH: Added new parcelFoam solver based on kinematicParcelFoam 2023-01-10 13:35:42 +00:00
31d4148173 STYLE: lagrangian turbulence library - removed 'basic' prefix 2023-01-10 13:35:42 +00:00
13b8a3c02a STYLE: lagrangian intermediate library - removed 'basic' prefix 2023-01-10 13:35:42 +00:00
715831610d WIP: Added new rhoParcelFoam solver based on reactingParcelFoam 2023-01-10 13:35:42 +00:00
ab42d1a1e6 WIP: migrated coalCloudList to parcelCloudModelList 2023-01-10 13:35:42 +00:00
13cf489f63 WIP: clouds - moved spray cloud and parcels to main intermediate library 2023-01-10 13:35:42 +00:00
3277fb931b WIP: clouds - updated dependent code 2023-01-10 13:35:40 +00:00
9e83d31138 WIP: clouds - refactoring 2023-01-10 13:34:47 +00:00
878f1bf773 WIP: Clouds - new run-time selection based on openfoam.org changes 2023-01-10 13:34:47 +00:00
84348dc3f5 WIP: clouds - added debug - based on openfoam.org changes 2023-01-10 13:34:47 +00:00
1f7c038ad7 DUMMY 2023-01-10 13:34:47 +00:00
f20361d44a WIP: Clouds - new run-time selection based on openfoam.org changes 2023-01-10 13:34:33 +00:00
580a003d4d WIP: Removed base classes 2023-01-10 13:34:22 +00:00
12093 changed files with 62100 additions and 95157 deletions

View File

@ -49,7 +49,7 @@
<!-- <!--
Providing details of your set-up can help us identify any issues, e.g. Providing details of your set-up can help us identify any issues, e.g.
OpenFOAM version : v2306|v2212|v2206|v2112|v2106 etc OpenFOAM version : v2212|v2206|v2112|v2106|v2012 etc
Operating system : ubuntu|openSUSE|centos etc Operating system : ubuntu|openSUSE|centos etc
Hardware info : any info that may help? Hardware info : any info that may help?
Compiler : gcc|intel|clang etc Compiler : gcc|intel|clang etc

View File

@ -96,12 +96,10 @@ echo " ${WM_PROJECT_DIR##*/}"
echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler" echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler"
echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}" echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}"
echo echo
echo " api = $(etc/openfoam -show-api 2>/dev/null)"
# The api/patch information echo " patch = $(etc/openfoam -show-patch 2>/dev/null)"
sed -e 's/^/ /; s/=/ = /' ./META-INFO/api-info 2>/dev/null || true echo " bin = $(_foamCountDirEntries "$FOAM_APPBIN") entries"
echo " lib = $(_foamCountDirEntries "$FOAM_LIBBIN") entries"
echo " bin = $(_foamCountDirEntries "$FOAM_APPBIN") entries"
echo " lib = $(_foamCountDirEntries "$FOAM_LIBBIN") entries"
echo echo
echo ======================================== echo ========================================

View File

@ -5,22 +5,17 @@ It is likely incomplete...
## Contributors (alphabetical by surname) ## Contributors (alphabetical by surname)
- Horacio Aguerre
- Yu Ankun
- Tetsuo Aoyagi - Tetsuo Aoyagi
- Akira Azami - Akira Azami
- William Bainbridge - William Bainbridge
- Gabriel Barajas - Gabriel Barajas
- Kutalmis Bercin - Kutalmis Bercin
- Julius Bergmann
- Ivor Clifford - Ivor Clifford
- Greg Collecutt - Greg Collecutt
- Jonathan Cranford - Jonathan Cranford
- Santiago Marquez Damian
- Sergio Ferraris - Sergio Ferraris
- Matej Forman - Matej Forman
- Marian Fuchs - Marian Fuchs
- Gabriel Gerlero
- Pawan Ghildiyal - Pawan Ghildiyal
- Chris Greenshields - Chris Greenshields
- Bernhard Gschaider - Bernhard Gschaider
@ -55,11 +50,8 @@ It is likely incomplete...
- Gavin Tabor - Gavin Tabor
- Zeljko Tukovic - Zeljko Tukovic
- Eugene De Villiers - Eugene De Villiers
- Louis Vittoz
- Vuko Vukcevic
- Yi Wang - Yi Wang
- Norbert Weber - Norbert Weber
- Volker Weissmann
- Henry Weller - Henry Weller
- Niklas Wikstrom - Niklas Wikstrom
- Guanyang Xue - Guanyang Xue

View File

@ -1,2 +1,2 @@
api=2307 api=2212
patch=0 patch=0

View File

@ -40,9 +40,9 @@ Violations of the Trademark are monitored, and will be duly prosecuted.
If OpenFOAM has already been compiled on your system, simply source If OpenFOAM has already been compiled on your system, simply source
the appropriate `etc/bashrc` or `etc/cshrc` file and get started. the appropriate `etc/bashrc` or `etc/cshrc` file and get started.
For example, for the OpenFOAM-v2306 version: For example, for the OpenFOAM-v2212 version:
``` ```
source /installation/path/OpenFOAM-v2306/etc/bashrc source /installation/path/OpenFOAM-v2212/etc/bashrc
``` ```
## Compiling OpenFOAM ## Compiling OpenFOAM
@ -127,8 +127,8 @@ These 3rd-party sources are normally located in a directory parallel
to the OpenFOAM directory. For example, to the OpenFOAM directory. For example,
``` ```
/path/parent /path/parent
|-- OpenFOAM-v2306 |-- OpenFOAM-v2212
\-- ThirdParty-v2306 \-- ThirdParty-v2212
``` ```
There are, however, many cases where this simple convention is inadequate: There are, however, many cases where this simple convention is inadequate:
@ -136,7 +136,7 @@ There are, however, many cases where this simple convention is inadequate:
operating system or cluster installation provides it) operating system or cluster installation provides it)
* When we have changed the OpenFOAM directory name to some arbitrary * When we have changed the OpenFOAM directory name to some arbitrary
directory name, e.g. openfoam-sandbox2306, etc.. directory name, e.g. openfoam-sandbox2212, etc..
* When we would like any additional 3rd party software to be located * When we would like any additional 3rd party software to be located
inside of the OpenFOAM directory to ensure that the installation is inside of the OpenFOAM directory to ensure that the installation is
@ -156,9 +156,9 @@ when locating the ThirdParty directory with the following precedence:
2. PREFIX/ThirdParty-VERSION 2. PREFIX/ThirdParty-VERSION
* this corresponds to the traditional approach * this corresponds to the traditional approach
3. PREFIX/ThirdParty-vAPI 3. PREFIX/ThirdParty-vAPI
* allows for an updated value of VERSION, *eg*, `v2306-myCustom`, * allows for an updated value of VERSION, *eg*, `v2212-myCustom`,
without requiring a renamed ThirdParty. The API value would still without requiring a renamed ThirdParty. The API value would still
be `2306` and the original `ThirdParty-v2306/` would be found. be `2212` and the original `ThirdParty-v2212/` would be found.
4. PREFIX/ThirdParty-API 4. PREFIX/ThirdParty-API
* same as the previous example, but using an unadorned API value. * same as the previous example, but using an unadorned API value.
5. PREFIX/ThirdParty-common 5. PREFIX/ThirdParty-common

View File

@ -18,6 +18,6 @@ dimensionedScalar rho("rho", dimDensity, transportProperties);
scalar MaxCo = scalar MaxCo =
max(mesh.surfaceInterpolation::deltaCoeffs()*c0).value() max(mesh.surfaceInterpolation::deltaCoeffs()*c0).value()
*runTime.deltaTValue(); *runTime.deltaT().value();
Info<< "Max acoustic Courant Number = " << MaxCo << endl; Info<< "Max acoustic Courant Number = " << MaxCo << endl;

View File

@ -1,4 +1,125 @@
#include "../createFields.H" Info<< "Reading velocity field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
// Initialise the velocity internal field to zero
U = dimensionedVector(U.dimensions(), Zero);
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
fvc::flux(U)
);
if (args.found("initialiseUBCs"))
{
U.correctBoundaryConditions();
phi = fvc::flux(U);
}
// Construct a pressure field
// If it is available read it otherwise construct from the velocity BCs
// converting fixed-value BCs to zero-gradient and vice versa.
// Allow override from command-line -pName option
const word pName = args.getOrDefault<word>("pName", "p");
// Infer the pressure BCs from the velocity
wordList pBCTypes
(
U.boundaryField().size(),
fixedValueFvPatchScalarField::typeName
);
forAll(U.boundaryField(), patchi)
{
if (U.boundaryField()[patchi].fixesValue())
{
pBCTypes[patchi] = zeroGradientFvPatchScalarField::typeName;
}
}
// Note that registerObject is false for the pressure field. The pressure
// field in this solver doesn't have a physical value during the solution.
// It shouldn't be looked up and used by sub models or boundary conditions.
Info<< "Constructing pressure field " << pName << nl << endl;
volScalarField p
(
IOobject
(
pName,
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
),
mesh,
dimensionedScalar(sqr(dimVelocity), Zero),
pBCTypes
);
// Infer the velocity potential BCs from the pressure
wordList PhiBCTypes
(
p.boundaryField().size(),
zeroGradientFvPatchScalarField::typeName
);
forAll(p.boundaryField(), patchi)
{
if (p.boundaryField()[patchi].fixesValue())
{
PhiBCTypes[patchi] = fixedValueFvPatchScalarField::typeName;
}
}
Info<< "Constructing velocity potential field Phi\n" << endl;
volScalarField Phi
(
IOobject
(
"Phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar(dimLength*dimVelocity, Zero),
PhiBCTypes
);
label PhiRefCell = 0;
scalar PhiRefValue = 0;
setRefCell
(
Phi,
potentialFlow.dict(),
PhiRefCell,
PhiRefValue
);
mesh.setFluxRequired(Phi.name());
#include "createMRF.H"
// Add solver-specific interpolations // Add solver-specific interpolations
{ {

View File

@ -83,7 +83,6 @@ Description
\heading Options \heading Options
\plaintable \plaintable
-writep | write the Euler pressure -writep | write the Euler pressure
-writephi | Write the final volumetric flux
-writePhi | Write the final velocity potential -writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi -initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable \endplaintable
@ -118,12 +117,6 @@ int main(int argc, char *argv[])
"Initialise U boundary conditions" "Initialise U boundary conditions"
); );
argList::addBoolOption
(
"writephi",
"Write the final volumetric flux field"
);
argList::addBoolOption argList::addBoolOption
( (
"writePhi", "writePhi",
@ -142,8 +135,6 @@ int main(int argc, char *argv[])
"Execute functionObjects" "Execute functionObjects"
); );
#include "addRegionOption.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H" #include "setRootCaseLists.H"
#include "createTime.H" #include "createTime.H"
#include "createNamedDynamicFvMesh.H" #include "createNamedDynamicFvMesh.H"
@ -203,16 +194,11 @@ int main(int argc, char *argv[])
<< endl; << endl;
} }
// Write U // Write U and phi
U.write(); U.write();
phi.write();
// Optionally write the volumetric flux, phi // Optionally write Phi
if (args.found("writephi"))
{
phi.write();
}
// Optionally write velocity potential, Phi
if (args.found("writePhi")) if (args.found("writePhi"))
{ {
Phi.write(); Phi.write();

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2019-2020,2023 OpenCFD Ltd. Copyright (C) 2019-2020 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -132,11 +132,6 @@ void PDRkEpsilon::correct()
// Update epsilon and G at the wall // Update epsilon and G at the wall
epsilon_.boundaryFieldRef().updateCoeffs(); epsilon_.boundaryFieldRef().updateCoeffs();
// Push new cell values to
// coupled neighbours. Note that we want to avoid the re-updateCoeffs
// of the wallFunctions so make sure to bypass the evaluate on
// those patches and only do the coupled ones.
epsilon_.boundaryFieldRef().evaluateCoupled<coupledFvPatch>();
// Add the blockage generation term so that it is included consistently // Add the blockage generation term so that it is included consistently
// in both the k and epsilon equations // in both the k and epsilon equations

View File

@ -109,7 +109,7 @@ Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const
mesh, mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar(Nv.dimensions(), Zero) dimensionedScalar(Nv.dimensions(), Zero)

View File

@ -171,7 +171,10 @@ if (ign.ignited())
fvOptions.correct(Su); fvOptions.correct(Su);
Su.clamp_range(SuMin, SuMax); // Limit the maximum Su
// ~~~~~~~~~~~~~~~~~~~~
Su.min(SuMax);
Su.max(SuMin);
} }
else else
{ {
@ -215,7 +218,7 @@ if (ign.ignited())
+ ( + (
scalar(1) scalar(1)
+ (2*XiShapeCoef) + (2*XiShapeCoef)
*(scalar(0.5) - clamp(b, zero_one{})) *(scalar(0.5) - min(max(b, scalar(0)), scalar(1)))
)*(XiEqStar - scalar(1.001)) )*(XiEqStar - scalar(1.001))
); );
@ -223,7 +226,7 @@ if (ign.ignited())
volScalarField R(Gstar*XiEqStar/(XiEqStar - scalar(1))); volScalarField R(Gstar*XiEqStar/(XiEqStar - scalar(1)));
volScalarField G(R*(XiEq - scalar(1.001))/XiEq); volScalarField G(R*(XiEq - scalar(1.001))/XiEq);
//R *= (Gstar + 2*mag(devSymm(fvc::grad(U))))/Gstar; //R *= (Gstar + 2*mag(dev(symm(fvc::grad(U)))))/Gstar;
// Solve for the flame wrinkling // Solve for the flame wrinkling
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -12,7 +12,7 @@ Info<< "Creating base fields for time " << runTime.timeName() << endl;
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar("Ydefault", dimless, 1) dimensionedScalar("Ydefault", dimless, 1)
@ -29,7 +29,7 @@ Info<< "Creating base fields for time " << runTime.timeName() << endl;
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar("p", dimPressure, p0) dimensionedScalar("p", dimPressure, p0)
@ -46,7 +46,7 @@ Info<< "Creating base fields for time " << runTime.timeName() << endl;
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar("T", dimTemperature, T0) dimensionedScalar("T", dimTemperature, T0)

View File

@ -1,5 +1,5 @@
if (adjustTimeStep) if (adjustTimeStep)
{ {
runTime.setDeltaT(min(dtChem, maxDeltaT)); runTime.setDeltaT(min(dtChem, maxDeltaT));
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaT().value() << endl;
} }

View File

@ -1,3 +1,3 @@
dtChem = chemistry.solve(runTime.deltaTValue()); dtChem = chemistry.solve(runTime.deltaT().value());
scalar Qdot = chemistry.Qdot()()[0]/rho[0]; scalar Qdot = chemistry.Qdot()()[0]/rho[0];
integratedHeat += Qdot*runTime.deltaTValue(); integratedHeat += Qdot*runTime.deltaT().value();

View File

@ -39,13 +39,13 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
radiation->correct(); radiation->correct();

View File

@ -1,9 +1,9 @@
Info<< "\nConstructing reacting cloud" << endl; Info<< "\nConstructing reacting cloud" << endl;
basicReactingCloud parcels reactingCloud parcels
( (
"reactingCloud1", "reactingCloud1",
g,
rho, rho,
U, U,
g,
slgThermo slgThermo
); );

View File

@ -37,7 +37,7 @@ Description
#include "fvCFD.H" #include "fvCFD.H"
#include "turbulentFluidThermoModel.H" #include "turbulentFluidThermoModel.H"
#include "basicReactingCloud.H" #include "reactingCloud.H"
#include "surfaceFilmModel.H" #include "surfaceFilmModel.H"
#include "pyrolysisModelCollection.H" #include "pyrolysisModelCollection.H"
#include "radiationModel.H" #include "radiationModel.H"

View File

@ -38,11 +38,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }

View File

@ -103,10 +103,16 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
<< exit(FatalIOError); << exit(FatalIOError);
} }
if (!this->readValueEntry(dict)) if (dict.found("value"))
{ {
// Fallback: set to the internal field fvPatchField<scalar>::operator=
fvPatchField<scalar>::patchInternalField(*this); (
scalarField("value", dict, p.size())
);
}
else
{
fvPatchField<scalar>::operator=(patchInternalField());
} }
refValue() = *this; refValue() = *this;
@ -159,10 +165,14 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
return; return;
} }
const auto& pmu = patch().lookupPatchField<volScalarField>(muName_); const fvPatchScalarField& pmu =
const auto& prho = patch().lookupPatchField<volScalarField>(rhoName_); patch().lookupPatchField<volScalarField, scalar>(muName_);
const auto& ppsi = patch().lookupPatchField<volScalarField>(psiName_); const fvPatchScalarField& prho =
const auto& pU = patch().lookupPatchField<volVectorField>(UName_); patch().lookupPatchField<volScalarField, scalar>(rhoName_);
const fvPatchField<scalar>& ppsi =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
const fvPatchVectorField& pU =
patch().lookupPatchField<volVectorField, vector>(UName_);
// Prandtl number reading consistent with rhoCentralFoam // Prandtl number reading consistent with rhoCentralFoam
const dictionary& thermophysicalProperties = const dictionary& thermophysicalProperties =
@ -197,7 +207,7 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
// Write // Write
void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
{ {
fvPatchField<scalar>::write(os); fvPatchScalarField::write(os);
os.writeEntryIfDifferent<word>("U", "U", UName_); os.writeEntryIfDifferent<word>("U", "U", UName_);
os.writeEntryIfDifferent<word>("rho", "rho", rhoName_); os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
@ -207,7 +217,7 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
os.writeEntry("accommodationCoeff", accommodationCoeff_); os.writeEntry("accommodationCoeff", accommodationCoeff_);
Twall_.writeEntry("Twall", os); Twall_.writeEntry("Twall", os);
os.writeEntry("gamma", gamma_); os.writeEntry("gamma", gamma_);
fvPatchField<scalar>::writeValueEntry(os); writeEntry("value", os);
} }

View File

@ -105,15 +105,18 @@ Foam::maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
<< exit(FatalIOError); << exit(FatalIOError);
} }
if (this->readValueEntry(dict)) if (dict.found("value"))
{ {
const auto* hasRefValue = dict.findEntry("refValue", keyType::LITERAL); fvPatchField<vector>::operator=
const auto* hasFrac = dict.findEntry("valueFraction", keyType::LITERAL); (
vectorField("value", dict, p.size())
);
if (hasRefValue && hasFrac) if (dict.found("refValue") && dict.found("valueFraction"))
{ {
this->refValue().assign(*hasRefValue, p.size()); this->refValue() = vectorField("refValue", dict, p.size());
this->valueFraction().assign(*hasFrac, p.size()); this->valueFraction() =
scalarField("valueFraction", dict, p.size());
} }
else else
{ {
@ -152,9 +155,12 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
return; return;
} }
const auto& pmu = patch().lookupPatchField<volScalarField>(muName_); const fvPatchScalarField& pmu =
const auto& prho = patch().lookupPatchField<volScalarField>(rhoName_); patch().lookupPatchField<volScalarField, scalar>(muName_);
const auto& ppsi = patch().lookupPatchField<volScalarField>(psiName_); const fvPatchScalarField& prho =
patch().lookupPatchField<volScalarField, scalar>(rhoName_);
const fvPatchField<scalar>& ppsi =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
Field<scalar> C1 Field<scalar> C1
( (
@ -181,8 +187,8 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
if (curvature_) if (curvature_)
{ {
const auto& ptauMC = const fvPatchTensorField& ptauMC =
patch().lookupPatchField<volTensorField>(tauMCName_); patch().lookupPatchField<volTensorField, tensor>(tauMCName_);
vectorField n(patch().nf()); vectorField n(patch().nf());
refValue() -= C1/prho*transform(I - n*n, (n & ptauMC)); refValue() -= C1/prho*transform(I - n*n, (n & ptauMC));
@ -194,7 +200,7 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
{ {
fvPatchField<vector>::write(os); fvPatchVectorField::write(os);
os.writeEntryIfDifferent<word>("T", "T", TName_); os.writeEntryIfDifferent<word>("T", "T", TName_);
os.writeEntryIfDifferent<word>("rho", "rho", rhoName_); os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_); os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_);
@ -209,7 +215,7 @@ void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
refValue().writeEntry("refValue", os); refValue().writeEntry("refValue", os);
valueFraction().writeEntry("valueFraction", os); valueFraction().writeEntry("valueFraction", os);
fvPatchField<vector>::writeValueEntry(os); writeEntry("value", os);
} }

View File

@ -104,8 +104,11 @@ void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
return; return;
} }
const auto& psip = patch().lookupPatchField<volScalarField>(psiName_); const fvPatchField<scalar>& psip =
const auto& pp = patch().lookupPatchField<volScalarField>(pName_); patch().lookupPatchField<volScalarField, scalar>(psiName_);
const fvPatchField<scalar>& pp =
patch().lookupPatchField<volScalarField, scalar>(pName_);
operator==(psip*pp); operator==(psip*pp);
@ -115,10 +118,11 @@ void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
void Foam::fixedRhoFvPatchScalarField::write(Ostream& os) const void Foam::fixedRhoFvPatchScalarField::write(Ostream& os) const
{ {
fvPatchField<scalar>::write(os); fvPatchScalarField::write(os);
os.writeEntryIfDifferent<word>("p", "p", pName_); os.writeEntryIfDifferent<word>("p", "p", pName_);
os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_); os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_);
fvPatchField<scalar>::writeValueEntry(os); writeEntry("value", os);
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -17,7 +17,7 @@ tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> interpolate
vf, vf,
dir, dir,
"reconstruct(" "reconstruct("
+ (reconFieldName.empty() ? vf.name() : reconFieldName) + (reconFieldName != word::null ? reconFieldName : vf.name())
+ ')' + ')'
) )
); );

View File

@ -9,7 +9,7 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude -I$(LIB_SRC)/regionFaModels\lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \

View File

@ -29,7 +29,7 @@ if (mesh.changing())
wordList pcorrTypes wordList pcorrTypes
( (
p.boundaryField().size(), p.boundaryField().size(),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchScalarField::typeName
); );
// Set BCs of pcorr to fixed-value for patches at which p is fixed // Set BCs of pcorr to fixed-value for patches at which p is fixed

View File

@ -7,7 +7,7 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude -I$(LIB_SRC)/regionFaModels\lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \

View File

@ -7,7 +7,7 @@
*mag(aMesh.edgeInterpolation::deltaCoeffs()) *mag(aMesh.edgeInterpolation::deltaCoeffs())
/rhol /rhol
) )
).value()*runTime.deltaTValue(); ).value()*runTime.deltaT().value();
Info<< "Max Capillary Courant Number = " << CoNumSigma << '\n' << endl; Info<< "Max Capillary Courant Number = " << CoNumSigma << '\n' << endl;
} }

View File

@ -87,13 +87,7 @@ int main(int argc, char *argv[])
( (
fam::ddt(h, Us) fam::ddt(h, Us)
+ fam::div(phi2s, Us) + fam::div(phi2s, Us)
+ fam::Sp + fam::Sp(0.0125*frictionFactor*mag(Us), Us)
(
0.0125
*frictionFactor.internalField()
*mag(Us.internalField()),
Us
)
== ==
Gs*h Gs*h
- fam::Sp(Sd, Us) - fam::Sp(Sd, Us)

View File

@ -47,10 +47,10 @@ if (aMesh.nInternalEdges())
); );
CoNum = max(SfUfbyDelta/aMesh.magLe()) CoNum = max(SfUfbyDelta/aMesh.magLe())
.value()*runTime.deltaTValue(); .value()*runTime.deltaT().value();
meanCoNum = (sum(SfUfbyDelta)/sum(aMesh.magLe())) meanCoNum = (sum(SfUfbyDelta)/sum(aMesh.magLe()))
.value()*runTime.deltaTValue(); .value()*runTime.deltaT().value();
velMag = max(mag(phis)/aMesh.magLe()).value(); velMag = max(mag(phis)/aMesh.magLe()).value();
} }

View File

@ -47,7 +47,6 @@ forAll(Us, faceI)
Us[faceI].z() = Us[faceI].z() =
Uinf.value()*0.25*R[faceI].x()*R[faceI].z()/sqr(mag(R[faceI])); Uinf.value()*0.25*R[faceI].x()*R[faceI].z()/sqr(mag(R[faceI]));
} }
Us.boundaryFieldRef().evaluateCoupled<coupledFaPatch>();
Us -= aMesh.faceAreaNormals()*(aMesh.faceAreaNormals() & Us); Us -= aMesh.faceAreaNormals()*(aMesh.faceAreaNormals() & Us);

View File

@ -10,7 +10,7 @@ EXE_INC = \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude -I$(LIB_SRC)/regionFaModels\lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \

View File

@ -29,7 +29,7 @@ if (mesh.changing())
wordList pcorrTypes wordList pcorrTypes
( (
p.boundaryField().size(), p.boundaryField().size(),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchScalarField::typeName
); );
// Set BCs of pcorr to fixed-value for patches at which p is fixed // Set BCs of pcorr to fixed-value for patches at which p is fixed

View File

@ -7,7 +7,7 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude -I$(LIB_SRC)/regionFaModels\lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \

View File

@ -19,7 +19,7 @@ EXE_INC = \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude -I$(LIB_SRC)/regionFaModels\lnInclude
EXE_LIBS = \ EXE_LIBS = \

View File

@ -108,7 +108,7 @@ forAll(fluidRegions, i)
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
dimensionedScalar(word::null, dimLength, Zero) dimensionedScalar("hRef", dimLength, Zero) // uses name
) )
); );

View File

@ -1,5 +1,5 @@
derivedFvPatchFields/turbulentTemperatureTwoPhaseRadCoupledMixed/turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField.C derivedFvPatchFields/turbulentTemperatureTwoPhaseRadCoupledMixed/turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField.C
solid/solidRegionDiffNo.C ../solid/solidRegionDiffNo.C
chtMultiRegionTwoPhaseEulerFoam.C chtMultiRegionTwoPhaseEulerFoam.C
EXE = $(FOAM_APPBIN)/chtMultiRegionTwoPhaseEulerFoam EXE = $(FOAM_APPBIN)/chtMultiRegionTwoPhaseEulerFoam

View File

@ -88,29 +88,26 @@ kappa
case mtLookup: case mtLookup:
{ {
if (mesh.foundObject<volScalarField>(kappaName_))
{ {
const auto* ptr = return patch().lookupPatchField<volScalarField, scalar>
mesh.cfindObject<volScalarField>(kappaName_); (
kappaName_
if (ptr) );
{
return patch().patchField(*ptr);
}
} }
else if (mesh.foundObject<volSymmTensorField>(kappaName_))
{ {
const auto* ptr = const symmTensorField& KWall =
mesh.cfindObject<volSymmTensorField>(kappaName_); patch().lookupPatchField<volSymmTensorField, scalar>
(
kappaName_
);
if (ptr) const vectorField n(patch().nf());
{
const symmTensorField& KWall = patch().patchField(*ptr);
const vectorField n(patch().nf()); return n & KWall & n;
return n & KWall & n;
}
} }
else
{ {
FatalErrorInFunction FatalErrorInFunction
<< "Did not find field " << kappaName_ << "Did not find field " << kappaName_
@ -120,6 +117,9 @@ kappa
<< " or volSymmTensorField." << " or volSymmTensorField."
<< exit(FatalError); << exit(FatalError);
} }
break; break;
} }
@ -131,8 +131,10 @@ kappa
mesh.lookupObject<phaseSystem>("phaseProperties") mesh.lookupObject<phaseSystem>("phaseProperties")
); );
auto tkappaEff = tmp<scalarField>::New(patch().size(), Zero); tmp<scalarField> kappaEff
auto& kappaEff = tkappaEff.ref(); (
new scalarField(patch().size(), 0.0)
);
forAll(fluid.phases(), phasei) forAll(fluid.phases(), phasei)
{ {
@ -140,10 +142,10 @@ kappa
const fvPatchScalarField& alpha = phase.boundaryField()[patchi]; const fvPatchScalarField& alpha = phase.boundaryField()[patchi];
kappaEff += alpha*phase.kappaEff(patchi)(); kappaEff.ref() += alpha*phase.kappaEff(patchi)();
} }
return tkappaEff; return kappaEff;
break; break;
} }
@ -159,11 +161,9 @@ kappa
} }
} }
// Return zero-sized (not nullptr) return scalarField(0);
return tmp<scalarField>::New();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -243,12 +243,14 @@ turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
<< exit(FatalError); << exit(FatalError);
} }
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
this->readValueEntry(dict, IOobjectOption::MUST_READ); if (dict.found("refValue"))
if (this->readMixedEntries(dict))
{ {
// Full restart // Full restart
refValue() = scalarField("refValue", dict, p.size());
refGrad() = scalarField("refGradient", dict, p.size());
valueFraction() = scalarField("valueFraction", dict, p.size());
} }
else else
{ {
@ -292,7 +294,8 @@ updateCoeffs()
// Since we're inside initEvaluate/evaluate there might be processor // Since we're inside initEvaluate/evaluate there might be processor
// comms underway. Change the tag we use. // comms underway. Change the tag we use.
const int oldTag = UPstream::incrMsgType(); int oldTag = UPstream::msgType();
UPstream::msgType() = oldTag+1;
// Get the coupling information from the mappedPatchBase // Get the coupling information from the mappedPatchBase
const label patchi = patch().index(); const label patchi = patch().index();
@ -305,11 +308,12 @@ updateCoeffs()
scalarField& Tp = *this; scalarField& Tp = *this;
const auto& nbrField = const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField&
refCast nbrField = refCast
< <const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField>
const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField (
>(nbrPatch.lookupPatchField<volScalarField>(TnbrName_)); nbrPatch.lookupPatchField<volScalarField, scalar>(TnbrName_)
);
// Swap to obtain full local values of neighbour internal field // Swap to obtain full local values of neighbour internal field
scalarField TcNbr(nbrField.patchInternalField()); scalarField TcNbr(nbrField.patchInternalField());
@ -326,13 +330,13 @@ updateCoeffs()
scalarField qr(Tp.size(), 0.0); scalarField qr(Tp.size(), 0.0);
if (qrName_ != "none") if (qrName_ != "none")
{ {
qr = patch().lookupPatchField<volScalarField>(qrName_); qr = patch().lookupPatchField<volScalarField, scalar>(qrName_);
} }
scalarField qrNbr(Tp.size(), 0.0); scalarField qrNbr(Tp.size(), 0.0);
if (qrNbrName_ != "none") if (qrNbrName_ != "none")
{ {
qrNbr = nbrPatch.lookupPatchField<volScalarField>(qrNbrName_); qrNbr = nbrPatch.lookupPatchField<volScalarField, scalar>(qrNbrName_);
mpp.distribute(qrNbr); mpp.distribute(qrNbr);
} }
@ -470,9 +474,10 @@ updateCoeffs()
<< regionTypeNames_ << nl << exit(FatalError); << regionTypeNames_ << nl << exit(FatalError);
} }
UPstream::msgType(oldTag); // Restore tag
mixedFvPatchScalarField::updateCoeffs(); mixedFvPatchScalarField::updateCoeffs();
// Restore tag
UPstream::msgType() = oldTag;
} }
@ -481,7 +486,7 @@ void turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField::write
Ostream& os Ostream& os
) const ) const
{ {
mixedFvPatchField<scalar>::write(os); mixedFvPatchScalarField::write(os);
os.writeEntry("kappaMethod", KMethodTypeNames_[method_]); os.writeEntry("kappaMethod", KMethodTypeNames_[method_]);
os.writeEntryIfDifferent<word>("kappa","none", kappaName_); os.writeEntryIfDifferent<word>("kappa","none", kappaName_);

View File

@ -221,7 +221,7 @@ forAll(fluidRegions, i)
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
dimensionedScalar(word::null, dimLength, Zero) dimensionedScalar("hRef", dimLength, Zero)
) )
); );

View File

@ -13,11 +13,11 @@ forAll(cumulativeContErrIO, i)
"cumulativeContErr", "cumulativeContErr",
runTime.timeName(), runTime.timeName(),
"uniform", "uniform",
mesh.thisDb(), mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
dimensionedScalar(word::null, dimless, Zero) dimensionedScalar(dimless, Zero)
) )
); );
} }

View File

@ -48,7 +48,7 @@ if (Y.size())
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
@ -56,6 +56,6 @@ if (Y.size())
if (Y.size()) if (Y.size())
{ {
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }
} }

View File

@ -112,7 +112,7 @@ forAll(fluidRegions, i)
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
dimensionedScalar(word::null, dimLength, Zero) dimensionedScalar("hRef", dimLength, Zero) // uses name
) )
); );

View File

@ -13,11 +13,11 @@ forAll(cumulativeContErrIO, i)
"cumulativeContErr", "cumulativeContErr",
runTime.timeName(), runTime.timeName(),
"uniform", "uniform",
mesh.thisDb(), mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
dimensionedScalar(word::null, dimless, Zero) dimensionedScalar(dimless, Zero)
) )
); );
} }

View File

@ -49,11 +49,11 @@ if (adjustTimeStep)
( (
min min
( (
min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaTValue(), min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaT().value(),
min(runTime.deltaTValue(), maxDeltaT) min(runTime.deltaTValue(), maxDeltaT)
) )
); );
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaT().value() << endl;
} }
} }

View File

@ -59,12 +59,12 @@ if (adjustTimeStep)
( (
min min
( (
min(deltaTFluid, maxDeltaTSolid)*runTime.deltaTValue(), min(deltaTFluid, maxDeltaTSolid)*runTime.deltaT().value(),
maxDeltaT maxDeltaT
) )
); );
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaT().value() << endl;
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -57,7 +57,7 @@
), ),
solidRegions[i], solidRegions[i],
dimensionedSymmTensor(tkappaByCp().dimensions(), Zero), dimensionedSymmTensor(tkappaByCp().dimensions(), Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchSymmTensorField::typeName
) )
); );

View File

@ -34,7 +34,7 @@ if (!thermo.isotropic())
), ),
mesh, mesh,
dimensionedSymmTensor(tkappaByCp().dimensions(), Zero), dimensionedSymmTensor(tkappaByCp().dimensions(), Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchSymmTensorField::typeName
) )
); );
volSymmTensorField& aniAlpha = *taniAlpha; volSymmTensorField& aniAlpha = *taniAlpha;

View File

@ -44,7 +44,7 @@ IOobject turbulencePropertiesHeader
mesh, mesh,
IOobject::MUST_READ_IF_MODIFIED, IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
); );
if (turbulencePropertiesHeader.typeHeaderOk<IOdictionary>(false)) if (turbulencePropertiesHeader.typeHeaderOk<IOdictionary>(false))

View File

@ -89,10 +89,17 @@ void Foam::adjointOutletPressureFvPatchScalarField::updateCoeffs()
return; return;
} }
const auto& phip = patch().lookupPatchField<surfaceScalarField>("phi"); const fvsPatchField<scalar>& phip =
const auto& phiap = patch().lookupPatchField<surfaceScalarField>("phia"); patch().lookupPatchField<surfaceScalarField, scalar>("phi");
const auto& Up = patch().lookupPatchField<volVectorField>("U");
const auto& Uap = patch().lookupPatchField<volVectorField>("Ua"); const fvsPatchField<scalar>& phiap =
patch().lookupPatchField<surfaceScalarField, scalar>("phia");
const fvPatchField<vector>& Up =
patch().lookupPatchField<volVectorField, vector>("U");
const fvPatchField<vector>& Uap =
patch().lookupPatchField<volVectorField, vector>("Ua");
operator==((phiap/patch().magSf() - 1.0)*phip/patch().magSf() + (Up & Uap)); operator==((phiap/patch().magSf() - 1.0)*phip/patch().magSf() + (Up & Uap));
@ -102,8 +109,8 @@ void Foam::adjointOutletPressureFvPatchScalarField::updateCoeffs()
void Foam::adjointOutletPressureFvPatchScalarField::write(Ostream& os) const void Foam::adjointOutletPressureFvPatchScalarField::write(Ostream& os) const
{ {
fvPatchField<scalar>::write(os); fvPatchScalarField::write(os);
fvPatchField<scalar>::writeValueEntry(os); writeEntry("value", os);
} }

View File

@ -90,8 +90,11 @@ void Foam::adjointOutletVelocityFvPatchVectorField::updateCoeffs()
return; return;
} }
const auto& phiap = patch().lookupPatchField<surfaceScalarField>("phia"); const fvsPatchField<scalar>& phiap =
const auto& Up = patch().lookupPatchField<volVectorField>("U"); patch().lookupPatchField<surfaceScalarField, scalar>("phia");
const fvPatchField<vector>& Up =
patch().lookupPatchField<volVectorField, vector>("U");
scalarField Un(mag(patch().nf() & Up)); scalarField Un(mag(patch().nf() & Up));
vectorField UtHat((Up - patch().nf()*Un)/(Un + SMALL)); vectorField UtHat((Up - patch().nf()*Un)/(Un + SMALL));
@ -107,8 +110,8 @@ void Foam::adjointOutletVelocityFvPatchVectorField::updateCoeffs()
void Foam::adjointOutletVelocityFvPatchVectorField::write(Ostream& os) const void Foam::adjointOutletVelocityFvPatchVectorField::write(Ostream& os) const
{ {
fvPatchField<vector>::write(os); fvPatchVectorField::write(os);
fvPatchField<vector>::writeValueEntry(os); writeEntry("value", os);
} }

View File

@ -8,7 +8,7 @@ EXE_INC = \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude -I$(LIB_SRC)/regionFaModels\lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \

View File

@ -24,7 +24,7 @@ if (mesh.changing())
wordList pcorrTypes wordList pcorrTypes
( (
p.boundaryField().size(), p.boundaryField().size(),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchScalarField::typeName
); );
// Set BCs of pcorr to fixed-value for patches at which p is fixed // Set BCs of pcorr to fixed-value for patches at which p is fixed
@ -94,7 +94,7 @@ if (mesh.changing())
{ {
if (refCells[zoneId] != -1) if (refCells[zoneId] != -1)
{ {
validCells.push_back(refCells[zoneId]); validCells.append(refCells[zoneId]);
} }
} }

View File

@ -42,11 +42,11 @@ Description
#include "CorrectPhi.H" #include "CorrectPhi.H"
#ifdef MPPIC #ifdef MPPIC
#include "basicKinematicCloud.H" #include "kinematicCloud.H"
#define basicKinematicTypeCloud basicKinematicCloud #define kinematicTypeCloud kinematicCloud
#else #else
#include "basicKinematicCollidingCloud.H" #include "kinematicCollidingCloud.H"
#define basicKinematicTypeCloud basicKinematicCollidingCloud #define kinematicTypeCloud kinematicCollidingCloud
#endif #endif
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -88,7 +88,7 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
// Store the particle positions // Store the particle positions
kinematicCloud.storeGlobalPositions(); kCloud.storeGlobalPositions();
mesh.update(); mesh.update();
@ -111,15 +111,15 @@ int main(int argc, char *argv[])
continuousPhaseTransport.correct(); continuousPhaseTransport.correct();
muc = rhoc*continuousPhaseTransport.nu(); muc = rhoc*continuousPhaseTransport.nu();
kinematicCloud.evolve(); kCloud.evolve();
// Update continuous phase volume fraction field // Update continuous phase volume fraction field
alphac = max(1.0 - kinematicCloud.theta(), alphacMin); alphac = max(1.0 - kCloud.theta(), alphacMin);
alphac.correctBoundaryConditions(); alphac.correctBoundaryConditions();
alphacf = fvc::interpolate(alphac); alphacf = fvc::interpolate(alphac);
alphaPhic = alphacf*phic; alphaPhic = alphacf*phic;
fvVectorMatrix cloudSU(kinematicCloud.SU(Uc)); fvVectorMatrix cloudSU(kCloud.SU(Uc));
volVectorField cloudVolSUSu volVectorField cloudVolSUSu
( (
IOobject IOobject
@ -130,7 +130,7 @@ int main(int argc, char *argv[])
), ),
mesh, mesh,
dimensionedVector(cloudSU.dimensions()/dimVolume, Zero), dimensionedVector(cloudSU.dimensions()/dimVolume, Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchVectorField::typeName
); );
cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V(); cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V();

View File

@ -12,6 +12,8 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \

View File

@ -11,8 +11,11 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/phaseIncompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/phaseIncompressible/lnInclude \

View File

@ -43,11 +43,11 @@ Description
#include "pimpleControl.H" #include "pimpleControl.H"
#ifdef MPPIC #ifdef MPPIC
#include "basicKinematicCloud.H" #include "kinematicCloud.H"
#define basicKinematicTypeCloud basicKinematicCloud #define kinematicTypeCloud kinematicCloud
#else #else
#include "basicKinematicCollidingCloud.H" #include "kinematicCollidingCloud.H"
#define basicKinematicTypeCloud basicKinematicCollidingCloud #define kinematicTypeCloud kinematicCollidingCloud
#endif #endif
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -91,16 +91,16 @@ int main(int argc, char *argv[])
continuousPhaseTransport.correct(); continuousPhaseTransport.correct();
muc = rhoc*continuousPhaseTransport.nu(); muc = rhoc*continuousPhaseTransport.nu();
Info<< "Evolving " << kinematicCloud.name() << endl; Info<< "Evolving " << kCloud.name() << endl;
kinematicCloud.evolve(); kCloud.evolve();
// Update continuous phase volume fraction field // Update continuous phase volume fraction field
alphac = max(1.0 - kinematicCloud.theta(), alphacMin); alphac = max(1.0 - kCloud.theta(), alphacMin);
alphac.correctBoundaryConditions(); alphac.correctBoundaryConditions();
alphacf = fvc::interpolate(alphac); alphacf = fvc::interpolate(alphac);
alphaPhic = alphacf*phic; alphaPhic = alphacf*phic;
fvVectorMatrix cloudSU(kinematicCloud.SU(Uc)); fvVectorMatrix cloudSU(kCloud.SU(Uc));
volVectorField cloudVolSUSu volVectorField cloudVolSUSu
( (
IOobject IOobject
@ -111,7 +111,7 @@ int main(int argc, char *argv[])
), ),
mesh, mesh,
dimensionedVector(cloudSU.dimensions()/dimVolume, Zero), dimensionedVector(cloudSU.dimensions()/dimVolume, Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchVectorField::typeName
); );
cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V(); cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V();

View File

@ -10,6 +10,8 @@ EXE_INC = \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \

View File

@ -10,8 +10,11 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \

View File

@ -125,13 +125,13 @@ const word kinematicCloudName
); );
Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
basicKinematicTypeCloud kinematicCloud kinematicTypeCloud kCloud
( (
kinematicCloudName, kinematicCloudName,
g,
rhoc, rhoc,
Uc, Uc,
muc, muc
g
); );
// Particle fraction upper limit // Particle fraction upper limit
@ -139,13 +139,13 @@ scalar alphacMin
( (
1.0 1.0
- ( - (
kinematicCloud.particleProperties().subDict("constantProperties") kCloud.particleProperties().subDict("constantProperties")
.get<scalar>("alphaMax") .get<scalar>("alphaMax")
) )
); );
// Update alphac from the particle locations // Update alphac from the particle locations
alphac = max(1.0 - kinematicCloud.theta(), alphacMin); alphac = max(1.0 - kCloud.theta(), alphacMin);
alphac.correctBoundaryConditions(); alphac.correctBoundaryConditions();
surfaceScalarField alphacf("alphacf", fvc::interpolate(alphac)); surfaceScalarField alphacf("alphacf", fvc::interpolate(alphac));

View File

@ -6,7 +6,6 @@ EXE_INC = \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \
-I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels/compressible/lnInclude \
@ -35,7 +34,6 @@ EXE_LIBS = \
-llagrangian \ -llagrangian \
-llagrangianIntermediate \ -llagrangianIntermediate \
-llagrangianTurbulence \ -llagrangianTurbulence \
-lcoalCombustion\
-lspecie \ -lspecie \
-lcompressibleTransportModels \ -lcompressibleTransportModels \
-lfluidThermophysicalModels \ -lfluidThermophysicalModels \

View File

@ -40,11 +40,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }

View File

@ -37,8 +37,8 @@ Description
#include "fvCFD.H" #include "fvCFD.H"
#include "turbulentFluidThermoModel.H" #include "turbulentFluidThermoModel.H"
#include "basicThermoCloud.H" #include "thermoCloud.H"
#include "coalCloud.H" #include "reactingMultiphaseCloud.H"
#include "psiReactionThermo.H" #include "psiReactionThermo.H"
#include "CombustionModel.H" #include "CombustionModel.H"
#include "fvOptions.H" #include "fvOptions.H"

View File

@ -1,19 +1,19 @@
Info<< "\nConstructing coal cloud" << endl; Info<< "\nConstructing coal cloud" << endl;
coalCloud coalParcels reactingMultiphaseCloud coalParcels
( (
"coalCloud1", "coalCloud1",
g,
rho, rho,
U, U,
g,
slgThermo slgThermo
); );
Info<< "\nConstructing limestone cloud" << endl; Info<< "\nConstructing limestone cloud" << endl;
basicThermoCloud limestoneParcels thermoCloud limestoneParcels
( (
"limestoneCloud1", "limestoneCloud1",
g,
rho, rho,
U, U,
g,
slgThermo slgThermo
); );

View File

@ -9,6 +9,8 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \

View File

@ -63,13 +63,13 @@ const word kinematicCloudName
); );
Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
basicKinematicCollidingCloud kinematicCloud kinematicCollidingCloud kCloud
( (
kinematicCloudName, kinematicCloudName,
g,
rhoInf, rhoInf,
U, U,
mu, mu
g
); );
IOobject Hheader IOobject Hheader

View File

@ -10,6 +10,8 @@ EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \

View File

@ -41,7 +41,7 @@ Description
#include "dynamicFvMesh.H" #include "dynamicFvMesh.H"
#include "singlePhaseTransportModel.H" #include "singlePhaseTransportModel.H"
#include "turbulentTransportModel.H" #include "turbulentTransportModel.H"
#include "basicKinematicCollidingCloud.H" #include "kinematicCollidingCloud.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -76,19 +76,19 @@ int main(int argc, char *argv[])
{ {
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
kinematicCloud.storeGlobalPositions(); kCloud.storeGlobalPositions();
mesh.update(); mesh.update();
U.correctBoundaryConditions(); U.correctBoundaryConditions();
Info<< "Evolving " << kinematicCloud.name() << endl; Info<< "Evolving " << kCloud.name() << endl;
laminarTransport.correct(); laminarTransport.correct();
mu = laminarTransport.nu()*rhoInfValue; mu = laminarTransport.nu()*rhoInfValue;
kinematicCloud.evolve(); kCloud.evolve();
runTime.write(); runTime.write();

View File

@ -40,7 +40,7 @@ Description
#include "fvCFD.H" #include "fvCFD.H"
#include "singlePhaseTransportModel.H" #include "singlePhaseTransportModel.H"
#include "turbulentTransportModel.H" #include "turbulentTransportModel.H"
#include "basicKinematicCollidingCloud.H" #include "kinematicCollidingCloud.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -75,13 +75,13 @@ int main(int argc, char *argv[])
{ {
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
Info<< "Evolving " << kinematicCloud.name() << endl; Info<< "Evolving " << kCloud.name() << endl;
laminarTransport.correct(); laminarTransport.correct();
mu = laminarTransport.nu()*rhoInfValue; mu = laminarTransport.nu()*rhoInfValue;
kinematicCloud.evolve(); kCloud.evolve();
runTime.write(); runTime.write();

View File

@ -8,6 +8,12 @@ EXE_INC = \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \

View File

@ -6,7 +6,7 @@
+ MRF.DDt(U) + MRF.DDt(U)
+ turbulence->divDevReff(U) + turbulence->divDevReff(U)
== ==
parcels.SU(U, true) scalar(1)/rhoInfValue*parcels.SU(U)
+ fvOptions(U) + fvOptions(U)
); );

View File

@ -4,13 +4,12 @@ const word kinematicCloudName
); );
Info<< "Constructing kinematicCloud " << kinematicCloudName << endl; Info<< "Constructing kinematicCloud " << kinematicCloudName << endl;
kinematicCloud parcels
basicKinematicCloud parcels
( (
kinematicCloudName, kinematicCloudName,
g,
rhoInf, rhoInf,
U, U,
muc, muc
g
); );

View File

@ -40,7 +40,7 @@ Description
#include "singlePhaseTransportModel.H" #include "singlePhaseTransportModel.H"
#include "turbulentTransportModel.H" #include "turbulentTransportModel.H"
#include "surfaceFilmModel.H" #include "surfaceFilmModel.H"
#include "basicKinematicCloud.H" #include "kinematicCloud.H"
#include "fvOptions.H" #include "fvOptions.H"
#include "pimpleControl.H" #include "pimpleControl.H"
#include "CorrectPhi.H" #include "CorrectPhi.H"
@ -67,7 +67,6 @@ int main(int argc, char *argv[])
#include "createDyMControls.H" #include "createDyMControls.H"
#include "createFields.H" #include "createFields.H"
#include "createFieldRefs.H" #include "createFieldRefs.H"
#include "createRegionControls.H"
#include "createUfIfPresent.H" #include "createUfIfPresent.H"
turbulence->validate(); turbulence->validate();
@ -95,7 +94,7 @@ int main(int argc, char *argv[])
// Do any mesh changes // Do any mesh changes
mesh.update(); mesh.update();
if (solvePrimaryRegion && mesh.changing()) if (pimple.solveFlow() && mesh.changing())
{ {
MRF.update(); MRF.update();
@ -120,7 +119,7 @@ int main(int argc, char *argv[])
parcels.evolve(); parcels.evolve();
surfaceFilm.evolve(); surfaceFilm.evolve();
if (solvePrimaryRegion) if (pimple.solveFlow())
{ {
// --- PIMPLE loop // --- PIMPLE loop
while (pimple.loop()) while (pimple.loop())

View File

@ -0,0 +1,3 @@
parcelFoam.C
EXE = $(FOAM_USER_APPBIN)/parcelFoam

View File

@ -1,49 +1,48 @@
EXE_INC = \ EXE_INC = \
-I$(FOAM_SOLVERS)/lagrangian/reactingParcelFoam \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/finiteArea/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
-I$(LIB_SRC)/regionModels/regionModel/lnInclude \
-I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude \ -I$(LIB_SRC)/regionFaModels/lnInclude \
-I$(LIB_SRC)/finiteArea/lnInclude \ -I$(LIB_SRC)/faOptions/lnInclude \
-I$(LIB_SRC)/faOptions/lnInclude -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude
LIB_LIBS = \
EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \
-lfvOptions \
-lmeshTools \ -lmeshTools \
-lsampling \
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lincompressibleTransportModels \
-ldynamicMesh \
-ldynamicFvMesh \
-ltopoChangerFvMesh \
-latmosphericModels \
-lregionModels \
-lsurfaceFilmModels \
-lsurfaceFilmDerivedFvPatchFields \
-llagrangian \ -llagrangian \
-llagrangianIntermediate \ -llagrangianIntermediate \
-llagrangianTurbulence \ -llagrangianTurbulence \
-ldistributionModels \
-lspecie \
-lcompressibleTransportModels \
-lfluidThermophysicalModels \
-lthermophysicalProperties \
-lreactionThermophysicalModels \
-lSLGThermo \
-lradiationModels \
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lcompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lregionModels \
-lsurfaceFilmModels \
-ldynamicMesh \
-ldynamicFvMesh \
-lregionFaModels \ -lregionFaModels \
-lfiniteArea -lfiniteArea \
-lfaOptions

View File

@ -0,0 +1,22 @@
MRF.correctBoundaryVelocity(U);
fvVectorMatrix UEqn
(
fvm::ddt(U) + fvm::div(phi, U)
+ MRF.DDt(U)
+ turbulence->divDevReff(U)
==
scalar(1)/rhoInfValue*parcels.SU(U)
+ fvOptions(U)
);
UEqn.relax();
fvOptions.constrain(UEqn);
if (pimple.momentumPredictor())
{
solve(UEqn == -fvc::grad(p));
fvOptions.correct(U);
}

View File

@ -0,0 +1,2 @@
auto parcels = parcelCloudModelList(g, rhoInf, U, muc);

View File

@ -0,0 +1 @@
regionModels::surfaceFilmModel& surfaceFilm = tsurfaceFilm();

View File

@ -0,0 +1,85 @@
#include "readGravitationalAcceleration.H"
Info<< "Reading field p\n" << endl;
volScalarField p
(
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "\nReading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
#include "createPhi.H"
singlePhaseTransportModel laminarTransport(U, phi);
dimensionedScalar rhoInfValue
(
"rhoInf",
dimDensity,
laminarTransport
);
volScalarField rhoInf
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
rhoInfValue
);
volScalarField muc
(
IOobject
(
"muc",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
rhoInf*laminarTransport.nu()
);
Info<< "Creating turbulence model\n" << endl;
autoPtr<incompressible::turbulenceModel> turbulence
(
incompressible::turbulenceModel::New(U, phi, laminarTransport)
);
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
mesh.setFluxRequired(p.name());
#include "createMRF.H"
#include "createClouds.H"
#include "createSurfaceFilmModel.H"
#include "createFvOptions.H"

View File

@ -0,0 +1,58 @@
volScalarField rAU(1.0/UEqn.A());
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phiHbyA("phiHbyA", fvc::flux(HbyA));
if (pimple.ddtCorr())
{
phiHbyA += MRF.zeroFilter(fvc::interpolate(rAU)*fvc::ddtCorr(U, phi, Uf));
}
MRF.makeRelative(phiHbyA);
if (p.needReference())
{
fvc::makeRelative(phiHbyA, U);
adjustPhi(phiHbyA, U, p);
fvc::makeAbsolute(phiHbyA, U);
}
// Update the pressure BCs to ensure flux consistency
constrainPressure(p, U, phiHbyA, rAU, MRF);
// Non-orthogonal pressure corrector loop
while (pimple.correctNonOrthogonal())
{
fvScalarMatrix pEqn
(
fvm::laplacian(rAU, p)
==
fvc::div(phiHbyA)
);
pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter())
{
phi = phiHbyA - pEqn.flux();
}
}
#include "continuityErrs.H"
p.relax();
U = HbyA - rAU*fvc::grad(p);
U.correctBoundaryConditions();
fvOptions.correct(U);
// Correct rhoUf if the mesh is moving
fvc::correctUf(Uf, U, phi);
// Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, U);

View File

@ -0,0 +1,154 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
parcelFoam
Group
grpLagrangianSolvers
Description
Transient solver for incompressible, turbulent flow with kinematic,
particle cloud, and surface film modelling.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "dynamicFvMesh.H"
#include "singlePhaseTransportModel.H"
#include "turbulentTransportModel.H"
#include "surfaceFilmModel.H"
#include "parcelCloudModelList.H"
#include "fvOptions.H"
#include "pimpleControl.H"
#include "CorrectPhi.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::addNote
(
"Transient solver for incompressible, turbulent flow"
" with kinematic particle clouds"
" and surface film modelling."
);
#define CREATE_MESH createMeshesPostProcess.H
#include "postProcess.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createDynamicFvMesh.H"
#include "initContinuityErrs.H"
#include "createDyMControls.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "createUfIfPresent.H"
turbulence->validate();
#include "CourantNo.H"
#include "setInitialDeltaT.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.run())
{
#include "readDyMControls.H"
#include "CourantNo.H"
#include "setMultiRegionDeltaT.H"
++runTime;
Info<< "Time = " << runTime.timeName() << nl << endl;
// Store the particle positions
parcels.storeGlobalPositions();
// Do any mesh changes
mesh.update();
if (pimple.solveFlow() && mesh.changing())
{
MRF.update();
if (correctPhi)
{
// Calculate absolute flux
// from the mapped surface velocity
phi = mesh.Sf() & Uf();
#include "../../incompressible/pimpleFoam/correctPhi.H"
// Make the fluxes relative to the mesh-motion
fvc::makeRelative(phi, U);
}
if (checkMeshCourantNo)
{
#include "meshCourantNo.H"
}
}
parcels.evolve();
surfaceFilm.evolve();
if (pimple.solveFlow())
{
// --- PIMPLE loop
while (pimple.loop())
{
#include "UEqn.H"
// --- Pressure corrector loop
while (pimple.correct())
{
#include "pEqn.H"
}
if (pimple.turbCorr())
{
laminarTransport.correct();
turbulence->correct();
}
}
}
runTime.write();
runTime.printExecutionTime(Info);
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -41,11 +41,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }

View File

@ -1,9 +1,9 @@
Info<< "\nConstructing reacting cloud" << endl; Info<< "\nConstructing reacting cloud" << endl;
basicReactingTypeCloud parcels reactingTypeCloud parcels
( (
"reactingCloud1", "reactingCloud1",
g,
rho, rho,
U, U,
g,
slgThermo slgThermo
); );

View File

@ -9,7 +9,7 @@ IOobject io
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
); );
if (io.typeHeaderOk<IOdictionary>()) if (io.typeHeaderOk<IOdictionary>())
@ -32,4 +32,4 @@ if (io.typeHeaderOk<IOdictionary>())
); );
} }
// ************************************************************************* //

View File

@ -37,8 +37,8 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#define CLOUD_BASE_TYPE HeterogeneousReacting #define CLOUD_BASE_TYPE heterogeneousReacting
#define CLOUD_BASE_TYPE_NAME "HeterogeneousReacting" #define CLOUD_BASE_TYPE_NAME "heterogeneousReacting"
#include "reactingParcelFoam.C" #include "reactingParcelFoam.C"

View File

@ -53,12 +53,12 @@ Description
#include "cloudMacros.H" #include "cloudMacros.H"
#ifndef CLOUD_BASE_TYPE #ifndef CLOUD_BASE_TYPE
#define CLOUD_BASE_TYPE ReactingMultiphase #define CLOUD_BASE_TYPE reactingMultiphase
#define CLOUD_BASE_TYPE_NAME "reacting" #define CLOUD_BASE_TYPE_NAME "reacting"
#endif #endif
#include CLOUD_INCLUDE_FILE(CLOUD_BASE_TYPE) #include CLOUD_INCLUDE_FILE(CLOUD_BASE_TYPE)
#define basicReactingTypeCloud CLOUD_TYPE(CLOUD_BASE_TYPE) #define reactingTypeCloud CLOUD_TYPE(CLOUD_BASE_TYPE)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -81,7 +81,6 @@ int main(int argc, char *argv[])
#include "createDyMControls.H" #include "createDyMControls.H"
#include "createFields.H" #include "createFields.H"
#include "createFieldRefs.H" #include "createFieldRefs.H"
#include "createRegionControls.H"
#include "initContinuityErrs.H" #include "initContinuityErrs.H"
#include "createRhoUfIfPresent.H" #include "createRhoUfIfPresent.H"
@ -105,7 +104,7 @@ int main(int argc, char *argv[])
// so that it can be mapped and used in correctPhi // so that it can be mapped and used in correctPhi
// to ensure the corrected phi has the same divergence // to ensure the corrected phi has the same divergence
autoPtr<volScalarField> divrhoU; autoPtr<volScalarField> divrhoU;
if (solvePrimaryRegion && correctPhi) if (pimple.solveFlow() && correctPhi)
{ {
divrhoU.reset divrhoU.reset
( (
@ -133,7 +132,7 @@ int main(int argc, char *argv[])
// Store momentum to set rhoUf for introduced faces. // Store momentum to set rhoUf for introduced faces.
autoPtr<volVectorField> rhoU; autoPtr<volVectorField> rhoU;
if (solvePrimaryRegion && rhoUf.valid()) if (pimple.solveFlow() && rhoUf.valid())
{ {
rhoU.reset(new volVectorField("rhoU", rho*U)); rhoU.reset(new volVectorField("rhoU", rho*U));
} }
@ -144,7 +143,7 @@ int main(int argc, char *argv[])
// Do any mesh changes // Do any mesh changes
mesh.update(); mesh.update();
if (solvePrimaryRegion && mesh.changing()) if (pimple.solveFlow() && mesh.changing())
{ {
gh = (g & mesh.C()) - ghRef; gh = (g & mesh.C()) - ghRef;
ghf = (g & mesh.Cf()) - ghRef; ghf = (g & mesh.Cf()) - ghRef;
@ -172,7 +171,7 @@ int main(int argc, char *argv[])
parcels.evolve(); parcels.evolve();
surfaceFilm.evolve(); surfaceFilm.evolve();
if (solvePrimaryRegion) if (pimple.solveFlow())
{ {
if (pimple.nCorrPIMPLE() <= 1) if (pimple.nCorrPIMPLE() <= 1)
{ {

View File

@ -7,7 +7,6 @@ EXE_INC = \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \
-I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels/compressible/lnInclude \

View File

@ -38,11 +38,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }

View File

@ -1,9 +1,9 @@
Info<< "\nConstructing " << CLOUD_BASE_TYPE_NAME << " cloud" << endl; Info<< "\nConstructing " << CLOUD_BASE_TYPE_NAME << " cloud" << endl;
basicReactingTypeCloud parcels reactingTypeCloud parcels
( (
word(CLOUD_BASE_TYPE_NAME) & "Cloud1", word(CLOUD_BASE_TYPE_NAME) & "Cloud1",
g,
rho, rho,
U, U,
g,
slgThermo slgThermo
); );

View File

@ -45,13 +45,13 @@ Description
#include "cloudMacros.H" #include "cloudMacros.H"
#ifndef CLOUD_BASE_TYPE #ifndef CLOUD_BASE_TYPE
#define CLOUD_BASE_TYPE ReactingMultiphase #define CLOUD_BASE_TYPE reactingMultiphase
//#define CLOUD_BASE_TYPE_NAME "reactingMultiphase" Backwards compat //#define CLOUD_BASE_TYPE_NAME "reactingMultiphase" Backwards compat
#define CLOUD_BASE_TYPE_NAME "reacting" #define CLOUD_BASE_TYPE_NAME "reacting"
#endif #endif
#include CLOUD_INCLUDE_FILE(CLOUD_BASE_TYPE) #include CLOUD_INCLUDE_FILE(CLOUD_BASE_TYPE)
#define basicReactingTypeCloud CLOUD_TYPE(CLOUD_BASE_TYPE) #define reactingTypeCloud CLOUD_TYPE(CLOUD_BASE_TYPE)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -0,0 +1,41 @@
{
volScalarField& he = thermo.he();
fvScalarMatrix EEqn
(
fvm::ddt(rho, he) + mvConvection->fvmDiv(phi, he)
+ fvc::ddt(rho, K) + fvc::div(phi, K)
+ (
he.name() == "e"
? fvc::div
(
fvc::absolute(phi/fvc::interpolate(rho), U),
p,
"div(phiv,p)"
)
: -dpdt
)
- fvm::laplacian(turbulence->alphaEff(), he)
==
rho*(U&g)
+ parcels.Sh(he)
+ surfaceFilm.Sh()
+ radiation->Sh(thermo, he)
+ Qdot
+ fvOptions(rho, he)
);
EEqn.relax();
fvOptions.constrain(EEqn);
EEqn.solve();
fvOptions.correct(he);
thermo.correct();
radiation->correct();
Info<< "T gas min/max = " << min(T).value() << ", "
<< max(T).value() << endl;
}

View File

@ -0,0 +1,3 @@
rhoParcelFoam.C
EXE = $(FOAM_USER_APPBIN)/rhoParcelFoam

View File

@ -1,52 +1,58 @@
EXE_INC = \ EXE_INC = \
-I../reactingParcelFoam \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/surfMesh/lnInclude \ -I$(LIB_SRC)/finiteArea/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I${LIB_SRC}/sampling/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
-I$(LIB_SRC)/lagrangian/turbulence/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/thermophysicalProperties/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
-I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude \ -I$(LIB_SRC)/regionFaModels/lnInclude \
-I$(LIB_SRC)/finiteArea/lnInclude \ -I$(LIB_SRC)/faOptions/lnInclude \
-I$(LIB_SRC)/faOptions/lnInclude -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/ODE/lnInclude \
-I$(LIB_SRC)/combustionModels/lnInclude \
-I$(FOAM_SOLVERS)/combustion/reactingFoam
LIB_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \
-lsurfMesh \ -lfvOptions \
-lmeshTools \ -lmeshTools \
-llagrangian \ -ldynamicMesh \
-llagrangianIntermediate \ -ldynamicFvMesh \
-llagrangianTurbulence \ -lsampling \
-ldistributionModels \ -lturbulenceModels \
-lcompressibleTurbulenceModels \
-lthermoTools \
-lspecie \ -lspecie \
-lcompressibleTransportModels \ -lcompressibleTransportModels \
-lfluidThermophysicalModels \ -lfluidThermophysicalModels \
-lthermophysicalProperties \
-lreactionThermophysicalModels \ -lreactionThermophysicalModels \
-lthermophysicalProperties \
-lSLGThermo \ -lSLGThermo \
-lradiationModels \ -lchemistryModel \
-lturbulenceModels \
-lincompressibleTurbulenceModels \
-lcompressibleTurbulenceModels \
-lincompressibleTransportModels \
-lregionModels \ -lregionModels \
-lradiationModels \
-lsurfaceFilmModels \ -lsurfaceFilmModels \
-ldynamicMesh \ -lsurfaceFilmDerivedFvPatchFields \
-ldynamicFvMesh \ -llagrangian \
-llagrangianIntermediate \
-llagrangianTurbulence \
-lODE \
-lcombustionModels \
-lregionFaModels \ -lregionFaModels \
-lfiniteArea -lfiniteArea \
-lfaOptions

View File

@ -0,0 +1,34 @@
MRF.correctBoundaryVelocity(U);
fvVectorMatrix UEqn
(
fvm::ddt(rho, U) + fvm::div(phi, U)
+ MRF.DDt(rho, U)
+ turbulence->divDevRhoReff(U)
==
parcels.SU(U)
+ fvOptions(rho, U)
);
UEqn.relax();
fvOptions.constrain(UEqn);
if (pimple.momentumPredictor())
{
solve
(
UEqn
==
fvc::reconstruct
(
(
- ghf*fvc::snGrad(rho)
- fvc::snGrad(p_rgh)
)*mesh.magSf()
)
);
fvOptions.correct(U);
K = 0.5*magSqr(U);
}

View File

@ -0,0 +1,51 @@
tmp<fv::convectionScheme<scalar>> mvConvection
(
fv::convectionScheme<scalar>::New
(
mesh,
fields,
phi,
mesh.divScheme("div(phi,Yi_h)")
)
);
{
combustion->correct();
Qdot = combustion->Qdot();
volScalarField Yt(0.0*Y[0]);
forAll(Y, i)
{
if (i != inertIndex && composition.active(i))
{
volScalarField& Yi = Y[i];
fvScalarMatrix YEqn
(
fvm::ddt(rho, Yi)
+ mvConvection->fvmDiv(phi, Yi)
- fvm::laplacian(turbulence->muEff(), Yi)
==
parcels.SYi(i, Yi)
+ fvOptions(rho, Yi)
+ combustion->R(Yi)
+ surfaceFilm.Srho(i)
);
YEqn.relax();
fvOptions.constrain(YEqn);
YEqn.solve(mesh.solver("Yi"));
fvOptions.correct(Yi);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].max(0.0);
}

View File

@ -0,0 +1,3 @@
Info<< "\nConstructing cloud" << endl;
auto parcels = parcelCloudModelList(g, rho, U, slgThermo);

View File

@ -0,0 +1,5 @@
const volScalarField& T = thermo.T();
const volScalarField& psi = thermo.psi();
const label inertIndex(composition.species().find(inertSpecie));
regionModels::surfaceFilmModel& surfaceFilm = tsurfaceFilm();

View File

@ -0,0 +1,132 @@
#include "createRDeltaT.H"
Info<< "Reading thermophysical properties\n" << endl;
autoPtr<rhoReactionThermo> pThermo(rhoReactionThermo::New(mesh));
rhoReactionThermo& thermo = pThermo();
thermo.validate(args.executable(), "h", "e");
SLGThermo slgThermo(mesh, thermo);
basicSpecieMixture& composition = thermo.composition();
PtrList<volScalarField>& Y = composition.Y();
const word inertSpecie(thermo.get<word>("inertSpecie"));
if
(
!composition.species().found(inertSpecie)
&& composition.species().size() > 0
)
{
FatalIOErrorIn(args.executable().c_str(), thermo)
<< "Inert specie " << inertSpecie << " not found in available species "
<< composition.species()
<< exit(FatalIOError);
}
Info<< "Creating field rho\n" << endl;
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
thermo.rho()
);
volScalarField& p = thermo.p();
Info<< "\nReading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
#include "compressibleCreatePhi.H"
Info<< "Creating turbulence model\n" << endl;
autoPtr<compressible::turbulenceModel> turbulence
(
compressible::turbulenceModel::New
(
rho,
U,
phi,
thermo
)
);
Info<< "Creating combustion model\n" << endl;
autoPtr<CombustionModel<rhoReactionThermo>> combustion
(
CombustionModel<rhoReactionThermo>::New(thermo, turbulence())
);
#include "readGravitationalAcceleration.H"
#include "readhRef.H"
#include "gh.H"
volScalarField p_rgh
(
IOobject
(
"p_rgh",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
// Force p_rgh to be consistent with p
p_rgh = p - rho*gh;
pressureControl pressureControl(p, rho, pimple.dict(), false);
mesh.setFluxRequired(p_rgh.name());
Info<< "Creating multi-variate interpolation scheme\n" << endl;
multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
forAll(Y, i)
{
fields.add(Y[i]);
}
fields.add(thermo.he());
volScalarField Qdot
(
IOobject
(
"Qdot",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(dimEnergy/dimVolume/dimTime, Zero)
);
#include "createDpdt.H"
#include "createK.H"
#include "createMRF.H"
#include "createRadiationModel.H"
#include "createClouds.H"
#include "createSurfaceFilmModel.H"
#include "createFvOptions.H"

View File

@ -0,0 +1,35 @@
#include "createMesh.H"
dictionary filmDict;
IOobject io
(
"surfaceFilmProperties",
mesh.time().constant(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
);
if (io.typeHeaderOk<IOdictionary>())
{
IOdictionary propDict(io);
filmDict = std::move(propDict);
const word filmRegionName = filmDict.get<word>("region");
fvMesh filmMesh
(
IOobject
(
filmRegionName,
runTime.timeName(),
runTime,
IOobject::MUST_READ
)
);
}

View File

@ -0,0 +1,6 @@
Info<< "\nConstructing surface film model" << endl;
autoPtr<regionModels::surfaceFilmModel> tsurfaceFilm
(
regionModels::surfaceFilmModel::New(mesh, g)
);

View File

@ -0,0 +1,96 @@
if (!pimple.SIMPLErho())
{
rho = thermo.rho();
}
// Thermodynamic density needs to be updated by psi*d(p) after the
// pressure solution
const volScalarField psip0(psi*p);
volScalarField rAU(1.0/UEqn.A());
surfaceScalarField rhorAUf("rhorAUf", fvc::interpolate(rho*rAU));
volVectorField HbyA(constrainHbyA(rAU*UEqn.H(), U, p));
surfaceScalarField phig(-rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf());
surfaceScalarField phiHbyA
(
"phiHbyA",
(
fvc::flux(rho*HbyA)
+ MRF.zeroFilter(rhorAUf*fvc::ddtCorr(rho, U, phi))
)
+ phig
);
fvc::makeRelative(phiHbyA, rho, U);
MRF.makeRelative(fvc::interpolate(rho), phiHbyA);
// Update the pressure BCs to ensure flux consistency
constrainPressure(p_rgh, rho, U, phiHbyA, rhorAUf, MRF);
fvScalarMatrix p_rghDDtEqn
(
fvc::ddt(rho) + psi*correction(fvm::ddt(p_rgh))
+ fvc::div(phiHbyA)
==
parcels.Srho()
+ surfaceFilm.Srho()
+ fvOptions(psi, p_rgh, rho.name())
);
while (pimple.correctNonOrthogonal())
{
fvScalarMatrix p_rghEqn
(
p_rghDDtEqn
- fvm::laplacian(rhorAUf, p_rgh)
);
p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter())
{
phi = phiHbyA + p_rghEqn.flux();
// Explicitly relax pressure for momentum corrector
p_rgh.relax();
U = HbyA + rAU*fvc::reconstruct((p_rghEqn.flux() + phig)/rhorAUf);
U.correctBoundaryConditions();
fvOptions.correct(U);
K = 0.5*magSqr(U);
}
}
p = p_rgh + rho*gh;
// Thermodynamic density update
thermo.correctRho(psi*p - psip0);
#include "rhoEqn.H"
#include "compressibleContinuityErrs.H"
if (pressureControl.limit(p))
{
p.correctBoundaryConditions();
rho = thermo.rho();
p_rgh = p - rho*gh;
}
else if (pimple.SIMPLErho())
{
rho = thermo.rho();
}
// Correct rhoUf if the mesh is moving
fvc::correctRhoUf(rhoUf, rho, U, phi);
if (thermo.dpdt())
{
dpdt = fvc::ddt(p);
if (mesh.moving())
{
dpdt -= fvc::div(fvc::meshPhi(rho, U), p);
}
}

View File

@ -0,0 +1,50 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can 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/>.
Global
rhoEqn
Description
Solve the continuity for density.
\*---------------------------------------------------------------------------*/
{
fvScalarMatrix rhoEqn
(
fvm::ddt(rho)
+ fvc::div(phi)
==
parcels.Srho(rho)
+ surfaceFilm.Srho()
+ fvOptions(rho)
);
rhoEqn.solve();
fvOptions.correct(rho);
}
// ************************************************************************* //

Some files were not shown because too many files have changed in this diff Show More