canteraTransport calculateDiffusivities exception handling for pure composition (Xi = 1.0)

This commit is contained in:
ignis 2016-10-13 17:07:12 +09:00
parent bfdf807537
commit e4fb1fc545
3 changed files with 31 additions and 1 deletions

View file

@ -70,6 +70,7 @@ Foam::canteraTransport<Thermo>::canteraTransport(Istream& is)
: :
Thermo(is), Thermo(is),
temp_(cm_.nCanteraSp()), temp_(cm_.nCanteraSp()),
Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()),
X_(cm_.nCanteraSp(), 0.0) X_(cm_.nCanteraSp(), 0.0)
{ {
is.check("canteraTransport<Thermo>::canteraTransport(Istream&)"); is.check("canteraTransport<Thermo>::canteraTransport(Istream&)");
@ -81,6 +82,7 @@ Foam::canteraTransport<Thermo>::canteraTransport(const dictionary& dict)
: :
Thermo(dict), Thermo(dict),
temp_(cm_.nCanteraSp()), temp_(cm_.nCanteraSp()),
Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()),
X_(cm_.nCanteraSp(), 0.0) X_(cm_.nCanteraSp(), 0.0)
{ {
label si = cm_.gas()->speciesIndex(this->specie::name()); label si = cm_.gas()->speciesIndex(this->specie::name());
@ -156,7 +158,30 @@ void Foam::canteraTransport<Thermo>::calculateDiffusivities
) const ) const
{ {
cm_.gas()->setState_TPX(T, p, X_.cdata()); cm_.gas()->setState_TPX(T, p, X_.cdata());
cm_.tr()->getMixDiffCoeffsMass(temp_.data());
// check for singular case (Xi = 1)
label idxFracOne = -1;
scalar sumX = sum(X_);
forAll (X_, i)
{
if (X_[i]/sumX == 1.0) idxFracOne = i;
}
if (idxFracOne < 0)
{
cm_.tr()->getMixDiffCoeffsMass(temp_.data());
}
else
{
label nSp = cm_.nCanteraSp();
cm_.tr()->getBinaryDiffCoeffs(nSp, Dij_.data());
forAll(temp_, i)
{
temp_[i] = Dij_[nSp*idxFracOne+i] / p;
}
}
return; return;
} }

View file

@ -132,6 +132,8 @@ class canteraTransport
mutable scalarField temp_; mutable scalarField temp_;
mutable scalarField Dij_;
static canteraManager cm_; static canteraManager cm_;

View file

@ -40,6 +40,7 @@ inline Foam::canteraTransport<Thermo>::canteraTransport
: :
Thermo(t), Thermo(t),
temp_(cm_.nCanteraSp()), temp_(cm_.nCanteraSp()),
Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()),
X_(X) X_(X)
{} {}
@ -54,6 +55,7 @@ inline Foam::canteraTransport<Thermo>::canteraTransport
: :
Thermo(t), Thermo(t),
temp_(cm_.nCanteraSp()), temp_(cm_.nCanteraSp()),
Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()),
X_(cm_.nCanteraSp()) X_(cm_.nCanteraSp())
{ {
} }
@ -68,6 +70,7 @@ inline Foam::canteraTransport<Thermo>::canteraTransport
: :
Thermo(name, st), Thermo(name, st),
temp_(cm_.nCanteraSp()), temp_(cm_.nCanteraSp()),
Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()),
X_(st.X_) X_(st.X_)
{} {}