https://mooseframework.inl.gov
LayeredAverageBase.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 "LayeredIntegralBase.h"
13 
17 template <typename BaseType>
18 class LayeredAverageBase : public LayeredIntegralBase<BaseType>
19 {
20 public:
22 
23  LayeredAverageBase(const InputParameters & parameters);
24 
25  virtual void initialize() override;
26  virtual void execute() override;
27  virtual void finalize() override;
28  virtual void threadJoin(const UserObject & y) override;
29 
33 
34 protected:
39  virtual Real volume() const = 0;
40 
42  std::vector<Real> _layer_volumes;
43 
48 };
49 
50 template <typename BaseType>
53 {
55  return params;
56 }
57 
58 template <typename BaseType>
60  : LayeredIntegralBase<BaseType>(parameters)
61 {
63 }
64 
65 template <typename BaseType>
66 void
68 {
70 
71  for (auto & vol : _layer_volumes)
72  vol = 0.0;
73 }
74 
75 template <typename BaseType>
76 void
78 {
80 
81  const auto layer = getLayer(_current_elem->vertex_average());
82  _layer_volumes[layer] += volume();
83 }
84 
85 template <typename BaseType>
86 void
88 {
90 
91  gatherSum(_layer_volumes);
92 
93  // Compute the average for each layer
94  for (const auto i : index_range(_layer_volumes))
95  if (layerHasValue(i))
96  setLayerValue(i, getLayerValue(i) / _layer_volumes[i]);
97 }
98 
99 template <typename BaseType>
100 void
102 {
104  const auto & lsa = static_cast<const LayeredAverageBase<BaseType> &>(y);
105  for (const auto i : index_range(_layer_volumes))
106  if (lsa.layerHasValue(i))
107  _layer_volumes[i] += lsa._layer_volumes[i];
108 }
virtual Real volume() const =0
virtual void finalize() override
virtual void finalize() override
virtual void threadJoin(const UserObject &y) override
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
Base class for computing layered side integrals.
virtual void initialize() override
unsigned int _num_layers
Number of layers to split the mesh into.
Definition: LayeredBase.h:118
Real volume(const MeshBase &mesh, unsigned int dim=libMesh::invalid_uint)
Base class for computing layered averages.
LayeredAverageBase(const InputParameters &parameters)
virtual void execute() override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static InputParameters validParams()
virtual void threadJoin(const UserObject &y) override
virtual void initialize() override
std::vector< Real > _layer_volumes
Value of the volume (area for side integrals) for each layer.
auto index_range(const T &sizable)
Base class for user-specific data.
Definition: UserObject.h:40
static InputParameters validParams()
virtual void execute() override