PPCG.H
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2019-2020 Mattijs Janssens
9 Copyright (C) 2020 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27Class
28 Foam::PPCG
29
30Description
31 Preconditioned pipelined conjugate gradient solver for symmetric
32 lduMatrices using a run-time selectable preconditioner.
33
34 Reference:
35 \verbatim
36 P. Ghysels, W. Vanroose.
37 "Hiding global synchronization latency in the
38 preconditioned Conjugate Gradient algorithm"
39 \endverbatim
40 and implementation details from
41 \verbatim
42 Paul Eller, William Gropp
43 "Scalable Non-blocking Preconditioned Conjugate Gradient Methods"
44 \endverbatim
45
46SourceFiles
47 PPCG.C
48
49\*---------------------------------------------------------------------------*/
50
51#ifndef PPCG_H
52#define PPCG_H
53
54#include "lduMatrix.H"
55
56// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
57
58namespace Foam
59{
60
61/*---------------------------------------------------------------------------*\
62 Class PPCG Declaration
63\*---------------------------------------------------------------------------*/
65class PPCG
66:
68{
69 // Private Member Functions
70
71 //- Non-blocking version of sum(a*b), sum(a*c), sum(mag(sumMag))
72 void gSumMagProd
73 (
75 const solveScalarField& a,
76 const solveScalarField& b,
77 const solveScalarField& c,
79 label& outstandingRequest,
80 const label comm
81 ) const;
82
83 //- No copy construct
84 PPCG(const PPCG&) = delete;
85
86 //- No copy assignment
87 void operator=(const PPCG&) = delete;
88
89
90protected:
91
92 //- CG solver. Operates either in conjugate-gradient mode or
93 //- conjugate residual
95 (
97 const solveScalarField& source,
98 const direction cmpt,
99 const bool cgMode
100 ) const;
101
102
103public:
104
105 //- Runtime type information
106 TypeName("PPCG");
107
108
109 // Constructors
110
111 //- Construct from matrix components and solver controls
112 PPCG
113 (
114 const word& fieldName,
115 const lduMatrix& matrix,
119 const dictionary& solverControls
120 );
121
122
123 //- Destructor
124 virtual ~PPCG() = default;
125
126
127 // Member Functions
128
129 //- Solve the matrix with this solver
131 (
133 const scalarField& source,
134 const direction cmpt=0
135 ) const;
136};
137
138
139// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
140
141} // End namespace Foam
142
143// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
144
145#endif
146
147// ************************************************************************* //
A field of fields is a PtrList of fields with reference counting.
Definition: FieldField.H:80
A 1D vector of objects of type <T> with a fixed length <N>.
Definition: FixedList.H:81
Preconditioned pipelined conjugate gradient solver for symmetric lduMatrices using a run-time selecta...
Definition: PPCG.H:67
solverPerformance scalarSolveCG(solveScalarField &psi, const solveScalarField &source, const direction cmpt, const bool cgMode) const
Definition: PPCG.C:82
virtual ~PPCG()=default
Destructor.
TypeName("PPCG")
Runtime type information.
SolverPerformance is the class returned by the LduMatrix solver containing performance statistics.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
Abstract base-class for lduMatrix solvers.
Definition: lduMatrix.H:99
const FieldField< Field, scalar > & interfaceIntCoeffs() const noexcept
Definition: lduMatrix.H:243
const lduInterfaceFieldPtrsList & interfaces() const noexcept
Definition: lduMatrix.H:248
const lduMatrix & matrix() const noexcept
Definition: lduMatrix.H:233
const FieldField< Field, scalar > & interfaceBouCoeffs() const noexcept
Definition: lduMatrix.H:238
const word & fieldName() const noexcept
Definition: lduMatrix.H:228
lduMatrix is a general matrix class in which the coefficients are stored as three arrays,...
Definition: lduMatrix.H:84
A class for handling words, derived from Foam::string.
Definition: word.H:68
const volScalarField & psi
Namespace for OpenFOAM.
dimensioned< typename typeOfMag< Type >::type > sumMag(const DimensionedField< Type, GeoMesh > &df)
uint8_t direction
Definition: direction.H:56
CEqn solve()
volScalarField & b
Definition: createFields.H:27
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73