cgv
Loading...
Searching...
No Matches
sparse_les.cxx
1#include "sparse_les.h"
2#include <string>
3
4namespace cgv {
5 namespace math {
6
11
12std::vector<sparse_les_factory_ptr>& ref_solver_factories()
13{
14 static std::vector<sparse_les_factory_ptr> facs;
15 return facs;
16}
17
20{
21 ref_solver_factories().push_back(sls_fac);
22}
24const std::vector<sparse_les_factory_ptr>& sparse_les::get_solver_factories()
25{
26 return ref_solver_factories();
27}
28
30sparse_les_ptr sparse_les::create_by_name(const std::string& solver_name, int n, int nr_rhs, int nr_nze)
31{
32 std::vector<sparse_les_factory_ptr>& F = ref_solver_factories();
33 for (std::vector<sparse_les_factory_ptr>::const_iterator fi = F.begin(); fi != F.end(); ++fi) {
34 if ((*fi)->get_solver_name() == solver_name)
35 return (*fi)->create(n, nr_rhs, nr_nze);
36 }
37 return sparse_les_ptr();
38}
39
41sparse_les_ptr sparse_les::create_by_cap(SparseLesCaps caps, int n, int nr_rhs, int nr_nze)
42{
43 std::vector<sparse_les_factory_ptr>& F = ref_solver_factories();
44 for (std::vector<sparse_les_factory_ptr>::const_iterator fi = F.begin(); fi != F.end(); ++fi) {
45 if (((*fi)->get_caps() & caps) == caps)
46 return (*fi)->create(n, nr_rhs, nr_nze);
47 }
48 return sparse_les_ptr();
49}
50
52void sparse_les::set_b_entry(int i, double val)
53{
54 set_b_entry(i,0,val);
55}
58{
59 return ref_b_entry(i, 0);
60}
62double sparse_les::get_x_entry(int i) const
63{
64 return get_x_entry(i,0);
65}
66
67 }
68}
reference counted pointer, which can work together with types that are derived from ref_counted,...
Definition ref_ptr.h:160
virtual ~sparse_les_factory()
make constructor virtual
Definition sparse_les.cxx:8
static sparse_les_ptr create_by_cap(SparseLesCaps caps, int n, int nr_rhs, int nr_nze=-1)
check the registered solver types for one with the given capabilities and create an instance of it
virtual double get_x_entry(int i) const
return the i-th component of a single solution vector
virtual double & ref_b_entry(int i)
return reference to i-th entry in a single right hand side b
static void register_solver_factory(sparse_les_factory_ptr sls_fac)
register a factory for a new type of linear equation solver
virtual void set_b_entry(int i, double val)
set i-th entry in a single right hand side b
static sparse_les_ptr create_by_name(const std::string &solver_name, int n, int nr_rhs, int nr_nze=-1)
check the registered solver types for one with the given name
static const std::vector< sparse_les_factory_ptr > & get_solver_factories()
return the list of registered solvers
the cgv namespace
Definition print.h:11