https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
13
15{
16public:
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
29protected:
30 virtual void initialize() override;
31 virtual void finalize() override;
32
33private:
34 const std::string _base_name;
35 Real & _max;
36 Real & _min;
37 Real & _average;
38 Real & _integral;
39 unsigned int & _number_elements;
40};
41
42template <typename Derived>
43KOKKOS_FUNCTION void
44KokkosElementStatistics::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
62template <typename Derived>
63KOKKOS_FUNCTION void
64KokkosElementStatistics::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
73template <typename Derived>
74KOKKOS_FUNCTION void
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 main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
KOKKOS_FUNCTION void init(Real *result) const
virtual void finalize() override
Finalize.
KokkosElementStatistics(const InputParameters &parameters)
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.
KOKKOS_FUNCTION void join(Real *result, const Real *source) const
static InputParameters validParams()
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
The Kokkos object that holds thread-private data in the parallel operations of any Kokkos object.