31 return check_lidx<alloc::host>( fid, manager, class_type );
33 return check_lidx<alloc::device>( fid, manager, class_type );
35 return check_lidx<alloc::managed>( fid, manager, class_type );
37 AMP_ERROR(
"csr_visitor: mode not found!" );
41 template<alloc a, index l, index g, scalar s>
46 if constexpr ( is_config_built<config_t> ) {
48 if constexpr ( std::is_same_v<Matrix, T> ) {
49 return std::make_shared<CSRMatrix<config_t>>( fid, manager );
50 }
else if constexpr ( std::is_same_v<MatrixData, T> ) {
51 return std::make_shared<CSRMatrixData<config_t>>( fid, manager );
52 }
else if constexpr ( std::is_same_v<MatrixOperations, T> ) {
53 if ( class_type ==
"CSRMatrixOperationsDefault" ) {
54 return std::make_shared<CSRMatrixOperationsDefault<config_t>>( fid, manager );
55 }
else if ( class_type ==
"CSRMatrixOperationsDevice" ) {
56#if defined( AMP_USE_DEVICE )
57 return std::make_shared<CSRMatrixOperationsDevice<config_t>>( fid, manager );
59 AMP_ERROR(
"AMP not configured for device" );
62 }
else if ( class_type ==
"CSRMatrixOperationsKokkos" ) {
63#if defined( AMP_USE_KOKKOS )
64 return std::make_shared<CSRMatrixOperationsKokkos<config_t>>( fid, manager );
66 AMP_ERROR(
"AMP not configured with Kokkos" );
70 AMP_ERROR(
"Unknown MatrixOperations type" );
73 }
else if constexpr ( std::is_same_v<MatrixParametersBase, T> ) {
75 return std::make_shared<RawCSRMatrixParameters<config_t>>( fid, manager );
76 }
else if constexpr ( std::is_same_v<MatrixParameters, T> ) {
77 return std::make_shared<AMPCSRMatrixParameters<config_t>>( fid, manager );
79 AMP_ERROR(
"Can only construct CSRMatrix and CSRData at present" );
83 AMP_ERROR(
"csr_construct: mode not found!" );
91 return construct<a, l, g, scalar::f32>( fid, manager, class_type );
93 return construct<a, l, g, scalar::f64>( fid, manager, class_type );
95 return construct<a, l, g, scalar::fld>( fid, manager, class_type );
97 AMP_ERROR(
"csr_visitor: mode not found!" );
105 return check_scalar<a, l, index::i32>( fid, manager, class_type );
107 return check_scalar<a, l, index::i64>( fid, manager, class_type );
109 return check_scalar<a, l, index::ill>( fid, manager, class_type );
111 AMP_ERROR(
"csr_visitor: mode not found!" );
119 return check_gidx<a, index::i32>( fid, manager, class_type );
121 return check_gidx<a, index::i64>( fid, manager, class_type );
123 return check_gidx<a, index::ill>( fid, manager, class_type );
125 AMP_ERROR(
"csr_visitor: mode not found!" );