class BetaPDF { //private variable //beta-pdf parameter alpha and beta scalar alpha_, beta_; //cutting point and number of eta-space scalarField etaCut_, N_; //detailed integration space scalarField etaSpace_; //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. Info<<"Construct Beta-PDF"< 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(scalar& a, scalar& b, scalarField& eta) { return pow(eta, a-1.0)*pow(1.0-eta, b-1.0); } scalar etaFunc(scalar& a, scalar& b, scalar& eta) { 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(scalar& xl, scalar& xh, scalar& N, scalarField& fx) { scalar evensum(0.0), oddsum(0.0), sum(0.0); scalar h = (xh - xl)/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(scalar& eta) { return interpolateXY(eta, etaSpace_, AMCfine_); } void C1coeff(scalar& mf, 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