39 namespace functionObjects
52 Foam::scalar Foam::functionObjects::sampledSurfaces::mergeTol_ = 1
e-10;
57 bool Foam::functionObjects::sampledSurfaces::needsUpdate()
const
61 if (
operator[](si).needsUpdate())
71 bool Foam::functionObjects::sampledSurfaces::update()
85 if (
operator[](si).update())
95 scalar mergeDim = mergeTol_*mesh_.bounds().mag();
99 Pout<<
nl <<
"Merging all points within "
100 << mergeDim <<
" metre" <<
endl;
105 sampledSurface&
s = operator[](si);
121 SubList<face>(
s.faces(),
s.faces().size()),
125 mergeList_[si].faces,
126 mergeList_[si].pointsMap
147 mesh_.
time().globalPath()
153 interpolationScheme_(
word::null),
172 bool surfacesFound =
dict.found(
"surfaces");
176 dict.lookup(
"fields") >> fields_;
178 dict.lookup(
"interpolationScheme") >> interpolationScheme_;
180 dict.readIfPresent(
"writeEmpty", writeEmpty_);
182 const word writeType(
dict.lookup(
"surfaceFormat"));
187 if (
dict.isDict(
"surfaces"))
208 dict.lookup(
"surfaces"),
217 mergeList_.setSize(size());
221 mergeList_[si].clear();
239 Pout<<
"sample fields:" << fields_ <<
nl
240 <<
"sample surfaces:" <<
nl <<
"(" <<
nl;
244 Pout<<
" " << operator[](si) <<
endl;
284 Pout<<
"Creating directory "
285 << outputPath_/mesh_.time().
name() <<
nl <<
endl;
289 mkDir(outputPath_/mesh_.time().name());
296 #define FoundFieldType(Type, nullArg) \
297 || foundObject<VolField<Type>>(fields_[fieldi]) \
298 || foundObject<SurfaceField<Type>>(fields_[fieldi])
305 cannotFindObject(fields_[fieldi]);
307 #undef FoundFieldType
312 #define DeclareInterpolations(Type, nullArg) \
313 HashPtrTable<interpolation<Type>> interpolation##Type##s;
315 #undef DeclareInterpolations
322 #define GenerateFieldTypeValues(Type, nullArg) \
323 PtrList<Field<Type>> field##Type##Values = \
324 sampleType<Type>(surfi, fieldNames, interpolation##Type##s);
326 #undef GenerateFieldTypeValues
333 && (mergeList_[surfi].faces.size() || writeEmpty_)
338 outputPath_/mesh_.time().name(),
340 mergeList_[surfi].points,
341 mergeList_[surfi].faces,
345 , field##Type##Values
353 if (
s.faces().size() || writeEmpty_)
357 outputPath_/mesh_.time().name(),
364 , field##Type##Values
383 operator[](si).movePoints();
387 mergeList_[si].clear();
399 if (&map.
mesh() == &mesh_)
403 operator[](si).topoChange(map);
407 mergeList_[si].clear();
419 if (&map.
mesh() == &mesh_)
423 operator[](si).mapMesh(map);
427 mergeList_[si].clear();
439 if (&map.
mesh() == &mesh_)
443 operator[](si).distribute(map);
447 mergeList_[si].clear();
Functions used by OpenFOAM that are specific to POSIX compliant operating systems and need to be repl...
#define forAll(list, i)
Loop across all elements in list.
#define forAllConstIter(Container, container, iter)
Iterate across all elements in the container object of type.
Macros for easy insertion into run-time selection tables.
virtual const fileName & name() const
Return the name of the stream.
void append(const T &)
Append an element at the end of the list.
virtual const fileName & name() const
Return the name of the stream.
const Field< PointType > & points() const
Return reference to global points.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
static bool master(const label communicator=0)
Am I the master process.
static bool & parRun()
Is this a parallel run?
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
Abstract base-class for Time/database functionObjects.
Specialisation of Foam::functionObject for an Foam::fvMesh, providing a reference to the Foam::fvMesh...
Set of surfaces to sample.
virtual wordList fields() const
Return the list of fields required.
virtual void topoChange(const polyTopoChangeMap &)
Update topology using the given map.
virtual void distribute(const polyDistributionMap &)
Redistribute or update using the given distribution map.
virtual void mapMesh(const polyMeshMap &)
Update from another mesh using the given map.
virtual void movePoints(const polyMesh &)
Update for mesh point-motion.
virtual ~sampledSurfaces()
Destructor.
sampledSurfaces(const word &name, const Time &time, const dictionary &dict)
Construct from Time and dictionary.
virtual bool execute()
Execute, currently does nothing.
virtual bool write()
Sample and write.
virtual bool read(const dictionary &)
Read the sampledSurfaces dictionary.
Writes run time, CPU time and clock time and optionally the CPU and clock times per time step.
functionObject base class for writing single files
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
const polyMesh & mesh() const
Return polyMesh.
Class containing mesh-to-mesh mapping information.
const polyMesh & mesh() const
Return polyMesh.
Mesh consisting of general polyhedral cells.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
const polyMesh & mesh() const
Return polyMesh.
Class used for the PtrLists read-construction.
An abstract class for surfaces with sampling.
static autoPtr< sampledSurface > New(const word &name, const polyMesh &, const dictionary &)
Return a reference to the selected surface.
static autoPtr< surfaceWriter > New(const word &writeType, const IOstream::streamFormat writeFormat, const IOstream::compressionType writeCompression)
Select given write options.
A class for handling words, derived from string.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
static List< word > fieldNames
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.name(), lagrangian::cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Info<< "Calculating turbulent flame speed field St\n"<< endl;volScalarField St(IOobject("St", runTime.name(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), flameWrinkling->Xi() *Su);multivariateSurfaceInterpolationScheme< scalar >::fieldTable fields
const dimensionedScalar e
Elementary charge.
defineTypeNameAndDebug(fvMeshFunctionObject, 0)
addToRunTimeSelectionTable(functionObject, fvModel, dictionary)
Ostream & decrIndent(Ostream &os)
Decrement the indent level.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
bool mkDir(const fileName &, mode_t=0777)
Make a directory and return an error if it could not be created.
Ostream & endl(Ostream &os)
Add newline and flush stream.
FOR_ALL_FIELD_TYPES(makeDimensionedPointFieldFunctions)
Ostream & incrIndent(Ostream &os)
Increment the indent level.
PrimitivePatch< SubList< face >, const pointField & > primitivePatch
Addressing for a faceList slice.
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
prefixOSstream Pout(cout, "Pout")
Ostream & indent(Ostream &os)
Indent stream.
points setSize(newPointi)
#define FoundFieldType(Type, nullArg)
#define FieldTypeValuesParameter(Type, nullArg)
#define DeclareInterpolations(Type, nullArg)
#define GenerateFieldTypeValues(Type, nullArg)