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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/solver/linear_solver/dss_handle_umfpack.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
dss_handle_umfpack.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <memory>
5
6#include <umfpack.h>
7
8#include "dss_algorithm.hpp"
9
10namespace kynema::dss {
11template <>
13 struct umfpackDssHandleType {
14 void* Symbolic = nullptr;
15 void* Numeric = nullptr;
16 std::array<double, UMFPACK_CONTROL> Control{};
17
18 umfpackDssHandleType() {
19 umfpack_di_defaults(Control.data());
20 Control[UMFPACK_ORDERING] = UMFPACK_ORDERING_BEST;
21 }
22
23 umfpackDssHandleType(umfpackDssHandleType&) = delete;
24 void operator=(umfpackDssHandleType&) = delete;
25 umfpackDssHandleType(umfpackDssHandleType&&) = delete;
26 void operator=(umfpackDssHandleType&&) = delete;
27
28 ~umfpackDssHandleType() {
29 umfpack_di_free_symbolic(&Symbolic);
30 umfpack_di_free_numeric(&Numeric);
31 }
32 };
33 std::shared_ptr<umfpackDssHandleType> umfpack_dss_handle;
34
35public:
36 Handle() : umfpack_dss_handle(std::make_shared<umfpackDssHandleType>()) {}
37
38 void*& get_symbolic() { return umfpack_dss_handle->Symbolic; }
39
40 void*& get_numeric() { return umfpack_dss_handle->Numeric; }
41
42 double* get_control() { return umfpack_dss_handle->Control.data(); }
43};
44
45} // namespace kynema::dss
void *& get_symbolic()
Definition dss_handle_umfpack.hpp:38
Handle()
Definition dss_handle_umfpack.hpp:36
double * get_control()
Definition dss_handle_umfpack.hpp:42
void *& get_numeric()
Definition dss_handle_umfpack.hpp:40
Definition dss_handle.hpp:10
Definition dss_algorithm.hpp:4
Algorithm
Definition dss_algorithm.hpp:6