14 #ifdef MOOSE_KOKKOS_SCOPE 101 auto range = libmesh_map_find(
_maps->subdomain_elem_id_ranges, subdomain);
102 return range.second - range.first;
145 const auto & range = libmesh_map_find(
_maps->subdomain_elem_id_ranges, subdomain);
162 return libmesh_map_find(
_maps->subdomain_node_ids, subdomain);
172 return libmesh_map_find(
_maps->boundary_node_ids, boundary);
174 #ifdef MOOSE_KOKKOS_SCOPE 199 KOKKOS_FUNCTION
unsigned int getNumSides(
unsigned int elem_type)
const 208 KOKKOS_FUNCTION
unsigned int getNumNodes(
unsigned int elem_type)
const 218 KOKKOS_FUNCTION
unsigned int getNumNodes(
unsigned int elem_type,
unsigned int side)
const 250 unsigned int node)
const 252 return _nodes(node, elem);
263 unsigned int node)
const 329 std::unordered_map<SubdomainID, std::pair<ContiguousElementID, ContiguousElementID>>
409 #ifdef MOOSE_KOKKOS_SCOPE 410 KOKKOS_FUNCTION
inline bool 420 return target != end;
446 #ifdef MOOSE_KOKKOS_SCOPE 456 "kokkosMesh() was called too early. Kokkos mesh is available after problem " 457 "initialization. Override initialSetup() if you need to setup your object data " 458 "using the Kokkos mesh.");
Array2D< dof_id_type > _extra_elem_ids
Extra element IDs.
auto getNumSubdomainLocalElements(const SubdomainID subdomain) const
Get the number of local elements in a MOOSE subdomain.
const auto & getElementTypeMap() const
Get the element type ID map.
Array< Array2D< unsigned int > > _local_side_node
Map from local side node index to local element node index.
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
Find a value in an array.
The Kokkos object that contains the information of an element The IDs used in Kokkos are different fr...
The wrapper of host maps.
Array< ContiguousElementID > _starting_elem_id
Starting contiguous element ID of each subdomain.
const unsigned int invalid_uint
std::unordered_map< BoundaryID, ContiguousBoundaryID > boundary_id_mapping
Map from the MOOSE boundary ID to the contiguous boundary ID.
void initElement()
Initialize device element data.
bool _initialized
Flag whether the mesh was initialized.
dof_id_type ContiguousElementID
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
KOKKOS_FUNCTION dof_id_type getStartingContiguousElementID(ContiguousSubdomainID subdomain) const
Get the starting contiguous element ID of a subdomain.
void initMap()
Initialize host maps.
BoundaryID ContiguousBoundaryID
unsigned int _elem_id_integer
Element integer for Kokkos contiguous element ID.
const auto & getSubdomainContiguousNodeIDs(const SubdomainID subdomain) const
Get the list of local contiguous node IDs for a subdomain NOTE: This list excludes semi-local nodes...
const auto & getBoundaryContiguousNodeIDs(const BoundaryID boundary) const
Get the list of local contiguous node IDs for a boundary NOTE: This list excludes semi-local nodes...
std::vector< Node * > local_nodes
List of local nodes including semi-local nodes.
The Kokkos interface that holds the host reference of the Kokkos mesh and copies it to device during ...
dof_id_type _num_local_elems
Number of local elements.
KOKKOS_FUNCTION bool isBoundaryNode(ContiguousNodeID node, ContiguousBoundaryID boundary) const
Get whether a node is on a boundary.
auto max(const L &left, const R &right)
auto getNumSubdomains() const
Get the number of subdomains.
ContiguousNodeID getContiguousNodeID(const Node *node) const
Get the contiguous node ID of a node.
Array< Array< ContiguousNodeID > > _boundary_nodes
Contiguous node IDs on each boundary.
KOKKOS_FUNCTION unsigned int getNumNodes(unsigned int elem_type) const
Get the number of nodes of an element type.
Mesh(MooseMesh &mesh)
Constructor.
KOKKOS_FUNCTION ContiguousNodeID getContiguousNodeID(ElementInfo info, unsigned int side, unsigned int node) const
Get the contiguous node ID for a side.
const MooseMesh & getMesh()
Get the underyling MOOSE mesh.
bool initialized() const
Get whether the mesh was initialized.
static constexpr dof_id_type invalid_id
dof_id_type ContiguousNodeID
const Mesh _mesh_device
Device copy of the Kokkos mesh.
auto getNumLocalElements() const
Get the number of local elements.
std::unordered_map< ElemType, unsigned int > elem_type_id_mapping
Map from the MOOSE element type to the element type ID.
boundary_id_type BoundaryID
std::unordered_map< SubdomainID, ContiguousSubdomainID > subdomain_id_mapping
Map from the MOOSE subdomain ID to the contiguous subdomain ID.
dof_id_type _num_local_nodes
Number of local nodes including semi-local nodes.
KOKKOS_FUNCTION ContiguousElementID getNeighbor(ContiguousElementID elem, unsigned int side) const
Get the neighbor contiguous element ID.
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
unsigned int type
Element type ID.
MeshHolder(const Mesh &mesh)
Constructor.
std::unordered_map< SubdomainID, std::pair< ContiguousElementID, ContiguousElementID > > subdomain_elem_id_ranges
Range of the contiguous element IDs in each subdomain.
KOKKOS_FUNCTION unsigned int getNumNodes(unsigned int elem_type, unsigned int side) const
Get the number of nodes on a side of an element type.
KOKKOS_FUNCTION const auto & getElementInfo(ContiguousElementID elem) const
Get the element information object.
subdomain_id_type SubdomainID
Array2D< ContiguousNodeID > _nodes
Contiguous node IDs of each element.
std::unordered_map< BoundaryID, std::set< ContiguousNodeID > > boundary_node_ids
List of the contiguous node IDs on each boundary NOTE: This list excludes semi-local nodes...
KOKKOS_FUNCTION dof_id_type getExtraElementID(ContiguousElementID elem, unsigned int index) const
Get the extra element ID of an element.
Array2D< ContiguousElementID > _elem_neighbor
Neighbor contiguous element IDs of each element.
auto getNumLocalElementTypes() const
Get the number of local elements types.
KOKKOS_FUNCTION Real3 getNodePoint(ContiguousNodeID node) const
Get the coordinate of a node.
KOKKOS_FUNCTION const Mesh & kokkosMesh() const
Get the const reference of the Kokkos mesh.
MeshHolder(const MeshHolder &holder)
Copy constructor.
ContiguousSubdomainID subdomain
Contiguous subdomain ID.
auto getNumLocalNodes() const
Get the number of local nodes including semi-local nodes.
Array< Real3 > _points
Node coordinates.
Array< unsigned int > _num_sides
Number of sides of each element type.
ContiguousBoundaryID getContiguousBoundaryID(const BoundaryID boundary) const
Get the contiguous boundary ID of a boundary.
KOKKOS_FUNCTION unsigned int getNumSides(unsigned int elem_type) const
Get the number of sides of an element type.
IntRange< T > make_range(T beg, T end)
MooseMesh & _mesh
Reference of the MOOSE mesh.
const auto & getLocalNodes() const
Get the list of local nodes including semi-local nodes.
unsigned int _node_id_integer
Node integer for Kokkos contiguous node ID.
const Mesh & _mesh_host
Host reference of the Kokkos mesh.
ContiguousElementID getContiguousElementID(const Elem *elem) const
Get the contiguous element ID of an element.
void update()
Update the mesh.
ContiguousSubdomainID getContiguousSubdomainID(const SubdomainID subdomain) const
Get the contiguous subdomain ID of a MOOSE subdomain.
KOKKOS_FUNCTION ContiguousNodeID getContiguousNodeID(ContiguousElementID elem, unsigned int node) const
Get the contiguous node ID for an element.
std::shared_ptr< MeshMap > _maps
A shared pointer holding all the host maps to avoid deep copy.
Array< ElementInfo > _elem_info
Element information.
unsigned int getElementTypeID(const Elem *elem) const
Get the element type ID of an element.
Array< Array< unsigned int > > _num_side_nodes
Number of nodes per side of each element side.
auto getSubdomainContiguousElementIDRange(const SubdomainID subdomain) const
Get the range of contiguous element IDs for a subdomain.
Array< unsigned int > _num_nodes
Number of nodes of each element type.
std::unordered_map< SubdomainID, std::vector< ContiguousNodeID > > subdomain_node_ids
List of the contiguous node IDs in each subdomain NOTE: This list excludes semi-local nodes...
std::unordered_map< const Node *, ContiguousNodeID > semi_local_node_id_mapping
Map from the libMesh semi-local node to the contiguous node ID.