52 face result(x.size());
56 result[xI] = x[xI] + offset;
67 bool Foam::sampledSurfaces::verbose_(
false);
68 Foam::scalar Foam::sampledSurfaces::mergeTol_(1
e-10);
72 Foam::label Foam::sampledSurfaces::classifyFieldTypes()
76 scalarFields_.clear();
77 vectorFields_.clear();
78 sphericalTensorFields_.clear();
79 symmTensorFields_.clear();
80 tensorFields_.clear();
82 forAll(fieldNames_, fieldI)
84 const word& fieldName = fieldNames_[fieldI];
102 fieldType = io.headerClassName();
114 if (iter != mesh_.objectRegistry::end())
116 fieldType = iter()->type();
127 scalarFields_.append(fieldName);
132 vectorFields_.append(fieldName);
137 sphericalTensorFields_.append(fieldName);
142 symmTensorFields_.append(fieldName);
147 tensorFields_.append(fieldName);
157 void Foam::sampledSurfaces::writeGeometry()
const
162 const fileName outputDir = outputPath_/mesh_.time().timeName();
166 const sampledSurface& s = operator[](surfI);
172 genericFormatter_->write
176 mergeList_[surfI].points,
177 mergeList_[surfI].faces
181 else if (s.faces().size())
183 genericFormatter_->write
197 Foam::sampledSurfaces::sampledSurfaces
202 const bool loadFromFiles
207 mesh_(refCast<const fvMesh>(obr)),
208 loadFromFiles_(loadFromFiles),
214 genericFormatter_(NULL),
217 sphericalTensorFields_(),
223 outputPath_ = mesh_.time().path()/
".."/name_;
227 outputPath_ = mesh_.time().path()/name_;
244 verbose_ = verbosity;
267 const label nFields = classifyFieldTypes();
273 Pout<<
"timeName = " << mesh_.time().timeName() <<
nl
274 <<
"scalarFields " << scalarFields_ <<
nl
275 <<
"vectorFields " << vectorFields_ <<
nl
276 <<
"sphTensorFields " << sphericalTensorFields_ <<
nl
277 <<
"symTensorFields " << symmTensorFields_ <<
nl
278 <<
"tensorFields " << tensorFields_ <<
nl;
280 Pout<<
"Creating directory "
281 << outputPath_/mesh_.time().timeName() << nl <<
endl;
285 mkDir(outputPath_/mesh_.time().timeName());
290 if (nFields == 0 || genericFormatter_->separateFiles())
295 sampleAndWrite(scalarFields_);
296 sampleAndWrite(vectorFields_);
297 sampleAndWrite(sphericalTensorFields_);
298 sampleAndWrite(symmTensorFields_);
299 sampleAndWrite(tensorFields_);
308 const label nFields = fieldNames_.
size();
310 scalarFields_.reset(nFields);
311 vectorFields_.reset(nFields);
312 sphericalTensorFields_.reset(nFields);
313 symmTensorFields_.reset(nFields);
314 tensorFields_.reset(nFields);
318 "interpolationScheme",
342 mergeList_.setSize(size());
350 Pout<<
"sample fields:" << fieldNames_ <<
nl
351 <<
"sample surfaces:" <<
nl <<
"(" <<
nl;
355 Pout<<
" " << operator[](surfI) <<
endl;
389 if (
operator[](surfI).needsUpdate())
401 bool justExpired =
false;
405 if (
operator[](surfI).expire())
413 mergeList_[surfI].clear();
424 bool updated =
false;
436 if (
operator[](surfI).update())
446 scalar mergeDim = mergeTol_ * mesh_.globalData().bb().mag();
450 Pout<<
nl <<
"Merging all points within "
451 << mergeDim <<
" meter" <<
endl;
475 mergeList_[surfI].points = ListListOps::combine<pointField>
490 mergeList_[surfI].faces =
static_cast<const faceList&
>
492 ListListOps::combineOffset<faceList>
521 mergeList_[surfI].pointsMap.transfer(oldToNew);
524 mergeList_[surfI].points.transfer(newPoints);
527 faceList& faces = mergeList_[surfI].faces;
536 Pout<<
"For surface " << surfI <<
" merged from "
537 << mergeList_[surfI].pointsMap.size() <<
" points down to "
538 << mergeList_[surfI].points.size() <<
" points" <<
endl;