5 #ifndef DUNE_ISTL_SUPERMATRIX_HH 6 #define DUNE_ISTL_SUPERMATRIX_HH 12 #include <dune/common/fmatrix.hh> 13 #include <dune/common/fvector.hh> 14 #include <dune/common/typetraits.hh> 32 #if __has_include("slu_sdefs.h") 36 static void create(SuperMatrix *
mat,
int n,
int m,
int offset,
37 float *values,
int *rowindex,
int* colindex,
38 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
40 sCreate_CompCol_Matrix(
mat, n, m, offset, values, rowindex, colindex,
46 struct SuperMatrixPrinter<float>
48 static void print(
char* name, SuperMatrix*
mat)
50 sPrint_CompCol_Matrix(name,
mat);
55 #if __has_include("slu_ddefs.h") 57 struct SuperMatrixCreateSparseChooser<double>
59 static void create(SuperMatrix *
mat,
int n,
int m,
int offset,
60 double *values,
int *rowindex,
int* colindex,
61 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
63 dCreate_CompCol_Matrix(
mat, n, m, offset, values, rowindex, colindex,
69 struct SuperMatrixPrinter<double>
71 static void print(
char* name, SuperMatrix*
mat)
73 dPrint_CompCol_Matrix(name,
mat);
78 #if __has_include("slu_cdefs.h") 80 struct SuperMatrixCreateSparseChooser<
std::complex<float> >
82 static void create(SuperMatrix *
mat,
int n,
int m,
int offset,
83 std::complex<float> *values,
int *rowindex,
int* colindex,
84 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
86 cCreate_CompCol_Matrix(
mat, n, m, offset, reinterpret_cast< singlecomplex*>(values),
87 rowindex, colindex, stype, dtype, mtype);
92 struct SuperMatrixPrinter<
std::complex<float> >
94 static void print(
char* name, SuperMatrix*
mat)
96 cPrint_CompCol_Matrix(name,
mat);
101 #if __has_include("slu_zdefs.h") 103 struct SuperMatrixCreateSparseChooser<
std::complex<double> >
105 static void create(SuperMatrix *
mat,
int n,
int m,
int offset,
106 std::complex<double> *values,
int *rowindex,
int* colindex,
107 Stype_t stype, Dtype_t dtype, Mtype_t mtype)
109 zCreate_CompCol_Matrix(
mat, n, m, offset, reinterpret_cast<doublecomplex*>(values),
110 rowindex, colindex, stype, dtype, mtype);
115 struct SuperMatrixPrinter<
std::complex<double> >
117 static void print(
char* name, SuperMatrix*
mat)
119 zPrint_CompCol_Matrix(name,
mat);
136 std::is_same<T,float>::value ? SLU_S :
137 ( std::is_same<T,std::complex<double> >::value ? SLU_Z :
138 ( std::is_same<T,std::complex<float> >::value ? SLU_C : SLU_D ));
184 template<
class M,
class X,
class TM,
class TD,
class T1>
187 template<
class T,
bool flag>
193 template<
class B,
class TA>
195 :
public ISTL::Impl::BCCSMatrix<typename BCRSMatrix<B,TA>::field_type, int>
197 template<
class M,
class X,
class TM,
class TD,
class T1>
221 if (this->N_+this->M_*this->Nnz_ != 0)
226 operator SuperMatrix&()
232 operator const SuperMatrix&()
const 239 if (this->N_ + this->M_ + this->Nnz_!=0)
244 ISTL::Impl::BCCSMatrixInitializer<Matrix, int> initializer(*
this);
246 copyToBCCSMatrix(initializer,
mat);
249 ::create(&A, this->N_, this->M_, this->colstart[this->N_],
250 this->values,this->rowindex, this->colstart, SLU_NC,
257 if (this->N_ + this->M_ + this->Nnz_!=0)
262 ISTL::Impl::BCCSMatrixInitializer<Matrix, int> initializer(*
this);
264 copyToBCCSMatrix(initializer,
mat);
267 ::create(&A, this->N_, this->M_, this->colstart[this->N_],
268 this->values,this->rowindex, this->colstart, SLU_NC,
281 if(this->N_+this->M_+this->Nnz_!=0)
287 copyToBCCSMatrix(initializer, ISTL::Impl::MatrixRowSubset<
Matrix,std::set<typename Matrix::size_type> >(
mat,mrs));
297 copyToBCCSMatrix(initializer,
mat);
303 ISTL::Impl::BCCSMatrix<typename BCRSMatrix<B,TA>::field_type,
int>::free();
304 SUPERLU_FREE(A.Store);
310 template<
class B,
class A>
312 :
public ISTL::Impl::BCCSMatrixInitializer<BCRSMatrix<B,A>, int>
314 template<
class I,
class S,
class D>
329 ISTL::Impl::BCCSMatrixInitializer<BCRSMatrix<B,A>,
int>::createMatrix();
331 ::create(&slumat->A, slumat->N_, slumat->M_, slumat->colstart[this->cols],
332 slumat->values,slumat->rowindex, slumat->colstart, SLU_NC,
339 #endif // HAVE_SUPERLU double float_type
Definition: supermatrix.hh:144
Initializer for SuperLU Matrices representing the subdomains.
Definition: bccsmatrixinitializer.hh:19
Definition: supermatrix.hh:131
Matrix & mat
Definition: matrixmatrix.hh:347
Definition: supermatrix.hh:25
A sparse block matrix with compressed row storage.
Definition: bcrsmatrix.hh:466
SuperLu Solver.
Definition: superlu.hh:267
SuperLUMatrix< BCRSMatrix< B, TA > > & operator=(const BCRSMatrix< B, TA > &mat)
Definition: supermatrix.hh:237
Sequential overlapping Schwarz preconditioner.
Definition: ldl.hh:43
virtual ~SuperLUMatrix()
Destructor.
Definition: supermatrix.hh:219
Utility class for converting an ISTL Matrix into a SuperLU Matrix.
Definition: supermatrix.hh:174
Dune::SuperLUMatrix< Matrix > SuperLUMatrix
Definition: supermatrix.hh:318
Definition: supermatrix.hh:125
static auto coldim(const M &)
Definition: matrixutils.hh:219
float float_type
Definition: supermatrix.hh:165
BCRSMatrix< B, A > Matrix
Definition: supermatrix.hh:317
void free() override
free allocated space.
Definition: supermatrix.hh:301
SuperLUMatrix()
Definition: supermatrix.hh:215
static const Dtype_t type
Definition: supermatrix.hh:127
BCRSMatrix< B, TA > Matrix
The type of the matrix to convert.
Definition: supermatrix.hh:202
SuperLUMatrix< BCRSMatrix< B, TA > > & operator=(const SuperLUMatrix< BCRSMatrix< B, TA > > &mat)
Definition: supermatrix.hh:255
Matrix::size_type size_type
Definition: supermatrix.hh:206
SuperMatrixInitializer()
Definition: supermatrix.hh:324
This file implements a vector space as a tensor product of a given vector space. The number of compon...
SuperMatrixInitializer(SuperLUMatrix &lum)
Definition: supermatrix.hh:320
Implementation of the BCRSMatrix class.
void createMatrix() const override
Definition: supermatrix.hh:327
static auto rowdim(const M &)
Definition: matrixutils.hh:214
A::size_type size_type
The type for the index access and the size.
Definition: bcrsmatrix.hh:498
double float_type
Definition: supermatrix.hh:158
SuperLUMatrix(const Matrix &mat)
Constructor that initializes the data.
Definition: supermatrix.hh:212
virtual void setMatrix(const Matrix &mat)
Initialize data from given matrix.
Definition: supermatrix.hh:291
float float_type
Definition: supermatrix.hh:151
Definition: supermatrix.hh:29
virtual void setMatrix(const Matrix &mat, const std::set< typename Matrix::size_type > &mrs)
Initialize data from a given set of matrix rows and columns.
Definition: supermatrix.hh:279
Definition: allocator.hh:11
Definition: supermatrix.hh:178