Fix tutorials: typo in tutorials/viscoelastic/viscoelasticFluidFoam/S-MDCPP/constant...
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / matrices / constraint / constraint.H
blob1f4206bb2d9779a47db3641bc1f3a4bd3e456e35
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
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     constraint
28 Description
29     A storage mechanism which allows setting of the fixed value and
30     consequently recovering the equation for a single row of the matrix as
31     well as the source. The equation is taken out of the matrix using a
32     variant of compact matrix storage mechanism.
34 SourceFiles
35     constraint.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef constraint_H
40 #define constraint_H
42 #include "labelList.H"
43 #include "scalarField.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 template<class Type>
51 class constraint;
53 template<class Type>
54 Ostream& operator<<(Ostream&, const constraint<Type>&);
57 /*---------------------------------------------------------------------------*\
58                         Class constraint Declaration
59 \*---------------------------------------------------------------------------*/
61 template<class Type>
62 class constraint
64     // Private data
66         //- Matrix row ID
67         label rowID_;
69         //- Fixed value
70         Type value_;
72         //- Fixed components (0-1) 1 = fixed, 0 = free
73         Type fixedComponents_;
75         //- Are matrix coefficients set?
76         bool matrixCoeffsSet_;
78         //- Diagonal coefficient
79         scalar diagCoeff_;
81         //- Source
82         Type source_;
84         //- Upper coefficients
85         scalarField* upperCoeffsOwnerPtr_;
87         scalarField* upperCoeffsNeighbourPtr_;
89         //- Lower coefficients
90         scalarField* lowerCoeffsOwnerPtr_;
92         scalarField* lowerCoeffsNeighbourPtr_;
94     // Private Member Functions
96         //- Return scalar component of value. Used to simplify templating
97         scalar componentOfValue(const Type&, const direction) const;
100 public:
103     // Constructors
105         //- Construct from components
106         constraint
107         (
108             const label row,
109             const Type value,
110             const Type& fixedCmpts = pTraits<Type>::one
111         );
113         //- Construct from matrix and other components
114         template<template<class> class Matrix>
115         constraint
116         (
117             const Matrix<Type>&,
118             const label row,
119             const Type value,
120             const Type& fixedCmpts = pTraits<Type>::one
121         );
123         //- Construct as copy
124         constraint(const constraint&);
126         //- Construct from Istream
127         constraint(Istream&);
130     // Destructor
132         ~constraint();
135     // Member Functions
137         //- Return matrix row ID
138         label rowID() const
139         {
140             return rowID_;
141         }
143         //- Return fixed value
144         Type value() const
145         {
146             return value_;
147         }
149         //- Return map of fixed components
150         const Type& fixedComponents() const
151         {
152             return fixedComponents_;
153         }
155         //- Return diagonal coefficient
156         scalar diagCoeff() const;
158         //- Return source
159         Type source() const;
161         //- Return off-diagonal coefficients
162         const scalarField& upperCoeffsOwner() const;
164         const scalarField& upperCoeffsNeighbour() const;
166         const scalarField& lowerCoeffsOwner() const;
168         const scalarField& lowerCoeffsNeighbour() const;
170         //- Combine with existing equation
171         void combine(const constraint&);
173         //- Set matrix coefficients
174         template<template<class> class Matrix>
175         void setMatrix(const Matrix<Type>&);
178         //- Eliminate equation
179         template<template<class> class Matrix>
180         static void eliminateEquation(Matrix<Type>&, const label, const Type&);
182         //- Eliminate equation
183         template<template<class> class Matrix>
184         void eliminateEquation(Matrix<Type>&) const;
186         //- Eliminate component equation with given direction and
187         //  component source
188         template<template<class> class Matrix>
189         void eliminateEquation
190         (
191             Matrix<Type>&,
192             const direction,
193             scalarField&
194         ) const;
197         //- Set source in eliminated equation
198         template<template<class> class Matrix>
199         static void setSource(Matrix<Type>&, const label, const Type&);
201         //- Set source in eliminated equation
202         template<template<class> class Matrix>
203         void setSource(Matrix<Type>&) const;
205         //- Set source and diagonal in eliminated equation
206         template<template<class> class Matrix>
207         void setSourceDiag
208         (
209             Matrix<Type>&,
210             const direction,
211             scalarField& psiCmpt,
212             scalarField& sourceCmpt
213         ) const;
216         //- Reconstruct matrix coefficients
217         template<template<class> class Matrix>
218         void reconstructMatrix(Matrix<Type>&) const;
220         //- Clear matrix coefficients
221         void clearMatrix();
224     // Member Operators
226         void operator=(const constraint<Type>&);
229     // Ostream Operator
231         friend Ostream& operator<< <Type>
232         (
233             Ostream&,
234             const constraint<Type>&
235         );
239 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
241 } // End namespace Foam
243 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
245 #ifdef NoRepository
246 #    include "constraint.C"
247 #    include "constraintTools.C"
248 #endif
250 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
252 #include "scalarConstraint.H"
254 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
256 #endif
258 // ************************************************************************* //