LCOV - code coverage report
Current view: top level - src/meshgenerators - DetailedPinMeshGeneratorBase.C (source / functions) Hit Total Coverage
Test: idaholab/moose subchannel: #31405 (292dce) with base fef103 Lines: 54 55 98.2 %
Date: 2025-09-04 07:58:06 Functions: 3 3 100.0 %
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 "DetailedPinMeshGeneratorBase.h"
      11             : #include "libmesh/cell_prism6.h"
      12             : 
      13             : InputParameters
      14          68 : DetailedPinMeshGeneratorBase::validParams()
      15             : {
      16          68 :   InputParameters params = MeshGenerator::validParams();
      17          68 :   params.addClassDescription(
      18             :       "Base Class used to create the detailed pin mesh in a square lattice arrangement");
      19         136 :   params.addRequiredParam<Real>("pitch", "Pitch [m]");
      20         136 :   params.addRequiredParam<Real>("pin_diameter", "Rod diameter [m]");
      21         136 :   params.addParam<Real>("unheated_length_entry", 0.0, "Unheated length at entry [m]");
      22         136 :   params.addRequiredParam<Real>("heated_length", "Heated length [m]");
      23         136 :   params.addParam<Real>("unheated_length_exit", 0.0, "Unheated length at exit [m]");
      24         136 :   params.addRequiredParam<unsigned int>("n_cells", "The number of cells in the axial direction");
      25         136 :   params.addParam<unsigned int>("block_id", 1, "Block ID used for the mesh subdomain.");
      26         204 :   params.addRangeCheckedParam<unsigned int>("num_radial_parts",
      27         136 :                                             16,
      28             :                                             "num_radial_parts>=4",
      29             :                                             "Number of radial parts (must be at least 4).");
      30          68 :   return params;
      31           0 : }
      32             : 
      33          34 : DetailedPinMeshGeneratorBase::DetailedPinMeshGeneratorBase(const InputParameters & parameters)
      34             :   : MeshGenerator(parameters),
      35          34 :     _unheated_length_entry(getParam<Real>("unheated_length_entry")),
      36          68 :     _heated_length(getParam<Real>("heated_length")),
      37          68 :     _unheated_length_exit(getParam<Real>("unheated_length_exit")),
      38          68 :     _pitch(getParam<Real>("pitch")),
      39          68 :     _pin_diameter(getParam<Real>("pin_diameter")),
      40          68 :     _n_cells(getParam<unsigned int>("n_cells")),
      41          68 :     _block_id(getParam<unsigned int>("block_id")),
      42         102 :     _num_radial_parts(getParam<unsigned int>("num_radial_parts"))
      43             : {
      44          34 :   Real L = _unheated_length_entry + _heated_length + _unheated_length_exit;
      45          34 :   Real dz = L / _n_cells;
      46         612 :   for (unsigned int i = 0; i < _n_cells + 1; i++)
      47         578 :     _z_grid.push_back(dz * i);
      48          34 : }
      49             : 
      50             : void
      51         307 : DetailedPinMeshGeneratorBase::generatePin(std::unique_ptr<MeshBase> & mesh_base,
      52             :                                           const Point & center)
      53             : {
      54         307 :   const Real dalpha = 360. / _num_radial_parts;
      55         307 :   Real radius = _pin_diameter / 2.;
      56             : 
      57             :   // nodes
      58             :   std::vector<std::vector<Node *>> nodes;
      59         307 :   nodes.resize(_n_cells + 1);
      60        7674 :   for (unsigned int k = 0; k < _n_cells + 1; k++)
      61             :   {
      62        7367 :     const Real elev = _z_grid[k];
      63             :     // center node
      64        7367 :     nodes[k].push_back(mesh_base->add_point(Point(center(0), center(1), elev)));
      65             :     // ring around the center
      66             :     Real alpha = 0.;
      67      125239 :     for (unsigned int i = 0; i < _num_radial_parts; i++, alpha += dalpha)
      68             :     {
      69      117872 :       const Real dx = radius * std::cos(alpha * M_PI / 180.);
      70      117872 :       const Real dy = radius * std::sin(alpha * M_PI / 180.);
      71      117872 :       Point pt(center(0) + dx, center(1) + dy, elev);
      72      117872 :       nodes[k].push_back(mesh_base->add_point(pt));
      73             :     }
      74             :   }
      75             : 
      76             :   // elements
      77        7367 :   for (unsigned int k = 0; k < _n_cells; k++)
      78             :   {
      79      120020 :     for (unsigned int i = 0; i < _num_radial_parts; i++)
      80             :     {
      81      112960 :       Elem * elem = new Prism6;
      82      112960 :       elem->subdomain_id() = _block_id;
      83      112960 :       elem->set_id(_elem_id++);
      84      112960 :       mesh_base->add_elem(elem);
      85             :       const unsigned int ctr_idx = 0;
      86      112960 :       const unsigned int idx1 = (i % _num_radial_parts) + 1;
      87      112960 :       const unsigned int idx2 = ((i + 1) % _num_radial_parts) + 1;
      88      112960 :       elem->set_node(0, nodes[k][ctr_idx]);
      89      112960 :       elem->set_node(1, nodes[k][idx1]);
      90      112960 :       elem->set_node(2, nodes[k][idx2]);
      91      112960 :       elem->set_node(3, nodes[k + 1][ctr_idx]);
      92      112960 :       elem->set_node(4, nodes[k + 1][idx1]);
      93      112960 :       elem->set_node(5, nodes[k + 1][idx2]);
      94             :     }
      95             :   }
      96         307 : }

Generated by: LCOV version 1.14