Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / matrices / simpleMatrix / simpleMatrix.H
blobe8b9799e0c99be7f45125ea38d8b1459d55e6745
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::simpleMatrix
27 Description
28     A simple square matrix solver with scalar coefficients.
29     Simple dense matrix class with direct solvers.
31 Author
32     Hrvoje Jasak, Wikki Ltd.  All rights reserved
34 SourceFiles
35     simpleMatrix.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef simpleMatrix_H
40 #define simpleMatrix_H
42 #include "scalarMatrices.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 // Forward declaration of friend functions and operators
51 template<class Type>
52 class simpleMatrix;
54 template<class Type>
55 simpleMatrix<Type> operator+
57     const simpleMatrix<Type>&,
58     const simpleMatrix<Type>&
61 template<class Type>
62 simpleMatrix<Type> operator-
64     const simpleMatrix<Type>&,
65     const simpleMatrix<Type>&
68 template<class Type>
69 simpleMatrix<Type> operator*
71     const scalar,
72     const simpleMatrix<Type>&
75 template<class Type>
76 Ostream& operator<<
78     Ostream&,
79     const simpleMatrix<Type>&
83 /*---------------------------------------------------------------------------*\
84                            Class simpleMatrix Declaration
85 \*---------------------------------------------------------------------------*/
87 template<class Type>
88 class simpleMatrix
90     public scalarSquareMatrix
92     // Private data
94         Field<Type> source_;
97 public:
99     // Constructors
101         //- Construct given size
102         //  Note: this does not initialise the coefficients or the source.
103         simpleMatrix(const label);
105         //- Construct given size and initial values for the
106         //  coefficients and source
107         simpleMatrix(const label, const scalar, const Type&);
109         //- Construct from components
110         simpleMatrix(const scalarSquareMatrix&, const Field<Type>&);
112         //- Construct from Istream
113         simpleMatrix(Istream&);
115         //- Construct as copy
116         simpleMatrix(const simpleMatrix<Type>&);
119     // Member Functions
121         // Access
123             //- Return access to the source
124             Field<Type>& source()
125             {
126                 return source_;
127             }
129             //- Return const-access to the source
130             const Field<Type>& source() const
131             {
132                 return source_;
133             }
136         //- Solve the matrix using Gaussian elimination with pivoting
137         //  and return the solution
138         Field<Type> solve() const;
140         //- Solve the matrix using LU decomposition with pivoting
141         //  and return the solution
142         Field<Type> LUsolve() const;
145     // Member Operators
147         void operator=(const simpleMatrix<Type>&);
150     // Ostream Operator
152         friend Ostream& operator<< <Type>
153         (
154             Ostream&,
155             const simpleMatrix<Type>&
156         );
160 // Global operators
162 template<class Type>
163 simpleMatrix<Type> operator+
165     const simpleMatrix<Type>&,
166     const simpleMatrix<Type>&
169 template<class Type>
170 simpleMatrix<Type> operator-
172     const simpleMatrix<Type>&,
173     const simpleMatrix<Type>&
176 template<class Type>
177 simpleMatrix<Type> operator*
179     const scalar,
180     const simpleMatrix<Type>&
184 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
186 } // End namespace Foam
188 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
190 #ifdef NoRepository
191 #   include "simpleMatrix.C"
192 #endif
194 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
196 #endif
198 // ************************************************************************* //