www.mooseframework.org
NearestNodeValueAux.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 "NearestNodeValueAux.h"
11 
12 #include "SystemBase.h"
13 #include "NearestNodeLocator.h"
14 
16 
19 {
21  params.addClassDescription("Retrieves a field value from the closest node on the paired boundary "
22  "and stores it on this boundary or block.");
23  params.set<bool>("_dual_restrictable") = true;
24  params.addRequiredParam<BoundaryName>("paired_boundary", "The boundary to get the value from.");
25  params.addRequiredCoupledVar("paired_variable", "The variable to get the value of.");
26  params.set<bool>("use_displaced_mesh") = true;
27  return params;
28 }
29 
31  : AuxKernel(parameters),
32  _nearest_node(
33  getNearestNodeLocator(parameters.get<BoundaryName>("paired_boundary"), boundaryNames()[0])),
34  _serialized_solution(_nl_sys.currentSolution()),
35  _paired_variable(coupled("paired_variable"))
36 {
37  if (boundaryNames().size() > 1)
38  mooseError("NearestNodeValueAux can only be used with one boundary at a time!");
39 }
40 
41 Real
43 {
44  // Assumes the variable you are coupling to is from the nonlinear system for now.
45  const Node * nearest = _nearest_node.nearestNode(_current_node->id());
46  mooseAssert(nearest != NULL, "I do not have the nearest node for you");
47  dof_id_type dof_number = nearest->dof_number(_nl_sys.number(), _paired_variable, 0);
48 
49  return (*_serialized_solution)(dof_number);
50 }
static InputParameters validParams()
const NumericVector< Number > *const & _serialized_solution
registerMooseObject("MooseApp", NearestNodeValueAux)
const Node *const & _current_node
Current node (valid only for nodal kernels)
Definition: AuxKernel.h:214
T * get(const std::unique_ptr< T > &u)
The MooseUtils::get() specializations are used to support making forwards-compatible code changes fro...
Definition: MooseUtils.h:1147
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
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...
SystemBase & _nl_sys
Definition: AuxKernel.h:167
NearestNodeLocator & _nearest_node
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1125
virtual Real computeValue() override
Compute and return the value of the aux variable.
Finds the closest node on a paired boundary to the current node or element and stores a corresponding...
NearestNodeValueAux(const InputParameters &parameters)
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
This method adds a coupled variable name pair.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Node * nearestNode(dof_id_type node_id)
Valid to call this after findNodes() has been called to get a pointer to the nearest node...
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
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...
static InputParameters validParams()
Definition: AuxKernel.C:27
unsigned int _paired_variable
const std::vector< BoundaryName > & boundaryNames() const
Return the boundary names for this object.
uint8_t dof_id_type