www.mooseframework.org
DumpObjectsProblem.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 "DumpObjectsProblem.h"
12 #include "AuxiliarySystem.h"
13 #include <sstream>
14 
15 #include "libmesh/string_to_enum.h"
16 
18 
20 
23 {
25  params.addClassDescription("Single purpose problem object that does not run the given input but "
26  "allows deconstructing actions into their series of underlying Moose "
27  "objects and variables.");
28  params.addRequiredParam<std::string>(
29  "dump_path", "Syntax path of the action of which to dump the generated syntax");
30  return params;
31 }
32 
34  : FEProblemBase(parameters), _nl_sys(std::make_shared<DumpObjectsNonlinearSystem>(*this, "nl0"))
35 {
36  _nl = _nl_sys;
37  _aux = std::make_shared<AuxiliarySystem>(*this, "aux0");
39 
40  // Create extra vectors and matrices if any
42 }
43 
44 void
45 DumpObjectsProblem::addVariable(const std::string & var_type,
46  const std::string & var_name,
47  InputParameters & params)
48 {
49  dumpObjectHelper("Variables", var_type, var_name, params);
50  FEProblemBase::addVariable(var_type, var_name, params);
51 }
52 
53 void
54 DumpObjectsProblem::addAuxVariable(const std::string & var_type,
55  const std::string & var_name,
56  InputParameters & params)
57 {
58  dumpObjectHelper("AuxVariables", var_type, var_name, params);
59  FEProblemBase::addAuxVariable(var_type, var_name, params);
60 }
61 
62 void
64  const std::string & name,
65  InputParameters & parameters)
66 {
67  dumpObjectHelper("Functions", type, name, parameters);
69 }
70 
71 void
72 DumpObjectsProblem::addKernel(const std::string & type,
73  const std::string & name,
74  InputParameters & parameters)
75 {
76  dumpObjectHelper("Kernels", type, name, parameters);
78 }
79 
80 void
82  const std::string & name,
83  InputParameters & parameters)
84 {
85  dumpObjectHelper("NodalKernel", type, name, parameters);
87 }
88 
89 void
91  const std::string & name,
92  InputParameters & parameters)
93 {
94  dumpObjectHelper("ScalarKernels", type, name, parameters);
96 }
97 
98 void
100  const std::string & name,
101  InputParameters & parameters)
102 {
105 }
106 
107 void
109  const std::string & name,
110  InputParameters & parameters)
111 {
112  dumpObjectHelper("Constraints", type, name, parameters);
114 }
115 
116 void
118  const std::string & name,
119  InputParameters & parameters)
120 {
121  dumpObjectHelper("AuxKernels", type, name, parameters);
123 }
124 
125 void
127  const std::string & name,
128  InputParameters & parameters)
129 {
130  dumpObjectHelper("AuxScalarKernels", type, name, parameters);
132 }
133 
134 void
136  const std::string & name,
137  InputParameters & parameters)
138 {
139  dumpObjectHelper("DiracKernels", type, name, parameters);
141 }
142 
143 void
145  const std::string & name,
146  InputParameters & parameters)
147 {
148  dumpObjectHelper("DGKernels", type, name, parameters);
150 }
151 
152 void
154  const std::string & name,
155  InputParameters & parameters)
156 {
157  dumpObjectHelper("InterfaceKernels", type, name, parameters);
159 }
160 
161 void
163  const std::string & name,
164  InputParameters & parameters)
165 {
168 }
169 
170 void
172  const std::string & name,
173  InputParameters & parameters)
174 {
175  dumpObjectHelper("Materials", type, name, parameters);
177 }
178 
179 std::string
181  const InputParameters & parameters)
182 {
183  auto factory_params = stringifyParameters(_factory.getValidParams(type));
184  auto specified_params = stringifyParameters(parameters);
185 
186  std::string param_text;
187  for (auto & value_pair : specified_params)
188  {
189  // parameter name
190  const auto & param_name = value_pair.first;
191  const auto & param_value = value_pair.second;
192 
193  auto factory_it = factory_params.find(param_name);
194  if (factory_it == factory_params.end() || factory_it->second != param_value)
195  param_text += " " + param_name + " = " + param_value + '\n';
196  }
197 
198  return param_text;
199 }
200 
201 void
203  const std::string & type,
204  const std::string & name,
205  const InputParameters & parameters)
206 {
207  auto path = _app.actionWarehouse().getCurrentActionName();
208  auto param_text = deduceNecessaryParameters(type, parameters);
209 
210  // clang-format off
211  _generated_syntax[path][system] +=
212  " [./" + name + "]\n"
213  + " type = " + type + '\n'
214  + param_text
215  + " [../]\n";
216  // clang-format on
217 }
218 
219 void
221  const std::string & var_name,
222  FEFamily family,
223  Order order,
224  Real scale_factor,
225  const std::set<SubdomainID> * const active_subdomains)
226 {
227  auto path = _app.actionWarehouse().getCurrentActionName();
228  std::string param_text;
229 
230  if (active_subdomains)
231  {
232  std::string blocks;
233  for (auto & subdomain_id : *active_subdomains)
234  {
235  auto subdomain_name = _mesh.getMesh().subdomain_name(subdomain_id);
236  if (subdomain_name == "")
237  subdomain_name = std::to_string(subdomain_id);
238 
239  if (!blocks.empty())
240  blocks += ' ';
241 
242  blocks += subdomain_name;
243  }
244 
245  if (active_subdomains->size() > 1)
246  blocks = "'" + blocks + "'";
247 
248  param_text += " blocks = " + blocks + '\n';
249  }
250 
251  if (family != LAGRANGE)
252  param_text += " family = " + libMesh::Utility::enum_to_string<FEFamily>(family) + '\n';
253  if (order != FIRST)
254  param_text += " order = " + libMesh::Utility::enum_to_string<Order>(order) + '\n';
255  if (scale_factor != 1.0)
256  param_text += " scale = " + std::to_string(scale_factor);
257 
258  // clang-format off
259  _generated_syntax[path][system] +=
260  " [./" + var_name + "]\n"
261  + param_text
262  + " [../]\n";
263  // clang-format on
264 }
265 
266 void
268 {
269  dumpGeneratedSyntax(getParam<std::string>("dump_path"));
270 }
271 
272 void
274 {
275  auto pathit = _generated_syntax.find(path);
276  if (pathit == _generated_syntax.end())
277  return;
278 
279  for (const auto & system_pair : pathit->second)
280  Moose::out << '[' << system_pair.first << "]\n" << system_pair.second << "[]\n\n";
281 }
282 
283 std::map<std::string, std::string>
285 {
286  std::map<std::string, std::string> parameter_map;
287 
288  std::string syntax;
289  if (parameters.isParamValid("parser_syntax"))
290  syntax = parameters.get<std::string>("parser_syntax");
291 
292  for (auto & value_pair : parameters)
293  {
294  // parameter name
295  const auto & param_name = value_pair.first;
296 
297  if (!parameters.isPrivate(param_name) && parameters.isParamValid(param_name))
298  {
299  if (param_name == "control_tags")
300  {
301  // deal with the control tags. The current parser_syntax is automatically added to this. So
302  // we can remove the parameter if that's all there is in it
303  }
304  else
305  {
306  // special treatment for some types
307  auto param_bool = dynamic_cast<InputParameters::Parameter<bool> *>(value_pair.second);
308 
309  // parameter value
310  std::string param_value;
311  if (param_bool)
312  param_value = param_bool->get() ? "true" : "false";
313  else
314  {
315  std::stringstream ss;
316  value_pair.second->print(ss);
317  param_value = ss.str();
318  }
319 
320  // delete trailing space
321  if (param_value.back() == ' ')
322  param_value.pop_back();
323 
324  // add quotes if the parameter contains spaces
325  if (param_value.find_first_of(" ") != std::string::npos)
326  param_value = "'" + param_value + "'";
327 
328  parameter_map[param_name] = param_value;
329  }
330  }
331  }
332 
333  return parameter_map;
334 }
defineLegacyParams
defineLegacyParams(DumpObjectsProblem)
FEProblemBase::addVariable
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding a non-linear variable.
Definition: FEProblemBase.C:2013
DumpObjectsProblem::_nl_sys
std::shared_ptr< DumpObjectsNonlinearSystem > _nl_sys
Definition: DumpObjectsProblem.h:121
DumpObjectsProblem::addAuxVariable
void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params) override
Canonical method for adding an auxiliary variable.
Definition: DumpObjectsProblem.C:54
DumpObjectsProblem::addAuxKernel
void addAuxKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:117
FEProblemBase::addAuxScalarKernel
virtual void addAuxScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2444
Factory::getValidParams
InputParameters getValidParams(const std::string &name)
Get valid parameters for the object.
Definition: Factory.C:67
type
MatType type
Definition: PetscDMMoose.C:1477
DumpObjectsProblem.h
DumpObjectsProblem::dumpObjectHelper
void dumpObjectHelper(const std::string &system, const std::string &type, const std::string &name, const InputParameters &parameters)
Definition: DumpObjectsProblem.C:202
DumpObjectsProblem::addAuxScalarKernel
void addAuxScalarKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:126
DumpObjectsProblem::validParams
static InputParameters validParams()
Definition: DumpObjectsProblem.C:22
FEProblemBase::_nl
std::shared_ptr< NonlinearSystemBase > _nl
Definition: FEProblemBase.h:1775
DumpObjectsProblem::_generated_syntax
std::map< std::string, std::map< std::string, std::string > > _generated_syntax
store input syntax to build objects generated by a specific action
Definition: DumpObjectsProblem.h:119
AuxiliarySystem.h
DumpObjectsProblem::deduceNecessaryParameters
std::string deduceNecessaryParameters(const std::string &type, const InputParameters &parameters)
build a text snippet of the minimal set of parameters that need to be specified
Definition: DumpObjectsProblem.C:180
FEProblemBase::addMaterial
virtual void addMaterial(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2750
MooseObject::type
const std::string & type() const
Get the type of this object.
Definition: MooseObject.h:63
FEProblemBase::validParams
static InputParameters validParams()
Definition: FEProblemBase.C:119
FEProblemBase::addFunction
virtual void addFunction(std::string type, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:1860
FEProblemBase::addNodalKernel
virtual void addNodalKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2172
MooseObject::parameters
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseObject.h:76
DumpObjectsProblem::dumpVariableHelper
void dumpVariableHelper(const std::string &system, const std::string &var_name, FEFamily family, Order order, Real scale_factor, const std::set< SubdomainID > *const active_subdomains)
Definition: DumpObjectsProblem.C:220
FEProblemBase::newAssemblyArray
virtual void newAssemblyArray(NonlinearSystemBase &nl)
Definition: FEProblemBase.C:417
DumpObjectsProblem::addInitialCondition
void addInitialCondition(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:162
DumpObjectsNonlinearSystem
Nonlinear system for dumping objects.
Definition: DumpObjectsNonlinearSystem.h:24
registerMooseObject
registerMooseObject("MooseApp", DumpObjectsProblem)
DumpObjectsProblem
Specialization of SubProblem for dumping generated objects as input file syntax.
Definition: DumpObjectsProblem.h:23
DumpObjectsNonlinearSystem.h
FEProblemBase::addDGKernel
virtual void addDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2505
DumpObjectsProblem::stringifyParameters
std::map< std::string, std::string > stringifyParameters(const InputParameters &parameters)
create a string map form parameter names to stringified parameter values
Definition: DumpObjectsProblem.C:284
DumpObjectsProblem::addDGKernel
void addDGKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:144
InputParameters
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Definition: InputParameters.h:53
FEProblemBase::addAuxKernel
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2409
DumpObjectsProblem::addMaterial
void addMaterial(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:171
FEProblemBase::addInitialCondition
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2571
DumpObjectsProblem::addFunction
void addFunction(std::string type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:63
DumpObjectsProblem::addKernel
void addKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:72
FEProblemBase::addConstraint
virtual void addConstraint(const std::string &c_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2263
InputParameters::isPrivate
bool isPrivate(const std::string &name) const
Returns a Boolean indicating whether the specified parameter is private or not.
Definition: InputParameters.C:291
MooseMesh::getMesh
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition: MooseMesh.C:2599
InputParameters::isParamValid
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another,...
Definition: InputParameters.C:257
InputParameters::addClassDescription
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.
Definition: InputParameters.C:70
FEProblemBase::addKernel
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2129
FEProblemBase::_mesh
MooseMesh & _mesh
Definition: FEProblemBase.h:1757
DumpObjectsProblem::addBoundaryCondition
void addBoundaryCondition(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:99
ActionWarehouse::getCurrentActionName
std::string getCurrentActionName() const
Definition: ActionWarehouse.C:419
DumpObjectsProblem::dumpGeneratedSyntax
void dumpGeneratedSyntax(const std::string path)
output input blocks for a given action path
Definition: DumpObjectsProblem.C:273
DumpObjectsProblem::addInterfaceKernel
void addInterfaceKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:153
MooseApp::actionWarehouse
ActionWarehouse & actionWarehouse()
Return a writable reference to the ActionWarehouse associated with this app.
Definition: MooseApp.h:153
DumpObjectsProblem::addVariable
void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params) override
Canonical method for adding a non-linear variable.
Definition: DumpObjectsProblem.C:45
FEProblemBase::addInterfaceKernel
virtual void addInterfaceKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2539
DumpObjectsProblem::DumpObjectsProblem
DumpObjectsProblem(const InputParameters &parameters)
Definition: DumpObjectsProblem.C:33
FEProblemBase::addScalarKernel
virtual void addScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2201
std
Definition: TheWarehouse.h:80
DumpObjectsProblem::addNodalKernel
void addNodalKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:81
DumpObjectsProblem::addScalarKernel
void addScalarKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:90
FEProblemBase::addBoundaryCondition
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2230
SubProblem::_factory
Factory & _factory
The Factory for building objects.
Definition: SubProblem.h:684
system
nl system()
Definition: PetscDMMoose.C:1287
FEProblemBase::createTagVectors
void createTagVectors()
Create extra tagged vectors and matrices.
Definition: FEProblemBase.C:397
FEProblemBase::_aux
std::shared_ptr< AuxiliarySystem > _aux
Definition: FEProblemBase.h:1776
DumpObjectsProblem::addConstraint
void addConstraint(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:108
FEProblemBase
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
Definition: FEProblemBase.h:139
InputParameters::addRequiredParam
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...
Definition: InputParameters.h:1176
MooseObject::_app
MooseApp & _app
The MooseApp this object is associated with.
Definition: MooseObject.h:172
DumpObjectsProblem::solve
virtual void solve() override
output data in solve
Definition: DumpObjectsProblem.C:267
MooseObject::name
virtual const std::string & name() const
Get the name of the object.
Definition: MooseObject.h:70
FEProblemBase::addDiracKernel
virtual void addDiracKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Definition: FEProblemBase.C:2473
DumpObjectsProblem::addDiracKernel
void addDiracKernel(const std::string &type, const std::string &name, InputParameters &parameters) override
Definition: DumpObjectsProblem.C:135
FEProblemBase::addAuxVariable
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding an auxiliary variable.
Definition: FEProblemBase.C:2296