https://mooseframework.inl.gov
KokkosNodalSum.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 
13 
15 {
16 public:
18 
20 
21  virtual void initialize() override;
22  virtual void finalize() override;
23  virtual Real getValue() const override;
24 
25  template <typename Derived>
26  KOKKOS_FUNCTION void reduce(Datum & datum, Real * result) const;
27 
28  KOKKOS_FUNCTION Real computeValue(const unsigned int qp, Datum & datum) const
29  {
30  return _u(datum, qp);
31  }
32 
33  template <typename Derived>
34  KOKKOS_FUNCTION void join(Real * result, const Real * source) const;
35  template <typename Derived>
36  KOKKOS_FUNCTION void init(Real * result) const;
37 };
38 
39 template <typename Derived>
40 KOKKOS_FUNCTION void
41 KokkosNodalSum::reduce(Datum & datum, Real * result) const
42 {
43  if (datum.isNodalDefined(_u.variable()))
44  result[0] += static_cast<const Derived *>(this)->computeValue(0, datum);
45 }
46 
47 template <typename Derived>
48 KOKKOS_FUNCTION void
49 KokkosNodalSum::join(Real * result, const Real * source) const
50 {
51  result[0] += source[0];
52 }
53 
54 template <typename Derived>
55 KOKKOS_FUNCTION void
56 KokkosNodalSum::init(Real * result) const
57 {
58  result[0] = 0;
59 }
The Kokkos object that holds thread-private data in the parallel operations of any Kokkos object...
Definition: KokkosDatum.h:23
KOKKOS_FUNCTION void init(Real *result) const
KokkosNodalSum(const InputParameters &parameters)
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:131
KOKKOS_FUNCTION bool isNodalDefined(const Variable &var) const
Get whether the a variable is defined on the current node.
Definition: KokkosDatum.h:291
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
static InputParameters validParams()
virtual void finalize() override
We provide default finalize() as getValue() has been abused to perform the final aggregation for a lo...
const Moose::Kokkos::VariableValue _u
KOKKOS_FUNCTION void join(Real *result, const Real *source) const
KOKKOS_FUNCTION const Variable & variable() const
Get the Kokkos variable.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
KOKKOS_FUNCTION Real computeValue(const unsigned int qp, Datum &datum) const
KOKKOS_FUNCTION void reduce(Datum &datum, Real *result) const
virtual void initialize() override
Called before execute() is ever called so that data can be cleared.
virtual Real getValue() const override
This will get called to actually grab the final value the postprocessor has calculated.