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

Generated by: LCOV version 1.14