https://mooseframework.inl.gov
Loading...
Searching...
No Matches
BoundingBoxNodeSetGenerator.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
11#include "MooseMeshUtils.h"
12#include "CastUniquePointer.h"
13#include "MooseUtils.h"
14
15#include "libmesh/node.h"
16
18
21{
23 MooseEnum location("INSIDE OUTSIDE", "INSIDE");
24
25 params.addRequiredParam<MeshGeneratorName>("input", "The mesh we want to modify");
27 "Assigns all of the nodes either inside or outside of a bounding box to a new nodeset.");
28 params.addRequiredParam<std::vector<BoundaryName>>("new_boundary",
29 "The name of the nodeset to create");
30 params.addRequiredParam<RealVectorValue>(
31 "bottom_left",
32 "The bottom left point (in x,y,z with spaces in-between) of the box to select the nodes.");
33 params.addRequiredParam<RealVectorValue>(
34 "top_right",
35 "The bottom left point (in x,y,z with spaces in-between) of the box to select the nodes.");
36 params.addParam<MooseEnum>("location", location, "Control of where the nodeset is to be set");
37
38 return params;
39}
40
42 : MeshGenerator(parameters),
43 _input(getMesh("input")),
44 _location(getParam<MooseEnum>("location")),
45 _bounding_box(MooseUtils::buildBoundingBox(getParam<RealVectorValue>("bottom_left"),
46 getParam<RealVectorValue>("top_right")))
47{
48}
49
50std::unique_ptr<MeshBase>
52{
53 std::unique_ptr<MeshBase> mesh = std::move(_input);
54
55 // Get the BoundaryIDs from the mesh
56 std::vector<BoundaryName> boundary_names = getParam<std::vector<BoundaryName>>("new_boundary");
57 std::vector<BoundaryID> boundary_ids =
58 MooseMeshUtils::getBoundaryIDs(*mesh, boundary_names, true);
59 if (boundary_ids.size() != 1)
60 mooseError("Only one boundary ID can be assigned to a nodeset using a bounding box!");
61
62 // Get a reference to our BoundaryInfo object
63 BoundaryInfo & boundary_info = mesh->get_boundary_info();
64
65 bool found_node = false;
66 const bool inside = (_location == "INSIDE");
67
68 // Loop over the elements and assign node set id to nodes within the bounding box
69 for (auto & node : as_range(mesh->active_nodes_begin(), mesh->active_nodes_end()))
70 if (_bounding_box.contains_point(*node) == inside)
71 {
72 boundary_info.add_node(node, boundary_ids[0]);
73 found_node = true;
74 }
75
76 // Unless at least one processor found a node in the bounding box,
77 // the user probably specified it incorrectly.
78 this->comm().max(found_node);
79
80 if (!found_node)
81 mooseError("No nodes found within the bounding box");
82
83 boundary_info.nodeset_name(boundary_ids[0]) = boundary_names[0];
84
85 mesh->unset_is_prepared();
86 return dynamic_pointer_cast<MeshBase>(mesh);
87}
registerMooseObject("MooseApp", BoundingBoxNodeSetGenerator)
Selects a set of nodes and assigns a nodeset name to them based on the bounding box specified.
std::unique_ptr< MeshBase > generate() override
Generate / modify the mesh.
std::unique_ptr< MeshBase > & _input
BoundingBox _bounding_box
Bounding box for testing element centroids against. Note that.
BoundingBoxNodeSetGenerator(const InputParameters &parameters)
MooseEnum _location
Select nodes on the 'inside' or the 'outside' of the bounding box.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
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 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...
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.
MeshGenerators are objects that can modify or add to an existing mesh.
static InputParameters validParams()
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
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition MooseEnum.h:55
void max(const T &r, T &o, Request &req) const
const Parallel::Communicator & comm() const
MeshBase & mesh
std::vector< BoundaryID > getBoundaryIDs(const libMesh::MeshBase &mesh, const std::vector< BoundaryName > &boundary_name, bool generate_unknown, const std::set< BoundaryID > &mesh_boundary_ids)
Gets the boundary IDs with their names.