18#include "libmesh/communicator.h"
54#ifdef MOOSE_KOKKOS_SCOPE
172 void buildCooIndices(std::vector<PetscInt> & coo_i, std::vector<PetscInt> & coo_j)
const;
237 unsigned int var)
const
262 unsigned int var)
const
453#ifdef MOOSE_KOKKOS_SCOPE
454#define MakeSystemHolderMethods(SystemTypeName) \
455 KOKKOS_FUNCTION const Array<SystemTypeName> & kokkosSystems() const \
457 KOKKOS_IF_ON_HOST(return _systems_host;) \
458 return _systems_device; \
460 Array<SystemTypeName> & kokkosSystems() { return _systems_host; } \
461 KOKKOS_FUNCTION const SystemTypeName & kokkosSystem(unsigned int sys) const \
463 KOKKOS_IF_ON_HOST(return _systems_host[sys];) \
464 return _systems_device[sys]; \
466 SystemTypeName & kokkosSystem(unsigned int sys) { return _systems_host[sys]; }
468#define MakeSystemHolderMethods(SystemTypeName)
478#define MakeSystemHolder(SystemTypeName) \
479 class SystemTypeName##Holder \
482 SystemTypeName##Holder(Array<SystemTypeName> & systems) \
483 : _systems_host(systems), _systems_device(systems) \
486 SystemTypeName##Holder(const SystemTypeName##Holder & holder) \
487 : _systems_host(holder._systems_host), _systems_device(holder._systems_host) \
490 MakeSystemHolderMethods(SystemTypeName) \
492 Array<SystemTypeName> & _systems_host; \
493 const Array<SystemTypeName> _systems_device; \
dof_id_type ContiguousElementID
SubdomainID ContiguousSubdomainID
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
void destroy()
Free all data and reset.
The Kokkos wrapper class for PETSc matrix.
The Kokkos interface that holds the host reference of the Kokkos mesh and copies it to device during ...
The Kokkos base system class.
void clearActiveSolutionTags()
Clear the cached active solution tags.
const unsigned int _num_vars
Number of variables.
void setActiveMatrixTags(const std::set< TagID > &tags)
Set the active matrix tags.
Array< TagID > _active_matrix_tags
void sync(const TagID tag, const MemcpyType dir)
const Array< Array< dof_id_type > > & getLocalCommList() const
Get the list of local DOF indices to communicate.
void buildCooIndices(std::vector< PetscInt > &coo_i, std::vector< PetscInt > &coo_j) const
Build the COO index arrays describing the sparsity pattern.
KOKKOS_FUNCTION bool isResidualTagActive(TagID tag) const
Check whether a residual tag is active.
Array< unsigned int > _max_dofs_per_elem
Maximum number of DOFs per element for each variable.
Sparsity _sparsity
Matrix sparsity pattern data.
void sync(const MemcpyType dir)
Synchronize the active tagged vectors and matrices between host and device.
SystemBase & _system
Reference of the MOOSE system.
void clearActiveResidualTags()
Clear the cached active residual tags.
void sync(const std::vector< TagID > &tags, const MemcpyType dir)
KOKKOS_FUNCTION unsigned int getNumScalarDofs(unsigned int var) const
Get the number of DOFs of a scalar variable.
Array< Array< dof_id_type > > _local_comm_list
List of DOFs to send and receive.
const SystemBase & getSystem() const
const Array< Array< dof_id_type > > & getGhostCommList() const
Get the list of ghost DOF indices to communicate.
void setActiveResidualTags(const std::set< TagID > &tags)
Set the active residual tags.
void clearActiveMatrixTags()
Clear the cached active matrix tags.
KOKKOS_FUNCTION dof_id_type getElemLocalDofIndex(ContiguousElementID elem, unsigned int i, unsigned int var) const
Get the local DOF index of a variable for an element.
Array< unsigned int > _active_variables
List of active variable numbers.
const Parallel::Communicator & getComm() const
Get the libMesh communicator.
KOKKOS_FUNCTION dof_id_type getElemGlobalDofIndex(ContiguousElementID elem, unsigned int i, unsigned int var) const
Get the global DOF index of a variable for an element.
KOKKOS_FUNCTION bool isVariableActive(unsigned int var, ContiguousSubdomainID subdomain) const
Check whether a variable is active on a subdomain.
const libMesh::DofMap & getDofMap() const
Get the libMesh DOF map.
KOKKOS_FUNCTION Real & getVectorDofValue(const dof_id_type dof, const TagID tag) const
Get the DOF value of a tagged vector.
Array< TagID > _active_solution_tags
List of active tags.
KOKKOS_FUNCTION Real & getMatrixValue(dof_id_type row, dof_id_type col, TagID tag) const
Get an entry from a tagged matrix.
KOKKOS_FUNCTION Vector & getVector(TagID tag) const
Get a tagged Kokkos vector.
SystemBase & getSystem()
Get the MOOSE system.
Array2D< bool > _var_subdomain_active
Whether each variable is active on subdomains.
System(SystemBase &system)
Constructor.
Array< dof_id_type > _local_to_global_dof_index
Map from local DOF index to global DOF index.
void setupVariables()
Setup variable data.
System(const System &src)=default
Defaulted copy constructor Used by FESystem in mixed FE+FV simulations.
KOKKOS_FUNCTION Matrix & getMatrix(TagID tag) const
Get a tagged Kokkos matrix.
KOKKOS_FUNCTION dof_id_type getScalarGlobalDofIndex(unsigned int i, unsigned int var) const
Get the global DOF index of a scalar variable.
Array< Array2D< dof_id_type > > _local_elem_dof_index
Local element DOF indices of each variable.
KOKKOS_FUNCTION dof_id_type getScalarLocalDofIndex(unsigned int i, unsigned int var) const
Get the local DOF index of a scalar variable.
void setActiveVariables(const std::set< MooseVariableFieldBase * > &vars)
Set the active variables.
const dof_id_type _num_ghost_dofs
Number of ghost DOFs.
const MooseMesh & _mesh
Reference of the MOOSE mesh.
Array< Array< dof_id_type > > _scalar_dof_index
DOF indices of each scalar variable.
KOKKOS_FUNCTION bool isScalarVariable(unsigned int var) const
Check whether a variable is scalar.
KOKKOS_FUNCTION bool isMatrixTagActive(TagID tag) const
Check whether a matrix tag is active.
const dof_id_type _num_local_dofs
Number of local DOFs.
Array< TagID > _active_residual_tags
Array< Vector > _vectors
Kokkos vectors and matrices on device.
void setupDofs()
Setup DOF data.
Array< bool > _matrix_tag_active
void setActiveSolutionTags(const std::set< TagID > &tags)
Set the active solution tags.
Array< Array< dof_id_type > > _ghost_comm_list
const libMesh::DofMap & _dof_map
Reference of the libMesh DOF map.
void sync(const std::set< TagID > &tags, const MemcpyType dir)
Synchronize the specified tagged vectors between host and device.
Array< bool > _var_is_scalar
Whether each variable is scalar.
KOKKOS_FUNCTION dof_id_type localToGlobalDofIndex(dof_id_type dof) const
Get the global DOF index of a local DOF index.
Array< bool > _residual_tag_active
Flag whether each tag is active.
KOKKOS_FUNCTION dof_id_type getNumLocalDofs() const
Get the number of local DOFs.
Array< Matrix > _matrices
const Sparsity & getSparsity() const
Get the sparisty pattern data.
void clearActiveVariables()
Clear the cached active variables.
KOKKOS_FUNCTION dof_id_type getNumGhostDofs() const
Get the number of ghost DOFs.
const Parallel::Communicator & _comm
Reference of the libMesh communicator.
void setupSparsity()
Setup sparsity data.
The Kokkos wrapper class for PETSc vector.
Interface for objects interacting with the PerfGraph.
Base class for a system (of equations)
MakeSystemHolder(FESystem)
MemcpyType
The enumerator that dictates the memory copy direction.
CSR format sparsity data.
Array< PetscInt > col_idx
Array< PetscInt > row_ptr