Merge branch 'master' into particleInteractions

This commit is contained in:
graham
2009-09-03 10:49:37 +01:00
115 changed files with 977 additions and 356 deletions

View File

@ -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>())

View File

@ -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)
{

View File

@ -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;
}
}

View File

@ -120,8 +120,7 @@ public:
);
// Destructor
//- Destructor
virtual ~functionObjectList();
@ -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();
};

View File

@ -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);

View File

@ -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.

View File

@ -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;
}
// ************************************************************************* //

View File

@ -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&
);
};

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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);

View File

@ -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,

View File

@ -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;

View File

@ -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 =

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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

View File

@ -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 =

View File

@ -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

View File

@ -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>

View File

@ -51,7 +51,7 @@ License
RanzMarshall, \
ThermoCloud, \
ParcelType \
); \
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -73,7 +73,7 @@ License
ThermoCloud, \
ParcelType, \
ThermoType \
); \
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -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;
}

View File

@ -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;
};

View File

@ -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_;

View File

@ -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];

View File

@ -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)

View File

@ -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_
nP =
volume/volumeTotal_
*massTotal_/rho
/(parcels*constant::math::pi/6.0*pow3(diameter));
/(parcels*math::pi/6.0*pow3(diameter));
break;
}
case pbNumber:

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
};

View File

@ -65,7 +65,7 @@ void Foam::NoPhaseChange<CloudType>::calculate
const scalar,
const scalar,
const scalar,
const vector&,
const scalar,
scalarField&
) const
{

View File

@ -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;
};

View File

@ -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;
};

View File

@ -70,7 +70,7 @@ Foam::scalar Foam::NoSurfaceReaction<CloudType>::calculate
const scalarField&,
const scalarField&,
const scalarField&,
const scalarField&,
const scalar,
scalarField&,
scalarField&,
scalarField&,

View File

@ -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,

View File

@ -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,

View File

@ -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;
}

View File

@ -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;
};

View File

@ -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);
}

View File

@ -48,11 +48,6 @@ class RanzMarshall
:
public HeatTransferModel<CloudType>
{
// Private data
// Prandtl number
const scalar Pr_;
public:
@ -76,18 +71,23 @@ public:
// Member Functions
// Access
//- Flag to indicate whether model activates heat transfer model
virtual bool active() const;
//- Return the Bird correction flag
const Switch& BirdCorrection() const;
// Evaluation
//- Nusselt number
virtual scalar Nu
(
const scalar Re,
const scalar Pr
) const;
//- Prandtl number
virtual scalar Pr() const;
};

View File

@ -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);

View File

@ -144,6 +144,9 @@ protected:
//- Reference density needed for incompressible calculations
scalar rhoRef_;
//- Reference pressure
scalar pRef_;
//- Centre of rotation
vector CofR_;

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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);
}
// ************************************************************************* //

View File

@ -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

View File

@ -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