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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/solver/linear_solver/dss_handle_klu.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
dss_handle_klu.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
5#include "dss_algorithm.hpp"
6#include "klu.h"
7
8namespace kynema::dss {
9template <>
11 struct kluDssHandleType {
12 klu_symbolic* Symbolic = nullptr;
13 klu_numeric* Numeric = nullptr;
14 klu_common Common{};
15
16 kluDssHandleType() {
17 klu_defaults(&Common);
18 Common.ordering = 1;
19 }
20
21 kluDssHandleType(kluDssHandleType&) = delete;
22 void operator=(kluDssHandleType&) = delete;
23 kluDssHandleType(kluDssHandleType&&) = delete;
24 void operator=(kluDssHandleType&&) = delete;
25
26 ~kluDssHandleType() {
27 if (Symbolic != nullptr) {
28 klu_free_symbolic(&Symbolic, &Common);
29 }
30 if (Numeric != nullptr) {
31 klu_free_numeric(&Numeric, &Common);
32 }
33 }
34 };
35 std::shared_ptr<kluDssHandleType> klu_dss_handle;
36
37public:
38 Handle() : klu_dss_handle(std::make_shared<kluDssHandleType>()) {}
39
40 klu_symbolic*& get_symbolic() { return klu_dss_handle->Symbolic; }
41
42 klu_numeric*& get_numeric() { return klu_dss_handle->Numeric; }
43
44 klu_common& get_common() { return klu_dss_handle->Common; }
45};
46
47} // namespace kynema::dss
Handle()
Definition dss_handle_klu.hpp:38
klu_numeric *& get_numeric()
Definition dss_handle_klu.hpp:42
klu_symbolic *& get_symbolic()
Definition dss_handle_klu.hpp:40
klu_common & get_common()
Definition dss_handle_klu.hpp:44
Definition dss_handle.hpp:10
Definition dss_algorithm.hpp:4
Algorithm
Definition dss_algorithm.hpp:6