https://mooseframework.inl.gov
Loading...
Searching...
No Matches
SolutionAux.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 "MooseError.h"
11#include "SolutionAux.h"
13
15
18{
20 params.addClassDescription("Creates fields by using information from a SolutionUserObject.");
21 params.addRequiredParam<UserObjectName>("solution", "The name of the SolutionUserObject");
22 params.addParam<std::string>("from_variable",
23 "The name of the variable to extract from the file");
24
25 params.addParam<bool>(
26 "direct",
27 false,
28 "If true the meshes must be the same and then the values are simply copied over.");
29 params.addParam<Real>(
30 "scale_factor",
31 1.0,
32 "Scale factor (a) to be applied to the solution (x): ax+b, where b is the 'add_factor'");
33 params.addParam<Real>(
34 "add_factor",
35 0.0,
36 "Add this value (b) to the solution (x): ax+b, where a is the 'scale_factor'");
37 return params;
38}
39
41 : AuxKernel(parameters),
42 _solution_object(getUserObject<SolutionUserObjectBase>("solution")),
43 _direct(getParam<bool>("direct")),
44 _scale_factor(getParam<Real>("scale_factor")),
45 _add_factor(getParam<Real>("add_factor"))
46{
47}
48
49void
51{
53
54 // If 'from_variable' is supplied, use the value
55 if (isParamValid("from_variable"))
56 _var_name = getParam<std::string>("from_variable");
57
58 // If not, get the value from the SolutionUserObject
59 else
60 {
61 // Get all the variables from the SolutionUserObject
62 const std::vector<std::string> & vars = _solution_object.variableNames();
63
64 // If there are more than one, throw an error
65 if (vars.size() > 1)
66 mooseError("The SolutionUserObject contains multiple variables, please specify the desired "
67 "variables in the input file with 'from_variable' parameter.");
68
69 // Define the variable
70 _var_name = vars[0];
71 }
72}
73
74Real
76{
77 // The value to output
78 Real output;
79
80 // _direct=true, extract the values using the dof
81 if (_direct)
82 {
83 if (isNodal())
85
86 else
88 }
89
90 // _direct=false, extract the values using time and point
91 else
92 {
93 if (isNodal())
95
96 else
97 output = _solution_object.pointValue(_t, _current_elem->vertex_average(), _var_name);
98 }
99
100 // Apply factors and return the value
101 return _scale_factor * output + _add_factor;
102}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
char ** vars
registerMooseObject("MooseApp", SolutionAux)
virtual void initialSetup() override
Gets called at the beginning of the simulation before this object is asked to do its job.
bool isNodal() const
Nodal or elemental kernel?
Definition AuxKernel.h:43
const Elem *const & _current_elem
Current element (valid only for elemental kernels)
Definition AuxKernel.h:133
const Node *const & _current_node
Current node (valid only for nodal kernels)
Definition AuxKernel.h:143
static InputParameters validParams()
Definition AuxKernel.C:27
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.
void addRequiredParam(const std::string &name, const std::string &doc_string)
This method adds a parameter and documentation string to the InputParameters object that will be extr...
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.
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition MooseBase.h:199
AuxKernel for reading a solution from file.
Definition SolutionAux.h:23
virtual void initialSetup() override
Sets up the variable name for extraction from the SolutionUserObject.
Definition SolutionAux.C:50
static InputParameters validParams()
Definition SolutionAux.C:17
const Real _scale_factor
Multiplier for the solution, the a of ax+b.
Definition SolutionAux.h:53
const SolutionUserObjectBase & _solution_object
Reference to the SolutionUserObject storing the solution.
Definition SolutionAux.h:44
virtual Real computeValue() override
Computes a value for a node or element depending on the type of kernel, it also uses the 'direct' fla...
Definition SolutionAux.C:75
bool _direct
Flag for directly grabbing the data based on the dof.
Definition SolutionAux.h:50
std::string _var_name
The variable name of interest.
Definition SolutionAux.h:47
const Real _add_factor
Additional factor added to the solution, the b of ax+b.
Definition SolutionAux.h:56
SolutionAux(const InputParameters &parameters)
Definition SolutionAux.C:40
User object that reads an existing solution from an input file and uses it in the current simulation.
Real pointValue(Real t, const Point &p, const unsigned int local_var_index, const std::set< subdomain_id_type > *subdomain_ids=nullptr) const
Returns a value at a specific location and variable (see SolutionFunction)
const std::vector< std::string > & variableNames() const
Real directValue(const Node *node, const std::string &var_name) const
Return a value directly from a Node.