34 void Foam::GAMGSolver::scale
39 const FieldField<Field, scalar>& interfaceLevelBouCoeffs,
49 interfaceLevelBouCoeffs,
55 const label nCells =
field.size();
56 solveScalar* __restrict__ fieldPtr =
field.begin();
57 const solveScalar*
const __restrict__ sourcePtr = source.begin();
58 const solveScalar*
const __restrict__ AcfPtr = Acf.begin();
61 solveScalar scalingFactorNum = 0.0;
62 solveScalar scalingFactorDenom = 0.0;
64 for (label i=0; i<nCells; i++)
66 scalingFactorNum += sourcePtr[i]*fieldPtr[i];
67 scalingFactorDenom += AcfPtr[i]*fieldPtr[i];
70 Vector2D<solveScalar> scalingVector(scalingFactorNum, scalingFactorDenom);
71 A.mesh().reduce(scalingVector, sumOp<Vector2D<solveScalar>>());
73 const solveScalar sf =
75 /
stabilise(scalingVector.y(), pTraits<solveScalar>::vsmall);
83 const scalar*
const __restrict__ DPtr =
D.begin();
85 for (label i=0; i<nCells; i++)
87 fieldPtr[i] = sf*fieldPtr[i] + (sourcePtr[i] - sf*AcfPtr[i])/DPtr[i];