https://mooseframework.inl.gov
Loading...
Searching...
No Matches
AzimuthalBlockSplitGenerator.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
13#include "MooseEnum.h"
14
20{
21public:
23
25
26 std::unique_ptr<MeshBase> generate() override;
27
28protected:
30 const MeshGeneratorName _input_name;
32 std::vector<subdomain_id_type> _old_block_ids;
34 const std::vector<subdomain_id_type> _new_block_ids;
36 const std::vector<SubdomainName> _new_block_names;
42 const Real _angle_range;
44 std::vector<Real> & _azimuthal_angle_meta;
46 std::unique_ptr<MeshBase> & _input;
48 std::vector<unsigned int> _num_sectors_per_side_meta;
51
66 void angleIdentifier(const Real & terminal_angle,
67 Real & original_down,
68 std::vector<Real>::iterator & original_down_it,
69 Real & original_up,
70 std::vector<Real>::iterator & original_up_it,
71 std::vector<Real> & azimuthal_angles_vtx);
72
90 void angleModifier(const Real & side_angular_shift,
91 const Real & side_angular_range,
92 const Real & azi_tol,
93 const Real & terminal_angle,
94 const Real & original_down,
95 std::vector<Real>::iterator & original_down_it,
96 const Real & original_up,
97 std::vector<Real>::iterator & original_up_it,
98 Real & azi_to_keep,
99 Real & azi_to_mod);
100
117 void nodeModifier(ReplicatedMesh & mesh,
118 const std::vector<std::pair<Real, dof_id_type>> & node_id_mod,
119 const std::vector<std::pair<Real, dof_id_type>> & node_id_keep,
120 std::vector<Real> & circular_rad_list,
121 std::vector<Real> & non_circular_rad_list,
122 const std::vector<std::tuple<dof_id_type, boundary_id_type>> & node_list,
123 const Real & term_angle,
124 const bool & external_block_change,
125 const Real & rad_tol);
126
135 Point midPointCorrector(const Point vertex_0,
136 const Point vertex_1,
137 const Real max_radius,
138 const Real rad_tol);
139};
This AzimuthalBlockSplitGenerator object takes in a polygon/hexagon concentric circle mesh and rename...
Real _end_angle
Ending angular position of the modified azimuthal blocks.
std::vector< unsigned int > _num_sectors_per_side_meta
MeshMetaData: number of mesh sectors of each polygon side.
const bool _preserve_volumes
Whether volumes of ring regions need to be preserved.
Real _start_angle
Starting angular position of the modified azimuthal blocks.
void angleIdentifier(const Real &terminal_angle, Real &original_down, std::vector< Real >::iterator &original_down_it, Real &original_up, std::vector< Real >::iterator &original_up_it, std::vector< Real > &azimuthal_angles_vtx)
Finds the azimuthal angles of the original mesh that need to be modified to match the edge locations ...
std::unique_ptr< MeshBase > generate() override
void nodeModifier(ReplicatedMesh &mesh, const std::vector< std::pair< Real, dof_id_type > > &node_id_mod, const std::vector< std::pair< Real, dof_id_type > > &node_id_keep, std::vector< Real > &circular_rad_list, std::vector< Real > &non_circular_rad_list, const std::vector< std::tuple< dof_id_type, boundary_id_type > > &node_list, const Real &term_angle, const bool &external_block_change, const Real &rad_tol)
Modifies the nodes with the azimuthal angles modified in AzimuthalBlockSplitGenerator::angleModifier(...
const std::vector< subdomain_id_type > _new_block_ids
IDs of the new azimuthal blocks.
std::vector< subdomain_id_type > _old_block_ids
IDs to identify the input mesh blocks to be modified.
std::vector< Real > & _azimuthal_angle_meta
MeshMetaData: vector of all nodes' azimuthal angles.
const std::vector< SubdomainName > _new_block_names
Names of the new azimuthal blocks.
const Real _angle_range
Angular range of the modified azimuthal blocks.
const MeshGeneratorName _input_name
Input mesh to be modified.
std::unique_ptr< MeshBase > & _input
Reference to input mesh pointer.
void angleModifier(const Real &side_angular_shift, const Real &side_angular_range, const Real &azi_tol, const Real &terminal_angle, const Real &original_down, std::vector< Real >::iterator &original_down_it, const Real &original_up, std::vector< Real >::iterator &original_up_it, Real &azi_to_keep, Real &azi_to_mod)
Modifies the azimuthal angle to perform move the edge of the control drum during rotation.
Point midPointCorrector(const Point vertex_0, const Point vertex_1, const Real max_radius, const Real rad_tol)
Calculate the corrected midpoint position of the element with vertices moved.
const InputParameters & parameters() const
A base class that contains common members for Reactor module mesh generators.