- has_outer_squareFalseIt determines if meshes for a outer square are added to concentric circle meshes.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:It determines if meshes for a outer square are added to concentric circle meshes.
- inner_mesh_fractionLength of inner square / radius of the innermost circle
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Length of inner square / radius of the innermost circle
- num_sectorsnum_sectors % 2 = 0, num_sectors > 0Number of azimuthal sectors in each quadrant'num_sectors' must be an even number.
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:num_sectors % 2 = 0, num_sectors > 0Number of azimuthal sectors in each quadrant'num_sectors' must be an even number.
- preserve_volumesFalseVolume of concentric circles can be preserved using this function.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Volume of concentric circles can be preserved using this function.
- radiiRadii of major concentric circles
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Radii of major concentric circles
- ringsNumber of rings in each circle or in the moderator
C++ Type:std::vector<unsigned int>
Unit:(no unit assumed)
Controllable:No
Description:Number of rings in each circle or in the moderator
ConcentricCircleMesh
This ConcentricCircleMesh source code is to generate concentric circle meshes.
Description
The ConcentricCircleMesh
object is to generate meshes for concentric circles. Particularly, it would be useful to generate 2D meshes for typical LWR fuels. Users can refine meshes by providing a higher number of rings for each specified concentric circle region or a higher number of sectors in each quadrant. The test, concentric_circle_mesh.i, explains the use of the 'ConcentricCircleMesh' object. To execute the test only for generating 2D meshes,
~/projects/moose/test/moose_test-opt -i concentric_circle_mesh.i --mesh-only
To execute the test with the engineering and mathematical physics solvers,
~/projects/moose/test/moose_test-opt -i concentric_circle_mesh.i
Be aware: ConcentricCircleMesh
only works with the ReplicatedMesh type.
More Information
ConcentricCircleMesh
works by creating the first quadrant called "top_right." MooseEnum called portion controls which portion of meshes is generated. Any other one-fourth portions of circles are generated by rotating the "top_right" portion. Half portions are generated by stitching two different one-fourth portions depending on users' usages.
Users must provide the input parameters such as a number of sectors in a quadrant, a list of radii, a list of rings, the inner mesh fraction, a boolean for the volume preserving function. * list of radii: specific locations of radii of concentric circles * list of rings: numbers of rings for concentric circles * inner mesh fraction: ratio of the length of the inner square to the radius of the innermost circle mesh * volume for concentric circles can be preserved or not (on/off).
Users can choose if meshes for the moderator are added to meshes for concentric circles or not. A portion can be specified, however, it is not required. The default setting generates the full concentric circles.
Developer Information
If you're going to enhance ConcentricCircleMesh,
may be developing the windmill approach for the moderator might be necessary. New algorithms for adding nodes and elements, including the connectivity, may be needed. They can be found in ConcentricCircleMesh.C
. The smoothing method can be incorporated to the developed meshes.
Example Syntax
[Mesh]
type = ConcentricCircleMesh
num_sectors = 6
radii = '0.2546 0.3368 0.3600 0.3818 0.3923 0.4025 0.4110 0.4750'
rings = '10 6 4 4 4 2 2 6 10'
inner_mesh_fraction = 0.6
has_outer_square = on
pitch = 1.42063
#portion = left_half
preserve_volumes = off
[]
[Variables]
[./u]
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = left
value = 0
[../]
[./right]
type = DirichletBC
variable = u
boundary = right
value = 1
[../]
[]
[Executioner]
type = Steady
[]
[Outputs]
exodus = true
[]
(moose/test/tests/mesh/concentric_circle_mesh/concentric_circle_mesh.i)Input Parameters
- add_sideset_idsThe listed sideset ids will be assumed valid for the mesh. This permits setting up boundary restrictions for sidesets initially containing no sides. Names for this sidesets may be provided using add_sideset_names. In this case this list and add_sideset_names must contain the same number of items.
C++ Type:std::vector<short>
Unit:(no unit assumed)
Controllable:No
Description:The listed sideset ids will be assumed valid for the mesh. This permits setting up boundary restrictions for sidesets initially containing no sides. Names for this sidesets may be provided using add_sideset_names. In this case this list and add_sideset_names must contain the same number of items.
- add_sideset_namesThe listed sideset names will be assumed valid for the mesh. This permits setting up boundary restrictions for sidesets initially containing no sides. Ids for this sidesets may be provided using add_sideset_ids. In this case this list and add_sideset_ids must contain the same number of items.
C++ Type:std::vector<BoundaryName>
Unit:(no unit assumed)
Controllable:No
Description:The listed sideset names will be assumed valid for the mesh. This permits setting up boundary restrictions for sidesets initially containing no sides. Ids for this sidesets may be provided using add_sideset_ids. In this case this list and add_sideset_ids must contain the same number of items.
- add_subdomain_idsThe listed subdomain ids will be assumed valid for the mesh. This permits setting up subdomain restrictions for subdomains initially containing no elements, which can occur, for example, in additive manufacturing simulations which dynamically add and remove elements. Names for this subdomains may be provided using add_subdomain_names. In this case this list and add_subdomain_names must contain the same number of items.
C++ Type:std::vector<unsigned short>
Unit:(no unit assumed)
Controllable:No
Description:The listed subdomain ids will be assumed valid for the mesh. This permits setting up subdomain restrictions for subdomains initially containing no elements, which can occur, for example, in additive manufacturing simulations which dynamically add and remove elements. Names for this subdomains may be provided using add_subdomain_names. In this case this list and add_subdomain_names must contain the same number of items.
- add_subdomain_namesThe listed subdomain names will be assumed valid for the mesh. This permits setting up subdomain restrictions for subdomains initially containing no elements, which can occur, for example, in additive manufacturing simulations which dynamically add and remove elements. IDs for this subdomains may be provided using add_subdomain_ids. Otherwise IDs are automatically assigned. In case add_subdomain_ids is set too, both lists must contain the same number of items.
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:The listed subdomain names will be assumed valid for the mesh. This permits setting up subdomain restrictions for subdomains initially containing no elements, which can occur, for example, in additive manufacturing simulations which dynamically add and remove elements. IDs for this subdomains may be provided using add_subdomain_ids. Otherwise IDs are automatically assigned. In case add_subdomain_ids is set too, both lists must contain the same number of items.
- allow_renumberingTrueIf allow_renumbering=false, node and element numbers are kept fixed until deletion
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:If allow_renumbering=false, node and element numbers are kept fixed until deletion
- build_all_side_lowerd_meshFalseTrue to build the lower-dimensional mesh for all sides.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:True to build the lower-dimensional mesh for all sides.
- coord_blockBlock IDs for the coordinate systems. If this parameter is specified, then it must encompass all the subdomains on the mesh.
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:Block IDs for the coordinate systems. If this parameter is specified, then it must encompass all the subdomains on the mesh.
- ghosting_patch_sizeThe number of nearest neighbors considered for ghosting purposes when 'iteration' patch update strategy is used. Default is 5 * patch_size.
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The number of nearest neighbors considered for ghosting purposes when 'iteration' patch update strategy is used. Default is 5 * patch_size.
- max_leaf_size10The maximum number of points in each leaf of the KDTree used in the nearest neighbor search. As the leaf size becomes larger,KDTree construction becomes faster but the nearest neighbor searchbecomes slower.
Default:10
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The maximum number of points in each leaf of the KDTree used in the nearest neighbor search. As the leaf size becomes larger,KDTree construction becomes faster but the nearest neighbor searchbecomes slower.
- parallel_typeDEFAULTDEFAULT: Use libMesh::ReplicatedMesh unless --distributed-mesh is specified on the command line REPLICATED: Always use libMesh::ReplicatedMesh DISTRIBUTED: Always use libMesh::DistributedMesh
Default:DEFAULT
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:DEFAULT: Use libMesh::ReplicatedMesh unless --distributed-mesh is specified on the command line REPLICATED: Always use libMesh::ReplicatedMesh DISTRIBUTED: Always use libMesh::DistributedMesh
- pitch0The moderator can be added to complete meshes for one unit cell of fuel assembly.Elements are quad meshes.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The moderator can be added to complete meshes for one unit cell of fuel assembly.Elements are quad meshes.
- portionfullControl of which part of mesh is created
Default:full
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Control of which part of mesh is created
- skip_refine_when_use_splitTrueTrue to skip uniform refinements when using a pre-split mesh.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:True to skip uniform refinements when using a pre-split mesh.
Optional Parameters
- alpha_rotationThe number of degrees that the domain should be alpha-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The number of degrees that the domain should be alpha-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.
- beta_rotationThe number of degrees that the domain should be beta-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The number of degrees that the domain should be beta-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.
- gamma_rotationThe number of degrees that the domain should be gamma-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The number of degrees that the domain should be gamma-rotated using the Euler angle ZXZ convention from https://en.wikipedia.org/wiki/Euler_angles#Rotation_matrix in order to align with a canonical physical space of your choosing.
- length_unitHow much distance one mesh length unit represents, e.g. 1 cm, 1 nm, 1 ft, 5inches
C++ Type:std::string
Unit:(no unit assumed)
Controllable:No
Description:How much distance one mesh length unit represents, e.g. 1 cm, 1 nm, 1 ft, 5inches
- up_directionSpecify what axis corresponds to the up direction in physical space (the opposite of the gravity vector if you will). If this parameter is provided, we will perform a single 90 degree rotation of the domain--if the provided axis is 'x' or 'z', we will not rotate if the axis is 'y'--such that a point which was on the provided axis will now lie on the y-axis, e.g. the y-axis is our canonical up direction. If you want finer grained control than this, please use the 'alpha_rotation', 'beta_rotation', and 'gamma_rotation' parameters.
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Specify what axis corresponds to the up direction in physical space (the opposite of the gravity vector if you will). If this parameter is provided, we will perform a single 90 degree rotation of the domain--if the provided axis is 'x' or 'z', we will not rotate if the axis is 'y'--such that a point which was on the provided axis will now lie on the y-axis, e.g. the y-axis is our canonical up direction. If you want finer grained control than this, please use the 'alpha_rotation', 'beta_rotation', and 'gamma_rotation' parameters.
Transformations Relative To Parent Application Frame Of Reference Parameters
- coord_typeXYZType of the coordinate system per block param
Default:XYZ
C++ Type:MultiMooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Type of the coordinate system per block param
- rz_coord_axisYThe rotation axis (X | Y) for axisymmetric coordinates
Default:Y
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:The rotation axis (X | Y) for axisymmetric coordinates
- rz_coord_blocksBlocks using general axisymmetric coordinate systems
C++ Type:std::vector<SubdomainName>
Unit:(no unit assumed)
Controllable:No
Description:Blocks using general axisymmetric coordinate systems
- rz_coord_directionsAxis directions for each block in 'rz_coord_blocks'
C++ Type:std::vector<libMesh::VectorValue<double>>
Unit:(no unit assumed)
Controllable:No
Description:Axis directions for each block in 'rz_coord_blocks'
- rz_coord_originsAxis origin points for each block in 'rz_coord_blocks'
C++ Type:std::vector<libMesh::Point>
Unit:(no unit assumed)
Controllable:No
Description:Axis origin points for each block in 'rz_coord_blocks'
Coordinate System Parameters
- centroid_partitioner_directionSpecifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial
- partitionerdefaultSpecifies a mesh partitioner to use when splitting the mesh for a parallel computation.
Default:default
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Specifies a mesh partitioner to use when splitting the mesh for a parallel computation.
Partitioning Parameters
- construct_node_list_from_side_listTrueWhether or not to generate nodesets from the sidesets (usually a good idea).
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Whether or not to generate nodesets from the sidesets (usually a good idea).
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Unit:(no unit assumed)
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- dim1This is only required for certain mesh formats where the dimension of the mesh cannot be autodetected. In particular you must supply this for GMSH meshes. Note: This is completely ignored for ExodusII meshes!
Default:1
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:This is only required for certain mesh formats where the dimension of the mesh cannot be autodetected. In particular you must supply this for GMSH meshes. Note: This is completely ignored for ExodusII meshes!
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:Set the enabled status of the MooseObject.
- nemesisFalseIf nemesis=true and file=foo.e, actually reads foo.e.N.0, foo.e.N.1, ... foo.e.N.N-1, where N = # CPUs, with NemesisIO.
Default:False
C++ Type:bool
Unit:(no unit assumed)
Controllable:No
Description:If nemesis=true and file=foo.e, actually reads foo.e.N.0, foo.e.N.1, ... foo.e.N.N-1, where N = # CPUs, with NemesisIO.
- patch_size40The number of nodes to consider in the NearestNode neighborhood.
Default:40
C++ Type:unsigned int
Unit:(no unit assumed)
Controllable:No
Description:The number of nodes to consider in the NearestNode neighborhood.
- patch_update_strategyneverHow often to update the geometric search 'patch'. The default is to never update it (which is the most efficient but could be a problem with lots of relative motion). 'always' will update the patch for all secondary nodes at the beginning of every timestep which might be time consuming. 'auto' will attempt to determine at the start of which timesteps the patch for all secondary nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of secondary nodes for which penetration is not detected. If there can be substantial relative motion between the primary and secondary surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.
Default:never
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:How often to update the geometric search 'patch'. The default is to never update it (which is the most efficient but could be a problem with lots of relative motion). 'always' will update the patch for all secondary nodes at the beginning of every timestep which might be time consuming. 'auto' will attempt to determine at the start of which timesteps the patch for all secondary nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of secondary nodes for which penetration is not detected. If there can be substantial relative motion between the primary and secondary surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.