floodwaves_tree Subroutine

private subroutine floodwaves_tree(proto, header, geometry)

This routine loop over all nodes are flood non-interesting leaf node with wet face and inherit the wetness of the virtual node to the eligble childrens

The algorithm works by flooding the domain, starting from the seed points up to boundary elements. This approach is quite robust to broken STL definitions, as any cracks below the resolution are automatically healed and there is no dependece on the orientation of the surfaces. To avoid unintended leaking, the flooding takes only the 6 side neighbors into account, that is the computational domain will always be connected by faces, there will be no parts of the domain which are only connected by edges or corners.

Seeds are already marked as flooded during the previous leaf identification, also the neighboring sides have already been marked as wet. Note, that seeds in nodes with boundaries are ignored and not flooded.

Several iterations are done, referred to as waves and within each the following algorithm is used:

Iterate over all nodes. - If node is a leaf + If not intersecting boundaries: * Check if any side is wet, and if so, flood yourself. If flooded, mark all neighboring sides as wet. + If intersecting boundaries: nothing to do!

  • For virtual nodes: (if not leaf)
  • Inherit wet sides down to the direct children on this side (eligible children).

The procedure is finished, if no property changed during a wave. (Flooded status and wet faces are encoded in the PropertyBits field.

Arguments

Type IntentOptional Attributes Name
type(sdr_protoTree_type), intent(inout) :: proto

The proto tree description with all the data enabling the flooding.

type(sdr_confHead_type), intent(in), optional :: header

some global information on solver name and version

type(sdr_geometry_type), intent(in) :: geometry