54 Foam::scalar Foam::sampledSurfaces::mergeTol_ = 1
e-10;
61 const sampledSurface&
s
64 return s.getRegistrySurface
74 const sampledSurface&
s
77 return s.storeRegistrySurface
85 bool Foam::sampledSurfaces::removeRegistrySurface
87 const sampledSurface&
s
90 return s.removeRegistrySurface
98 void Foam::sampledSurfaces::countFields()
101 HashTable<wordHashSet> selected;
106 IOobjectList objects(obr_, obr_.time().timeName());
108 allFields = objects.names();
109 selected = objects.classes(fieldSelection_);
114 allFields = obr_.names();
115 selected = obr_.classes(fieldSelection_);
125 DynamicList<label> missed(fieldSelection_.size());
128 forAll(fieldSelection_, i)
130 if (
findStrings(fieldSelection_[i], allFields).empty())
141 << (loadFromFiles_ ?
"field file" :
"registered field")
143 << UIndirectList<wordRe>(fieldSelection_, missed) <<
endl;
148 label nVolumeFields = 0;
149 label nSurfaceFields = 0;
153 const word& clsName = iter.key();
154 const label
n = iter.val().size();
171 const sampledSurface&
s = (*this)[surfi];
172 surfaceWriter& outWriter = writers_[surfi];
177 + (
s.withSurfaceFields() ? nSurfaceFields : 0)
181 !
s.isPointData() &&
s.hasFaceIds() && !outWriter.usesFaceIds()
193 const dictionary& surfDict
197 surfDict.readIfPresent<word>(
"surfaceFormat", writeType);
203 surfDict.subOrEmptyDict(
"formatOptions").subOrEmptyDict(writeType)
212 Foam::sampledSurfaces::sampledSurfaces
221 loadFromFiles_(
false),
241 Foam::sampledSurfaces::sampledSurfaces
246 const bool loadFromFiles
251 loadFromFiles_(loadFromFiles),
289 fieldSelection_.clear();
303 const word writerType =
311 if (eptr && eptr->isDict())
315 actions_.
resize(surfs.size(), ACTION_WRITE);
316 writers_.resize(surfs.size());
317 nFaces_.resize(surfs.size(),
Zero);
323 if (!dEntry.isDict())
344 surfs.set(surfi, surf);
349 actions_[surfi] |= ACTION_STORE;
353 actions_[surfi] |= ACTION_SURF_MESH;
363 writers_[surfi].isPointData(surfs[surfi].isPointData());
366 writers_[surfi].useTimeDir(
true);
367 writers_[surfi].verbose(verbose_);
373 actions_.resize(surfi);
374 writers_.resize(surfi);
375 surfaces().transfer(surfs);
392 actions_.
resize(surfs.size(), ACTION_WRITE);
393 writers_.resize(surfs.size());
394 nFaces_.resize(surfs.size(),
Zero);
410 surfs.set(surfi, surf);
415 actions_[surfi] |= ACTION_STORE;
419 actions_[surfi] |= ACTION_SURF_MESH;
429 writers_[surfi].isPointData(surfs[surfi].isPointData());
432 writers_[surfi].useTimeDir(
true);
433 writers_[surfi].verbose(verbose_);
439 actions_.resize(surfi);
440 writers_.resize(surfi);
441 surfaces().transfer(surfs);
445 const auto& surfs = surfaces();
451 nFaces_.resize(surfs.size(),
Zero);
454 fieldSelection_.uniq();
462 Info<<
"Sampled surface:" <<
nl;
465 Info<<
" " <<
s.name() <<
" -> " << writers_[surfi].type();
466 if (actions_[surfi] & ACTION_STORE)
468 Info<<
", store on registry ("
471 if (actions_[surfi] & ACTION_SURF_MESH)
473 Info<<
", store as surfMesh (DEPRECATED)";
485 Pout<<
"sample fields:" << fieldSelection_ <<
nl
486 <<
"sample surfaces:" <<
nl <<
'(' <<
nl;
502 bool Foam::sampledSurfaces::performAction(
unsigned request)
511 if (request & actions_[surfi])
515 writers_[surfi].expire();
518 nFaces_[surfi] =
returnReduce(
s.faces().size(), sumOp<label>());
520 ok = ok || nFaces_[surfi];
527 if ((request & actions_[surfi]) & ACTION_STORE)
529 storeRegistrySurface(
s);
532 if ((request & actions_[surfi]) & ACTION_SURF_MESH)
555 const sampledSurface&
s = (*this)[surfi];
557 if (((request & actions_[surfi]) & ACTION_WRITE) && nFaces_[surfi])
559 surfaceWriter& outWriter = writers_[surfi];
561 if (outWriter.needsUpdate())
563 outWriter.setSurface(
s);
566 outWriter.open(outputPath_/
s.name());
568 outWriter.beginTime(obr_.time());
571 if (!
s.isPointData() &&
s.hasFaceIds() && !outWriter.usesFaceIds())
575 Field<label> ids(
s.faceIds());
592 writeSurface(outWriter, ids,
"Ids");
599 const IOobjectList objects(obr_, obr_.time().timeName());
601 performAction<volScalarField>(objects, request);
602 performAction<volVectorField>(objects, request);
603 performAction<volSphericalTensorField>(objects, request);
604 performAction<volSymmTensorField>(objects, request);
605 performAction<volTensorField>(objects, request);
613 [] (
const sampledSurface&
s) {
return s.withSurfaceFields(); }
617 performAction<surfaceScalarField>(objects, request);
618 performAction<surfaceVectorField>(objects, request);
619 performAction<surfaceSphericalTensorField>(objects, request);
620 performAction<surfaceSymmTensorField>(objects, request);
621 performAction<surfaceTensorField>(objects, request);
628 if (((request & actions_[surfi]) & ACTION_WRITE) && nFaces_[surfi])
633 if (!writers_[surfi].wroteData())
635 writers_[surfi].write();
638 writers_[surfi].endTime();
650 return performAction(ACTION_ALL & ~ACTION_WRITE);
659 return performAction(ACTION_ALL);
665 if (&mpm.
mesh() == &mesh_)
693 bool Foam::sampledSurfaces::needsUpdate()
const
707 bool Foam::sampledSurfaces::expire(
const bool force)
710 const scalar mergeDim = mergeTol_ * mesh_.bounds().mag();
716 sampledSurface&
s = (*this)[surfi];
718 if (
s.invariant() && !force)
728 writers_[surfi].expire();
729 writers_[surfi].mergeDim(mergeDim);
738 bool Foam::sampledSurfaces::update()
749 sampledSurface&
s = (*this)[surfi];
754 writers_[surfi].expire();
757 nFaces_[surfi] =
returnReduce(
s.faces().size(), sumOp<label>());
772 const scalar prev(mergeTol_);