36template<
class Type,
class LUType>
63template<
class Type,
class DType,
class LUType>
70 Type* __restrict__ ApsiPtr = Apsi.
begin();
73 const Type*
const __restrict__ psiPtr =
psi.begin();
75 const DType*
const __restrict__ diagPtr =
diag().begin();
77 const label*
const __restrict__ uPtr = lduAddr().upperAddr().begin();
78 const label*
const __restrict__ lPtr = lduAddr().lowerAddr().begin();
80 const LUType*
const __restrict__ upperPtr = upper().begin();
81 const LUType*
const __restrict__ lowerPtr = lower().begin();
92 const label nCells =
diag().size();
99 const label
nFaces = upper().size();
107 updateMatrixInterfaces
119template<
class Type,
class DType,
class LUType>
126 Type* __restrict__ TpsiPtr = Tpsi.
begin();
129 const Type*
const __restrict__ psiPtr =
psi.begin();
131 const DType*
const __restrict__ diagPtr =
diag().begin();
133 const label*
const __restrict__ uPtr = lduAddr().upperAddr().begin();
134 const label*
const __restrict__ lPtr = lduAddr().lowerAddr().begin();
136 const LUType*
const __restrict__ lowerPtr = lower().begin();
137 const LUType*
const __restrict__ upperPtr = upper().begin();
148 const label nCells =
diag().size();
154 const label
nFaces = upper().size();
162 updateMatrixInterfaces
174template<
class Type,
class DType,
class LUType>
180 Type* __restrict__ sumAPtr = sumA.
begin();
182 const DType* __restrict__ diagPtr =
diag().begin();
184 const label* __restrict__ uPtr = lduAddr().upperAddr().begin();
185 const label* __restrict__ lPtr = lduAddr().lowerAddr().begin();
187 const LUType* __restrict__ lowerPtr = lower().begin();
188 const LUType* __restrict__ upperPtr = upper().begin();
190 const label nCells =
diag().size();
191 const label
nFaces = upper().size();
206 forAll(interfaces_, patchi)
208 if (interfaces_.set(patchi))
210 const labelUList& pa = lduAddr().patchAddr(patchi);
222template<
class Type,
class DType,
class LUType>
229 Type* __restrict__ rAPtr = rA.
begin();
231 const Type*
const __restrict__ psiPtr =
psi.begin();
232 const DType*
const __restrict__ diagPtr =
diag().begin();
233 const Type*
const __restrict__ sourcePtr = source().begin();
235 const label*
const __restrict__ uPtr = lduAddr().upperAddr().begin();
236 const label*
const __restrict__ lPtr = lduAddr().lowerAddr().begin();
238 const LUType*
const __restrict__ upperPtr = upper().begin();
239 const LUType*
const __restrict__ lowerPtr = lower().begin();
254 const label nCells =
diag().size();
261 const label
nFaces = upper().size();
269 updateMatrixInterfaces
279template<
class Type,
class DType,
class LUType>
static const Foam::dimensionedScalar A("", Foam::dimPressure, 611.21)
Amultiplier(const Field< LUType > &A)
virtual void addAmul(Field< Type > &Apsi, const Field< Type > &psi) const
virtual ~Amultiplier()=default
Generic templated field type.
An abstract base class for implicitly-coupled interface fields e.g. processor and cyclic patch fields...
void Amul(Field< Type > &, const tmp< Field< Type > > &) const
Matrix multiplication.
void sumA(Field< Type > &) const
Sum the coefficients on each row of the matrix.
void Tmul(Field< Type > &, const tmp< Field< Type > > &) const
Matrix transpose multiplication.
iterator begin() noexcept
Return an iterator to begin traversing the UList.
A cell is defined as a list of faces with extra functionality.
tmp< Field< Type > > residual() const
Return the matrix residual.
A face is a list of labels corresponding to mesh vertices.
A class representing the concept of 1 (one) that can be used to avoid manipulating objects known to b...
A class for managing temporary objects.
const volScalarField & psi
const labelList nFaces(UPstream::listGatherValues< label >(aMesh.nFaces()))
void dot(FieldField< Field1, typename innerProduct< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
void diag(pointPatchField< vector > &, const pointPatchField< tensor > &)
#define forAll(list, i)
Loop across all elements in list.