bool Foam::chemPointISAT<CompType, ThermoType>::checkSolution ( const scalarField& phiq, const scalarField& Rphiq ) { scalar eps2 = 0; scalarField dR(Rphiq - Rphi()); scalarField dphi(phiq - phi()); const scalarField& scaleFactorV(scaleFactor()); const scalarSquareMatrix& Avar(A()); bool isMechRedActive = chemistry_.mechRed()->active(); scalar dRl = 0; label dim = completeSpaceSize()-2; if (isMechRedActive) { dim = nActiveSpecies_; } // Since we build only the solution for the species, T and p are not // included for (label i=0; i<completeSpaceSize()-nAdditionalEqns_; i++) { dRl = 0; if (isMechRedActive) { label si = completeToSimplifiedIndex_[i]; // If this species is active if (si != -1) { for (label j=0; j<dim; j++) { label sj=simplifiedToCompleteIndex_[j]; dRl += Avar(si, j)*dphi[sj]; } dRl += Avar(si, nActiveSpecies_)*dphi[idT_]; dRl += Avar(si, nActiveSpecies_+1)*dphi[idp_]; if (variableTimeStep()) { dRl += Avar(si, nActiveSpecies_+2)*dphi[iddeltaT_]; } } else { dRl = dphi[i]; } } else { for (label j=0; j<completeSpaceSize(); j++) { dRl += Avar(i, j)*dphi[j]; } } eps2 += sqr((dR[i]-dRl)/scaleFactorV[i]); } eps2 = sqrt(eps2); if (eps2 > tolerance()) { return false; } else { // if the solution is in the ellipsoid of accuracy return true; } }
double Rphi1(double x){ if(x<0)return Rphi(-x); if(x<3.4)return exp(-x*x/2)/sqrt(2*pi)/(1-Phi_0(x)); return Phi_1(x); }