BUGFIX: Seg-fault in multiphaseInterFoam. Author: Henrik Rusche. Merge: Hrvoje Jasak
[foam-extend-3.2.git] / src / finiteVolume / blockLduSystem / BlockLduSystem.H
blobc72f4ce61cecd865b31ec74ceedd520985227720
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     Foam::BlockLduSystem
27 Description
28     BlockLduSystem is a wrapper for BlockLduMatrix with source field. This is
29     the return type of implicit div and grad operators needed for implicitly
30     coupled systems (namely p-U coupling).
32 Author
33     Vuko Vukcevic, FMENA Zagreb.
35 SourceFiles
36     BlockLduSystem.C
38 \*---------------------------------------------------------------------------*/
40 #ifndef BlockLduSystem_H
41 #define BlockLduSystem_H
43 #include "blockVectorNMatrices.H"
44 #include "VectorNFieldTypes.H"
45 #include "volVectorNFields.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 // Forward declaration of friend functions and operators
54 template<class blockType, class sourceType>
55 class BlockLduSystem;
57 template<class blockType, class sourceType>
58 Ostream& operator<<(Ostream&, const BlockLduSystem<blockType, sourceType>&);
61 /*---------------------------------------------------------------------------*\
62                         Class BlockLduSystem Declaration
63 \*---------------------------------------------------------------------------*/
65 template<class blockType, class sourceType>
66 class BlockLduSystem
68     public BlockLduMatrix<blockType>
70     // Private data
72         //- Source term
73         Field<sourceType> source_;
76 public:
78     // Constructors
80         //- Construct given addressing
81         explicit BlockLduSystem(const lduMesh&);
83         //- Construct given addressing and source field
84         BlockLduSystem(const lduMesh&, const Field<sourceType>&);
86         //- Construct from components
87         BlockLduSystem
88         (
89             const BlockLduMatrix<blockType>&,
90             const Field<sourceType>&
91         );
93         //- Construct as copy
94         BlockLduSystem(const BlockLduSystem<blockType, sourceType>&);
97     // Destructor
99        virtual ~BlockLduSystem()
100        {}
103     // Member functions
105         //- Access
107             Field<sourceType>& source()
108             {
109                 return source_;
110             }
112             const Field<sourceType>& source() const
113             {
114                 return source_;
115             }
118     // Member operators
120         void operator=(const BlockLduSystem<blockType, sourceType>&);
122         void negate();
124         void operator+=(const BlockLduSystem<blockType, sourceType>&);
125         void operator-=(const BlockLduSystem<blockType, sourceType>&);
127         void operator*=(const scalarField&);
128         void operator*=(const scalar);
131     // Ostream operator
133         friend Ostream& operator<< <blockType, sourceType>
134         (
135             Ostream&,
136             const BlockLduSystem<blockType, sourceType>&
137         );
141 } // End namespace Foam
143 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
145 #ifdef NoRepository
146 #   include "BlockLduSystem.C"
147 #   include "BlockLduSystemOperations.C"
148 #endif
150 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
152 #endif
154 // ************************************************************************* //