26 #define eigen_assert( cond ) GISMO_ASSERT( cond, "" )
29 #define EIGEN_MATRIXBASE_PLUGIN <gsMatrix/gsMatrixAddons.h>
30 #define EIGEN_PLAINOBJECTBASE_PLUGIN <gsMatrix/gsPlainObjectBaseAddons.h>
33 #include <gsEigen/Core>
35 #if defined(gsMpfr_ENABLED)
36 #include <unsupported/Eigen/MPRealSupport>
39 #if defined(gsGmp_ENABLED)
40 #include <unsupported/Eigen/MPQClassSupport>
43 #include <gsEigen/Dense>
44 #include <gsEigen/Sparse>
45 #include <gsEigen/StdVector>
46 #include <gsEigen/Geometry>
54 #ifdef GISMO_WITH_SUPERLU
55 #include <gsEigen/SuperLUSupport>
58 #ifdef GISMO_WITH_PARDISO
59 #include <gsEigen/PardisoSupport>
62 #ifdef GISMO_WITH_PASTIX
63 #include <gsEigen/PaStiXSupport>
77 #ifdef GISMO_WITH_PYBIND11
78 #include <pybind11/eigen.h>
83 #undef EIGEN_MATRIXBASE_PLUGIN
84 #undef EIGEN_PLAINOBJECTBASE_PLUGIN
90 using gsEigen::internal::cast;
99 template<
typename Derived>
100 inline bool (
isnumber)(
const gsEigen::MatrixBase<Derived>& x)
101 {
return ((x.array() == x.array())).all(); }
108 template<
typename Derived>
109 inline bool isfinite(
const gsEigen::MatrixBase<Derived>& x)
110 {
return ( (x - x).array() == (x - x).array()).all(); }
116 using gsEigen::Dynamic ;
118 using gsEigen::Lower;
119 using gsEigen::Upper;
122 using gsEigen::RowMajor;
123 using gsEigen::ColMajor;
124 using gsEigen::AutoAlign;
133 template <
int Dim,
int Change>
136 enum { D = Change+Dim<0 ? 0 : Dim + Change };
138 template <
int Change>
139 struct ChangeDim<Dynamic, Change>
141 enum { D = Dynamic };
157 typedef gsEigen::ConjugateGradient<gsEigen::SparseMatrix<T,0,index_t>,
158 gsEigen::Lower|gsEigen::Upper, gsEigen::IdentityPreconditioner>
CGIdentity;
161 typedef gsEigen::ConjugateGradient<gsEigen::SparseMatrix<T,0,index_t>,
162 gsEigen::Lower|gsEigen::Upper, gsEigen::DiagonalPreconditioner<T> >
CGDiagonal;
165 typedef gsEigen::BiCGSTAB<gsEigen::SparseMatrix<T,0,index_t>,
169 typedef gsEigen::BiCGSTAB<gsEigen::SparseMatrix<T,0,index_t>,
173 typedef gsEigen::BiCGSTAB<gsEigen::SparseMatrix<T,0,index_t>,
177 typedef gsEigen::SimplicialLDLT<gsEigen::SparseMatrix<T,0,index_t> >
SimplicialLDLT;
180 typedef gsEigen::SimplicialLLT<gsEigen::SparseMatrix<T,0,index_t> >
SimplicialLLT;
183 typedef gsEigen::SparseLU<gsEigen::SparseMatrix<T,0,index_t>,
187 typedef gsEigen::SparseQR<gsEigen::SparseMatrix<T,0,index_t>,
190 #ifdef GISMO_WITH_SUPERLU
191 typedef gsEigen::SuperLU<gsEigen::SparseMatrix<T,0,index_t> > SuperLU;
195 #ifdef GISMO_WITH_PARDISO
196 typedef gsEigen::PardisoLDLT<gsEigen::SparseMatrix<T,0,int> > PardisoLDLT;
198 typedef gsEigen::PardisoLLT <gsEigen::SparseMatrix<T,0,int> > PardisoLLT;
199 typedef gsEigen::PardisoLU <gsEigen::SparseMatrix<T,0,int> > PardisoLU;
Provides declaration of Matrix class.
Provides declaration of the gsSparseMatrix class.
Provides declaration of Point class.
Creates a mapped object or data pointer to a matrix without copying data.
Definition: gsLinearAlgebra.h:126
bool() isnumber(const gsEigen::MatrixBase< Derived > &x)
Check if all the entires if the matrix x are not NAN (not a number)
Definition: gsLinearAlgebra.h:100
gsEigen::SparseQR< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::COLAMDOrdering< index_t > > SparseQR
Sparse QR solver.
Definition: gsLinearAlgebra.h:188
Provides declaration of Vector class.
gsEigen::SimplicialLDLT< gsEigen::SparseMatrix< T, 0, index_t > > SimplicialLDLT
Direct LDLt factorization.
Definition: gsLinearAlgebra.h:177
abstract interfaces for solvers and wrapper around Eigen solvers
gsEigen::BiCGSTAB< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::IdentityPreconditioner > BiCGSTABIdentity
BiCGSTAB without preconditioner (identity as preconditioner)
Definition: gsLinearAlgebra.h:174
Wraps pointers as matrix objects.
gsEigen::ConjugateGradient< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::Lower|gsEigen::Upper, gsEigen::DiagonalPreconditioner< T > > CGDiagonal
Congugate gradient with diagonal (Jacobi) preconditioner.
Definition: gsLinearAlgebra.h:162
Creates a mapped object or data pointer to a vector without copying data.
Definition: gsLinearAlgebra.h:129
Mathematical functions for use in G+Smo.
gsEigen::SparseLU< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::COLAMDOrdering< index_t > > SparseLU
Sparse LU solver.
Definition: gsLinearAlgebra.h:184
bool isfinite(const gsEigen::MatrixBase< Derived > &x)
Check if all the entires if the matrix x are not INF (infinite)
Definition: gsLinearAlgebra.h:109
Adjugate extension for Eigen matrix objects.
Wraps a matrix and attaches a block structure to it.
Creates a mapped object or data pointer to a const matrix without copying data.
Definition: gsLinearAlgebra.h:127
BlockTranspose extension for Eigen matrix objects.
gsEigen::BiCGSTAB< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::IncompleteLUT< T, index_t > > BiCGSTABILUT
BiCGSTAB with Incomplete LU factorization with dual-threshold strategy.
Definition: gsLinearAlgebra.h:166
gsEigen::BiCGSTAB< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::DiagonalPreconditioner< T > > BiCGSTABDiagonal
BiCGSTAB with Diagonal (Jacobi) preconditioner.
Definition: gsLinearAlgebra.h:170
Creates a mapped object or data pointer to a const vector without copying data.
Definition: gsLinearAlgebra.h:130
gsEigen::SimplicialLLT< gsEigen::SparseMatrix< T, 0, index_t > > SimplicialLLT
Direct LLt factorization.
Definition: gsLinearAlgebra.h:180
Adaptor for Eigen types.
Definition: gsLinearAlgebra.h:149
BlockDiag extension for Eigen matrix objects.
gsEigen::ConjugateGradient< gsEigen::SparseMatrix< T, 0, index_t >, gsEigen::Lower|gsEigen::Upper, gsEigen::IdentityPreconditioner > CGIdentity
Congugate gradient without preconditioner (identity as preconditioner)
Definition: gsLinearAlgebra.h:158
Provides declaration of SparseVector class (wrapping Eigen)
Extra forward declarations related to the Eigen library.