33 void Foam::GAMGSolver::interpolate
38 const FieldField<Field, scalar>& interfaceBouCoeffs,
43 solveScalar* __restrict__ psiPtr =
psi.begin();
45 const label*
const __restrict__ uPtr = m.lduAddr().upperAddr().begin();
46 const label*
const __restrict__ lPtr = m.lduAddr().lowerAddr().begin();
48 const scalar*
const __restrict__ diagPtr = m.diag().begin();
49 const scalar*
const __restrict__ upperPtr = m.upper().begin();
50 const scalar*
const __restrict__ lowerPtr = m.lower().begin();
53 solveScalar* __restrict__ ApsiPtr = Apsi.begin();
55 m.initMatrixInterfaces
65 const label nFaces = m.upper().size();
66 for (
label face=0; face<nFaces; face++)
68 ApsiPtr[uPtr[face]] += lowerPtr[face]*psiPtr[lPtr[face]];
69 ApsiPtr[lPtr[face]] += upperPtr[face]*psiPtr[uPtr[face]];
72 m.updateMatrixInterfaces
82 const label nCells = m.diag().size();
83 for (
label celli=0; celli<nCells; celli++)
85 psiPtr[celli] = -ApsiPtr[celli]/(diagPtr[celli]);
90 void Foam::GAMGSolver::interpolate
95 const FieldField<Field, scalar>& interfaceBouCoeffs,
112 const label nCells = m.diag().size();
113 solveScalar* __restrict__ psiPtr =
psi.begin();
114 const scalar*
const __restrict__ diagPtr = m.diag().begin();
115 const solveScalar*
const __restrict__ psiCPtr = psiC.begin();
118 const label nCCells = psiC.size();
120 solveScalar* __restrict__ corrCPtr = corrC.begin();
123 solveScalar* __restrict__ diagCPtr = diagC.begin();
125 for (
label celli=0; celli<nCells; celli++)
127 corrCPtr[restrictAddressing[celli]] += diagPtr[celli]*psiPtr[celli];
128 diagCPtr[restrictAddressing[celli]] += diagPtr[celli];
131 for (
label ccelli=0; ccelli<nCCells; ccelli++)
133 corrCPtr[ccelli] = psiCPtr[ccelli] - corrCPtr[ccelli]/diagCPtr[ccelli];
136 for (
label celli=0; celli<nCells; celli++)
138 psiPtr[celli] += corrCPtr[restrictAddressing[celli]];