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

Generated by: LCOV version 1.14