From 07cd88abd00227918cbc95d928b7aa095072a877 Mon Sep 17 00:00:00 2001 From: Kutalmis Bercin Date: Tue, 24 Aug 2021 10:39:35 +0100 Subject: [PATCH] ENH: distributionModels: replace input variable names with de facto conventions Previous naming conventions for input variables in the normal, multiNormal, RosinRammler, and massRosinRammler distributions were heuristic and did not reflect the de facto conventions being used in statistics. --- .../RosinRammler/RosinRammler.C | 16 ++-- .../RosinRammler/RosinRammler.H | 10 +- .../massRosinRammler/massRosinRammler.C | 12 +-- .../massRosinRammler/massRosinRammler.H | 2 +- .../multiNormal/multiNormal.C | 91 +++++++++++++------ .../multiNormal/multiNormal.H | 14 +-- .../distributionModels/normal/normal.C | 36 +++++--- .../distributionModels/normal/normal.H | 9 +- 8 files changed, 115 insertions(+), 75 deletions(-) diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C index f30a2c66e1..7edcd47b34 100644 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C +++ b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.C @@ -49,7 +49,7 @@ Foam::distributionModels::RosinRammler::RosinRammler ) : distributionModel(typeName, dict, rndGen), - d_(distributionModelDict_.get("d")), + lambda_(distributionModelDict_.getCompat("lambda", {{"d", 2112}})), n_(distributionModelDict_.get("n")) { const word parcelBasisType = @@ -63,11 +63,11 @@ Foam::distributionModels::RosinRammler::RosinRammler << endl; } - if (d_ < VSMALL || n_ < VSMALL) + if (lambda_ < VSMALL || n_ < VSMALL) { FatalErrorInFunction << "Scale/Shape parameter cannot be equal to or less than zero:" - << " d = " << d_ + << " lambda = " << lambda_ << " n = " << n_ << exit(FatalError); } @@ -79,7 +79,7 @@ Foam::distributionModels::RosinRammler::RosinRammler Foam::distributionModels::RosinRammler::RosinRammler(const RosinRammler& p) : distributionModel(p), - d_(p.d_), + lambda_(p.lambda_), n_(p.n_) {} @@ -88,16 +88,16 @@ Foam::distributionModels::RosinRammler::RosinRammler(const RosinRammler& p) Foam::scalar Foam::distributionModels::RosinRammler::sample() const { - const scalar minValueByDPowN = pow(minValue_/d_, n_); - const scalar K = 1 - exp(- pow(maxValue_/d_, n_) + minValueByDPowN); + const scalar minValueByDPowN = pow(minValue_/lambda_, n_); + const scalar K = 1 - exp(- pow(maxValue_/lambda_, n_) + minValueByDPowN); const scalar y = rndGen_.sample01(); - return d_*pow(minValueByDPowN - log(1 - K*y), 1/n_); + return lambda_*pow(minValueByDPowN - log(1 - K*y), 1/n_); } Foam::scalar Foam::distributionModels::RosinRammler::meanValue() const { - return d_; + return lambda_; } diff --git a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H index d648fed8c5..96bf12f122 100644 --- a/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H +++ b/src/lagrangian/distributionModels/RosinRammler/RosinRammler.H @@ -63,13 +63,11 @@ class RosinRammler { // Private Data - // Model coefficients + //- Scale parameter + scalar lambda_; - //- Scale parameter - scalar d_; - - //- Shape parameter - scalar n_; + //- Shape parameter + scalar n_; public: diff --git a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C index a2a0dff8b5..f0f98de16a 100644 --- a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C +++ b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.C @@ -50,14 +50,14 @@ Foam::distributionModels::massRosinRammler::massRosinRammler ) : distributionModel(typeName, dict, rndGen), - d_(distributionModelDict_.get("d")), + lambda_(distributionModelDict_.getCompat("lambda", {{"d", 2112}})), n_(distributionModelDict_.get("n")) { - if (d_ < VSMALL || n_ < VSMALL) + if (lambda_ < VSMALL || n_ < VSMALL) { FatalErrorInFunction << "Scale/Shape parameter cannot be equal to or less than zero:" - << " d = " << d_ + << " lambda = " << lambda_ << " n = " << n_ << exit(FatalError); } @@ -72,7 +72,7 @@ Foam::distributionModels::massRosinRammler::massRosinRammler ) : distributionModel(p), - d_(p.d_), + lambda_(p.lambda_), n_(p.n_) {} @@ -89,7 +89,7 @@ Foam::scalar Foam::distributionModels::massRosinRammler::sample() const const scalar a = 3/n_ + 1; const scalar P = rndGen_.sample01(); const scalar x = Math::invIncGamma(a, P); - d = d_*pow(x, 1/n_); + d = lambda_*pow(x, 1/n_); } while (d < minValue_ || d > maxValue_); return d; @@ -98,7 +98,7 @@ Foam::scalar Foam::distributionModels::massRosinRammler::sample() const Foam::scalar Foam::distributionModels::massRosinRammler::meanValue() const { - return d_; + return lambda_; } diff --git a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H index 0df4d00027..2bb623b5ab 100644 --- a/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H +++ b/src/lagrangian/distributionModels/massRosinRammler/massRosinRammler.H @@ -74,7 +74,7 @@ class massRosinRammler // Private Data //- Scale parameter - scalar d_; + scalar lambda_; //- Shape parameter scalar n_; diff --git a/src/lagrangian/distributionModels/multiNormal/multiNormal.C b/src/lagrangian/distributionModels/multiNormal/multiNormal.C index bb5b9ee3f2..09da3132dc 100644 --- a/src/lagrangian/distributionModels/multiNormal/multiNormal.C +++ b/src/lagrangian/distributionModels/multiNormal/multiNormal.C @@ -49,35 +49,67 @@ Foam::distributionModels::multiNormal::multiNormal ) : distributionModel(typeName, dict, rndGen), - range_(maxValue_ - minValue_), - expectation_(distributionModelDict_.lookup("expectation")), - variance_(distributionModelDict_.lookup("variance")), - strength_(distributionModelDict_.lookup("strength")) + mu_ + ( + distributionModelDict_.lookupCompat + ( + "mu", + {{"expectation", 2112}} + ) + ), + sigma_ + ( + distributionModelDict_.lookupCompat + ( + "sigma", + {{"variance", 2112}} + ) + ), + weight_ + ( + distributionModelDict_.lookupCompat + ( + "weight", + {{"strength", 2112}} + ) + ) { check(); - scalar sMax = 0; - label n = strength_.size(); - for (label i=0; i 0 && weight_[i] < weight_[i-1]) { - if (i!=j) - { - scalar x2 = (x - expectation_[j])/variance_[j]; - scalar y = exp(-0.5*x2*x2); - s += strength_[j]*y; - } + FatalErrorInFunction + << type() << "distribution: " + << "Weights must be specified in a monotonic order." << nl + << "Please see the row i = " << i << nl + << "weight[i-1] = " << weight_[i-1] << nl + << "weight[i] = " << weight_[i] + << exit(FatalError); } - sMax = max(sMax, s); + sum += weight_[i]; } - for (label i=0; i("variance")), - a_(0.147) + mu_ + ( + distributionModelDict_.getCompat + ( + "mu", + {{"expectation", 2112}} + ) + ), + sigma_ + ( + distributionModelDict_.getCompat + ( + "sigma", + {{"variance", 2112}} + ) + ) { - if (mag(variance_) == 0) + if (mag(sigma_) == 0) { FatalErrorInFunction << "Standard deviation cannot be zero." << nl - << " variance = " << variance_ << nl + << " sigma = " << sigma_ << nl << exit(FatalError); } @@ -69,9 +82,8 @@ Foam::distributionModels::normal::normal Foam::distributionModels::normal::normal(const normal& p) : distributionModel(p), - expectation_(p.expectation_), - variance_(p.variance_), - a_(p.a_) + mu_(p.mu_), + sigma_(p.sigma_) {} @@ -80,11 +92,11 @@ Foam::distributionModels::normal::normal(const normal& p) Foam::scalar Foam::distributionModels::normal::sample() const { - scalar a = erf((minValue_ - expectation_)/variance_); - scalar b = erf((maxValue_ - expectation_)/variance_); + scalar a = erf((minValue_ - mu_)/sigma_); + scalar b = erf((maxValue_ - mu_)/sigma_); scalar y = rndGen_.sample01(); - scalar x = Math::erfInv(y*(b - a) + a)*variance_ + expectation_; + scalar x = Math::erfInv(y*(b - a) + a)*sigma_ + mu_; // Note: numerical approximation of the inverse function yields slight // inaccuracies @@ -97,7 +109,7 @@ Foam::scalar Foam::distributionModels::normal::sample() const Foam::scalar Foam::distributionModels::normal::meanValue() const { - return expectation_; + return mu_; } diff --git a/src/lagrangian/distributionModels/normal/normal.H b/src/lagrangian/distributionModels/normal/normal.H index 5d692e5903..86543d195e 100644 --- a/src/lagrangian/distributionModels/normal/normal.H +++ b/src/lagrangian/distributionModels/normal/normal.H @@ -63,12 +63,11 @@ class normal { // Private Data - // Model coefficients + //- Mean of the parent general normal distribution + scalar mu_; - scalar expectation_; - scalar variance_; - - scalar a_; + //- Standard deviation of the parent general normal distribution + scalar sigma_; public: