LCOV - code coverage report
Current view: top level - src/base - THMMesh.C (source / functions) Hit Total Coverage
Test: idaholab/moose thermal_hydraulics: #30301 (3b550b) with base 2ad78d Lines: 78 98 79.6 %
Date: 2025-07-30 13:02:48 Functions: 14 18 77.8 %
Legend: Lines: hit not hit

          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        7518 : THMMesh::validParams()
      26             : {
      27        7518 :   InputParameters params = MooseMesh::validParams();
      28        7518 :   params.addClassDescription("Creates a mesh (nodes and elements) for the Components");
      29       15036 :   MooseEnum dims("1=1 2 3", "3");
      30       15036 :   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        7518 :   params.set<bool>("allow_renumbering") = false;
      33        7518 :   return params;
      34        7518 : }
      35             : 
      36        3759 : THMMesh::THMMesh(const InputParameters & parameters)
      37             :   : MooseMesh(parameters),
      38        3759 :     _dim(getParam<MooseEnum>("dim")),
      39        3759 :     _next_node_id(0),
      40        3759 :     _next_element_id(0),
      41        3759 :     _next_subdomain_id(0),
      42        3759 :     _next_boundary_id(0)
      43             : {
      44        3759 : }
      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      201626 : THMMesh::dimension() const
      58             : {
      59      201626 :   return _dim;
      60             : }
      61             : 
      62             : unsigned int
      63         650 : THMMesh::effectiveSpatialDimension() const
      64             : {
      65         650 :   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      445053 : THMMesh::getNextNodeId()
      82             : {
      83      445053 :   dof_id_type id = _next_node_id++;
      84      445053 :   return id;
      85             : }
      86             : 
      87             : dof_id_type
      88      380132 : THMMesh::getNextElementId()
      89             : {
      90      380132 :   dof_id_type id = _next_element_id++;
      91      380132 :   return id;
      92             : }
      93             : 
      94             : Node *
      95      445053 : THMMesh::addNode(const Point & pt)
      96             : {
      97      445053 :   dof_id_type id = getNextNodeId();
      98      445053 :   Node * node = _mesh->add_point(pt, id);
      99      445053 :   return node;
     100             : }
     101             : 
     102             : Elem *
     103       50340 : THMMesh::addElement(libMesh::ElemType elem_type, const std::vector<dof_id_type> & node_ids)
     104             : {
     105       50340 :   dof_id_type elem_id = getNextElementId();
     106             : 
     107       50340 :   Elem * elem = libMesh::Elem::build(elem_type).release();
     108             :   elem->set_id(elem_id);
     109       50340 :   _mesh->add_elem(elem);
     110      441588 :   for (std::size_t i = 0; i < node_ids.size(); i++)
     111      391248 :     elem->set_node(i, _mesh->node_ptr(node_ids[i]));
     112       50340 :   return elem;
     113             : }
     114             : 
     115             : Elem *
     116        1099 : THMMesh::addNodeElement(dof_id_type node)
     117             : {
     118        1099 :   dof_id_type elem_id = getNextElementId();
     119             : 
     120        1099 :   Elem * elem = new NodeElem;
     121             :   elem->set_id(elem_id);
     122        1099 :   _mesh->add_elem(elem);
     123        1099 :   elem->set_node(0, _mesh->node_ptr(node));
     124        1099 :   return elem;
     125             : }
     126             : 
     127             : Elem *
     128      113073 : THMMesh::addElementEdge2(dof_id_type node0, dof_id_type node1)
     129             : {
     130      113073 :   dof_id_type elem_id = getNextElementId();
     131             : 
     132      113073 :   Elem * elem = new Edge2;
     133             :   elem->set_id(elem_id);
     134      113073 :   _mesh->add_elem(elem);
     135      113073 :   elem->set_node(0, _mesh->node_ptr(node0));
     136      113073 :   elem->set_node(1, _mesh->node_ptr(node1));
     137      113073 :   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      215582 : THMMesh::addElementQuad4(dof_id_type node0, dof_id_type node1, dof_id_type node2, dof_id_type node3)
     156             : {
     157      215582 :   dof_id_type elem_id = getNextElementId();
     158             : 
     159      215582 :   Elem * elem = new Quad4;
     160             :   elem->set_id(elem_id);
     161      215582 :   _mesh->add_elem(elem);
     162      215582 :   elem->set_node(0, _mesh->node_ptr(node0));
     163      215582 :   elem->set_node(1, _mesh->node_ptr(node1));
     164      215582 :   elem->set_node(2, _mesh->node_ptr(node2));
     165      215582 :   elem->set_node(3, _mesh->node_ptr(node3));
     166      215582 :   return elem;
     167             : }
     168             : 
     169             : Elem *
     170          38 : 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          38 :   dof_id_type elem_id = getNextElementId();
     181             : 
     182          38 :   Elem * elem = new Quad9;
     183             :   elem->set_id(elem_id);
     184          38 :   _mesh->add_elem(elem);
     185             :   // vertices
     186          38 :   elem->set_node(0, _mesh->node_ptr(node0));
     187          38 :   elem->set_node(1, _mesh->node_ptr(node1));
     188          38 :   elem->set_node(2, _mesh->node_ptr(node2));
     189          38 :   elem->set_node(3, _mesh->node_ptr(node3));
     190             :   // mid-edges
     191          76 :   elem->set_node(4, _mesh->node_ptr(node4));
     192          38 :   elem->set_node(5, _mesh->node_ptr(node5));
     193          38 :   elem->set_node(6, _mesh->node_ptr(node6));
     194          38 :   elem->set_node(7, _mesh->node_ptr(node7));
     195             :   // center
     196          38 :   elem->set_node(8, _mesh->node_ptr(node8));
     197             : 
     198          38 :   return elem;
     199             : }
     200             : 
     201             : SubdomainID
     202        7927 : THMMesh::getNextSubdomainId()
     203             : {
     204        7927 :   SubdomainID id = _next_subdomain_id++;
     205        7927 :   return id;
     206             : }
     207             : 
     208             : BoundaryID
     209       31840 : THMMesh::getNextBoundaryId()
     210             : {
     211       31840 :   BoundaryID id = _next_boundary_id++;
     212       31840 :   return id;
     213             : }

Generated by: LCOV version 1.14