b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2sparse_solver.H
1//------------------------------------------------------------------------
2// b2sparse_solver.H --
3//
4//
5// written by Mathias Doreille
6//
7// Copyright (c) 2004-2012,2016
8// SMR Engineering & Development SA
9// 2502 Bienne, Switzerland
10//
11// All Rights Reserved. Proprietary source code. The contents of
12// this file may not be disclosed to third parties, copied or
13// duplicated in any form, in whole or in part, without the prior
14// written permission of SMR.
15//------------------------------------------------------------------------
16
17#ifndef _B2SPARSE_SOLVER_H_
18#define _B2SPARSE_SOLVER_H_
19
20#include <cstddef>
21
22#include "utils/b2dictionary.H"
23#include "utils/b2util.H"
24
25namespace b2000 { namespace b2linalg {
26
27extern const char SingularMatrixError_name[];
28class SingularMatrixError : public GenericException<SingularMatrixError_name> {
29public:
30 template <typename T>
31 SingularMatrixError& operator<<(const T& t) {
33 return *this;
34 }
35
36 SingularMatrixError& operator<<(const Throw& t) {
37 set_location(t);
38 throw *this;
39 return *this;
40 }
41
42 size_t null_space_size;
43 std::vector<size_t> singular_dofs;
44};
45
46template <typename T>
47class LDLt_sparse_solver {
48public:
49 virtual ~LDLt_sparse_solver() {}
50
51 virtual void init(
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;
54
55 virtual void update_value() = 0;
56
57 virtual void resolve(
58 size_t s, size_t nrhs, const T* b, size_t ldb, T* x, size_t ldx,
59 char left_or_right = ' ') = 0;
60
61 virtual size_t get_null_space_size() { return 0; }
62
63 virtual void get_null_space(size_t s, size_t nv, T* m, size_t lm) {
65 }
66
67 static LDLt_sparse_solver* new_default(const int connectivity, const Dictionary& dictionary);
68};
69
70template <typename T>
71class LDLt_extension_sparse_solver {
72public:
73 virtual ~LDLt_extension_sparse_solver() {}
74
75 virtual void init(
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;
78
79 virtual void update_value() = 0;
80
81 virtual void resolve(
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;
84
85 virtual size_t get_null_space_size() { return 0; }
86
87 virtual void get_null_space(size_t s, size_t nv, T* m, size_t lm) {
89 }
90
91 static LDLt_extension_sparse_solver* new_default(
92 const int connectivity, const Dictionary& dictionary);
93};
94
95template <typename T>
96class LU_sparse_solver {
97public:
98 virtual ~LU_sparse_solver() {}
99
100 virtual void init(
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;
103
104 virtual void update_value() = 0;
105
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;
109
110 virtual size_t get_null_space_size() { return 0; }
111
112 virtual void get_null_space(size_t s, size_t nv, const T* m, size_t lm) {
114 }
115
116 static LU_sparse_solver* new_default(const int connectivity, const Dictionary& dictionary);
117};
118
119template <typename T>
120class LU_extension_sparse_solver {
121public:
122 virtual ~LU_extension_sparse_solver() {}
123
124 virtual void init(
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;
127
128 virtual void update_value() = 0;
129
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;
133
134 virtual size_t get_null_space_size() { return 0; }
135
136 virtual void get_null_space(size_t s, size_t nv, const T* m, size_t lm) {
138 }
139
140 static LU_extension_sparse_solver* new_default(
141 const int connectivity, const Dictionary& dictionary);
142};
143
144}} // namespace b2000::b2linalg
145
146#include "b2sparse_solver.inl"
147
148#endif
#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