96 typename MatrixType::local_ordinal_type, typename MatrixType::global_ordinal_type, typename MatrixType::node_type> > {
104#if KOKKOS_VERSION >= 40799
105 typedef typename KokkosKernels::ArithTraits<typename MatrixType::scalar_type>::val_type impl_scalar_type;
107 typedef typename Kokkos::ArithTraits<typename MatrixType::scalar_type>::val_type impl_scalar_type;
112 typedef typename MatrixType::local_ordinal_type LO;
116 typedef typename MatrixType::global_ordinal_type GO;
121 typedef typename node_type::execution_space execution_space;
124 typedef typename Teuchos::ScalarTraits<scalar_type>::magnitudeType
magnitude_type;
148 block_crs_matrix_type;
150 template <
class NewMatrixType>
153 typedef typename block_crs_matrix_type::nonconst_global_inds_host_view_type nonconst_global_inds_host_view_type;
154 typedef typename block_crs_matrix_type::nonconst_local_inds_host_view_type nonconst_local_inds_host_view_type;
155 typedef typename block_crs_matrix_type::nonconst_values_host_view_type nonconst_values_host_view_type;
161 typedef typename block_crs_matrix_type::local_matrix_device_type local_matrix_device_type;
162 typedef typename block_crs_matrix_type::local_matrix_host_type local_matrix_host_type;
163 typedef typename crs_matrix_type::local_matrix_device_type local_crs_matrix_device_type;
164 typedef typename local_matrix_device_type::StaticCrsGraphType::row_map_type lno_row_view_t;
165 typedef typename local_matrix_device_type::StaticCrsGraphType::entries_type lno_nonzero_view_t;
166 typedef typename local_matrix_device_type::values_type scalar_nonzero_view_t;
167 typedef typename local_matrix_device_type::StaticCrsGraphType::device_type::memory_space TemporaryMemorySpace;
168 typedef typename local_matrix_device_type::StaticCrsGraphType::device_type::memory_space PersistentMemorySpace;
169 typedef typename local_matrix_device_type::StaticCrsGraphType::device_type::execution_space HandleExecSpace;
170 typedef typename KokkosKernels::Experimental::KokkosKernelsHandle<
typename lno_row_view_t::const_value_type,
typename lno_nonzero_view_t::const_value_type,
typename scalar_nonzero_view_t::value_type,
171 HandleExecSpace, TemporaryMemorySpace, PersistentMemorySpace>
181 RBILUK(
const Teuchos::RCP<const row_matrix_type>& A_in);
186 RBILUK(
const Teuchos::RCP<const block_crs_matrix_type>& A_in);
221 using RILUK<Tpetra::RowMatrix<
typename MatrixType::scalar_type,
222 typename MatrixType::local_ordinal_type,
223 typename MatrixType::global_ordinal_type,
249 setMatrix(
const Teuchos::RCP<const block_crs_matrix_type>& A);
292 apply(
const Tpetra::MultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type>& X,
293 Tpetra::MultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type>& Y,
294 Teuchos::ETransp mode = Teuchos::NO_TRANS,
295 scalar_type alpha = Teuchos::ScalarTraits<scalar_type>::one(),
296 scalar_type beta = Teuchos::ScalarTraits<scalar_type>::zero())
const;
304 const block_crs_matrix_type&
getLBlock()
const;
307 const block_crs_matrix_type&
getDBlock()
const;
310 const block_crs_matrix_type&
getUBlock()
const;
313 typedef Tpetra::MultiVector<scalar_type, local_ordinal_type, global_ordinal_type, node_type> MV;
314 typedef Teuchos::ScalarTraits<impl_scalar_type> STS;
315 typedef Teuchos::ScalarTraits<magnitude_type> STM;
316 typedef typename block_crs_matrix_type::little_block_type little_block_type;
317 typedef typename block_crs_matrix_type::little_block_host_type little_block_host_type;
318 typedef typename block_crs_matrix_type::little_vec_type little_vec_type;
319 typedef typename block_crs_matrix_type::little_host_vec_type little_host_vec_type;
320 typedef typename block_crs_matrix_type::const_host_little_vec_type const_host_little_vec_type;
322 using local_inds_host_view_type =
typename block_crs_matrix_type::local_inds_host_view_type;
323 using values_host_view_type =
typename block_crs_matrix_type::values_host_view_type;
324 using local_inds_device_view_type =
typename block_crs_matrix_type::local_inds_device_view_type;
325 using values_device_view_type =
typename block_crs_matrix_type::values_device_view_type;
326 using view1d = Kokkos::View<impl_scalar_type*, typename values_device_view_type::device_type>;
328 void allocate_L_and_U_blocks();
329 void initAllValues();
331 template <
typename X,
typename Y>
332 void stream_apply_impl(
const X& X_views, Y& Y_views,
const bool use_temp_x,
const bool use_temp_y,
const std::vector<Teuchos::RCP<block_crs_matrix_type> >& LU_block_v,
const std::vector<Teuchos::RCP<kk_handle_type> >& LU_sptrsv_handle_v,
const LO numVecs)
const;
334 Teuchos::RCP<kk_handle_type> KernelHandle_block_;
335 Teuchos::RCP<kk_handle_type> L_Sptrsv_KernelHandle_;
336 Teuchos::RCP<kk_handle_type> U_Sptrsv_KernelHandle_;
338 std::vector<Teuchos::RCP<kk_handle_type> > KernelHandle_block_v_;
339 std::vector<Teuchos::RCP<kk_handle_type> > L_Sptrsv_KernelHandle_v_;
340 std::vector<Teuchos::RCP<kk_handle_type> > U_Sptrsv_KernelHandle_v_;
345 Teuchos::RCP<const block_crs_matrix_type> A_local_bcrs_;
346 Teuchos::RCP<crs_matrix_type> A_local_crs_nc_;
349 std::vector<local_matrix_device_type> A_block_local_diagblks_v_;
350 std::vector<lno_row_view_t> A_block_local_diagblks_rowmap_v_;
351 std::vector<lno_nonzero_view_t> A_block_local_diagblks_entries_v_;
352 std::vector<scalar_nonzero_view_t> A_block_local_diagblks_values_v_;
355 Teuchos::RCP<block_crs_matrix_type> L_block_;
356 std::vector<Teuchos::RCP<block_crs_matrix_type> > L_block_v_;
358 Teuchos::RCP<block_crs_matrix_type> U_block_;
359 std::vector<Teuchos::RCP<block_crs_matrix_type> > U_block_v_;
361 Teuchos::RCP<block_crs_matrix_type> D_block_;
364 Teuchos::RCP<block_crs_matrix_type> D_block_inverse_;
void apply(const Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &X, Tpetra::MultiVector< scalar_type, local_ordinal_type, global_ordinal_type, node_type > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, scalar_type alpha=Teuchos::ScalarTraits< scalar_type >::one(), scalar_type beta=Teuchos::ScalarTraits< scalar_type >::zero()) const
Apply the (inverse of the) incomplete factorization to X, resulting in Y.
Definition Ifpack2_Experimental_RBILUK_def.hpp:1200