/home/runner/work/kynema/kynema/kynema/src/solver/linear_solver/dss_handle_superlu_mt.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/solver/linear_solver/dss_handle_superlu_mt.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
dss_handle_superlu_mt.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <vector>
5
6#include "dss_algorithm.hpp"
7#include "slu_mt_ddefs.h"
8
9namespace kynema::dss {
10template <>
12 struct superluDssHandleType {
13 superlumt_options_t options{};
14 Gstat_t stat{};
15 SuperMatrix L{};
16 SuperMatrix U{};
17 std::vector<int> perm_r;
18 std::vector<int> perm_c;
19 std::vector<int> etree;
20 std::vector<int> colcnt_h;
21 std::vector<int> part_super_h;
22 std::vector<char> work;
23
24 superluDssHandleType() {
25 options.nprocs = 1;
26 options.fact = DOFACT;
27 options.trans = TRANS;
28 options.refact = NO;
29 options.panel_size = 1;
30 options.relax = 1;
31 options.diag_pivot_thresh = 1.;
32 options.usepr = NO;
33 options.PrintStat = NO;
34 options.drop_tol = 0.;
35 options.lwork = 0;
36 }
37
38 superluDssHandleType(superluDssHandleType&) = delete;
39 void operator=(superluDssHandleType&) = delete;
40 superluDssHandleType(superluDssHandleType&&) = delete;
41 void operator=(superluDssHandleType&&) = delete;
42
43 ~superluDssHandleType() { StatFree(&stat); }
44 };
45 std::shared_ptr<superluDssHandleType> superlu_dss_handle;
46
47public:
48 Handle() : superlu_dss_handle(std::make_shared<superluDssHandleType>()) {}
49
50 superlumt_options_t& get_options() { return superlu_dss_handle->options; }
51
52 Gstat_t& get_stat() { return superlu_dss_handle->stat; }
53
54 SuperMatrix& get_L() { return superlu_dss_handle->L; }
55
56 SuperMatrix& get_U() { return superlu_dss_handle->U; }
57
58 std::vector<int>& get_perm_r() { return superlu_dss_handle->perm_r; }
59 std::vector<int>& get_perm_c() { return superlu_dss_handle->perm_c; }
60 std::vector<int>& get_etree() { return superlu_dss_handle->etree; }
61 std::vector<int>& get_colcnt_h() { return superlu_dss_handle->colcnt_h; }
62 std::vector<int>& get_part_super_h() { return superlu_dss_handle->part_super_h; }
63 std::vector<char>& get_work() { return superlu_dss_handle->work; }
64};
65
66} // namespace kynema::dss
std::vector< int > & get_perm_r()
Definition dss_handle_superlu_mt.hpp:58
std::vector< int > & get_part_super_h()
Definition dss_handle_superlu_mt.hpp:62
std::vector< int > & get_etree()
Definition dss_handle_superlu_mt.hpp:60
Handle()
Definition dss_handle_superlu_mt.hpp:48
SuperMatrix & get_U()
Definition dss_handle_superlu_mt.hpp:56
SuperMatrix & get_L()
Definition dss_handle_superlu_mt.hpp:54
std::vector< int > & get_colcnt_h()
Definition dss_handle_superlu_mt.hpp:61
superlumt_options_t & get_options()
Definition dss_handle_superlu_mt.hpp:50
std::vector< int > & get_perm_c()
Definition dss_handle_superlu_mt.hpp:59
Gstat_t & get_stat()
Definition dss_handle_superlu_mt.hpp:52
std::vector< char > & get_work()
Definition dss_handle_superlu_mt.hpp:63
Definition dss_handle.hpp:10
Definition dss_algorithm.hpp:4
Algorithm
Definition dss_algorithm.hpp:6