https://mooseframework.inl.gov
UserObjectInterface.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 "UserObjectInterface.h"
11 
12 // MOOSE includes
13 #include "FEProblemBase.h"
16 #include "MooseObject.h"
17 
20 {
21  return emptyInputParameters();
22 }
23 
25  : _uoi_moose_object(*moose_object),
26  _uoi_feproblem(*_uoi_moose_object.parameters().getCheckedPointerParam<FEProblemBase *>(
27  "_fe_problem_base")),
28  _uoi_tid(_uoi_moose_object.parameters().have_parameter<THREAD_ID>("_tid")
29  ? _uoi_moose_object.parameters().get<THREAD_ID>("_tid")
30  : 0)
31 {
32 }
33 
34 UserObjectName
35 UserObjectInterface::getUserObjectName(const std::string & param_name) const
36 {
37  const auto & params = _uoi_moose_object.parameters();
38 
39  if (!params.isParamValid(param_name))
40  _uoi_moose_object.mooseError("Failed to get a parameter with the name \"",
41  param_name,
42  "\" when getting a UserObjectName.",
43  "\n\nKnown parameters:\n",
45 
46  // Other interfaces will use this interface (PostprocessorInterface, VectorPostprocessorInterface)
47  // to grab UOs with a specialized name, so we need to check them all
48  UserObjectName name;
49  if (params.isType<UserObjectName>(param_name))
50  name = params.get<UserObjectName>(param_name);
51  else if (params.isType<PostprocessorName>(param_name))
52  name = params.get<PostprocessorName>(param_name);
53  else if (params.isType<VectorPostprocessorName>(param_name))
54  name = params.get<VectorPostprocessorName>(param_name);
55  else if (params.isType<std::string>(param_name))
56  name = params.get<std::string>(param_name);
57  else
59  param_name,
60  "Parameter of type \"",
61  params.type(param_name),
62  "\" is not an expected type for getting the name of a UserObject.");
63 
64  return name;
65 }
66 
67 bool
68 UserObjectInterface::hasUserObject(const std::string & param_name) const
69 {
70  return hasUserObjectByName(getUserObjectName(param_name));
71 }
72 
73 bool
74 UserObjectInterface::hasUserObjectByName(const UserObjectName & object_name) const
75 {
76  return _uoi_feproblem.hasUserObject(object_name);
77 }
78 
79 const UserObject &
80 UserObjectInterface::getUserObjectFromFEProblem(const UserObjectName & object_name) const
81 {
82  return _uoi_feproblem.getUserObjectBase(object_name);
83 }
84 
85 const UserObject &
86 UserObjectInterface::getUserObjectBase(const std::string & param_name,
87  const bool is_dependency) const
88 {
89  const auto object_name = getUserObjectName(param_name);
90  if (!hasUserObjectByName(object_name))
92  param_name, "The requested UserObject with the name \"", object_name, "\" was not found.");
93 
94  return getUserObjectBaseByName(object_name, is_dependency);
95 }
96 
97 const UserObject &
98 UserObjectInterface::getUserObjectBaseByName(const UserObjectName & object_name,
99  const bool is_dependency) const
100 {
101  if (!hasUserObjectByName(object_name))
103  "The requested UserObject with the name \"", object_name, "\" was not found.");
104 
105  const auto & uo_base_tid0 = _uoi_feproblem.getUserObjectBase(object_name, /* tid = */ 0);
106  if (is_dependency)
107  addUserObjectDependencyHelper(uo_base_tid0);
108 
109  const THREAD_ID tid = uo_base_tid0.needThreadedCopy() ? _uoi_tid : 0;
110  return _uoi_feproblem.getUserObjectBase(object_name, tid);
111 }
112 
113 const std::string &
115 {
116  return uo.type();
117 }
118 
119 const std::string &
121 {
122  return uo.name();
123 }
124 
125 void
126 UserObjectInterface::mooseObjectError(const std::string & param_name, std::stringstream & oss) const
127 {
128  if (_uoi_moose_object.parameters().isParamValid(param_name))
129  _uoi_moose_object.paramError(param_name, oss.str());
130  else
131  _uoi_moose_object.mooseError(oss.str());
132 }
std::string name(const ElemQuality q)
UserObjectName getUserObjectName(const std::string &param_name) const
const MooseObject & _uoi_moose_object
Moose object using the interface.
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:1155
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
bool hasUserObject(const std::string &name) const
Check if there if a user object of given name.
static InputParameters validParams()
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual const std::string & name() const
Get the name of the class.
Definition: MooseBase.h:57
InputParameters emptyInputParameters()
const FEProblemBase & _uoi_feproblem
Reference to the FEProblemBase instance.
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
const std::string & type() const
Get the type of this class.
Definition: MooseBase.h:51
const THREAD_ID _uoi_tid
Thread ID.
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 ...
void mooseObjectError(const std::string &param_name, std::stringstream &oss) const
emit an error for the given parameter
const UserObject & getUserObjectBase(const std::string &param_name, bool is_dependency=true) const
Get an user object with a given parameter param_name.
const std::string & userObjectType(const UserObject &uo) const
Gets a UserObject&#39;s type; avoids including UserObject.h in the UserObjectInterface.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
const InputParameters & parameters() const
Get the parameters of the object.
const UserObject & getUserObjectFromFEProblem(const UserObjectName &object_name) const
Go directly to the FEProblem for the requested UserObject.
const UserObject & getUserObjectBase(const std::string &name, const THREAD_ID tid=0) const
Get the user object by its name.
const UserObject & getUserObjectBaseByName(const UserObjectName &object_name, bool is_dependency=true) const
Get an user object with the name object_name.
virtual void addUserObjectDependencyHelper(const UserObject &) const
Helper for deriving classes to override to add dependencies when a UserObject is requested.
bool hasUserObjectByName(const UserObjectName &object_name) const
bool hasUserObject(const std::string &param_name) const
Base class for user-specific data.
Definition: UserObject.h:40
const std::string & userObjectName(const UserObject &uo) const
Gets a UserObject&#39;s name; avoids including UserObject.h in the UserObjectInterface.
unsigned int THREAD_ID
Definition: MooseTypes.h:209
UserObjectInterface(const MooseObject *moose_object)
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another, i.e.