1 /*---------------------------------------------------------------------------*\
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 -------------------------------------------------------------------------------
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/>.
25 Foam::scalarSquareMatrix
28 Foam::scalarSquareMatrix
33 \*---------------------------------------------------------------------------*/
35 #ifndef scalarSquareMatrix_H
36 #define scalarSquareMatrix_H
38 #include "SquareMatrix.H"
39 #include "scalarField.H"
40 #include "labelList.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 /*---------------------------------------------------------------------------*\
48 Class scalarSquareMatrix Declaration
49 \*---------------------------------------------------------------------------*/
51 class scalarSquareMatrix
53 public SquareMatrix<scalar>
63 //- Construct given size
64 scalarSquareMatrix(const label);
66 //- Construct given size and coefficient value
67 scalarSquareMatrix(const label, const scalar v);
70 scalarSquareMatrix(const scalarSquareMatrix&);
72 //- Construct from Istream
73 scalarSquareMatrix(Istream&);
78 //- Solve the matrix using Gaussian elimination with pivoting,
79 // returning the solution in the source.
80 // Matrix given as a reference is destroyed during solution
82 static void solve(scalarSquareMatrix& matrix, Field<T>& source);
84 //- Solve the matrix using Gaussian elimination with pivoting
85 // and return the solution
87 void solve(Field<Type>& psi, const Field<Type>& source) const;
90 //- LU decompose the matrix with pivoting
91 static void LUDecompose
93 scalarSquareMatrix& matrix,
94 labelList& pivotIndices
97 //- LU back-substitution with given source, returning the solution
100 static void LUBacksubstitute
102 const scalarSquareMatrix& luMmatrix,
103 const labelList& pivotIndices,
107 //- Invert the matrix using LU decomposition with pivoting
108 scalarSquareMatrix LUinvert() const;
110 //- Solve the matrix using LU decomposition with pivoting
111 // returning the LU form of the matrix and the solution in the source
113 static void LUsolve(scalarSquareMatrix& matrix, Field<Type>& source);
117 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
119 } // End namespace Foam
121 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
124 # include "scalarSquareMatrixTemplates.C"
127 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
131 // ************************************************************************* //