Update the link into a given direction, based on the childs neighbor relations. Define here the trumping rule to decide, which of the neighbors or boundarie is taken for the ghostFromFiner element
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=long_k), | intent(inout) | :: | neighID |
neighID for coarser |
||
integer, | intent(in) | :: | childCoord(4) |
child coordinates |
||
integer, | intent(in) | :: | childPos(8) |
position of childIds in levelDesc elem tID list |
||
integer, | intent(in) | :: | iStencilElem |
current stencil direction |
||
type(tem_element_type), | intent(in) | :: | elem | |||
integer, | intent(in) | :: | iStencil |
subroutine update_childNeighborID( neighID, childCoord, childPos, &
& iStencilElem, elem, iStencil)
! ---------------------------------------------------------------------------
!> neighID for coarser
integer(kind=long_k),intent(inout) :: neighID
!> child coordinates
integer, intent(in) :: childCoord(4)
!> position of childIds in levelDesc elem tID list
integer, intent(in) :: childPos(8)
!> current stencil direction
integer, intent(in) :: iStencilElem
!>
integer, intent(in) :: iStencil
!>
type(tem_element_type), intent(in) :: elem
! ---------------------------------------------------------------------------
integer :: childID, posInElem, posInNeighID
integer(kind=long_k) :: tNeighID
! ---------------------------------------------------------------------------
childID = int(tem_idOfCoord( childCoord ))
! childPos holds the positions of the child treeIDs in levelDesc%elem
! only if the current child element really exists, get information from its
! stencil
posInElem = childPos(childID)
if ( posInElem > 0 ) then
! if child at current position exists,
! take the max tID neighbor parent or the
! min boundaryID -> trumping rule (bIDs are stored as negative integers)
posInNeighID = elem%stencil%val( posInElem )%val(iStencil)%tIDpos( iStencilElem )
tNeighID = elem%neighID%val( posInElem )%val( posInNeighID )
if ( tNeighID > 0_long_k ) then
! neighbor exist, calculate its parent
neighID = max( neighID, tem_parentOF(tNeighID) )
else ! tNeighID <= 0
! neighbor is a BC ID
neighID = max( neighID, tNeighID )
end if
end if
end subroutine update_childNeighborID