diff --git a/splines__linear__problem__band_8hpp_source.html b/splines__linear__problem__band_8hpp_source.html
index 1b2e14eb9..7a1ee48bf 100644
--- a/splines__linear__problem__band_8hpp_source.html
+++ b/splines__linear__problem__band_8hpp_source.html
@@ -149,194 +149,195 @@
- 23#include <KokkosBatched_Gbtrs.hpp>
- 24#include <KokkosBatched_Util.hpp>
-
- 26#include "splines_linear_problem.hpp"
-
- 28namespace ddc::detail {
-
-
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44template <
class ExecSpace>
- 45class SplinesLinearProblemBand :
public SplinesLinearProblem<ExecSpace>
-
-
- 48 using typename SplinesLinearProblem<ExecSpace>::MultiRHS;
- 49 using SplinesLinearProblem<ExecSpace>::size;
-
-
-
-
- 54 Kokkos::DualView<
double**, Kokkos::LayoutRight,
typename ExecSpace::memory_space>
-
- 56 Kokkos::DualView<
int*,
typename ExecSpace::memory_space> m_ipiv;
-
-
-
- 60
- 61
- 62
- 63
- 64
- 65
- 66 explicit SplinesLinearProblemBand(
- 67 std::size_t
const mat_size,
-
-
- 70 : SplinesLinearProblem<ExecSpace>(mat_size)
-
-
-
- 74
- 75
- 76
- 77 , m_q(
"q", 2 * kl + ku + 1, mat_size)
- 78 , m_ipiv(
"ipiv", mat_size)
-
- 80 assert(m_kl <= mat_size);
- 81 assert(m_ku <= mat_size);
-
- 83 Kokkos::deep_copy(m_q.h_view, 0.);
-
-
-
- 87 std::size_t band_storage_row_index(std::size_t
const i, std::size_t
const j)
const
-
- 89 return m_kl + m_ku + i - j;
-
-
-
- 93 double get_element(std::size_t
const i, std::size_t
const j)
const override
-
-
-
-
- 98
- 99
- 100
- 101
- 102
-
- 104 max(
static_cast<std::ptrdiff_t>(0),
- 105 static_cast<std::ptrdiff_t>(j) -
static_cast<std::ptrdiff_t>(m_ku))
- 106 && i < std::min(size(), j + m_kl + 1)) {
- 107 return m_q.h_view(band_storage_row_index(i, j), j);
-
-
-
-
-
- 113 void set_element(std::size_t
const i, std::size_t
const j,
double const aij)
override
-
-
-
-
- 118
- 119
- 120
- 121
- 122
-
- 124 max(
static_cast<std::ptrdiff_t>(0),
- 125 static_cast<std::ptrdiff_t>(j) -
static_cast<std::ptrdiff_t>(m_ku))
- 126 && i < std::min(size(), j + m_kl + 1)) {
- 127 m_q.h_view(band_storage_row_index(i, j), j) = aij;
-
- 129 assert(std::fabs(aij) < 1e-20);
-
-
-
-
- 134
- 135
- 136
- 137
- 138 void setup_solver()
override
-
- 140 int const info = LAPACKE_dgbtrf(
-
-
+ 23#include <KokkosBatched_Util.hpp>
+
+ 25#include "kokkos-kernels-ext/KokkosBatched_Gbtrs.hpp"
+
+ 27#include "splines_linear_problem.hpp"
+
+ 29namespace ddc::detail {
+
+
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45template <
class ExecSpace>
+ 46class SplinesLinearProblemBand :
public SplinesLinearProblem<ExecSpace>
+
+
+ 49 using typename SplinesLinearProblem<ExecSpace>::MultiRHS;
+ 50 using SplinesLinearProblem<ExecSpace>::size;
+
+
+
+
+ 55 Kokkos::DualView<
double**, Kokkos::LayoutRight,
typename ExecSpace::memory_space>
+
+ 57 Kokkos::DualView<
int*,
typename ExecSpace::memory_space> m_ipiv;
+
+
+
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67 explicit SplinesLinearProblemBand(
+ 68 std::size_t
const mat_size,
+
+
+ 71 : SplinesLinearProblem<ExecSpace>(mat_size)
+
+
+
+ 75
+ 76
+ 77
+ 78 , m_q(
"q", 2 * kl + ku + 1, mat_size)
+ 79 , m_ipiv(
"ipiv", mat_size)
+
+ 81 assert(m_kl <= mat_size);
+ 82 assert(m_ku <= mat_size);
+
+ 84 Kokkos::deep_copy(m_q.h_view, 0.);
+
+
+
+ 88 std::size_t band_storage_row_index(std::size_t
const i, std::size_t
const j)
const
+
+ 90 return m_kl + m_ku + i - j;
+
+
+
+ 94 double get_element(std::size_t
const i, std::size_t
const j)
const override
+
+
+
+
+ 99
+ 100
+ 101
+ 102
+ 103
+
+ 105 max(
static_cast<std::ptrdiff_t>(0),
+ 106 static_cast<std::ptrdiff_t>(j) -
static_cast<std::ptrdiff_t>(m_ku))
+ 107 && i < std::min(size(), j + m_kl + 1)) {
+ 108 return m_q.h_view(band_storage_row_index(i, j), j);
+
+
+
+
+
+ 114 void set_element(std::size_t
const i, std::size_t
const j,
double const aij)
override
+
+
+
+
+ 119
+ 120
+ 121
+ 122
+ 123
+
+ 125 max(
static_cast<std::ptrdiff_t>(0),
+ 126 static_cast<std::ptrdiff_t>(j) -
static_cast<std::ptrdiff_t>(m_ku))
+ 127 && i < std::min(size(), j + m_kl + 1)) {
+ 128 m_q.h_view(band_storage_row_index(i, j), j) = aij;
+
+ 130 assert(std::fabs(aij) < 1e-20);
+
+
+
+
+ 135
+ 136
+ 137
+ 138
+ 139 void setup_solver()
override
+
+ 141 int const info = LAPACKE_dgbtrf(
+
-
-
-
-
-
- 149 m_ipiv.h_view.data());
-
- 151 throw std::runtime_error(
- 152 "LAPACKE_dgbtrf failed with error code " + std::to_string(info));
-
-
-
- 156 for (
int i = 0; i < size(); ++i) {
- 157 m_ipiv.h_view(i) -= 1;
-
-
-
-
-
- 163 m_ipiv.modify_host();
- 164 m_ipiv.sync_device();
-
-
-
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175 void solve(MultiRHS
const b,
bool const transpose)
const override
-
- 177 assert(b.extent(0) == size());
-
- 179 std::size_t
const kl_proxy = m_kl;
- 180 std::size_t
const ku_proxy = m_ku;
- 181 auto q_device = m_q.d_view;
- 182 auto ipiv_device = m_ipiv.d_view;
- 183 Kokkos::RangePolicy<ExecSpace>
const policy(0, b.extent(1));
-
- 185 Kokkos::parallel_for(
-
-
- 188 KOKKOS_LAMBDA(
const int i) {
- 189 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
- 190 KokkosBatched::SerialGbtrs<
- 191 KokkosBatched::Trans::Transpose,
- 192 KokkosBatched::Algo::Gbtrs::Unblocked>::
- 193 invoke(q_device, sub_b, ipiv_device, kl_proxy, ku_proxy);
-
-
- 196 Kokkos::parallel_for(
-
-
- 199 KOKKOS_LAMBDA(
const int i) {
- 200 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
- 201 KokkosBatched::SerialGbtrs<
- 202 KokkosBatched::Trans::NoTranspose,
- 203 KokkosBatched::Algo::Gbtrs::Unblocked>::
- 204 invoke(q_device, sub_b, ipiv_device, kl_proxy, ku_proxy);
-
-
-
-
-
-
+
+
+
+
+
+
+ 150 m_ipiv.h_view.data());
+
+ 152 throw std::runtime_error(
+ 153 "LAPACKE_dgbtrf failed with error code " + std::to_string(info));
+
+
+
+ 157 for (
int i = 0; i < size(); ++i) {
+ 158 m_ipiv.h_view(i) -= 1;
+
+
+
+
+
+ 164 m_ipiv.modify_host();
+ 165 m_ipiv.sync_device();
+
+
+
+ 169
+ 170
+ 171
+ 172
+ 173
+ 174
+ 175
+ 176 void solve(MultiRHS
const b,
bool const transpose)
const override
+
+ 178 assert(b.extent(0) == size());
+
+ 180 std::size_t
const kl_proxy = m_kl;
+ 181 std::size_t
const ku_proxy = m_ku;
+ 182 auto q_device = m_q.d_view;
+ 183 auto ipiv_device = m_ipiv.d_view;
+ 184 Kokkos::RangePolicy<ExecSpace>
const policy(0, b.extent(1));
+
+ 186 Kokkos::parallel_for(
+
+
+ 189 KOKKOS_LAMBDA(
const int i) {
+ 190 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
+ 191 KokkosBatched::SerialGbtrs<
+ 192 KokkosBatched::Trans::Transpose,
+ 193 KokkosBatched::Algo::Level3::Unblocked>::
+ 194 invoke(q_device, sub_b, ipiv_device, kl_proxy, ku_proxy);
+
+
+ 197 Kokkos::parallel_for(
+
+
+ 200 KOKKOS_LAMBDA(
const int i) {
+ 201 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
+ 202 KokkosBatched::SerialGbtrs<
+ 203 KokkosBatched::Trans::NoTranspose,
+ 204 KokkosBatched::Algo::Level3::Unblocked>::
+ 205 invoke(q_device, sub_b, ipiv_device, kl_proxy, ku_proxy);
+
+
+
+
+
+
The top-level namespace of DDC.
diff --git a/splines__linear__problem__dense_8hpp_source.html b/splines__linear__problem__dense_8hpp_source.html
index 2d8cc5df4..604c8c4e5 100644
--- a/splines__linear__problem__dense_8hpp_source.html
+++ b/splines__linear__problem__dense_8hpp_source.html
@@ -147,139 +147,140 @@
- 21#include <KokkosBatched_Getrs.hpp>
- 22#include <KokkosBatched_Util.hpp>
-
- 24#include "splines_linear_problem.hpp"
-
- 26namespace ddc::detail {
-
-
- 29
- 30
- 31
- 32
- 33
- 34
- 35template <
class ExecSpace>
- 36class SplinesLinearProblemDense :
public SplinesLinearProblem<ExecSpace>
-
-
- 39 using typename SplinesLinearProblem<ExecSpace>::MultiRHS;
- 40 using SplinesLinearProblem<ExecSpace>::size;
-
-
- 43 Kokkos::DualView<
double**, Kokkos::LayoutRight,
typename ExecSpace::memory_space> m_a;
- 44 Kokkos::DualView<
int*,
typename ExecSpace::memory_space> m_ipiv;
-
-
-
- 48
- 49
- 50
- 51
- 52 explicit SplinesLinearProblemDense(std::size_t
const mat_size)
- 53 : SplinesLinearProblem<ExecSpace>(mat_size)
- 54 , m_a(
"a", mat_size, mat_size)
- 55 , m_ipiv(
"ipiv", mat_size)
-
- 57 Kokkos::deep_copy(m_a.h_view, 0.);
-
-
- 60 double get_element(std::size_t
const i, std::size_t
const j)
const override
-
-
-
- 64 return m_a.h_view(i, j);
-
-
- 67 void set_element(std::size_t
const i, std::size_t
const j,
double const aij)
override
-
-
-
- 71 m_a.h_view(i, j) = aij;
-
-
-
- 75
- 76
- 77
- 78
- 79 void setup_solver()
override
-
- 81 int const info = LAPACKE_dgetrf(
-
-
+ 21#include <KokkosBatched_Util.hpp>
+
+ 23#include "kokkos-kernels-ext/KokkosBatched_Getrs.hpp"
+
+ 25#include "splines_linear_problem.hpp"
+
+ 27namespace ddc::detail {
+
+
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36template <
class ExecSpace>
+ 37class SplinesLinearProblemDense :
public SplinesLinearProblem<ExecSpace>
+
+
+ 40 using typename SplinesLinearProblem<ExecSpace>::MultiRHS;
+ 41 using SplinesLinearProblem<ExecSpace>::size;
+
+
+ 44 Kokkos::DualView<
double**, Kokkos::LayoutRight,
typename ExecSpace::memory_space> m_a;
+ 45 Kokkos::DualView<
int*,
typename ExecSpace::memory_space> m_ipiv;
+
+
+
+ 49
+ 50
+ 51
+ 52
+ 53 explicit SplinesLinearProblemDense(std::size_t
const mat_size)
+ 54 : SplinesLinearProblem<ExecSpace>(mat_size)
+ 55 , m_a(
"a", mat_size, mat_size)
+ 56 , m_ipiv(
"ipiv", mat_size)
+
+ 58 Kokkos::deep_copy(m_a.h_view, 0.);
+
+
+ 61 double get_element(std::size_t
const i, std::size_t
const j)
const override
+
+
+
+ 65 return m_a.h_view(i, j);
+
+
+ 68 void set_element(std::size_t
const i, std::size_t
const j,
double const aij)
override
+
+
+
+ 72 m_a.h_view(i, j) = aij;
+
+
+
+ 76
+ 77
+ 78
+ 79
+ 80 void setup_solver()
override
+
+ 82 int const info = LAPACKE_dgetrf(
+
-
-
- 87 m_ipiv.h_view.data());
-
- 89 throw std::runtime_error(
- 90 "LAPACKE_dgetrf failed with error code " + std::to_string(info));
-
-
-
- 94 for (
int i = 0; i < size(); ++i) {
- 95 m_ipiv.h_view(i) -= 1;
-
-
-
-
-
- 101 m_ipiv.modify_host();
- 102 m_ipiv.sync_device();
-
-
-
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113 void solve(MultiRHS
const b,
bool const transpose)
const override
-
- 115 assert(b.extent(0) == size());
-
-
-
-
-
-
- 122 auto a_device = m_a.d_view;
- 123 auto ipiv_device = m_ipiv.d_view;
-
- 125 Kokkos::RangePolicy<ExecSpace>
const policy(0, b.extent(1));
-
-
- 128 Kokkos::parallel_for(
-
-
- 131 KOKKOS_LAMBDA(
const int i) {
- 132 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
- 133 KokkosBatched::SerialGetrs<
- 134 KokkosBatched::Trans::Transpose,
- 135 KokkosBatched::Algo::Getrs::Unblocked>::
- 136 invoke(a_device, ipiv_device, sub_b);
-
-
- 139 Kokkos::parallel_for(
-
-
- 142 KOKKOS_LAMBDA(
const int i) {
- 143 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
- 144 KokkosBatched::SerialGetrs<
- 145 KokkosBatched::Trans::NoTranspose,
- 146 KokkosBatched::Algo::Getrs::Unblocked>::
- 147 invoke(a_device, ipiv_device, sub_b);
-
-
-
-
-
-
+
+
+
+ 88 m_ipiv.h_view.data());
+
+ 90 throw std::runtime_error(
+ 91 "LAPACKE_dgetrf failed with error code " + std::to_string(info));
+
+
+
+ 95 for (
int i = 0; i < size(); ++i) {
+ 96 m_ipiv.h_view(i) -= 1;
+
+
+
+
+
+ 102 m_ipiv.modify_host();
+ 103 m_ipiv.sync_device();
+
+
+
+ 107
+ 108
+ 109
+ 110
+ 111
+ 112
+ 113
+ 114 void solve(MultiRHS
const b,
bool const transpose)
const override
+
+ 116 assert(b.extent(0) == size());
+
+
+
+
+
+
+ 123 auto a_device = m_a.d_view;
+ 124 auto ipiv_device = m_ipiv.d_view;
+
+ 126 Kokkos::RangePolicy<ExecSpace>
const policy(0, b.extent(1));
+
+
+ 129 Kokkos::parallel_for(
+
+
+ 132 KOKKOS_LAMBDA(
const int i) {
+ 133 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
+ 134 KokkosBatched::SerialGetrs<
+ 135 KokkosBatched::Trans::Transpose,
+ 136 KokkosBatched::Algo::Level3::Unblocked>::
+ 137 invoke(a_device, ipiv_device, sub_b);
+
+
+ 140 Kokkos::parallel_for(
+
+
+ 143 KOKKOS_LAMBDA(
const int i) {
+ 144 auto sub_b = Kokkos::subview(b, Kokkos::ALL, i);
+ 145 KokkosBatched::SerialGetrs<
+ 146 KokkosBatched::Trans::NoTranspose,
+ 147 KokkosBatched::Algo::Level3::Unblocked>::
+ 148 invoke(a_device, ipiv_device, sub_b);
+
+
+
+
+
+
The top-level namespace of DDC.