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