LCOV - code coverage report
Current view: top level - src/meshgenerators - SCMQuadSubChannelMeshGenerator.C (source / functions) Hit Total Coverage
Test: idaholab/moose subchannel: #31405 (292dce) with base fef103 Lines: 265 274 96.7 %
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 "SCMQuadSubChannelMeshGenerator.h"
      11             : #include "QuadSubChannelMesh.h"
      12             : #include "libmesh/edge_edge2.h"
      13             : #include <numeric>
      14             : 
      15             : registerMooseObject("SubChannelApp", SCMQuadSubChannelMeshGenerator);
      16             : registerMooseObjectRenamed("SubChannelApp",
      17             :                            QuadSubChannelMeshGenerator,
      18             :                            "06/30/2025 24:00",
      19             :                            SCMQuadSubChannelMeshGenerator);
      20             : 
      21             : InputParameters
      22         458 : SCMQuadSubChannelMeshGenerator::validParams()
      23             : {
      24         458 :   InputParameters params = MeshGenerator::validParams();
      25         458 :   params.addClassDescription("Creates a mesh of 1D subchannels in a square lattice arrangement");
      26         916 :   params.addRequiredParam<Real>("pitch", "Pitch [m]");
      27         916 :   params.addRequiredParam<Real>("pin_diameter", "Rod diameter [m]");
      28         916 :   params.addParam<Real>("unheated_length_entry", 0.0, "Unheated length at entry [m]");
      29         916 :   params.addRequiredParam<Real>("heated_length", "Heated length [m]");
      30         916 :   params.addParam<Real>("unheated_length_exit", 0.0, "Unheated length at exit [m]");
      31         916 :   params.addParam<std::vector<Real>>(
      32             :       "spacer_z", {}, "Axial location of spacers/vanes/mixing_vanes [m]");
      33         916 :   params.addParam<std::vector<Real>>(
      34             :       "spacer_k", {}, "K-loss coefficient of spacers/vanes/mixing_vanes [-]");
      35         916 :   params.addParam<std::vector<Real>>("z_blockage",
      36         916 :                                      std::vector<Real>({0.0, 0.0}),
      37             :                                      "axial location of blockage (inlet, outlet) [m]");
      38         916 :   params.addParam<std::vector<unsigned int>>("index_blockage",
      39         916 :                                              std::vector<unsigned int>({0}),
      40             :                                              "index of subchannels affected by blockage");
      41         916 :   params.addParam<std::vector<Real>>(
      42             :       "reduction_blockage",
      43         916 :       std::vector<Real>({1.0}),
      44             :       "Area reduction of subchannels affected by blockage (number to muliply the area)");
      45         916 :   params.addParam<std::vector<Real>>("k_blockage",
      46         916 :                                      std::vector<Real>({0.0}),
      47             :                                      "Form loss coefficient of subchannels affected by blockage");
      48             : 
      49         916 :   params.addParam<Real>("Kij", 0.5, "Lateral form loss coefficient [-]");
      50         916 :   params.addRequiredParam<unsigned int>("n_cells", "The number of cells in the axial direction");
      51         916 :   params.addRequiredParam<unsigned int>("nx", "Number of channels in the x direction [-]");
      52         916 :   params.addRequiredParam<unsigned int>("ny", "Number of channels in the y direction [-]");
      53         916 :   params.addRequiredParam<Real>(
      54             :       "gap",
      55             :       "The side gap, not to be confused with the gap between pins, this refers to the gap "
      56             :       "next to the duct or else the distance between the subchannel centroid to the duct wall."
      57             :       "distance(edge pin center, duct wall) = pitch / 2 + side_gap [m]");
      58         916 :   params.deprecateParam("gap", "side_gap", "08/06/2026");
      59         916 :   params.addParam<unsigned int>("block_id", 0, "Domain Index");
      60         458 :   return params;
      61           0 : }
      62             : 
      63         230 : SCMQuadSubChannelMeshGenerator::SCMQuadSubChannelMeshGenerator(const InputParameters & params)
      64             :   : MeshGenerator(params),
      65         230 :     _unheated_length_entry(getParam<Real>("unheated_length_entry")),
      66         460 :     _heated_length(getParam<Real>("heated_length")),
      67         460 :     _unheated_length_exit(getParam<Real>("unheated_length_exit")),
      68         460 :     _spacer_z(getParam<std::vector<Real>>("spacer_z")),
      69         460 :     _spacer_k(getParam<std::vector<Real>>("spacer_k")),
      70         460 :     _z_blockage(getParam<std::vector<Real>>("z_blockage")),
      71         460 :     _index_blockage(getParam<std::vector<unsigned int>>("index_blockage")),
      72         460 :     _reduction_blockage(getParam<std::vector<Real>>("reduction_blockage")),
      73         460 :     _k_blockage(getParam<std::vector<Real>>("k_blockage")),
      74         460 :     _kij(getParam<Real>("Kij")),
      75         460 :     _pitch(getParam<Real>("pitch")),
      76         460 :     _pin_diameter(getParam<Real>("pin_diameter")),
      77         460 :     _n_cells(getParam<unsigned int>("n_cells")),
      78         460 :     _nx(getParam<unsigned int>("nx")),
      79         460 :     _ny(getParam<unsigned int>("ny")),
      80         230 :     _n_channels(_nx * _ny),
      81         230 :     _n_gaps((_nx - 1) * _ny + (_ny - 1) * _nx),
      82         230 :     _n_pins((_nx - 1) * (_ny - 1)),
      83         460 :     _side_gap(getParam<Real>("side_gap")),
      84         690 :     _block_id(getParam<unsigned int>("block_id"))
      85             : {
      86         230 :   if (_spacer_z.size() != _spacer_k.size())
      87           0 :     mooseError(name(), ": Size of vector spacer_z should be equal to size of vector spacer_k");
      88             : 
      89         230 :   if (_spacer_z.size() &&
      90         206 :       _spacer_z.back() > _unheated_length_entry + _heated_length + _unheated_length_exit)
      91           0 :     mooseError(name(), ": Location of spacers should be less than the total bundle length");
      92             : 
      93         230 :   if (_z_blockage.size() != 2)
      94           0 :     mooseError(name(), ": Size of vector z_blockage must be 2");
      95             : 
      96         230 :   if (*max_element(_index_blockage.begin(), _index_blockage.end()) > (_n_channels - 1))
      97           0 :     mooseError(name(),
      98             :                ": The index of the blocked subchannel cannot be more than the max index of the "
      99             :                "subchannels");
     100             : 
     101         230 :   if (*max_element(_reduction_blockage.begin(), _reduction_blockage.end()) > 1)
     102           0 :     mooseError(name(), ": The area reduction of the blocked subchannels cannot be more than 1");
     103             : 
     104         230 :   if ((_index_blockage.size() > _nx * _ny) || (_reduction_blockage.size() > _nx * _ny) ||
     105             :       (_k_blockage.size() > _nx * _ny))
     106           0 :     mooseError(name(),
     107             :                ": Size of vectors: index_blockage, reduction_blockage, k_blockage, cannot be more "
     108             :                "than the total number of subchannels");
     109             : 
     110         230 :   if ((_index_blockage.size() != _reduction_blockage.size()) ||
     111         460 :       (_index_blockage.size() != _k_blockage.size()) ||
     112             :       (_reduction_blockage.size() != _k_blockage.size()))
     113           0 :     mooseError(name(),
     114             :                ": Size of vectors: index_blockage, reduction_blockage, k_blockage, must be equal "
     115             :                "to eachother");
     116             : 
     117         230 :   if (_nx < 2 && _ny < 2)
     118           2 :     mooseError(name(),
     119             :                ": The number of subchannels cannot be less than 2 in both directions (x and y). "
     120             :                "Smallest assembly allowed is either 2X1 or 1X2. ");
     121             : 
     122         228 :   SubChannelMesh::generateZGrid(
     123         228 :       _unheated_length_entry, _heated_length, _unheated_length_exit, _n_cells, _z_grid);
     124             : 
     125             :   // Defining the total length from 3 axial sections
     126         228 :   Real L = _unheated_length_entry + _heated_length + _unheated_length_exit;
     127             : 
     128             :   // Defining the position of the spacer grid in the numerical solution array
     129             :   std::vector<int> spacer_cell;
     130         657 :   for (const auto & elem : _spacer_z)
     131         429 :     spacer_cell.emplace_back(std::round(elem * _n_cells / L));
     132             : 
     133             :   // Defining the arrays for axial resistances
     134             :   std::vector<Real> kgrid;
     135         228 :   kgrid.resize(_n_cells + 1, 0.0);
     136         228 :   _k_grid.resize(_n_channels, std::vector<Real>(_n_cells + 1));
     137             : 
     138             :   // Summing the spacer resistance to the 1D grid resistance array
     139         657 :   for (unsigned int index = 0; index < spacer_cell.size(); index++)
     140         429 :     kgrid[spacer_cell[index]] += _spacer_k[index];
     141             : 
     142             :   // Creating the 2D grid resistance array
     143        4546 :   for (unsigned int i = 0; i < _n_channels; i++)
     144        4318 :     _k_grid[i] = kgrid;
     145             : 
     146             :   // Add blockage resistance to the 2D grid resistane array
     147         228 :   Real dz = L / _n_cells;
     148        5421 :   for (unsigned int i = 0; i < _n_cells + 1; i++)
     149             :   {
     150        5193 :     if ((dz * i >= _z_blockage.front() && dz * i <= _z_blockage.back()))
     151             :     {
     152             :       unsigned int index(0);
     153         456 :       for (const auto & i_ch : _index_blockage)
     154             :       {
     155         228 :         _k_grid[i_ch][i] += _k_blockage[index];
     156         228 :         index++;
     157             :       }
     158             :     }
     159             :   }
     160             : 
     161             :   // Defining the size of the maps
     162         228 :   _gap_to_chan_map.resize(_n_gaps);
     163         228 :   _gap_to_pin_map.resize(_n_gaps);
     164         228 :   _gapnodes.resize(_n_gaps);
     165         228 :   _chan_to_gap_map.resize(_n_channels);
     166         228 :   _chan_to_pin_map.resize(_n_channels);
     167         228 :   _pin_to_chan_map.resize(_n_pins);
     168         228 :   _sign_id_crossflow_map.resize(_n_channels);
     169         228 :   _gij_map.resize(_n_cells + 1);
     170         228 :   _subchannel_position.resize(_n_channels);
     171             : 
     172        4546 :   for (unsigned int i = 0; i < _n_channels; i++)
     173             :   {
     174        4318 :     _subchannel_position[i].reserve(3);
     175       17272 :     for (unsigned int j = 0; j < 3; j++)
     176             :     {
     177       12954 :       _subchannel_position.at(i).push_back(0.0);
     178             :     }
     179             :   }
     180             : 
     181        5421 :   for (unsigned int iz = 0; iz < _n_cells + 1; iz++)
     182             :   {
     183        5193 :     _gij_map[iz].reserve(_n_gaps);
     184             :   }
     185             : 
     186             :   // Defining the signs for positive and negative flows
     187         228 :   Real positive_flow = 1.0;
     188         228 :   Real negative_flow = -1.0;
     189             : 
     190             :   // Defining the subchannel types
     191         228 :   _subch_type.resize(_n_channels);
     192        1130 :   for (unsigned int iy = 0; iy < _ny; iy++)
     193             :   {
     194        5220 :     for (unsigned int ix = 0; ix < _nx; ix++)
     195             :     {
     196        4318 :       unsigned int i_ch = _nx * iy + ix;
     197        4090 :       bool is_corner = (ix == 0 && iy == 0) || (ix == _nx - 1 && iy == 0) ||
     198        8186 :                        (ix == 0 && iy == _ny - 1) || (ix == _nx - 1 && iy == _ny - 1);
     199        4318 :       bool is_edge = (ix == 0 || iy == 0 || ix == _nx - 1 || iy == _ny - 1);
     200             : 
     201        4318 :       if (_n_channels == 2)
     202             :       {
     203          36 :         _subch_type[i_ch] = EChannelType::CENTER;
     204             :       }
     205        4282 :       else if (_n_channels == 4)
     206             :       {
     207          16 :         _subch_type[i_ch] = EChannelType::CORNER;
     208             :       }
     209             :       else
     210             :       {
     211        4266 :         if (is_corner)
     212         824 :           _subch_type[i_ch] = EChannelType::CORNER;
     213        3442 :         else if (is_edge)
     214        1928 :           _subch_type[i_ch] = EChannelType::EDGE;
     215             :         else
     216        1514 :           _subch_type[i_ch] = EChannelType::CENTER;
     217             :       }
     218             :     }
     219             :   }
     220             : 
     221             :   // Index the east-west gaps.
     222         228 :   unsigned int i_gap = 0;
     223        1130 :   for (unsigned int iy = 0; iy < _ny; iy++)
     224             :   {
     225        4318 :     for (unsigned int ix = 0; ix < _nx - 1; ix++)
     226             :     {
     227        3416 :       unsigned int i_ch = _nx * iy + ix;
     228        3416 :       unsigned int j_ch = _nx * iy + (ix + 1);
     229        3416 :       _gap_to_chan_map[i_gap] = {i_ch, j_ch};
     230        3416 :       _chan_to_gap_map[i_ch].push_back(i_gap);
     231        3416 :       _chan_to_gap_map[j_ch].push_back(i_gap);
     232        3416 :       _sign_id_crossflow_map[i_ch].push_back(positive_flow);
     233        3416 :       _sign_id_crossflow_map[j_ch].push_back(negative_flow);
     234             : 
     235             :       // make a gap size map
     236        3416 :       if (iy == 0 || iy == _ny - 1)
     237        1444 :         _gij_map[0].push_back((_pitch - _pin_diameter) / 2 + _side_gap);
     238             :       else
     239        1972 :         _gij_map[0].push_back(_pitch - _pin_diameter);
     240        3416 :       ++i_gap;
     241             :     }
     242             :   }
     243             : 
     244             :   // Index the north-south gaps.
     245         902 :   for (unsigned int iy = 0; iy < _ny - 1; iy++)
     246             :   {
     247        4036 :     for (unsigned int ix = 0; ix < _nx; ix++)
     248             :     {
     249        3362 :       unsigned int i_ch = _nx * iy + ix;
     250        3362 :       unsigned int j_ch = _nx * (iy + 1) + ix;
     251        3362 :       _gap_to_chan_map[i_gap] = {i_ch, j_ch};
     252        3362 :       _chan_to_gap_map[i_ch].push_back(i_gap);
     253        3362 :       _chan_to_gap_map[j_ch].push_back(i_gap);
     254        3362 :       _sign_id_crossflow_map[i_ch].push_back(positive_flow);
     255        3362 :       _sign_id_crossflow_map[j_ch].push_back(negative_flow);
     256             : 
     257             :       // make a gap size map
     258        3362 :       if (ix == 0 || ix == _nx - 1)
     259        1342 :         _gij_map[0].push_back((_pitch - _pin_diameter) / 2 + _side_gap);
     260             :       else
     261        2020 :         _gij_map[0].push_back(_pitch - _pin_diameter);
     262        3362 :       ++i_gap;
     263             :     }
     264             :   }
     265             : 
     266        5193 :   for (unsigned int iz = 1; iz < _n_cells + 1; iz++)
     267             :   {
     268        4965 :     _gij_map[iz] = _gij_map[0];
     269             :   }
     270             : 
     271             :   // Make pin to channel map
     272         902 :   for (unsigned int iy = 0; iy < _ny - 1; iy++)
     273             :   {
     274        3362 :     for (unsigned int ix = 0; ix < _nx - 1; ix++)
     275             :     {
     276        2688 :       unsigned int i_pin = (_nx - 1) * iy + ix;
     277        2688 :       unsigned int i_chan_1 = _nx * iy + ix;
     278        2688 :       unsigned int i_chan_2 = _nx * (iy + 1) + ix;
     279        2688 :       unsigned int i_chan_3 = _nx * (iy + 1) + (ix + 1);
     280        2688 :       unsigned int i_chan_4 = _nx * iy + (ix + 1);
     281        2688 :       _pin_to_chan_map[i_pin].push_back(i_chan_1);
     282        2688 :       _pin_to_chan_map[i_pin].push_back(i_chan_2);
     283        2688 :       _pin_to_chan_map[i_pin].push_back(i_chan_3);
     284        2688 :       _pin_to_chan_map[i_pin].push_back(i_chan_4);
     285             :     }
     286             :   }
     287             : 
     288             :   // Make channel to pin map
     289        1130 :   for (unsigned int iy = 0; iy < _ny; iy++) // row
     290             :   {
     291        5220 :     for (unsigned int ix = 0; ix < _nx; ix++) // column
     292             :     {
     293        4318 :       unsigned int i_ch = _nx * iy + ix;
     294             :       // Corners contact 1/4 of one pin
     295        4318 :       if (iy == 0 && ix == 0)
     296             :       {
     297         228 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix);
     298             :       }
     299        4090 :       else if (iy == _ny - 1 && ix == 0)
     300             :       {
     301         216 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix);
     302             :       }
     303        3874 :       else if (iy == 0 && ix == _nx - 1)
     304             :       {
     305         222 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix - 1);
     306             :       }
     307        3652 :       else if (iy == _ny - 1 && ix == _nx - 1)
     308             :       {
     309         210 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix - 1);
     310             :       }
     311             :       // Sides contact 1/4 of two pins
     312        3442 :       else if (iy == 0)
     313             :       {
     314         506 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix);
     315         506 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix - 1);
     316             :       }
     317        2936 :       else if (iy == _ny - 1)
     318             :       {
     319         506 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix);
     320         506 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix - 1);
     321             :       }
     322        2430 :       else if (ix == 0)
     323             :       {
     324         458 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix);
     325         458 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix);
     326             :       }
     327        1972 :       else if (ix == _nx - 1)
     328             :       {
     329         458 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix - 1);
     330         458 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix - 1);
     331             :       }
     332             :       // interior contacts 1/4 of 4 pins
     333             :       else
     334             :       {
     335        1514 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix);
     336        1514 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * iy + ix - 1);
     337        1514 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix);
     338        1514 :         _chan_to_pin_map[i_ch].push_back((_nx - 1) * (iy - 1) + ix - 1);
     339             :       }
     340             : 
     341             :       // set the subchannel positions
     342        4318 :       Real offset_x = (_nx - 1) * _pitch / 2.0;
     343        4318 :       Real offset_y = (_ny - 1) * _pitch / 2.0;
     344        4318 :       _subchannel_position[i_ch][0] = _pitch * ix - offset_x;
     345        4318 :       _subchannel_position[i_ch][1] = _pitch * iy - offset_y;
     346             :     }
     347             :   }
     348             : 
     349             :   // Make gap to pin map
     350        7006 :   for (unsigned int i_gap = 0; i_gap < _n_gaps; i_gap++)
     351             :   {
     352        6778 :     auto i_ch = _gap_to_chan_map[i_gap].first;
     353        6778 :     auto j_ch = _gap_to_chan_map[i_gap].second;
     354        6778 :     auto i_pins = _chan_to_pin_map[i_ch];
     355        6778 :     auto j_pins = _chan_to_pin_map[j_ch];
     356             :     _gap_to_pin_map[i_gap] = {10000, 10000}; // Initialize with default values
     357             : 
     358       25532 :     for (unsigned int i : i_pins)
     359             :     {
     360       74948 :       for (unsigned int j : j_pins)
     361             :       {
     362       56194 :         if (i == j)
     363             :         {
     364       10770 :           if (_gap_to_pin_map[i_gap].first == 10000)
     365             :           {
     366        6778 :             _gap_to_pin_map[i_gap].first = i;
     367        6778 :             _gap_to_pin_map[i_gap].second = i;
     368             :           }
     369             :           else
     370             :           {
     371        3992 :             _gap_to_pin_map[i_gap].second = i;
     372             :           }
     373             :         }
     374             :       }
     375             :     }
     376        6778 :   }
     377             : 
     378             :   // Reduce reserved memory in the channel-to-gap map.
     379        4546 :   for (auto & gap : _chan_to_gap_map)
     380             :     gap.shrink_to_fit();
     381             : 
     382             :   // Reduce reserved memory in the channel-to-pin map.
     383        4546 :   for (auto & pin : _chan_to_pin_map)
     384             :     pin.shrink_to_fit();
     385             : 
     386             :   // Reduce reserved memory in the pin-to-channel map.
     387        2916 :   for (auto & pin : _pin_to_chan_map)
     388             :     pin.shrink_to_fit();
     389         228 : }
     390             : 
     391             : std::unique_ptr<MeshBase>
     392         228 : SCMQuadSubChannelMeshGenerator::generate()
     393             : {
     394         228 :   auto mesh_base = buildMeshBaseObject();
     395             :   BoundaryInfo & boundary_info = mesh_base->get_boundary_info();
     396         228 :   mesh_base->set_spatial_dimension(3);
     397         228 :   mesh_base->reserve_elem(_n_cells * _ny * _nx);
     398         228 :   mesh_base->reserve_nodes((_n_cells + 1) * _ny * _nx);
     399         228 :   _nodes.resize(_nx * _ny);
     400             :   // Add the points in the shape of a rectilinear grid.  The grid is regular
     401             :   // on the xy-plane with a spacing of `pitch` between points.  The grid along
     402             :   // z is irregular to account for Pin spacers.  Store pointers in the _nodes
     403             :   // array so we can keep track of which points are in which channels.
     404         228 :   Real offset_x = (_nx - 1) * _pitch / 2.0;
     405         228 :   Real offset_y = (_ny - 1) * _pitch / 2.0;
     406             :   unsigned int node_id = 0;
     407        1130 :   for (unsigned int iy = 0; iy < _ny; iy++)
     408             :   {
     409        5220 :     for (unsigned int ix = 0; ix < _nx; ix++)
     410             :     {
     411        4318 :       int i_ch = _nx * iy + ix;
     412        4318 :       _nodes[i_ch].reserve(_n_cells);
     413       83046 :       for (unsigned int iz = 0; iz < _n_cells + 1; iz++)
     414             :       {
     415       78728 :         _nodes[i_ch].push_back(mesh_base->add_point(
     416      157456 :             Point(_pitch * ix - offset_x, _pitch * iy - offset_y, _z_grid[iz]), node_id++));
     417             :       }
     418             :     }
     419             :   }
     420             : 
     421             :   // Add the elements which in this case are 2-node edges that link each
     422             :   // subchannel's nodes vertically.
     423             :   unsigned int elem_id = 0;
     424        1130 :   for (unsigned int iy = 0; iy < _ny; iy++)
     425             :   {
     426        5220 :     for (unsigned int ix = 0; ix < _nx; ix++)
     427             :     {
     428       78728 :       for (unsigned int iz = 0; iz < _n_cells; iz++)
     429             :       {
     430       74410 :         Elem * elem = new Edge2;
     431       74410 :         elem->subdomain_id() = _block_id;
     432       74410 :         elem->set_id(elem_id++);
     433       74410 :         elem = mesh_base->add_elem(elem);
     434       74410 :         const int indx1 = ((_n_cells + 1) * _nx) * iy + (_n_cells + 1) * ix + iz;
     435       74410 :         const int indx2 = ((_n_cells + 1) * _nx) * iy + (_n_cells + 1) * ix + (iz + 1);
     436       74410 :         elem->set_node(0, mesh_base->node_ptr(indx1));
     437       74410 :         elem->set_node(1, mesh_base->node_ptr(indx2));
     438             : 
     439       74410 :         if (iz == 0)
     440        4318 :           boundary_info.add_side(elem, 0, 0);
     441       74410 :         if (iz == _n_cells - 1)
     442        4318 :           boundary_info.add_side(elem, 1, 1);
     443             :       }
     444             :     }
     445             :   }
     446             : 
     447         228 :   boundary_info.sideset_name(0) = "inlet";
     448         228 :   boundary_info.sideset_name(1) = "outlet";
     449         228 :   boundary_info.nodeset_name(0) = "inlet";
     450         228 :   boundary_info.nodeset_name(1) = "outlet";
     451         228 :   mesh_base->subdomain_name(_block_id) = name();
     452         228 :   mesh_base->prepare_for_use();
     453             : 
     454             :   // move the meta data into QuadSubChannelMesh
     455         228 :   auto & sch_mesh = static_cast<QuadSubChannelMesh &>(*_mesh);
     456         228 :   sch_mesh._unheated_length_entry = _unheated_length_entry;
     457         228 :   sch_mesh._heated_length = _heated_length;
     458         228 :   sch_mesh._unheated_length_exit = _unheated_length_exit;
     459         228 :   sch_mesh._z_grid = _z_grid;
     460         228 :   sch_mesh._k_grid = _k_grid;
     461         228 :   sch_mesh._spacer_z = _spacer_z;
     462         228 :   sch_mesh._spacer_k = _spacer_k;
     463         228 :   sch_mesh._z_blockage = _z_blockage;
     464         228 :   sch_mesh._index_blockage = _index_blockage;
     465         228 :   sch_mesh._reduction_blockage = _reduction_blockage;
     466         228 :   sch_mesh._kij = _kij;
     467         228 :   sch_mesh._pitch = _pitch;
     468         228 :   sch_mesh._pin_diameter = _pin_diameter;
     469         228 :   sch_mesh._n_cells = _n_cells;
     470         228 :   sch_mesh._nx = _nx;
     471         228 :   sch_mesh._ny = _ny;
     472         228 :   sch_mesh._n_channels = _n_channels;
     473         228 :   sch_mesh._n_gaps = _n_gaps;
     474         228 :   sch_mesh._n_pins = _n_pins;
     475         228 :   sch_mesh._side_gap = _side_gap;
     476         228 :   sch_mesh._nodes = _nodes;
     477         228 :   sch_mesh._gapnodes = _gapnodes;
     478         228 :   sch_mesh._gap_to_chan_map = _gap_to_chan_map;
     479         228 :   sch_mesh._gap_to_pin_map = _gap_to_pin_map;
     480         228 :   sch_mesh._chan_to_gap_map = _chan_to_gap_map;
     481         228 :   sch_mesh._chan_to_pin_map = _chan_to_pin_map;
     482         228 :   sch_mesh._pin_to_chan_map = _pin_to_chan_map;
     483         228 :   sch_mesh._sign_id_crossflow_map = _sign_id_crossflow_map;
     484         228 :   sch_mesh._gij_map = _gij_map;
     485         228 :   sch_mesh._subchannel_position = _subchannel_position;
     486         228 :   sch_mesh._subch_type = _subch_type;
     487             : 
     488         228 :   return mesh_base;
     489           0 : }

Generated by: LCOV version 1.14