From e4fb1fc545a58f91f80babcedebed00c39138bf6 Mon Sep 17 00:00:00 2001 From: ignis Date: Thu, 13 Oct 2016 17:07:12 +0900 Subject: [PATCH] canteraTransport calculateDiffusivities exception handling for pure composition (Xi = 1.0) --- .../transport/cantera/canteraTransport.C | 27 ++++++++++++++++++- .../transport/cantera/canteraTransport.H | 2 ++ .../transport/cantera/canteraTransportI.H | 3 +++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C index 6f4593e5..a90d6584 100644 --- a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C +++ b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C @@ -70,6 +70,7 @@ Foam::canteraTransport::canteraTransport(Istream& is) : Thermo(is), temp_(cm_.nCanteraSp()), + Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()), X_(cm_.nCanteraSp(), 0.0) { is.check("canteraTransport::canteraTransport(Istream&)"); @@ -81,6 +82,7 @@ Foam::canteraTransport::canteraTransport(const dictionary& dict) : Thermo(dict), temp_(cm_.nCanteraSp()), + Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()), X_(cm_.nCanteraSp(), 0.0) { label si = cm_.gas()->speciesIndex(this->specie::name()); @@ -156,7 +158,30 @@ void Foam::canteraTransport::calculateDiffusivities ) const { 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; } diff --git a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H index d826b73f..52f182a6 100644 --- a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H +++ b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H @@ -132,6 +132,8 @@ class canteraTransport mutable scalarField temp_; + mutable scalarField Dij_; + static canteraManager cm_; diff --git a/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H b/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H index 87600142..a0b952a2 100644 --- a/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H +++ b/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H @@ -40,6 +40,7 @@ inline Foam::canteraTransport::canteraTransport : Thermo(t), temp_(cm_.nCanteraSp()), + Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()), X_(X) {} @@ -54,6 +55,7 @@ inline Foam::canteraTransport::canteraTransport : Thermo(t), temp_(cm_.nCanteraSp()), + Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()), X_(cm_.nCanteraSp()) { } @@ -68,6 +70,7 @@ inline Foam::canteraTransport::canteraTransport : Thermo(name, st), temp_(cm_.nCanteraSp()), + Dij_(cm_.nCanteraSp()*cm_.nCanteraSp()), X_(st.X_) {}