DistributedRectilinearMeshGenerator

Create a line, square, or cube mesh with uniformly spaced or biased elements.

Overview

Similar to GeneratedMeshGenerator - builds lines, rectangles and rectangular prisms. It differs though in the way the mesh is constructed in parallel. While GeneratedMeshGenerator creates a full copy of the mesh on every processor - DistributedRectilinearMeshGenerator only creates the elements / nodes each processor is assigned. This makes it _much_ faster in parallel and much leaner in memory.

commentnote

Be aware: DistributedRectilinearMeshGenerator turns on parallel_type = distributed. So make sure that everything you're using in your problem works with that before using this!

More Information

DistributedRectilinearMeshGenerator works by first creating a "dual graph" of the element connectivity - before ever building an elements. It then uses PetscExternalPartitioner to partition that graph - assigning elements to processors. Then, each processor can read the partition map and build only the elements that need to be on that processor. Final steps include adding in "ghosted" elements and making sure that boundary conditions are right.

Example Syntax

[Mesh]
  [gmg]
    type = DistributedRectilinearMeshGenerator
    dim = 2
    nx = 100
    ny = 100
  []
[]
(test/tests/meshgenerators/distributed_rectilinear/generator/distributed_rectilinear_mesh_generator.i)

Input Parameters

  • dimThe dimension of the mesh to be generated

    C++ Type:MooseEnum

    Options:1, 2, 3

    Controllable:No

    Description:The dimension of the mesh to be generated

Required Parameters

  • apply_element_weightFalseIndicate if we are going to apply element weights to partitioners

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Indicate if we are going to apply element weights to partitioners

  • apply_side_weightFalseIndicate if we are going to apply side weights to partitioners

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Indicate if we are going to apply side weights to partitioners

  • bias_x1The amount by which to grow (or shrink) the cells in the x-direction.

    Default:1

    C++ Type:double

    Controllable:No

    Description:The amount by which to grow (or shrink) the cells in the x-direction.

  • bias_y1The amount by which to grow (or shrink) the cells in the y-direction.

    Default:1

    C++ Type:double

    Controllable:No

    Description:The amount by which to grow (or shrink) the cells in the y-direction.

  • bias_z1The amount by which to grow (or shrink) the cells in the z-direction.

    Default:1

    C++ Type:double

    Controllable:No

    Description:The amount by which to grow (or shrink) the cells in the z-direction.

  • elem_typeThe type of element from libMesh to generate (default: linear element for requested dimension)

    C++ Type:MooseEnum

    Options:EDGE, EDGE2, EDGE3, EDGE4, QUAD, QUAD4, QUAD8, QUAD9, TRI, TRI3, TRI6, TRI7, HEX, HEX8, HEX20, HEX27, TET, TET4, TET10, TET14, PRISM, PRISM6, PRISM15, PRISM18, PYRAMID, PYRAMID5, PYRAMID13, PYRAMID14

    Controllable:No

    Description:The type of element from libMesh to generate (default: linear element for requested dimension)

  • num_cores_for_partition0Number of cores for partitioning the graph

    Default:0

    C++ Type:unsigned int

    Controllable:No

    Description:Number of cores for partitioning the graph

  • num_cores_per_compute_node1Number of cores per compute node for hierarchical partitioning

    Default:1

    C++ Type:unsigned int

    Controllable:No

    Description:Number of cores per compute node for hierarchical partitioning

  • num_side_layers2Number of layers of off-processor side neighbors is reserved during mesh generation

    Default:2

    C++ Type:unsigned int

    Controllable:No

    Description:Number of layers of off-processor side neighbors is reserved during mesh generation

  • nx1Number of elements in the X direction

    Default:1

    C++ Type:unsigned long

    Controllable:No

    Description:Number of elements in the X direction

  • ny1Number of elements in the Y direction

    Default:1

    C++ Type:unsigned long

    Controllable:No

    Description:Number of elements in the Y direction

  • nz1Number of elements in the Z direction

    Default:1

    C++ Type:unsigned long

    Controllable:No

    Description:Number of elements in the Z direction

  • part_packageparmetisThe external package is used for partitioning the mesh via PETSc

    Default:parmetis

    C++ Type:MooseEnum

    Options:parmetis, ptscotch, chaco, party, hierarch

    Controllable:No

    Description:The external package is used for partitioning the mesh via PETSc

  • partitiongraphWhich method (graph linear square) use to partition mesh

    Default:graph

    C++ Type:MooseEnum

    Options:graph, linear, square

    Controllable:No

    Description:Which method (graph linear square) use to partition mesh

  • xmax1Upper X Coordinate of the generated mesh

    Default:1

    C++ Type:double

    Controllable:No

    Description:Upper X Coordinate of the generated mesh

  • xmin0Lower X Coordinate of the generated mesh

    Default:0

    C++ Type:double

    Controllable:No

    Description:Lower X Coordinate of the generated mesh

  • ymax1Upper Y Coordinate of the generated mesh

    Default:1

    C++ Type:double

    Controllable:No

    Description:Upper Y Coordinate of the generated mesh

  • ymin0Lower Y Coordinate of the generated mesh

    Default:0

    C++ Type:double

    Controllable:No

    Description:Lower Y Coordinate of the generated mesh

  • zmax1Upper Z Coordinate of the generated mesh

    Default:1

    C++ Type:double

    Controllable:No

    Description:Upper Z Coordinate of the generated mesh

  • zmin0Lower Z Coordinate of the generated mesh

    Default:0

    C++ Type:double

    Controllable:No

    Description:Lower Z Coordinate of the generated mesh

Optional Parameters

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

    C++ Type:std::vector<std::string>

    Controllable:No

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

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Set the enabled status of the MooseObject.

  • save_with_nameKeep the mesh from this mesh generator in memory with the name specified

    C++ Type:std::string

    Controllable:No

    Description:Keep the mesh from this mesh generator in memory with the name specified

Advanced Parameters

  • nemesisFalseWhether or not to output the mesh file in the nemesisformat (only if output = true)

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not to output the mesh file in the nemesisformat (only if output = true)

  • outputFalseWhether or not to output the mesh file after generating the mesh

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not to output the mesh file after generating the mesh

  • show_infoFalseWhether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)

Debugging Parameters

Input Files