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
note

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
[]
(test/tests/mesh/concentric_circle_mesh/concentric_circle_mesh.i)

Input Parameters

  • has_outer_squareFalseIt determines if meshes for a outer square are added to concentric circle meshes.

    Default:False

    C++ Type:bool

    Options:

    Description:It determines if meshes for a outer square are added to concentric circle meshes.

  • ringsNumber of rings in each circle or in the moderator

    C++ Type:std::vector

    Options:

    Description:Number of rings in each circle or in the moderator

  • preserve_volumesFalseVolume of concentric circles can be preserved using this function.

    Default:False

    C++ Type:bool

    Options:

    Description:Volume of concentric circles can be preserved using this function.

  • 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

    Options:

    Description:num_sectors % 2 = 0, num_sectors > 0Number of azimuthal sectors in each quadrant'num_sectors' must be an even number.

  • radiiRadii of major concentric circles

    C++ Type:std::vector

    Options:

    Description:Radii of major concentric circles

  • inner_mesh_fractionLength of inner square / radius of the innermost circle

    C++ Type:double

    Options:

    Description:Length of inner square / radius of the innermost circle

Required Parameters

  • allow_renumberingTrueIf allow_renumbering=false, node and element numbers are kept fixed until deletion

    Default:True

    C++ Type:bool

    Options:

    Description:If allow_renumbering=false, node and element numbers are kept fixed until deletion

  • 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

    Options:

    Description:The number of nearest neighbors considered for ghosting purposes when 'iteration' patch update strategy is used. Default is 5 * patch_size.

  • portionfullControl of which part of mesh is created

    Default:full

    C++ Type:MooseEnum

    Options:full top_right top_left bottom_left bottom_right right_half left_half top_half bottom_half

    Description:Control of which part of mesh is created

  • parallel_typeDEFAULTDISTRIBUTED: Always use libMesh::DistributedMesh REPLICATED: Always use libMesh::ReplicatedMesh DEFAULT: Use libMesh::ReplicatedMesh unless --distributed-mesh is specified on the command line

    Default:DEFAULT

    C++ Type:MooseEnum

    Options:DISTRIBUTED REPLICATED DEFAULT

    Description:DISTRIBUTED: Always use libMesh::DistributedMesh REPLICATED: Always use libMesh::ReplicatedMesh DEFAULT: Use libMesh::ReplicatedMesh unless --distributed-mesh is specified on the command line

  • pitch0The moderator can be added to complete meshes for one unit cell of fuel assembly.Elements are quad meshes.

    Default:0

    C++ Type:double

    Options:

    Description:The moderator can be added to complete meshes for one unit cell of fuel assembly.Elements are quad meshes.

  • 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

    Options:

    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.

Optional Parameters

  • 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

    Options:1 2 3

    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!

  • 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

    Options:

    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_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 slave 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 slave nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of slave nodes for which penetration is not detected. If there can be substantial relative motion between the master and slave 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

    Options:never always auto iteration

    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 slave 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 slave nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of slave nodes for which penetration is not detected. If there can be substantial relative motion between the master and slave surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector

    Options:

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Options:

    Description:Set the enabled status of the MooseObject.

  • construct_node_list_from_side_listTrueWhether or not to generate nodesets from the sidesets (usually a good idea).

    Default:True

    C++ Type:bool

    Options:

    Description:Whether or not to generate nodesets from the sidesets (usually a good idea).

  • patch_size40The number of nodes to consider in the NearestNode neighborhood.

    Default:40

    C++ Type:unsigned int

    Options:

    Description:The number of nodes to consider in the NearestNode neighborhood.

Advanced Parameters

  • partitionerdefaultSpecifies a mesh partitioner to use when splitting the mesh for a parallel computation.

    Default:default

    C++ Type:MooseEnum

    Options:default metis parmetis linear centroid hilbert_sfc morton_sfc

    Description:Specifies a mesh partitioner to use when splitting the mesh for a parallel computation.

  • centroid_partitioner_directionSpecifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial

    C++ Type:MooseEnum

    Options:x y z radial

    Description:Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial

Partitioning Parameters

Input Files