https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
SCMTriInterWrapperMeshGenerator Class Reference

Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies. More...

#include <SCMTriInterWrapperMeshGenerator.h>

Inheritance diagram for SCMTriInterWrapperMeshGenerator:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 SCMTriInterWrapperMeshGenerator (const InputParameters &parameters)
 
std::unique_ptr< MeshBase > generate () override
 
std::unique_ptr< MeshBase > generateInternal ()
 
const std::set< MeshGeneratorName > & getRequestedMeshGenerators () const
 
const std::set< MeshGeneratorName > & getRequestedMeshGeneratorsForSub () const
 
void addParentMeshGenerator (const MeshGenerator &mg, const AddParentChildKey)
 
void addChildMeshGenerator (const MeshGenerator &mg, const AddParentChildKey)
 
const std::set< const MeshGenerator *, Comparator > & getParentMeshGenerators () const
 
const std::set< const MeshGenerator *, Comparator > & getChildMeshGenerators () const
 
const std::set< const MeshGenerator *, Comparator > & getSubMeshGenerators () const
 
bool isParentMeshGenerator (const MeshGeneratorName &name, const bool direct=true) const
 
bool isChildMeshGenerator (const MeshGeneratorName &name, const bool direct=true) const
 
bool isNullMeshName (const MeshGeneratorName &name) const
 
bool hasSaveMesh () const
 
bool hasOutput () const
 
const std::string & getSavedMeshName () const
 
bool hasGenerateData () const
 
bool isDataOnly () const
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
virtual const std::string & name () const
 
std::string typeAndName () const
 
std::string errorPrefix (const std::string &error_type) const
 
void callMooseError (std::string msg, const bool with_prefix) const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
const InputParametersparameters () const
 
MooseObjectName uniqueName () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &nm) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void mooseError (Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static bool hasGenerateData (const InputParameters &params)
 
static void setHasGenerateData (InputParameters &params)
 

Public Attributes

const ConsoleStream _console
 

Static Public Attributes

static const std::string data_only_param
 
static constexpr auto SYSTEM
 
static constexpr auto NAME
 

Protected Member Functions

virtual void generateData ()
 
T & copyMeshProperty (const std::string &target_data_name, const std::string &source_data_name, const std::string &source_mesh)
 
T & copyMeshProperty (const std::string &source_data_name, const std::string &source_mesh)
 
std::unique_ptr< MeshBase > & getMesh (const std::string &param_name, const bool allow_invalid=false)
 
std::vector< std::unique_ptr< MeshBase > *> getMeshes (const std::string &param_name)
 
std::unique_ptr< MeshBase > & getMeshByName (const MeshGeneratorName &mesh_generator_name)
 
std::vector< std::unique_ptr< MeshBase > *> getMeshesByName (const std::vector< MeshGeneratorName > &mesh_generator_names)
 
void declareMeshForSub (const std::string &param_name)
 
void declareMeshesForSub (const std::string &param_name)
 
void declareMeshForSubByName (const MeshGeneratorName &mesh_generator_name)
 
void declareMeshesForSubByName (const std::vector< MeshGeneratorName > &mesh_generator_names)
 
std::unique_ptr< MeshBase > buildMeshBaseObject (unsigned int dim=libMesh::invalid_uint)
 
std::unique_ptr< ReplicatedMesh > buildReplicatedMesh (unsigned int dim=libMesh::invalid_uint)
 
std::unique_ptr< DistributedMesh > buildDistributedMesh (unsigned int dim=libMesh::invalid_uint)
 
void addMeshSubgenerator (const std::string &type, const std::string &name, Ts... extra_input_parameters)
 
void addMeshSubgenerator (const std::string &type, const std::string &name, InputParameters params)
 
void declareNullMeshName (const MeshGeneratorName &name)
 
const T & getMeshProperty (const std::string &data_name, const std::string &prefix)
 
const T & getMeshProperty (const std::string &data_name)
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name) const
 
bool hasMeshProperty (const std::string &data_name) const
 
std::string meshPropertyName (const std::string &data_name) const
 
T & declareMeshProperty (const std::string &data_name, Args &&... args)
 
T & declareMeshProperty (const std::string &data_name, const T &data_value)
 
T & declareMeshProperty (const std::string &data_name, Args &&... args)
 
T & declareMeshProperty (const std::string &data_name, const T &data_value)
 
T & setMeshProperty (const std::string &data_name, Args &&... args)
 
T & setMeshProperty (const std::string &data_name, const T &data_value)
 
T & setMeshProperty (const std::string &data_name, Args &&... args)
 
T & setMeshProperty (const std::string &data_name, const T &data_value)
 

Static Protected Member Functions

static std::string meshPropertyName (const std::string &data_name, const std::string &prefix)
 

Protected Attributes

const Real _unheated_length_entry
 unheated length of the fuel Pin at the entry of the assembly More...
 
const Real _heated_length
 heated length of the fuel Pin More...
 
const Real _unheated_length_exit
 unheated length of the fuel Pin at the exit of the assembly More...
 
const Real_kij
 Lateral form loss coefficient. More...
 
std::vector< Real_z_grid
 axial location of nodes More...
 
std::vector< std::vector< Real > > _k_grid
 axial form loss coefficient per computational cell More...
 
const Real _assembly_pitch
 Distance between the neighbor fuel pins, assembly_pitch. More...
 
const unsigned int _n_cells
 number of axial cells More...
 
const unsigned int _n_rings
 number of rings of fuel pins More...
 
unsigned int _n_channels
 number of subchannels More...
 
const Real _flat_to_flat
 the distance between flat surfaces of the duct facing each other More...
 
const Real _duct_to_pin_gap
 the gap thickness between the duct and peripheral fuel pins More...
 
const bool _tight_side_bypass
 whether the side bypass shape follows the hexagonal shape of the assemblies TODO: add a picture in the documentation of both tight and non-tight layouts More...
 
std::vector< std::vector< Node * > > _nodes
 nodes More...
 
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_chan_map
 stores the channel pairs for each gap More...
 
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_pin_map
 stores the fuel pin pairs for each gap each gap More...
 
std::vector< std::vector< unsigned int > > _chan_to_gap_map
 stores the gaps that forms each interstice More...
 
std::vector< std::vector< Real > > _sign_id_crossflow_map
 Defines the global cross-flow direction -1 or 1 for each interstice and for all gaps that are belonging to the corresponding interstice. More...
 
std::vector< Real_gij_map
 gap size More...
 
std::vector< std::vector< Real > > _subchannel_position
 x,y coordinates of the interstices More...
 
std::vector< Point > _pin_position
 x,y coordinates of the fuel pins More...
 
std::vector< std::vector< Real > > _pins_in_rings
 fuel pins that are belonging to each ring More...
 
std::vector< std::vector< unsigned int > > _chan_to_pin_map
 stores the fuel pins belonging to each interstice More...
 
unsigned int _n_assemblies
 number of assemblies More...
 
unsigned int _n_gaps
 number of gaps More...
 
std::vector< EChannelType_subch_type
 interstice type More...
 
std::vector< EChannelType_gap_type
 gap type More...
 
std::vector< std::pair< unsigned int, unsigned int > > _gap_pairs_sf
 sweeping flow model gap pairs per channel to specify directional edge flow More...
 
std::vector< std::pair< unsigned int, unsigned int > > _chan_pairs_sf
 sweeping flow model channel pairs to specify directional edge flow More...
 
MooseMesh *const _mesh
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
const Parallel::Communicator & _communicator
 

Detailed Description

Mesh class for triangular, edge and corner subchannels for hexagonal lattice fuel assemblies.

Definition at line 18 of file SCMTriInterWrapperMeshGenerator.h.

Constructor & Destructor Documentation

◆ SCMTriInterWrapperMeshGenerator()

SCMTriInterWrapperMeshGenerator::SCMTriInterWrapperMeshGenerator ( const InputParameters parameters)

Re-sizing the object lists with the right number of channels

initial assignment

Definition at line 46 of file SCMTriInterWrapperMeshGenerator.C.

47  : MeshGenerator(params),
48  _unheated_length_entry(getParam<Real>("unheated_length_entry")),
49  _heated_length(getParam<Real>("heated_length")),
50  _unheated_length_exit(getParam<Real>("unheated_length_exit")),
51  _kij(getParam<Real>("Kij")),
52  _assembly_pitch(getParam<Real>("assembly_pitch")),
53  _n_cells(getParam<unsigned int>("n_cells")),
54  _n_rings(getParam<unsigned int>("nrings")),
55  _flat_to_flat(getParam<Real>("flat_to_flat")),
56  _duct_to_pin_gap(getParam<Real>("side_bypass")),
57  _tight_side_bypass(getParam<bool>("tight_side_bypass"))
58 {
59 
62 
63  // compute the hex mesh variables
64  // -------------------------------------------
65 
66  // x coordinate for the first position
67  Real x0 = 0.0;
68  // y coordinate for the first position
69  Real y0 = 0.0;
70  // x coordinate for the second position
71  Real x1 = 0.0;
72  // y coordinate for the second position dummy variable
73  Real y1 = 0.0;
74  // dummy variable
75  Real a1 = 0.0;
76  // dummy variable
77  Real a2 = 0.0;
78  // average x coordinate
79  Real avg_coor_x = 0.0;
80  // average y coordinate
81  Real avg_coor_y = 0.0;
82  // distance between two points
83  Real dist = 0.0;
84  // distance between two points
85  Real dist0 = 0.0;
86  // integer counter
87  unsigned int kgap = 0;
88  // dummy integer
89  unsigned int icorner = 0;
90  // used to defined global direction of the cross_flow_map coefficients for each subchannel and gap
91  const Real positive_flow = 1.0;
92  // used to defined global direction of the cross_flow_map coefficients for each subchannel and gap
93  const Real negative_flow = -1.0;
94  // the indicator used while setting _gap_to_chan_map array
95  std::vector<std::pair<unsigned int, unsigned int>> gap_fill;
98  // assign the assemblies to the corresponding rings
99  // TODO: add corner to the hexagonal assemblies
100  unsigned int k = 0; // initialize the fuel assembly counter index
101  _pins_in_rings.resize(_n_rings);
102  _pins_in_rings[0].push_back(k++);
103  for (unsigned int i = 1; i < _n_rings; i++)
104  for (unsigned int j = 0; j < i * 6; j++)
105  _pins_in_rings[i].push_back(k++);
106  // Given the number of pins and number of fuel Pin rings, the number of subchannels can be
107  // computed as follows:
108  unsigned int chancount = 0.0;
109  for (unsigned int j = 0; j < _n_rings - 1; j++)
110  chancount += j * 6;
111  _n_channels = chancount + _n_assemblies - 1 + (_n_rings - 1) * 6 + 6;
112 
113  // Defining the array for axial resistances
114  _k_grid.resize(_n_channels, std::vector<Real>(_n_cells + 1));
115 
118  _subch_type.resize(_n_channels);
120  _gap_to_chan_map.resize(_n_gaps);
121  gap_fill.resize(_n_gaps);
123  _gap_pairs_sf.resize(_n_channels);
124  _chan_pairs_sf.resize(_n_channels);
125  _gij_map.resize(_n_gaps);
127  _gap_to_pin_map.resize(_n_gaps);
128  _gap_type.resize(_n_gaps);
130 
131  for (unsigned int i = 0; i < _n_channels; i++)
132  {
133  _chan_to_pin_map[i].reserve(3);
134  _chan_to_gap_map[i].reserve(3);
135  _sign_id_crossflow_map[i].reserve(3);
136  _subchannel_position[i].reserve(3);
137  for (unsigned int j = 0; j < 3; j++)
138  {
139  _sign_id_crossflow_map.at(i).push_back(positive_flow);
140  _subchannel_position.at(i).push_back(0.0);
141  }
142  } // i
143 
144  // create the subchannels
145  k = 0; // initialize the subchannel counter index
146  kgap = 0;
147  // for each ring we trace the subchannels by pairing up to neighbor pins and looking for the third
148  // Pin at inner or outer ring compared to the current ring.
149  for (unsigned int i = 1; i < _n_rings; i++)
150  {
151  // find the closest Pin at back ring
152  for (unsigned int j = 0; j < _pins_in_rings[i].size(); j++)
153  {
154  if (j == _pins_in_rings[i].size() - 1)
155  {
156  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j]);
157  _chan_to_pin_map[k].push_back(_pins_in_rings[i][0]);
158  avg_coor_x =
159  0.5 * (_pin_position[_pins_in_rings[i][j]](0) + _pin_position[_pins_in_rings[i][0]](0));
160  avg_coor_y =
161  0.5 * (_pin_position[_pins_in_rings[i][j]](1) + _pin_position[_pins_in_rings[i][0]](1));
162  _gap_to_pin_map[kgap].first = _pins_in_rings[i][0];
163  _gap_to_pin_map[kgap].second = _pins_in_rings[i][j];
165  kgap = kgap + 1;
166  }
167  else
168  {
169  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j]);
170  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j + 1]);
171  avg_coor_x = 0.5 * (_pin_position[_pins_in_rings[i][j]](0) +
172  _pin_position[_pins_in_rings[i][j + 1]](0));
173  avg_coor_y = 0.5 * (_pin_position[_pins_in_rings[i][j]](1) +
174  _pin_position[_pins_in_rings[i][j + 1]](1));
175  _gap_to_pin_map[kgap].first = _pins_in_rings[i][j];
176  _gap_to_pin_map[kgap].second = _pins_in_rings[i][j + 1];
178  kgap = kgap + 1;
179  }
180 
181  dist0 = 1.0e+5;
182 
183  _chan_to_pin_map[k].push_back(_pins_in_rings[i - 1][0]);
184  unsigned int l0 = 0;
185 
186  for (unsigned int l = 0; l < _pins_in_rings[i - 1].size(); l++)
187  {
188  dist = std::sqrt(pow(_pin_position[_pins_in_rings[i - 1][l]](0) - avg_coor_x, 2) +
189  pow(_pin_position[_pins_in_rings[i - 1][l]](1) - avg_coor_y, 2));
190 
191  if (dist < dist0)
192  {
193  _chan_to_pin_map[k][2] = _pins_in_rings[i - 1][l];
194  l0 = l;
195  dist0 = dist;
196  } // if
197  } // l
198 
199  _gap_to_pin_map[kgap].first = _pins_in_rings[i][j];
200  _gap_to_pin_map[kgap].second = _pins_in_rings[i - 1][l0];
202  kgap = kgap + 1;
204  k = k + 1;
205 
206  } // for j
207 
208  // find the closest Pin at front ring
209 
210  for (unsigned int j = 0; j < _pins_in_rings[i].size(); j++)
211  {
212  if (j == _pins_in_rings[i].size() - 1)
213  {
214  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j]);
215  _chan_to_pin_map[k].push_back(_pins_in_rings[i][0]);
216  avg_coor_x =
217  0.5 * (_pin_position[_pins_in_rings[i][j]](0) + _pin_position[_pins_in_rings[i][0]](0));
218  avg_coor_y =
219  0.5 * (_pin_position[_pins_in_rings[i][j]](1) + _pin_position[_pins_in_rings[i][0]](1));
220  }
221  else
222  {
223  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j]);
224  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j + 1]);
225  avg_coor_x = 0.5 * (_pin_position[_pins_in_rings[i][j]](0) +
226  _pin_position[_pins_in_rings[i][j + 1]](0));
227  avg_coor_y = 0.5 * (_pin_position[_pins_in_rings[i][j]](1) +
228  _pin_position[_pins_in_rings[i][j + 1]](1));
229  }
230 
231  // if the outermost ring, set the edge subchannels first... then the corner subchannels
232  if (i == _n_rings - 1)
233  {
234  // add edges
235  _subch_type[k] = EChannelType::EDGE; // an edge subchannel is created
236  _gap_to_pin_map[kgap].first = _pins_in_rings[i][j];
237  _gap_to_pin_map[kgap].second = _pins_in_rings[i][j];
239  _chan_to_gap_map[k].push_back(kgap);
240  kgap = kgap + 1;
241  k = k + 1;
242 
243  if (j % i == 0)
244  {
245  // generate a corner subchannel, generate the additional gap and fix chan_to_gap_map
246  _gap_to_pin_map[kgap].first = _pins_in_rings[i][j];
247  _gap_to_pin_map[kgap].second = _pins_in_rings[i][j];
249 
250  // corner subchannel
251  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j]);
252  // corner subchannel-dummy added to hinder array size violations
253  _chan_to_pin_map[k].push_back(_pins_in_rings[i][j]);
254  _chan_to_gap_map[k].push_back(kgap - 1);
255  _chan_to_gap_map[k].push_back(kgap);
257 
258  kgap = kgap + 1;
259  k = k + 1;
260  }
261  // if not the outer most ring
262  }
263  else
264  {
265  dist0 = 1.0e+5;
266  unsigned int l0 = 0;
267  _chan_to_pin_map[k].push_back(_pins_in_rings[i + 1][0]);
268  for (unsigned int l = 0; l < _pins_in_rings[i + 1].size(); l++)
269  {
270  dist = std::sqrt(pow(_pin_position[_pins_in_rings[i + 1][l]](0) - avg_coor_x, 2) +
271  pow(_pin_position[_pins_in_rings[i + 1][l]](1) - avg_coor_y, 2));
272  if (dist < dist0)
273  {
274  _chan_to_pin_map[k][2] = _pins_in_rings[i + 1][l];
275  dist0 = dist;
276  l0 = l;
277  } // if
278  } // l
279 
280  _gap_to_pin_map[kgap].first = _pins_in_rings[i][j];
281  _gap_to_pin_map[kgap].second = _pins_in_rings[i + 1][l0];
283  kgap = kgap + 1;
285  k = k + 1;
286  } // if
287  } // for j
288  } // for i
289 
290  // find the _gap_to_chan_map and _chan_to_gap_map using the gap_to_rod and subchannel_to_rod_maps
291 
292  for (unsigned int i = 0; i < _n_channels; i++)
293  {
295  {
296  for (unsigned int j = 0; j < _n_gaps; j++)
297  {
299  {
300  if (((_chan_to_pin_map[i][0] == _gap_to_pin_map[j].first) &&
301  (_chan_to_pin_map[i][1] == _gap_to_pin_map[j].second)) ||
302  ((_chan_to_pin_map[i][0] == _gap_to_pin_map[j].second) &&
303  (_chan_to_pin_map[i][1] == _gap_to_pin_map[j].first)))
304  {
305  _chan_to_gap_map[i].push_back(j);
306  }
307 
308  if (((_chan_to_pin_map[i][0] == _gap_to_pin_map[j].first) &&
309  (_chan_to_pin_map[i][2] == _gap_to_pin_map[j].second)) ||
310  ((_chan_to_pin_map[i][0] == _gap_to_pin_map[j].second) &&
311  (_chan_to_pin_map[i][2] == _gap_to_pin_map[j].first)))
312  {
313  _chan_to_gap_map[i].push_back(j);
314  }
315 
316  if (((_chan_to_pin_map[i][1] == _gap_to_pin_map[j].first) &&
317  (_chan_to_pin_map[i][2] == _gap_to_pin_map[j].second)) ||
318  ((_chan_to_pin_map[i][1] == _gap_to_pin_map[j].second) &&
319  (_chan_to_pin_map[i][2] == _gap_to_pin_map[j].first)))
320  {
321  _chan_to_gap_map[i].push_back(j);
322  }
323  }
324  } // for j
325  }
326  else if (_subch_type[i] == EChannelType::EDGE)
327  {
328  for (unsigned int j = 0; j < _n_gaps; j++)
329  {
331  {
332  if (((_chan_to_pin_map[i][0] == _gap_to_pin_map[j].first) &&
333  (_chan_to_pin_map[i][1] == _gap_to_pin_map[j].second)) ||
334  ((_chan_to_pin_map[i][0] == _gap_to_pin_map[j].second) &&
335  (_chan_to_pin_map[i][1] == _gap_to_pin_map[j].first)))
336  {
337  _chan_to_gap_map[i].push_back(j);
338  }
339  }
340  }
341 
342  icorner = 0;
343  for (unsigned int k = 0; k < _n_channels; k++)
344  {
346  _chan_to_pin_map[i][1] == _chan_to_pin_map[k][0])
347  {
348  _chan_to_gap_map[i].push_back(_chan_to_gap_map[k][1]);
349  icorner = 1;
350  break;
351  } // if
352  } // for
353 
354  for (unsigned int k = 0; k < _n_channels; k++)
355  {
357  _chan_to_pin_map[i][0] == _chan_to_pin_map[k][0])
358  {
359  _chan_to_gap_map[i].push_back(_chan_to_gap_map[k][1] + 1);
360  icorner = 1;
361  break;
362  }
363  }
364 
365  if (icorner == 0)
366  {
367  _chan_to_gap_map[i].push_back(_chan_to_gap_map[i][0] + 1);
368  }
369  }
370  }
371 
372  // find gap_to_chan_map pair
373 
374  for (unsigned int j = 0; j < _n_gaps; j++)
375  {
376  for (unsigned int i = 0; i < _n_channels; i++)
377  {
379  {
380  if ((j == _chan_to_gap_map[i][0]) || (j == _chan_to_gap_map[i][1]) ||
381  (j == _chan_to_gap_map[i][2]))
382  {
383  if (_gap_to_chan_map[j].first == 0 && gap_fill[j].first == 0)
384  {
385  _gap_to_chan_map[j].first = i;
386  gap_fill[j].first = 1;
387  }
388  else if (_gap_to_chan_map[j].second == 0 && gap_fill[j].second == 0)
389  {
390  _gap_to_chan_map[j].second = i;
391  gap_fill[j].second = 1;
392  }
393  else
394  {
395  }
396  }
397  }
398  else if (_subch_type[i] == EChannelType::CORNER)
399  {
400  if ((j == _chan_to_gap_map[i][0]) || (j == _chan_to_gap_map[i][1]))
401  {
402  if (_gap_to_chan_map[j].first == 0 && gap_fill[j].first == 0)
403  {
404  _gap_to_chan_map[j].first = i;
405  gap_fill[j].first = 1;
406  }
407  else if (_gap_to_chan_map[j].second == 0 && gap_fill[j].second == 0)
408  {
409  _gap_to_chan_map[j].second = i;
410  gap_fill[j].second = 1;
411  }
412  else
413  {
414  }
415  }
416  }
417  } // i
418  } // j
419 
420  for (unsigned int k = 0; k < _n_channels; k++)
421  {
423  {
424  _gap_pairs_sf[k].first = _chan_to_gap_map[k][0];
425  _gap_pairs_sf[k].second = _chan_to_gap_map[k][2];
426  auto k1 = _gap_pairs_sf[k].first;
427  auto k2 = _gap_pairs_sf[k].second;
428  if (_gap_to_chan_map[k1].first == k)
429  {
430  _chan_pairs_sf[k].first = _gap_to_chan_map[k1].second;
431  }
432  else
433  {
434  _chan_pairs_sf[k].first = _gap_to_chan_map[k1].first;
435  }
436 
437  if (_gap_to_chan_map[k2].first == k)
438  {
439  _chan_pairs_sf[k].second = _gap_to_chan_map[k2].second;
440  }
441  else
442  {
443  _chan_pairs_sf[k].second = _gap_to_chan_map[k2].first;
444  }
445  }
446  else if (_subch_type[k] == EChannelType::CORNER)
447  {
448  _gap_pairs_sf[k].first = _chan_to_gap_map[k][1];
449  _gap_pairs_sf[k].second = _chan_to_gap_map[k][0];
450 
451  auto k1 = _gap_pairs_sf[k].first;
452  auto k2 = _gap_pairs_sf[k].second;
453 
454  if (_gap_to_chan_map[k1].first == k)
455  {
456  _chan_pairs_sf[k].first = _gap_to_chan_map[k1].second;
457  }
458  else
459  {
460  _chan_pairs_sf[k].first = _gap_to_chan_map[k1].first;
461  }
462 
463  if (_gap_to_chan_map[k2].first == k)
464  {
465  _chan_pairs_sf[k].second = _gap_to_chan_map[k2].second;
466  }
467  else
468  {
469  _chan_pairs_sf[k].second = _gap_to_chan_map[k2].first;
470  }
471  }
472  }
473 
474  // set the _gij_map
475 
476  for (unsigned int j = 0; j < _n_gaps; j++)
477  {
479  {
481  }
483  {
485  }
486  }
487  for (unsigned int i = 0; i < _n_channels; i++)
488  {
490  {
491  for (unsigned int k = 0; k < 3; k++)
492  {
493  for (unsigned int j = 0; j < _n_gaps; j++)
494  {
495  if (_chan_to_gap_map[i][k] == j && i == _gap_to_chan_map[j].first)
496  {
497  if (i > _gap_to_chan_map[j].second)
498  {
499  _sign_id_crossflow_map[i][k] = negative_flow;
500  }
501  else
502  {
503  _sign_id_crossflow_map[i][k] = positive_flow;
504  }
505  }
506  else if (_chan_to_gap_map[i][k] == j && i == _gap_to_chan_map[j].second)
507  {
508  if (i > _gap_to_chan_map[j].first)
509  {
510  _sign_id_crossflow_map[i][k] = negative_flow;
511  }
512  else
513  {
514  _sign_id_crossflow_map[i][k] = positive_flow;
515  }
516  }
517  } // j
518  } // k
519  }
520  else if (_subch_type[i] == EChannelType::CORNER)
521  {
522  for (unsigned int k = 0; k < 2; k++)
523  {
524  for (unsigned int j = 0; j < _n_gaps; j++)
525  {
526  if (_chan_to_gap_map[i][k] == j && i == _gap_to_chan_map[j].first)
527  {
528  if (i > _gap_to_chan_map[j].second)
529  {
530  _sign_id_crossflow_map[i][k] = negative_flow;
531  }
532  else
533  {
534  _sign_id_crossflow_map[i][k] = positive_flow;
535  }
536  }
537  else if (_chan_to_gap_map[i][k] == j && i == _gap_to_chan_map[j].second)
538  {
539  if (i > _gap_to_chan_map[j].first)
540  {
541  _sign_id_crossflow_map[i][k] = negative_flow;
542  }
543  else
544  {
545  _sign_id_crossflow_map[i][k] = positive_flow;
546  }
547  }
548  } // j
549  } // k
550  } // subch_type =2
551  } // i
552 
553  // set the subchannel positions
554  for (unsigned int i = 0; i < _n_channels; i++)
555  {
557  {
558  _subchannel_position[i][0] =
560  _pin_position[_chan_to_pin_map[i][2]](0)) /
561  3.0;
562  _subchannel_position[i][1] =
564  _pin_position[_chan_to_pin_map[i][2]](1)) /
565  3.0;
566  }
567  else if (_subch_type[i] == EChannelType::EDGE)
568  {
569  for (unsigned int j = 0; j < _n_channels; j++)
570  {
572  ((_chan_to_pin_map[i][0] == _chan_to_pin_map[j][0] &&
573  _chan_to_pin_map[i][1] == _chan_to_pin_map[j][1]) ||
574  (_chan_to_pin_map[i][0] == _chan_to_pin_map[j][1] &&
575  _chan_to_pin_map[i][1] == _chan_to_pin_map[j][0])))
576  {
577  x0 = _pin_position[_chan_to_pin_map[j][2]](0);
578  y0 = _pin_position[_chan_to_pin_map[j][2]](1);
579  }
580  else if (_subch_type[j] == EChannelType::CENTER &&
581  ((_chan_to_pin_map[i][0] == _chan_to_pin_map[j][0] &&
582  _chan_to_pin_map[i][1] == _chan_to_pin_map[j][2]) ||
583  (_chan_to_pin_map[i][0] == _chan_to_pin_map[j][2] &&
584  _chan_to_pin_map[i][1] == _chan_to_pin_map[j][0])))
585  {
586  x0 = _pin_position[_chan_to_pin_map[j][1]](0);
587  y0 = _pin_position[_chan_to_pin_map[j][1]](1);
588  }
589  else if (_subch_type[j] == EChannelType::CENTER &&
590  ((_chan_to_pin_map[i][0] == _chan_to_pin_map[j][1] &&
591  _chan_to_pin_map[i][1] == _chan_to_pin_map[j][2]) ||
592  (_chan_to_pin_map[i][0] == _chan_to_pin_map[j][2] &&
593  _chan_to_pin_map[i][1] == _chan_to_pin_map[j][1])))
594  {
595  x0 = _pin_position[_chan_to_pin_map[j][0]](0);
596  y0 = _pin_position[_chan_to_pin_map[j][0]](1);
597  }
598  x1 = 0.5 *
600  y1 = 0.5 *
602  if (_tight_side_bypass)
603  a1 = _flat_to_flat * std::tan(libMesh::pi / 6.0) / 2.0 + _duct_to_pin_gap / 2.0;
604  else
605  a1 = _flat_to_flat / 2.0 + _duct_to_pin_gap / 2.0;
606  a2 = std::sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)) + a1;
607  _subchannel_position[i][0] = (a2 * x1 - a1 * x0) / (a2 - a1);
608  _subchannel_position[i][1] = (a2 * y1 - a1 * y0) / (a2 - a1);
609  } // j
610  }
611  else if (_subch_type[i] == EChannelType::CORNER)
612  {
613  x0 = _pin_position[0](0);
614  y0 = _pin_position[0](1);
615  x1 = _pin_position[_chan_to_pin_map[i][0]](0);
616  y1 = _pin_position[_chan_to_pin_map[i][0]](1);
617  a1 = _flat_to_flat / 2.0 + _duct_to_pin_gap / 2.0;
618  a2 = std::sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)) + a1;
619  _subchannel_position[i][0] = (a2 * x1 - a1 * x0) / (a2 - a1);
620  _subchannel_position[i][1] = (a2 * y1 - a1 * y0) / (a2 - a1);
621  }
622  } // i
623  // Reduce reserved memory in the channel-to-gap map.
624  for (auto & gap : _chan_to_gap_map)
625  {
626  gap.shrink_to_fit();
627  }
628 }
std::vector< std::pair< unsigned int, unsigned int > > _chan_pairs_sf
sweeping flow model channel pairs to specify directional edge flow
unsigned int _n_assemblies
number of assemblies
const Real & _kij
Lateral form loss coefficient.
const Real _flat_to_flat
the distance between flat surfaces of the duct facing each other
const Real _unheated_length_exit
unheated length of the fuel Pin at the exit of the assembly
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_chan_map
stores the channel pairs for each gap
std::vector< Real > _z_grid
axial location of nodes
const Real _assembly_pitch
Distance between the neighbor fuel pins, assembly_pitch.
MeshGenerator(const InputParameters &parameters)
std::vector< std::pair< unsigned int, unsigned int > > _gap_pairs_sf
sweeping flow model gap pairs per channel to specify directional edge flow
static void rodPositions(std::vector< Point > &positions, unsigned int nrings, Real assembly_pitch, Point center)
Calculates and stores the Pin positions/centers for a hexagonal assembly containing the given number ...
std::vector< std::vector< Real > > _pins_in_rings
fuel pins that are belonging to each ring
const unsigned int _n_rings
number of rings of fuel pins
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_pin_map
stores the fuel pin pairs for each gap each gap
unsigned int _n_channels
number of subchannels
const Real _duct_to_pin_gap
the gap thickness between the duct and peripheral fuel pins
const Real _unheated_length_entry
unheated length of the fuel Pin at the entry of the assembly
static void generateZGrid(Real unheated_length_entry, Real heated_length, Real unheated_length_exit, unsigned int n_cells, std::vector< Real > &z_grid)
Generate the spacing in z-direction using heated and unheated lengths.
std::vector< std::vector< Real > > _sign_id_crossflow_map
Defines the global cross-flow direction -1 or 1 for each interstice and for all gaps that are belongi...
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const unsigned int _n_cells
number of axial cells
const bool _tight_side_bypass
whether the side bypass shape follows the hexagonal shape of the assemblies TODO: add a picture in th...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< Point > _pin_position
x,y coordinates of the fuel pins
std::vector< std::vector< unsigned int > > _chan_to_gap_map
stores the gaps that forms each interstice
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< std::vector< Real > > _subchannel_position
x,y coordinates of the interstices
std::vector< std::vector< Real > > _k_grid
axial form loss coefficient per computational cell
std::vector< EChannelType > _subch_type
interstice type
std::vector< EChannelType > _gap_type
gap type
static const std::string k
Definition: NS.h:130
std::vector< std::vector< unsigned int > > _chan_to_pin_map
stores the fuel pins belonging to each interstice
const Real _heated_length
heated length of the fuel Pin
const Real pi

Member Function Documentation

◆ generate()

std::unique_ptr< MeshBase > SCMTriInterWrapperMeshGenerator::generate ( )
overridevirtual

Implements MeshGenerator.

Definition at line 631 of file SCMTriInterWrapperMeshGenerator.C.

632 {
633  auto mesh_base = buildMeshBaseObject();
634 
635  BoundaryInfo & boundary_info = mesh_base->get_boundary_info();
636  mesh_base->set_spatial_dimension(3);
637  mesh_base->reserve_elem(_n_cells * _n_channels);
638  mesh_base->reserve_nodes((_n_cells + 1) * _n_channels);
639  _nodes.resize(_n_channels);
640  // Add the points for the give x,y subchannel positions. The grid is hexagonal.
641  // The grid along
642  // z is irregular to account for Pin spacers. Store pointers in the _nodes
643  // array so we can keep track of which points are in which channels.
644  unsigned int node_id = 0;
645  for (unsigned int i = 0; i < _n_channels; i++)
646  {
647  _nodes[i].reserve(_n_cells + 1);
648  for (unsigned int iz = 0; iz < _n_cells + 1; iz++)
649  {
650  _nodes[i].push_back(mesh_base->add_point(
651  Point(_subchannel_position[i][0], _subchannel_position[i][1], _z_grid[iz]), node_id++));
652  }
653  }
654 
655  // Add the elements which in this case are 2-node edges that link each
656  // subchannel's nodes vertically.
657  unsigned int elem_id = 0;
658  for (unsigned int i = 0; i < _n_channels; i++)
659  {
660  for (unsigned int iz = 0; iz < _n_cells; iz++)
661  {
662  Elem * elem = new Edge2;
663  elem->set_id(elem_id++);
664  elem = mesh_base->add_elem(elem);
665  const int indx1 = (_n_cells + 1) * i + iz;
666  const int indx2 = (_n_cells + 1) * i + (iz + 1);
667  elem->set_node(0, mesh_base->node_ptr(indx1));
668  elem->set_node(1, mesh_base->node_ptr(indx2));
669 
670  if (iz == 0)
671  boundary_info.add_side(elem, 0, 0);
672  if (iz == _n_cells - 1)
673  boundary_info.add_side(elem, 1, 1);
674  }
675  }
676  boundary_info.sideset_name(0) = "inlet";
677  boundary_info.sideset_name(1) = "outlet";
678  boundary_info.nodeset_name(0) = "inlet";
679  boundary_info.nodeset_name(1) = "outlet";
680 
681  mesh_base->prepare_for_use();
682 
683  // move the meta data into TriInterWrapperMesh
684  auto & sch_mesh = static_cast<TriInterWrapperMesh &>(*_mesh);
686  sch_mesh._heated_length = _heated_length;
687  sch_mesh._unheated_length_exit = _unheated_length_exit;
688  sch_mesh._z_grid = _z_grid;
689  sch_mesh._k_grid = _k_grid;
690  sch_mesh._kij = _kij;
691  sch_mesh._assembly_pitch = _assembly_pitch;
692  sch_mesh._n_cells = _n_cells;
693  sch_mesh._n_rings = _n_rings;
694  sch_mesh._n_channels = _n_channels;
695  sch_mesh._flat_to_flat = _flat_to_flat;
696  sch_mesh._duct_to_pin_gap = _duct_to_pin_gap;
697  sch_mesh._nodes = _nodes;
698  sch_mesh._gap_to_chan_map = _gap_to_chan_map;
699  sch_mesh._gap_to_pin_map = _gap_to_pin_map;
700  sch_mesh._chan_to_gap_map = _chan_to_gap_map;
701  sch_mesh._sign_id_crossflow_map = _sign_id_crossflow_map;
702  sch_mesh._gij_map = _gij_map;
703  sch_mesh._subchannel_position = _subchannel_position;
704  sch_mesh._pin_position = _pin_position;
705  sch_mesh._pins_in_rings = _pins_in_rings;
706  sch_mesh._chan_to_pin_map = _chan_to_pin_map;
707  sch_mesh._n_assemblies = _n_assemblies;
708  sch_mesh._n_gaps = _n_gaps;
709  sch_mesh._subch_type = _subch_type;
710  sch_mesh._gap_type = _gap_type;
711  sch_mesh._gap_pairs_sf = _gap_pairs_sf;
712  sch_mesh._chan_pairs_sf = _chan_pairs_sf;
713  sch_mesh._tight_side_bypass = _tight_side_bypass;
714 
715  // Overloading assembly sides with flat_to_flat distance
716  sch_mesh._assembly_side_x = _flat_to_flat;
717  sch_mesh._assembly_side_y = _flat_to_flat;
718 
719  return mesh_base;
720 }
std::vector< std::pair< unsigned int, unsigned int > > _chan_pairs_sf
sweeping flow model channel pairs to specify directional edge flow
unsigned int _n_assemblies
number of assemblies
Real _unheated_length_entry
unheated length of the fuel Pin at the entry of the assembly
const Real & _kij
Lateral form loss coefficient.
const Real _flat_to_flat
the distance between flat surfaces of the duct facing each other
const Real _unheated_length_exit
unheated length of the fuel Pin at the exit of the assembly
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_chan_map
stores the channel pairs for each gap
std::vector< Real > _z_grid
axial location of nodes
std::vector< std::vector< Node * > > _nodes
nodes
const Real _assembly_pitch
Distance between the neighbor fuel pins, assembly_pitch.
std::vector< std::pair< unsigned int, unsigned int > > _gap_pairs_sf
sweeping flow model gap pairs per channel to specify directional edge flow
std::vector< std::vector< Real > > _pins_in_rings
fuel pins that are belonging to each ring
const unsigned int _n_rings
number of rings of fuel pins
std::vector< std::pair< unsigned int, unsigned int > > _gap_to_pin_map
stores the fuel pin pairs for each gap each gap
unsigned int _n_channels
number of subchannels
const Real _duct_to_pin_gap
the gap thickness between the duct and peripheral fuel pins
const Real _unheated_length_entry
unheated length of the fuel Pin at the entry of the assembly
std::vector< std::vector< Real > > _sign_id_crossflow_map
Defines the global cross-flow direction -1 or 1 for each interstice and for all gaps that are belongi...
const unsigned int _n_cells
number of axial cells
const bool _tight_side_bypass
whether the side bypass shape follows the hexagonal shape of the assemblies TODO: add a picture in th...
std::vector< Point > _pin_position
x,y coordinates of the fuel pins
std::vector< std::vector< unsigned int > > _chan_to_gap_map
stores the gaps that forms each interstice
std::unique_ptr< MeshBase > buildMeshBaseObject(unsigned int dim=libMesh::invalid_uint)
std::vector< std::vector< Real > > _subchannel_position
x,y coordinates of the interstices
std::vector< std::vector< Real > > _k_grid
axial form loss coefficient per computational cell
std::vector< EChannelType > _subch_type
interstice type
std::vector< EChannelType > _gap_type
gap type
Mesh class for triangular, edge and corner inter_wrappers for hexagonal lattice fuel assemblies...
std::vector< std::vector< unsigned int > > _chan_to_pin_map
stores the fuel pins belonging to each interstice
const Real _heated_length
heated length of the fuel Pin

◆ validParams()

InputParameters SCMTriInterWrapperMeshGenerator::validParams ( )
static

Definition at line 23 of file SCMTriInterWrapperMeshGenerator.C.

24 {
26  params.addClassDescription(
27  "Creates a mesh for the inter-wrapper around triangular subassemblies");
28  params.addRequiredParam<unsigned int>("n_cells", "The number of cells in the axial direction");
29  params.addRequiredParam<Real>("assembly_pitch", "Pitch [m]");
30  params.addParam<Real>("unheated_length_entry", 0.0, "Unheated length at entry [m]");
31  params.addRequiredParam<Real>("heated_length", "Heated length [m]");
32  params.addParam<Real>("unheated_length_exit", 0.0, "Unheated length at exit [m]");
33  params.addRequiredParam<unsigned int>("nrings", "Number of fuel Pin rings per assembly [-]");
34  params.addRequiredParam<Real>("flat_to_flat",
35  "Flat to flat distance for the hexagonal assembly [m]");
36  params.addParam<Real>("Kij", 0.5, "Lateral form loss coefficient [-]");
37  params.addRequiredParam<Real>("side_bypass",
38  "Extra size of the bypass for the side assemblies [m]");
39  params.addParam<bool>(
40  "tight_side_bypass",
41  false,
42  "Whether the side bypass shape follows the hexagonal shape of the assemblies");
43  return params;
44 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _assembly_pitch

const Real SCMTriInterWrapperMeshGenerator::_assembly_pitch
protected

Distance between the neighbor fuel pins, assembly_pitch.

Definition at line 39 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _chan_pairs_sf

std::vector<std::pair<unsigned int, unsigned int> > SCMTriInterWrapperMeshGenerator::_chan_pairs_sf
protected

sweeping flow model channel pairs to specify directional edge flow

Definition at line 88 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _chan_to_gap_map

std::vector<std::vector<unsigned int> > SCMTriInterWrapperMeshGenerator::_chan_to_gap_map
protected

stores the gaps that forms each interstice

Definition at line 61 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _chan_to_pin_map

std::vector<std::vector<unsigned int> > SCMTriInterWrapperMeshGenerator::_chan_to_pin_map
protected

stores the fuel pins belonging to each interstice

Definition at line 76 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _duct_to_pin_gap

const Real SCMTriInterWrapperMeshGenerator::_duct_to_pin_gap
protected

the gap thickness between the duct and peripheral fuel pins

Definition at line 49 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _flat_to_flat

const Real SCMTriInterWrapperMeshGenerator::_flat_to_flat
protected

the distance between flat surfaces of the duct facing each other

Definition at line 47 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _gap_pairs_sf

std::vector<std::pair<unsigned int, unsigned int> > SCMTriInterWrapperMeshGenerator::_gap_pairs_sf
protected

sweeping flow model gap pairs per channel to specify directional edge flow

Definition at line 86 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _gap_to_chan_map

std::vector<std::pair<unsigned int, unsigned int> > SCMTriInterWrapperMeshGenerator::_gap_to_chan_map
protected

stores the channel pairs for each gap

Definition at line 57 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _gap_to_pin_map

std::vector<std::pair<unsigned int, unsigned int> > SCMTriInterWrapperMeshGenerator::_gap_to_pin_map
protected

stores the fuel pin pairs for each gap each gap

Definition at line 59 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _gap_type

std::vector<EChannelType> SCMTriInterWrapperMeshGenerator::_gap_type
protected

gap type

Definition at line 84 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _gij_map

std::vector<Real> SCMTriInterWrapperMeshGenerator::_gij_map
protected

gap size

Definition at line 68 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _heated_length

const Real SCMTriInterWrapperMeshGenerator::_heated_length
protected

heated length of the fuel Pin

Definition at line 29 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _k_grid

std::vector<std::vector<Real> > SCMTriInterWrapperMeshGenerator::_k_grid
protected

axial form loss coefficient per computational cell

Definition at line 37 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _kij

const Real& SCMTriInterWrapperMeshGenerator::_kij
protected

Lateral form loss coefficient.

Definition at line 33 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate().

◆ _n_assemblies

unsigned int SCMTriInterWrapperMeshGenerator::_n_assemblies
protected

number of assemblies

Definition at line 78 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _n_cells

const unsigned int SCMTriInterWrapperMeshGenerator::_n_cells
protected

number of axial cells

Definition at line 41 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _n_channels

unsigned int SCMTriInterWrapperMeshGenerator::_n_channels
protected

number of subchannels

Definition at line 45 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _n_gaps

unsigned int SCMTriInterWrapperMeshGenerator::_n_gaps
protected

number of gaps

Definition at line 80 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _n_rings

const unsigned int SCMTriInterWrapperMeshGenerator::_n_rings
protected

number of rings of fuel pins

Definition at line 43 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _nodes

std::vector<std::vector<Node *> > SCMTriInterWrapperMeshGenerator::_nodes
protected

nodes

Definition at line 55 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate().

◆ _pin_position

std::vector<Point> SCMTriInterWrapperMeshGenerator::_pin_position
protected

x,y coordinates of the fuel pins

Definition at line 72 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _pins_in_rings

std::vector<std::vector<Real> > SCMTriInterWrapperMeshGenerator::_pins_in_rings
protected

fuel pins that are belonging to each ring

Definition at line 74 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _sign_id_crossflow_map

std::vector<std::vector<Real> > SCMTriInterWrapperMeshGenerator::_sign_id_crossflow_map
protected

Defines the global cross-flow direction -1 or 1 for each interstice and for all gaps that are belonging to the corresponding interstice.

Given a interstice and a gap, if the neighbor interstice index belonging to the same gap is lower, set it to -1, otherwise set it to 1.

Definition at line 66 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _subch_type

std::vector<EChannelType> SCMTriInterWrapperMeshGenerator::_subch_type
protected

interstice type

Definition at line 82 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _subchannel_position

std::vector<std::vector<Real> > SCMTriInterWrapperMeshGenerator::_subchannel_position
protected

x,y coordinates of the interstices

Definition at line 70 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _tight_side_bypass

const bool SCMTriInterWrapperMeshGenerator::_tight_side_bypass
protected

whether the side bypass shape follows the hexagonal shape of the assemblies TODO: add a picture in the documentation of both tight and non-tight layouts

Definition at line 52 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _unheated_length_entry

const Real SCMTriInterWrapperMeshGenerator::_unheated_length_entry
protected

unheated length of the fuel Pin at the entry of the assembly

Definition at line 27 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _unheated_length_exit

const Real SCMTriInterWrapperMeshGenerator::_unheated_length_exit
protected

unheated length of the fuel Pin at the exit of the assembly

Definition at line 31 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().

◆ _z_grid

std::vector<Real> SCMTriInterWrapperMeshGenerator::_z_grid
protected

axial location of nodes

Definition at line 35 of file SCMTriInterWrapperMeshGenerator.h.

Referenced by generate(), and SCMTriInterWrapperMeshGenerator().


The documentation for this class was generated from the following files: