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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/solver/linear_solver/dss_symbolic_cusolversp.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
dss_symbolic_cusolversp.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Kokkos_Core.hpp>
4#include <cusolverSp.h>
5#include <cusolverSp_LOWLEVEL_PREVIEW.h>
6
7#include "dss_algorithm.hpp"
9
10namespace kynema::dss {
11
12template <typename CrsMatrixType>
13struct SymbolicFunction<Handle<Algorithm::CUSOLVER_SP>, CrsMatrixType> {
14 static void symbolic(Handle<Algorithm::CUSOLVER_SP>& dss_handle, CrsMatrixType& A) {
15 const auto num_rows = A.numRows();
16 const auto num_cols = A.numCols();
17 const auto num_non_zero = A.nnz();
18
19 auto* values = A.values.data();
20 auto* row_ptrs = A.graph.row_map.data();
21 auto* col_inds = A.graph.entries.data();
22
23 auto& handle = dss_handle.get_handle();
24 auto& description = dss_handle.get_description();
25 auto& info = dss_handle.get_info();
26 auto& buffer = dss_handle.get_buffer();
27
28 cusolverSpXcsrqrAnalysis(
29 handle, num_rows, num_cols, num_non_zero, description, row_ptrs, col_inds, info
30 );
31
32 auto size_internal = 0UL;
33 auto size_chol = 0UL;
34 cusolverSpDcsrqrBufferInfo(
35 handle, num_rows, num_cols, num_non_zero, description, values, row_ptrs, col_inds, info,
36 &size_internal, &size_chol
37 );
38 if (size_chol > buffer.extent(0)) {
39 Kokkos::realloc(buffer, size_chol);
40 }
41 }
42};
43
44} // namespace kynema::dss
Definition dss_handle.hpp:10
Definition dss_algorithm.hpp:4
Algorithm
Definition dss_algorithm.hpp:6
static void symbolic(Handle< Algorithm::CUSOLVER_SP > &dss_handle, CrsMatrixType &A)
Definition dss_symbolic_cusolversp.hpp:14
Definition dss_symbolic.hpp:8