Line data Source code
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 :
18 : using namespace libMesh;
19 :
20 : registerMooseObject("ThermalHydraulicsApp", THMMesh);
21 :
22 : const BoundaryName THMMesh::INVALID_BOUNDARY_ID = "invalid_boundary_id";
23 :
24 : InputParameters
25 4086 : THMMesh::validParams()
26 : {
27 4086 : InputParameters params = MooseMesh::validParams();
28 4086 : params.addClassDescription("Creates a mesh (nodes and elements) for the Components");
29 8172 : MooseEnum dims("1=1 2 3", "3");
30 8172 : 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 4086 : params.set<bool>("allow_renumbering") = false;
33 4086 : return params;
34 4086 : }
35 :
36 2043 : THMMesh::THMMesh(const InputParameters & parameters)
37 : : MooseMesh(parameters),
38 2043 : _dim(getParam<MooseEnum>("dim")),
39 2043 : _next_node_id(0),
40 2043 : _next_element_id(0),
41 2043 : _next_subdomain_id(0),
42 2043 : _next_boundary_id(0)
43 : {
44 2043 : }
45 :
46 0 : THMMesh::THMMesh(const THMMesh & other_mesh)
47 : : MooseMesh(other_mesh),
48 0 : _dim(other_mesh._dim),
49 0 : _next_node_id(other_mesh._next_node_id),
50 0 : _next_element_id(other_mesh._next_element_id),
51 0 : _next_subdomain_id(other_mesh._next_subdomain_id),
52 0 : _next_boundary_id(other_mesh._next_boundary_id)
53 : {
54 0 : }
55 :
56 : unsigned int
57 162343 : THMMesh::dimension() const
58 : {
59 162343 : return _dim;
60 : }
61 :
62 : unsigned int
63 346 : THMMesh::effectiveSpatialDimension() const
64 : {
65 346 : return _dim;
66 : }
67 :
68 : std::unique_ptr<MooseMesh>
69 0 : THMMesh::safeClone() const
70 : {
71 0 : return _app.getFactory().copyConstruct(*this);
72 : }
73 :
74 : void
75 0 : THMMesh::buildMesh()
76 : {
77 0 : getMesh().set_spatial_dimension(_dim);
78 0 : }
79 :
80 : dof_id_type
81 297468 : THMMesh::getNextNodeId()
82 : {
83 297468 : dof_id_type id = _next_node_id++;
84 297468 : return id;
85 : }
86 :
87 : dof_id_type
88 257802 : THMMesh::getNextElementId()
89 : {
90 257802 : dof_id_type id = _next_element_id++;
91 257802 : return id;
92 : }
93 :
94 : Node *
95 297468 : THMMesh::addNode(const Point & pt)
96 : {
97 297468 : dof_id_type id = getNextNodeId();
98 297468 : Node * node = _mesh->add_point(pt, id);
99 297468 : return node;
100 : }
101 :
102 : Elem *
103 34608 : THMMesh::addElement(libMesh::ElemType elem_type, const std::vector<dof_id_type> & node_ids)
104 : {
105 34608 : dof_id_type elem_id = getNextElementId();
106 :
107 34608 : Elem * elem = libMesh::Elem::build(elem_type).release();
108 : elem->set_id(elem_id);
109 34608 : _mesh->add_elem(elem);
110 302560 : for (std::size_t i = 0; i < node_ids.size(); i++)
111 267952 : elem->set_node(i, _mesh->node_ptr(node_ids[i]));
112 34608 : return elem;
113 : }
114 :
115 : Elem *
116 587 : THMMesh::addNodeElement(dof_id_type node)
117 : {
118 587 : dof_id_type elem_id = getNextElementId();
119 :
120 587 : Elem * elem = new NodeElem;
121 : elem->set_id(elem_id);
122 587 : _mesh->add_elem(elem);
123 587 : elem->set_node(0, _mesh->node_ptr(node));
124 587 : return elem;
125 : }
126 :
127 : Elem *
128 99148 : THMMesh::addElementEdge2(dof_id_type node0, dof_id_type node1)
129 : {
130 99148 : dof_id_type elem_id = getNextElementId();
131 :
132 99148 : Elem * elem = new Edge2;
133 : elem->set_id(elem_id);
134 99148 : _mesh->add_elem(elem);
135 99148 : elem->set_node(0, _mesh->node_ptr(node0));
136 99148 : elem->set_node(1, _mesh->node_ptr(node1));
137 99148 : return elem;
138 : }
139 :
140 : Elem *
141 0 : THMMesh::addElementEdge3(dof_id_type node0, dof_id_type node1, dof_id_type node2)
142 : {
143 0 : dof_id_type elem_id = getNextElementId();
144 :
145 0 : Elem * elem = new Edge3;
146 : elem->set_id(elem_id);
147 0 : _mesh->add_elem(elem);
148 0 : elem->set_node(0, _mesh->node_ptr(node0));
149 0 : elem->set_node(1, _mesh->node_ptr(node1));
150 0 : elem->set_node(2, _mesh->node_ptr(node2));
151 0 : return elem;
152 : }
153 :
154 : Elem *
155 123427 : THMMesh::addElementQuad4(dof_id_type node0, dof_id_type node1, dof_id_type node2, dof_id_type node3)
156 : {
157 123427 : dof_id_type elem_id = getNextElementId();
158 :
159 123427 : Elem * elem = new Quad4;
160 : elem->set_id(elem_id);
161 123427 : _mesh->add_elem(elem);
162 123427 : elem->set_node(0, _mesh->node_ptr(node0));
163 123427 : elem->set_node(1, _mesh->node_ptr(node1));
164 123427 : elem->set_node(2, _mesh->node_ptr(node2));
165 123427 : elem->set_node(3, _mesh->node_ptr(node3));
166 123427 : return elem;
167 : }
168 :
169 : Elem *
170 32 : THMMesh::addElementQuad9(dof_id_type node0,
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 32 : dof_id_type elem_id = getNextElementId();
181 :
182 32 : Elem * elem = new Quad9;
183 : elem->set_id(elem_id);
184 32 : _mesh->add_elem(elem);
185 : // vertices
186 32 : elem->set_node(0, _mesh->node_ptr(node0));
187 32 : elem->set_node(1, _mesh->node_ptr(node1));
188 32 : elem->set_node(2, _mesh->node_ptr(node2));
189 32 : elem->set_node(3, _mesh->node_ptr(node3));
190 : // mid-edges
191 32 : elem->set_node(4, _mesh->node_ptr(node4));
192 32 : elem->set_node(5, _mesh->node_ptr(node5));
193 32 : elem->set_node(6, _mesh->node_ptr(node6));
194 32 : elem->set_node(7, _mesh->node_ptr(node7));
195 : // center
196 32 : elem->set_node(8, _mesh->node_ptr(node8));
197 :
198 32 : return elem;
199 : }
200 :
201 : SubdomainID
202 4272 : THMMesh::getNextSubdomainId()
203 : {
204 4272 : SubdomainID id = _next_subdomain_id++;
205 4272 : return id;
206 : }
207 :
208 : BoundaryID
209 17408 : THMMesh::getNextBoundaryId()
210 : {
211 17408 : BoundaryID id = _next_boundary_id++;
212 17408 : return id;
213 : }
|