40 fixedValueFvPatchVectorField(p, iF),
43 cyclicPatchLabel_(-1),
49 maxOpenFractionDelta_(0),
63 fixedValueFvPatchVectorField(ptf, p, iF, mapper),
65 cyclicPatchName_(ptf.cyclicPatchName_),
66 cyclicPatchLabel_(ptf.cyclicPatchLabel_),
67 orientation_(ptf.orientation_),
68 initWallSf_(ptf.initWallSf_),
69 initCyclicSf_(ptf.initCyclicSf_),
70 openFraction_(ptf.openFraction_),
71 openingTime_(ptf.openingTime_),
72 maxOpenFractionDelta_(ptf.maxOpenFractionDelta_),
85 fixedValueFvPatchVectorField(p, iF),
87 cyclicPatchName_(dict.
lookup(
"cyclicPatch")),
89 orientation_(readLabel(dict.
lookup(
"orientation"))),
97 fvPatchVectorField::operator=(vector::zero);
101 dict.
lookup(
"p") >> pName_;
112 fixedValueFvPatchVectorField(ptf),
114 cyclicPatchName_(ptf.cyclicPatchName_),
115 cyclicPatchLabel_(ptf.cyclicPatchLabel_),
116 orientation_(ptf.orientation_),
117 initWallSf_(ptf.initWallSf_),
118 initCyclicSf_(ptf.initCyclicSf_),
119 openFraction_(ptf.openFraction_),
120 openingTime_(ptf.openingTime_),
121 maxOpenFractionDelta_(ptf.maxOpenFractionDelta_),
133 fixedValueFvPatchVectorField(ptf, iF),
135 cyclicPatchName_(ptf.cyclicPatchName_),
136 cyclicPatchLabel_(ptf.cyclicPatchLabel_),
137 orientation_(ptf.orientation_),
138 initWallSf_(ptf.initWallSf_),
139 initCyclicSf_(ptf.initCyclicSf_),
140 openFraction_(ptf.openFraction_),
141 openingTime_(ptf.openingTime_),
142 maxOpenFractionDelta_(ptf.maxOpenFractionDelta_),
154 fixedValueFvPatchVectorField::autoMap(m);
162 const vectorField& areas = patch().boundaryMesh().mesh().faceAreas();
163 initWallSf_ =
static_cast<UList<vector> >(patch().patchSlice(areas));
164 initCyclicSf_ =
static_cast<UList<vector> >(patch().boundaryMesh()
167 ].patchSlice(areas));
176 fixedValueFvPatchVectorField::rmap(ptf, addr);
179 const vectorField& areas = patch().boundaryMesh().mesh().faceAreas();
180 initWallSf_ =
static_cast<UList<vector> >(patch().patchSlice(areas));
181 initCyclicSf_ =
static_cast<UList<vector> >(patch().boundaryMesh()
184 ].patchSlice(areas));
196 if (curTimeIndex_ != this->db().time().
timeIndex())
204 const labelList& cyclicFaceCells = cyclicPatch.patch().faceCells();
205 label nCyclicFaces = cyclicFaceCells.
size();
206 label nCyclicFacesPerSide = nCyclicFaces/2;
208 scalar forceDiff = 0;
210 for (label facei=0; facei<nCyclicFacesPerSide; facei++)
212 forceDiff += p[cyclicFaceCells[facei]]*
mag(initCyclicSf_[facei]);
215 for (label facei=nCyclicFacesPerSide; facei<nCyclicFaces; facei++)
217 forceDiff -= p[cyclicFaceCells[facei]]*
mag(initCyclicSf_[facei]);
225 this->db().time().deltaT().value()/openingTime_,
226 maxOpenFractionDelta_
228 *(orientation_*
sign(forceDiff)),
231 Info<<
"openFraction = " << openFraction_ <<
endl;
234 vectorField newSfw = (1 - openFraction_)*initWallSf_;
237 Sfw[facei] = newSfw[facei];
242 openFraction_*initCyclicSf_;
244 mag(cyclicPatch.Sf());
246 curTimeIndex_ = this->db().time().timeIndex();
268 writeEntry(
"value", os);