/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2013-2015 OpenFOAM Foundation Copyright (C) 2017-2019 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . \*---------------------------------------------------------------------------*/ #include "GAMGSolver.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::GAMGSolver::interpolate ( solveScalarField& psi, solveScalarField& Apsi, const lduMatrix& m, const FieldField& interfaceBouCoeffs, const lduInterfaceFieldPtrsList& interfaces, const direction cmpt ) const { solveScalar* __restrict__ psiPtr = psi.begin(); const label* const __restrict__ uPtr = m.lduAddr().upperAddr().begin(); const label* const __restrict__ lPtr = m.lduAddr().lowerAddr().begin(); const scalar* const __restrict__ diagPtr = m.diag().begin(); const scalar* const __restrict__ upperPtr = m.upper().begin(); const scalar* const __restrict__ lowerPtr = m.lower().begin(); Apsi = 0; solveScalar* __restrict__ ApsiPtr = Apsi.begin(); const label startRequest = UPstream::nRequests(); m.initMatrixInterfaces ( true, interfaceBouCoeffs, interfaces, psi, Apsi, cmpt ); const label nFaces = m.upper().size(); for (label face=0; face& interfaceBouCoeffs, const lduInterfaceFieldPtrsList& interfaces, const labelList& restrictAddressing, const solveScalarField& psiC, const direction cmpt ) const { interpolate ( psi, Apsi, m, interfaceBouCoeffs, interfaces, cmpt ); const label nCells = m.diag().size(); solveScalar* __restrict__ psiPtr = psi.begin(); const scalar* const __restrict__ diagPtr = m.diag().begin(); const solveScalar* const __restrict__ psiCPtr = psiC.begin(); const label nCCells = psiC.size(); solveScalarField corrC(nCCells, 0); solveScalar* __restrict__ corrCPtr = corrC.begin(); solveScalarField diagC(nCCells, 0); solveScalar* __restrict__ diagCPtr = diagC.begin(); for (label celli=0; celli