275 typedef typename MatrixType::scalar_type scalar_type;
276 typedef typename MatrixType::local_ordinal_type local_ordinal_type;
277 typedef typename MatrixType::global_ordinal_type global_ordinal_type;
278 typedef typename MatrixType::node_type node_type;
283#if KOKKOS_VERSION >= 40799
284 typedef typename KokkosKernels::ArithTraits<scalar_type>::val_type
impl_scalar_type;
288#if KOKKOS_VERSION >= 40799
289 typedef typename KokkosKernels::ArithTraits<impl_scalar_type>::mag_type magnitude_type;
291 typedef typename Kokkos::ArithTraits<impl_scalar_type>::mag_type magnitude_type;
294 typedef typename BlockTridiagScalarType<impl_scalar_type>::type btdm_scalar_type;
295#if KOKKOS_VERSION >= 40799
296 typedef typename KokkosKernels::ArithTraits<btdm_scalar_type>::mag_type btdm_magnitude_type;
298 typedef typename Kokkos::ArithTraits<btdm_scalar_type>::mag_type btdm_magnitude_type;
310 typedef typename node_device_type::execution_space node_execution_space;
311 typedef typename node_device_type::memory_space node_memory_space;
313#if defined(KOKKOS_ENABLE_CUDA) && defined(IFPACK2_BLOCKHELPER_USE_CUDA_SPACE)
315 typedef node_execution_space execution_space;
316 typedef typename std::conditional<std::is_same<node_memory_space, Kokkos::CudaUVMSpace>::value,
318 node_memory_space>::type memory_space;
319 typedef Kokkos::Device<execution_space, memory_space> device_type;
322 typedef node_execution_space execution_space;
323 typedef node_memory_space memory_space;
326 typedef Tpetra::MultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_multivector_type;
327 typedef Tpetra::Map<local_ordinal_type, global_ordinal_type, node_type> tpetra_map_type;
328 typedef Tpetra::Import<local_ordinal_type, global_ordinal_type, node_type> tpetra_import_type;
329 typedef Tpetra::RowMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_row_matrix_type;
330 typedef Tpetra::CrsMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_crs_matrix_type;
331 typedef Tpetra::CrsGraph<local_ordinal_type, global_ordinal_type, node_type> tpetra_crs_graph_type;
332 typedef Tpetra::BlockCrsMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_block_crs_matrix_type;
333 typedef typename tpetra_block_crs_matrix_type::little_block_type tpetra_block_access_view_type;
334 typedef Tpetra::BlockMultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_block_multivector_type;
335 typedef typename tpetra_block_crs_matrix_type::crs_graph_type::local_graph_device_type local_crs_graph_type;
340 template <
typename T,
int l>
342 template <
typename T>
343 using SIMD = KB::SIMD<T>;
344 template <
typename T,
typename M>
345 using DefaultVectorLength = KB::DefaultVectorLength<T, M>;
346 template <
typename T,
typename M>
347 using DefaultInternalVectorLength = KB::DefaultInternalVectorLength<T, M>;
349 static constexpr int vector_length = DefaultVectorLength<btdm_scalar_type, memory_space>::value;
350 static constexpr int internal_vector_length = DefaultInternalVectorLength<btdm_scalar_type, memory_space>::value;
351 static constexpr int half_vector_length = (vector_length > 1) ? (vector_length / 2) : 1;
359 typedef Kokkos::View<size_type **, device_type> size_type_2d_view;
360 typedef Kokkos::View<int64_t ***, Kokkos::LayoutRight, device_type> i64_3d_view;
361 typedef Kokkos::View<local_ordinal_type *, device_type> local_ordinal_type_1d_view;
362 typedef Kokkos::View<local_ordinal_type **, device_type> local_ordinal_type_2d_view;
364 typedef Kokkos::View<impl_scalar_type *, device_type> impl_scalar_type_1d_view;
365 typedef Kokkos::View<impl_scalar_type *, node_device_type> impl_scalar_type_1d_view_tpetra;
368 typedef Kokkos::View<impl_scalar_type **, Kokkos::LayoutLeft, device_type> impl_scalar_type_2d_view;
369 typedef Kokkos::View<impl_scalar_type **, Kokkos::LayoutLeft, node_device_type> impl_scalar_type_2d_view_tpetra;
370 typedef Kokkos::View<const impl_scalar_type **, Kokkos::LayoutLeft, node_device_type> const_impl_scalar_type_2d_view_tpetra;
373 typedef Kokkos::View<vector_type *, device_type> vector_type_1d_view;
374 typedef Kokkos::View<vector_type ***, Kokkos::LayoutRight, device_type> vector_type_3d_view;
375 typedef Kokkos::View<vector_type ****, Kokkos::LayoutRight, device_type> vector_type_4d_view;
376 typedef Kokkos::View<internal_vector_type ***, Kokkos::LayoutRight, device_type> internal_vector_type_3d_view;
377 typedef Kokkos::View<internal_vector_type ****, Kokkos::LayoutRight, device_type> internal_vector_type_4d_view;
378 typedef Kokkos::View<internal_vector_type *****, Kokkos::LayoutRight, device_type> internal_vector_type_5d_view;
379 typedef Kokkos::View<btdm_scalar_type **, Kokkos::LayoutRight, device_type> btdm_scalar_type_2d_view;
380 typedef Kokkos::View<btdm_scalar_type ***, Kokkos::LayoutRight, device_type> btdm_scalar_type_3d_view;
381 typedef Kokkos::View<btdm_scalar_type ****, Kokkos::LayoutRight, device_type> btdm_scalar_type_4d_view;
382 typedef Kokkos::View<btdm_scalar_type *****, Kokkos::LayoutRight, device_type> btdm_scalar_type_5d_view;