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

Calls

proc~~floodwaves_tree~~CallsGraph proc~floodwaves_tree floodwaves_tree proc~sdr_write_proto_as_restart sdr_write_proto_as_restart proc~floodwaves_tree->proc~sdr_write_proto_as_restart sdr_mark_floodnode sdr_mark_floodnode proc~floodwaves_tree->sdr_mark_floodnode sdr_wetneighborsface sdr_wetneighborsface proc~floodwaves_tree->sdr_wetneighborsface tem_directChildren tem_directChildren proc~floodwaves_tree->tem_directChildren tem_eligibleChildren tem_eligibleChildren proc~floodwaves_tree->tem_eligibleChildren tem_log tem_log proc~floodwaves_tree->tem_log tem_toStr tem_toStr proc~floodwaves_tree->tem_toStr val val proc~floodwaves_tree->val proc~sdr_write_proto_as_restart->val dump_tem_global dump_tem_global proc~sdr_write_proto_as_restart->dump_tem_global newunit newunit proc~sdr_write_proto_as_restart->newunit proc~protodata_ofnode protoData_ofNode proc~sdr_write_proto_as_restart->proc~protodata_ofnode proc~write_childleaves write_childLeaves proc~sdr_write_proto_as_restart->proc~write_childleaves sdr_append_protovar sdr_append_protovar proc~sdr_write_proto_as_restart->sdr_append_protovar sdr_nodeprop_btest sdr_nodeprop_btest proc~sdr_write_proto_as_restart->sdr_nodeprop_btest tem_create_varMap tem_create_varMap proc~sdr_write_proto_as_restart->tem_create_varMap tem_restart_writeHeader tem_restart_writeHeader proc~sdr_write_proto_as_restart->tem_restart_writeHeader tem_solverTag tem_solverTag proc~sdr_write_proto_as_restart->tem_solverTag tem_varSys_init tem_varSys_init proc~sdr_write_proto_as_restart->tem_varSys_init proc~protodata_ofnode->val proc~protodata_ofnode->sdr_nodeprop_btest proc~write_childleaves->val proc~write_childleaves->proc~protodata_ofnode proc~write_childleaves->proc~write_childleaves proc~write_childleaves->sdr_nodeprop_btest

Called by

proc~~floodwaves_tree~~CalledByGraph proc~floodwaves_tree floodwaves_tree proc~sdr_flood_tree sdr_flood_tree proc~sdr_flood_tree->proc~floodwaves_tree program~seeder seeder program~seeder->proc~sdr_flood_tree