44 fieldTableName_(iF.
name()),
50 startSampledValues_(0),
69 fieldTableName_(iF.
name()),
70 setAverage_(
dict.getOrDefault(
"setAverage", false)),
71 perturb_(
dict.getOrDefault(
"perturb", 1
e-5)),
83 startSampledValues_(0),
95 mapMethod_ !=
"planarInterpolation"
96 && mapMethod_ !=
"nearest"
100 <<
"mapMethod should be one of 'planarInterpolation'"
104 dict.readIfPresent(
"fieldTableName", fieldTableName_);
106 if (
dict.found(
"value"))
110 Field<Type>(
"value",
dict,
p.size())
128 const timeVaryingMappedFixedValuePointPatchField<Type>& ptf,
130 const DimensionedField<Type, pointMesh>& iF,
131 const pointPatchFieldMapper& mapper
134 fixedValuePointPatchField<Type>(ptf,
p, iF, mapper),
135 fieldTableName_(ptf.fieldTableName_),
136 setAverage_(ptf.setAverage_),
137 perturb_(ptf.perturb_),
138 mapMethod_(ptf.mapMethod_),
141 startSampleTime_(-1),
142 startSampledValues_(0),
145 endSampledValues_(0),
147 offset_(ptf.offset_.clone())
159 fieldTableName_(ptf.fieldTableName_),
160 setAverage_(ptf.setAverage_),
161 perturb_(ptf.perturb_),
162 mapMethod_(ptf.mapMethod_),
163 mapperPtr_(ptf.mapperPtr_),
164 sampleTimes_(ptf.sampleTimes_),
165 startSampleTime_(ptf.startSampleTime_),
166 startSampledValues_(ptf.startSampledValues_),
167 startAverage_(ptf.startAverage_),
168 endSampleTime_(ptf.endSampleTime_),
169 endSampledValues_(ptf.endSampledValues_),
170 endAverage_(ptf.endAverage_),
171 offset_(ptf.offset_.clone())
184 fieldTableName_(ptf.fieldTableName_),
185 setAverage_(ptf.setAverage_),
186 perturb_(ptf.perturb_),
187 mapMethod_(ptf.mapMethod_),
188 mapperPtr_(ptf.mapperPtr_),
189 sampleTimes_(ptf.sampleTimes_),
190 startSampleTime_(ptf.startSampleTime_),
191 startSampledValues_(ptf.startSampledValues_),
192 startAverage_(ptf.startAverage_),
193 endSampleTime_(ptf.endSampleTime_),
194 endSampledValues_(ptf.endSampledValues_),
195 endAverage_(ptf.endAverage_),
196 offset_(ptf.offset_.clone())
209 if (startSampledValues_.size())
211 startSampledValues_.autoMap(m);
212 endSampledValues_.autoMap(m);
216 startSampleTime_ = -1;
231 refCast<const timeVaryingMappedFixedValuePointPatchField<Type>>(ptf);
233 startSampledValues_.
rmap(tiptf.startSampledValues_, addr);
234 endSampledValues_.rmap(tiptf.endSampledValues_, addr);
238 startSampleTime_ = -1;
246 const Time& time = this->db().
time();
249 if (startSampleTime_ == -1 && endSampleTime_ == -1)
251 const polyMesh& pMesh = this->
patch().boundaryMesh().mesh()();
290 /this->patch().
name()
311 && mapMethod_ !=
"planarInterpolation"
328 const fileName samplePointsDir = samplePointsFile.
path();
333 Info<<
"timeVaryingMappedFixedValuePointPatchField : In directory "
334 << samplePointsDir <<
" found times "
344 bool foundTime = mapperPtr_().findTime
356 <<
"Cannot find starting sampling values for current time "
358 <<
"Have sampling values for times "
362 <<
"\n on patch " << this->
patch().name()
363 <<
" of field " << fieldTableName_
370 if (lo != startSampleTime_)
372 startSampleTime_ = lo;
374 if (startSampleTime_ == endSampleTime_)
379 Pout<<
"checkTable : Setting startValues to (already read) "
381 /this->
patch().name()
382 /sampleTimes_[startSampleTime_].name()
385 startSampledValues_ = endSampledValues_;
386 startAverage_ = endAverage_;
392 Pout<<
"checkTable : Reading startValues from "
394 /this->
patch().name()
395 /sampleTimes_[lo].name()
400 const fileName valsFile
404 /this->patch().
name()
405 /sampleTimes_[startSampleTime_].name()
419 const rawIOField<Type> vals(io, setAverage_);
422 startAverage_ = vals.average();
425 if (vals.size() != mapperPtr_().sourceSize())
428 <<
"Number of values (" << vals.size()
429 <<
") differs from the number of points ("
430 << mapperPtr_().sourceSize()
434 startSampledValues_ = mapperPtr_().interpolate(vals);
438 if (hi != endSampleTime_)
442 if (endSampleTime_ == -1)
447 Pout<<
"checkTable : Clearing endValues" <<
endl;
449 endSampledValues_.clear();
455 Pout<<
"checkTable : Reading endValues from "
457 /this->
patch().name()
458 /sampleTimes_[endSampleTime_].name()
463 const fileName valsFile
467 /this->patch().
name()
468 /sampleTimes_[endSampleTime_].name()
483 const rawIOField<Type> vals(io, setAverage_);
486 endAverage_ = vals.average();
489 if (vals.size() != mapperPtr_().sourceSize())
492 <<
"Number of values (" << vals.size()
493 <<
") differs from the number of points ("
494 << mapperPtr_().sourceSize()
498 endSampledValues_ = mapperPtr_().interpolate(vals);
518 if (endSampleTime_ == -1)
523 Pout<<
"updateCoeffs : Sampled, non-interpolated values"
524 <<
" from start time:"
525 << sampleTimes_[startSampleTime_].
name() <<
nl;
529 wantedAverage = startAverage_;
533 scalar start = sampleTimes_[startSampleTime_].value();
534 scalar
end = sampleTimes_[endSampleTime_].value();
536 scalar
s = (this->db().time().value()-start)/(
end-start);
540 Pout<<
"updateCoeffs : Sampled, interpolated values"
541 <<
" between start time:"
542 << sampleTimes_[startSampleTime_].
name()
543 <<
" and end time:" << sampleTimes_[endSampleTime_].
name()
544 <<
" with weight:" <<
s <<
endl;
547 this->
operator==((1-s)*startSampledValues_ +
s*endSampledValues_);
548 wantedAverage = (1-
s)*startAverage_ +
s*endAverage_;
555 const Field<Type>&
fld = *
this;
561 Pout<<
"updateCoeffs :"
562 <<
" actual average:" << averagePsi
563 <<
" wanted average:" << wantedAverage
567 if (
mag(averagePsi) < VSMALL)
570 const Type offset = wantedAverage - averagePsi;
573 Pout<<
"updateCoeffs :"
574 <<
" offsetting with:" << offset <<
endl;
580 const scalar scale =
mag(wantedAverage)/
mag(averagePsi);
584 Pout<<
"updateCoeffs :"
585 <<
" scaling with:" << scale <<
endl;
594 const scalar t = this->db().time().timeOutputValue();
600 Pout<<
"updateCoeffs : set fixedValue to min:" <<
gMin(*
this)
601 <<
" max:" <<
gMax(*
this)
623 this->internalField().name(),
630 "planarInterpolation",
636 offset_->writeData(
os);