16#ifndef CABANA_GRID_HYPRESTRUCTUREDSOLVER_HPP
17#define CABANA_GRID_HYPRESTRUCTUREDSOLVER_HPP
26#include <HYPRE_config.h>
27#include <HYPRE_struct_ls.h>
28#include <HYPRE_struct_mv.h>
30#include <Kokkos_Core.hpp>
31#include <Kokkos_Profiling_ScopedRegion.hpp>
47template <
class Scalar,
class EntityType,
class MemorySpace>
59 "HYPRE not compatible with solver memory space" );
67 template <
class ArrayLayout_t>
69 const bool is_preconditioner =
false )
70 : _comm( layout.localGrid()->globalGrid().comm() )
71 , _is_preconditioner( is_preconditioner )
75 "Cabana::Grid::HypreStructuredSolver: Must use an array layout" );
76 static_assert( std::is_same<
typename ArrayLayout_t::entity_type,
78 "Cabana::Grid::HypreStructuredSolver: Array layout "
79 "entity type must match solver entity type" );
82 const std::size_t num_space_dim = ArrayLayout_t::num_space_dim;
85 if ( !_is_preconditioner )
88 auto error = HYPRE_StructGridCreate( _comm, num_space_dim, &_grid );
99 auto global_space = layout.indexSpace(
Own(),
Global() );
100 _lower.resize( num_space_dim );
101 _upper.resize( num_space_dim );
102 for ( std::size_t d = 0; d < num_space_dim; ++d )
104 _lower[d] =
static_cast<HYPRE_Int
>(
105 global_space.min( num_space_dim - d - 1 ) );
106 _upper[d] =
static_cast<HYPRE_Int
>(
107 global_space.max( num_space_dim - d - 1 ) - 1 );
109 error = HYPRE_StructGridSetExtents( _grid, _lower.data(),
114 const auto& global_grid = layout.localGrid()->globalGrid();
115 HYPRE_Int periodic[num_space_dim];
116 for ( std::size_t d = 0; d < num_space_dim; ++d )
117 periodic[num_space_dim - 1 - d] =
118 global_grid.isPeriodic( d )
119 ? layout.localGrid()->globalGrid().globalNumEntity(
122 error = HYPRE_StructGridSetPeriodic( _grid, periodic );
126 error = HYPRE_StructGridAssemble( _grid );
131 std::array<long, num_space_dim> reorder_size;
132 for ( std::size_t d = 0; d < num_space_dim; ++d )
134 reorder_size[d] = global_space.extent( d );
139 "vector_values", reorder_space );
140 Kokkos::deep_copy( vector_values, 0.0 );
142 error = HYPRE_StructVectorCreate( _comm, _grid, &
_b );
144 error = HYPRE_StructVectorInitialize(
_b );
146 error = HYPRE_StructVectorSetBoxValues(
147 _b, _lower.data(), _upper.data(), vector_values.data() );
149 error = HYPRE_StructVectorAssemble(
_b );
152 error = HYPRE_StructVectorCreate( _comm, _grid, &
_x );
154 error = HYPRE_StructVectorInitialize(
_x );
156 error = HYPRE_StructVectorSetBoxValues(
157 _x, _lower.data(), _upper.data(), vector_values.data() );
159 error = HYPRE_StructVectorAssemble(
_x );
168 if ( !_is_preconditioner )
170 HYPRE_StructVectorDestroy(
_x );
171 HYPRE_StructVectorDestroy(
_b );
172 HYPRE_StructMatrixDestroy(
_A );
173 HYPRE_StructStencilDestroy( _stencil );
174 HYPRE_StructGridDestroy( _grid );
189 template <std::
size_t NumSpaceDim>
192 const bool is_symmetric =
false )
195 if ( _is_preconditioner )
196 throw std::logic_error(
197 "Cannot call setMatrixStencil() on preconditioners" );
200 _stencil_size = stencil.size();
202 HYPRE_StructStencilCreate( NumSpaceDim, _stencil_size, &_stencil );
204 std::array<HYPRE_Int, NumSpaceDim> offset;
205 for (
unsigned n = 0; n < stencil.size(); ++n )
207 for ( std::size_t d = 0; d < NumSpaceDim; ++d )
208 offset[d] = stencil[n][d];
209 error = HYPRE_StructStencilSetElement( _stencil, n, offset.data() );
214 error = HYPRE_StructMatrixCreate( _comm, _grid, _stencil, &
_A );
216 error = HYPRE_StructMatrixSetSymmetric(
_A, is_symmetric );
218 error = HYPRE_StructMatrixInitialize(
_A );
230 template <
class Array_t>
235 std::is_same<typename Array_t::entity_type, entity_type>::value,
236 "Cabana::Grid::HypreStructuredSolver::setMatrixValues: Array "
237 "entity type must match solver entity type" );
239 std::is_same<typename Array_t::memory_space, MemorySpace>::value,
240 "Cabana::Grid::HypreStructuredSolver::setMatrixValues: Array "
241 "memory space and solver memory space are different." );
244 std::is_same<typename Array_t::value_type, value_type>::value,
245 "Cabana::Grid::HypreStructuredSolver::setMatrixValues: Array value "
246 "type and solver value type are different." );
249 if ( _is_preconditioner )
250 throw std::logic_error(
251 "Cabana::Grid::HypreStructuredSolver::setMatrixValues: Cannot "
252 "call setMatrixValues() on preconditioners" );
254 if ( values.layout()->dofsPerEntity() !=
255 static_cast<int>( _stencil_size ) )
256 throw std::runtime_error(
257 "Cabana::Grid::HypreStructuredSolver::setMatrixValues: Number "
258 "of matrix values does not match stencil size" );
261 const std::size_t num_space_dim = Array_t::num_space_dim;
265 auto owned_space = values.layout()->indexSpace(
Own(),
Local() );
266 std::array<long, num_space_dim + 1> reorder_size;
267 for ( std::size_t d = 0; d < num_space_dim; ++d )
269 reorder_size[d] = owned_space.extent( d );
271 reorder_size.back() = _stencil_size;
275 "a_values", reorder_space );
276 auto values_subv =
createSubview( values.view(), owned_space );
277 Kokkos::deep_copy( a_values, values_subv );
280 std::vector<HYPRE_Int> indices( _stencil_size );
281 std::iota( indices.begin(), indices.end(), 0 );
282 auto error = HYPRE_StructMatrixSetBoxValues(
283 _A, _lower.data(), _upper.data(), indices.size(), indices.data(),
286 error = HYPRE_StructMatrixAssemble(
_A );
296 HYPRE_StructMatrixPrint( prefix,
_A, 0 );
305 HYPRE_StructVectorPrint( prefix,
_x, 0 );
314 HYPRE_StructVectorPrint( prefix,
_b, 0 );
332 Scalar, EntityType, MemorySpace>>& preconditioner )
335 if ( _is_preconditioner )
336 throw std::logic_error(
337 "Cabana::Grid::HypreStructuredSolver::setPreconditioner: "
339 "call setPreconditioner() on a preconditioner" );
342 if ( !preconditioner->isPreconditioner() )
343 throw std::logic_error(
"Cabana::Grid::HypreStructuredSolver:"
344 "setPreconditioner: Not a preconditioner" );
346 _preconditioner = preconditioner;
354 if ( _is_preconditioner )
355 throw std::logic_error(
356 "Cabana::Grid::HypreStructuredSolver::setup:"
357 " Cannot call setup() on preconditioners" );
368 template <
class Array_t>
369 void solve(
const Array_t& b, Array_t& x )
371 Kokkos::Profiling::ScopedRegion region(
372 "Cabana::Grid::HypreStructuredSolver::solve" );
376 "Cabana::Grid::HypreStructuredSolver::solve: Must use an array" );
378 std::is_same<typename Array_t::entity_type, entity_type>::value,
379 "Cabana::Grid::HypreStructuredSolver::solve: Array entity type "
380 "must match solver entity type" );
382 std::is_same<typename Array_t::memory_space, MemorySpace>::value,
383 "Cabana::Grid::HypreStructuredSolver::solve: Array memory space "
384 "and solver memory space are different." );
387 std::is_same<typename Array_t::value_type, value_type>::value,
388 "Cabana::Grid::HypreStructuredSolver::solve: Array value type and "
389 "solver value type are different." );
392 if ( _is_preconditioner )
393 throw std::logic_error(
394 "Cabana::Grid::HypreStructuredSolver::solve: Cannot call "
395 "solve() on preconditioners" );
397 if ( b.layout()->dofsPerEntity() != 1 ||
398 x.layout()->dofsPerEntity() != 1 )
399 throw std::runtime_error(
400 "Cabana::Grid::HypreStructuredSolver::solve: Structured solver "
401 "only for scalar fields" );
404 const std::size_t num_space_dim = Array_t::num_space_dim;
407 auto owned_space = b.layout()->indexSpace(
Own(),
Local() );
408 std::array<long, num_space_dim + 1> reorder_size;
409 for ( std::size_t d = 0; d < num_space_dim; ++d )
411 reorder_size[d] = owned_space.extent( d );
413 reorder_size.back() = 1;
417 "vector_values", reorder_space );
419 Kokkos::deep_copy( vector_values, b_subv );
422 auto error = HYPRE_StructVectorSetBoxValues(
423 _b, _lower.data(), _upper.data(), vector_values.data() );
425 error = HYPRE_StructVectorAssemble(
_b );
432 error = HYPRE_StructVectorGetBoxValues(
433 _x, _lower.data(), _upper.data(), vector_values.data() );
438 Kokkos::deep_copy( x_subv, vector_values );
482 preconditioner ) = 0;
490 HYPRE_DescribeError( error, error_msg );
491 std::stringstream out;
492 out <<
"HYPRE structured solver error: ";
493 out << error <<
" " << error_msg;
494 HYPRE_ClearError( error );
495 throw std::runtime_error( out.str() );
501 HYPRE_StructMatrix
_A;
503 HYPRE_StructVector
_b;
505 HYPRE_StructVector
_x;
509 bool _is_preconditioner;
510 HYPRE_StructGrid _grid;
511 std::vector<HYPRE_Int> _lower;
512 std::vector<HYPRE_Int> _upper;
513 HYPRE_StructStencil _stencil;
514 unsigned _stencil_size;
515 std::shared_ptr<HypreStructuredSolver<Scalar, EntityType, MemorySpace>>
521template <
class Scalar,
class EntityType,
class MemorySpace>
529 template <
class ArrayLayout_t>
531 const bool is_preconditioner =
false )
534 if ( is_preconditioner )
535 throw std::logic_error(
536 "HYPRE PCG cannot be used as a preconditioner" );
538 auto error = HYPRE_StructPCGCreate(
539 layout.localGrid()->globalGrid().comm(), &_solver );
542 HYPRE_StructPCGSetTwoNorm( _solver, 1 );
552 auto error = HYPRE_StructPCGSetAbsoluteTol( _solver, tol );
560 auto error = HYPRE_StructPCGSetRelChange( _solver, rel_change );
567 auto error = HYPRE_StructPCGSetLogging( _solver, logging );
574 return HYPRE_StructPCGSetup;
578 return HYPRE_StructPCGSolve;
584 auto error = HYPRE_StructPCGSetTol( _solver, tol );
590 auto error = HYPRE_StructPCGSetMaxIter( _solver, max_iter );
596 auto error = HYPRE_StructPCGSetPrintLevel( _solver, print_level );
602 auto error = HYPRE_StructPCGSetup( _solver, _A, _b, _x );
608 auto error = HYPRE_StructPCGSolve( _solver, _A, _b, _x );
615 auto error = HYPRE_StructPCGGetNumIterations( _solver, &num_iter );
624 HYPRE_StructPCGGetFinalRelativeResidualNorm( _solver, &norm );
631 preconditioner )
override
633 auto error = HYPRE_StructPCGSetPrecond(
641 HYPRE_StructSolver _solver;
649template <
class Scalar,
class EntityType,
class MemorySpace>
657 template <
class ArrayLayout_t>
659 const bool is_preconditioner =
false )
662 if ( is_preconditioner )
663 throw std::logic_error(
664 "HYPRE GMRES cannot be used as a preconditioner" );
666 auto error = HYPRE_StructGMRESCreate(
667 layout.localGrid()->globalGrid().comm(), &_solver );
678 auto error = HYPRE_StructGMRESSetAbsoluteTol( _solver, tol );
685 auto error = HYPRE_StructGMRESSetKDim( _solver, k_dim );
692 auto error = HYPRE_StructGMRESSetLogging( _solver, logging );
699 return HYPRE_StructGMRESSetup;
703 return HYPRE_StructGMRESSolve;
709 auto error = HYPRE_StructGMRESSetTol( _solver, tol );
715 auto error = HYPRE_StructGMRESSetMaxIter( _solver, max_iter );
721 auto error = HYPRE_StructGMRESSetPrintLevel( _solver, print_level );
727 auto error = HYPRE_StructGMRESSetup( _solver, _A, _b, _x );
733 auto error = HYPRE_StructGMRESSolve( _solver, _A, _b, _x );
740 auto error = HYPRE_StructGMRESGetNumIterations( _solver, &num_iter );
749 HYPRE_StructGMRESGetFinalRelativeResidualNorm( _solver, &norm );
756 preconditioner )
override
758 auto error = HYPRE_StructGMRESSetPrecond(
766 HYPRE_StructSolver _solver;
774template <
class Scalar,
class EntityType,
class MemorySpace>
782 template <
class ArrayLayout_t>
784 const bool is_preconditioner =
false )
787 if ( is_preconditioner )
788 throw std::logic_error(
789 "HYPRE BiCGSTAB cannot be used as a preconditioner" );
791 auto error = HYPRE_StructBiCGSTABCreate(
792 layout.localGrid()->globalGrid().comm(), &_solver );
803 auto error = HYPRE_StructBiCGSTABSetAbsoluteTol( _solver, tol );
810 auto error = HYPRE_StructBiCGSTABSetLogging( _solver, logging );
817 return HYPRE_StructBiCGSTABSetup;
821 return HYPRE_StructBiCGSTABSolve;
827 auto error = HYPRE_StructBiCGSTABSetTol( _solver, tol );
833 auto error = HYPRE_StructBiCGSTABSetMaxIter( _solver, max_iter );
839 auto error = HYPRE_StructBiCGSTABSetPrintLevel( _solver, print_level );
845 auto error = HYPRE_StructBiCGSTABSetup( _solver, _A, _b, _x );
851 auto error = HYPRE_StructBiCGSTABSolve( _solver, _A, _b, _x );
858 auto error = HYPRE_StructBiCGSTABGetNumIterations( _solver, &num_iter );
867 HYPRE_StructBiCGSTABGetFinalRelativeResidualNorm( _solver, &norm );
874 preconditioner )
override
876 auto error = HYPRE_StructBiCGSTABSetPrecond(
884 HYPRE_StructSolver _solver;
892template <
class Scalar,
class EntityType,
class MemorySpace>
900 template <
class ArrayLayout_t>
902 const bool is_preconditioner =
false )
905 auto error = HYPRE_StructPFMGCreate(
906 layout.localGrid()->globalGrid().comm(), &_solver );
909 if ( is_preconditioner )
911 error = HYPRE_StructPFMGSetZeroGuess( _solver );
923 auto error = HYPRE_StructPFMGSetMaxLevels( _solver, max_levels );
931 auto error = HYPRE_StructPFMGSetRelChange( _solver, rel_change );
946 auto error = HYPRE_StructPFMGSetRelaxType( _solver, relax_type );
953 auto error = HYPRE_StructPFMGSetJacobiWeight( _solver, weight );
969 auto error = HYPRE_StructPFMGSetRAPType( _solver, rap_type );
976 auto error = HYPRE_StructPFMGSetNumPreRelax( _solver, num_pre_relax );
983 auto error = HYPRE_StructPFMGSetNumPostRelax( _solver, num_post_relax );
992 auto error = HYPRE_StructPFMGSetSkipRelax( _solver, skip_relax );
999 auto error = HYPRE_StructPFMGSetLogging( _solver, logging );
1006 return HYPRE_StructPFMGSetup;
1010 return HYPRE_StructPFMGSolve;
1016 auto error = HYPRE_StructPFMGSetTol( _solver, tol );
1022 auto error = HYPRE_StructPFMGSetMaxIter( _solver, max_iter );
1028 auto error = HYPRE_StructPFMGSetPrintLevel( _solver, print_level );
1034 auto error = HYPRE_StructPFMGSetup( _solver, _A, _b, _x );
1040 auto error = HYPRE_StructPFMGSolve( _solver, _A, _b, _x );
1047 auto error = HYPRE_StructPFMGGetNumIterations( _solver, &num_iter );
1056 HYPRE_StructPFMGGetFinalRelativeResidualNorm( _solver, &norm );
1064 throw std::logic_error(
1065 "HYPRE PFMG solver does not support preconditioning." );
1069 HYPRE_StructSolver _solver;
1077template <
class Scalar,
class EntityType,
class MemorySpace>
1085 template <
class ArrayLayout_t>
1087 const bool is_preconditioner =
false )
1088 :
base_type( layout, is_preconditioner )
1090 auto error = HYPRE_StructSMGCreate(
1091 layout.localGrid()->globalGrid().comm(), &_solver );
1094 if ( is_preconditioner )
1096 error = HYPRE_StructSMGSetZeroGuess( _solver );
1109 auto error = HYPRE_StructSMGSetRelChange( _solver, rel_change );
1116 auto error = HYPRE_StructSMGSetNumPreRelax( _solver, num_pre_relax );
1123 auto error = HYPRE_StructSMGSetNumPostRelax( _solver, num_post_relax );
1130 auto error = HYPRE_StructSMGSetLogging( _solver, logging );
1137 return HYPRE_StructSMGSetup;
1141 return HYPRE_StructSMGSolve;
1147 auto error = HYPRE_StructSMGSetTol( _solver, tol );
1153 auto error = HYPRE_StructSMGSetMaxIter( _solver, max_iter );
1159 auto error = HYPRE_StructSMGSetPrintLevel( _solver, print_level );
1165 auto error = HYPRE_StructSMGSetup( _solver, _A, _b, _x );
1171 auto error = HYPRE_StructSMGSolve( _solver, _A, _b, _x );
1178 auto error = HYPRE_StructSMGGetNumIterations( _solver, &num_iter );
1187 HYPRE_StructSMGGetFinalRelativeResidualNorm( _solver, &norm );
1195 throw std::logic_error(
1196 "HYPRE SMG solver does not support preconditioning." );
1200 HYPRE_StructSolver _solver;
1208template <
class Scalar,
class EntityType,
class MemorySpace>
1216 template <
class ArrayLayout_t>
1218 const bool is_preconditioner =
false )
1219 :
base_type( layout, is_preconditioner )
1221 auto error = HYPRE_StructJacobiCreate(
1222 layout.localGrid()->globalGrid().comm(), &_solver );
1225 if ( is_preconditioner )
1227 error = HYPRE_StructJacobiSetZeroGuess( _solver );
1237 return HYPRE_StructJacobiSetup;
1241 return HYPRE_StructJacobiSolve;
1247 auto error = HYPRE_StructJacobiSetTol( _solver, tol );
1253 auto error = HYPRE_StructJacobiSetMaxIter( _solver, max_iter );
1264 auto error = HYPRE_StructJacobiSetup( _solver, _A, _b, _x );
1270 auto error = HYPRE_StructJacobiSolve( _solver, _A, _b, _x );
1277 auto error = HYPRE_StructJacobiGetNumIterations( _solver, &num_iter );
1286 HYPRE_StructJacobiGetFinalRelativeResidualNorm( _solver, &norm );
1294 throw std::logic_error(
1295 "HYPRE Jacobi solver does not support preconditioning." );
1299 HYPRE_StructSolver _solver;
1307template <
class Scalar,
class EntityType,
class MemorySpace>
1315 template <
class ArrayLayout_t>
1317 const bool is_preconditioner =
false )
1318 :
base_type( layout, is_preconditioner )
1320 if ( !is_preconditioner )
1321 throw std::logic_error(
1322 "Diagonal preconditioner cannot be used as a solver" );
1328 return HYPRE_StructDiagScaleSetup;
1332 return HYPRE_StructDiagScale;
1338 throw std::logic_error(
1339 "Diagonal preconditioner cannot be used as a solver" );
1344 throw std::logic_error(
1345 "Diagonal preconditioner cannot be used as a solver" );
1350 throw std::logic_error(
1351 "Diagonal preconditioner cannot be used as a solver" );
1356 throw std::logic_error(
1357 "Diagonal preconditioner cannot be used as a solver" );
1362 throw std::logic_error(
1363 "Diagonal preconditioner cannot be used as a solver" );
1368 throw std::logic_error(
1369 "Diagonal preconditioner cannot be used as a solver" );
1374 throw std::logic_error(
1375 "Diagonal preconditioner cannot be used as a solver" );
1381 throw std::logic_error(
1382 "Diagonal preconditioner does not support preconditioning." );
1391template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1393 HypreStructPCG<Scalar, typename ArrayLayout_t::entity_type, MemorySpace>>
1395 const bool is_preconditioner =
false )
1398 "Must use an array layout" );
1400 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1401 layout, is_preconditioner );
1406template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1408 HypreStructGMRES<Scalar, typename ArrayLayout_t::entity_type, MemorySpace>>
1410 const bool is_preconditioner =
false )
1413 "Must use an array layout" );
1415 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1416 layout, is_preconditioner );
1421template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1422std::shared_ptr<HypreStructBiCGSTAB<Scalar,
typename ArrayLayout_t::entity_type,
1425 const bool is_preconditioner =
false )
1428 "Must use an array layout" );
1430 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1431 layout, is_preconditioner );
1436template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1438 HypreStructPFMG<Scalar, typename ArrayLayout_t::entity_type, MemorySpace>>
1440 const bool is_preconditioner =
false )
1443 "Must use an array layout" );
1445 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1446 layout, is_preconditioner );
1451template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1453 HypreStructSMG<Scalar, typename ArrayLayout_t::entity_type, MemorySpace>>
1455 const bool is_preconditioner =
false )
1458 "Must use an array layout" );
1460 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1461 layout, is_preconditioner );
1466template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1468 HypreStructJacobi<Scalar, typename ArrayLayout_t::entity_type, MemorySpace>>
1470 const bool is_preconditioner =
false )
1473 "Must use an array layout" );
1475 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1476 layout, is_preconditioner );
1481template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1482std::shared_ptr<HypreStructDiagonal<Scalar,
typename ArrayLayout_t::entity_type,
1485 const bool is_preconditioner =
false )
1488 "Must use an array layout" );
1490 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>(
1491 layout, is_preconditioner );
1505template <
class Scalar,
class MemorySpace,
class ArrayLayout_t>
1506std::shared_ptr<HypreStructuredSolver<
1507 Scalar,
typename ArrayLayout_t::entity_type, MemorySpace>>
1509 const ArrayLayout_t& layout,
1510 const bool is_preconditioner =
false )
1513 "Must use an array layout" );
1515 if (
"PCG" == solver_type )
1517 is_preconditioner );
1518 else if (
"GMRES" == solver_type )
1520 is_preconditioner );
1521 else if (
"BiCGSTAB" == solver_type )
1523 layout, is_preconditioner );
1524 else if (
"PFMG" == solver_type )
1526 is_preconditioner );
1527 else if (
"SMG" == solver_type )
1529 is_preconditioner );
1530 else if (
"Jacobi" == solver_type )
1532 layout, is_preconditioner );
1533 else if (
"Diagonal" == solver_type )
1535 layout, is_preconditioner );
1537 throw std::runtime_error(
1538 "Cabana::Grid::createHypreStructuredSolver: Invalid solver type" );
std::shared_ptr< HypreStructGMRES< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructGMRES(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1409
std::shared_ptr< HypreStructJacobi< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructJacobi(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1469
std::shared_ptr< HypreStructBiCGSTAB< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructBiCGSTAB(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1424
std::shared_ptr< HypreStructDiagonal< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructDiagonal(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1484
std::shared_ptr< HypreStructPCG< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructPCG(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1394
std::shared_ptr< HypreStructPFMG< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructPFMG(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1439
std::shared_ptr< HypreStructSMG< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructSMG(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1454
std::shared_ptr< HypreStructuredSolver< Scalar, typename ArrayLayout_t::entity_type, MemorySpace > > createHypreStructuredSolver(const std::string &solver_type, const ArrayLayout_t &layout, const bool is_preconditioner=false)
Create a HYPRE structured solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1508
HYPRE memory space handling.
KOKKOS_INLINE_FUNCTION auto createSubview(const ViewType &view, const IndexSpace< 1 > &index_space) -> decltype(Kokkos::subview(view, index_space.range(0)))
Given a view create a subview over the given index space.
Definition Cabana_Grid_IndexSpace.hpp:369
Kokkos::View< Scalar *, Params... > createView(const std::string &label, const IndexSpace< 1 > &index_space)
Given an index space create a view over the extent of that index space.
Definition Cabana_Grid_IndexSpace.hpp:235
BiCGSTAB solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:777
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:863
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:849
void setLogging(const int logging)
Set the amount of logging to do.
Definition Cabana_Grid_HypreStructuredSolver.hpp:808
void setAbsoluteTol(const double tol)
Set the absolute tolerance.
Definition Cabana_Grid_HypreStructuredSolver.hpp:801
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:814
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:855
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:815
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:780
void setMaxIterImpl(const int max_iter) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:831
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &preconditioner) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:872
void setPrintLevelImpl(const int print_level) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:837
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:819
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:843
void setToleranceImpl(const double tol) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:825
HypreStructBiCGSTAB(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:783
Diagonal preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1310
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1360
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1372
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1366
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1354
void setPrintLevelImpl(const int) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1348
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1326
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1325
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1313
void setToleranceImpl(const double) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1336
HypreStructDiagonal(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1316
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1378
void setMaxIterImpl(const int) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1342
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1330
GMRES solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:652
void setToleranceImpl(const double tol) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:707
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:731
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:655
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:697
HypreStructGMRES(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:658
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:737
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &preconditioner) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:754
void setMaxIterImpl(const int max_iter) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:713
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:701
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:696
void setKDim(const int k_dim)
Set the max size of the Krylov space.
Definition Cabana_Grid_HypreStructuredSolver.hpp:683
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:745
void setLogging(const int logging)
Set the amount of logging to do.
Definition Cabana_Grid_HypreStructuredSolver.hpp:690
void setAbsoluteTol(const double tol)
Set the absolute tolerance.
Definition Cabana_Grid_HypreStructuredSolver.hpp:676
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:725
void setPrintLevelImpl(const int print_level) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:719
Jacobi solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1211
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1291
void setToleranceImpl(const double tol) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1245
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1282
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1214
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1239
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1262
void setMaxIterImpl(const int max_iter) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1251
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1274
void setPrintLevelImpl(const int) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1257
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1235
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1268
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1234
HypreStructJacobi(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1217
PCG solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:524
void setRelChange(const int rel_change)
Definition Cabana_Grid_HypreStructuredSolver.hpp:558
void setToleranceImpl(const double tol) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:582
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:600
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:571
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:527
HypreStructPCG(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:530
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:572
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:606
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:612
void setAbsoluteTol(const double tol)
Set the absolute tolerance.
Definition Cabana_Grid_HypreStructuredSolver.hpp:550
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:620
void setMaxIterImpl(const int max_iter) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:588
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:576
void setPrintLevelImpl(const int print_level) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:594
void setLogging(const int logging)
Set the amount of logging to do.
Definition Cabana_Grid_HypreStructuredSolver.hpp:565
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &preconditioner) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:629
PFMG solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:895
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:898
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1008
void setRelaxType(const int relax_type)
Set relaxation type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:944
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1061
void setSkipRelax(const int skip_relax)
Definition Cabana_Grid_HypreStructuredSolver.hpp:990
void setPrintLevelImpl(const int print_level) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1026
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1052
void setLogging(const int logging)
Set the amount of logging to do.
Definition Cabana_Grid_HypreStructuredSolver.hpp:997
void setNumPreRelax(const int num_pre_relax)
Set number of relaxation sweeps before coarse-grid correction.
Definition Cabana_Grid_HypreStructuredSolver.hpp:974
void setJacobiWeight(const double weight)
Set the Jacobi weight.
Definition Cabana_Grid_HypreStructuredSolver.hpp:951
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1003
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1038
HypreStructPFMG(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:901
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1004
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1032
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1044
void setMaxIterImpl(const int max_iter) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1020
void setToleranceImpl(const double tol) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1014
void setRelChange(const int rel_change)
Definition Cabana_Grid_HypreStructuredSolver.hpp:929
void setNumPostRelax(const int num_post_relax)
Set number of relaxation sweeps before coarse-grid correction.
Definition Cabana_Grid_HypreStructuredSolver.hpp:981
void setMaxLevels(const int max_levels)
Set the maximum number of multigrid levels.
Definition Cabana_Grid_HypreStructuredSolver.hpp:921
void setRAPType(const int rap_type)
Set type of coarse-grid operator to use.
Definition Cabana_Grid_HypreStructuredSolver.hpp:967
SMG solver.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1080
HypreStructSMG(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Constructor.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1086
void solveImpl() override
Solver implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1169
void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &) override
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1192
void setToleranceImpl(const double tol) override
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1145
void setRelChange(const int rel_change)
Definition Cabana_Grid_HypreStructuredSolver.hpp:1107
HypreStructuredSolver< Scalar, EntityType, MemorySpace > base_type
Base HYPRE structured solver type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1083
HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const override
Get the preconditioner setup function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1135
HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const override
Get the preconditioner solve function.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1139
void setLogging(const int logging)
Set the amount of logging to do.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1128
void setMaxIterImpl(const int max_iter) override
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1151
int getNumIterImpl() override
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1175
void setPrintLevelImpl(const int print_level) override
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1157
void setupImpl() override
Setup implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1163
double getFinalRelativeResidualNormImpl() override
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1183
void setNumPostRelax(const int num_post_relax)
Set number of relaxation sweeps before coarse-grid correction.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1121
void setNumPreRelax(const int num_pre_relax)
Set number of relaxation sweeps before coarse-grid correction.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1114
HYPRE_StructSolver getHypreSolver() const override
Get the preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:1134
Hypre structured solver interface for scalar fields.
Definition Cabana_Grid_HypreStructuredSolver.hpp:49
bool isPreconditioner() const
Return if this solver is a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:179
Scalar value_type
Scalar value type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:56
virtual HYPRE_PtrToStructSolverFcn getHypreSetupFunction() const =0
Get the preconditioner setup function.
void printMatrix(const char *prefix)
Print the hypre matrix to output file.
Definition Cabana_Grid_HypreStructuredSolver.hpp:294
HYPRE_StructMatrix _A
Matrix for the problem Ax = b.
Definition Cabana_Grid_HypreStructuredSolver.hpp:501
HYPRE_StructVector _b
Forcing term for the problem Ax = b.
Definition Cabana_Grid_HypreStructuredSolver.hpp:503
double getFinalRelativeResidualNorm()
Get the relative residual norm achieved on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:445
void setup()
Setup the problem.
Definition Cabana_Grid_HypreStructuredSolver.hpp:351
virtual void setMaxIterImpl(const int max_iter)=0
Set maximum iteration implementation.
HypreStructuredSolver(const ArrayLayout_t &layout, const bool is_preconditioner=false)
Hypre memory space compatibility check.
Definition Cabana_Grid_HypreStructuredSolver.hpp:68
virtual void setPreconditionerImpl(const HypreStructuredSolver< Scalar, EntityType, MemorySpace > &preconditioner)=0
Set a preconditioner.
virtual void setToleranceImpl(const double tol)=0
Set convergence tolerance implementation.
void setMatrixStencil(const std::vector< std::array< int, NumSpaceDim > > &stencil, const bool is_symmetric=false)
Set the operator stencil.
Definition Cabana_Grid_HypreStructuredSolver.hpp:191
EntityType entity_type
Entity type.
Definition Cabana_Grid_HypreStructuredSolver.hpp:52
virtual double getFinalRelativeResidualNormImpl()=0
Get the relative residual norm achieved on the last solve.
void setPrintLevel(const int print_level)
Set the output level.
Definition Cabana_Grid_HypreStructuredSolver.hpp:324
virtual void solveImpl()=0
Solver implementation.
virtual int getNumIterImpl()=0
Get the number of iterations taken on the last solve.
MemorySpace memory_space
Kokkos memory space..
Definition Cabana_Grid_HypreStructuredSolver.hpp:54
virtual HYPRE_StructSolver getHypreSolver() const =0
Get the preconditioner.
void setMatrixValues(const Array_t &values)
Set the matrix values.
Definition Cabana_Grid_HypreStructuredSolver.hpp:231
void printLHS(const char *prefix)
Print the hypre LHS to output file.
Definition Cabana_Grid_HypreStructuredSolver.hpp:303
void printRHS(const char *prefix)
Print the hypre RHS to output file.
Definition Cabana_Grid_HypreStructuredSolver.hpp:312
void checkHypreError(const int error) const
Check a hypre error.
Definition Cabana_Grid_HypreStructuredSolver.hpp:485
int getNumIter()
Get the number of iterations taken on the last solve.
Definition Cabana_Grid_HypreStructuredSolver.hpp:442
virtual HYPRE_PtrToStructSolverFcn getHypreSolveFunction() const =0
Get the preconditioner solve function.
virtual void setupImpl()=0
Setup implementation.
HYPRE_StructVector _x
Solution to the problem Ax = b.
Definition Cabana_Grid_HypreStructuredSolver.hpp:505
void setMaxIter(const int max_iter)
Set maximum iteration implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:321
void solve(const Array_t &b, Array_t &x)
Solve the problem Ax = b for x.
Definition Cabana_Grid_HypreStructuredSolver.hpp:369
void setTolerance(const double tol)
Set convergence tolerance implementation.
Definition Cabana_Grid_HypreStructuredSolver.hpp:318
void setPreconditioner(const std::shared_ptr< HypreStructuredSolver< Scalar, EntityType, MemorySpace > > &preconditioner)
Set a preconditioner.
Definition Cabana_Grid_HypreStructuredSolver.hpp:331
virtual void setPrintLevelImpl(const int print_level)=0
Set the output level.
Structured index space.
Definition Cabana_Grid_IndexSpace.hpp:37
Core: particle data structures and algorithms.
Definition Cabana_AoSoA.hpp:36
Global index tag.
Definition Cabana_Grid_Types.hpp:215
Hypre device compatibility check.
Definition Cabana_Grid_Hypre.hpp:39
Local index tag.
Definition Cabana_Grid_Types.hpp:208
Owned decomposition tag.
Definition Cabana_Grid_Types.hpp:190
Array static type checker.
Definition Cabana_Grid_Array.hpp:160
Definition Cabana_Grid_Array.hpp:324