Commit e4e42a9f authored by sergio's avatar sergio
Browse files

Merge branch 'master' into fieldSourcesLib

parents e1462229 e615b0b4
......@@ -37,6 +37,8 @@ Description
#include "vector.H"
#include "ListOps.H"
#include<list>
using namespace Foam;
......@@ -117,6 +119,35 @@ int main(int argc, char *argv[])
<< "-wordList: " << wLst << nl
<< "-stringList: " << sLst << endl;
Info<< nl
<< "Test List Iterator Constuctor" << endl;
List<vector> initialList(IStringStream("((0 1 2) (3 4 5) (6 7 8))")());
Info<< " Initial List: " << initialList << endl;
List<vector> iteratorList(initialList.begin(), initialList.end());
Info<< " Foam::List constructed from Foam::List: "
<< iteratorList << endl;
std::list<vector> stlList(initialList.begin(), initialList.end());
Info<< " std::list constructed from Foam::List: ";
std::list<vector>::iterator it;
for (it=stlList.begin(); it != stlList.end(); it++)
{
Info<< *it << " ";
}
Info<< endl;
List<vector> iteratorSTLList(stlList.begin(), stlList.end());
Info<< " Foam::List constructed from std::list: "
<< iteratorList << endl;
return 0;
}
......
......@@ -273,12 +273,16 @@ int main(int argc, char *argv[])
}
}
outFile << nl << "NORMALS pointNormals float\n";
forAll(pointNormals, i)
if (!pointNormals.empty())
{
const vector& n = pointNormals[i];
outFile << nl << "NORMALS pointNormals float\n";
outFile << n.x() << ' ' << n.y() << ' ' << n.z() << nl;
forAll(pointNormals, i)
{
const vector& n = pointNormals[i];
outFile << n.x() << ' ' << n.y() << ' ' << n.z() << nl;
}
}
Info<< "End\n" << endl;
......
......@@ -200,7 +200,7 @@ Foam::List<T>::List(InputIterator first, InputIterator last)
++iter
)
{
this->operator[](s++) = iter();
this->operator[](s++) = *iter;
}
}
......
......@@ -232,7 +232,7 @@ Foam::scalar Foam::LiquidEvaporation<CloudType>::dh
"const label, "
"const label, "
"const label"
")"
") const"
) << "Unknown enthalpyTransfer type" << abort(FatalError);
}
}
......
......@@ -157,17 +157,23 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate
// liquid volume fraction
const scalarField X(liquids_.X(Yl));
// droplet surface pressure
scalar ps = liquids_.pv(pc, T, X);
// droplet surface pressure assumed to surface vapour pressure
scalar ps = liquids_.pv(pc, Ts, X);
// vapour density at droplet surface [kg/m3]
scalar rhos = ps*liquids_.W(X)/(specie::RR*Ts);
// thermal conductivity of carrier [W/m/K]
// carrier thermo properties
scalar Hsc = 0.0;
scalar Hc = 0.0;
scalar Cpc = 0.0;
scalar kappac = 0.0;
forAll(this->owner().thermo().carrier().Y(), i)
{
const scalar Yc = this->owner().thermo().carrier().Y()[i][cellI];
scalar Yc = this->owner().thermo().carrier().Y()[i][cellI];
Hc += Yc*this->owner().thermo().carrier().H(i, Tc);
Hsc += Yc*this->owner().thermo().carrier().H(i, Ts);
Cpc += Yc*this->owner().thermo().carrier().Cp(i, Ts);
kappac += Yc*this->owner().thermo().carrier().kappa(i, Ts);
}
......@@ -189,32 +195,77 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate
// carrier phase concentration
const scalar Xc = XcMix[gid];
if (Xc*pc > pSat)
{
// saturated vapour - no phase change
}
else
{
// vapour diffusivity [m2/s]
const scalar Dab = liquids_.properties()[lid].D(ps, Ts);
// Schmidt number
const scalar Sc = nu/(Dab + ROOTVSMALL);
// Sherwood number
const scalar Sh = this->Sh(Re, Sc);
if (pSat > 0.999*pc)
{
// boiling
// const scalar deltaT = max(Tc - Td, 0.5);
const scalar deltaT = max(Tc - T, 0.5);
// liquid specific heat capacity
const scalar Cp = liquids_.properties()[lid].Cp(pc, Td);
const scalar deltaT = max(T - TBoil, 0.5);
// vapour heat of fomation
// vapour heat of formation
const scalar hv = liquids_.properties()[lid].hl(pc, Td);
// Nusselt number
const scalar Nu = 2.0 + 0.6*sqrt(Re)*cbrt(Pr);
// empirical heat transfer coefficient W/m2/K
scalar alphaS = 0.0;
if (deltaT < 5.0)
{
alphaS = 760.0*pow(deltaT, 0.26);
}
else if (deltaT < 25.0)
{
alphaS = 27.0*pow(deltaT, 2.33);
}
else
{
alphaS = 13800.0*pow(deltaT, 0.39);
}
// flash-boil vaporisation rate
const scalar Gf = alphaS*deltaT*pi*sqr(d)/hv;
// model constants
// NOTE: using Sherwood number instead of Nusselt number
const scalar A = (Hc - Hsc)/hv;
const scalar B = pi*kappac/Cpc*d*Sh;
const scalar lg = log(1.0 + Cp*deltaT/max(SMALL, hv));
scalar G = 0.0;
if (A > 0.0)
{
// heat transfer from the surroundings contributes
// to the vaporisation process
scalar Gr = 1e-5;
for (label i=0; i<50; i++)
{
scalar GrDash = Gr;
G = B/(1.0 + Gr)*log(1.0 + A*(1.0 + Gr));
Gr = Gf/G;
if (mag(Gr - GrDash)/GrDash < 1e-3)
{
break;
}
}
}
// mass transfer [kg]
dMassPC[lid] += pi*kappac*Nu*lg*d/Cp*dt;
dMassPC[lid] += (G + Gf)*dt;
}
else
{
......@@ -226,23 +277,10 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate
// molar ratio
const scalar Xr = (Xs - Xc)/max(SMALL, 1.0 - Xs);
if (Xr > 0)
{
// vapour diffusivity [m2/s]
const scalar Dab = liquids_.properties()[lid].D(pc, Td);
// Schmidt number
const scalar Sc = nu/(Dab + ROOTVSMALL);
// Sherwood number
const scalar Sh = this->Sh(Re, Sc);
// mass transfer coefficient [m/s]
const scalar kc = Sh*Dab/(d + ROOTVSMALL);
// mass transfer [kg]
dMassPC[lid] += pi*sqr(d)*kc*rhos*log(1.0 + Xr)*dt;
dMassPC[lid] += pi*d*Sh*Dab*rhos*log(1.0 + Xr)*dt;
}
}
}
......@@ -261,18 +299,24 @@ Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::dh
{
scalar dh = 0;
scalar TDash = T;
if (liquids_.properties()[idl].pv(p, T) >= 0.999*p)
{
TDash = liquids_.properties()[idl].pvInvert(p);
}
typedef PhaseChangeModel<CloudType> parent;
switch (parent::enthalpyTransfer_)
{
case (parent::etLatentHeat):
{
dh = liquids_.properties()[idl].hl(p, T);
dh = liquids_.properties()[idl].hl(p, TDash);
break;
}
case (parent::etEnthalpyDifference):
{
scalar hc = this->owner().composition().carrier().H(idc, T);
scalar hp = liquids_.properties()[idl].h(p, T);
scalar hc = this->owner().composition().carrier().H(idc, TDash);
scalar hp = liquids_.properties()[idl].h(p, TDash);
dh = hc - hp;
break;
......@@ -287,7 +331,7 @@ Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::dh
"const label, "
"const label, "
"const label"
")"
") const"
) << "Unknown enthalpyTransfer type" << abort(FatalError);
}
}
......
......@@ -27,7 +27,16 @@ Class
Description
Liquid evaporation model
- uses ideal gas assumption
- includes boiling model
- includes boiling model based on:
\verbatim
"Studies of Superheated Fuel Spray Structures and Vaporization in
GDI Engines"
Zuo, B., Gomes, A. M. and Rutland C. J.
International Journal of Engine Research, 2000, Vol. 1(4), pp. 321-336
\endverbatim
\*---------------------------------------------------------------------------*/
......
......@@ -59,6 +59,7 @@ solvers
nCellsInCoarsestLevel 10;
agglomerator faceAreaPair;
mergeLevels 1;
maxIter 20;
}
pFinal
......@@ -66,7 +67,6 @@ solvers
$p;
tolerance 1e-06;
relTol 0;
maxIter 20;
}
"(Yi|O2|N2|H2O)"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment