Foam::lduMatrix::solverPerformance Foam::gPCG::solve ( scalarField& psi, const scalarField& source, const direction cmpt ) const { scalar initialResidual; scalar finalResidual; int nIterations = 0; bool converged = false; label rows = matrix_.diag().size(); label nonZeroNumber= matrix_.lower().size() + matrix_.upper().size() + matrix_.diag().size(); pcgsolve(rows, nonZeroNumber, psi.data(), source.cdata(), matrix_.upper().size(), matrix_.lduAddr().upperAddr().cdata(), matrix_.lduAddr().lowerAddr().cdata(), matrix_.upper().cdata(), matrix_.lower().cdata(), matrix_.diag().cdata(), maxIter_, relTol_, tolerance_, initialResidual, finalResidual, nIterations, converged ); // --- Setup class containing solver performance data lduMatrix::solverPerformance solverPerf ( lduMatrix::preconditioner::getName(controlDict_) + typeName, fieldName_, initialResidual, finalResidual, nIterations, converged ); return solverPerf; }