CoarsenBlockGenerator

Mesh generator which coarsens one or more blocks in an existing mesh. The coarsening algorithm works best for regular meshes.

Overview

This MeshGenerator object allows the user to coarsen one or more blocks in a mesh. It has been designed to work with previously refined meshes that were saved to a file without the mesh refinement pattern information. For example, refined meshes stored using Exodus or VTK file formats do not contain the information needed to recognize parent and children elements from uniform refinement. The heuristic can still work in the general case of non-uniform refinement. The heuristic is unlikely to work on a non-previously-refined mesh that we seek to coarsen.

commentnote

If elements are refined, using a RefineBlockGenerator for example, during the mesh generation process, this generator will not be able to coarsen them.

The user has to provide the ids of the blocks to be modified, as well as the corresponding levels of coarsening for each block. These must match up to the order of the aforementioned block id list, e.g. if the blocks you wish to modify are '0 2 1 4', with 1 coarsening for block 0, 2 for block 2, 3 for block 1, and 4 for block 4, then the coarsening list will need to look like '1 2 3 4'.

The user provides the starting point for the coarsening algorithm with the "starting_point" parameter. The element containing that point is found, then the algorithm attempts to coarsen by selecting each node of that element as the interior node of a coarse element containing that element. Once this element is coarsened, the neighbors of the coarse element are considered as targets for the next round of coarsening, until all elements are coarsened once for that round of coarsening. If the user has specified more than one round of coarsening, the algorithm is iterated.

commentnote

The starting point should be in the most refined region of the mesh and it should also be in the subdomain that the user has selected to be the most coarsened. These are due to limitations in the algorithm used for coarsening.

commentnote

Every block to be coarsened should be in a contiguous region of finer elements. The algorithm used for selecting new candidates for coarsening is not able to skip an already coarse region to reach other fine regions to coarsen.

commentnote

This mesh generator currently only works with QUAD and HEX elements and only outputs QUAD4 / HEX8 elements respectively. Please contact a MOOSE developer if you require a different element type. If you are wanting to coarsen a triangle or tetrahedral elements mesh though, it would probably be easier for you to just re-generate the mesh with a coarser size.

commentnote

If the mesh has been refined in a prior simulation using MOOSE h-refinement, please use a Checkpoint .cpr format, and then regular Adaptivity to coarsen instead of this mesh generator.

commentnote

If the input mesh has non-conformalities due to prior use of adaptive mesh refinement, this mesh generator may be able to remove them. However if the input mesh is disjoint (for example, nodes are not stitched together between two neighbor elements), this will not be improved. You may try a MeshRepairGenerator to stitch overlapping nodes before using a CoarsenBlockGenerator.

warningwarning

Sidesets containing sides that were coarsened into a coarser element side will not contain the coarse side. This is not implemented.

Input Parameters

  • blockThe list of blocks to be coarsened

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The list of blocks to be coarsened

  • coarseningMaximum amount of times to coarsen elements in each block. See 'block' for indexing

    C++ Type:std::vector<unsigned int>

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum amount of times to coarsen elements in each block. See 'block' for indexing

  • inputInput mesh to coarsen

    C++ Type:MeshGeneratorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Input mesh to coarsen

  • starting_pointA point inside the element to start the coarsening from

    C++ Type:libMesh::Point

    Unit:(no unit assumed)

    Controllable:No

    Description:A point inside the element to start the coarsening from

Required Parameters

  • check_for_non_conformal_output_meshTrueWhether to check the entire mesh for non-conformal nodes indicating that the coarsening operation has failed to produce a conformal mesh

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to check the entire mesh for non-conformal nodes indicating that the coarsening operation has failed to produce a conformal mesh

  • maximum_volume_ratio2Maximum allowed volume ratio between two fine elements to propagate the coarsening front through a side

    Default:2

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum allowed volume ratio between two fine elements to propagate the coarsening front through a side

  • verboseFalseWhether to make the mesh generator output details of its actions on the console

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Whether to make the mesh generator output details of its actions on the console

Optional Parameters

  • 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.

  • 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.

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

    C++ Type:std::string

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    Controllable:No

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

Debugging Parameters