mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' into particleInteractions
This commit is contained in:
@ -146,6 +146,14 @@ int main(int argc, char *argv[])
|
||||
Info<< "Converting faces on zone " << zoneID.name()
|
||||
<< " into baffles." << nl << endl;
|
||||
|
||||
if (zoneID.index() == -1)
|
||||
{
|
||||
FatalErrorIn(args.executable()) << "Cannot find faceZone "
|
||||
<< zoneID.name() << endl
|
||||
<< "Valid zones are " << faceZones.names()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
const faceZone& fZone = faceZones[zoneID.index()];
|
||||
|
||||
Info<< "Found " << returnReduce(fZone.size(), sumOp<label>())
|
||||
|
||||
@ -1655,6 +1655,9 @@ int main(int argc, char *argv[])
|
||||
Info<< endl;
|
||||
|
||||
|
||||
// Remove any demand-driven fields ('S', 'V' etc)
|
||||
mesh.clearOut();
|
||||
|
||||
|
||||
if (cellRegion.nRegions() == 1)
|
||||
{
|
||||
|
||||
@ -106,6 +106,20 @@ void Foam::functionObjectList::clear()
|
||||
}
|
||||
|
||||
|
||||
Foam::label Foam::functionObjectList::findObjectID(const word& name) const
|
||||
{
|
||||
forAll(*this, objectI)
|
||||
{
|
||||
if (operator[](objectI).name() == name)
|
||||
{
|
||||
return objectI;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
void Foam::functionObjectList::on()
|
||||
{
|
||||
execution_ = true;
|
||||
@ -142,14 +156,9 @@ bool Foam::functionObjectList::execute()
|
||||
read();
|
||||
}
|
||||
|
||||
forAllIter
|
||||
(
|
||||
PtrList<functionObject>,
|
||||
static_cast<PtrList<functionObject>&>(*this),
|
||||
iter
|
||||
)
|
||||
forAll(*this, objectI)
|
||||
{
|
||||
ok = iter().execute() && ok;
|
||||
ok = operator[](objectI).execute() && ok;
|
||||
}
|
||||
}
|
||||
|
||||
@ -168,14 +177,9 @@ bool Foam::functionObjectList::end()
|
||||
read();
|
||||
}
|
||||
|
||||
forAllIter
|
||||
(
|
||||
PtrList<functionObject>,
|
||||
static_cast<PtrList<functionObject>&>(*this),
|
||||
iter
|
||||
)
|
||||
forAll(*this, objectI)
|
||||
{
|
||||
ok = iter().end() && ok;
|
||||
ok = operator[](objectI).end() && ok;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -120,9 +120,8 @@ public:
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~functionObjectList();
|
||||
//- Destructor
|
||||
virtual ~functionObjectList();
|
||||
|
||||
|
||||
// Member Functions
|
||||
@ -139,6 +138,8 @@ public:
|
||||
//- Clear the list of function objects
|
||||
virtual void clear();
|
||||
|
||||
//- Find the ID of a given function object by name
|
||||
virtual label findObjectID(const word& name) const;
|
||||
|
||||
//- Switch the function objects on
|
||||
virtual void on();
|
||||
@ -161,7 +162,6 @@ public:
|
||||
|
||||
//- Read and set the function objects if their data have changed
|
||||
virtual bool read();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -53,9 +53,24 @@ dimensionedScalar dimensionedConstant
|
||||
{
|
||||
dictionary& dict = dimensionedConstants();
|
||||
|
||||
const word unitSet(dict.lookup("unitSet"));
|
||||
// Check that the entries exist.
|
||||
// Note: should make FatalError robust instead!
|
||||
|
||||
dictionary& unitDict(dict.subDict(unitSet + "Coeffs"));
|
||||
if (!dict.found("unitSet"))
|
||||
{
|
||||
std::cerr<< "Cannot find unitSet in dictionary " << dict.name()
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
const word unitSetCoeffs(word(dict.lookup("unitSet")) + "Coeffs");
|
||||
|
||||
if (!dict.found(unitSetCoeffs))
|
||||
{
|
||||
std::cerr<< "Cannot find " << unitSetCoeffs << " in dictionary "
|
||||
<< dict.name() << std::endl;
|
||||
}
|
||||
|
||||
dictionary& unitDict = dict.subDict(unitSetCoeffs);
|
||||
|
||||
dictionary& groupDict = unitDict.subDict(group);
|
||||
|
||||
|
||||
@ -198,9 +198,7 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
label high = values.size();
|
||||
|
||||
// Safeguards to avoid infinite loop.
|
||||
label lowPrev = -1;
|
||||
label midPrev = -1;
|
||||
label highPrev = -1;
|
||||
scalar midValuePrev = VGREAT;
|
||||
|
||||
while (true)
|
||||
{
|
||||
@ -208,10 +206,10 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Pout<< "low:" << low << " lowValue:" << lowValue
|
||||
Pout<< " low:" << low << " lowValue:" << lowValue
|
||||
<< " high:" << high << " highValue:" << highValue
|
||||
<< " mid:" << mid << " midValue:" << midValue << nl
|
||||
<< "globalSize:" << size << " wantedSize:" << wantedSize
|
||||
<< " mid:" << mid << " midValue:" << midValue << endl
|
||||
<< " globalSize:" << size << " wantedSize:" << wantedSize
|
||||
<< " sizeTol:" << sizeTol << endl;
|
||||
}
|
||||
|
||||
@ -235,10 +233,7 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
mid = findLower(values, midValue, low, high);
|
||||
|
||||
// Safeguard if same as previous.
|
||||
bool hasNotChanged =
|
||||
(mid == midPrev)
|
||||
&& (low == lowPrev)
|
||||
&& (high == highPrev);
|
||||
bool hasNotChanged = (mag(midValue-midValuePrev) < SMALL);
|
||||
|
||||
if (returnReduce(hasNotChanged, andOp<bool>()))
|
||||
{
|
||||
@ -248,9 +243,7 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
break;
|
||||
}
|
||||
|
||||
midPrev = mid;
|
||||
lowPrev = low;
|
||||
highPrev = high;
|
||||
midValuePrev = midValue;
|
||||
}
|
||||
}
|
||||
|
||||
@ -280,9 +273,7 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
label high = values.size();
|
||||
|
||||
// Safeguards to avoid infinite loop.
|
||||
label lowPrev = -1;
|
||||
label midPrev = -1;
|
||||
label highPrev = -1;
|
||||
scalar midValuePrev = VGREAT;
|
||||
|
||||
while (true)
|
||||
{
|
||||
@ -294,10 +285,10 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Pout<< "low:" << low << " lowValue:" << lowValue
|
||||
Pout<< " low:" << low << " lowValue:" << lowValue
|
||||
<< " high:" << high << " highValue:" << highValue
|
||||
<< " mid:" << mid << " midValue:" << midValue << nl
|
||||
<< "globalSize:" << weightedSize
|
||||
<< " mid:" << mid << " midValue:" << midValue << endl
|
||||
<< " globalSize:" << weightedSize
|
||||
<< " wantedSize:" << wantedSize
|
||||
<< " sizeTol:" << sizeTol << endl;
|
||||
}
|
||||
@ -322,10 +313,7 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
mid = findLower(values, midValue, low, high);
|
||||
|
||||
// Safeguard if same as previous.
|
||||
bool hasNotChanged =
|
||||
(mid == midPrev)
|
||||
&& (low == lowPrev)
|
||||
&& (high == highPrev);
|
||||
bool hasNotChanged = (mag(midValue-midValuePrev) < SMALL);
|
||||
|
||||
if (returnReduce(hasNotChanged, andOp<bool>()))
|
||||
{
|
||||
@ -335,9 +323,7 @@ void Foam::hierarchGeomDecomp::findBinary
|
||||
break;
|
||||
}
|
||||
|
||||
midPrev = mid;
|
||||
lowPrev = low;
|
||||
highPrev = high;
|
||||
midValuePrev = midValue;
|
||||
}
|
||||
}
|
||||
|
||||
@ -460,11 +446,11 @@ void Foam::hierarchGeomDecomp::sortComponent
|
||||
if (debug)
|
||||
{
|
||||
Pout<< "For component " << compI << ", bin " << bin
|
||||
<< " copying" << nl
|
||||
<< " copying" << endl
|
||||
<< "from " << leftCoord << " at local index "
|
||||
<< leftIndex << nl
|
||||
<< leftIndex << endl
|
||||
<< "to " << rightCoord << " localSize:"
|
||||
<< localSize << nl
|
||||
<< localSize << endl
|
||||
<< endl;
|
||||
}
|
||||
|
||||
@ -643,11 +629,11 @@ void Foam::hierarchGeomDecomp::sortComponent
|
||||
if (debug)
|
||||
{
|
||||
Pout<< "For component " << compI << ", bin " << bin
|
||||
<< " copying" << nl
|
||||
<< " copying" << endl
|
||||
<< "from " << leftCoord << " at local index "
|
||||
<< leftIndex << nl
|
||||
<< leftIndex << endl
|
||||
<< "to " << rightCoord << " localSize:"
|
||||
<< localSize << nl
|
||||
<< localSize << endl
|
||||
<< endl;
|
||||
}
|
||||
|
||||
@ -788,7 +774,6 @@ Foam::labelList Foam::hierarchGeomDecomp::decompose
|
||||
|
||||
pointField rotatedPoints = rotDelta_ & points;
|
||||
|
||||
|
||||
// Calculate tolerance of cell distribution. For large cases finding
|
||||
// distibution to the cell exact would cause too many iterations so allow
|
||||
// some slack.
|
||||
|
||||
@ -628,7 +628,7 @@ void Foam::addPatchCellLayer::setRefinement
|
||||
DynamicList<label> ef;
|
||||
|
||||
// Precalculate mesh edges for pp.edges.
|
||||
labelList meshEdges(calcMeshEdges(mesh_, pp));
|
||||
const labelList meshEdges(pp.meshEdges(mesh_.edges(), mesh_.pointEdges()));
|
||||
|
||||
if (debug)
|
||||
{
|
||||
@ -1547,30 +1547,4 @@ void Foam::addPatchCellLayer::updateMesh
|
||||
}
|
||||
|
||||
|
||||
Foam::labelList Foam::addPatchCellLayer::calcMeshEdges
|
||||
(
|
||||
const primitiveMesh& mesh,
|
||||
const indirectPrimitivePatch& pp
|
||||
)
|
||||
{
|
||||
labelList meshEdges(pp.nEdges());
|
||||
|
||||
forAll(meshEdges, patchEdgeI)
|
||||
{
|
||||
const edge& e = pp.edges()[patchEdgeI];
|
||||
|
||||
label v0 = pp.meshPoints()[e[0]];
|
||||
label v1 = pp.meshPoints()[e[1]];
|
||||
meshEdges[patchEdgeI] = meshTools::findEdge
|
||||
(
|
||||
mesh.edges(),
|
||||
mesh.pointEdges()[v0],
|
||||
v0,
|
||||
v1
|
||||
);
|
||||
}
|
||||
return meshEdges;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -354,15 +354,6 @@ public:
|
||||
const labelList& faceMap, // new to old patch faces
|
||||
const labelList& pointMap // new to old patch points
|
||||
);
|
||||
|
||||
// Helper
|
||||
|
||||
//- Per patch edge the corresponding mesh edge
|
||||
static labelList calcMeshEdges
|
||||
(
|
||||
const primitiveMesh& mesh,
|
||||
const indirectPrimitivePatch&
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -103,7 +103,7 @@ Foam::scalar Foam::COxidationDiffusionLimitedRate<CloudType>::calculate
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -131,7 +131,7 @@ public:
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -111,7 +111,7 @@ Foam::scalar Foam::COxidationKineticDiffusionLimitedRate<CloudType>::calculate
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -139,7 +139,7 @@ public:
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -107,7 +107,7 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
@ -143,9 +143,6 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate
|
||||
// Far field partial pressure O2 [Pa]
|
||||
const scalar ppO2 = rhoO2/WO2_*specie::RR*Tc;
|
||||
|
||||
// Molar emission rate of volatiles per unit surface area
|
||||
const scalar qVol = sum(dMassVolatile)/(WVol_*Ap);
|
||||
|
||||
// Total molar concentration of the carrier phase [kmol/m^3]
|
||||
const scalar C = pc/(specie::RR*Tc);
|
||||
|
||||
@ -174,7 +171,7 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate
|
||||
while ((mag(qCs - qCsOld)/qCs > tolerance_) && (iter <= maxIters_))
|
||||
{
|
||||
qCsOld = qCs;
|
||||
const scalar PO2Surface = ppO2*exp(-(qCs + qVol)*d/(2*C*D));
|
||||
const scalar PO2Surface = ppO2*exp(-(qCs + N)*d/(2*C*D));
|
||||
qCs = A_*exp(-E_/(specie::RR*T))*pow(PO2Surface, n_);
|
||||
qCs = (100.0*qCs + iter*qCsOld)/(100.0 + iter);
|
||||
qCs = min(qCs, qCsLim);
|
||||
|
||||
@ -152,7 +152,7 @@ public:
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -26,6 +26,8 @@ License
|
||||
|
||||
#include "physicoChemicalConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ParcelType>
|
||||
@ -229,7 +231,7 @@ Foam::ThermoCloud<ParcelType>::Ep() const
|
||||
Ep[cellI] += p.nParticle()*p.areaP()*pow4(p.T());
|
||||
}
|
||||
|
||||
Ep *= epsilon*constant::physicoChemical::sigma.value()/V;
|
||||
Ep *= epsilon*physicoChemical::sigma.value()/V;
|
||||
}
|
||||
|
||||
return tEp;
|
||||
|
||||
@ -101,6 +101,12 @@ void Foam::KinematicParcel<ParcelType>::calc
|
||||
const scalar rho0 = rho_;
|
||||
const scalar mass0 = mass();
|
||||
|
||||
// Reynolds number
|
||||
const scalar Re = this->Re(U0, d0, rhoc_, muc_);
|
||||
|
||||
|
||||
// Sources
|
||||
//~~~~~~~~
|
||||
|
||||
// Explicit momentum source for particle
|
||||
vector Su = vector::zero;
|
||||
@ -113,7 +119,8 @@ void Foam::KinematicParcel<ParcelType>::calc
|
||||
// ~~~~~~
|
||||
|
||||
// Calculate new particle velocity
|
||||
vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
vector U1 =
|
||||
calcVelocity(td, dt, cellI, Re, muc_, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
|
||||
|
||||
// Accumulate carrier phase source terms
|
||||
@ -138,6 +145,8 @@ const Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity
|
||||
TrackData& td,
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar mu,
|
||||
const scalar d,
|
||||
const vector& U,
|
||||
const scalar rho,
|
||||
@ -149,8 +158,7 @@ const Foam::vector Foam::KinematicParcel<ParcelType>::calcVelocity
|
||||
const polyMesh& mesh = this->cloud().pMesh();
|
||||
|
||||
// Momentum transfer coefficient
|
||||
const scalar utc =
|
||||
td.cloud().drag().utc(U - Uc_, d, rhoc_, muc_) + ROOTVSMALL;
|
||||
const scalar utc = td.cloud().drag().utc(Re, d, mu) + ROOTVSMALL;
|
||||
|
||||
// Momentum source due to particle forces
|
||||
const vector FCoupled =
|
||||
|
||||
@ -238,6 +238,8 @@ protected:
|
||||
TrackData& td,
|
||||
const scalar dt, // timestep
|
||||
const label cellI, // owner cell
|
||||
const scalar Re, // Reynolds number
|
||||
const scalar mu, // local carrier viscosity
|
||||
const scalar d, // diameter
|
||||
const vector& U, // velocity
|
||||
const scalar rho, // density
|
||||
@ -387,6 +389,15 @@ public:
|
||||
//- Surface area for given diameter
|
||||
inline scalar areaS(const scalar d) const;
|
||||
|
||||
//- Reynolds number
|
||||
inline scalar Re
|
||||
(
|
||||
const vector& U, // particle velocity
|
||||
const scalar d, // particle diameter
|
||||
const scalar rhoc, // carrier density
|
||||
const scalar muc // carrier dynamic viscosity
|
||||
) const;
|
||||
|
||||
|
||||
// Main calculation loop
|
||||
|
||||
|
||||
@ -26,6 +26,8 @@ License
|
||||
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template <class ParcelType>
|
||||
@ -351,7 +353,7 @@ template <class ParcelType>
|
||||
inline Foam::scalar
|
||||
Foam::KinematicParcel<ParcelType>::volume(const scalar d) const
|
||||
{
|
||||
return constant::math::pi/6.0*pow3(d);
|
||||
return math::pi/6.0*pow3(d);
|
||||
}
|
||||
|
||||
|
||||
@ -381,7 +383,21 @@ template <class ParcelType>
|
||||
inline Foam::scalar
|
||||
Foam::KinematicParcel<ParcelType>::areaS(const scalar d) const
|
||||
{
|
||||
return constant::math::pi*d*d;
|
||||
return math::pi*d*d;
|
||||
}
|
||||
|
||||
|
||||
template <class ParcelType>
|
||||
inline Foam::scalar
|
||||
Foam::KinematicParcel<ParcelType>::Re
|
||||
(
|
||||
const vector& U,
|
||||
const scalar d,
|
||||
const scalar rhoc,
|
||||
const scalar muc
|
||||
) const
|
||||
{
|
||||
return rhoc*mag(U - Uc_)*d/muc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -27,6 +27,8 @@ License
|
||||
#include "ReactingMultiphaseParcel.H"
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
template<class ParcelType>
|
||||
@ -206,6 +208,20 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
const label idL = td.cloud().composition().idLiquid();
|
||||
const label idS = td.cloud().composition().idSolid();
|
||||
|
||||
|
||||
// Calc surface values
|
||||
// ~~~~~~~~~~~~~~~~~~~
|
||||
scalar Ts, rhos, mus, Pr, kappa;
|
||||
ThermoParcel<ParcelType>::
|
||||
calcSurfaceValues(td, cellI, T0, Ts, rhos, mus, Pr, kappa);
|
||||
|
||||
// Reynolds number
|
||||
scalar Re = this->Re(U0, d0, rhos, mus);
|
||||
|
||||
|
||||
// Sources
|
||||
//~~~~~~~~
|
||||
|
||||
// Explicit momentum source for particle
|
||||
vector Su = vector::zero;
|
||||
|
||||
@ -219,6 +235,45 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
scalar dhsTrans = 0.0;
|
||||
|
||||
|
||||
// Phase change in liquid phase
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
// Mass transfer due to phase change
|
||||
scalarField dMassPC(YLiquid_.size(), 0.0);
|
||||
|
||||
// Molar flux of species emitted from the particle (kmol/m^2/s)
|
||||
scalar Ne = 0.0;
|
||||
|
||||
// Sum Ni*Cpi*Wi of emission species
|
||||
scalar NCpW = 0.0;
|
||||
|
||||
// Surface concentrations of emitted species
|
||||
scalarField Cs(td.cloud().mcCarrierThermo().species().size(), 0.0);
|
||||
|
||||
// Calc mass and enthalpy transfer due to phase change
|
||||
calcPhaseChange
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
cellI,
|
||||
Re,
|
||||
Ts,
|
||||
mus/rhos,
|
||||
d0,
|
||||
T0,
|
||||
mass0,
|
||||
idL,
|
||||
YMix[LIQ],
|
||||
YLiquid_,
|
||||
dMassPC,
|
||||
Sh,
|
||||
dhsTrans,
|
||||
Ne,
|
||||
NCpW,
|
||||
Cs
|
||||
);
|
||||
|
||||
|
||||
// Devolatilisation
|
||||
// ~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -230,6 +285,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
Ts,
|
||||
d0,
|
||||
T0,
|
||||
mass0,
|
||||
this->mass0_,
|
||||
@ -239,9 +296,15 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
canCombust_,
|
||||
dMassDV,
|
||||
Sh,
|
||||
dhsTrans
|
||||
dhsTrans,
|
||||
Ne,
|
||||
NCpW,
|
||||
Cs
|
||||
);
|
||||
|
||||
// Correct surface values due to emitted species
|
||||
correctSurfaceValues(td, cellI, Ts, Cs, rhos, mus, Pr, kappa);
|
||||
|
||||
|
||||
// Surface reactions
|
||||
// ~~~~~~~~~~~~~~~~~
|
||||
@ -267,7 +330,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
T0,
|
||||
mass0,
|
||||
canCombust_,
|
||||
dMassDV, // assuming d(mass) due to phase change is non-volatile
|
||||
Ne,
|
||||
YMix,
|
||||
YGas_,
|
||||
YLiquid_,
|
||||
@ -281,31 +344,6 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
);
|
||||
|
||||
|
||||
// Phase change in liquid phase
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
// Mass transfer due to phase change
|
||||
scalarField dMassPC(YLiquid_.size(), 0.0);
|
||||
|
||||
// Calc mass and enthalpy transfer due to phase change
|
||||
calcPhaseChange
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
cellI,
|
||||
d0,
|
||||
T0,
|
||||
U0,
|
||||
mass0,
|
||||
idL,
|
||||
YMix[LIQ],
|
||||
YLiquid_,
|
||||
dMassPC,
|
||||
Sh,
|
||||
dhsTrans
|
||||
);
|
||||
|
||||
|
||||
// Update component mass fractions
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -322,14 +360,30 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
|
||||
// Calculate new particle temperature
|
||||
scalar T1 =
|
||||
calcHeatTransfer(td, dt, cellI, d0, U0, rho0, T0, cp0, Sh, dhsTrans);
|
||||
calcHeatTransfer
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
cellI,
|
||||
Re,
|
||||
Pr,
|
||||
kappa,
|
||||
d0,
|
||||
rho0,
|
||||
T0,
|
||||
cp0,
|
||||
NCpW,
|
||||
Sh,
|
||||
dhsTrans
|
||||
);
|
||||
|
||||
|
||||
// Motion
|
||||
// ~~~~~~
|
||||
|
||||
// Calculate new particle velocity
|
||||
vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
vector U1 =
|
||||
calcVelocity(td, dt, cellI, Re, mus, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
|
||||
dUTrans += 0.5*(mass0 - mass1)*(U0 + U1);
|
||||
|
||||
@ -443,7 +497,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
||||
}
|
||||
else
|
||||
{
|
||||
this->d_ = cbrt(mass1/this->rho_*6.0/constant::math::pi);
|
||||
this->d_ = cbrt(mass1/this->rho_*6.0/math::pi);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -455,6 +509,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation
|
||||
(
|
||||
TrackData& td,
|
||||
const scalar dt,
|
||||
const scalar Ts,
|
||||
const scalar d,
|
||||
const scalar T,
|
||||
const scalar mass,
|
||||
const scalar mass0,
|
||||
@ -464,7 +520,10 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation
|
||||
bool& canCombust,
|
||||
scalarField& dMassDV,
|
||||
scalar& Sh,
|
||||
scalar& dhsTrans
|
||||
scalar& dhsTrans,
|
||||
scalar& N,
|
||||
scalar& NCpW,
|
||||
scalarField& Cs
|
||||
) const
|
||||
{
|
||||
// Check that model is active, and that the parcel temperature is
|
||||
@ -496,6 +555,30 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation
|
||||
td.cloud().addToMassDevolatilisation(this->nParticle_*dMassTot);
|
||||
|
||||
Sh -= dMassTot*td.constProps().LDevol()/dt;
|
||||
|
||||
// Molar average molecular weight of carrier mix
|
||||
const scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_;
|
||||
|
||||
// Update molar emissions
|
||||
forAll(dMassDV, i)
|
||||
{
|
||||
// Note: hardcoded gaseous diffusivities for now
|
||||
// TODO: add to carrier thermo
|
||||
const scalar beta = sqr(cbrt(15.0) + cbrt(15.0));
|
||||
const label id =
|
||||
td.cloud().composition().localToGlobalCarrierId(GAS, i);
|
||||
const scalar Cp = td.cloud().mcCarrierThermo().speciesData()[id].Cp(Ts);
|
||||
const scalar W = td.cloud().mcCarrierThermo().speciesData()[id].W();
|
||||
const scalar Ni = dMassDV[i]/(this->areaS(d)*dt*W);
|
||||
|
||||
// Dab calc'd using API vapour mass diffusivity function
|
||||
const scalar Dab =
|
||||
3.6059e-3*(pow(1.8*Ts, 1.75))*sqrt(1.0/W + 1.0/Wc)/(this->pc_*beta);
|
||||
|
||||
N += Ni;
|
||||
NCpW += Ni*Cp*W;
|
||||
Cs[id] += Ni*d/(2.0*Dab);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -510,7 +593,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions
|
||||
const scalar T,
|
||||
const scalar mass,
|
||||
const bool canCombust,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
const scalarField& YMix,
|
||||
const scalarField& YGas,
|
||||
const scalarField& YLiquid,
|
||||
@ -544,7 +627,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions
|
||||
YLiquid,
|
||||
YSolid,
|
||||
YMix,
|
||||
dMassVolatile,
|
||||
N,
|
||||
dMassSRGas,
|
||||
dMassSRLiquid,
|
||||
dMassSRSolid,
|
||||
@ -561,7 +644,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcSurfaceReactions
|
||||
const scalar hRetentionCoeffMod =
|
||||
(1.0 - xsi*xsi)*td.constProps().hRetentionCoeff();
|
||||
|
||||
Sh += hRetentionCoeffMod *hReaction/dt;
|
||||
Sh += hRetentionCoeffMod*hReaction/dt;
|
||||
|
||||
dhsTrans += (1.0 - hRetentionCoeffMod)*hReaction;
|
||||
}
|
||||
|
||||
@ -227,6 +227,8 @@ protected:
|
||||
(
|
||||
TrackData& td,
|
||||
const scalar dt, // timestep
|
||||
const scalar Ts, // Surface temperature
|
||||
const scalar d, // diameter
|
||||
const scalar T, // temperature
|
||||
const scalar mass, // mass
|
||||
const scalar mass0, // mass (initial on injection)
|
||||
@ -236,7 +238,10 @@ protected:
|
||||
bool& canCombust, // 'can combust' flag
|
||||
scalarField& dMassDV, // mass transfer - local to particle
|
||||
scalar& Sh, // explicit particle enthalpy source
|
||||
scalar& dhsTrans // sensible enthalpy transfer to carrier
|
||||
scalar& dhsTrans, // sensible enthalpy transfer to carrier
|
||||
scalar& N, // flux of species emitted from particle
|
||||
scalar& NCpW, // sum of N*Cp*W of emission species
|
||||
scalarField& Cs // carrier conc. of emission species
|
||||
) const;
|
||||
|
||||
//- Calculate surface reactions
|
||||
@ -250,7 +255,7 @@ protected:
|
||||
const scalar T, // temperature
|
||||
const scalar mass, // mass
|
||||
const bool canCombust, // 'can combust' flag
|
||||
const scalarField& dMassVolatile, // mass transfer of volatiles
|
||||
const scalar N, // flux of species emitted from particle
|
||||
const scalarField& YMix, // mixture mass fractions
|
||||
const scalarField& YGas, // gas-phase mass fractions
|
||||
const scalarField& YLiquid,// liquid-phase mass fractions
|
||||
|
||||
@ -26,6 +26,9 @@ License
|
||||
|
||||
#include "ReactingParcel.H"
|
||||
#include "mathConstants.H"
|
||||
#include "specie.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
|
||||
|
||||
@ -98,6 +101,92 @@ void Foam::ReactingParcel<ParcelType>::cellValueSourceCorrection
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
template<class TrackData>
|
||||
void Foam::ReactingParcel<ParcelType>::correctSurfaceValues
|
||||
(
|
||||
TrackData& td,
|
||||
const label cellI,
|
||||
const scalar T,
|
||||
const scalarField& Cs,
|
||||
scalar& rhos,
|
||||
scalar& mus,
|
||||
scalar& Pr,
|
||||
scalar& kappa
|
||||
)
|
||||
{
|
||||
// No correction if total concentration of emitted species is small
|
||||
if (sum(Cs) < SMALL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Far field gas molar fractions
|
||||
scalarField Xinf(Y_.size());
|
||||
|
||||
forAll(Xinf, i)
|
||||
{
|
||||
Xinf[i] =
|
||||
td.cloud().mcCarrierThermo().Y(i)[cellI]
|
||||
/td.cloud().mcCarrierThermo().speciesData()[i].W();
|
||||
}
|
||||
Xinf /= sum(Xinf);
|
||||
|
||||
// Molar fraction of far field species at particle surface
|
||||
const scalar Xsff = 1.0 - min(sum(Cs)*specie::RR*this->T_/pc_, 1.0);
|
||||
|
||||
// Surface gas total molar concentration
|
||||
const scalar CsTot = pc_/(specie::RR*this->T_);
|
||||
|
||||
// Surface carrier composition (molar fraction)
|
||||
scalarField Xs(Xinf.size());
|
||||
|
||||
// Surface carrier composition (mass fraction)
|
||||
scalarField Ys(Xinf.size());
|
||||
|
||||
forAll(Xs, i)
|
||||
{
|
||||
// Molar concentration of species at particle surface
|
||||
const scalar Csi = Cs[i] + Xsff*Xinf[i]*CsTot;
|
||||
|
||||
Xs[i] = (2.0*Csi + Xinf[i]*CsTot)/3.0;
|
||||
Ys[i] = Xs[i]*td.cloud().mcCarrierThermo().speciesData()[i].W();
|
||||
}
|
||||
Xs /= sum(Xs);
|
||||
Ys /= sum(Ys);
|
||||
|
||||
|
||||
rhos = 0;
|
||||
mus = 0;
|
||||
kappa = 0;
|
||||
scalar cps = 0;
|
||||
scalar sumYiSqrtW = 0;
|
||||
scalar sumYiCbrtW = 0;
|
||||
|
||||
forAll(Ys, i)
|
||||
{
|
||||
const scalar sqrtW =
|
||||
sqrt(td.cloud().mcCarrierThermo().speciesData()[i].W());
|
||||
const scalar cbrtW =
|
||||
cbrt(td.cloud().mcCarrierThermo().speciesData()[i].W());
|
||||
|
||||
rhos += Xs[i]*td.cloud().mcCarrierThermo().speciesData()[i].W();
|
||||
cps += Xs[i]*td.cloud().mcCarrierThermo().speciesData()[i].Cp(T);
|
||||
mus += Ys[i]*sqrtW*td.cloud().mcCarrierThermo().speciesData()[i].mu(T);
|
||||
kappa +=
|
||||
Ys[i]*cbrtW*td.cloud().mcCarrierThermo().speciesData()[i].kappa(T);
|
||||
|
||||
sumYiSqrtW += Ys[i]*sqrtW;
|
||||
sumYiCbrtW += Ys[i]*cbrtW;
|
||||
}
|
||||
|
||||
rhos *= pc_/(specie::RR*T);
|
||||
mus /= sumYiSqrtW;
|
||||
kappa /= sumYiCbrtW;
|
||||
Pr = cps*mus/kappa;
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
Foam::scalar Foam::ReactingParcel<ParcelType>::updateMassFraction
|
||||
(
|
||||
@ -140,6 +229,19 @@ void Foam::ReactingParcel<ParcelType>::calc
|
||||
const scalar cp0 = this->cp_;
|
||||
const scalar mass0 = this->mass();
|
||||
|
||||
|
||||
// Calc surface values
|
||||
// ~~~~~~~~~~~~~~~~~~~
|
||||
scalar Ts, rhos, mus, Pr, kappa;
|
||||
this->calcSurfaceValues(td, cellI, T0, Ts, rhos, mus, Pr, kappa);
|
||||
|
||||
// Reynolds number
|
||||
scalar Re = this->Re(U0, d0, rhos, mus);
|
||||
|
||||
|
||||
// Sources
|
||||
//~~~~~~~~
|
||||
|
||||
// Explicit momentum source for particle
|
||||
vector Su = vector::zero;
|
||||
|
||||
@ -159,24 +261,41 @@ void Foam::ReactingParcel<ParcelType>::calc
|
||||
// Mass transfer due to phase change
|
||||
scalarField dMassPC(Y_.size(), 0.0);
|
||||
|
||||
// Molar flux of species emitted from the particle (kmol/m^2/s)
|
||||
scalar Ne = 0.0;
|
||||
|
||||
// Sum Ni*Cpi*Wi of emission species
|
||||
scalar NCpW = 0.0;
|
||||
|
||||
// Surface concentrations of emitted species
|
||||
scalarField Cs(td.cloud().mcCarrierThermo().species().size(), 0.0);
|
||||
|
||||
// Calc mass and enthalpy transfer due to phase change
|
||||
calcPhaseChange
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
cellI,
|
||||
Ts,
|
||||
mus/rhos,
|
||||
Re,
|
||||
d0,
|
||||
T0,
|
||||
U0,
|
||||
mass0,
|
||||
0,
|
||||
1.0,
|
||||
Y_,
|
||||
dMassPC,
|
||||
Sh,
|
||||
dhsTrans
|
||||
dhsTrans,
|
||||
Ne,
|
||||
NCpW,
|
||||
Cs
|
||||
);
|
||||
|
||||
// Correct surface values due to emitted species
|
||||
correctSurfaceValues(td, cellI, Ts, Cs, rhos, mus, Pr, kappa);
|
||||
|
||||
// Update particle component mass and mass fractions
|
||||
scalar mass1 = updateMassFraction(mass0, dMassPC, Y_);
|
||||
|
||||
@ -186,14 +305,30 @@ void Foam::ReactingParcel<ParcelType>::calc
|
||||
|
||||
// Calculate new particle temperature
|
||||
scalar T1 =
|
||||
calcHeatTransfer(td, dt, cellI, d0, U0, rho0, T0, cp0, Sh, dhsTrans);
|
||||
calcHeatTransfer
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
cellI,
|
||||
Re,
|
||||
Pr,
|
||||
kappa,
|
||||
d0,
|
||||
rho0,
|
||||
T0,
|
||||
cp0,
|
||||
NCpW,
|
||||
Sh,
|
||||
dhsTrans
|
||||
);
|
||||
|
||||
|
||||
// Motion
|
||||
// ~~~~~~
|
||||
|
||||
// Calculate new particle velocity
|
||||
vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
vector U1 =
|
||||
calcVelocity(td, dt, cellI, Re, mus, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
|
||||
dUTrans += 0.5*(mass0 - mass1)*(U0 + U1);
|
||||
|
||||
@ -258,7 +393,7 @@ void Foam::ReactingParcel<ParcelType>::calc
|
||||
}
|
||||
else
|
||||
{
|
||||
this->d_ = cbrt(mass1/this->rho_*6.0/constant::math::pi);
|
||||
this->d_ = cbrt(mass1/this->rho_*6.0/math::pi);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -271,16 +406,21 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange
|
||||
TrackData& td,
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar Ts,
|
||||
const scalar nus,
|
||||
const scalar d,
|
||||
const scalar T,
|
||||
const vector& U,
|
||||
const scalar mass,
|
||||
const label idPhase,
|
||||
const scalar YPhase,
|
||||
const scalarField& YComponents,
|
||||
scalarField& dMassPC,
|
||||
scalar& Sh,
|
||||
scalar& dhsTrans
|
||||
scalar& dhsTrans,
|
||||
scalar& N,
|
||||
scalar& NCpW,
|
||||
scalarField& Cs
|
||||
)
|
||||
{
|
||||
if
|
||||
@ -298,12 +438,12 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange
|
||||
(
|
||||
dt,
|
||||
cellI,
|
||||
Re,
|
||||
d,
|
||||
min(T, td.constProps().Tbp()), // Limit to boiling temperature
|
||||
nus,
|
||||
T,
|
||||
Ts,
|
||||
pc_,
|
||||
this->Tc_,
|
||||
this->muc_/(this->rhoc_ + ROOTVSMALL),
|
||||
U - this->Uc_,
|
||||
dMassPC
|
||||
);
|
||||
|
||||
@ -315,18 +455,38 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange
|
||||
// Add to cumulative phase change mass
|
||||
td.cloud().addToMassPhaseChange(this->nParticle_*dMassTot);
|
||||
|
||||
// Enthalphy transfer to carrier phase
|
||||
label id;
|
||||
// Average molecular weight of carrier mix - assumes perfect gas
|
||||
scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_;
|
||||
|
||||
forAll(YComponents, i)
|
||||
{
|
||||
id = td.cloud().composition().localToGlobalCarrierId(idPhase, i);
|
||||
const scalar hv = td.cloud().mcCarrierThermo().speciesData()[id].H(T);
|
||||
const label idc =
|
||||
td.cloud().composition().localToGlobalCarrierId(idPhase, i);
|
||||
const scalar hv = td.cloud().mcCarrierThermo().speciesData()[idc].H(T);
|
||||
|
||||
id = td.cloud().composition().globalIds(idPhase)[i];
|
||||
const label idl = td.cloud().composition().globalIds(idPhase)[i];
|
||||
const scalar hl =
|
||||
td.cloud().composition().liquids().properties()[id].h(pc_, T);
|
||||
td.cloud().composition().liquids().properties()[idl].h(pc_, T);
|
||||
|
||||
// Enthalphy transfer to carrier phase
|
||||
Sh += dMassPC[i]*(hl - hv)/dt;
|
||||
|
||||
const scalar Dab =
|
||||
td.cloud().composition().liquids().properties()[idl].D(pc_, Ts, Wc);
|
||||
|
||||
const scalar Cp =
|
||||
td.cloud().mcCarrierThermo().speciesData()[idc].Cp(Ts);
|
||||
const scalar W = td.cloud().mcCarrierThermo().speciesData()[idc].W();
|
||||
const scalar Ni = dMassPC[i]/(this->areaS(d)*dt*W);
|
||||
|
||||
// Molar flux of species coming from the particle (kmol/m^2/s)
|
||||
N += Ni;
|
||||
|
||||
// Sum of Ni*Cpi*Wi of emission species
|
||||
NCpW += Ni*Cp*W;
|
||||
|
||||
// Concentrations of emission species
|
||||
Cs[idc] += Ni*d/(2.0*Dab);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -195,16 +195,21 @@ protected:
|
||||
TrackData& td,
|
||||
const scalar dt, // timestep
|
||||
const label cellI, // owner cell
|
||||
const scalar Re, // Reynolds number
|
||||
const scalar Ts, // Surface temperature
|
||||
const scalar nus, // Surface kinematic viscosity
|
||||
const scalar d, // diameter
|
||||
const scalar T, // temperature
|
||||
const vector& U, // velocity
|
||||
const scalar mass, // mass
|
||||
const label idPhase, // id of phase involved in phase change
|
||||
const scalar YPhase, // total mass fraction
|
||||
const scalarField& YComponents, // component mass fractions
|
||||
scalarField& dMassPC, // mass transfer - local to particle
|
||||
scalar& Sh, // explicit particle enthalpy source
|
||||
scalar& dhsTrans // sensible enthalpy transfer to carrier
|
||||
scalar& dhsTrans, // sensible enthalpy transfer to carrier
|
||||
scalar& N, // flux of species emitted from particle
|
||||
scalar& NCpW, // sum of N*Cp*W of emission species
|
||||
scalarField& Cs // carrier conc. of emission species
|
||||
);
|
||||
|
||||
//- Update mass fraction
|
||||
@ -316,6 +321,20 @@ public:
|
||||
const label cellI
|
||||
);
|
||||
|
||||
//- Correct surface values due to emitted species
|
||||
template<class TrackData>
|
||||
void correctSurfaceValues
|
||||
(
|
||||
TrackData& td,
|
||||
const label cellI,
|
||||
const scalar T,
|
||||
const scalarField& Cs,
|
||||
scalar& rhos,
|
||||
scalar& mus,
|
||||
scalar& Pr,
|
||||
scalar& kappa
|
||||
);
|
||||
|
||||
//- Update parcel properties over the time interval
|
||||
template<class TrackData>
|
||||
void calc
|
||||
|
||||
@ -27,6 +27,8 @@ License
|
||||
#include "ThermoParcel.H"
|
||||
#include "physicoChemicalConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
|
||||
|
||||
template<class ParcelType>
|
||||
@ -78,6 +80,33 @@ void Foam::ThermoParcel<ParcelType>::cellValueSourceCorrection
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
template<class TrackData>
|
||||
void Foam::ThermoParcel<ParcelType>::calcSurfaceValues
|
||||
(
|
||||
TrackData& td,
|
||||
const label cellI,
|
||||
const scalar T,
|
||||
scalar& Ts,
|
||||
scalar& rhos,
|
||||
scalar& mus,
|
||||
scalar& Pr,
|
||||
scalar& kappa
|
||||
) const
|
||||
{
|
||||
// Surface temperature using two thirds rule
|
||||
Ts = (2.0*T + Tc_)/3.0;
|
||||
|
||||
// Assuming thermo props vary linearly with T for small dT
|
||||
scalar factor = td.TInterp().interpolate(this->position(), cellI)/Ts;
|
||||
rhos = this->rhoc_*factor;
|
||||
mus = td.muInterp().interpolate(this->position(), cellI)/factor;
|
||||
|
||||
Pr = td.constProps().Pr();
|
||||
kappa = cpc_*mus/Pr;
|
||||
}
|
||||
|
||||
|
||||
template<class ParcelType>
|
||||
template<class TrackData>
|
||||
void Foam::ThermoParcel<ParcelType>::calc
|
||||
@ -97,6 +126,19 @@ void Foam::ThermoParcel<ParcelType>::calc
|
||||
const scalar cp0 = this->cp_;
|
||||
const scalar mass0 = this->mass();
|
||||
|
||||
|
||||
// Calc surface values
|
||||
// ~~~~~~~~~~~~~~~~~~~
|
||||
scalar Ts, rhos, mus, Pr, kappa;
|
||||
calcSurfaceValues(td, cellI, T0, Ts, rhos, mus, Pr, kappa);
|
||||
|
||||
// Reynolds number
|
||||
scalar Re = this->Re(U0, d0, rhos, mus);
|
||||
|
||||
|
||||
// Sources
|
||||
// ~~~~~~~
|
||||
|
||||
// Explicit momentum source for particle
|
||||
vector Su = vector::zero;
|
||||
|
||||
@ -109,19 +151,39 @@ void Foam::ThermoParcel<ParcelType>::calc
|
||||
// Sensible enthalpy transfer from the particle to the carrier phase
|
||||
scalar dhsTrans = 0.0;
|
||||
|
||||
|
||||
// Heat transfer
|
||||
// ~~~~~~~~~~~~~
|
||||
|
||||
// Sum Ni*Cpi*Wi of emission species
|
||||
scalar NCpW = 0.0;
|
||||
|
||||
// Calculate new particle velocity
|
||||
scalar T1 =
|
||||
calcHeatTransfer(td, dt, cellI, d0, U0, rho0, T0, cp0, Sh, dhsTrans);
|
||||
calcHeatTransfer
|
||||
(
|
||||
td,
|
||||
dt,
|
||||
cellI,
|
||||
Re,
|
||||
Pr,
|
||||
kappa,
|
||||
d0,
|
||||
rho0,
|
||||
T0,
|
||||
cp0,
|
||||
NCpW,
|
||||
Sh,
|
||||
dhsTrans
|
||||
);
|
||||
|
||||
|
||||
// Motion
|
||||
// ~~~~~~
|
||||
|
||||
// Calculate new particle velocity
|
||||
vector U1 = calcVelocity(td, dt, cellI, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
vector U1 =
|
||||
calcVelocity(td, dt, cellI, Re, mus, d0, U0, rho0, mass0, Su, dUTrans);
|
||||
|
||||
|
||||
// Accumulate carrier phase source terms
|
||||
@ -149,11 +211,14 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
|
||||
TrackData& td,
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar Pr,
|
||||
const scalar kappa,
|
||||
const scalar d,
|
||||
const vector& U,
|
||||
const scalar rho,
|
||||
const scalar T,
|
||||
const scalar cp,
|
||||
const scalar NCpW,
|
||||
const scalar Sh,
|
||||
scalar& dhsTrans
|
||||
)
|
||||
@ -164,48 +229,28 @@ Foam::scalar Foam::ThermoParcel<ParcelType>::calcHeatTransfer
|
||||
}
|
||||
|
||||
// Calc heat transfer coefficient
|
||||
scalar htc = td.cloud().heatTransfer().h
|
||||
(
|
||||
d,
|
||||
U - this->Uc_,
|
||||
this->rhoc_,
|
||||
rho,
|
||||
cpc_,
|
||||
cp,
|
||||
this->muc_
|
||||
);
|
||||
|
||||
const scalar As = this->areaS(d);
|
||||
scalar htc = td.cloud().heatTransfer().htc(d, Re, Pr, kappa, NCpW);
|
||||
|
||||
if (mag(htc) < ROOTVSMALL && !td.cloud().radiation())
|
||||
{
|
||||
return T + dt*Sh/(this->volume(d)*rho*cp);
|
||||
}
|
||||
|
||||
scalar ap;
|
||||
scalar bp;
|
||||
|
||||
const scalar As = this->areaS(d);
|
||||
scalar ap = Tc_ + Sh/As/htc;
|
||||
scalar bp = 6.0*(Sh/As + htc*(Tc_ - T));
|
||||
if (td.cloud().radiation())
|
||||
{
|
||||
const scalarField& G =
|
||||
td.cloud().mesh().objectRegistry::lookupObject<volScalarField>("G");
|
||||
const scalar sigma = constant::physicoChemical::sigma.value();
|
||||
const scalar Gc = G[cellI];
|
||||
const scalar sigma = physicoChemical::sigma.value();
|
||||
const scalar epsilon = td.constProps().epsilon0();
|
||||
|
||||
ap =
|
||||
(Sh/As + htc*Tc_ + epsilon*G[cellI]/4.0)
|
||||
/(htc + epsilon*sigma*pow3(T));
|
||||
|
||||
bp =
|
||||
6.0
|
||||
*(Sh/As + htc*(Tc_ - T) + epsilon*(G[cellI]/4.0 - sigma*pow4(T)))
|
||||
/(rho*d*cp*(ap - T));
|
||||
}
|
||||
else
|
||||
{
|
||||
ap = Tc_ + Sh/As/htc;
|
||||
bp = 6.0*(Sh/As + htc*(Tc_ - T))/(rho*d*cp*(ap - T));
|
||||
ap = (ap + epsilon*Gc/(4.0*htc))/(1.0 + epsilon*sigma*pow3(T)/htc);
|
||||
bp += 6.0*(epsilon*(Gc/4.0 - sigma*pow4(T)));
|
||||
}
|
||||
bp /= rho*d*cp*(ap - T);
|
||||
|
||||
// Integrate to find the new parcel temperature
|
||||
IntegrationScheme<scalar>::integrationResult Tres =
|
||||
|
||||
@ -97,6 +97,9 @@ public:
|
||||
//- Particle scattering factor [] (radiation)
|
||||
const scalar f0_;
|
||||
|
||||
//- Default carrier Prandtl number []
|
||||
const scalar Pr_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -124,6 +127,9 @@ public:
|
||||
//- Return const access to the particle scattering factor []
|
||||
// Active for radiation only
|
||||
inline scalar f0() const;
|
||||
|
||||
//- Return const access to the default carrier Prandtl number []
|
||||
inline scalar Pr() const;
|
||||
};
|
||||
|
||||
|
||||
@ -217,11 +223,14 @@ protected:
|
||||
TrackData& td,
|
||||
const scalar dt, // timestep
|
||||
const label cellI, // owner cell
|
||||
const scalar Re, // Reynolds number
|
||||
const scalar Pr, // Prandtl number - surface
|
||||
const scalar kappa, // Thermal conductivity - surface
|
||||
const scalar d, // diameter
|
||||
const vector& U, // velocity
|
||||
const scalar rho, // density
|
||||
const scalar T, // temperature
|
||||
const scalar cp, // specific heat capacity
|
||||
const scalar NCpW, // Sum of N*Cp*W of emission species
|
||||
const scalar Sh, // explicit particle enthalpy source
|
||||
scalar& dhsTrans // sensible enthalpy transfer to carrier
|
||||
);
|
||||
@ -323,6 +332,20 @@ public:
|
||||
const label cellI
|
||||
);
|
||||
|
||||
//- Calculate surface thermo properties
|
||||
template<class TrackData>
|
||||
void calcSurfaceValues
|
||||
(
|
||||
TrackData& td,
|
||||
const label cellI,
|
||||
const scalar T,
|
||||
scalar& Ts,
|
||||
scalar& rhos,
|
||||
scalar& mus,
|
||||
scalar& Pr,
|
||||
scalar& kappa
|
||||
) const;
|
||||
|
||||
//- Update parcel properties over the time interval
|
||||
template<class TrackData>
|
||||
void calc
|
||||
|
||||
@ -37,7 +37,8 @@ inline Foam::ThermoParcel<ParcelType>::constantProperties::constantProperties
|
||||
TMin_(dimensionedScalar(this->dict().lookup("TMin")).value()),
|
||||
cp0_(dimensionedScalar(this->dict().lookup("cp0")).value()),
|
||||
epsilon0_(dimensionedScalar(this->dict().lookup("epsilon0")).value()),
|
||||
f0_(dimensionedScalar(this->dict().lookup("f0")).value())
|
||||
f0_(dimensionedScalar(this->dict().lookup("f0")).value()),
|
||||
Pr_(dimensionedScalar(this->dict().lookup("Pr")).value())
|
||||
{}
|
||||
|
||||
|
||||
@ -159,6 +160,14 @@ Foam::ThermoParcel<ParcelType>::constantProperties::f0() const
|
||||
}
|
||||
|
||||
|
||||
template <class ParcelType>
|
||||
inline Foam::scalar
|
||||
Foam::ThermoParcel<ParcelType>::constantProperties::Pr() const
|
||||
{
|
||||
return Pr_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * trackData Member Functions * * * * * * * * * * * * //
|
||||
|
||||
template<class ParcelType>
|
||||
|
||||
@ -51,7 +51,7 @@ License
|
||||
RanzMarshall, \
|
||||
ThermoCloud, \
|
||||
ParcelType \
|
||||
); \
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -73,7 +73,7 @@ License
|
||||
ThermoCloud, \
|
||||
ParcelType, \
|
||||
ThermoType \
|
||||
); \
|
||||
);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -66,19 +66,14 @@ const Foam::dictionary& Foam::DragModel<CloudType>::dict() const
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::DragModel<CloudType>::utc
|
||||
(
|
||||
const vector& Ur,
|
||||
const scalar Re,
|
||||
const scalar d,
|
||||
const scalar rhoc,
|
||||
const scalar mu
|
||||
) const
|
||||
{
|
||||
const scalar magUr = mag(Ur);
|
||||
|
||||
const scalar Re = rhoc*magUr*d/(mu + ROOTVSMALL);
|
||||
|
||||
const scalar Cd = this->Cd(Re);
|
||||
|
||||
return Cd*rhoc*magUr/8.0;
|
||||
return Cd*Re/d*mu/8.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -122,13 +122,7 @@ public:
|
||||
|
||||
//- Return momentum transfer coefficient
|
||||
// Drag force per unit particle surface area = utc(U - Up)
|
||||
scalar utc
|
||||
(
|
||||
const vector& Ur,
|
||||
const scalar d,
|
||||
const scalar rhoc,
|
||||
const scalar mu
|
||||
) const;
|
||||
scalar utc(const scalar Re, const scalar d, const scalar mu) const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -28,6 +28,8 @@ License
|
||||
#include "DataEntry.H"
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -201,7 +203,7 @@ void Foam::ConeInjection<CloudType>::setProperties
|
||||
)
|
||||
{
|
||||
// set particle velocity
|
||||
const scalar deg2Rad = constant::math::pi/180.0;
|
||||
const scalar deg2Rad = math::pi/180.0;
|
||||
|
||||
scalar t = time - this->SOI_;
|
||||
scalar ti = thetaInner_().value(t);
|
||||
@ -211,7 +213,7 @@ void Foam::ConeInjection<CloudType>::setProperties
|
||||
coneAngle *= deg2Rad;
|
||||
scalar alpha = sin(coneAngle);
|
||||
scalar dcorr = cos(coneAngle);
|
||||
scalar beta = constant::math::twoPi*this->owner().rndGen().scalar01();
|
||||
scalar beta = math::twoPi*this->owner().rndGen().scalar01();
|
||||
|
||||
vector normal = alpha*(tanVec1_*cos(beta) + tanVec2_*sin(beta));
|
||||
vector dirVec = dcorr*direction_;
|
||||
|
||||
@ -28,6 +28,8 @@ License
|
||||
#include "DataEntry.H"
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -247,7 +249,7 @@ void Foam::ConeInjectionMP<CloudType>::setProperties
|
||||
// set particle velocity
|
||||
const label i = parcelI%positions_.size();
|
||||
|
||||
const scalar deg2Rad = constant::math::pi/180.0;
|
||||
const scalar deg2Rad = math::pi/180.0;
|
||||
|
||||
scalar t = time - this->SOI_;
|
||||
scalar ti = thetaInner_().value(t);
|
||||
@ -257,7 +259,7 @@ void Foam::ConeInjectionMP<CloudType>::setProperties
|
||||
coneAngle *= deg2Rad;
|
||||
scalar alpha = sin(coneAngle);
|
||||
scalar dcorr = cos(coneAngle);
|
||||
scalar beta = constant::math::twoPi*this->owner().rndGen().scalar01();
|
||||
scalar beta = math::twoPi*this->owner().rndGen().scalar01();
|
||||
|
||||
vector normal = alpha*(tanVec1_[i]*cos(beta) + tanVec2_[i]*sin(beta));
|
||||
vector dirVec = dcorr*axes_[i];
|
||||
|
||||
@ -28,6 +28,8 @@ License
|
||||
#include "volFields.H"
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -128,9 +130,7 @@ Foam::FieldActivatedInjection<CloudType>::FieldActivatedInjection
|
||||
|
||||
// Determine total volume of particles to inject
|
||||
this->volumeTotal_ =
|
||||
nParcelsPerInjector_
|
||||
*sum(pow3(diameters_))
|
||||
*constant::math::pi/6.0;
|
||||
nParcelsPerInjector_*sum(pow3(diameters_))*math::pi/6.0;
|
||||
|
||||
// Set/cache the injector cells
|
||||
forAll(positions_, i)
|
||||
|
||||
@ -28,6 +28,8 @@ License
|
||||
#include "mathConstants.H"
|
||||
#include "meshTools.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -195,9 +197,10 @@ Foam::scalar Foam::InjectionModel<CloudType>::setNumberOfParticles
|
||||
{
|
||||
case pbMass:
|
||||
{
|
||||
nP = volume/volumeTotal_
|
||||
*massTotal_/rho
|
||||
/(parcels*constant::math::pi/6.0*pow3(diameter));
|
||||
nP =
|
||||
volume/volumeTotal_
|
||||
*massTotal_/rho
|
||||
/(parcels*math::pi/6.0*pow3(diameter));
|
||||
break;
|
||||
}
|
||||
case pbNumber:
|
||||
|
||||
@ -27,6 +27,8 @@ License
|
||||
#include "ManualInjection.H"
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -106,7 +108,7 @@ Foam::ManualInjection<CloudType>::ManualInjection
|
||||
}
|
||||
|
||||
// Determine volume of particles to inject
|
||||
this->volumeTotal_ = sum(pow3(diameters_))*constant::math::pi/6.0;
|
||||
this->volumeTotal_ = sum(pow3(diameters_))*math::pi/6.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -28,6 +28,8 @@ License
|
||||
#include "specie.H"
|
||||
#include "mathConstants.H"
|
||||
|
||||
using namespace Foam::constant;
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class CloudType>
|
||||
@ -38,15 +40,14 @@ Foam::scalarField Foam::LiquidEvaporation<CloudType>::calcXc
|
||||
{
|
||||
scalarField Xc(this->owner().mcCarrierThermo().Y().size());
|
||||
|
||||
scalar Winv = 0.0;
|
||||
forAll(Xc, i)
|
||||
{
|
||||
scalar Y = this->owner().mcCarrierThermo().Y()[i][cellI];
|
||||
Winv += Y/this->owner().mcCarrierThermo().speciesData()[i].W();
|
||||
Xc[i] = Y/this->owner().mcCarrierThermo().speciesData()[i].W();
|
||||
Xc[i] =
|
||||
this->owner().mcCarrierThermo().Y()[i][cellI]
|
||||
/this->owner().mcCarrierThermo().speciesData()[i].W();
|
||||
}
|
||||
|
||||
return Xc/Winv;
|
||||
return Xc/sum(Xc);
|
||||
}
|
||||
|
||||
|
||||
@ -136,12 +137,12 @@ void Foam::LiquidEvaporation<CloudType>::calculate
|
||||
(
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar d,
|
||||
const scalar nu,
|
||||
const scalar T,
|
||||
const scalar Ts,
|
||||
const scalar pc,
|
||||
const scalar Tc,
|
||||
const scalar nuc,
|
||||
const vector& Ur,
|
||||
scalarField& dMassPC
|
||||
) const
|
||||
{
|
||||
@ -149,13 +150,7 @@ void Foam::LiquidEvaporation<CloudType>::calculate
|
||||
scalarField Xc = calcXc(cellI);
|
||||
|
||||
// droplet surface area
|
||||
scalar A = constant::math::pi*sqr(d);
|
||||
|
||||
// Reynolds number
|
||||
scalar Re = mag(Ur)*d/(nuc + ROOTVSMALL);
|
||||
|
||||
// film temperature evaluated using the 2/3 rule
|
||||
scalar Tf = (2.0*T + Tc)/3.0;
|
||||
scalar A = math::pi*sqr(d);
|
||||
|
||||
// calculate mass transfer of each specie in liquid
|
||||
forAll(activeLiquids_, i)
|
||||
@ -163,17 +158,19 @@ void Foam::LiquidEvaporation<CloudType>::calculate
|
||||
label gid = liqToCarrierMap_[i];
|
||||
label lid = liqToLiqMap_[i];
|
||||
|
||||
// vapour diffusivity at film temperature and cell pressure [m2/s]
|
||||
scalar Dab = liquids_->properties()[lid].D(pc, Tf);
|
||||
// vapour diffusivity [m2/s]
|
||||
scalar Dab = liquids_->properties()[lid].D(pc, Ts);
|
||||
|
||||
// saturation pressure for species i at film temperature and cell
|
||||
// pressure [pa] - carrier phase pressure assumed equal to the liquid
|
||||
// vapour pressure close to the surface
|
||||
// - limited to pc if pSat > pc
|
||||
scalar pSat = min(liquids_->properties()[lid].pv(pc, Tf), pc);
|
||||
// Saturation pressure for species i [pa]
|
||||
// - carrier phase pressure assumed equal to the liquid vapour pressure
|
||||
// close to the surface
|
||||
// NOTE: if pSat > pc then particle is superheated
|
||||
// calculated evaporation rate will be greater than that of a particle
|
||||
// at boiling point, but this is not a boiling model
|
||||
scalar pSat = liquids_->properties()[lid].pv(pc, T);
|
||||
|
||||
// Schmidt number
|
||||
scalar Sc = nuc/(Dab + ROOTVSMALL);
|
||||
scalar Sc = nu/(Dab + ROOTVSMALL);
|
||||
|
||||
// Sherwood number
|
||||
scalar Sh = this->Sh(Re, Sc);
|
||||
@ -181,11 +178,11 @@ void Foam::LiquidEvaporation<CloudType>::calculate
|
||||
// mass transfer coefficient [m/s]
|
||||
scalar kc = Sh*Dab/(d + ROOTVSMALL);
|
||||
|
||||
// vapour concentration at droplet surface at film temperature [kmol/m3]
|
||||
scalar Cs = pSat/(specie::RR*Tf);
|
||||
// vapour concentration at droplet surface [kmol/m3] at film temperature
|
||||
scalar Cs = pSat/(specie::RR*Ts);
|
||||
|
||||
// vapour concentration in bulk gas at film temperature [kmol/m3]
|
||||
scalar Cinf = Xc[gid]*pc/(specie::RR*Tf);
|
||||
// vapour concentration in bulk gas [kmol/m3] at film temperature
|
||||
scalar Cinf = Xc[gid]*pc/(specie::RR*Ts);
|
||||
|
||||
// molar flux of vapour [kmol/m2/s]
|
||||
scalar Ni = max(kc*(Cs - Cinf), 0.0);
|
||||
|
||||
@ -106,12 +106,12 @@ public:
|
||||
(
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar d,
|
||||
const scalar nu,
|
||||
const scalar T,
|
||||
const scalar Ts,
|
||||
const scalar pc,
|
||||
const scalar Tc,
|
||||
const scalar nuc,
|
||||
const vector& Ur,
|
||||
scalarField& dMassPC
|
||||
) const;
|
||||
};
|
||||
|
||||
@ -65,7 +65,7 @@ void Foam::NoPhaseChange<CloudType>::calculate
|
||||
const scalar,
|
||||
const scalar,
|
||||
const scalar,
|
||||
const vector&,
|
||||
const scalar,
|
||||
scalarField&
|
||||
) const
|
||||
{
|
||||
|
||||
@ -74,12 +74,12 @@ public:
|
||||
(
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar d,
|
||||
const scalar nu,
|
||||
const scalar T,
|
||||
const scalar Ts,
|
||||
const scalar pc,
|
||||
const scalar Tc,
|
||||
const scalar nuc,
|
||||
const vector& Ur,
|
||||
scalarField& dMassPC
|
||||
) const;
|
||||
};
|
||||
|
||||
@ -140,12 +140,12 @@ public:
|
||||
(
|
||||
const scalar dt,
|
||||
const label cellI,
|
||||
const scalar Re,
|
||||
const scalar d,
|
||||
const scalar nu,
|
||||
const scalar T,
|
||||
const scalar Ts,
|
||||
const scalar pc,
|
||||
const scalar Tc,
|
||||
const scalar nuc,
|
||||
const vector& Ur,
|
||||
scalarField& dMassPC
|
||||
) const = 0;
|
||||
};
|
||||
|
||||
@ -70,7 +70,7 @@ Foam::scalar Foam::NoSurfaceReaction<CloudType>::calculate
|
||||
const scalarField&,
|
||||
const scalarField&,
|
||||
const scalarField&,
|
||||
const scalarField&,
|
||||
const scalar,
|
||||
scalarField&,
|
||||
scalarField&,
|
||||
scalarField&,
|
||||
|
||||
@ -88,7 +88,7 @@ public:
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -146,7 +146,7 @@ public:
|
||||
const scalarField& YLiquid,
|
||||
const scalarField& YSolid,
|
||||
const scalarField& YMixture,
|
||||
const scalarField& dMassVolatile,
|
||||
const scalar N,
|
||||
scalarField& dMassGas,
|
||||
scalarField& dMassLiquid,
|
||||
scalarField& dMassSolid,
|
||||
|
||||
@ -33,7 +33,8 @@ Foam::HeatTransferModel<CloudType>::HeatTransferModel(CloudType& owner)
|
||||
:
|
||||
dict_(dictionary::null),
|
||||
owner_(owner),
|
||||
coeffDict_(dictionary::null)
|
||||
coeffDict_(dictionary::null),
|
||||
BirdCorrection_(false)
|
||||
{}
|
||||
|
||||
|
||||
@ -47,7 +48,8 @@ Foam::HeatTransferModel<CloudType>::HeatTransferModel
|
||||
:
|
||||
dict_(dict),
|
||||
owner_(owner),
|
||||
coeffDict_(dict.subDict(type + "Coeffs"))
|
||||
coeffDict_(dict.subDict(type + "Coeffs")),
|
||||
BirdCorrection_(coeffDict_.lookup("BirdCorrection"))
|
||||
{}
|
||||
|
||||
|
||||
@ -82,54 +84,36 @@ const Foam::dictionary& Foam::HeatTransferModel<CloudType>::coeffDict() const
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::HeatTransferModel<CloudType>::h
|
||||
(
|
||||
const scalar dp,
|
||||
const vector& Ur,
|
||||
const scalar rhoc,
|
||||
const scalar rhop,
|
||||
const scalar cpc,
|
||||
const scalar cpp,
|
||||
const scalar muc
|
||||
) const
|
||||
const Foam::Switch& Foam::HeatTransferModel<CloudType>::BirdCorrection() const
|
||||
{
|
||||
const scalar Re = rhoc*mag(Ur)*dp/(muc + ROOTVSMALL);
|
||||
|
||||
// const scalar Pr = muc/alphac;
|
||||
const scalar Pr = this->Pr();
|
||||
|
||||
const scalar Nu = this->Nu(Re, Pr);
|
||||
|
||||
const scalar kappa = cpc*muc/Pr;
|
||||
|
||||
return Nu*kappa/dp;
|
||||
return BirdCorrection_;
|
||||
}
|
||||
|
||||
|
||||
template<class CloudType>
|
||||
Foam::scalar Foam::HeatTransferModel<CloudType>::Cu
|
||||
Foam::scalar Foam::HeatTransferModel<CloudType>::htc
|
||||
(
|
||||
const scalar dp,
|
||||
const vector& Ur,
|
||||
const scalar rhoc,
|
||||
const scalar rhop,
|
||||
const scalar cpc,
|
||||
const scalar cpp,
|
||||
const scalar muc
|
||||
const scalar Re,
|
||||
const scalar Pr,
|
||||
const scalar kappa,
|
||||
const scalar NCpW
|
||||
) const
|
||||
{
|
||||
const scalar Re = rhoc*mag(Ur)*dp/(muc + ROOTVSMALL);
|
||||
|
||||
// const scalar Pr = muc/alphac;
|
||||
const scalar Pr = this->Pr();
|
||||
|
||||
const scalar Nu = this->Nu(Re, Pr);
|
||||
|
||||
const scalar kappa = cpc*muc/Pr;
|
||||
scalar htc = Nu*kappa/dp;
|
||||
|
||||
const scalar htc = Nu*kappa/dp;
|
||||
if (BirdCorrection_ && (mag(htc) > ROOTVSMALL) && (mag(NCpW) > ROOTVSMALL))
|
||||
{
|
||||
const scalar phit = min(NCpW/htc, 50);
|
||||
if (phit > 0.001)
|
||||
{
|
||||
htc *= phit/(exp(phit) - 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
return 6.0*htc/(dp*rhop*cpp);
|
||||
return htc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -64,6 +64,9 @@ class HeatTransferModel
|
||||
//- The coefficients dictionary
|
||||
const dictionary coeffDict_;
|
||||
|
||||
//- Apply Bird's correction to the htc
|
||||
const Switch BirdCorrection_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -110,6 +113,8 @@ public:
|
||||
);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
//- Return the cloud dictionary
|
||||
@ -121,12 +126,15 @@ public:
|
||||
//- Return the owner cloud object
|
||||
const CloudType& owner() const;
|
||||
|
||||
|
||||
// Member Functions
|
||||
//- Return the Bird htc correction flag
|
||||
const Switch& BirdCorrection() const;
|
||||
|
||||
//- Flag to indicate whether model activates heat transfer model
|
||||
virtual bool active() const = 0;
|
||||
|
||||
|
||||
// Evaluation
|
||||
|
||||
//- Nusselt number
|
||||
virtual scalar Nu
|
||||
(
|
||||
@ -134,31 +142,14 @@ public:
|
||||
const scalar Pr
|
||||
) const = 0;
|
||||
|
||||
//- Prandtl number
|
||||
virtual scalar Pr() const = 0;
|
||||
|
||||
//- Return heat transfer coefficient
|
||||
virtual scalar h
|
||||
virtual scalar htc
|
||||
(
|
||||
const scalar dp,
|
||||
const vector& Ur,
|
||||
const scalar rhoc,
|
||||
const scalar rhop,
|
||||
const scalar cpc,
|
||||
const scalar cpp,
|
||||
const scalar muc
|
||||
) const;
|
||||
|
||||
//- Return linearised coefficient for temperature equation
|
||||
virtual scalar Cu
|
||||
(
|
||||
const scalar dp,
|
||||
const vector& Ur,
|
||||
const scalar rhoc,
|
||||
const scalar rhop,
|
||||
const scalar cpc,
|
||||
const scalar cpp,
|
||||
const scalar muc
|
||||
const scalar Re,
|
||||
const scalar Pr,
|
||||
const scalar kappa,
|
||||
const scalar NCpW
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
@ -35,8 +35,7 @@ Foam::RanzMarshall<CloudType>::RanzMarshall
|
||||
CloudType& cloud
|
||||
)
|
||||
:
|
||||
HeatTransferModel<CloudType>(dict, cloud, typeName),
|
||||
Pr_(dimensionedScalar(this->coeffDict().lookup("Pr")).value())
|
||||
HeatTransferModel<CloudType>(dict, cloud, typeName)
|
||||
{}
|
||||
|
||||
|
||||
@ -63,14 +62,7 @@ Foam::scalar Foam::RanzMarshall<CloudType>::Nu
|
||||
const scalar Pr
|
||||
) const
|
||||
{
|
||||
return 2.0 + 0.6*pow(Re, 0.5)*pow(Pr, 0.333);
|
||||
}
|
||||
|
||||
|
||||
template <class CloudType>
|
||||
Foam::scalar Foam::RanzMarshall<CloudType>::Pr() const
|
||||
{
|
||||
return Pr_;
|
||||
return 2.0 + 0.6*sqrt(Re)*cbrt(Pr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ Description
|
||||
namespace Foam
|
||||
{
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class RanzMarshall Declaration
|
||||
Class RanzMarshall Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template <class CloudType>
|
||||
@ -48,11 +48,6 @@ class RanzMarshall
|
||||
:
|
||||
public HeatTransferModel<CloudType>
|
||||
{
|
||||
// Private data
|
||||
|
||||
// Prandtl number
|
||||
const scalar Pr_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -76,18 +71,23 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Flag to indicate whether model activates heat transfer model
|
||||
virtual bool active() const;
|
||||
// Access
|
||||
|
||||
//- Nusselt number
|
||||
virtual scalar Nu
|
||||
(
|
||||
const scalar Re,
|
||||
const scalar Pr
|
||||
) const;
|
||||
//- Flag to indicate whether model activates heat transfer model
|
||||
virtual bool active() const;
|
||||
|
||||
//- Prandtl number
|
||||
virtual scalar Pr() const;
|
||||
//- Return the Bird correction flag
|
||||
const Switch& BirdCorrection() const;
|
||||
|
||||
|
||||
// Evaluation
|
||||
|
||||
//- Nusselt number
|
||||
virtual scalar Nu
|
||||
(
|
||||
const scalar Re,
|
||||
const scalar Pr
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -190,6 +190,7 @@ Foam::forces::forces
|
||||
directForceDensity_(false),
|
||||
fDName_(""),
|
||||
rhoRef_(VGREAT),
|
||||
pRef_(0),
|
||||
CofR_(vector::zero),
|
||||
forcesFilePtr_(NULL)
|
||||
{
|
||||
@ -282,13 +283,15 @@ void Foam::forces::read(const dictionary& dict)
|
||||
Info<< " or " << rhoName_;
|
||||
}
|
||||
|
||||
Info<< " in database." << nl
|
||||
<< " De-activating forces."
|
||||
Info<< " in database." << nl << " De-activating forces."
|
||||
<< endl;
|
||||
}
|
||||
|
||||
// Reference density needed for incompressible calculations
|
||||
rhoRef_ = readScalar(dict.lookup("rhoInf"));
|
||||
|
||||
// Reference pressure, 0 by default
|
||||
pRef_ = dict.lookupOrDefault<scalar>("pRef", 0.0);
|
||||
}
|
||||
|
||||
// Centre of rotation for moment calculations
|
||||
@ -443,13 +446,16 @@ Foam::forces::forcesMoments Foam::forces::calcForcesMoment() const
|
||||
const volSymmTensorField::GeometricBoundaryField& devRhoReffb
|
||||
= tdevRhoReff().boundaryField();
|
||||
|
||||
// Scale pRef by density for incompressible simulations
|
||||
scalar pRef = pRef_/rho(p);
|
||||
|
||||
forAllConstIter(labelHashSet, patchSet_, iter)
|
||||
{
|
||||
label patchi = iter.key();
|
||||
|
||||
vectorField Md = mesh.C().boundaryField()[patchi] - CofR_;
|
||||
|
||||
vectorField pf = Sfb[patchi]*p.boundaryField()[patchi];
|
||||
vectorField pf = Sfb[patchi]*(p.boundaryField()[patchi] - pRef);
|
||||
|
||||
fm.first().first() += rho(p)*sum(pf);
|
||||
fm.second().first() += rho(p)*sum(Md ^ pf);
|
||||
|
||||
@ -144,6 +144,9 @@ protected:
|
||||
//- Reference density needed for incompressible calculations
|
||||
scalar rhoRef_;
|
||||
|
||||
//- Reference pressure
|
||||
scalar pRef_;
|
||||
|
||||
//- Centre of rotation
|
||||
vector CofR_;
|
||||
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::Ar::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ar::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C10H22::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C10H22::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C12H26::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C12H26::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C13H28::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C13H28::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C14H30::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C14H30::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C16H34::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C16H34::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C2H5OH::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C2H5OH::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C2H6::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C2H6::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C2H6O::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C2H6O::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -101,4 +101,10 @@ inline Foam::scalar Foam::C3H6O::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C3H6O::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C3H8::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C3H8::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C4H10O::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C4H10O::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C6H14::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C6H14::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C6H6::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C6H6::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C7H16::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C7H16::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C7H8::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C7H8::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -152,6 +152,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C8H10::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C8H10::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C8H18::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C8H18::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::C9H20::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::C9H20::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::CH3OH::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::CH3OH::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,5 +102,11 @@ inline Foam::scalar Foam::CH4N2O::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::CH4N2O::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
|
||||
@ -152,6 +152,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::H2O::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::H2O::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::IC8H18::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::IC8H18::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -175,6 +175,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::IDEA::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::IDEA::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::MB::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::MB::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -153,6 +153,9 @@ public:
|
||||
//- Vapour diffussivity [m2/s]
|
||||
inline scalar D(scalar p, scalar T) const;
|
||||
|
||||
//- Vapour diffussivity [m2/s] with specified binary pair
|
||||
inline scalar D(scalar p, scalar T, scalar Wb) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
|
||||
@ -102,4 +102,10 @@ inline Foam::scalar Foam::N2::D(scalar p, scalar T) const
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::N2::D(scalar p, scalar T, scalar Wb) const
|
||||
{
|
||||
return D_.f(p, T, Wb);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user