1#ifndef __KOKKOS_EIGEN_HPP__
2#define __KOKKOS_EIGEN_HPP__
6#include <Kokkos_Core.hpp>
7#include <Kokkos_DualView.hpp>
21 template <
typename _layout>
25 if constexpr (std::is_same_v<_layout, Kokkos::LayoutLeft>)
27 return Eigen::ColMajor;
29 else if constexpr (std::is_same_v<_layout, Kokkos::LayoutRight>)
31 return Eigen::RowMajor;
35 static_assert(std::is_same_v<_layout, void>,
"Unsupported layout");
47 template <
typename data_type,
48 typename layout = Kokkos::LayoutLeft,
57 using view_type = Kokkos::DualView<data_type**, layout, exec, args>;
78 template <
typename m_type>
138 return m_view.view_host();
144 return m_view.view_device();
150 return m_view.view_device();
153 [[nodiscard]] std::size_t
158 [[nodiscard]] std::size_t
167 m_view.template modify<typename view_type::host_mirror_space>();
168 m_view.template sync<typename view_type::execution_space>();
174 m_view.template modify<typename view_type::execution_space>();
175 m_view.template sync<typename view_type::host_mirror_space>();
191 set_host(std::size_t i_r, std::size_t i_c, data_type&& value)
193 m_view.view_host()(i_r, i_c) = value;
198 return m_view.view_host()(i_r, i_c);
201 [[nodiscard]] std::span<const double>
205 return {
m_view.view_host().data(), size };
212 return {
m_view.view_host().data(), size };
223 template <
typename ftype>
224 requires(std::is_floating_point_v<ftype>)
225 using DiagonalType = Eigen::DiagonalMatrix<ftype, CompileMatrixSizeEigen>;
233 template <
typename Layout,
typename ftype>
243 template <
typename ftype>
244 requires(std::is_floating_point_v<ftype>)
251 template <
typename Layout,
typename ftype>
252 requires(std::is_floating_point_v<ftype>)
view_type::t_dev device_view_type
underlying const device view
Definition kokkos_eigen.hpp:92
std::span< double > get_span()
Definition kokkos_eigen.hpp:209
void set_host(std::size_t i_r, std::size_t i_c, data_type &&value)
Definition kokkos_eigen.hpp:191
view_type m_view
Definition kokkos_eigen.hpp:75
KokkosEigen2D(const KokkosEigen2D &)=delete
eigen_array_type as_array()
Definition kokkos_eigen.hpp:179
Eigen::Matrix< data_type, CompileMatrixSizeEigen, CompileMatrixSizeEigen, eigen_layout > eigen_mat_type
dynamic Eigen array type
Definition kokkos_eigen.hpp:59
const_device_view_type device_view_cst() const
Definition kokkos_eigen.hpp:142
host_view_type host_view()
Definition kokkos_eigen.hpp:136
data_type & get_host(std::size_t i_r, std::size_t i_c)
Definition kokkos_eigen.hpp:196
void device_to_host_sync()
Definition kokkos_eigen.hpp:172
eigen_map_type m_eigen_map
Definition kokkos_eigen.hpp:76
eigen_array_type as_array() const
Definition kokkos_eigen.hpp:185
std::size_t n_col() const
Definition kokkos_eigen.hpp:159
Eigen::Array< data_type, CompileMatrixSizeEigen, CompileMatrixSizeEigen, eigen_layout > eigen_array_type
Definition kokkos_eigen.hpp:65
view_type & view()
Definition kokkos_eigen.hpp:130
data_type float_type
underlying host view
Definition kokkos_eigen.hpp:88
view_type::t_host host_view_type
underlying device view
Definition kokkos_eigen.hpp:90
Eigen::Map< eigen_mat_type > eigen_map_type
< map over raw data type
Definition kokkos_eigen.hpp:72
static constexpr auto eigen_layout
Definition kokkos_eigen.hpp:55
layout view_layout
Definition kokkos_eigen.hpp:87
std::span< const double > get_span() const
Definition kokkos_eigen.hpp:202
eigen_map_type & eigen()
Definition kokkos_eigen.hpp:118
view_type::t_dev_const const_device_view_type
Definition kokkos_eigen.hpp:94
device_view_type device_view() const
Definition kokkos_eigen.hpp:148
const eigen_map_type & cst_eigen() const
Definition kokkos_eigen.hpp:124
void host_to_device_sync()
Definition kokkos_eigen.hpp:165
Kokkos::DualView< data_type **, layout, exec, args > view_type
dynamic Eigen matrix type
Definition kokkos_eigen.hpp:57
KokkosEigen2D(KokkosEigen2D &&)=delete
std::size_t n_row() const
Definition kokkos_eigen.hpp:154
KokkosEigen2D & operator=(KokkosEigen2D &&rhs) noexcept=delete
auto get_map()
Definition kokkos_eigen.hpp:80
KokkosEigen2D & operator=(const KokkosEigen2D &)=delete
KokkosEigen2D(std::string label, std::size_t n, std::size_t m)
Allocates Object of shape (n x m) on host and device.
Definition kokkos_eigen.hpp:100
KokkosEigen2D()
Definition kokkos_eigen.hpp:105
Definition kokkos_eigen.hpp:217
Eigen::SparseMatrix< ftype, get_eigen_layout< Layout >()> SparseMatrixType
Template type for eigen sparse matrix object.
Definition kokkos_eigen.hpp:253
Eigen::Matrix< ftype, CompileMatrixSizeEigen, CompileMatrixSizeEigen, get_eigen_layout< Layout >()> MatrixType
Template type for eigen matrix object.
Definition kokkos_eigen.hpp:234
Eigen::DiagonalMatrix< ftype, CompileMatrixSizeEigen > DiagonalType
Template type for eigen diagonal object.
Definition kokkos_eigen.hpp:225
MatrixType< Kokkos::LayoutLeft, ftype > ColMajorMatrixtype
Template type for colmajor eigen matrix object.
Definition kokkos_eigen.hpp:245
Definition kokkos_eigen.hpp:11
static constexpr int CompileMatrixSizeEigen
Definition kokkos_eigen.hpp:13
static consteval auto get_eigen_layout()
Maps a Kokkos layout type to its Eigen storage order equivalent.
Definition kokkos_eigen.hpp:23