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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/solver/linear_solver/dss_numeric_cudss.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
dss_numeric_cudss.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cudss.h>
4
5#include "dss_algorithm.hpp"
7
8namespace kynema::dss {
9template <typename CrsMatrixType>
10struct NumericFunction<Handle<Algorithm::CUDSS>, CrsMatrixType> {
11 static void numeric(Handle<Algorithm::CUDSS>& dss_handle, CrsMatrixType& A) {
12 const auto num_rows = A.numRows();
13 const auto num_cols = A.numCols();
14 const auto num_non_zero = A.nnz();
15
16 auto* values = A.values.data();
17 auto* row_ptrs = A.graph.row_map.data();
18 auto* col_inds = A.graph.entries.data();
19
20 auto& handle = dss_handle.get_handle();
21 auto& config = dss_handle.get_config();
22 auto& data = dss_handle.get_data();
23
24 cudssMatrix_t A_cudss;
25 cudssMatrix_t x_cudss;
26 cudssMatrix_t b_cudss;
27
28 cudssMatrixCreateCsr(
29 &A_cudss, num_rows, num_cols, num_non_zero, const_cast<int*>(row_ptrs), nullptr,
30 col_inds, values, CUDA_R_32I, CUDA_R_64F, CUDSS_MTYPE_GENERAL, CUDSS_MVIEW_FULL,
31 CUDSS_BASE_ZERO
32 );
33 cudssMatrixCreateDn(
34 &b_cudss, num_cols, 1, num_cols, nullptr, CUDA_R_64F, CUDSS_LAYOUT_COL_MAJOR
35 );
36 cudssMatrixCreateDn(
37 &x_cudss, num_rows, 1, num_rows, nullptr, CUDA_R_64F, CUDSS_LAYOUT_COL_MAJOR
38 );
39
40 if (dss_handle.is_initial_factorization()) {
41 cudssExecute(handle, CUDSS_PHASE_FACTORIZATION, config, data, A_cudss, x_cudss, b_cudss);
42 dss_handle.set_initial_factorization(false);
43 } else {
44 cudssExecute(
45 handle, CUDSS_PHASE_REFACTORIZATION, config, data, A_cudss, x_cudss, b_cudss
46 );
47 }
48
49 cudssMatrixDestroy(A_cudss);
50 cudssMatrixDestroy(b_cudss);
51 cudssMatrixDestroy(x_cudss);
52 }
53};
54} // namespace kynema::dss
Definition dss_handle.hpp:10
Definition dss_algorithm.hpp:4
Algorithm
Definition dss_algorithm.hpp:6
static void numeric(Handle< Algorithm::CUDSS > &dss_handle, CrsMatrixType &A)
Definition dss_numeric_cudss.hpp:11
Definition dss_numeric.hpp:8