https://mooseframework.inl.gov
Builder.h
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 #pragma once
11 
12 // MOOSE includes
13 #include "ConsoleStreamInterface.h"
14 #include "MooseTypes.h"
15 #include "InputParameters.h"
16 
17 #include "hit/hit.h"
18 
19 #include <vector>
20 #include <string>
21 #include <iomanip>
22 #include <optional>
23 
24 // Forward declarations
25 class ActionWarehouse;
26 class SyntaxTree;
27 class MooseApp;
28 class Factory;
29 class ActionFactory;
30 class GlobalParamsAction;
31 class JsonSyntaxTree;
32 class Parser;
33 class Syntax;
34 
35 namespace Moose
36 {
37 class Builder;
38 
39 class UnusedWalker : public hit::Walker
40 {
41 public:
42  UnusedWalker(std::set<std::string> used, Builder & p) : _used(used), _builder(p) {}
43 
44  void walk(const std::string & fullpath, const std::string & nodename, hit::Node * n) override;
45 
46  std::vector<hit::ErrorMessage> errors;
47 
48 private:
49  std::set<std::string> _used;
51 };
52 
56 class Builder : public ConsoleStreamInterface, public hit::Walker
57 {
58 public:
60  {
63  };
64 
65  Builder(MooseApp & app, ActionWarehouse & action_wh, Parser & parser);
66  virtual ~Builder();
67 
72 
76  std::string getPrimaryFileName(bool stripLeadingPath = true) const;
77 
82  void build();
83 
89  void extractParams(const std::string & prefix, InputParameters & p);
90 
94  void initSyntaxFormatter(SyntaxFormatterType type, bool dump_mode);
95 
99  void buildFullTree(const std::string & search_string);
100 
104  void buildJsonSyntaxTree(JsonSyntaxTree & tree) const;
105 
106  void walk(const std::string & fullpath, const std::string & nodepath, hit::Node * n);
107 
108  void errorCheck(const libMesh::Parallel::Communicator & comm, bool warn_unused, bool err_unused);
109 
110  std::vector<std::string> listValidParams(std::string & section_name);
111 
112 private:
117  template <typename T, typename Base>
119  void setScalarParameter(const std::string & full_name,
120  const std::string & short_name,
121  InputParameters::Parameter<T> * param,
122  bool in_global,
123  GlobalParamsAction * global_block);
124 
125  template <typename T, typename UP_T, typename Base>
126  void setScalarValueTypeParameter(const std::string & full_name,
127  const std::string & short_name,
128  InputParameters::Parameter<T> * param,
129  bool in_global,
130  GlobalParamsAction * global_block,
131  const hit::Node & node);
132 
134  template <typename T, typename Base>
135  void setVectorParameter(const std::string & full_name,
136  const std::string & short_name,
137  InputParameters::Parameter<std::vector<T>> * param,
138  bool in_global,
139  GlobalParamsAction * global_block);
140 
142  template <typename KeyType, typename MappedType>
143  void setMapParameter(const std::string & full_name,
144  const std::string & short_name,
145  InputParameters::Parameter<std::map<KeyType, MappedType>> * param,
146  bool in_global,
147  GlobalParamsAction * global_block);
148 
153  template <typename T>
154  void setDoubleIndexParameter(const std::string & full_name,
155  const std::string & short_name,
156  InputParameters::Parameter<std::vector<std::vector<T>>> * param,
157  bool in_global,
158  GlobalParamsAction * global_block);
159 
164  template <typename T>
166  const std::string & full_name,
167  const std::string & short_name,
168  InputParameters::Parameter<std::vector<std::vector<std::vector<T>>>> * param,
169  bool in_global,
170  GlobalParamsAction * global_block);
171 
176  template <typename T>
177  void setScalarComponentParameter(const std::string & full_name,
178  const std::string & short_name,
179  InputParameters::Parameter<T> * param,
180  bool in_global,
181  GlobalParamsAction * global_block);
182 
187  template <typename T>
188  void setVectorComponentParameter(const std::string & full_name,
189  const std::string & short_name,
190  InputParameters::Parameter<std::vector<T>> * param,
191  bool in_global,
192  GlobalParamsAction * global_block);
193 
205  template <typename T>
206  void
207  setVectorVectorComponentParameter(const std::string & full_name,
208  const std::string & short_name,
209  InputParameters::Parameter<std::vector<std::vector<T>>> * param,
210  bool in_global,
211  GlobalParamsAction * global_block);
212 
226  hit::Node & _root;
227 
229  std::unique_ptr<SyntaxTree> _syntax_formatter;
230 
232  std::set<std::string> _extracted_vars;
233 
235  std::vector<std::string> _secs_need_first;
236 
239 
241  std::vector<hit::ErrorMessage> _errors;
242 
244  std::unordered_map<std::string, std::string> _deprecated_params;
245 
246  void walkRaw(std::string fullpath, std::string nodepath, hit::Node * n);
247 };
248 }
void build()
Parse an input file (or text string if provided) consisting of hit syntax and setup objects in the MO...
Definition: Builder.C:319
ActionFactory & _action_factory
The Factory that builds actions.
Definition: Builder.h:220
MooseApp & _app
The MooseApp this Parser is part of.
Definition: Builder.h:214
void walk(const std::string &fullpath, const std::string &nodename, hit::Node *n) override
Definition: Builder.C:179
void walkRaw(std::string fullpath, std::string nodepath, hit::Node *n)
Definition: Builder.C:206
Parser & _parser
The front parser.
Definition: Builder.h:224
void setTripleIndexParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< std::vector< std::vector< T >>>> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any triple indexed type parameter read from the input file or command lin...
Definition: Builder.C:1558
void setScalarValueTypeParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< T > *param, bool in_global, GlobalParamsAction *global_block, const hit::Node &node)
Definition: Builder.C:1368
void buildFullTree(const std::string &search_string)
Use MOOSE Factories to construct a full parse tree for documentation or echoing input.
Definition: Builder.C:597
Generic factory class for build all sorts of objects.
Definition: Factory.h:28
std::vector< std::string > _secs_need_first
The sections that we need to execute first (read during the final walk)
Definition: Builder.h:235
void setVectorVectorComponentParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< std::vector< T >>> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting vector of several multivalue "scalar" type parameter read from the input ...
Definition: Builder.C:1723
InputParameters * _current_params
The current parameter object for which parameters are being extracted.
Definition: Builder.h:238
Builder(MooseApp &app, ActionWarehouse &action_wh, Parser &parser)
Definition: Builder.C:124
void setScalarComponentParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< T > *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any multivalue "scalar" type parameter read from the input file or comman...
Definition: Builder.C:1633
Builder & _builder
Definition: Builder.h:50
static InputParameters validParams()
Parameters that are processed directly by the Parser and are valid anywhere in the input...
Definition: Builder.C:141
Base class for MOOSE-based applications.
Definition: MooseApp.h:96
void setMapParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::map< KeyType, MappedType >> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any map type parameter read from the input file or command line...
Definition: Builder.C:1423
Storage for action instances.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
std::unique_ptr< SyntaxTree > _syntax_formatter
Object for holding the syntax parse tree.
Definition: Builder.h:229
Holds the syntax in a Json::Value tree.
void extractParams(const std::string &prefix, InputParameters &p)
This function attempts to extract values from the input file based on the contents of the passed para...
Definition: Builder.C:844
hit::Node & _root
The root node from the Parser.
Definition: Builder.h:226
std::set< std::string > _extracted_vars
The set of all variables extracted from the input file.
Definition: Builder.h:232
UnusedWalker(std::set< std::string > used, Builder &p)
Definition: Builder.h:42
void initSyntaxFormatter(SyntaxFormatterType type, bool dump_mode)
Creates a syntax formatter for printing.
Definition: Builder.C:420
Specialized factory for generic Action System objects.
Definition: ActionFactory.h:50
An inteface for the _console for outputting to the Console object.
void buildJsonSyntaxTree(JsonSyntaxTree &tree) const
Use MOOSE Factories to construct a parameter tree for documentation or echoing input.
Definition: Builder.C:437
void errorCheck(const libMesh::Parallel::Communicator &comm, bool warn_unused, bool err_unused)
Definition: Builder.C:379
std::string getPrimaryFileName(bool stripLeadingPath=true) const
Return the primary (first) filename that was parsed.
Definition: Builder.C:199
std::vector< hit::ErrorMessage > errors
Definition: Builder.h:46
void setScalarParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< T > *param, bool in_global, GlobalParamsAction *global_block)
Helper functions for setting parameters of arbitrary types - bodies are in the .C file since they are...
Definition: Builder.C:1316
std::vector< hit::ErrorMessage > _errors
The errors accumulated during the walk.
Definition: Builder.h:241
void setDoubleIndexParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< std::vector< T >>> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any double indexed type parameter read from the input file or command lin...
Definition: Builder.C:1511
Syntax & _syntax
Reference to an object that defines input file syntax.
Definition: Builder.h:222
std::set< std::string > _used
Definition: Builder.h:49
void setVectorParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< T >> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any vector type parameter read from the input file or command line...
Definition: Builder.C:1388
Holding syntax for parsing input files.
Definition: Syntax.h:21
void setVectorComponentParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< T >> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting several multivalue "scalar" type parameter read from the input file or co...
Definition: Builder.C:1674
Factory & _factory
The Factory associated with that MooseApp.
Definition: Builder.h:216
virtual ~Builder()
Definition: Builder.C:138
std::vector< std::string > listValidParams(std::string &section_name)
Definition: Builder.C:162
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
std::unordered_map< std::string, std::string > _deprecated_params
Deprecation warnings.
Definition: Builder.h:244
ActionWarehouse & _action_wh
Action warehouse that will be filled by actions.
Definition: Builder.h:218
Parses MOOSE input using HIT/WASP.
Definition: Builder.h:56
Class for parsing input files.
Definition: Parser.h:87
void walk(const std::string &fullpath, const std::string &nodepath, hit::Node *n)
Definition: Builder.C:309