BUGFIX: Illegal use of uninitialised value (backport)
[foam-extend-3.2.git] / src / coupledMatrix / coupledLduMatrix / coupledLduMatrix.C
blob51e2316a13e014a9948e40d7758af561ad144bd3
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2006-7 H. Jasak All rights reserved
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     coupledLduMatrix
28 Description
29     Collection of lduMatrices solved together as a block system
31 Author
32     Hrvoje Jasak, Wikki Ltd.  All rights reserved
34 \*----------------------------------------------------------------------------*/
36 #include "coupledLduMatrix.H"
38 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
40 namespace Foam
42     defineTypeNameAndDebug(coupledLduMatrix, 1);
46 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
49 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
51 // Construct given size
52 Foam::coupledLduMatrix::coupledLduMatrix(const label size)
54     PtrList<lduMatrix>(size)
58 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
60 Foam::coupledLduMatrix::~coupledLduMatrix()
64 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
66 bool Foam::coupledLduMatrix::diagonal() const
68     const PtrList<lduMatrix>& matrices = *this;
70     bool diag = true;
72     forAll (matrices, matrixI)
73     {
74         diag = diag && matrices[matrixI].diagonal();
75     }
77     return diag;
81 bool Foam::coupledLduMatrix::symmetric() const
83     const PtrList<lduMatrix>& matrices = *this;
85     bool sym = true;
87     forAll (matrices, matrixI)
88     {
89         sym =
90             (sym && matrices[matrixI].diagonal())
91          || (sym && matrices[matrixI].symmetric());
92     }
94     return sym;
98 bool Foam::coupledLduMatrix::asymmetric() const
100     const PtrList<lduMatrix>& matrices = *this;
102     bool asym = false;
104     forAll (matrices, matrixI)
105     {
106         asym = (asym || matrices[matrixI].asymmetric());
107     }
109     return asym;
113 void Foam::coupledLduMatrix::Amul
115     FieldField<Field, scalar>& result,
116     const FieldField<Field, scalar>& x,
117     const PtrList<FieldField<Field, scalar> >& bouCoeffs,
118     const lduInterfaceFieldPtrsListList& interfaces,
119     const direction cmpt
120 ) const
122     const PtrList<lduMatrix>& matrices = *this;
124     // Reset product to zero
125     result = 0;
127     // Initialise the update of coupled interfaces
128     initMatrixInterfaces
129     (
130         bouCoeffs,
131         interfaces,
132         x,
133         result,
134         cmpt
135     );
137     forAll (matrices, rowI)
138     {
139         matrices[rowI].AmulCore(result[rowI], x[rowI]);
140     }
142     // Update couple interfaces
143     updateMatrixInterfaces
144     (
145         bouCoeffs,
146         interfaces,
147         x,
148         result,
149         cmpt
150     );
154 void Foam::coupledLduMatrix::Tmul
156     FieldField<Field, scalar>& result,
157     const FieldField<Field, scalar>& x,
158     const PtrList<FieldField<Field, scalar> >& intCoeffs,
159     const lduInterfaceFieldPtrsListList& interfaces,
160     const direction cmpt
161 ) const
163     const PtrList<lduMatrix>& matrices = *this;
165     // Reset product to zero
166     result = 0;
168     // Initialise the update of coupled interfaces
169     initMatrixInterfaces
170     (
171         intCoeffs,
172         interfaces,
173         x,
174         result,
175         cmpt
176     );
178     forAll (matrices, rowI)
179     {
180         matrices[rowI].TmulCore(result[rowI], x[rowI]);
181     }
183     // Update couple interfaces
184     updateMatrixInterfaces
185     (
186         intCoeffs,
187         interfaces,
188         x,
189         result,
190         cmpt
191     );
195 void Foam::coupledLduMatrix::initMatrixInterfaces
197     const PtrList<FieldField<Field, scalar> >& coupleCoeffs,
198     const lduInterfaceFieldPtrsListList& interfaces,
199     const FieldField<Field, scalar>& x,
200     FieldField<Field, scalar>& result,
201     const direction cmpt
202 ) const
204     const PtrList<lduMatrix>& matrices = *this;
206     forAll (matrices, rowI)
207     {
208         matrices[rowI].initMatrixInterfaces
209         (
210             coupleCoeffs[rowI],
211             interfaces[rowI],
212             x[rowI],
213             result[rowI],
214             cmpt
215         );
216     }
220 void Foam::coupledLduMatrix::updateMatrixInterfaces
222     const PtrList<FieldField<Field, scalar> >& coupleCoeffs,
223     const lduInterfaceFieldPtrsListList& interfaces,
224     const FieldField<Field, scalar>& x,
225     FieldField<Field, scalar>& result,
226     const direction cmpt
227 ) const
229     const PtrList<lduMatrix>& matrices = *this;
231     forAll (matrices, rowI)
232     {
233         matrices[rowI].updateMatrixInterfaces
234         (
235             coupleCoeffs[rowI],
236             interfaces[rowI],
237             x[rowI],
238             result[rowI],
239             cmpt
240         );
241     }
245 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
248 // * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
251 // * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
254 // ************************************************************************* //