52#ifndef AMESOS2_KOKKOS_IMPL_HPP
53#define AMESOS2_KOKKOS_IMPL_HPP
57#include <Kokkos_Core.hpp>
58#include <KokkosSparse_CrsMatrix.hpp>
59#include <Tpetra_KokkosCompat_ClassicNodeAPI_Wrapper.hpp>
61#define AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(S,LO,NODE_TYPE) \
62 template class Amesos2::AMESOS2_KOKKOS_IMPL_SOLVER_NAME<KokkosSparse::CrsMatrix<S, LO, \
63 typename NODE_TYPE::device_type>, \
64 Kokkos::View<S**, Kokkos::LayoutLeft, typename NODE_TYPE::device_type> >;
66#ifdef KOKKOS_ENABLE_CUDA_UVM
67#define AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(S,LO) \
68 template class Amesos2::AMESOS2_KOKKOS_IMPL_SOLVER_NAME<KokkosSparse::CrsMatrix<S, LO, \
69 Kokkos::Device<Kokkos::Cuda,Kokkos::CudaSpace>>, \
70 Kokkos::View<S**, Kokkos::LayoutLeft, Kokkos::Device<Kokkos::Cuda,Kokkos::CudaSpace>> >;
72#define AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(S,LO)
75#if defined(KOKKOS_ENABLE_SERIAL)
76#ifdef HAVE_TPETRA_INST_FLOAT
77 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Tpetra::KokkosCompat::KokkosSerialWrapperNode)
79#ifdef HAVE_TPETRA_INST_DOUBLE
80 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Tpetra::KokkosCompat::KokkosSerialWrapperNode)
82#ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
83 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Tpetra::KokkosCompat::KokkosSerialWrapperNode)
85#ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
86 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Tpetra::KokkosCompat::KokkosSerialWrapperNode)
90#if defined(KOKKOS_ENABLE_THREADS)
91#ifdef HAVE_TPETRA_INST_FLOAT
92 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Tpetra::KokkosCompat::KokkosKokkosThreadsWrapperNode)
94#ifdef HAVE_TPETRA_INST_DOUBLE
95 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Tpetra::KokkosCompat::KokkosKokkosThreadsWrapperNode)
97#ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
98 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Tpetra::KokkosCompat::KokkosKokkosThreadsWrapperNode)
100#ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
101 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Tpetra::KokkosCompat::KokkosKokkosThreadsWrapperNode)
105#if defined(KOKKOS_ENABLE_OPENMP)
106#ifdef HAVE_TPETRA_INST_FLOAT
107 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode)
109#ifdef HAVE_TPETRA_INST_DOUBLE
110 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode)
112#ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
113 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode)
115#ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
116 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Tpetra::KokkosCompat::KokkosOpenMPWrapperNode)
120#if defined(KOKKOS_ENABLE_CUDA)
121#ifdef HAVE_TPETRA_INST_FLOAT
122 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Tpetra::KokkosCompat::KokkosCudaWrapperNode)
123 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(
float,
int)
125#ifdef HAVE_TPETRA_INST_DOUBLE
126 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Tpetra::KokkosCompat::KokkosCudaWrapperNode)
127 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(
double,
int)
129#ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
130 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Tpetra::KokkosCompat::KokkosCudaWrapperNode)
131 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(Kokkos::complex<float>,
int)
133#ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
134 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Tpetra::KokkosCompat::KokkosCudaWrapperNode)
135 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER_UVM_OFF(Kokkos::complex<double>,
int)
139#if defined(KOKKOS_ENABLE_HIP)
140#ifdef HAVE_TPETRA_INST_FLOAT
141 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Tpetra::KokkosCompat::KokkosHIPWrapperNode)
143#ifdef HAVE_TPETRA_INST_DOUBLE
144 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Tpetra::KokkosCompat::KokkosHIPWrapperNode)
146#ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
147 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Tpetra::KokkosCompat::KokkosHIPWrapperNode)
149#ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
150 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Tpetra::KokkosCompat::KokkosHIPWrapperNode)
154#if defined(KOKKOS_ENABLE_SYCL)
155#ifdef HAVE_TPETRA_INST_FLOAT
156 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
float,
int, Tpetra::KokkosCompat::KokkosSYCLWrapperNode)
158#ifdef HAVE_TPETRA_INST_DOUBLE
159 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(
double,
int, Tpetra::KokkosCompat::KokkosSYCLWrapperNode)
161#ifdef HAVE_TPETRA_INST_COMPLEX_FLOAT
162 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<float>,
int, Tpetra::KokkosCompat::KokkosSYCLWrapperNode)
164#ifdef HAVE_TPETRA_INST_COMPLEX_DOUBLE
165 AMESOS2_KOKKOS_LOCAL_INSTANT_KOKKOS_ADAPTER(Kokkos::complex<double>,
int, Tpetra::KokkosCompat::KokkosSYCLWrapperNode)
Amesos2::MultiVecAdapter specialization for the Kokkos::View class.