275 typedef MatrixType matrix_type;
276 typedef typename MatrixType::scalar_type scalar_type;
277 typedef typename MatrixType::local_ordinal_type local_ordinal_type;
278 typedef typename MatrixType::global_ordinal_type global_ordinal_type;
279 typedef typename MatrixType::node_type node_type;
285 typedef typename KokkosKernels::ArithTraits<impl_scalar_type>::mag_type magnitude_type;
287 typedef typename BlockTridiagScalarType<impl_scalar_type>::type btdm_scalar_type;
288 typedef typename KokkosKernels::ArithTraits<btdm_scalar_type>::mag_type btdm_magnitude_type;
299 typedef typename node_device_type::execution_space node_execution_space;
300 typedef typename node_device_type::memory_space node_memory_space;
302#if defined(KOKKOS_ENABLE_CUDA) && defined(IFPACK2_BLOCKHELPER_USE_CUDA_SPACE)
304 typedef node_execution_space execution_space;
305 typedef typename std::conditional<std::is_same<node_memory_space, Kokkos::CudaUVMSpace>::value,
307 node_memory_space>::type memory_space;
308 typedef Kokkos::Device<execution_space, memory_space> device_type;
311 typedef node_execution_space execution_space;
312 typedef node_memory_space memory_space;
315 typedef Tpetra::MultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_multivector_type;
316 typedef Tpetra::Map<local_ordinal_type, global_ordinal_type, node_type> tpetra_map_type;
317 typedef Tpetra::Import<local_ordinal_type, global_ordinal_type, node_type> tpetra_import_type;
318 typedef Tpetra::RowMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_row_matrix_type;
319 typedef Tpetra::CrsMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_crs_matrix_type;
320 typedef Tpetra::CrsGraph<local_ordinal_type, global_ordinal_type, node_type> tpetra_crs_graph_type;
321 typedef Tpetra::BlockCrsMatrix<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_block_crs_matrix_type;
322 typedef typename tpetra_block_crs_matrix_type::little_block_type tpetra_block_access_view_type;
323 typedef Tpetra::BlockMultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type> tpetra_block_multivector_type;
324 typedef typename tpetra_block_crs_matrix_type::crs_graph_type::local_graph_device_type local_crs_graph_type;
329 template <
typename T,
int l>
331 template <
typename T>
332 using SIMD = KB::SIMD<T>;
333 template <
typename T,
typename M>
334 using DefaultVectorLength = KB::DefaultVectorLength<T, M>;
335 template <
typename T,
typename M>
336 using DefaultInternalVectorLength = KB::DefaultInternalVectorLength<T, M>;
338 static constexpr int vector_length = DefaultVectorLength<btdm_scalar_type, memory_space>::value;
339 static constexpr int internal_vector_length = DefaultInternalVectorLength<btdm_scalar_type, memory_space>::value;
340 static constexpr int half_vector_length = (vector_length > 1) ? (vector_length / 2) : 1;
348 typedef Kokkos::View<size_type **, device_type> size_type_2d_view;
349 typedef Kokkos::View<int64_t ***, Kokkos::LayoutRight, device_type> i64_3d_view;
350 typedef Kokkos::View<local_ordinal_type *, device_type> local_ordinal_type_1d_view;
351 typedef Kokkos::View<local_ordinal_type **, device_type> local_ordinal_type_2d_view;
353 typedef Kokkos::View<impl_scalar_type *, device_type> impl_scalar_type_1d_view;
354 typedef Kokkos::View<impl_scalar_type *, node_device_type> impl_scalar_type_1d_view_tpetra;
357 typedef Kokkos::View<impl_scalar_type **, Kokkos::LayoutLeft, device_type> impl_scalar_type_2d_view;
358 typedef Kokkos::View<impl_scalar_type **, Kokkos::LayoutLeft, node_device_type> impl_scalar_type_2d_view_tpetra;
359 typedef Kokkos::View<const impl_scalar_type **, Kokkos::LayoutLeft, node_device_type> const_impl_scalar_type_2d_view_tpetra;
362 typedef Kokkos::View<vector_type *, device_type> vector_type_1d_view;
363 typedef Kokkos::View<vector_type ***, Kokkos::LayoutRight, device_type> vector_type_3d_view;
364 typedef Kokkos::View<vector_type ****, Kokkos::LayoutRight, device_type> vector_type_4d_view;
365 typedef Kokkos::View<internal_vector_type ***, Kokkos::LayoutRight, device_type> internal_vector_type_3d_view;
366 typedef Kokkos::View<internal_vector_type ****, Kokkos::LayoutRight, device_type> internal_vector_type_4d_view;
367 typedef Kokkos::View<internal_vector_type *****, Kokkos::LayoutRight, device_type> internal_vector_type_5d_view;
368 typedef Kokkos::View<btdm_scalar_type **, Kokkos::LayoutRight, device_type> btdm_scalar_type_2d_view;
369 typedef Kokkos::View<btdm_scalar_type ***, Kokkos::LayoutRight, device_type> btdm_scalar_type_3d_view;
370 typedef Kokkos::View<btdm_scalar_type ****, Kokkos::LayoutRight, device_type> btdm_scalar_type_4d_view;
371 typedef Kokkos::View<btdm_scalar_type *****, Kokkos::LayoutRight, device_type> btdm_scalar_type_5d_view;
374 enum :
int { max_blocksize = 32 };