42 #define PhiDimensionErrorInFunction(phi) \ 43 FatalErrorInFunction \ 44 << "Incompatible dimensions for " << phi.name() << ": " \ 45 << phi.dimensions() << nl \ 46 << "Dimensions should be " << dimMass/dimTime << " or " \ 47 << dimVolume/dimTime << exit(FatalError) 53 namespace functionObjects
78 wordList PhiPatchFieldTypes(mesh_.boundaryMesh().size());
81 PhiPatchFieldTypes[
patchi] =
82 p.boundaryField()[
patchi].fixesValue()
94 mesh_.time().timeName(),
105 mesh_.schemes().setFluxRequired(PhiPtr_->name());
113 Foam::functionObjects::phaseScalarTransport::alphaPhi()
123 << alphaPhiName_ <<
" was not found, so generating it" <<
endl;
131 tmp<surfaceScalarField> tAlphaPhi
145 const word laplacianScheme =
"laplacian(" + pName_ +
")";
151 auto writeDDt = [&](
const label i)
164 Info<<
type() <<
": Writing " << DDtAlpha.name() <<
endl;
167 if (debug && mesh_.time().writeTime())
173 nonOrthogonalSolutionControl& control =
174 mesh_.lookupObjectRef<nonOrthogonalSolutionControl>
176 solutionControl::typeName
182 while (control.correctNonOrthogonal())
191 PhiEqn.solve(pName_);
193 if (control.finalNonOrthogonalIter())
195 alphaPhi += PhiEqn.flux();
204 while (control.correctNonOrthogonal())
213 PhiEqn.solve(pName_);
215 if (control.finalNonOrthogonalIter())
217 alphaPhi += PhiEqn.flux();
227 if (debug && mesh_.time().writeTime())
237 Foam::functionObjects::phaseScalarTransport::D
252 const word& nameNoPhase = momentumTransportModel::typeName;
275 return alphaD_*turbulence.
nu() + alphaDt_*turbulence.nut();
289 fieldName_(dict.
lookup(
"field")),
292 residualAlpha_(rootSmall),
298 mesh_.time().timeName(),
311 <<
"Field \"" << fieldName_ <<
"\" does not have a phase extension " 312 <<
"in its name. If it is associated with \"phaseA\" then it " 313 <<
"should be named \"" << fieldName_ <<
".phaseA\"." 361 writeAlphaField_ = dict.
lookupOrDefault<
bool>(
"writeAlphaField",
true);
369 return wordList{alphaName_, alphaPhiName_, phiName_, pName_};
388 const word divScheme =
389 "div(" + alphaPhi.
name() +
"," + schemesField_ +
")";
390 const word laplacianScheme =
391 "laplacian(" + D.
name() +
"," + schemesField_ +
")";
394 const scalar relaxCoeff =
395 mesh_.solution().relaxEquation(schemesField_)
396 ? mesh_.solution().equationRelaxationFactor(schemesField_)
408 for (
int i=0; i<=nCorr_; i++)
421 fvModels.source(alpha, s_)
426 fieldEqn.
relax(relaxCoeff);
428 fieldEqn.solve(schemesField_);
437 for (
int i=0; i<=nCorr_; i++)
450 fvModels.source(alpha, rho, s_)
455 fieldEqn.
relax(relaxCoeff);
457 fieldEqn.solve(schemesField_);
467 if (writeAlphaField_)
469 if (!alphaSPtr_.valid())
478 +
word(toupper(fieldName_[0]))
479 + fieldName_(1, fieldName_.size() - 1),
480 mesh_.time().timeName(),
491 alphaSPtr_() = alpha*s_;
495 if (alphaSPtr_.valid())
497 alphaSPtr_().
clear();
const dimensionSet dimViscosity
virtual tmp< volScalarField > nu() const
Return the laminar viscosity.
fvMatrix< scalar > fvScalarMatrix
#define forAll(list, i)
Loop across all elements in list.
virtual Ostream & write(const char)=0
Write character.
FvWallInfoData< WallInfo, label > label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
const word & name() const
Return name.
errorManipArg< error, int > exit(error &err, const int errNo=1)
A list of keyword definitions, which are a keyword followed by any number of values (e...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
static const char *const typeName
tmp< GeometricField< Type, fvPatchField, volMesh > > div(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
addToRunTimeSelectionTable(functionObject, Qdot, dictionary)
static tmp< GeometricField< scalar, fvPatchField, volMesh > > New(const word &name, const Internal &, const PtrList< fvPatchField< scalar >> &)
Return a temporary field constructed from name,.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Calculate the matrix for the laplacian of the field.
word member() const
Return member (name without the extension)
word group() const
Return group (extension part of name)
virtual bool read(const dictionary &)
Read the settings from the given dictionary.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Macros for easy insertion into run-time selection tables.
const dimensionSet dimLength
tmp< GeometricField< Type, fvPatchField, volMesh > > ddt(const dimensioned< Type > dt, const fvMesh &mesh)
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Calculate the first temporal derivative.
compressibleMomentumTransportModel momentumTransportModel
const dimensionSet dimTime
const dimensionSet & dimensions() const
Return dimensions.
virtual bool read(const dictionary &)
Read optional controls.
bool read(const char *, int32_t &)
virtual bool write()
Do nothing. The field is registered and written automatically.
Foam::fvConstraints & fvConstraints
void clear()
Clear the list, i.e. set size to zero.
A class for handling words, derived from string.
static word groupName(Name name, const word &group)
virtual wordList fields() const
Return the list of fields required.
#define PhiDimensionErrorInFunction(phi)
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Calculate the matrix for the first temporal derivative.
bool readIfPresent(const word &, T &, bool recursive=false, bool patternMatch=true) const
Find an entry if present, and assign to T.
static const word null
An empty word.
surfaceScalarField alphaPhi(phi.name()+alpha1.name(), fvc::flux(phi, alpha1, alphaScheme))
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
virtual ~phaseScalarTransport()
Destructor.
Calculate the divergence of the given field.
Info<< "Reading field U\"<< endl;volVectorField U(IOobject("U", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE), mesh);volScalarField rho(IOobject("rho", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), thermo.rho());volVectorField rhoU(IOobject("rhoU", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE), rho *U);volScalarField rhoE(IOobject("rhoE", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE), rho *(e+0.5 *magSqr(U)));surfaceScalarField pos(IOobject("pos", runTime.timeName(), mesh), mesh, dimensionedScalar(dimless, 1.0));surfaceScalarField neg(IOobject("neg", runTime.timeName(), mesh), mesh, dimensionedScalar(dimless, -1.0));surfaceScalarField phi("phi", fvc::flux(rhoU));Info<< "Creating turbulence model\"<< endl;autoPtr< compressible::momentumTransportModel > turbulence(compressible::momentumTransportModel::New(rho, U, phi, thermo))
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
static autoPtr< dictionary > New(Istream &)
Construct top-level dictionary on freestore from Istream.
void relax(const scalar alpha)
Relax matrix (for steady-state solution).
const dimensionSet dimMass
word name(const complex &)
Return a string representation of a complex.
defineTypeNameAndDebug(Qdot, 0)
static tmp< GeometricField< Type, fvsPatchField, surfaceMesh > > interpolate(const GeometricField< Type, fvPatchField, volMesh > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
bool constrain(fvMatrix< Type > &eqn) const
Apply constraints to an equation.
Foam::fvModels & fvModels
Calculate the matrix for the divergence of the given field and flux.
List< word > wordList
A List of words.
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
Finite volume constraints.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
const dimensionSet dimVolume
Specialisation of Foam::functionObject for an Foam::fvMesh, providing a reference to the Foam::fvMesh...
A class for managing temporary objects.
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
virtual bool execute()
Solve for the evolution of the field.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
phaseScalarTransport(const word &name, const Time &runTime, const dictionary &dict)
Construct from Time and dictionary.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.