https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
17template <typename BaseType>
19{
20public:
22
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
30 using LayeredIntegralBase<BaseType>::gatherSum;
31 using LayeredIntegralBase<BaseType>::getLayer;
33
34protected:
39 virtual Real volume() const = 0;
40
42 std::vector<Real> _layer_volumes;
43
44 using LayeredIntegralBase<BaseType>::_current_elem;
48};
49
50template <typename BaseType>
57
58template <typename BaseType>
64
65template <typename BaseType>
66void
68{
70
71 for (auto & vol : _layer_volumes)
72 vol = 0.0;
73}
74
75template <typename BaseType>
76void
78{
80
81 const auto layer = getLayer(_current_elem->vertex_average());
82 _layer_volumes[layer] += volume();
83}
84
85template <typename BaseType>
86void
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
99template <typename BaseType>
100void
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}
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Base class for computing layered averages.
std::vector< Real > _layer_volumes
Value of the volume (area for side integrals) for each layer.
virtual Real volume() const =0
virtual void initialize() override
virtual void execute() override
static InputParameters validParams()
LayeredAverageBase(const InputParameters &parameters)
virtual void threadJoin(const UserObject &y) override
virtual void finalize() override
unsigned int _num_layers
Number of layers to split the mesh into.
bool layerHasValue(unsigned int layer) const
Whether or not a layer has a value.
Definition LayeredBase.h:90
virtual Real getLayerValue(unsigned int layer) const
Get the value for a given layer.
virtual unsigned int getLayer(const Point &p) const
Helper function to return the layer the point lies in.
void setLayerValue(unsigned int layer, Real value)
Set the value for a particular layer.
Base class for computing layered side integrals.
virtual void initialize() override
virtual void threadJoin(const UserObject &y) override
static InputParameters validParams()
virtual void finalize() override
virtual void execute() override
Base class for user-specific data.
Definition UserObject.h:20