https://mooseframework.inl.gov
Loading...
Searching...
No Matches
THMMesh.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 "THMMesh.h"
11#include "libmesh/node.h"
12#include "libmesh/node_elem.h"
13#include "libmesh/edge_edge2.h"
14#include "libmesh/edge_edge3.h"
15#include "libmesh/face_quad4.h"
16#include "libmesh/face_quad9.h"
17
18using namespace libMesh;
19
20registerMooseObject("ThermalHydraulicsApp", THMMesh);
21
22const BoundaryName THMMesh::INVALID_BOUNDARY_ID = "invalid_boundary_id";
23
26{
28 params.addClassDescription("Creates a mesh (nodes and elements) for the Components");
29 MooseEnum dims("1=1 2 3", "3");
30 params.addParam<MooseEnum>("dim", dims, "The dimension of the mesh to be generated");
31 // we do not allow renumbering, because we generate our meshes
32 params.set<bool>("allow_renumbering") = false;
33 return params;
34}
35
37 : MooseMesh(parameters),
38 _dim(getParam<MooseEnum>("dim")),
39 _next_node_id(0),
40 _next_element_id(0),
41 _next_subdomain_id(0),
42 _next_boundary_id(0)
43{
44}
45
46THMMesh::THMMesh(const THMMesh & other_mesh)
47 : MooseMesh(other_mesh),
48 _dim(other_mesh._dim),
49 _next_node_id(other_mesh._next_node_id),
50 _next_element_id(other_mesh._next_element_id),
51 _next_subdomain_id(other_mesh._next_subdomain_id),
52 _next_boundary_id(other_mesh._next_boundary_id)
53{
54}
55
56unsigned int
58{
59 return _dim;
60}
61
62unsigned int
64{
65 return _dim;
66}
67
68std::unique_ptr<MooseMesh>
70{
71 return _app.getFactory().copyConstruct(*this);
72}
73
74void
79
82{
84 return id;
85}
86
89{
91 return id;
92}
93
94Node *
96{
98 Node * node = _mesh->add_point(pt, id);
99 return node;
100}
101
102Elem *
103THMMesh::addElement(libMesh::ElemType elem_type, const std::vector<dof_id_type> & node_ids)
104{
105 dof_id_type elem_id = getNextElementId();
106
107 Elem * elem = libMesh::Elem::build(elem_type).release();
108 elem->set_id(elem_id);
109 _mesh->add_elem(elem);
110 for (std::size_t i = 0; i < node_ids.size(); i++)
111 elem->set_node(i, _mesh->node_ptr(node_ids[i]));
112 return elem;
113}
114
115Elem *
117{
118 dof_id_type elem_id = getNextElementId();
119
120 Elem * elem = new NodeElem;
121 elem->set_id(elem_id);
122 _mesh->add_elem(elem);
123 elem->set_node(0, _mesh->node_ptr(node));
124 return elem;
125}
126
127Elem *
129{
130 dof_id_type elem_id = getNextElementId();
131
132 Elem * elem = new Edge2;
133 elem->set_id(elem_id);
134 _mesh->add_elem(elem);
135 elem->set_node(0, _mesh->node_ptr(node0));
136 elem->set_node(1, _mesh->node_ptr(node1));
137 return elem;
138}
139
140Elem *
142{
143 dof_id_type elem_id = getNextElementId();
144
145 Elem * elem = new Edge3;
146 elem->set_id(elem_id);
147 _mesh->add_elem(elem);
148 elem->set_node(0, _mesh->node_ptr(node0));
149 elem->set_node(1, _mesh->node_ptr(node1));
150 elem->set_node(2, _mesh->node_ptr(node2));
151 return elem;
152}
153
154Elem *
156{
157 dof_id_type elem_id = getNextElementId();
158
159 Elem * elem = new Quad4;
160 elem->set_id(elem_id);
161 _mesh->add_elem(elem);
162 elem->set_node(0, _mesh->node_ptr(node0));
163 elem->set_node(1, _mesh->node_ptr(node1));
164 elem->set_node(2, _mesh->node_ptr(node2));
165 elem->set_node(3, _mesh->node_ptr(node3));
166 return elem;
167}
168
169Elem *
171 dof_id_type node1,
172 dof_id_type node2,
173 dof_id_type node3,
174 dof_id_type node4,
175 dof_id_type node5,
176 dof_id_type node6,
177 dof_id_type node7,
178 dof_id_type node8)
179{
180 dof_id_type elem_id = getNextElementId();
181
182 Elem * elem = new Quad9;
183 elem->set_id(elem_id);
184 _mesh->add_elem(elem);
185 // vertices
186 elem->set_node(0, _mesh->node_ptr(node0));
187 elem->set_node(1, _mesh->node_ptr(node1));
188 elem->set_node(2, _mesh->node_ptr(node2));
189 elem->set_node(3, _mesh->node_ptr(node3));
190 // mid-edges
191 elem->set_node(4, _mesh->node_ptr(node4));
192 elem->set_node(5, _mesh->node_ptr(node5));
193 elem->set_node(6, _mesh->node_ptr(node6));
194 elem->set_node(7, _mesh->node_ptr(node7));
195 // center
196 elem->set_node(8, _mesh->node_ptr(node8));
197
198 return elem;
199}
200
203{
205 return id;
206}
207
210{
212 return id;
213}
boundary_id_type BoundaryID
registerMooseObject("ThermalHydraulicsApp", THMMesh)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
Factory & getFactory()
virtual Elem * elem(const dof_id_type i)
MeshBase & getMesh()
virtual const Node & node(const dof_id_type i) const
std::unique_ptr< libMesh::MeshBase > _mesh
static InputParameters validParams()
MooseApp & _app
Mesh for THM.
Definition THMMesh.h:19
virtual std::unique_ptr< MooseMesh > safeClone() const override
Definition THMMesh.C:69
Elem * addElementQuad4(dof_id_type node0, dof_id_type node1, dof_id_type node2, dof_id_type node3)
Definition THMMesh.C:155
Elem * addElement(libMesh::ElemType elem_type, const std::vector< dof_id_type > &node_ids)
Add a new element into the mesh.
Definition THMMesh.C:103
virtual SubdomainID getNextSubdomainId()
Gets the next subdomain ID.
Definition THMMesh.C:202
SubdomainID _next_subdomain_id
The next subdomain ID in the mesh (used for mesh generation)
Definition THMMesh.h:67
Elem * addElementEdge2(dof_id_type node0, dof_id_type node1)
Definition THMMesh.C:128
virtual unsigned int dimension() const override
Definition THMMesh.C:57
static const BoundaryName INVALID_BOUNDARY_ID
Definition THMMesh.h:72
virtual void buildMesh() override
Definition THMMesh.C:75
dof_id_type _next_element_id
The next element ID in the mesh (used for mesh generation)
Definition THMMesh.h:65
BoundaryID _next_boundary_id
The next boundary ID in the mesh (used for mesh generation)
Definition THMMesh.h:69
Elem * addNodeElement(dof_id_type node)
Definition THMMesh.C:116
Elem * addElementEdge3(dof_id_type node0, dof_id_type node1, dof_id_type node2)
Definition THMMesh.C:141
virtual BoundaryID getNextBoundaryId()
Gets the next nodeset or sideset ID.
Definition THMMesh.C:209
THMMesh(const InputParameters &parameters)
Definition THMMesh.C:36
unsigned int _dim
The dimension of the mesh.
Definition THMMesh.h:60
virtual dof_id_type getNextElementId()
Gets the next element ID.
Definition THMMesh.C:88
Elem * addElementQuad9(dof_id_type node0, dof_id_type node1, dof_id_type node2, dof_id_type node3, dof_id_type node4, dof_id_type node5, dof_id_type node6, dof_id_type node7, dof_id_type node8)
Definition THMMesh.C:170
dof_id_type _next_node_id
The next node ID in the mesh (used for mesh generation)
Definition THMMesh.h:63
virtual dof_id_type getNextNodeId()
Gets the next node ID.
Definition THMMesh.C:81
virtual unsigned int effectiveSpatialDimension() const override
Definition THMMesh.C:63
static InputParameters validParams()
Definition THMMesh.C:25
Node * addNode(const Point &pt)
Add a new node into the mesh.
Definition THMMesh.C:95
dof_id_type & set_id()
virtual Node *& set_node(const unsigned int i)
void set_spatial_dimension(unsigned char d)
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
uint8_t dof_id_type