ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / matrices / simpleMatrix / simpleMatrix.H
blob62cefec4bc3f9fab784a807754f1e037ae515b22
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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
13     the Free Software Foundation, either version 3 of the License, or
14     (at your 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, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::simpleMatrix
27 Description
28     A simple square matrix solver with scalar coefficients.
30 SourceFiles
31     simpleMatrix.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef simpleMatrix_H
36 #define simpleMatrix_H
38 #include "scalarMatrices.H"
40 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
42 namespace Foam
45 // Forward declaration of friend functions and operators
47 template<class Type>
48 class simpleMatrix;
50 template<class Type>
51 Ostream& operator<<
53     Ostream&,
54     const simpleMatrix<Type>&
58 /*---------------------------------------------------------------------------*\
59                            Class simpleMatrix Declaration
60 \*---------------------------------------------------------------------------*/
62 template<class Type>
63 class simpleMatrix
65     public scalarSquareMatrix
67     // Private data
69         Field<Type> source_;
72 public:
74     // Constructors
76         //- Construct given size
77         //  Note: this does not initialise the coefficients or the source.
78         simpleMatrix(const label);
80         //- Construct given size and initial values for coefficients and source
81         simpleMatrix(const label, const scalar, const Type&);
83         //- Construct from components
84         simpleMatrix(const scalarSquareMatrix&, const Field<Type>&);
86         //- Construct from Istream
87         simpleMatrix(Istream&);
89         //- Construct as copy
90         simpleMatrix(const simpleMatrix<Type>&);
93     // Member Functions
95         // Access
97             //- Return access to the source
98             Field<Type>& source()
99             {
100                 return source_;
101             }
103             //- Return const-access to the source
104             const Field<Type>& source() const
105             {
106                 return source_;
107             }
110         //- Solve the matrix using Gaussian elimination with pivoting
111         //  and return the solution
112         Field<Type> solve() const;
114         //- Solve the matrix using LU decomposition with pivoting
115         //  and return the solution
116         Field<Type> LUsolve() const;
119     // Member Operators
121         void operator=(const simpleMatrix<Type>&);
124     // Ostream Operator
126         friend Ostream& operator<< <Type>
127         (
128             Ostream&,
129             const simpleMatrix<Type>&
130         );
134 // Global operators
136 template<class Type>
137 simpleMatrix<Type> operator+
139     const simpleMatrix<Type>&,
140     const simpleMatrix<Type>&
143 template<class Type>
144 simpleMatrix<Type> operator-
146     const simpleMatrix<Type>&,
147     const simpleMatrix<Type>&
150 template<class Type>
151 simpleMatrix<Type> operator*
153     const scalar,
154     const simpleMatrix<Type>&
158 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
160 } // End namespace Foam
162 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
164 #ifdef NoRepository
165 #   include "simpleMatrix.C"
166 #endif
168 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
170 #endif
172 // ************************************************************************* //