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" 38 virtual std::unique_ptr<MeshBase>
generate()
override;
158 std::unique_ptr<ReplicatedMesh>
160 const std::vector<unsigned int> ring_layers,
161 const std::vector<Real> ring_radial_biases,
164 std::vector<Real> ducts_center_dist,
165 const std::vector<unsigned int> ducts_layers,
166 const std::vector<Real> duct_radial_biases,
170 const unsigned int num_sectors_per_side,
171 const unsigned int background_intervals,
172 const Real background_radial_bias,
176 const unsigned int side_number,
177 const unsigned int side_index,
178 const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
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,
185 const bool generate_side_specific_boundaries =
true,
230 std::unique_ptr<ReplicatedMesh>
232 const std::vector<unsigned int> ring_layers,
233 const std::vector<Real> ring_radial_biases,
236 std::vector<Real> ducts_center_dist,
237 const std::vector<unsigned int> ducts_layers,
238 const std::vector<Real> duct_radial_biases,
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,
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);
305 std::unique_ptr<ReplicatedMesh>
307 const std::vector<unsigned int> ring_layers,
308 const std::vector<Real> ring_radial_biases,
311 std::vector<Real> ducts_center_dist,
312 const std::vector<unsigned int> ducts_layers,
313 const std::vector<Real> duct_radial_biases,
317 const unsigned int num_sectors_per_side,
318 const unsigned int background_intervals,
319 const Real background_radial_bias,
323 const Real virtual_side_number,
324 const unsigned int side_index,
325 const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
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,
332 const Real pitch_scale_factor = 1.0,
333 const bool generate_side_specific_boundaries =
true,
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;
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;
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;
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;
437 const unsigned int div_num,
439 const bool create_outward_interface_boundaries,
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,
464 const unsigned int num_sectors_per_side,
465 const std::vector<Real> azimuthal_tangent = std::vector<Real>(),
467 const bool create_outward_interface_boundaries =
true,
469 const bool assign_external_boundary =
false,
470 const unsigned int side_index = 0,
471 const bool generate_side_specific_boundaries =
true,
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>(),
500 const bool create_inward_interface_boundaries =
false,
501 const bool create_outward_interface_boundaries =
true,
503 const bool generate_side_specific_boundaries =
true,
525 std::unique_ptr<ReplicatedMesh>
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,
532 const bool create_inward_interface_boundaries =
false,
533 const bool create_outward_interface_boundaries =
true);
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;
596 const Real orientation,
600 const unsigned int mesh_type,
601 const Real unit_angle = 60.0,
602 const Real tols = 1E-5)
const;
613 const std::pair<Real, Real> & p2,
614 const std::pair<Real, Real> & p3,
615 const std::pair<Real, Real> & p4)
const;
635 std::vector<Point> & boundary_points,
636 const Real lower_azi = -30.0,
637 const Real upper_azi = 30.0,
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;
662 const Real lower_azi = -30.0,
663 const Real upper_azi = 30.0,
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;
683 std::vector<std::vector<Real>>
685 const std::vector<unsigned int> intervals,
701 const Real radial_bias,
702 const unsigned int intervals,
704 const singleBdryLayerParams outer_boundary_layer_params = {0.0, 0.0, 0, 1.0})
const;
720 const std::string id_name,
721 const unsigned int num_sides,
722 const std::vector<unsigned int> num_sectors_per_side);
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);
751 const std::set<boundary_id_type> & boundary_ids,
752 const bool reverse =
false);
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;
786 const unsigned int order)
const;
796 const singleBdryLayerParams & original_single_bdry_layer_params,
797 const unsigned int order)
const;
808 const std::vector<Real> & metadata_vals,
809 const std::string & metadata_name)
const;
std::vector< Real > fractions
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 ...
std::vector< unsigned int > intervals
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.
Contains multiple blocks's boundary layer related parameters.
std::vector< Real > biases
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'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.
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
std::vector< Real > widths
static void addRingAndSectorIDParams(InputParameters ¶ms)
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 ¶meters)
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.
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...