48 solveScalar* __restrict__ ApsiPtr = Apsi.
begin();
51 const solveScalar*
const __restrict__ psiPtr =
psi.begin();
53 const scalar*
const __restrict__ diagPtr =
diag().
begin();
55 const label*
const __restrict__ uPtr = addr.upperAddr().begin();
56 const label*
const __restrict__ lPtr = addr.lowerAddr().begin();
58 const scalar*
const __restrict__ upperPtr =
upper().
begin();
59 const scalar*
const __restrict__ lowerPtr =
lower().
begin();
81 const label*
const __restrict__ oStartPtr =
82 addr.ownerStartAddr().begin();
83 const label*
const __restrict__ loStartPtr =
84 addr.losortStartAddr().begin();
85 const label*
const __restrict__ lcsrPtr =
86 addr.lowerCSRAddr().begin();
90 const scalar*
const __restrict__ lowercsrPtr =
lowerCSR().
begin();
94 auto& val = ApsiPtr[
cell];
100 const label start = loStartPtr[
cell];
101 const label end = loStartPtr[
cell+1];
103 for (label i = start; i < end; i++)
105 const label nbrCell = lcsrPtr[i];
106 val += lowercsrPtr[i]*psiPtr[nbrCell];
111 const label start = oStartPtr[
cell];
112 const label end = oStartPtr[
cell+1];
114 for (label i = start; i < end; i++)
116 const label nbrCell = uPtr[i];
117 val += upperPtr[i]*psiPtr[nbrCell];
134 ApsiPtr[uPtr[
face]] += lowerPtr[
face]*psiPtr[lPtr[
face]];
135 ApsiPtr[lPtr[
face]] += upperPtr[
face]*psiPtr[uPtr[
face]];
164 solveScalar* __restrict__ TpsiPtr = Tpsi.
begin();
167 const solveScalar*
const __restrict__ psiPtr =
psi.begin();
169 const scalar*
const __restrict__ diagPtr =
diag().begin();
171 const label*
const __restrict__ uPtr = lduAddr().upperAddr().begin();
172 const label*
const __restrict__ lPtr = lduAddr().lowerAddr().begin();
174 const scalar*
const __restrict__ lowerPtr = lower().begin();
175 const scalar*
const __restrict__ upperPtr = upper().begin();
190 const label nCells =
diag().size();
196 const label nFaces = upper().size();
197 for (label face=0; face<nFaces; face++)
199 TpsiPtr[uPtr[face]] += upperPtr[face]*psiPtr[lPtr[face]];
200 TpsiPtr[lPtr[face]] += lowerPtr[face]*psiPtr[uPtr[face]];
204 updateMatrixInterfaces
226 solveScalar* __restrict__ sumAPtr = sumA.
begin();
228 const scalar* __restrict__ diagPtr =
diag().
begin();
230 const label* __restrict__ uPtr = lduAddr().upperAddr().
begin();
231 const label* __restrict__ lPtr = lduAddr().lowerAddr().
begin();
233 const scalar* __restrict__ lowerPtr = lower().begin();
234 const scalar* __restrict__ upperPtr = upper().begin();
237 const label nFaces = upper().size();
244 for (label face=0; face<nFaces; face++)
246 sumAPtr[uPtr[face]] += lowerPtr[face];
247 sumAPtr[lPtr[face]] += upperPtr[face];
252 forAll(interfaces, patchi)
254 if (interfaces.
set(patchi))
256 const labelUList& pa = lduAddr().patchAddr(patchi);
257 const scalarField& pCoeffs = interfaceBouCoeffs[patchi];
278 solveScalar* __restrict__ rAPtr = rA.begin();
280 const solveScalar*
const __restrict__ psiPtr =
psi.
begin();
281 const scalar*
const __restrict__ diagPtr =
diag().
begin();
282 const scalar*
const __restrict__ sourcePtr = source.
begin();
284 const label*
const __restrict__ uPtr = lduAddr().upperAddr().
begin();
285 const label*
const __restrict__ lPtr = lduAddr().lowerAddr().
begin();
287 const scalar*
const __restrict__ upperPtr =
upper().begin();
288 const scalar*
const __restrict__ lowerPtr =
lower().begin();
321 const label nFaces =
upper().size();
330 updateMatrixInterfaces
353 residual(trA.ref(),
psi, source, interfaceBouCoeffs, interfaces, cmpt);
362 if (lowerPtr_ || upperPtr_)
364 scalar* __restrict__ H1Ptr = tH1.ref().begin();
366 const label* __restrict__ uPtr = lduAddr().upperAddr().begin();
367 const label* __restrict__ lPtr = lduAddr().lowerAddr().begin();
369 const scalar* __restrict__ lowerPtr = lower().begin();
370 const scalar* __restrict__ upperPtr = upper().begin();
372 const label nFaces = upper().size();
376 H1Ptr[uPtr[
face]] -= lowerPtr[
face];
377 H1Ptr[lPtr[
face]] -= upperPtr[
face];
A field of fields is a PtrList of fields with reference counting.
iterator begin() noexcept
Return an iterator to begin traversing the UList.
void size(const label n)
Older name for setAddressableSize.
static label nRequests() noexcept
Number of outstanding requests (on the internal list of requests).
const T * set(const label i) const
Return const pointer to element (can be nullptr), or nullptr for out-of-range access (ie,...
A cell is defined as a list of faces with extra functionality.
A face is a list of labels corresponding to mesh vertices.
tmp< scalarField > H1() const
const lduAddressing & lduAddr() const
Return the LDU addressing.
void residual(solveScalarField &rA, const solveScalarField &psi, const scalarField &source, const FieldField< Field, scalar > &interfaceBouCoeffs, const lduInterfaceFieldPtrsList &interfaces, const direction cmpt) const
void Tmul(solveScalarField &, const tmp< solveScalarField > &, const FieldField< Field, scalar > &, const lduInterfaceFieldPtrsList &, const direction cmpt) const
Matrix transpose multiplication with updated interfaces.
const scalarField & diag() const
void initMatrixInterfaces(const bool add, const FieldField< Field, scalar > &interfaceCoeffs, const lduInterfaceFieldPtrsList &interfaces, const solveScalarField &psiif, solveScalarField &result, const direction cmpt) const
Initialise the update of interfaced interfaces for matrix operations.
const scalarField & upper() const
void sumA(solveScalarField &, const FieldField< Field, scalar > &, const lduInterfaceFieldPtrsList &) const
Sum the coefficients on each row of the matrix.
const scalarField & lowerCSR() const
const scalarField & lower() const
void Amul(solveScalarField &, const tmp< solveScalarField > &, const FieldField< Field, scalar > &, const lduInterfaceFieldPtrsList &, const direction cmpt) const
Matrix multiplication with updated interfaces.
bool hasLowerCSR() const noexcept
void updateMatrixInterfaces(const bool add, const FieldField< Field, scalar > &interfaceCoeffs, const lduInterfaceFieldPtrsList &interfaces, const solveScalarField &psiif, solveScalarField &result, const direction cmpt, const label startRequest) const
Update interfaced interfaces for matrix operations.
A class for managing temporary objects.
void clear() const noexcept
If object pointer points to valid object: delete object and set pointer to nullptr.
static tmp< T > New(Args &&... args)
Construct tmp with forwarding arguments.
const volScalarField & psi
#define PoutInFunction
Report using Foam::Pout with FUNCTION_NAME prefix.
Namespace for handling debugging switches.
string upper(const std::string &s)
Return string copy transformed with std::toupper on each character.
string lower(const std::string &s)
Return string copy transformed with std::tolower on each character.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Field< solveScalar > solveScalarField
static constexpr const zero Zero
Global zero (0).
void diag(pointPatchField< vector > &, const pointPatchField< tensor > &)
UList< label > labelUList
A UList of labels.
UPtrList< const lduInterfaceField > lduInterfaceFieldPtrsList
List of coupled interface fields to be used in coupling.
#define forAll(list, i)
Loop across all elements in list.