mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: icoReactingMultiPhaseInterFoam: thermo sharing T
This commit is contained in:
@ -26,6 +26,22 @@
|
|||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Note: construct T to be around before the thermos. The thermos will
|
||||||
|
// not update T.
|
||||||
|
Info<< "Reading field T\n" << endl;
|
||||||
|
volScalarField T
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"T",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
Info<< "Calculating field g.h\n" << endl;
|
Info<< "Calculating field g.h\n" << endl;
|
||||||
#include "readGravitationalAcceleration.H"
|
#include "readGravitationalAcceleration.H"
|
||||||
@ -45,6 +61,7 @@
|
|||||||
p_rgh
|
p_rgh
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
Info<< "Creating multiphaseSystem\n" << endl;
|
Info<< "Creating multiphaseSystem\n" << endl;
|
||||||
autoPtr<multiphaseSystem> fluidPtr = multiphaseSystem::New(mesh);
|
autoPtr<multiphaseSystem> fluidPtr = multiphaseSystem::New(mesh);
|
||||||
|
|
||||||
@ -57,8 +74,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
volScalarField& T = fluid.T();
|
|
||||||
|
|
||||||
// Need to store rho for ddt(rho, U)
|
// Need to store rho for ddt(rho, U)
|
||||||
volScalarField rho
|
volScalarField rho
|
||||||
(
|
(
|
||||||
|
|||||||
@ -126,10 +126,16 @@ Foam::wordList Foam::basicThermo::heBoundaryTypes()
|
|||||||
Foam::volScalarField& Foam::basicThermo::lookupOrConstruct
|
Foam::volScalarField& Foam::basicThermo::lookupOrConstruct
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const fvMesh& mesh,
|
||||||
const word& name
|
const word& name,
|
||||||
) const
|
bool& isOwner
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (!mesh.objectRegistry::foundObject<volScalarField>(name))
|
const volScalarField* p =
|
||||||
|
mesh.objectRegistry::lookupObjectPtr<volScalarField>(name);
|
||||||
|
|
||||||
|
isOwner = !p;
|
||||||
|
|
||||||
|
if (!p)
|
||||||
{
|
{
|
||||||
volScalarField* fPtr
|
volScalarField* fPtr
|
||||||
(
|
(
|
||||||
@ -149,12 +155,12 @@ Foam::volScalarField& Foam::basicThermo::lookupOrConstruct
|
|||||||
|
|
||||||
// Transfer ownership of this object to the objectRegistry
|
// Transfer ownership of this object to the objectRegistry
|
||||||
fPtr->store(fPtr);
|
fPtr->store(fPtr);
|
||||||
|
return *fPtr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return const_cast<volScalarField&>(*p);
|
||||||
}
|
}
|
||||||
|
|
||||||
return const_cast<volScalarField&>
|
|
||||||
(
|
|
||||||
mesh.objectRegistry::lookupObject<volScalarField>(name)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -172,12 +178,28 @@ Foam::basicThermo::basicThermo
|
|||||||
const fvMesh& mesh,
|
const fvMesh& mesh,
|
||||||
const word& phaseName
|
const word& phaseName
|
||||||
)
|
)
|
||||||
|
:
|
||||||
|
basicThermo
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
phaseName,
|
||||||
|
phasePropertyName(dictName, phaseName)
|
||||||
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::basicThermo::basicThermo
|
||||||
|
(
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const word& phaseName,
|
||||||
|
const word& dictionaryName
|
||||||
|
)
|
||||||
:
|
:
|
||||||
IOdictionary
|
IOdictionary
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
phasePropertyName(dictName, phaseName),
|
dictionaryName,
|
||||||
mesh.time().constant(),
|
mesh.time().constant(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::MUST_READ_IF_MODIFIED,
|
IOobject::MUST_READ_IF_MODIFIED,
|
||||||
@ -187,9 +209,10 @@ Foam::basicThermo::basicThermo
|
|||||||
|
|
||||||
phaseName_(phaseName),
|
phaseName_(phaseName),
|
||||||
|
|
||||||
p_(lookupOrConstruct(mesh, "p")),
|
p_(lookupOrConstruct(mesh, "p", pOwner_)),
|
||||||
|
|
||||||
T_(lookupOrConstruct(mesh, phasePropertyName("T"))),
|
T_(lookupOrConstruct(mesh, phasePropertyName("T"), TOwner_)),
|
||||||
|
TOwner_(lookupOrDefault<Switch>("updateT", TOwner_)),
|
||||||
|
|
||||||
alpha_
|
alpha_
|
||||||
(
|
(
|
||||||
@ -210,10 +233,17 @@ Foam::basicThermo::basicThermo
|
|||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
dpdt_(lookupOrDefault<Switch>("dpdt", true)),
|
dpdt_(lookupOrDefault<Switch>("dpdt", true))
|
||||||
|
{
|
||||||
tempBased_(lookupOrDefault<Switch>("tempBased", false))
|
if (debug)
|
||||||
{}
|
{
|
||||||
|
Pout<< "Constructed thermo : mesh:" << mesh.name()
|
||||||
|
<< " phase:" << phaseName
|
||||||
|
<< " dictionary:" << dictionaryName
|
||||||
|
<< " alphaName:" << alpha_.name()
|
||||||
|
<< " updateT:" << TOwner_ << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::basicThermo::basicThermo
|
Foam::basicThermo::basicThermo
|
||||||
@ -238,9 +268,10 @@ Foam::basicThermo::basicThermo
|
|||||||
|
|
||||||
phaseName_(phaseName),
|
phaseName_(phaseName),
|
||||||
|
|
||||||
p_(lookupOrConstruct(mesh, "p")),
|
p_(lookupOrConstruct(mesh, "p", pOwner_)),
|
||||||
|
|
||||||
T_(lookupOrConstruct(mesh, phasePropertyName("T"))),
|
T_(lookupOrConstruct(mesh, phasePropertyName("T"), TOwner_)),
|
||||||
|
TOwner_(lookupOrDefault<Switch>("updateT", TOwner_)),
|
||||||
|
|
||||||
alpha_
|
alpha_
|
||||||
(
|
(
|
||||||
@ -259,58 +290,7 @@ Foam::basicThermo::basicThermo
|
|||||||
dimensionSet(1, -1, -1, 0, 0),
|
dimensionSet(1, -1, -1, 0, 0),
|
||||||
Zero
|
Zero
|
||||||
)
|
)
|
||||||
),
|
|
||||||
|
|
||||||
tempBased_(lookupOrDefault<Switch>("tempBased", false))
|
|
||||||
{}
|
|
||||||
|
|
||||||
Foam::basicThermo::basicThermo
|
|
||||||
(
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const word& phaseName,
|
|
||||||
const word& dictionaryName
|
|
||||||
)
|
)
|
||||||
:
|
|
||||||
IOdictionary
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
dictionaryName,
|
|
||||||
mesh.time().constant(),
|
|
||||||
mesh,
|
|
||||||
IOobject::MUST_READ_IF_MODIFIED,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
phaseName_(phaseName),
|
|
||||||
|
|
||||||
p_(lookupOrConstruct(mesh, "p")),
|
|
||||||
|
|
||||||
T_(lookupOrConstruct(mesh, "T")),
|
|
||||||
|
|
||||||
alpha_
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"thermo:alpha",
|
|
||||||
mesh.time().timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::READ_IF_PRESENT,
|
|
||||||
IOobject::NO_WRITE
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar
|
|
||||||
(
|
|
||||||
"zero",
|
|
||||||
dimensionSet(1, -1, -1, 0, 0),
|
|
||||||
Zero
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
dpdt_(lookupOrDefault<Switch>("dpdt", true)),
|
|
||||||
|
|
||||||
tempBased_(lookupOrDefault<Switch>("tempBased", true))
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,14 @@ Class
|
|||||||
Description
|
Description
|
||||||
Abstract base-class for fluid and solid thermodynamic properties
|
Abstract base-class for fluid and solid thermodynamic properties
|
||||||
|
|
||||||
|
An important concept is that the thermo can share an existing T
|
||||||
|
(similar to p) in which case it will not try to update it. This gets
|
||||||
|
triggered purely on construction order - the first one to register
|
||||||
|
T is repsonsible for updating it. Note that the mechanism also means
|
||||||
|
that if multiple thermos are running on the same mesh, only the first one
|
||||||
|
will update the temperature. The behaviour can be overridden using the
|
||||||
|
'updateT' dictionary entry.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
basicThermo.C
|
basicThermo.C
|
||||||
|
|
||||||
@ -68,18 +76,19 @@ protected:
|
|||||||
//- Pressure [Pa]
|
//- Pressure [Pa]
|
||||||
volScalarField& p_;
|
volScalarField& p_;
|
||||||
|
|
||||||
|
bool pOwner_;
|
||||||
|
|
||||||
//- Temperature [K]
|
//- Temperature [K]
|
||||||
volScalarField& T_;
|
volScalarField& T_;
|
||||||
|
|
||||||
|
bool TOwner_;
|
||||||
|
|
||||||
//- Laminar thermal diffusivity [kg/m/s]
|
//- Laminar thermal diffusivity [kg/m/s]
|
||||||
volScalarField alpha_;
|
volScalarField alpha_;
|
||||||
|
|
||||||
//- Should the dpdt term be included in the enthalpy equation
|
//- Should the dpdt term be included in the enthalpy equation
|
||||||
Switch dpdt_;
|
Switch dpdt_;
|
||||||
|
|
||||||
//- Temperature based thermo
|
|
||||||
Switch tempBased_;
|
|
||||||
|
|
||||||
|
|
||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
@ -87,11 +96,12 @@ protected:
|
|||||||
basicThermo(const basicThermo&);
|
basicThermo(const basicThermo&);
|
||||||
|
|
||||||
//- Look up or construct field
|
//- Look up or construct field
|
||||||
volScalarField& lookupOrConstruct
|
static volScalarField& lookupOrConstruct
|
||||||
(
|
(
|
||||||
const fvMesh& mesh,
|
const fvMesh& mesh,
|
||||||
const word&
|
const word&,
|
||||||
) const;
|
bool& isOwner
|
||||||
|
);
|
||||||
|
|
||||||
//- Lookup and check out field
|
//- Lookup and check out field
|
||||||
void lookupAndCheckout(const char* name) const;
|
void lookupAndCheckout(const char* name) const;
|
||||||
@ -150,8 +160,8 @@ public:
|
|||||||
const word& phaseName
|
const word& phaseName
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from mesh,dictionary,phase name with a single temperature
|
//- Construct from mesh, phase name and explicit naming of the
|
||||||
// solved on the top level solver (tempBased = true)
|
// dictionary (so it can be shared amongst phases).
|
||||||
basicThermo
|
basicThermo
|
||||||
(
|
(
|
||||||
const fvMesh&,
|
const fvMesh&,
|
||||||
@ -304,10 +314,10 @@ public:
|
|||||||
return dpdt_;
|
return dpdt_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Is the thermo T based
|
//- Should T be updated
|
||||||
Switch tempBased() const
|
Switch updateT() const
|
||||||
{
|
{
|
||||||
return tempBased_;
|
return TOwner_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -68,7 +68,7 @@ void Foam::hePsiThermo<BasicPsiThermo, MixtureType>::calculate
|
|||||||
const typename MixtureType::thermoType& mixture_ =
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
this->cellMixture(celli);
|
this->cellMixture(celli);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
TCells[celli] = mixture_.THE
|
TCells[celli] = mixture_.THE
|
||||||
(
|
(
|
||||||
@ -121,7 +121,7 @@ void Foam::hePsiThermo<BasicPsiThermo, MixtureType>::calculate
|
|||||||
const typename MixtureType::thermoType& mixture_ =
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
this->patchFaceMixture(patchi, facei);
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
pT[facei] = mixture_.THE(phe[facei], pp[facei], pT[facei]);
|
pT[facei] = mixture_.THE(phe[facei], pp[facei], pT[facei]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,9 +66,6 @@ class hePsiThermo
|
|||||||
const bool doOldTimes
|
const bool doOldTimes
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Calculate the thermo variables for thermos based on T
|
|
||||||
void calculateT();
|
|
||||||
|
|
||||||
//- Construct as copy (not implemented)
|
//- Construct as copy (not implemented)
|
||||||
hePsiThermo(const hePsiThermo<BasicPsiThermo, MixtureType>&);
|
hePsiThermo(const hePsiThermo<BasicPsiThermo, MixtureType>&);
|
||||||
|
|
||||||
|
|||||||
@ -71,7 +71,7 @@ void Foam::heRhoThermo<BasicPsiThermo, MixtureType>::calculate
|
|||||||
const typename MixtureType::thermoType& mixture_ =
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
this->cellMixture(celli);
|
this->cellMixture(celli);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
TCells[celli] = mixture_.THE
|
TCells[celli] = mixture_.THE
|
||||||
(
|
(
|
||||||
@ -128,7 +128,7 @@ void Foam::heRhoThermo<BasicPsiThermo, MixtureType>::calculate
|
|||||||
const typename MixtureType::thermoType& mixture_ =
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
this->patchFaceMixture(patchi, facei);
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
pT[facei] = mixture_.THE(phe[facei], pp[facei], pT[facei]);
|
pT[facei] = mixture_.THE(phe[facei], pp[facei], pT[facei]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,9 +67,6 @@ class heRhoThermo
|
|||||||
const bool doOldTimes
|
const bool doOldTimes
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Calculate the thermo variables based on T
|
|
||||||
void calculateT();
|
|
||||||
|
|
||||||
//- Construct as copy (not implemented)
|
//- Construct as copy (not implemented)
|
||||||
heRhoThermo(const heRhoThermo<BasicPsiThermo, MixtureType>&);
|
heRhoThermo(const heRhoThermo<BasicPsiThermo, MixtureType>&);
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ void Foam::heheuPsiThermo<BasicPsiThermo, MixtureType>::calculate()
|
|||||||
const typename MixtureType::thermoType& mixture_ =
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
this->cellMixture(celli);
|
this->cellMixture(celli);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
TCells[celli] = mixture_.THE
|
TCells[celli] = mixture_.THE
|
||||||
(
|
(
|
||||||
@ -126,7 +126,7 @@ void Foam::heheuPsiThermo<BasicPsiThermo, MixtureType>::calculate()
|
|||||||
const typename MixtureType::thermoType& mixture_ =
|
const typename MixtureType::thermoType& mixture_ =
|
||||||
this->patchFaceMixture(patchi, facei);
|
this->patchFaceMixture(patchi, facei);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
pT[facei] = mixture_.THE(phe[facei], pp[facei], pT[facei]);
|
pT[facei] = mixture_.THE(phe[facei], pp[facei], pT[facei]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,7 +46,7 @@ void Foam::heSolidThermo<BasicSolidThermo, MixtureType>::calculate()
|
|||||||
const typename MixtureType::thermoType& volMixture_ =
|
const typename MixtureType::thermoType& volMixture_ =
|
||||||
this->cellVolMixture(pCells[celli], TCells[celli], celli);
|
this->cellVolMixture(pCells[celli], TCells[celli], celli);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
TCells[celli] = mixture_.THE
|
TCells[celli] = mixture_.THE
|
||||||
(
|
(
|
||||||
@ -128,7 +128,7 @@ void Foam::heSolidThermo<BasicSolidThermo, MixtureType>::calculate()
|
|||||||
facei
|
facei
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!this->tempBased())
|
if (this->updateT())
|
||||||
{
|
{
|
||||||
pT[facei] = mixture_.THE(phe[facei], pp[facei] ,pT[facei]);
|
pT[facei] = mixture_.THE(phe[facei], pp[facei] ,pT[facei]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ FoamFile
|
|||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
application interThermalDyMFoam;
|
application icoReactingMultiPhaseInterFoam;
|
||||||
|
|
||||||
startFrom latestTime;
|
startFrom latestTime;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user