BUGFIX: Seg-fault in multiphaseInterFoam. Author: Henrik Rusche. Merge: Hrvoje Jasak
[foam-extend-3.2.git] / src / coupledMatrix / coupledLduMatrix / coupledLduMatrix.H
blob67d5a1d22bcfef3341ba9826ed773b6a9e7ad62d
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     coupledLduMatrix
27 Description
28     Collection of lduMatrices solved together as a block system
30 Author
31     Hrvoje Jasak, Wikki Ltd.  All rights reserved
33 SourceFiles
34     coupledLduMatrix.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef coupledLduMatrix_H
39 #define coupledLduMatrix_H
41 #include "lduMatrix.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
48 /*---------------------------------------------------------------------------*\
49                        Class coupledLduMatrix Declaration
50 \*---------------------------------------------------------------------------*/
52 class coupledLduMatrix
54     public PtrList<lduMatrix>
56     // Private data
58     // Private Member Functions
60         //- Disallow default bitwise copy construct
61         coupledLduMatrix(const coupledLduMatrix&);
63         //- Disallow default bitwise assignment
64         void operator=(const coupledLduMatrix&);
67 public:
69     // Static data members
71         // Declare name of the class and it's debug switch
72         ClassName("coupledLduMatrix");
75     // Constructors
77         //- Construct given size
78         coupledLduMatrix(const label size);
81     // Destructor
83         ~coupledLduMatrix();
86     // Member Functions
88         // Matrix structure
90             //- Is the matrix diagonal-only?
91             bool diagonal() const;
93             //- Is the matrix symmetric?
94             bool symmetric() const;
96             //- Is the matrix asymmetric?
97             bool asymmetric() const;
100         // Matrix-vector multiplication
102             //- Matrix multiplication with updated coupled interfaces.
103             void Amul
104             (
105                 FieldField<Field, scalar>& result,
106                 const FieldField<Field, scalar>& x,
107                 const PtrList<FieldField<Field, scalar> >& bouCoeffs,
108                 const lduInterfaceFieldPtrsListList& interfaces,
109                 const direction cmpt
110             ) const;
112             //- Matrix transpose multiplication with updated coupled interfaces
113             void Tmul
114             (
115                 FieldField<Field, scalar>& result,
116                 const FieldField<Field, scalar>& x,
117                 const PtrList<FieldField<Field, scalar> >& intCoeffs,
118                 const lduInterfaceFieldPtrsListList& interfaces,
119                 const direction cmpt
120             ) const;
123             //- Initialise the update of coupled interfaces
124             //  for matrix operations
125             void initMatrixInterfaces
126             (
127                 const PtrList<FieldField<Field, scalar> >& coupleCoeffs,
128                 const lduInterfaceFieldPtrsListList& interfaces,
129                 const FieldField<Field, scalar>& x,
130                 FieldField<Field, scalar>& result,
131                 const direction cmpt
132             ) const;
134             //- Update coupled interfaces for matrix operations
135             void updateMatrixInterfaces
136             (
137                 const PtrList<FieldField<Field, scalar> >& coupleCoeffs,
138                 const lduInterfaceFieldPtrsListList& interfaces,
139                 const FieldField<Field, scalar>& x,
140                 FieldField<Field, scalar>& result,
141                 const direction cmpt
142             ) const;
147 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
149 } // End namespace Foam
151 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
153 #endif
155 // ************************************************************************* //