Linear Algebra Tools

template<typename TM, typename TIM, typename S>
void Muscat::inv22(TM &m, TIM &minv, S &det)
template<typename TM, typename TIM, typename S>
void Muscat::inv33(TM &m, TIM &minv, S &det)
void Muscat::GetInv_Jacobian_Det(MapMatrixDDD &valdphidxi, const Eigen::Ref<const MatrixDDD> &xcoor, int &Dimensionality, MatrixDDD &Jacobian, double &Jdet, Eigen::ColPivHouseholderQR<MatrixDDD> &Jinv)
void Muscat::GetNormal(const int &SpaceDim, const int &elementDim, MatrixDDD &Jacobian, MatrixD31 &Normal)
struct EigenSolvers

Public Types

typedef Eigen::ConjugateGradient<SpMatD, Upper | Lower> EigenSpCG
typedef Eigen::SparseLU<SpMatD> EigenSpLU
typedef Eigen::SparseQR<SpMatD, Eigen::COLAMDOrdering<int>> EigenSpQR
typedef Eigen::BiCGSTAB<SpMatDR> EigenSpBiCGSTAB

Public Functions

inline EigenSolvers()
inline void Clean()
inline void ForceNumberOfThreads(int n)
inline void SetSolverType(int i)
inline void SetOp(const CMuscatIndex &sizem, const CMuscatIndex &sizen, const CMuscatIndex &ev_size, CMuscatFloat *ev, CMuscatIndex *ei, CMuscatIndex *ej, const double &tolerance)
inline void Solve(CMuscatIndex size, CMuscatFloat *_rhs, CMuscatFloat *_sol)
inline CMuscatIndex GetSPQRRank()
inline CMuscatIndex GetSPQR_R_nonZeros()
inline void GetSPQR_R(CMuscatIndex *sizei, CMuscatIndex *sizej, CMuscatFloat *ev, CMuscatIndex *ei, CMuscatIndex *ej)
inline void GetSPQR_P(CMuscatIndex *p)
inline CMuscatIndex GetSPQR_Q_nonZeros()
inline void GetSPQR_Q(CMuscatIndex *sizei, CMuscatIndex *sizej, CMuscatFloat *ev, CMuscatIndex *ei, CMuscatIndex *ej)

Public Members

std::unique_ptr<EigenSpCG> cgSolver
std::unique_ptr<EigenSpLU> luSolver
std::unique_ptr<EigenSpQR> spqrSolver
std::unique_ptr<EigenSpBiCGSTAB> bicgstabSolver
std::unique_ptr<SpMatD> A
std::unique_ptr<SpMatDR> A_rowmajor
int solverType
Eigen::SparseMatrix<double> Q
Eigen::SparseMatrix<double> R

Numpy like operators

MatrixID1 Muscat::NonZero(const MatrixBD1 &input)
template<typename TypeA, typename TypeB>
MatrixID1 Muscat::Intersect1D(const TypeA &A, const TypeB &B)
template<typename TypeA, typename TypeB>
MatrixID1 Muscat::Union1D(const TypeA &A, const TypeB &B)