https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KokkosNodalReducer.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "KokkosReducerBase.h"
13
14#include "BlockRestrictable.h"
16
17namespace Moose::Kokkos
18{
19
21{
22public:
24
25 NodalReducer(const MooseObject * object);
26
30 NodalReducer(const NodalReducer & object);
31
32 virtual ThreadID numReducerThreads() const override
33 {
35 }
36
40 template <typename Derived>
41 KOKKOS_FUNCTION void
42 operator()(ReducerLoop, const ThreadID tid, const Derived & reducer, Real * result) const;
43
44protected:
48 const bool _bnd;
53};
54
55template <typename Derived>
56KOKKOS_FUNCTION void
58 const ThreadID tid,
59 const Derived & reducer,
60 Real * result) const
61{
62 auto node = _bnd ? kokkosBoundaryNodeID(tid) : kokkosBlockNodeID(tid);
63
64 Datum datum(node, kokkosAssembly(), kokkosSystems());
65
66 reducer.template reduce<Derived>(datum, result);
67}
68
69} // namespace Moose::Kokkos
An interface that restricts an object to subdomains via the 'blocks' input parameter.
KOKKOS_FUNCTION ContiguousElementID kokkosBlockNodeID(Moose::Kokkos::ThreadID tid) const
Get the contiguous node index this Kokkos thread is operating on.
KOKKOS_FUNCTION dof_id_type numKokkosBlockNodes() const
Get the number of nodes this Kokkos object is operating on.
/class BoundaryRestrictable /brief Provides functionality for limiting the object to certain boundary...
KOKKOS_FUNCTION ContiguousNodeID kokkosBoundaryNodeID(Moose::Kokkos::ThreadID tid) const
Get the contiguous node ID this Kokkos thread is operating on.
KOKKOS_FUNCTION dof_id_type numKokkosBoundaryNodes() const
Get the number of nodes this Kokkos object is operating on.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
KOKKOS_FUNCTION const Assembly & kokkosAssembly() const
Get the const reference of the Kokkos assembly.
The Kokkos object that holds thread-private data in the parallel operations of any Kokkos object.
const bool _unique_node_execute
Flag for enable/disabling multiple execute calls on nodes that share block ids.
const bool _bnd
Flag whether this object is boundary-restricted.
NodalReducer(const NodalReducer &object)
Copy constructor for parallel dispatch.
NodalReducer(const MooseObject *object)
static InputParameters validParams()
KOKKOS_FUNCTION void operator()(ReducerLoop, const ThreadID tid, const Derived &reducer, Real *result) const
The parallel computation entry function called by Kokkos.
virtual ThreadID numReducerThreads() const override
Get the number of threads.
MOOSE_KOKKOS_INDEX_TYPE ThreadID