append an element with its treeID, property, element type, position in Tree, position in boundary_ID, number of neighbors, procID
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_element_type), | intent(inout) | :: | me |
element object |
||
integer(kind=long_k), | intent(in) | :: | tID |
element treeID |
||
integer(kind=long_k), | intent(in), | optional | :: | property |
property associated with the treeID |
|
integer, | intent(in), | optional | :: | eType |
element type |
|
integer, | intent(in), | optional | :: | pntTID |
count of this type pointer of the treeID |
|
integer, | intent(in), | optional | :: | sourceProc |
the procID which is adding the element |
|
integer, | intent(in), | optional | :: | nNeighIDs |
number of neighbors |
|
integer, | intent(in), | optional | :: | haloNesting |
nesting level for haloElems |
|
logical, | intent(in), | optional | :: | needsUpdate | ||
type(tem_stencilElement_type), | intent(in), | optional | :: | stencilElements(:) | ||
integer, | intent(out) | :: | pos |
position of treeID |
||
logical, | intent(out), | optional | :: | wasAdded |
subroutine append_element( me, tID, property, eType, pntTID, & & sourceProc, nNeighIDs, haloNesting, needsUpdate, & & stencilElements, pos, wasAdded ) ! --------------------------------------------------------------------------- !> element object type( tem_element_type ), intent(inout) :: me !> element treeID integer(kind=long_k), intent(in) :: tID !> position of treeID integer, intent(out) :: pos !> property associated with the treeID integer(kind=long_k), intent(in), optional :: property !> element type integer, intent(in), optional :: eType !> count of this type ! integer, intent(inout) :: nElems !> pointer of the treeID integer, intent(in), optional :: pntTID !> nesting level for haloElems integer, intent(in), optional :: haloNesting !> the procID which is adding the element integer, intent(in), optional :: sourceProc !> logical, intent(in), optional :: needsUpdate !> number of neighbors integer, intent(in), optional :: nNeighIDs !> logical, intent(out),optional :: wasAdded !> type(tem_stencilElement_type), intent(in), optional :: stencilElements(:) ! --------------------------------------------------------------------------- integer :: iElem integer :: neighIDsize logical :: wasAdded_loc type(grw_stencilElementArray_type) :: stencilElementArray type(dyn_longArray_type) :: tneighID ! --------------------------------------------------------------------------- call append( me = me%tID, val = tID, pos = pos, wasAdded = wasAdded_loc ) if( wasAdded_loc ) then ! was not in list before, but added. Add all further handed in contents. if( present( property )) then call append( me = me%property, val = property ) else call append( me = me%property, val = 0_long_k ) end if if( present( eType )) then if ( tem_eTypeIsValid( eType ) ) then call append( me = me%eType, val = eType ) me%nElems( eType ) = me%nElems( eType ) + 1 else write(*,"(A,I0)") 'Found eType is NOT valid!', & & ', TreeID: ', tID, & & ', eType: ', eType end if else call append( me = me%eType, val = eT_undefined) end if if( present( pntTID )) then call append( me = me%pntTID, val = pntTID ) else call append( me = me%pntTID, val = -1 ) end if if( present( sourceProc )) then call append( me = me%sourceProc, val = sourceProc ) else call append( me = me%sourceProc, val = -1 ) end if if( present( haloNesting )) then call append( me = me%haloNesting, val = haloNesting ) else call append( me = me%haloNesting, val = 1 ) end if if( present( needsUpdate )) then call append( me = me%needsUpdate, val = needsUpdate ) else call append( me = me%needsUpdate, val = .false. ) end if call init( me = stencilElementArray, length = 1 ) call append( me = me%stencil, val = stencilElementArray ) if( present( stencilElements )) then do iElem = 1, size( stencilElements ) if( stencilElements(iElem)%QQN > 0 ) & & call append( me = me%stencil%val( pos ), & & val = stencilElements( iElem )) end do end if if( present( nNeighIDs )) then neighIDsize = max( 0, nNeighIDs ) else neighIDsize = 1 end if ! add empty dynamic array of length neighIDsize for the neighbors call init( me = tNeighID, length = neighIDsize ) call append( me = me%neighID, val = tNeighID ) end if ! was added to tID list if( present( wasAdded )) then wasAdded = wasAdded_loc end if end subroutine append_element