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