mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
MatrixBlock: cleanup invert implementation to be less confusing.
This commit is contained in:
parent
3aa8ed200f
commit
530c0fe57f
@ -52,18 +52,42 @@
|
|||||||
|
|
||||||
namespace Dune
|
namespace Dune
|
||||||
{
|
{
|
||||||
namespace FMatrixHelp {
|
|
||||||
|
|
||||||
//! invert Matrix without changing the original matrix
|
namespace ISTLUtility {
|
||||||
//! return inverse matrix (specialization for n <= 3 in dune/common/fmatrix.hh)
|
|
||||||
template <typename K, int n>
|
//! invert matrix by calling FMatrixHelp::invert
|
||||||
static inline K invertMatrix (const FieldMatrix<K,n,n> &matrix, FieldMatrix<K,n,n> &inverse)
|
template <typename K>
|
||||||
|
static inline void invertMatrix (FieldMatrix<K,1,1> &matrix)
|
||||||
{
|
{
|
||||||
inverse.invert();
|
FieldMatrix<K,1,1> A ( matrix );
|
||||||
return K(0);
|
FMatrixHelp::invertMatrix(A, matrix );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! invert matrix by calling FMatrixHelp::invert
|
||||||
|
template <typename K>
|
||||||
|
static inline void invertMatrix (FieldMatrix<K,2,2> &matrix)
|
||||||
|
{
|
||||||
|
FieldMatrix<K,2,2> A ( matrix );
|
||||||
|
FMatrixHelp::invertMatrix(A, matrix );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! invert matrix by calling FMatrixHelp::invert
|
||||||
|
template <typename K>
|
||||||
|
static inline void invertMatrix (FieldMatrix<K,3,3> &matrix)
|
||||||
|
{
|
||||||
|
FieldMatrix<K,3,3> A ( matrix );
|
||||||
|
FMatrixHelp::invertMatrix(A, matrix );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! invert matrix by calling matrix.invert
|
||||||
|
template <typename K, int n>
|
||||||
|
static inline void invertMatrix (FieldMatrix<K,n,n> &matrix)
|
||||||
|
{
|
||||||
|
matrix.invert();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end ISTLUtility
|
||||||
|
|
||||||
template <class Scalar, int n, int m>
|
template <class Scalar, int n, int m>
|
||||||
class MatrixBlock : public Dune::FieldMatrix<Scalar, n, m>
|
class MatrixBlock : public Dune::FieldMatrix<Scalar, n, m>
|
||||||
{
|
{
|
||||||
@ -76,8 +100,7 @@ public:
|
|||||||
explicit MatrixBlock( const Scalar scalar = 0 ) : BaseType( scalar ) {}
|
explicit MatrixBlock( const Scalar scalar = 0 ) : BaseType( scalar ) {}
|
||||||
void invert()
|
void invert()
|
||||||
{
|
{
|
||||||
MatrixBlock matrix( *this );
|
ISTLUtility::invertMatrix( *this );
|
||||||
Dune::FMatrixHelp::invertMatrix(matrix, *this);
|
|
||||||
}
|
}
|
||||||
const BaseType& asBase() const { return static_cast< const BaseType& > (*this); }
|
const BaseType& asBase() const { return static_cast< const BaseType& > (*this); }
|
||||||
BaseType& asBase() { return static_cast< BaseType& > (*this); }
|
BaseType& asBase() { return static_cast< BaseType& > (*this); }
|
||||||
|
Loading…
Reference in New Issue
Block a user