https://mooseframework.inl.gov
Loading...
Searching...
No Matches
SideValueSampler.C
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#include "SideValueSampler.h"
11
12// MOOSE includes
13#include "MooseVariableFE.h"
14
15#include "libmesh/quadrature.h"
16
18
21{
23 params += SamplerBase::validParams();
24 params.addClassDescription("Sample variable(s) along a sideset, internal or external.");
26 "variable", "The names of the variables that this VectorPostprocessor operates on");
27
28 return params;
29}
30
32 : SideVectorPostprocessor(parameters),
33 SamplerBase(parameters, this, _communicator),
34 _qp_sampling(true)
35{
36 std::vector<std::string> var_names(_coupled_moose_vars.size());
37 _values.resize(_coupled_moose_vars.size());
38
39 for (unsigned int i = 0; i < _coupled_moose_vars.size(); i++)
40 {
41 var_names[i] = _coupled_moose_vars[i]->name();
43 }
44
45 if (!_coupled_fv_moose_vars.empty())
46 {
47 const auto num_fv_vars = _coupled_fv_moose_vars.size();
48 if (num_fv_vars != _coupled_moose_vars.size())
50 "variable",
51 "This object cannot accept mixed FE and FV variables, please make "
52 "sure all the provided variables are either FE or FV by separating this vector "
53 "postprocessor "
54 "into two blocks, one for finite element and another for finite volume variables!");
55
56 _qp_sampling = false;
57 }
58
59 // Initialize the data structures in SamplerBase
61}
62
63void
68
69void
71{
72 if (_qp_sampling)
73 for (unsigned int _qp = 0; _qp < _qrule->n_points(); _qp++)
74 {
75 for (unsigned int i = 0; i < _coupled_moose_vars.size(); i++)
76 _values[i] = (dynamic_cast<MooseVariable *>(_coupled_moose_vars[i]))->sln()[_qp];
77
79 }
80 else
81 {
83
84 const auto state = determineState();
85
86 for (const auto & fi : _face_infos)
87 {
88 for (unsigned int i = 0; i < _coupled_fv_moose_vars.size(); i++)
89 {
90 mooseAssert(_coupled_fv_moose_vars[i]->hasFaceSide(*fi, true) ||
91 _coupled_fv_moose_vars[i]->hasFaceSide(*fi, false),
92 "Variable " + _coupled_fv_moose_vars[i]->name() +
93 " should be defined on one side of the face!");
94
95 const auto * elem =
96 _coupled_fv_moose_vars[i]->hasFaceSide(*fi, true) ? fi->elemPtr() : fi->neighborPtr();
97
98 const auto face_arg = Moose::FaceArg(
99 {fi, Moose::FV::LimiterType::CentralDifference, true, false, elem, nullptr});
100 _values[i] = MetaPhysicL::raw_value((*_coupled_fv_moose_vars[i])(face_arg, state));
101 }
102
103 SamplerBase::addSample(fi->faceCentroid(), _current_elem->id(), _values);
104 }
105 }
106}
107
108void
113
114void
116{
117 const auto & vpp = static_cast<const SideValueSampler &>(y);
118
120}
registerMooseObject("MooseApp", SideValueSampler)
std::vector< MooseVariableFieldBase * > _coupled_moose_vars
Vector of all coupled variables.
std::vector< MooseVariableField< Real > * > _coupled_fv_moose_vars
Vector of all finite volume coupled variables.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
This method adds a coupled variable name pair.
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump.
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
void paramError(const std::string &param, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition MooseBase.h:457
Base class for VectorPostprocessors that need to do "sampling" of values in the domain.
Definition SamplerBase.h:38
virtual void addSample(const Point &p, const Real &id, const std::vector< Real > &values)
Call this with the value of every variable at each point you want to sample at.
Definition SamplerBase.C:91
void setupVariables(const std::vector< std::string > &variable_names)
You MUST call this in the constructor of the child class and pass down the name of the variables.
Definition SamplerBase.C:69
virtual void initialize()
Initialize the datastructures.
virtual void threadJoin(const SamplerBase &y)
Join the values.
virtual void finalize()
Finalize the values.
void checkForStandardFieldVariableType(const MooseVariableFieldBase *const var_ptr, const std::string &var_param_name="variable") const
Checks whether the passed variable pointer corresponds to a regular single-valued field variable.
static InputParameters validParams()
Definition SamplerBase.C:24
const QBase *const & _qrule
const MooseArray< Point > & _q_point
const Elem *const & _current_elem
void getFaceInfos()
Computes the local FaceInfo(s) to use in functor arguments and interpolations.
std::vector< const FaceInfo * > _face_infos
Holds the FaceInfos to loop on to consider all active neighbors of an element on a given side.
virtual void threadJoin(const UserObject &y) override
Must override.
std::vector< Real > _values
So we don't have to create and destroy this vector over and over again.
virtual void finalize() override
Finalize.
static InputParameters validParams()
bool _qp_sampling
Whether to sample over side quadrature points or FaceInfos.
virtual void execute() override
Execute method.
virtual void initialize() override
Called before execute() is ever called so that data can be cleared.
SideValueSampler(const InputParameters &parameters)
static InputParameters validParams()
Moose::StateArg determineState() const
Create a functor state argument that corresponds to the implicit state of this object.
Base class for user-specific data.
Definition UserObject.h:20
auto raw_value(const Eigen::Map< T > &in)
A structure defining a "face" evaluation calling argument for Moose functors.