class BetaPDF { //private variable //raw parameter mixture fraction and mf variance scalar mf_, mfVar_; //beta-pdf parameter alpha and beta scalar alpha_, beta_; //cutting points scalarField etaCut_; //number of eta-space labelList N_; //detailed integration space scalarField etaSpace_; //pdf numerators scalarField pdfNum_; //pdf denominator scalar pdfDen_; //detailed integration space, part typedef List scalarFieldArray1d; scalarFieldArray1d etaPart_; //AMC, exp(-2*(erf^-1(2*eta - 1))^2) field //for detailed integration space scalarField AMCfine_; //flag to check forced-delta ftn //or delta ftn at oxidizer or fuel bool fdelta_ = false, delta_ox = false, delta_fu = false; public: // Constructor BetaPDF(IOdictionary& SLFMdict) : alpha_(0), beta_(0), etaCut_(SLFMdict.lookup("detailedEta")), N_(SLFMdict.lookup("detailedN")), etaPart_(N_.size()) { //Ref. F.Liu et al., INT. J. THERM. SCI. 41 (2002) 763-772. scalar del(0); label cnt(0); etaSpace_.append(etaCut_[0]); for(label i=0 ; i 500.0) { alpha_ = 500.0; beta_ = (alpha_-1.0-fmax*(alpha_-2.0))/fmax; } else if(beta_ > 500.0) { beta_ = 500.0; alpha_ = (1.0+fmax*(beta_-2.0))/(1.0-fmax); } } scalarField etaFunc(const scalar a, const scalar b, const scalarField& eta) const { return pow(eta, a-1.0)*pow(1.0-eta, b-1.0); } scalar etaFunc(const scalar a, const scalar b, const scalar eta) const { return Foam::pow(eta, a-1.0)*Foam::pow(1.0-eta, b-1.0); } //extended Simpson's rule (Numerical recipes, 2nd Ed. p.128) //for equally spaced and even N intervals (or odd N+1 points) scalar simps(const scalar xl, const scalar xh, const label N, const UList& fx) const { scalar evensum(0.0), oddsum(0.0), sum(0.0); scalar h = (xh - xl)/scalar(N); for(label i=0 ; i SMALL) { slope = 2.0/spi*Foam::exp(-1.0*Foam::pow(a1,2.0)); da = (a0 - Foam::erf(a1))/slope; a1 = a1+da; } result[i] = Foam::exp(-2.0*Foam::pow(a1,2.0)); } return result; } scalar AMC(const scalar eta) const { return interpolateXY(eta, etaSpace_, AMCfine_); } void C1coeff(const scalar mf, const scalarField& varValue, scalarField& C1table) { scalar maxVar = mf*(1.0-mf); scalarField x, fx; x.append(0.0); x.append(etaSpace_); x.append(1.0); fx.append(0.0); fx.append(AMCfine_); fx.append(0.0); for(label v=1 ; v