From b77787de0b4a5dcd8d5fdb3f83e83f866b3bc389 Mon Sep 17 00:00:00 2001 From: Mithu Debnath Date: Mon, 5 Apr 2021 16:40:34 -0600 Subject: [PATCH 1/4] implement nonlinear Beljaars functions in the fixedheatingrate B.C. --- .../fixedHeatingRateFvPatchField.C | 56 ++++++++++++++++--- .../fixedHeatingRateFvPatchField.H | 9 +++ 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C index 3fc05c92c..6569d70f4 100755 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C @@ -55,6 +55,11 @@ fixedHeatingRateFvPatchField betaH_(9.0), gammaH_(4.7), alphaH_(0.74), + a_(0.5), + b_(0.667), + c_(5.0), + d_(1.0), + nonlinear_(false), averageType_("local"), tLast_(db().time().timeOutputValue()) {} @@ -79,6 +84,11 @@ fixedHeatingRateFvPatchField betaH_(ptf.betaH_), gammaH_(ptf.gammaH_), alphaH_(ptf.alphaH_), + a_(ptf.a_), + b_(ptf.b_), + c_(ptf.c_), + d_(ptf.d_), + nonlinear_(ptf.nonlinear_), averageType_(ptf.averageType_), tLast_(ptf.tLast_) {} @@ -102,6 +112,11 @@ fixedHeatingRateFvPatchField betaH_(readScalar(dict.lookup("betaH"))), gammaH_(readScalar(dict.lookup("gammaH"))), alphaH_(readScalar(dict.lookup("alphaH"))), + a_(dict.lookupOrDefault("a",0.5)), + b_(dict.lookupOrDefault("b",0.5)), + c_(dict.lookupOrDefault("c",5.0)), + d_(dict.lookupOrDefault("d",1.0)), + nonlinear_(dict.lookupOrDefault(nonlinear_,false)), averageType_(dict.lookupOrDefault("averageType","local")), tLast_(db().time().timeOutputValue()) {} @@ -123,6 +138,11 @@ fixedHeatingRateFvPatchField betaH_(wfpf.betaH_), gammaH_(wfpf.gammaH_), alphaH_(wfpf.alphaH_), + a_(wfpf.a_), + b_(wfpf.b_), + c_(wfpf.c_), + d_(wfpf.d_), + nonlinear_(wfpf.nonlinear_), averageType_(wfpf.averageType_), tLast_(wfpf.tLast_) {} @@ -145,6 +165,11 @@ fixedHeatingRateFvPatchField betaH_(wfpf.betaH_), gammaH_(wfpf.gammaH_), alphaH_(wfpf.alphaH_), + a_(wfpf.a_), + b_(wfpf.b_), + c_(wfpf.c_), + d_(wfpf.d_), + nonlinear_(wfpf.nonlinear_), averageType_(wfpf.averageType_), tLast_(wfpf.tLast_) {} @@ -708,11 +733,19 @@ void fixedHeatingRateFvPatchField::qwEvaluate // form the "zeta" variable, which is z/L scalar zeta0 = z1/L0; - // form psiM - scalar psiM0 = -gammaM * zeta0; - - // form psiH - scalar psiH0 = -gammaH * zeta0; + // form psiM, psiH + scalar psiM0; + scalar psiH0; + if (nonlinear_) + { + psiM0 = -a_*zeta0 - b_*(zeta0-c_/d_)*Foam::exp(-d_*zeta0) - b_*c_/d_; + psiH0 = -gammaH * zeta0; + } + else + { + psiM0 = -gammaM * zeta0; + psiH0 = -gammaH * zeta0; + } // update u* scalar uStarOld = uStar0; @@ -730,8 +763,17 @@ void fixedHeatingRateFvPatchField::qwEvaluate qw = qw0; uStar = uStar0; L = L0; - phiM = 1.0 + (gammaM * zeta0); - phiH = alphaH + (gammaH * zeta0); + if (nonlinear_) + { + // non dimensional wind and temperature profiles from Beljaars 1991 + phiM = 1.0 + (zeta0*(a_+b_*Foam::exp(-d_*zeta0)*(1+c_-d_*zeta0))); + phiH = alphaH + zeta0*(a_*Foam::pow((1+0.6667*a_*zeta0),0.5))+ zeta0*(b_*Foam::exp(-d_*zeta0))*(1+c_-d_*zeta0); + } + else + { + phiM = 1.0 + (gammaM * zeta0); + phiH = alphaH + (gammaH * zeta0); + } } while (((mag(uStarDiff) > tol) || (mag(qwDiff) > tol)) && (iter < iterMax-1)); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H index a6d5d6b05..86faa9a40 100755 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H @@ -83,6 +83,15 @@ private: // -Constant for Monin-Obuhkov temperature scalaing law scalar alphaH_; + + // Constants for Beljaars equation + scalar a_; + scalar b_; + scalar c_; + scalar d_; + + // Turn on nonlinear Beljaars stability functions + Switch nonlinear_; // -Type of application of Monin-Obuhkov scaling, local or nonlocal word averageType_; From 7ab91d916e5e3ce30bf06306b0b7473714e71672 Mon Sep 17 00:00:00 2001 From: Mithu Debnath Date: Mon, 5 Apr 2021 17:06:53 -0600 Subject: [PATCH 2/4] fixed nonlinear flag --- .../fixedHeatingRate/fixedHeatingRateFvPatchField.C | 2 +- .../fixedHeatingRate/fixedHeatingRateFvPatchField.H | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C index 6569d70f4..f52d8172e 100755 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C @@ -116,7 +116,7 @@ fixedHeatingRateFvPatchField b_(dict.lookupOrDefault("b",0.5)), c_(dict.lookupOrDefault("c",5.0)), d_(dict.lookupOrDefault("d",1.0)), - nonlinear_(dict.lookupOrDefault(nonlinear_,false)), + nonlinear_(dict.lookupOrDefault("nonlinear",false)), averageType_(dict.lookupOrDefault("averageType","local")), tLast_(db().time().timeOutputValue()) {} diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H index 86faa9a40..3196ffa6b 100755 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.H @@ -91,7 +91,7 @@ private: scalar d_; // Turn on nonlinear Beljaars stability functions - Switch nonlinear_; + bool nonlinear_; // -Type of application of Monin-Obuhkov scaling, local or nonlocal word averageType_; From 2f85260dd01c55784cfb9e45b836763517469516 Mon Sep 17 00:00:00 2001 From: Eliot Quon Date: Mon, 5 Apr 2021 17:26:35 -0600 Subject: [PATCH 3/4] Print coeffs for nonlinear path --- .../fixedHeatingRate/fixedHeatingRateFvPatchField.C | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C index f52d8172e..8b9497f4d 100755 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C @@ -119,7 +119,16 @@ fixedHeatingRateFvPatchField nonlinear_(dict.lookupOrDefault("nonlinear",false)), averageType_(dict.lookupOrDefault("averageType","local")), tLast_(db().time().timeOutputValue()) -{} +{ + if (nonlinear_) + { + Info<< "Using nonlinear Beljaars functions with:" << endl + << tab << "a = " << a_ << endl + << tab << "b = " << b_ << endl + << tab << "c = " << c_ << endl + << tab << "d = " << d_ << endl; + } +} fixedHeatingRateFvPatchField:: From e8ed6f6f71b4f4e90bdaf9080b3b0250f54eacc7 Mon Sep 17 00:00:00 2001 From: Mithu Debnath Date: Mon, 5 Apr 2021 19:24:09 -0600 Subject: [PATCH 4/4] Updated the coefficients and temperature stability function --- .../fixedHeatingRateFvPatchField.C | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C index 8b9497f4d..4f575b6d6 100755 --- a/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/surfaceTemperatureFluxModels/fixedHeatingRate/fixedHeatingRateFvPatchField.C @@ -55,10 +55,10 @@ fixedHeatingRateFvPatchField betaH_(9.0), gammaH_(4.7), alphaH_(0.74), - a_(0.5), + a_(1), b_(0.667), c_(5.0), - d_(1.0), + d_(0.35), nonlinear_(false), averageType_("local"), tLast_(db().time().timeOutputValue()) @@ -112,10 +112,10 @@ fixedHeatingRateFvPatchField betaH_(readScalar(dict.lookup("betaH"))), gammaH_(readScalar(dict.lookup("gammaH"))), alphaH_(readScalar(dict.lookup("alphaH"))), - a_(dict.lookupOrDefault("a",0.5)), - b_(dict.lookupOrDefault("b",0.5)), + a_(dict.lookupOrDefault("a",1.0)), + b_(dict.lookupOrDefault("b",0.667)), c_(dict.lookupOrDefault("c",5.0)), - d_(dict.lookupOrDefault("d",1.0)), + d_(dict.lookupOrDefault("d",0.35)), nonlinear_(dict.lookupOrDefault("nonlinear",false)), averageType_(dict.lookupOrDefault("averageType","local")), tLast_(db().time().timeOutputValue()) @@ -748,7 +748,7 @@ void fixedHeatingRateFvPatchField::qwEvaluate if (nonlinear_) { psiM0 = -a_*zeta0 - b_*(zeta0-c_/d_)*Foam::exp(-d_*zeta0) - b_*c_/d_; - psiH0 = -gammaH * zeta0; + psiH0 = 1-Foam::pow((1+0.667*a_*zeta0),1.5) - b_*(zeta0-c_/d_)*Foam::exp(-d_*zeta0)-b_*c_/d_; } else { @@ -776,7 +776,7 @@ void fixedHeatingRateFvPatchField::qwEvaluate { // non dimensional wind and temperature profiles from Beljaars 1991 phiM = 1.0 + (zeta0*(a_+b_*Foam::exp(-d_*zeta0)*(1+c_-d_*zeta0))); - phiH = alphaH + zeta0*(a_*Foam::pow((1+0.6667*a_*zeta0),0.5))+ zeta0*(b_*Foam::exp(-d_*zeta0))*(1+c_-d_*zeta0); + phiH = 1 + zeta0*(a_*Foam::pow((1+0.6667*a_*zeta0),0.5))+ zeta0*(b_*Foam::exp(-d_*zeta0))*(1+c_-d_*zeta0); } else {