Go to the documentation of this file.
39 namespace functionObjects
91 const scalar srcMinWeight =
gMin(srcWeightsSum);
92 const scalar srcMaxWeight =
gMax(srcWeightsSum);
93 const scalar srcAveWeight =
gAverage(srcWeightsSum);
99 for (
const labelList& srcFace : srcAddress)
101 const label
n = srcFace.size();
103 srcMinNbr =
min(srcMinNbr,
n);
104 srcMaxNbr =
max(srcMaxNbr,
n);
115 const scalar tgtMinWeight =
gMin(tgtWeightsSum);
116 const scalar tgtMaxWeight =
gMax(tgtWeightsSum);
117 const scalar tgtAveWeight =
gAverage(tgtWeightsSum);
122 scalar tgtAveNbr = 0;
123 for (
const labelList& tgtFace : tgtAddress)
125 const label
n = tgtFace.size();
127 tgtMinNbr =
min(tgtMinNbr,
n);
128 tgtMaxNbr =
max(tgtMaxNbr,
n);
139 << mesh_.time().timeName() <<
tab
141 << nbrPatchName <<
tab;
146 file() << distributed <<
tab;
150 << srcMinWeight <<
tab
151 << srcMaxWeight <<
tab
152 << srcAveWeight <<
tab
156 << tgtMinWeight <<
tab
157 << tgtMaxWeight <<
tab
158 << tgtAveWeight <<
tab
164 Log <<
" Patches: " <<
nl
165 <<
" Source: " << pp.
name() <<
nl
166 <<
" Target: " << nbrPatchName <<
nl;
170 Log <<
" Parallel distributed: " << distributed <<
nl;
178 <<
" | " <<
setw(w) << nbrPatchName <<
" | " <<
nl
179 <<
" min(weight) | " <<
setw(w) << srcMinWeight
180 <<
" | " <<
setw(w) << tgtMinWeight <<
" | " <<
nl
181 <<
" max(weight) | " <<
setw(w) << srcMaxWeight
182 <<
" | " <<
setw(w) << tgtMaxWeight <<
" | " <<
nl
183 <<
" ave(weight) | " <<
setw(w) << srcAveWeight
184 <<
" | " <<
setw(w) << tgtAveWeight <<
" | " <<
nl
185 <<
" min(address) | " <<
setw(w) << srcMinNbr
186 <<
" | " <<
setw(w) << tgtMinNbr <<
" | " <<
nl
187 <<
" max(address) | " <<
setw(w) << srcMaxNbr
188 <<
" | " <<
setw(w) << tgtMaxNbr <<
" | " <<
nl
189 <<
" ave(address) | " <<
setw(w) << srcAveNbr
190 <<
" | " <<
setw(w) << tgtAveNbr <<
" | " <<
nl
193 setResult(pp.
name() +
":src", pp.
name());
194 setResult(pp.
name() +
":tgt", nbrPatchName);
195 setResult(pp.
name() +
":src:min(weight)", srcMinWeight);
196 setResult(pp.
name() +
":src:max(weight)", srcMaxWeight);
197 setResult(pp.
name() +
":src:ave(weight)", srcAveWeight);
198 setResult(pp.
name() +
":src:min(address)", srcMinNbr);
199 setResult(pp.
name() +
":src:max(address)", srcMaxNbr);
200 setResult(pp.
name() +
":src:ave(address)", srcAveNbr);
201 setResult(pp.
name() +
":tgt:min(weight)", tgtMinWeight);
202 setResult(pp.
name() +
":tgt:max(weight)", tgtMaxWeight);
203 setResult(pp.
name() +
":tgt:ave(weight)", tgtAveWeight);
204 setResult(pp.
name() +
":tgt:min(address)", tgtMinNbr);
205 setResult(pp.
name() +
":tgt:max(address)", tgtMaxNbr);
206 setResult(pp.
name() +
":tgt:ave(address)", tgtAveNbr);
232 uniqueMeshPointLabels,
242 globalFaces().gather(weightSum, mergedWeights);
244 const bool isACMI = isA<cyclicACMIPolyPatch>(cpp);
251 globalFaces().gather(pp.
mask(), mergedMask);
256 instant inst(mesh_.time().value(), mesh_.time().timeName());
262 (baseTimeDir()/cpp.
name() +
"_" + side),
270 writer.beginCellData(1 + (isACMI ? 1 : 0));
323 const auto* amicpp = isA<cyclicAMIPolyPatch>(pp);
325 if (amicpp && amicpp->owner())
331 patchIDs_ = ids.sortedToc();
333 writeFileHeader(file());
335 writeFields_ =
dict.get<
bool>(
"writeFields");
355 for (
const label patchi : patchIDs_)
364 writeWeightFields(cpp);
virtual bool read(const dictionary &)
Read the field min/max data.
labelList patchIDs_
List of AMI patch IDs.
A simple wrapper around bool so that it can be read as a word: true/false, on/off,...
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Calculates points shared by more than two processor patches or cyclic patches.
virtual bool owner() const
Does this side own the patch?
A class for handling words, derived from Foam::string.
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO.
const scalarField & tgtWeightsSum() const
Type gAverage(const FieldField< Field, Type > &f)
bool read(const char *buf, int32_t &val)
Same as readInt32.
virtual void write(const coordSet &, const wordList &, const List< const Field< Type > * > &, Ostream &) const =0
General entry point for writing.
const scalarField & srcWeightsSum() const
static bool master(const label communicator=worldComm)
Am I the master process.
virtual void reportPatch(const cyclicAMIPolyPatch &pp)
Helper function to report patch information.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void writeWeightFields(const cyclicAMIPolyPatch &cpp) const
Write weight fields if writeFields=true.
virtual bool write()
Write the AMIWeights.
const labelListList & tgtAddress() const
Return const access to target patch addressing.
Specialization of Foam::functionObject for an Foam::fvMesh, providing a reference to the Foam::fvMesh...
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
#define forAll(list, i)
Loop across all elements in list.
virtual void writeHeader(Ostream &os, const string &str) const
Write a commented header to stream.
virtual bool read(const dictionary &dict)
Read.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
const polyBoundaryMesh & boundaryMesh() const
Return boundaryMesh reference.
A patch is a list of labels that address the faces in the global face list.
void writeWeightField(const cyclicAMIPolyPatch &cpp, const scalarField &weightSum, const word &side) const
Write weight field.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
label singlePatchProc() const
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
virtual const cyclicAMIPolyPatch & neighbPatch() const
Return a reference to the neighbour patch.
virtual bool read(const dictionary &dict)
Read optional controls.
OBJstream os(runTime.globalPath()/outputName)
Macros for easy insertion into run-time selection tables.
Base class for graphics format writing. Entry points are.
const List< face_type > & localFaces() const
Return patch faces addressing into local point list.
virtual bool execute()
Execute, currently does nothing.
label index() const noexcept
The index of this patch in the boundaryMesh.
Omanip< int > setw(const int i)
static unsigned int defaultPrecision() noexcept
Return the default precision.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
const AMIPatchToPatchInterpolation & AMI() const
Return a reference to the AMI interpolator.
virtual void writeCommented(Ostream &os, const string &str) const
Write a commented string to stream.
Write faces/points (optionally with fields) as a vtp file or a legacy vtk file.
addToRunTimeSelectionTable(functionObject, ObukhovLength, dictionary)
AMIWeights(const word &name, const Time &runTime, const dictionary &dict)
Construct from Time and dictionary.
static bool & parRun() noexcept
Test if this a parallel run.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
virtual void writeFileHeader(Ostream &os)
Output file header information.
const word & neighbPatchName() const
Neighbour patch name.
bool insert(const Key &key)
Insert a new entry, not overwriting existing entries.
defineTypeNameAndDebug(ObukhovLength, 0)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
Base class for writing single files from the function objects.
const word & name() const noexcept
The patch name.
An instant of time. Contains the time value and name.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Cyclic patch for Arbitrarily Coupled Mesh Interface (ACMI).
Type gMin(const FieldField< Field, Type > &f)
const Map< label > & meshPointMap() const
Mesh point map.
const labelList & meshPoints() const
Return labelList of mesh points in patch.
vtk::internalMeshWriter writer(topoMesh, topoCells, vtk::formatType::INLINE_ASCII, runTime.path()/"blockTopology")
const scalarField & mask() const
Mask field where 1 = overlap(coupled), 0 = no-overlap.
virtual void writeTabbed(Ostream &os, const string &str) const
Write a tabbed string to stream.
Type gMax(const FieldField< Field, Type > &f)
const labelListList & srcAddress() const
Return const access to source patch addressing.
Cyclic patch for Arbitrary Mesh Interface (AMI)