17#ifndef _B2SPARSE_SOLVER_H_ 
   18#define _B2SPARSE_SOLVER_H_ 
   25namespace b2000 { 
namespace b2linalg {
 
   27extern const char SingularMatrixError_name[];
 
   28class SingularMatrixError : 
public GenericException<SingularMatrixError_name> {
 
   36    SingularMatrixError& 
operator<<(
const Throw& t) {
 
   42    size_t null_space_size;
 
   43    std::vector<size_t> singular_dofs;
 
   47class LDLt_sparse_solver {
 
   49    virtual ~LDLt_sparse_solver() {}
 
   52          size_t s, 
size_t nnz, 
const size_t* colind, 
const size_t* rowind, 
const T* value,
 
   53          const int connectivity, 
const Dictionary& dictionary) = 0;
 
   55    virtual void update_value() = 0;
 
   58          size_t s, 
size_t nrhs, 
const T* b, 
size_t ldb, T* x, 
size_t ldx,
 
   59          char left_or_right = 
' ') = 0;
 
   61    virtual size_t get_null_space_size() { 
return 0; }
 
   63    virtual void get_null_space(
size_t s, 
size_t nv, T* m, 
size_t lm) {
 
   67    static LDLt_sparse_solver* new_default(
const int connectivity, 
const Dictionary& dictionary);
 
   71class LDLt_extension_sparse_solver {
 
   73    virtual ~LDLt_extension_sparse_solver() {}
 
   76          size_t s, 
size_t nnz, 
const size_t* colind, 
const size_t* rowind, 
const T* value,
 
   77          size_t s_ext, 
const int connectivity, 
const Dictionary& dictionary) = 0;
 
   79    virtual void update_value() = 0;
 
   82          size_t s, 
size_t nrhs, 
const T* b, 
size_t ldb, T* x, 
size_t ldx, 
const T* ma = 0,
 
   83          const T* mb = 0, 
const T* mc = 0, 
char left_or_right = 
' ') = 0;
 
   85    virtual size_t get_null_space_size() { 
return 0; }
 
   87    virtual void get_null_space(
size_t s, 
size_t nv, T* m, 
size_t lm) {
 
   91    static LDLt_extension_sparse_solver* new_default(
 
   92          const int connectivity, 
const Dictionary& dictionary);
 
   96class LU_sparse_solver {
 
   98    virtual ~LU_sparse_solver() {}
 
  101          size_t s, 
size_t nnz, 
const size_t* colind, 
const size_t* rowind, 
const T* value,
 
  102          const int connectivity, 
const Dictionary& dictionary) = 0;
 
  104    virtual void update_value() = 0;
 
  106    virtual void resolve(
 
  107          size_t s, 
size_t nrhs, 
const T* b, 
size_t ldb, T* x, 
size_t ldx,
 
  108          char left_or_right = 
' ') = 0;
 
  110    virtual size_t get_null_space_size() { 
return 0; }
 
  112    virtual void get_null_space(
size_t s, 
size_t nv, 
const T* m, 
size_t lm) {
 
  116    static LU_sparse_solver* new_default(
const int connectivity, 
const Dictionary& dictionary);
 
  120class LU_extension_sparse_solver {
 
  122    virtual ~LU_extension_sparse_solver() {}
 
  125          size_t s, 
size_t nnz, 
const size_t* colind, 
const size_t* rowind, 
const T* value,
 
  126          size_t s_ext, 
const int connectivity, 
const Dictionary& dictionary) = 0;
 
  128    virtual void update_value() = 0;
 
  130    virtual void resolve(
 
  131          size_t s, 
size_t nrhs, 
const T* b, 
size_t ldb, T* x, 
size_t ldx, 
const T* ma = 0,
 
  132          const T* mb = 0, 
const T* mc = 0, 
char left_or_right = 
' ') = 0;
 
  134    virtual size_t get_null_space_size() { 
return 0; }
 
  136    virtual void get_null_space(
size_t s, 
size_t nv, 
const T* m, 
size_t lm) {
 
  140    static LU_extension_sparse_solver* new_default(
 
  141          const int connectivity, 
const Dictionary& dictionary);
 
  146#include "b2sparse_solver.inl" 
#define THROW
Definition b2exception.H:198
 
Exception & operator<<(const T &t)
Definition b2exception.H:203
 
Exception & operator<<(const std::pair< T1, T2 > &t)
Definition b2exception.H:212
 
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
 
GenericException< UnimplementedError_name > UnimplementedError
Definition b2exception.H:314