41 cyclicAMIGAMGInterfaceField,
47 cyclicAMIGAMGInterfaceField,
53 cyclicAMIGAMGInterfaceField,
61 Foam::cyclicAMIGAMGInterfaceField::cyclicAMIGAMGInterfaceField
75 refCast<const cyclicAMILduInterfaceField>(fineInterface);
77 doTransform_ =
p.doTransform();
82 Foam::cyclicAMIGAMGInterfaceField::cyclicAMIGAMGInterfaceField
85 const bool doTransform,
91 doTransform_(doTransform),
98 Foam::cyclicAMIGAMGInterfaceField::cyclicAMIGAMGInterfaceField
113 Foam::cyclicAMIGAMGInterfaceField::cyclicAMIGAMGInterfaceField
127 const auto&
p = refCast<const cyclicAMILduInterfaceField>(
local);
129 doTransform_ =
p.doTransform();
142 recvRequests_.start(),
147 recvRequests_.clear();
153 sendRequests_.start(),
158 sendRequests_.clear();
172 const lduAddressing& lduAddr,
182 cyclicAMIInterface_.owner()
183 ? cyclicAMIInterface_.AMI()
184 : cyclicAMIInterface_.neighbPatch().AMI()
187 if (AMI.distributed())
201 <<
"Can only evaluate distributed AMI with nonBlocking" 207 lduAddr.patchAddr(cyclicAMIInterface_.neighbPatchID());
212 transformCoupleField(pnf, cmpt);
216 cyclicAMIInterface_.owner()
222 if (!recvRequests_.empty())
225 <<
"Outstanding recv request(s) on patch " 226 << cyclicAMIInterface_.index()
231 sendRequests_.clear();
253 const lduAddressing& lduAddr,
265 cyclicAMIInterface_.owner()
266 ? cyclicAMIInterface_.AMI()
267 : cyclicAMIInterface_.neighbPatch().AMI()
271 if (AMI.applyLowWeightCorrection())
284 if (AMI.distributed())
289 <<
"Can only evaluate distributed AMI with nonBlocking" 295 cyclicAMIInterface_.owner()
303 map.receive(recvRequests_, scalarRecvBufs_, work);
306 recvRequests_.
clear();
311 cyclicAMIInterface_.owner(),
318 this->addToInternalField(result, !
add, faceCells, coeffs, pnf);
324 lduAddr.patchAddr(cyclicAMIInterface_.neighbPatchID());
329 transformCoupleField(work, cmpt);
334 cyclicAMIInterface_.owner(),
341 this->addToInternalField(result, !
add,
faceCells, coeffs, pnf);
errorManipArg< error, int > exit(error &err, const int errNo=1)
GAMG agglomerated cyclic AMI interface.
Field< solveScalar > solveScalarField
commsTypes
Communications types.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
Type & refCast(U &obj)
A dynamic_cast (for references) to Type reference.
label readLabel(const char *buf)
Parse entire buffer as a label, skipping leading/trailing whitespace.
Smooth ATC in cells next to a set of patches supplied by type.
virtual void initInterfaceMatrixUpdate(solveScalarField &result, const bool add, const lduAddressing &lduAddr, const label patchId, const solveScalarField &psiInternal, const scalarField &coeffs, const direction cmpt, const Pstream::commsTypes commsType) const
Initialise neighbour matrix update.
An abstract base class for implicitly-coupled interface fields e.g. processor and cyclic patch fields...
Macros for easy insertion into run-time selection tables.
UList< label > labelUList
A UList of labels.
static label commWarn(const label communicator) noexcept
Alter communicator debugging setting. Warns for use of any communicator differing from specified...
Abstract base class for cyclic AMI coupled interfaces.
void clear()
Clear the list, i.e. set size to zero.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
A list of pointers to objects of type <T>, without allocation/deallocation management of the pointers...
virtual bool ready() const
Are all (receive) data available?
errorManip< error > abort(error &err)
void add(FieldField< Field1, typename typeOfSum< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
virtual void updateInterfaceMatrix(solveScalarField &result, const bool add, const lduAddressing &lduAddr, const label patchId, const solveScalarField &psiInternal, const scalarField &coeffs, const direction cmpt, const Pstream::commsTypes commsType) const
Update result field based on interface functionality.
OBJstream os(runTime.globalPath()/outputName)
defineTypeNameAndDebug(combustionModel, 0)
Abstract base class for GAMG agglomerated interfaces.
::Foam::direction rank(const expressions::valueTypeCode) noexcept
The vector-space rank associated with given valueTypeCode.
"nonBlocking" (immediate) : (MPI_Isend, MPI_Irecv)
Abstract base class for GAMG agglomerated interface fields.
List< label > labelList
A List of labels.
virtual void write(Ostream &) const
Write to stream.
bool readBool(Istream &is)
Read bool from stream using Foam::Switch(Istream&)
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)
static bool finishedRequests(const label pos, label len=-1)
Non-blocking comms: have all requests (from position onwards) finished? Corresponds to MPI_Testall() ...
static constexpr const zero Zero
Global zero (0)