sdr_smooth_leaf Subroutine

public subroutine sdr_smooth_leaf(proto, header, maxLevel)

This routine smoothens fluid domain with maximum level jumps of 1.

This is done by running over all leaf, flooded, non-intersected node at each level and check for neighbor in all 26 directions. If neighbor exist in protoTree and is not a leaf then get eligible children of neighbor in the inverse direction of iDir and check if any of eligible children is not a leaf then refine myself.

Algorithm: Iterate over minLevel, maxLevel-2 - Iterate over all nodes in iLevel + if iNode is leaf, flooded and non intersected boundary * Iterate over 26 directions ++ if neighbor in iDir exist in protoTree and not a leaf ** get eligible children of neighbor in inverse iDir -- if any of eligible children in protoTree is not a leaf +++ refine iNode

Arguments

TypeIntentOptionalAttributesName
type(sdr_protoTree_type), intent(inout) :: proto

preliminary tree on which childern are created

type(sdr_confHead_type), intent(inout) :: header

some global information on solver name and version

integer, intent(in) :: maxLevel

Maximum level in the fluid domain


Calls

proc~~sdr_smooth_leaf~~CallsGraph proc~sdr_smooth_leaf sdr_smooth_leaf proc~tem_firstidatlevel tem_FirstIdAtLevel proc~sdr_smooth_leaf->proc~tem_firstidatlevel interface~destroy~11 destroy proc~sdr_smooth_leaf->interface~destroy~11 proc~tem_coordofid tem_CoordOfId proc~sdr_smooth_leaf->proc~tem_coordofid proc~sdr_nodeprop_btest sdr_nodeProp_btest proc~sdr_smooth_leaf->proc~sdr_nodeprop_btest interface~init~11 init proc~sdr_smooth_leaf->interface~init~11 proc~tem_stoptimer tem_stopTimer proc~sdr_smooth_leaf->proc~tem_stoptimer proc~tem_starttimer tem_startTimer proc~sdr_smooth_leaf->proc~tem_starttimer interface~append~10 append proc~sdr_smooth_leaf->interface~append~10 proc~tem_idofcoord tem_IdOfCoord proc~sdr_smooth_leaf->proc~tem_idofcoord proc~create_children create_children proc~sdr_smooth_leaf->proc~create_children proc~tem_eligiblechildren tem_eligibleChildren proc~sdr_smooth_leaf->proc~tem_eligiblechildren proc~tem_horizontalspacer tem_horizontalSpacer proc~sdr_smooth_leaf->proc~tem_horizontalspacer interface~positionofval~3 positionofval proc~sdr_smooth_leaf->interface~positionofval~3 proc~create_children->interface~append~10 proc~tem_directchildren tem_directChildren proc~create_children->proc~tem_directchildren proc~sdr_inheritbnd_eligiblechildren sdr_inHeritBnd_eligibleChildren proc~create_children->proc~sdr_inheritbnd_eligiblechildren proc~sdr_set_nodeprop_bit sdr_set_nodeProp_bit proc~create_children->proc~sdr_set_nodeprop_bit proc~sdr_clear_nodeprop_bit sdr_clear_nodeProp_bit proc~create_children->proc~sdr_clear_nodeprop_bit proc~sdr_inheritbnd_eligiblechildren->proc~sdr_nodeprop_btest proc~sdr_inheritbnd_eligiblechildren->proc~tem_eligiblechildren

Called by

proc~~sdr_smooth_leaf~~CalledByGraph proc~sdr_smooth_leaf sdr_smooth_leaf program~seeder seeder program~seeder->proc~sdr_smooth_leaf

Contents


Variables

TypeVisibilityAttributesNameInitial
integer, private :: iLevel
integer, private :: iWave
integer, private :: iParent
integer, private :: iDir
integer, private :: iChild
integer, private :: parent_pos
integer, private :: neighbor_pos
integer, private :: parentProps
integer, private :: nNodes_total
integer, private :: nNodes_level
integer, private :: nNodesOld
integer, private :: firstParent
integer, private :: lastParent
integer, private :: coord(4)
integer, private :: offset(4)
integer, private :: neighbor_coord(4)
integer(kind=long_k), private :: neighbor_tID
integer(kind=long_k), private :: parent_ID_offset
integer, private, allocatable:: eligible_childs(:)
integer, private :: eligible_childPos
logical, private :: isChildLeaf(8)
logical, private :: isChildTarget(8)
type(grw_longarray_type), private :: grwTreeID
integer, private :: child_nodePos(8)
logical, private :: noSub
logical, private :: neigh_noLeaf
logical, private :: neigh_noTarget
logical, private :: neigh_noSub