Loading...
Searching...
No Matches
nonBlockingGaussSeidelSmoother.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) 2011 OpenFOAM Foundation
9 Copyright (C) 2019 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::nonBlockingGaussSeidelSmoother
29
30Group
31 grpLduMatrixSmoothers
32
33Description
34 Variant of gaussSeidelSmoother that expects processor boundary
35 cells to be sorted last and so can block later. Only when the
36 cells are actually visited does it need the results to be present.
37 It is expected that there is little benefit to be gained from doing
38 this on a patch by patch basis since the number of processor interfaces
39 is quite small and the overhead of checking whether a processor interface
40 is finished might be quite high (call into mpi). Also this would
41 require a dynamic memory allocation to store the state of the outstanding
42 requests.
43
44SourceFiles
45 nonBlockingGaussSeidelSmoother.C
46
47\*---------------------------------------------------------------------------*/
48
49#ifndef nonBlockingGaussSeidelSmoother_H
50#define nonBlockingGaussSeidelSmoother_H
51
52#include "lduMatrix.H"
53
54// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
55
56namespace Foam
57{
59/*---------------------------------------------------------------------------*\
60 Class nonBlockingGaussSeidelSmoother Declaration
61\*---------------------------------------------------------------------------*/
62
64:
66{
67 // Private data
68
69 //- Starting cell when to block
70 label blockStart_;
71
72public:
73
74 //- Runtime type information
75 TypeName("nonBlockingGaussSeidel");
76
77
78 // Constructors
79
80 //- Construct from components
82 (
83 const word& fieldName,
84 const lduMatrix& matrix,
88 const dictionary& solverControls
89 );
90
91
92 // Member Functions
93
94 //- Smooth for the given number of sweeps
95 static void smooth
96 (
97 const word& fieldName,
99 const lduMatrix& matrix,
100 const label blockStart,
101 const solveScalarField& source,
104 const direction cmpt,
105 const label nSweeps
106 );
107
108 //- Smooth the solution for a given number of sweeps
109 virtual void smooth
110 (
112 const scalarField& Source,
113 const direction cmpt,
114 const label nSweeps
115 ) const;
116
117 //- Smooth the solution for a given number of sweeps
118 virtual void scalarSmooth
119 (
121 const solveScalarField& source,
122 const direction cmpt,
123 const label nSweeps
124 ) const;
125};
126
127
128// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
129
130} // End namespace Foam
131
132// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
133
134#endif
135
136// ************************************************************************* //
A field of fields is a PtrList of fields with reference counting.
Definition FieldField.H:77
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
Abstract base-class for lduMatrix smoothers.
Definition lduMatrix.H:410
const FieldField< Field, scalar > & interfaceIntCoeffs() const noexcept
Definition lduMatrix.H:538
const lduInterfaceFieldPtrsList & interfaces() const noexcept
Definition lduMatrix.H:543
const lduMatrix & matrix() const noexcept
Definition lduMatrix.H:528
const FieldField< Field, scalar > & interfaceBouCoeffs() const noexcept
Definition lduMatrix.H:533
const word & fieldName() const noexcept
Definition lduMatrix.H:523
lduMatrix is a general matrix class in which the coefficients are stored as three arrays,...
Definition lduMatrix.H:81
nonBlockingGaussSeidelSmoother(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces, const dictionary &solverControls)
Construct from components.
static void smooth(const word &fieldName, solveScalarField &psi, const lduMatrix &matrix, const label blockStart, const solveScalarField &source, const FieldField< Field, scalar > &interfaceBouCoeffs, const lduInterfaceFieldPtrsList &interfaces, const direction cmpt, const label nSweeps)
Smooth for the given number of sweeps.
TypeName("nonBlockingGaussSeidel")
Runtime type information.
virtual void scalarSmooth(solveScalarField &psi, const solveScalarField &source, const direction cmpt, const label nSweeps) const
Smooth the solution for a given number of sweeps.
A class for handling words, derived from Foam::string.
Definition word.H:66
const volScalarField & psi
Namespace for OpenFOAM.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Field< solveScalar > solveScalarField
uint8_t direction
Definition direction.H:49
UPtrList< const lduInterfaceField > lduInterfaceFieldPtrsList
List of coupled interface fields to be used in coupling.
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition typeInfo.H:68