10#include <kernel/solver/adp_solver_base.hpp> 
   12#if defined(FEAT_HAVE_SUPERLU_DIST) || defined(DOXYGEN) 
   54      void* create_core(
const void* comm, Index num_global_dofs, Index dof_offset,
 
   55        Index num_owned_dofs, 
const unsigned int* row_ptr, 
const unsigned int* col_idx);
 
   56      void* create_core(
const void* comm, Index num_global_dofs, Index dof_offset,
 
   57        Index num_owned_dofs, 
const unsigned long* row_ptr, 
const unsigned long* col_idx);
 
   58      void* create_core(
const void* comm, Index num_global_dofs, Index dof_offset,
 
   59        Index num_owned_dofs, 
const unsigned long long* row_ptr, 
const unsigned long long* col_idx);
 
   62      void destroy_core(
void* core);
 
   65      int init_numeric(
void* core, 
const double* vals);
 
   74      int solve(
void* core, 
double* x);
 
   91    template<
typename Matrix_, 
typename Filter_>
 
  109      explicit SuperLU(
const Matrix_& matrix, 
const Filter_& filter) :
 
  123        XASSERT(this->_core == 
nullptr);
 
  126        this->_core = SuperLU_Aux::create_core(
 
  141        XASSERT(this->_core != 
nullptr);
 
  143        SuperLU_Aux::destroy_core(this->_core);
 
  144        this->_core = 
nullptr;
 
  151        XASSERT(this->_core != 
nullptr);
 
  155        const int info = SuperLU_Aux::init_numeric(this->_core, this->
_get_mat_vals());
 
  159        XASSERTM(info >= 0, 
"SuperLU: illegal argument in init_numeric()");
 
  179        XASSERTM(info == 0, 
"SuperLU: solve returned non-zero info value");
 
  201    template<
typename Matrix_, 
typename Filter_>
 
  202    std::shared_ptr<SuperLU<Matrix_, Filter_>> 
new_superlu(
const Matrix_& matrix, 
const Filter_& filter)
 
  205      return std::make_shared<SuperLU<Matrix_, Filter_>>(matrix, filter);
 
  207      XABORT(
"new_superlu: SuperLU solver is only available in MPI builds")
 
#define XASSERT(expr)
Assertion macro definition.
#define XASSERTM(expr, msg)
Assertion macro definition with custom message.
Base-Class for Solvers based on Algebraic-DOF-Partitioning.
const Dist::Comm * _get_comm() const
const DataType * _get_mat_vals() const
const IndexType * _get_mat_col_idx() const
DataType * _get_vec_cor_vals(VectorType &vec_cor)
Index _get_num_owned_dofs() const
Index _get_global_dof_offset() const
void _download_vec_cor(VectorType &vec_cor)
const IndexType * _get_mat_row_ptr() const
Index _get_num_global_dofs() const
void _upload_vec_cor(const VectorType &vec_cor)
Singular Matrix exception.
virtual void init_symbolic()
Symbolic initialization method.
virtual void init_numeric()
Numeric initialization method.
virtual void done_symbolic()
Symbolic finalization method.
Base-class for solver generated exceptions.
(distributed) SuperLU direct sparse solver
virtual void done_symbolic() override
Symbolic finalization method.
virtual String name() const override
Returns a descriptive string.
Matrix_::VectorTypeL VectorType
our vector type
virtual void init_symbolic() override
Symbolic initialization method.
SuperLU(const Matrix_ &matrix, const Filter_ &filter)
Constructor.
ADPSolverBase< Matrix_, Filter_ > BaseClass
our base class
virtual void init_numeric() override
Numeric initialization method.
void * _core
a pointer to our opaque SuperLU core object
String class implementation.
Status
Solver status return codes enumeration.
@ success
solving successful (convergence criterion fulfilled)
std::shared_ptr< SuperLU< Matrix_, Filter_ > > new_superlu(const Matrix_ &matrix, const Filter_ &filter)
Creates a new SuperLU solver object.
Status solve(SolverBase< Vector_ > &solver, Vector_ &vec_sol, const Vector_ &vec_rhs, const Matrix_ &matrix, const Filter_ &filter)
Solve linear system with initial solution guess.