27#include "addToRunTimeSelectionTable.H"
36 const DimensionedField<scalar, volMesh>& iF
39 fixedGradientFvPatchScalarField(
p, iF),
54 const DimensionedField<scalar, volMesh>& iF,
55 const fvPatchFieldMapper& mapper
58 fixedGradientFvPatchScalarField(ptf,
p, iF, mapper),
72 patchType() = ptf.patchType();
76 mapper(gradient(), ptf.gradient());
79 if (notNull(iF) && iF.size())
81 scalarField::operator=
86 patchInternalField() + gradient()*(patch().nf() & patch().delta())
100 const DimensionedField<scalar, volMesh>& iF,
101 const dictionary& dict
104 fixedGradientFvPatchScalarField(
p, iF),
105 krName_(dict.lookupOrDefault<word>(
"kr",
"kr")),
106 q_(
"q", dict,
p.size()),
107 shape_(dict.lookupOrDefault<word>(
"shape",
"fixed")),
108 qmax_(dict.lookupOrDefault<scalar>(
"qmax", 0)),
109 qmin_(dict.lookupOrDefault<scalar>(
"qmin", 0)),
110 x0_(dict.lookupOrDefault<scalar>(
"x0", 0)),
111 z0_(dict.lookupOrDefault<scalar>(
"z0_", 0)),
112 c_(dict.lookupOrDefault<scalar>(
"c", 1)),
113 x1_(dict.lookupOrDefault<scalar>(
"x1", 0)),
114 x2_(dict.lookupOrDefault<scalar>(
"x2", 1)),
115 q1_(dict.lookupOrDefault<scalar>(
"q1", 0)),
116 q2_(dict.lookupOrDefault<scalar>(
"q2", 0))
118 if (dict.found(
"value") && dict.found(
"gradient"))
120 fvPatchField<scalar>::operator=
122 scalarField(
"value", dict,
p.size())
124 gradient() = scalarField(
"gradient", dict,
p.size());
128 fvPatchField<scalar>::operator=(patchInternalField());
138 fixedGradientFvPatchScalarField(ptf),
139 krName_(ptf.krName_),
156 const DimensionedField<scalar, volMesh>& iF
159 fixedGradientFvPatchScalarField(ptf, iF),
160 krName_(ptf.krName_),
183 const IOdictionary& thermophysicalProperties = db().lookupObject<IOdictionary>(
"thermophysicalProperties");
185 dimensionedScalar
kr(thermophysicalProperties.subDict(
"mixture").subDict(
"porousMedia").lookup(krName_));
186 gradient() = q_/
kr.value();
188 if(shape_==
"gaussian2d")
190 scalarField x(this->patch().Cf().component(0));
191 gradient()=(qmin_ + (qmax_-qmin_)*exp(-((x-x0_)*(x-x0_))/(2*c_*c_)))/
kr.value();
192 }
else if(shape_==
"gaussian3d")
194 scalarField x(this->patch().Cf().component(0));
195 scalarField y(this->patch().Cf().component(2));
196 gradient()=(qmin_ + (qmax_-qmin_)*exp(-((x-x0_)*(x-x0_) + (y-z0_)*(y-z0_))/(2*c_*c_)))/
kr.value();
197 }
else if(shape_==
"linear2d")
199 scalar slope = (q2_ - q1_)/(x2_ - x1_);
200 scalarField x(this->patch().Cf().component(0));
201 gradient()=((x-x1_)*slope + q1_)/
kr.value();
203 fixedGradientFvPatchScalarField::updateCoeffs();
208 fixedGradientFvPatchScalarField::write(os);
209 writeEntry(os,
"q", q_);
210 writeEntry(os,
"value", *
this);
211 writeEntryIfDifferent<word>(os,
"kr",
"kr",krName_);
212 writeEntry(os,
"shape", shape_);
213 if(shape_==
"gaussian2d")
215 writeEntry(os,
"x0", x0_);
216 writeEntry(os,
"c", c_);
217 writeEntry(os,
"qmin", qmin_);
218 writeEntry(os,
"qmax", qmax_);
219 }
else if(shape_==
"gaussian3d")
221 writeEntry(os,
"x0", x0_);
222 writeEntry(os,
"z0", z0_);
223 writeEntry(os,
"c", c_);
224 writeEntry(os,
"qmin", qmin_);
225 writeEntry(os,
"qmax", qmax_);
virtual void write(Ostream &) const
virtual void updateCoeffs()
HydrothermalHeatFlux(const fvPatch &, const DimensionedField< scalar, volMesh > &)
makePatchTypeField(fvPatchScalarField, HydrothermalHeatFlux)