https://mooseframework.inl.gov
PolygonMeshGeneratorBase.h
Go to the documentation of this file.
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 #pragma once
11 
12 #include "MeshGenerator.h"
13 #include "MooseEnum.h"
14 #include "CastUniquePointer.h"
15 #include "MooseMeshUtils.h"
16 #include "libmesh/replicated_mesh.h"
17 #include "libmesh/mesh_modification.h"
18 #include "libmesh/face_quad4.h"
19 #include "libmesh/face_quad8.h"
20 #include "libmesh/face_quad9.h"
21 #include "libmesh/face_tri3.h"
22 #include "libmesh/face_tri6.h"
23 #include "libmesh/face_tri7.h"
24 #include "libmesh/serial_mesh.h"
25 #include "libmesh/boundary_info.h"
26 #include "libmesh/utility.h"
27 
32 {
33 public:
35 
37 
38  virtual std::unique_ptr<MeshBase> generate() override;
39 
41  enum class PolygonSizeStyle
42  {
43  apothem,
44  radius
45  };
46 
47  enum MESH_TYPE
48  {
52  };
53 
55  {
58  };
59 
61  {
64  };
65  // boundary_id_type is short int so max is 32,767
67  {
70  SLICE_BEGIN = 30000,
71  SLICE_END = 31000,
72  SLICE_ALT = 30500
73  };
74 
76  {
79  };
80 
81  enum class TRI_ELEM_TYPE
82  {
83  TRI3,
84  TRI6,
85  TRI7
86  };
87 
88  enum class QUAD_ELEM_TYPE
89  {
90  QUAD4,
91  QUAD8,
92  QUAD9
93  };
94 
97  {
98  std::vector<Real> widths;
99  std::vector<Real> fractions;
100  std::vector<unsigned int> intervals;
101  std::vector<Real> biases;
102  };
105  {
108  unsigned int intervals;
110  };
111 
112 protected:
158  std::unique_ptr<ReplicatedMesh>
159  buildSimpleSlice(std::vector<Real> ring_radii,
160  const std::vector<unsigned int> ring_layers,
161  const std::vector<Real> ring_radial_biases,
162  const multiBdryLayerParams & ring_inner_boundary_layer_params,
163  const multiBdryLayerParams & ring_outer_boundary_layer_params,
164  std::vector<Real> ducts_center_dist,
165  const std::vector<unsigned int> ducts_layers,
166  const std::vector<Real> duct_radial_biases,
167  const multiBdryLayerParams & duct_inner_boundary_layer_params,
168  const multiBdryLayerParams & duct_outer_boundary_layer_params,
169  const Real pitch,
170  const unsigned int num_sectors_per_side,
171  const unsigned int background_intervals,
172  const Real background_radial_bias,
173  const singleBdryLayerParams & background_inner_boundary_layer_params,
174  const singleBdryLayerParams & background_outer_boundary_layer_params,
175  dof_id_type & node_id_background_meta,
176  const unsigned int side_number,
177  const unsigned int side_index,
178  const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
179  const subdomain_id_type block_id_shift = 0,
180  const bool quad_center_elements = false,
181  const Real center_quad_factor = 0.0,
182  const bool create_inward_interface_boundaries = false,
183  const bool create_outward_interface_boundaries = true,
184  const boundary_id_type boundary_id_shift = 0,
185  const bool generate_side_specific_boundaries = true,
186  const TRI_ELEM_TYPE tri_elem_type = TRI_ELEM_TYPE::TRI3,
187  const QUAD_ELEM_TYPE quad_elem_type = QUAD_ELEM_TYPE::QUAD4);
188 
230  std::unique_ptr<ReplicatedMesh>
231  buildGeneralSlice(std::vector<Real> ring_radii,
232  const std::vector<unsigned int> ring_layers,
233  const std::vector<Real> ring_radial_biases,
234  const multiBdryLayerParams & ring_inner_boundary_layer_params,
235  const multiBdryLayerParams & ring_outer_boundary_layer_params,
236  std::vector<Real> ducts_center_dist,
237  const std::vector<unsigned int> ducts_layers,
238  const std::vector<Real> duct_radial_biases,
239  const multiBdryLayerParams & duct_inner_boundary_layer_params,
240  const multiBdryLayerParams & duct_outer_boundary_layer_params,
241  const Real primary_side_length,
242  const Real secondary_side_length,
243  const unsigned int num_sectors_per_side,
244  const unsigned int background_intervals,
245  const Real background_radial_bias,
246  const singleBdryLayerParams & background_inner_boundary_layer_params,
247  const singleBdryLayerParams & background_outer_boundary_layer_params,
248  dof_id_type & node_id_background_meta,
249  const Real azimuthal_angle,
250  const std::vector<Real> azimuthal_tangent,
251  const unsigned int side_index,
252  const bool quad_center_elements,
253  const Real center_quad_factor,
254  const Real rotation_angle,
255  const bool generate_side_specific_boundaries = true);
256 
305  std::unique_ptr<ReplicatedMesh>
306  buildSlice(std::vector<Real> ring_radii,
307  const std::vector<unsigned int> ring_layers,
308  const std::vector<Real> ring_radial_biases,
309  const multiBdryLayerParams & ring_inner_boundary_layer_params,
310  const multiBdryLayerParams & ring_outer_boundary_layer_params,
311  std::vector<Real> ducts_center_dist,
312  const std::vector<unsigned int> ducts_layers,
313  const std::vector<Real> duct_radial_biases,
314  const multiBdryLayerParams & duct_inner_boundary_layer_params,
315  const multiBdryLayerParams & duct_outer_boundary_layer_params,
316  const Real pitch,
317  const unsigned int num_sectors_per_side,
318  const unsigned int background_intervals,
319  const Real background_radial_bias,
320  const singleBdryLayerParams & background_inner_boundary_layer_params,
321  const singleBdryLayerParams & background_outer_boundary_layer_params,
322  dof_id_type & node_id_background_meta,
323  const Real virtual_side_number,
324  const unsigned int side_index,
325  const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
326  const subdomain_id_type block_id_shift = 0,
327  const bool quad_center_elements = false,
328  const Real center_quad_factor = 0.0,
329  const bool create_inward_interface_boundaries = false,
330  const bool create_outward_interface_boundaries = true,
331  const boundary_id_type boundary_id_shift = 0,
332  const Real pitch_scale_factor = 1.0,
333  const bool generate_side_specific_boundaries = true,
334  const TRI_ELEM_TYPE tri_elem_type = TRI_ELEM_TYPE::TRI3,
335  const QUAD_ELEM_TYPE quad_elem_type = QUAD_ELEM_TYPE::QUAD4);
336 
346  void centerNodes(ReplicatedMesh & mesh,
347  const Real virtual_side_number,
348  const unsigned int div_num,
349  const Real ring_radii_0,
350  std::vector<std::vector<Node *>> & nodes) const;
351 
364  void ringNodes(ReplicatedMesh & mesh,
365  const std::vector<Real> ring_radii,
366  const std::vector<unsigned int> ring_layers,
367  const std::vector<std::vector<Real>> biased_terms,
368  const unsigned int num_sectors_per_side,
369  const Real corner_p[2][2],
370  const Real corner_to_corner,
371  const std::vector<Real> azimuthal_tangent = std::vector<Real>()) const;
372 
389  void backgroundNodes(ReplicatedMesh & mesh,
390  const unsigned int num_sectors_per_side,
391  const unsigned int background_intervals,
392  const std::vector<Real> biased_terms,
393  const Real background_corner_distance,
394  const Real background_corner_radial_interval_length,
395  const Real corner_p[2][2],
396  const Real corner_to_corner,
397  const Real background_in,
398  const std::vector<Real> azimuthal_tangent = std::vector<Real>()) const;
399 
412  void ductNodes(ReplicatedMesh & mesh,
413  std::vector<Real> * const ducts_center_dist,
414  const std::vector<unsigned int> ducts_layers,
415  const std::vector<std::vector<Real>> biased_terms,
416  const unsigned int num_sectors_per_side,
417  const Real corner_p[2][2],
418  const Real corner_to_corner,
419  const std::vector<Real> azimuthal_tangent = std::vector<Real>()) const;
420 
436  void cenQuadElemDef(ReplicatedMesh & mesh,
437  const unsigned int div_num,
438  const subdomain_id_type block_id_shift,
439  const bool create_outward_interface_boundaries,
440  const boundary_id_type boundary_id_shift,
441  std::vector<std::vector<Node *>> & nodes,
442  const bool assign_external_boundary = false,
443  const unsigned int side_index = 0,
444  const bool generate_side_specific_boundaries = true,
445  const QUAD_ELEM_TYPE quad_elem_type = QUAD_ELEM_TYPE::QUAD4) const;
446 
463  void cenTriElemDef(ReplicatedMesh & mesh,
464  const unsigned int num_sectors_per_side,
465  const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
466  const subdomain_id_type block_id_shift = 0,
467  const bool create_outward_interface_boundaries = true,
468  const boundary_id_type boundary_id_shift = 0,
469  const bool assign_external_boundary = false,
470  const unsigned int side_index = 0,
471  const bool generate_side_specific_boundaries = true,
472  const TRI_ELEM_TYPE tri_elem_type = TRI_ELEM_TYPE::TRI3) const;
473 
493  void quadElemDef(ReplicatedMesh & mesh,
494  const unsigned int num_sectors_per_side,
495  const std::vector<unsigned int> subdomain_rings,
496  const unsigned int side_index,
497  const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
498  const subdomain_id_type block_id_shift = 0,
499  const dof_id_type nodeid_shift = 0,
500  const bool create_inward_interface_boundaries = false,
501  const bool create_outward_interface_boundaries = true,
502  const boundary_id_type boundary_id_shift = 0,
503  const bool generate_side_specific_boundaries = true,
504  const QUAD_ELEM_TYPE quad_elem_type = QUAD_ELEM_TYPE::QUAD4) const;
505 
525  std::unique_ptr<ReplicatedMesh>
526  buildSimplePeripheral(const unsigned int num_sectors_per_side,
527  const unsigned int peripheral_invervals,
528  const std::vector<std::pair<Real, Real>> & position_inner,
529  const std::vector<std::pair<Real, Real>> & d_position_outer,
530  const subdomain_id_type id_shift,
531  const QUAD_ELEM_TYPE quad_elem_type,
532  const bool create_inward_interface_boundaries = false,
533  const bool create_outward_interface_boundaries = true);
534 
541  void adjustPeripheralQuadraticElements(MeshBase & out_mesh,
542  const QUAD_ELEM_TYPE boundary_quad_elem_type) const;
543 
560  std::pair<Real, Real> pointInterpolate(const Real pi_1_x,
561  const Real pi_1_y,
562  const Real po_1_x,
563  const Real po_1_y,
564  const Real pi_2_x,
565  const Real pi_2_y,
566  const Real po_2_x,
567  const Real po_2_y,
568  const unsigned int i,
569  const unsigned int j,
570  const unsigned int num_sectors_per_side,
571  const unsigned int peripheral_intervals) const;
572 
580  void nodeCoordRotate(Real & x, Real & y, const Real theta) const;
581 
595  void cutOffPolyDeform(MeshBase & mesh,
596  const Real orientation,
597  const Real y_max_0,
598  const Real y_max_n,
599  const Real y_min,
600  const unsigned int mesh_type,
601  const Real unit_angle = 60.0,
602  const Real tols = 1E-5) const;
603 
612  std::pair<Real, Real> fourPointIntercept(const std::pair<Real, Real> & p1,
613  const std::pair<Real, Real> & p2,
614  const std::pair<Real, Real> & p3,
615  const std::pair<Real, Real> & p4) const;
616 
634  std::vector<Real> azimuthalAnglesCollector(ReplicatedMesh & mesh,
635  std::vector<Point> & boundary_points,
636  const Real lower_azi = -30.0,
637  const Real upper_azi = 30.0,
638  const unsigned int return_type = ANGLE_TANGENT,
639  const unsigned int num_sides = 6,
641  const bool calculate_origin = true,
642  const Real input_origin_x = 0.0,
643  const Real input_origin_y = 0.0,
644  const Real tol = 1.0E-10) const;
645 
661  std::vector<Real> azimuthalAnglesCollector(ReplicatedMesh & mesh,
662  const Real lower_azi = -30.0,
663  const Real upper_azi = 30.0,
664  const unsigned int return_type = ANGLE_TANGENT,
665  const unsigned int num_sides = 6,
667  const bool calculate_origin = true,
668  const Real input_origin_x = 0.0,
669  const Real input_origin_y = 0.0,
670  const Real tol = 1.0E-10) const;
671 
683  std::vector<std::vector<Real>>
684  biasTermsCalculator(const std::vector<Real> radial_biases,
685  const std::vector<unsigned int> intervals,
686  const multiBdryLayerParams inner_boundary_layer_params,
687  const multiBdryLayerParams outer_boundary_layer_params) const;
688 
700  std::vector<Real> biasTermsCalculator(
701  const Real radial_bias,
702  const unsigned int intervals,
703  const singleBdryLayerParams inner_boundary_layer_params = {0.0, 0.0, 0, 1.0},
704  const singleBdryLayerParams outer_boundary_layer_params = {0.0, 0.0, 0, 1.0}) const;
705 
710  static void addRingAndSectorIDParams(InputParameters & params);
711 
719  void setSectorExtraIDs(MeshBase & mesh,
720  const std::string id_name,
721  const unsigned int num_sides,
722  const std::vector<unsigned int> num_sectors_per_side);
723 
734  void setRingExtraIDs(MeshBase & mesh,
735  const std::string id_name,
736  const unsigned int num_sides,
737  const std::vector<unsigned int> num_sectors_per_side,
738  const std::vector<unsigned int> ring_intervals,
739  const bool ring_wise_id,
740  const bool quad_center_elements);
741 
749  void reassignBoundaryIDs(MeshBase & mesh,
750  const boundary_id_type id_shift,
751  const std::set<boundary_id_type> & boundary_ids,
752  const bool reverse = false);
753 
768  std::set<boundary_id_type> getInterfaceBoundaryIDs(
769  const std::vector<std::vector<unsigned int>> & pattern,
770  const std::vector<std::vector<boundary_id_type>> & interface_boundary_id_shift_pattern,
771  const std::set<boundary_id_type> & boundary_ids,
772  const std::vector<std::set<boundary_id_type>> & input_interface_boundary_ids,
773  const bool use_interface_boundary_id_shift,
774  const bool create_interface_boundary_id,
775  const unsigned int num_extra_layers) const;
776 
784  multiBdryLayerParams
785  modifiedMultiBdryLayerParamsCreator(const multiBdryLayerParams & original_multi_bdry_layer_params,
786  const unsigned int order) const;
787 
795  singleBdryLayerParams modifiedSingleBdryLayerParamsCreator(
796  const singleBdryLayerParams & original_single_bdry_layer_params,
797  const unsigned int order) const;
798 
807  std::string pitchMetaDataErrorGenerator(const std::vector<MeshGeneratorName> & input_names,
808  const std::vector<Real> & metadata_vals,
809  const std::string & metadata_name) const;
810 };
std::pair< Real, Real > fourPointIntercept(const std::pair< Real, Real > &p1, const std::pair< Real, Real > &p2, const std::pair< Real, Real > &p3, const std::pair< Real, Real > &p4) const
Finds the center of a quadrilateral based on four vertices.
std::unique_ptr< ReplicatedMesh > buildGeneralSlice(std::vector< Real > ring_radii, const std::vector< unsigned int > ring_layers, const std::vector< Real > ring_radial_biases, const multiBdryLayerParams &ring_inner_boundary_layer_params, const multiBdryLayerParams &ring_outer_boundary_layer_params, std::vector< Real > ducts_center_dist, const std::vector< unsigned int > ducts_layers, const std::vector< Real > duct_radial_biases, const multiBdryLayerParams &duct_inner_boundary_layer_params, const multiBdryLayerParams &duct_outer_boundary_layer_params, const Real primary_side_length, const Real secondary_side_length, const unsigned int num_sectors_per_side, const unsigned int background_intervals, const Real background_radial_bias, const singleBdryLayerParams &background_inner_boundary_layer_params, const singleBdryLayerParams &background_outer_boundary_layer_params, dof_id_type &node_id_background_meta, const Real azimuthal_angle, const std::vector< Real > azimuthal_tangent, const unsigned int side_index, const bool quad_center_elements, const Real center_quad_factor, const Real rotation_angle, const bool generate_side_specific_boundaries=true)
Creates a mesh of a general polygon slice with a triangular shape and circular regions on one of its ...
void setSectorExtraIDs(MeshBase &mesh, const std::string id_name, const unsigned int num_sides, const std::vector< unsigned int > num_sectors_per_side)
assign sector extra ids to polygon mesh
void cenTriElemDef(ReplicatedMesh &mesh, const unsigned int num_sectors_per_side, const std::vector< Real > azimuthal_tangent=std::vector< Real >(), const subdomain_id_type block_id_shift=0, const bool create_outward_interface_boundaries=true, const boundary_id_type boundary_id_shift=0, const bool assign_external_boundary=false, const unsigned int side_index=0, const bool generate_side_specific_boundaries=true, const TRI_ELEM_TYPE tri_elem_type=TRI_ELEM_TYPE::TRI3) const
Defines triangular elements in the very central region of the polygon.
const double tol
Contains multiple blocks&#39;s boundary layer related parameters.
std::unique_ptr< ReplicatedMesh > buildSlice(std::vector< Real > ring_radii, const std::vector< unsigned int > ring_layers, const std::vector< Real > ring_radial_biases, const multiBdryLayerParams &ring_inner_boundary_layer_params, const multiBdryLayerParams &ring_outer_boundary_layer_params, std::vector< Real > ducts_center_dist, const std::vector< unsigned int > ducts_layers, const std::vector< Real > duct_radial_biases, const multiBdryLayerParams &duct_inner_boundary_layer_params, const multiBdryLayerParams &duct_outer_boundary_layer_params, const Real pitch, const unsigned int num_sectors_per_side, const unsigned int background_intervals, const Real background_radial_bias, const singleBdryLayerParams &background_inner_boundary_layer_params, const singleBdryLayerParams &background_outer_boundary_layer_params, dof_id_type &node_id_background_meta, const Real virtual_side_number, const unsigned int side_index, const std::vector< Real > azimuthal_tangent=std::vector< Real >(), const subdomain_id_type block_id_shift=0, const bool quad_center_elements=false, const Real center_quad_factor=0.0, const bool create_inward_interface_boundaries=false, const bool create_outward_interface_boundaries=true, const boundary_id_type boundary_id_shift=0, const Real pitch_scale_factor=1.0, const bool generate_side_specific_boundaries=true, const TRI_ELEM_TYPE tri_elem_type=TRI_ELEM_TYPE::TRI3, const QUAD_ELEM_TYPE quad_elem_type=QUAD_ELEM_TYPE::QUAD4)
Generates a mesh of a polygon slice, which is the foundation of both buildGeneralSlice and buildSimpl...
const std::vector< double > y
multiBdryLayerParams modifiedMultiBdryLayerParamsCreator(const multiBdryLayerParams &original_multi_bdry_layer_params, const unsigned int order) const
Modifies the input multi boundary layer parameters for node generation, especially for the quadratic ...
Contains a single block&#39;s boundary layer related parameters.
std::vector< Real > azimuthalAnglesCollector(ReplicatedMesh &mesh, std::vector< Point > &boundary_points, const Real lower_azi=-30.0, const Real upper_azi=30.0, const unsigned int return_type=ANGLE_TANGENT, const unsigned int num_sides=6, const boundary_id_type bid=OUTER_SIDESET_ID, const bool calculate_origin=true, const Real input_origin_x=0.0, const Real input_origin_y=0.0, const Real tol=1.0E-10) const
Collects sorted azimuthal angles of the external boundary.
void nodeCoordRotate(Real &x, Real &y, const Real theta) const
Calculates x and y coordinates after rotating by theta angle.
std::vector< std::vector< Real > > biasTermsCalculator(const std::vector< Real > radial_biases, const std::vector< unsigned int > intervals, const multiBdryLayerParams inner_boundary_layer_params, const multiBdryLayerParams outer_boundary_layer_params) const
Creates bias terms for multiple blocks.
void adjustPeripheralQuadraticElements(MeshBase &out_mesh, const QUAD_ELEM_TYPE boundary_quad_elem_type) const
Adjusts the mid-edge node locations in boundary regions when using quadratic elements with uniform bo...
static InputParameters validParams()
void cenQuadElemDef(ReplicatedMesh &mesh, const unsigned int div_num, const subdomain_id_type block_id_shift, const bool create_outward_interface_boundaries, const boundary_id_type boundary_id_shift, std::vector< std::vector< Node *>> &nodes, const bool assign_external_boundary=false, const unsigned int side_index=0, const bool generate_side_specific_boundaries=true, const QUAD_ELEM_TYPE quad_elem_type=QUAD_ELEM_TYPE::QUAD4) const
Defines quad elements in the very central region of the polygon.
int8_t boundary_id_type
std::string pitchMetaDataErrorGenerator(const std::vector< MeshGeneratorName > &input_names, const std::vector< Real > &metadata_vals, const std::string &metadata_name) const
Generate a string that contains the detailed metadata information for inconsistent input mesh metadat...
const std::vector< double > x
void setRingExtraIDs(MeshBase &mesh, const std::string id_name, const unsigned int num_sides, const std::vector< unsigned int > num_sectors_per_side, const std::vector< unsigned int > ring_intervals, const bool ring_wise_id, const bool quad_center_elements)
assign ring extra ids to polygon mesh
static const std::string pitch
void backgroundNodes(ReplicatedMesh &mesh, const unsigned int num_sectors_per_side, const unsigned int background_intervals, const std::vector< Real > biased_terms, const Real background_corner_distance, const Real background_corner_radial_interval_length, const Real corner_p[2][2], const Real corner_to_corner, const Real background_in, const std::vector< Real > azimuthal_tangent=std::vector< Real >()) const
Creates nodes for the ring-to-polygon transition region (i.e., background) of a single slice...
void ringNodes(ReplicatedMesh &mesh, const std::vector< Real > ring_radii, const std::vector< unsigned int > ring_layers, const std::vector< std::vector< Real >> biased_terms, const unsigned int num_sectors_per_side, const Real corner_p[2][2], const Real corner_to_corner, const std::vector< Real > azimuthal_tangent=std::vector< Real >()) const
Creates nodes for the ring-geometry region of a single slice.
virtual std::unique_ptr< MeshBase > generate() override
static void addRingAndSectorIDParams(InputParameters &params)
Add InputParameters which are used by ring and sector IDs.
void centerNodes(ReplicatedMesh &mesh, const Real virtual_side_number, const unsigned int div_num, const Real ring_radii_0, std::vector< std::vector< Node *>> &nodes) const
Creates nodes of the very central mesh layer of the polygon for quad central elements.
std::pair< Real, Real > pointInterpolate(const Real pi_1_x, const Real pi_1_y, const Real po_1_x, const Real po_1_y, const Real pi_2_x, const Real pi_2_y, const Real po_2_x, const Real po_2_y, const unsigned int i, const unsigned int j, const unsigned int num_sectors_per_side, const unsigned int peripheral_intervals) const
Calculates the point coordinates of within a parallelogram region using linear interpolation.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string ring_radii
std::unique_ptr< ReplicatedMesh > buildSimpleSlice(std::vector< Real > ring_radii, const std::vector< unsigned int > ring_layers, const std::vector< Real > ring_radial_biases, const multiBdryLayerParams &ring_inner_boundary_layer_params, const multiBdryLayerParams &ring_outer_boundary_layer_params, std::vector< Real > ducts_center_dist, const std::vector< unsigned int > ducts_layers, const std::vector< Real > duct_radial_biases, const multiBdryLayerParams &duct_inner_boundary_layer_params, const multiBdryLayerParams &duct_outer_boundary_layer_params, const Real pitch, const unsigned int num_sectors_per_side, const unsigned int background_intervals, const Real background_radial_bias, const singleBdryLayerParams &background_inner_boundary_layer_params, const singleBdryLayerParams &background_outer_boundary_layer_params, dof_id_type &node_id_background_meta, const unsigned int side_number, const unsigned int side_index, const std::vector< Real > azimuthal_tangent=std::vector< Real >(), const subdomain_id_type block_id_shift=0, const bool quad_center_elements=false, const Real center_quad_factor=0.0, const bool create_inward_interface_boundaries=false, const bool create_outward_interface_boundaries=true, const boundary_id_type boundary_id_shift=0, const bool generate_side_specific_boundaries=true, const TRI_ELEM_TYPE tri_elem_type=TRI_ELEM_TYPE::TRI3, const QUAD_ELEM_TYPE quad_elem_type=QUAD_ELEM_TYPE::QUAD4)
Creates a mesh of a slice that corresponds to a single side of the polygon to be generated.
void ductNodes(ReplicatedMesh &mesh, std::vector< Real > *const ducts_center_dist, const std::vector< unsigned int > ducts_layers, const std::vector< std::vector< Real >> biased_terms, const unsigned int num_sectors_per_side, const Real corner_p[2][2], const Real corner_to_corner, const std::vector< Real > azimuthal_tangent=std::vector< Real >()) const
Creates nodes for the duct-geometry region of a single slice.
A base class that contains common members for Reactor module mesh generators.
const InputParameters & parameters() const
singleBdryLayerParams modifiedSingleBdryLayerParamsCreator(const singleBdryLayerParams &original_single_bdry_layer_params, const unsigned int order) const
Modifies the input single boundary layer parameters for node generation, especially for the quadratic...
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
void reassignBoundaryIDs(MeshBase &mesh, const boundary_id_type id_shift, const std::set< boundary_id_type > &boundary_ids, const bool reverse=false)
reassign interface boundary IDs on the input mesh by applying the boundary ID shift ...
PolygonMeshGeneratorBase(const InputParameters &parameters)
std::unique_ptr< ReplicatedMesh > buildSimplePeripheral(const unsigned int num_sectors_per_side, const unsigned int peripheral_invervals, const std::vector< std::pair< Real, Real >> &position_inner, const std::vector< std::pair< Real, Real >> &d_position_outer, const subdomain_id_type id_shift, const QUAD_ELEM_TYPE quad_elem_type, const bool create_inward_interface_boundaries=false, const bool create_outward_interface_boundaries=true)
Creates peripheral area mesh for the patterned hexagon mesh.
void quadElemDef(ReplicatedMesh &mesh, const unsigned int num_sectors_per_side, const std::vector< unsigned int > subdomain_rings, const unsigned int side_index, const std::vector< Real > azimuthal_tangent=std::vector< Real >(), const subdomain_id_type block_id_shift=0, const dof_id_type nodeid_shift=0, const bool create_inward_interface_boundaries=false, const bool create_outward_interface_boundaries=true, const boundary_id_type boundary_id_shift=0, const bool generate_side_specific_boundaries=true, const QUAD_ELEM_TYPE quad_elem_type=QUAD_ELEM_TYPE::QUAD4) const
Defines general quad elements for the polygon.
uint8_t dof_id_type
PolygonSizeStyle
An enum class for style of input polygon size.
std::set< boundary_id_type > getInterfaceBoundaryIDs(const std::vector< std::vector< unsigned int >> &pattern, const std::vector< std::vector< boundary_id_type >> &interface_boundary_id_shift_pattern, const std::set< boundary_id_type > &boundary_ids, const std::vector< std::set< boundary_id_type >> &input_interface_boundary_ids, const bool use_interface_boundary_id_shift, const bool create_interface_boundary_id, const unsigned int num_extra_layers) const
returns a list of interface boundary IDs on the mesh generated by this mesh generator ...
void cutOffPolyDeform(MeshBase &mesh, const Real orientation, const Real y_max_0, const Real y_max_n, const Real y_min, const unsigned int mesh_type, const Real unit_angle=60.0, const Real tols=1E-5) const
Deforms peripheral region when the external side of a polygon assembly of stitched meshes cuts off th...