https://mooseframework.inl.gov
MeshGenerator.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 "MeshGenerator.h"
11 #include "MooseMesh.h"
12 #include "MooseApp.h"
13 
14 #include "Exodus.h"
15 #include "Nemesis.h"
16 
17 #include "libmesh/exodusII_io.h"
18 #include "libmesh/nemesis_io.h"
19 
20 const std::string MeshGenerator::data_only_param = "_data_only";
21 
24 {
26 
27  params.addParam<bool>("show_info",
28  false,
29  "Whether or not to show mesh info after generating the mesh "
30  "(bounding box, element types, sidesets, nodesets, subdomains, etc)");
31  params.addParam<std::string>(
32  "save_with_name",
33  std::string(),
34  "Keep the mesh from this mesh generator in memory with the name specified");
35 
36  params.addParam<bool>(
37  "output", false, "Whether or not to output the mesh file after generating the mesh");
38  params.addParam<bool>("nemesis",
39  false,
40  "Whether or not to output the mesh file in the nemesis"
41  "format (only if output = true)");
42 
43  params.addParamNamesToGroup("show_info output nemesis", "Debugging");
44  params.addParamNamesToGroup("save_with_name", "Advanced");
45  params.registerBase("MeshGenerator");
46 
47  params.addPrivateParam<bool>("_has_generate_data", false);
48  params.addPrivateParam<bool>("_has_generate_csg", false);
49  params.addPrivateParam<MooseMesh *>("_moose_mesh", nullptr);
50  params.addPrivateParam<bool>(data_only_param, false);
51  // Controls are not created early enough
52  params.suppressParameter<std::vector<std::string>>("control_tags");
53 
54  return params;
55 }
56 
58  : MooseObject(parameters),
60  _mesh(getParam<MooseMesh *>("_moose_mesh") ? getParam<MooseMesh *>("_moose_mesh")
61  : _app.actionWarehouse().mesh().get()),
62  _save_with_name(getParam<std::string>("save_with_name")),
63  _data_only(getParam<bool>(data_only_param))
64 {
65  const auto & system = _app.getMeshGeneratorSystem();
66  if (isDataOnly())
67  {
68  // Skip the requirement for generateData() if we are generating CSG object
69  if (!hasGenerateCSG() && !hasGenerateData())
70  system.dataDrivenError(*this, "does not support data-driven generation");
71  if (hasSaveMesh())
72  system.dataDrivenError(*this, "has 'save_with_name' set");
73  }
74  if (_save_with_name == system.mainMeshGeneratorName())
75  paramError(
76  "save_with_name", "The user-defined mesh name: '", _save_with_name, "' is a reserved name");
77  if (getParam<bool>("nemesis") && !getParam<bool>("output"))
78  paramError("nemesis", "Should only be set to true if 'output=true'");
79 }
80 
81 void
83 {
84  params.set<bool>("_has_generate_data") = true;
85 }
86 
87 bool
89 {
90  return params.get<bool>("_has_generate_data");
91 }
92 
93 void
95 {
96  params.set<bool>("_has_generate_csg") = true;
97 }
98 
99 bool
101 {
102  return params.get<bool>("_has_generate_csg");
103 }
104 
105 const MeshGeneratorName *
106 MeshGenerator::getMeshGeneratorNameFromParam(const std::string & param_name,
107  const bool allow_invalid) const
108 {
109  const auto valid_param = isParamValid(param_name);
110  if (!allow_invalid)
111  {
112  if (!valid_param)
113  mooseError("Failed to get a parameter with the name \"",
114  param_name,
115  "\" when getting a MeshGenerator.",
116  "\n\nKnown parameters:\n",
117  _pars);
118  if (!_pars.isType<MeshGeneratorName>(param_name))
119  paramError(param_name,
120  "Parameter of type \"",
121  _pars.type(param_name),
122  "\" is not an expected type for getting a MeshGenerator (should be of type "
123  "\"MeshGeneratorName\")");
124  }
125  else if (!valid_param)
126  return nullptr;
127 
128  const auto & name = getParam<MeshGeneratorName>(param_name);
129  checkGetMesh(name, param_name);
130 
131  return &name;
132 }
133 
134 const std::vector<MeshGeneratorName> &
135 MeshGenerator::getMeshGeneratorNamesFromParam(const std::string & param_name) const
136 {
137  if (!isParamValid(param_name))
138  mooseError("Failed to get a parameter with the name \"",
139  param_name,
140  "\" when getting MeshGenerators.",
141  "\n\nKnown parameters:\n",
142  _pars);
143  if (!_pars.isType<std::vector<MeshGeneratorName>>(param_name))
144  paramError(param_name,
145  "Parameter of type \"",
146  _pars.type(param_name),
147  "\" is not an expected type for getting MeshGenerators (should be of type "
148  "\"std::vector<MeshGeneratorName>\")");
149 
150  const auto & names = getParam<std::vector<MeshGeneratorName>>(param_name);
151  for (const auto & name : names)
152  checkGetMesh(name, param_name);
153 
154  return names;
155 }
156 
157 void
158 MeshGenerator::checkGetMesh(const MeshGeneratorName & mesh_generator_name,
159  const std::string & param_name) const
160 {
161  mooseAssert(!mesh_generator_name.empty(), "Empty name");
162  const auto & mg_sys = _app.getMeshGeneratorSystem();
164  mooseError("Cannot get a mesh outside of construction");
165  if (!mg_sys.hasMeshGenerator(mesh_generator_name) && !isNullMeshName(mesh_generator_name))
166  {
167  std::stringstream error;
168  error << "The requested MeshGenerator with name '" << mesh_generator_name << "' ";
169  if (mg_sys.hasMeshGeneratorParams(mesh_generator_name))
170  error << "was found, but has not been constructed yet.\n\nThis can occur when your "
171  "dependencies are not properly defined and we cannot infer the proper construction "
172  "order of your MeshGenerators.\n\nThe most likely case is a sub generator whose "
173  "input(s) are not declared as a sub dependency in the generator creating them.";
174  else
175  error << "was not found.\nMesh generators that can be found: "
176  << Moose::stringify(mg_sys.getMeshGeneratorNames());
177 
178  if (param_name.size())
179  paramError(param_name, error.str());
180  else
181  mooseError(error.str());
182  }
183 }
184 
185 std::unique_ptr<MeshBase> &
186 MeshGenerator::getMesh(const std::string & param_name, const bool allow_invalid /* = false */)
187 {
188  const MeshGeneratorName * name = getMeshGeneratorNameFromParam(param_name, allow_invalid);
189  if (!name)
190  return _null_mesh;
191  return getMeshByName(*name);
192 }
193 
194 std::vector<std::unique_ptr<MeshBase> *>
195 MeshGenerator::getMeshes(const std::string & param_name)
196 {
198 }
199 
200 std::unique_ptr<MeshBase> &
201 MeshGenerator::getMeshByName(const MeshGeneratorName & mesh_generator_name)
202 {
203  checkGetMesh(mesh_generator_name, "");
204  if (isNullMeshName(mesh_generator_name))
205  return _null_mesh;
206 
207  _requested_mesh_generators.insert(mesh_generator_name);
208  auto & mesh = _app.getMeshGeneratorSystem().getMeshGeneratorOutput(mesh_generator_name);
209  _requested_meshes.emplace_back(mesh_generator_name, &mesh);
210  return mesh;
211 }
212 
213 std::vector<std::unique_ptr<MeshBase> *>
214 MeshGenerator::getMeshesByName(const std::vector<MeshGeneratorName> & mesh_generator_names)
215 {
216  std::vector<std::unique_ptr<MeshBase> *> meshes;
217  for (const auto & name : mesh_generator_names)
218  meshes.push_back(&getMeshByName(name));
219  return meshes;
220 }
221 
222 std::unique_ptr<CSG::CSGBase> &
223 MeshGenerator::getCSGBase(const std::string & param_name)
224 {
225  const MeshGeneratorName * name = getMeshGeneratorNameFromParam(param_name, false);
226  return getCSGBaseByName(*name);
227 }
228 
229 std::unique_ptr<CSG::CSGBase> &
230 MeshGenerator::getCSGBaseByName(const MeshGeneratorName & mesh_generator_name)
231 {
232  checkGetMesh(mesh_generator_name, "");
233 
234  auto & csg_base = _app.getMeshGeneratorSystem().getCSGBaseGeneratorOutput(mesh_generator_name);
235  _requested_csg_bases.emplace_back(mesh_generator_name, &csg_base);
236  return csg_base;
237 }
238 
239 std::vector<std::unique_ptr<CSG::CSGBase> *>
240 MeshGenerator::getCSGBases(const std::string & param_name)
241 {
243 }
244 
245 std::vector<std::unique_ptr<CSG::CSGBase> *>
246 MeshGenerator::getCSGBasesByName(const std::vector<MeshGeneratorName> & mesh_generator_names)
247 {
248  std::vector<std::unique_ptr<CSG::CSGBase> *> csg_bases;
249  for (const auto & name : mesh_generator_names)
250  csg_bases.push_back(&getCSGBaseByName(name));
251  return csg_bases;
252 }
253 
254 void
255 MeshGenerator::declareMeshForSub(const std::string & param_name)
256 {
258 }
259 
260 void
261 MeshGenerator::declareMeshesForSub(const std::string & param_name)
262 {
264 }
265 
266 void
267 MeshGenerator::declareMeshForSubByName(const MeshGeneratorName & mesh_generator_name)
268 {
269  checkGetMesh(mesh_generator_name, "");
270  if (isNullMeshName(mesh_generator_name))
271  return;
272 
273  _requested_mesh_generators_for_sub.insert(mesh_generator_name);
274 }
275 
276 void
278  const std::vector<MeshGeneratorName> & mesh_generator_names)
279 {
280  for (const auto & name : mesh_generator_names)
282 }
283 
284 std::unique_ptr<MeshBase>
286 {
287  mooseAssert(_mesh, "Need a MooseMesh object");
288  return _mesh->buildMeshBaseObject(dim);
289 }
290 
291 std::unique_ptr<ReplicatedMesh>
293 {
294  mooseAssert(_mesh, "Need a MooseMesh object");
295  return _mesh->buildTypedMesh<ReplicatedMesh>(dim);
296 }
297 
298 std::unique_ptr<DistributedMesh>
300 {
301  mooseAssert(_mesh, "Need a MooseMesh object");
302  return _mesh->buildTypedMesh<DistributedMesh>(dim);
303 }
304 
305 std::unique_ptr<MeshBase>
307 {
308  libmesh_parallel_only(comm());
309  mooseAssert(comm().verify(type() + name()), "Inconsistent execution ordering");
310 
311  if (hasGenerateData())
312  generateData();
313 
314  if (isDataOnly())
315  return nullptr;
316 
317  auto mesh = generate();
318  if (!mesh)
319  mooseError("A mesh was not generated by this generator (it was nullptr).");
320 
321  for (const auto & [requested_name, requested_mesh] : _requested_meshes)
322  if (*requested_mesh)
323  mooseError(
324  "The mesh from input ",
325  _app.getMeshGenerator(requested_name).type(),
326  " '",
327  _app.getMeshGenerator(requested_name).name(),
328  "' was not moved.\n\nThe MeshGenerator system requires that the memory from all input "
329  "meshes\nare managed by the requesting MeshGenerator during the generate phase.\n\nThis "
330  "is achieved with a std::move() operation within the generate() method.");
331 
332  if (getParam<bool>("show_info"))
333  {
334  const auto mesh_info = mesh->get_info(/* verbosity = */ 2);
335 
336  // We will prefix all information with "type() 'name()':" because this could potentially
337  // output a ton of information and looks a bit better with a prefix
338  std::stringstream oss;
339  const auto split = MooseUtils::split(mesh_info, "\n");
340  if (split.size())
341  for (std::size_t i = 0; i < split.size() - 1; ++i) // ignore the last line break
342  oss << COLOR_CYAN << "" << type() << " '" << name() << "': " << COLOR_DEFAULT << split[i]
343  << std::endl;
344  _console << oss.str() << std::flush;
345  }
346 
347  // output the current mesh block to file
348  if (hasOutput())
349  {
350  if (!mesh->is_prepared())
351  mesh->prepare_for_use();
352 
353  if (!getParam<bool>("nemesis"))
354  {
355  libMesh::ExodusII_IO exio(*mesh);
356 
357  if (mesh->mesh_dimension() == 1)
358  exio.write_as_dimension(3);
359 
360  // Default to non-HDF5 output for wider compatibility
361  exio.set_hdf5_writing(false);
362 
363  exio.write(name() + "_in.e");
364  }
365  else
366  {
367  libMesh::Nemesis_IO nemesis_io(*mesh);
368 
369  // Default to non-HDF5 output for wider compatibility
370  nemesis_io.set_hdf5_writing(false);
371 
372  nemesis_io.write(name() + "_in.e");
373  }
374  }
375 
376  return mesh;
377 }
378 
379 std::unique_ptr<CSG::CSGBase>
381 {
382  mooseAssert(isDataOnly(), "Trying to use csg-only mode while not in data-driven mode");
383  auto csg_obj = generateCSG();
384  mooseAssert(csg_obj, "Null CSG object");
385  for (const auto & [requested_name, requested_csg] : _requested_csg_bases)
386  if (*requested_csg)
387  mooseError(
388  "The CSGBase object from input ",
389  _app.getMeshGenerator(requested_name).type(),
390  " '",
391  _app.getMeshGenerator(requested_name).name(),
392  "' was not moved.\n\nThe MeshGenerator system requires that the memory from all input "
393  "meshes\nare managed by the requesting MeshGenerator during the generate phase.\n\nThis "
394  "is achieved with a std::move() operation within the generateCSG() method.");
395 
396  return csg_obj;
397 }
398 
399 void
400 MeshGenerator::addMeshSubgenerator(const std::string & type,
401  const std::string & name,
402  InputParameters params)
403 {
405  mooseError("Can only call addMeshSubgenerator() during MeshGenerator construction");
406 
407  // In case the user forgot it
408  params.set<MooseApp *>(MooseBase::app_param) = &_app;
409 
410  // Set this to be data-only if this generator is data only
411  params.set<bool>(data_only_param) = isDataOnly();
412 
413  _app.addMeshGenerator(type, name, params);
414  _sub_mesh_generators.insert(&std::as_const(_app).getMeshGenerator(name));
415 }
416 
418 MeshGenerator::setMeshPropertyHelper(const std::string & data_name)
419 {
421 }
422 
423 void
425 {
426  mooseAssert(_app.constructingMeshGenerators(), "Should only be called at construction");
427  _parent_mesh_generators.insert(&mg);
428 }
429 
430 void
432 {
433  mooseAssert(_app.constructingMeshGenerators(), "Should only be called at construction");
434  _child_mesh_generators.insert(&mg);
435 }
436 
437 bool
438 MeshGenerator::isParentMeshGenerator(const MeshGeneratorName & name,
439  const bool direct /* = true */) const
440 {
441  return std::find_if(getParentMeshGenerators().begin(),
442  getParentMeshGenerators().end(),
443  [&name, &direct](const auto & mg)
444  {
445  return mg->name() == name ||
446  (!direct && mg->isParentMeshGenerator(name, /* direct = */ false));
447  }) != getParentMeshGenerators().end();
448 }
449 
450 bool
451 MeshGenerator::isChildMeshGenerator(const MeshGeneratorName & name,
452  const bool direct /* = true */) const
453 {
454  return std::find_if(getChildMeshGenerators().begin(),
455  getChildMeshGenerators().end(),
456  [&name, &direct](const auto & mg)
457  {
458  return mg->name() == name ||
459  (!direct && mg->isChildMeshGenerator(name, /* direct = */ false));
460  }) != getChildMeshGenerators().end();
461 }
462 
463 void
464 MeshGenerator::declareNullMeshName(const MeshGeneratorName & name)
465 {
466  mooseAssert(_app.constructingMeshGenerators(), "Should only be called at construction");
467  mooseAssert(!_null_mesh_names.count(name), "Already declared");
468  _null_mesh_names.insert(name);
469 }
470 
471 bool
473 {
474  return _save_with_name.size();
475 }
476 
477 bool
479 {
480  return getParam<bool>("output");
481 }
482 
483 const std::string &
485 {
486  return _save_with_name;
487 }
488 
489 void
491 {
492  mooseAssert(!hasGenerateData(), "Inconsistent flag");
493  mooseError("This MeshGenerator does not have a generateData() implementation.");
494 }
495 
496 [[nodiscard]] std::unique_ptr<CSG::CSGBase>
498 {
499  mooseAssert(!hasGenerateCSG(), "Inconsistent flag");
500  mooseError("This MeshGenerator does not have a generateCSG() implementation.");
501 }
virtual bool constructingMeshGenerators() const
Whether this app is constructing mesh generators.
Definition: MooseApp.C:3610
std::unique_ptr< DistributedMesh > buildDistributedMesh(unsigned int dim=libMesh::invalid_uint)
Build a distributed mesh that has correct remote element removal behavior and geometric ghosting func...
std::unique_ptr< MeshBase > & getMeshByName(const MeshGeneratorName &mesh_generator_name)
Like getMesh(), but takes the name of another MeshGenerator directly.
std::unique_ptr< CSG::CSGBase > & getCSGBaseGeneratorOutput(const MeshGeneratorName &name)
Returns the output CSGBase object associated with a particular mesh generator name.
static const std::string app_param
The name of the parameter that contains the MooseApp.
Definition: MooseBase.h:59
std::set< std::string > _null_mesh_names
The declared "null" mesh names that will not represent a mesh in input; see declareNullMeshName() ...
RestartableDataValue & setMeshPropertyHelper(const std::string &data_name)
Helper for getting a writable reference to a mesh property, used in declareMeshProperty and setMeshPr...
static const std::string data_only_param
The name of the private parameter for setting data only.
Definition: MeshGenerator.h:76
const MeshGenerator & getMeshGenerator(const std::string &name) const
Definition: MooseApp.h:874
bool isChildMeshGenerator(const MeshGeneratorName &name, const bool direct=true) const
const InputParameters & _pars
The object&#39;s parameters.
Definition: MooseBase.h:366
void write_as_dimension(unsigned dim)
std::unique_ptr< ReplicatedMesh > buildReplicatedMesh(unsigned int dim=libMesh::invalid_uint)
Build a replicated mesh.
std::unique_ptr< libMesh::MeshBase > & getMeshGeneratorOutput(const MeshGeneratorName &name)
Get a reference to a pointer that will be the output of the MeshGenerator named name.
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 ...
Definition: MooseBase.h:439
std::vector< std::unique_ptr< CSG::CSGBase > * > getCSGBases(const std::string &param_name)
Like getCSGBase(), but for multiple generators.
const std::string & _save_with_name
A user-defined name to save the mesh.
void addPrivateParam(const std::string &name, const T &value)
These method add a parameter to the InputParameters object which can be retrieved like any other para...
bool hasSaveMesh() const
Return whether or not to save the current mesh.
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
Combine two vector parameters into a single vector of pairs.
static const RestartableDataMapName MESH_META_DATA
Definition: MooseApp.h:130
virtual void generateData()
Generate the mesh data.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
MeshBase & mesh
Base class for MOOSE-based applications.
Definition: MooseApp.h:103
static std::string meshPropertyName(const std::string &data_name, const std::string &prefix)
bool hasOutput() const
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
Definition: Moose.h:162
const Parallel::Communicator & comm() const
const std::set< const MeshGenerator *, Comparator > & getChildMeshGenerators() const
Gets the MeshGenerators that are children to this MeshGenerator.
std::unique_ptr< MeshBase > _null_mesh
A nullptr to use for when inputs aren&#39;t specified.
MeshGenerator(const InputParameters &parameters)
Definition: MeshGenerator.C:57
bool hasGenerateData() const
std::set< const MeshGenerator *, Comparator > _child_mesh_generators
The MeshGenerators that are children to this MeshGenerator.
bool isNullMeshName(const MeshGeneratorName &name) const
MooseMesh *const _mesh
Pointer to the owning mesh.
void suppressParameter(const std::string &name)
This method suppresses an inherited parameter so that it isn&#39;t required or valid in the derived class...
void addChildMeshGenerator(const MeshGenerator &mg, const AddParentChildKey)
Adds the MeshGenerator mg as a child.
void declareMeshForSub(const std::string &param_name)
Declares that a MeshGenerator referenced in the InputParameters is to be used as a dependency of a su...
void registerBase(const std::string &value)
This method must be called from every base "Moose System" to create linkage with the Action System...
std::vector< std::pair< std::string, std::unique_ptr< MeshBase > * > > _requested_meshes
The meshes that were requested by this MeshGenerator; used to verify that any input meshes that are r...
void addParentMeshGenerator(const MeshGenerator &mg, const AddParentChildKey)
Adds the MeshGenerator mg as a parent.
bool isParentMeshGenerator(const MeshGeneratorName &name, const bool direct=true) const
const std::string & name() const
Get the name of the class.
Definition: MooseBase.h:103
RestartableDataValue & getRestartableMetaData(const std::string &name, const RestartableDataMapName &metaname, THREAD_ID tid)
Definition: MooseApp.C:2627
std::unique_ptr< T > buildTypedMesh(unsigned int dim=libMesh::invalid_uint)
Shortcut method to construct a unique pointer to a libMesh mesh instance.
Definition: MooseMesh.h:2133
void addMeshSubgenerator(const std::string &type, const std::string &name, Ts... extra_input_parameters)
Construct a "subgenerator", a different MeshGenerator subclass that will be added to the same MooseAp...
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
std::unique_ptr< MeshBase > buildMeshBaseObject(unsigned int dim=libMesh::invalid_uint)
Method to construct a libMesh::MeshBase object that is normally set and used by the MooseMesh object ...
Definition: MooseMesh.C:2906
void declareMeshesForSubByName(const std::vector< MeshGeneratorName > &mesh_generator_names)
Like declareMeshForSubByName(), but for multiple generators.
std::set< MeshGeneratorName > _requested_mesh_generators_for_sub
The names of the MeshGenerators that were requested in the declareMeshForSub methods.
std::unique_ptr< MeshBase > & getMesh(const std::string &param_name, const bool allow_invalid=false)
Takes the name of a MeshGeneratorName parameter and then gets a pointer to the Mesh that MeshGenerato...
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:92
virtual std::unique_ptr< MeshBase > generate()=0
Generate / modify the mesh.
const std::string & type() const
Get the type of this class.
Definition: MooseBase.h:93
std::set< MeshGeneratorName > _requested_mesh_generators
The names of the MeshGenerators that were requested in the getMesh methods.
std::vector< std::unique_ptr< MeshBase > * > getMeshesByName(const std::vector< MeshGeneratorName > &mesh_generator_names)
Like getMeshByName(), but for multiple generators.
std::vector< std::pair< std::string, std::unique_ptr< CSG::CSGBase > * > > _requested_csg_bases
The CSGBase objects that were requested by this MeshGenerator; used to verify that any input meshes t...
std::vector< std::unique_ptr< MeshBase > * > getMeshes(const std::string &param_name)
Like getMesh(), but for multiple generators.
MooseApp & _app
The MOOSE application this is associated with.
Definition: MooseBase.h:357
static InputParameters validParams()
Definition: MeshGenerator.C:23
std::string stringify(const T &t)
conversion to string
Definition: Conversion.h:64
std::unique_ptr< MeshBase > generateInternal()
Internal generation method - this is what is actually called within MooseApp to execute the MeshGener...
static void setHasGenerateCSG(InputParameters &params)
Sets that a mesh generator has a generateCSG() implementation.
Definition: MeshGenerator.C:94
bool hasGenerateCSG() const
std::set< const MeshGenerator *, Comparator > _sub_mesh_generators
The sub MeshGenerators constructed by this MeshGenerator.
tbb::split split
bool isType(const std::string &name) const
void addMeshGenerator(const std::string &type, const std::string &name, const InputParameters &params)
Add a mesh generator that will act on the meshes in the system.
Definition: MooseApp.h:856
virtual void write(const std::string &fname) override
Class that is used as a parameter to add[Parent/Child]() that allows only MeshGeneratorSystem methods...
std::string type(const std::string &name) const
Prints the type of the requested parameter by name.
const std::set< const MeshGenerator *, Comparator > & getParentMeshGenerators() const
Gets the MeshGenerators that are parents to this MeshGenerator.
void checkGetMesh(const MeshGeneratorName &mesh_generator_name, const std::string &param_name) const
Helper for performing error checking in the getMesh methods.
std::set< const MeshGenerator *, Comparator > _parent_mesh_generators
The MeshGenerators that are parents to this MeshGenerator.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition: MooseBase.h:271
std::unique_ptr< CSG::CSGBase > & getCSGBaseByName(const MeshGeneratorName &mesh_generator_name)
Like getCSGBase(), but takes the name of another MeshGenerator directly.
std::unique_ptr< CSG::CSGBase > & getCSGBase(const std::string &param_name)
Takes the name of a MeshGeneratorName parameter and then gets a pointer to the CSGBase object that Me...
static void setHasGenerateData(InputParameters &params)
Sets that a mesh generator has a generateData() implementation.
Definition: MeshGenerator.C:82
virtual void write(const std::string &base_filename) override
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 dataDrivenError(const MeshGenerator &generator, const std::string &message) const
Reports an error with the context of the data driven parameter, coming from the generator generator w...
The Interface used to retrieve mesh meta data (attributes) set by the MeshGenerator system...
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition: MooseBase.h:199
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
std::unique_ptr< CSG::CSGBase > generateInternalCSG()
Internal generation method for CSG object generation.
std::unique_ptr< MeshBase > buildMeshBaseObject(unsigned int dim=libMesh::invalid_uint)
Build a MeshBase object whose underlying type will be determined by the Mesh input file block...
bool isDataOnly() const
MeshGeneratorSystem & getMeshGeneratorSystem()
Gets the system that manages the MeshGenerators.
Definition: MooseApp.h:840
static InputParameters validParams()
Definition: MooseObject.C:25
void declareMeshesForSub(const std::string &param_name)
Like declareMeshForSub(), but for multiple generators.
void declareNullMeshName(const MeshGeneratorName &name)
Registers the name name as a "null" mesh, which is a MeshGenerator used in InputParameters that will ...
std::vector< std::string > split(const std::string &str, const std::string &delimiter, std::size_t max_count)
Definition: MooseUtils.C:1031
const std::string & getSavedMeshName() const
Return the name of the saved mesh.
void declareMeshForSubByName(const MeshGeneratorName &mesh_generator_name)
Like declareMeshForSub(), but takes the name of another MeshGenerator directly.
void set_hdf5_writing(bool write_hdf5)
void set_hdf5_writing(bool write_hdf5)
MeshGenerators are objects that can modify or add to an existing mesh.
Definition: MeshGenerator.h:33
const std::vector< MeshGeneratorName > & getMeshGeneratorNamesFromParam(const std::string &param_name) const
Helper for getting a std::vector<MeshGeneratorName> parameter.
const Elem & get(const ElemType type_in)
Abstract definition of a RestartableData value.
const MeshGeneratorName * getMeshGeneratorNameFromParam(const std::string &param_name, const bool allow_invalid) const
Helper for getting a MeshGeneratorName parameter.
virtual std::unique_ptr< CSG::CSGBase > generateCSG()
Generate the CSG representation of the mesh (or meshing operation) created by this mesh generator...
std::vector< std::unique_ptr< CSG::CSGBase > * > getCSGBasesByName(const std::vector< MeshGeneratorName > &mesh_generator_names)
Like getCSGBaseByName(), but for multiple generators.
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
This method takes a space delimited list of parameter names and adds them to the specified group name...