https://mooseframework.inl.gov
KokkosElementStatistics.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 "KokkosElementReporter.h"
13 
15 {
16 public:
18 
20 
21  template <typename Derived>
22  KOKKOS_FUNCTION void reduce(Datum & datum, Real * result) const;
23 
24  template <typename Derived>
25  KOKKOS_FUNCTION void join(Real * result, const Real * source) const;
26  template <typename Derived>
27  KOKKOS_FUNCTION void init(Real * result) const;
28 
29 protected:
30  virtual void initialize() override;
31  virtual void finalize() override;
32 
33 private:
34  const std::string _base_name;
39  unsigned int & _number_elements;
40 };
41 
42 template <typename Derived>
43 KOKKOS_FUNCTION void
44 KokkosElementStatistics::reduce(Datum & datum, Real * result) const
45 {
46  // Get value to to update statistics
47  auto [value, volume] = static_cast<const Derived *>(this)->computeValue(datum);
48 
49  if (result[0] < value)
50  result[0] = value;
51 
52  if (result[1] > value)
53  result[1] = value;
54 
55  result[2] += value * volume;
56 
57  // Update the total and the number to get the average when "finalizing"
58  result[3] += value;
59  result[4]++;
60 }
61 
62 template <typename Derived>
63 KOKKOS_FUNCTION void
64 KokkosElementStatistics::join(Real * result, const Real * source) const
65 {
66  result[0] = Kokkos::max(result[0], source[0]);
67  result[1] = Kokkos::min(result[1], source[1]);
68  result[2] += source[2];
69  result[3] += source[3];
70  result[4] += source[4];
71 }
72 
73 template <typename Derived>
74 KOKKOS_FUNCTION void
75 KokkosElementStatistics::init(Real * result) const
76 {
77  result[0] = Kokkos::Experimental::finite_min_v<Real>;
78  result[1] = Kokkos::Experimental::finite_max_v<Real>;
79  result[2] = 0;
80  result[3] = 0;
81  result[4] = 0;
82 }
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
KOKKOS_FUNCTION void reduce(Datum &datum, Real *result) const
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:131
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
KokkosElementStatistics(const InputParameters &parameters)
auto max(const L &left, const R &right)
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
virtual void initialize() override
Called before execute() is ever called so that data can be cleared.
Real volume(const MeshBase &mesh, unsigned int dim=libMesh::invalid_uint)
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void finalize() override
Finalize.
auto min(const L &left, const R &right)
KOKKOS_FUNCTION void join(Real *result, const Real *source) const