43 fixedValueFvPatchVectorField(
p, iF),
46 cyclicPatchLabel_(-1),
53 maxOpenFractionDelta_(0),
67 fixedValueFvPatchVectorField(ptf,
p, iF, mapper),
69 cyclicPatchName_(ptf.cyclicPatchName_),
70 cyclicPatchLabel_(ptf.cyclicPatchLabel_),
71 orientation_(ptf.orientation_),
72 initWallSf_(ptf.initWallSf_),
73 initCyclicSf_(ptf.initCyclicSf_),
74 nbrCyclicSf_(ptf.nbrCyclicSf_),
75 openFraction_(ptf.openFraction_),
76 openingTime_(ptf.openingTime_),
77 maxOpenFractionDelta_(ptf.maxOpenFractionDelta_),
90 fixedValueFvPatchVectorField(
p, iF,
dict,
false),
91 pName_(
dict.lookupOrDefault<
word>(
"p",
"p")),
92 cyclicPatchName_(
dict.lookup(
"cyclicPatch")),
93 cyclicPatchLabel_(
p.patch().boundaryMesh().findPatchID(cyclicPatchName_)),
94 orientation_(
dict.get<
label>(
"orientation")),
96 initCyclicSf_(
p.boundaryMesh()[cyclicPatchLabel_].Sf()),
99 refCast<const cyclicFvPatch>
101 p.boundaryMesh()[cyclicPatchLabel_],
103 ).neighbFvPatch().Sf()
105 openFraction_(
dict.get<scalar>(
"openFraction")),
106 openingTime_(
dict.get<scalar>(
"openingTime")),
107 maxOpenFractionDelta_(
dict.get<scalar>(
"maxOpenFractionDelta")),
110 fvPatchVectorField::operator=(
Zero);
120 fixedValueFvPatchVectorField(ptf),
122 cyclicPatchName_(ptf.cyclicPatchName_),
123 cyclicPatchLabel_(ptf.cyclicPatchLabel_),
124 orientation_(ptf.orientation_),
125 initWallSf_(ptf.initWallSf_),
126 initCyclicSf_(ptf.initCyclicSf_),
127 nbrCyclicSf_(ptf.nbrCyclicSf_),
128 openFraction_(ptf.openFraction_),
129 openingTime_(ptf.openingTime_),
130 maxOpenFractionDelta_(ptf.maxOpenFractionDelta_),
142 fixedValueFvPatchVectorField(ptf, iF),
144 cyclicPatchName_(ptf.cyclicPatchName_),
145 cyclicPatchLabel_(ptf.cyclicPatchLabel_),
146 orientation_(ptf.orientation_),
147 initWallSf_(ptf.initWallSf_),
148 initCyclicSf_(ptf.initCyclicSf_),
149 nbrCyclicSf_(ptf.nbrCyclicSf_),
150 openFraction_(ptf.openFraction_),
151 openingTime_(ptf.openingTime_),
152 maxOpenFractionDelta_(ptf.maxOpenFractionDelta_),
164 fixedValueFvPatchVectorField::autoMap(m);
173 initWallSf_ =
patch().patchSlice(areas);
174 initCyclicSf_ =
patch().boundaryMesh()
178 nbrCyclicSf_ = refCast<const cyclicFvPatch>
184 ).neighbFvPatch().patch().patchSlice(areas);
194 fixedValueFvPatchVectorField::rmap(ptf, addr);
198 initWallSf_ =
patch().patchSlice(areas);
199 initCyclicSf_ =
patch().boundaryMesh()
203 nbrCyclicSf_ = refCast<const cyclicFvPatch>
209 ).neighbFvPatch().patch().patchSlice(areas);
221 if (curTimeIndex_ != this->db().time().
timeIndex())
228 const fvPatch& cyclicPatch =
patch().boundaryMesh()[cyclicPatchLabel_];
229 const labelList& cyclicFaceCells = cyclicPatch.patch().faceCells();
230 const fvPatch& nbrPatch = refCast<const cyclicFvPatch>
236 scalar forceDiff = 0;
239 forAll(cyclicFaceCells, facei)
241 forceDiff +=
p[cyclicFaceCells[facei]]*
mag(initCyclicSf_[facei]);
245 forAll(nbrFaceCells, facei)
247 forceDiff -=
p[nbrFaceCells[facei]]*
mag(nbrCyclicSf_[facei]);
258 this->db().time().deltaTValue()/openingTime_,
259 maxOpenFractionDelta_
261 *(orientation_*
sign(forceDiff)),
267 Info<<
"openFraction = " << openFraction_ <<
endl;
270 const vectorField newSfw((1 - openFraction_)*initWallSf_);
273 Sfw[facei] = newSfw[facei];
279 openFraction_*initCyclicSf_;
281 mag(cyclicPatch.Sf());
284 openFraction_*nbrCyclicSf_;
288 curTimeIndex_ = this->db().time().timeIndex();
291 fixedValueFvPatchVectorField::updateCoeffs();
299 os.
writeEntry(
"cyclicPatch", cyclicPatchName_);
302 os.
writeEntry(
"maxOpenFractionDelta", maxOpenFractionDelta_);
304 writeEntry(
"value", os);