https://mooseframework.inl.gov
Loading...
Searching...
No Matches
KokkosNodalStatistics.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 "KokkosNodalReporter.h"
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 unsigned int & _number_nodes;
39};
40
41template <typename Derived>
42KOKKOS_FUNCTION void
43KokkosNodalStatistics::reduce(Datum & datum, Real * result) const
44{
45 // Get value to to update statistics
46 Real value = static_cast<const Derived *>(this)->computeValue(datum);
47
48 if (result[0] < value)
49 result[0] = value;
50
51 if (result[1] > value)
52 result[1] = value;
53
54 // Update the total and the number to get the average when "finalizing"
55 result[2] += value;
56 result[3]++;
57}
58
59template <typename Derived>
60KOKKOS_FUNCTION void
61KokkosNodalStatistics::join(Real * result, const Real * source) const
62{
63 result[0] = Kokkos::max(result[0], source[0]);
64 result[1] = Kokkos::min(result[1], source[1]);
65 result[2] += source[2];
66 result[3] += source[3];
67}
68
69template <typename Derived>
70KOKKOS_FUNCTION void
71KokkosNodalStatistics::init(Real * result) const
72{
73 result[0] = Kokkos::Experimental::finite_min_v<Real>;
74 result[1] = Kokkos::Experimental::finite_max_v<Real>;
75 result[2] = 0;
76 result[3] = 0;
77}
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
static InputParameters validParams()
virtual void finalize() override
Finalize.
KokkosNodalStatistics(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 init(Real *result) const
KOKKOS_FUNCTION void join(Real *result, const Real *source) const
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.