Update the found dependencies, which were built for non-ordered lists Out of fluid, ghost and halo lists, the totalList is constructed in an ordered fashion. The element order as in the TotalList is later passed on to the solver.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_levelDesc_type), | intent(inout) | :: | levelDesc(tree%global%minlevel:) |
the level descriptor to be filled |
||
integer, | intent(in) | :: | levelPointer(:) |
Pointer from original treeID list to level wise fluid list |
||
type(treelmesh_type), | intent(in) | :: | tree |
the global tree |
||
type(tem_stencilHeader_type), | intent(inout) | :: | computeStencil(:) |
array of all stencils used in the simulation |
subroutine update_elemPosToTotalPos( levelDesc, levelPointer, tree, & & computeStencil ) ! --------------------------------------------------------------------------- !> the global tree type(treelmesh_type), intent(in) :: tree !> Pointer from original treeID list to level wise fluid list integer, intent(in) :: levelPointer(:) !> the level descriptor to be filled type(tem_levelDesc_type), intent(inout) :: levelDesc(tree%global%minlevel:) !> array of all stencils used in the simulation type(tem_stencilHeader_type), intent(inout) :: computeStencil(:) ! --------------------------------------------------------------------------- integer :: iLevel, iElem, iStencil, iStencilElem, pos integer :: nUpdates, iError integer(kind=long_k) :: nTreeID logical :: needUpdate ! --------------------------------------------------------------------------- write(logUnit(3),*) 'Updating dependencies ...' ! Update the element positions from the position in the original ! elem list to the total list do iLevel = tree%global%minlevel, tree%global%maxlevel call update_buffer_elemPos( buffer = levelDesc( iLevel )%sendbuffer, & & levelDesc = levelDesc( iLevel ), & & iError = iError ) if (iError > 0) & write(dbgUnit(1),*) 'error in sendbuffer ',iError,' l',iLevel call update_buffer_elemPos( buffer = levelDesc( iLevel )%recvbuffer, & & levelDesc = levelDesc( iLevel ), & & iError = iError ) if( iError > 0 ) & write(dbgUnit(1),*) 'error in recvbuffer ',iError,' l',iLevel call update_buffer_elemPos( & & buffer = levelDesc( iLevel )%sendbufferFromCoarser, & & levelDesc = levelDesc( iLevel ), & & iError = iError ) if( iError > 0 ) & write(dbgUnit(1),*) 'error in sendFCbuff ',iError,' l',iLevel call update_buffer_elemPos( & & buffer = levelDesc( iLevel )%recvbufferFromCoarser, & & levelDesc = levelDesc( iLevel ), & & iError = iError ) if( iError > 0 ) & write(dbgUnit(1),*) 'error in recvFCbuff ',iError,' l',iLevel call update_buffer_elemPos( & & buffer = levelDesc( iLevel )%sendbufferFromFiner, & & levelDesc = levelDesc( iLevel ), & & iError = iError ) if( iError > 0 ) & write(dbgUnit(1),*) 'error in sendFFbuff ',iError,' l',iLevel call update_buffer_elemPos( & & buffer = levelDesc( iLevel )%recvbufferFromFiner, & & levelDesc = levelDesc( iLevel ), & & iError = iError ) if( iError > 0 ) & write(dbgUnit(1),*) 'error in recvFFbuff ',iError,' l',iLevel end do ! iLevel write(logUnit(4),*) 'Updating the stencil entries' ! update stencil elem entry from original treeID list to levelwise fluid ! list do iStencil = 2, size( computeStencil ) if( .not. computeStencil( iStencil )%useAll ) then do iElem = 1, computeStencil( iStencil )%nElems computeStencil( iStencil )%elem%val( iElem ) = & & levelPointer( computeStencil( iStencil )%elem%val( iElem )) end do end if end do ! Update the totalPos in the element-stencils to the sorted total list write(logUnit(4),*) ' Updating entries in the element stencils...' nUpdates = 0 do iLevel = tree%global%minlevel, tree%global%maxlevel do iElem = 1, levelDesc(iLevel)%elem%tID%nVals do iStencil = 1, levelDesc( iLevel )%elem%stencil%val( iElem )%nVals do iStencilElem = 1, levelDesc( iLevel )%elem%stencil% & & val( iElem )%val( iStencil )%QQN needUpdate = .false. pos = levelDesc( iLevel )%elem%stencil%val( iElem )% & & val( iStencil )%totalPos( iStencilElem ) if( pos > 0 ) then nTreeID = levelDesc( iLevel )%elem%tID%val( pos ) if( pos > levelDesc( iLevel )%nElems ) needUpdate = .true. if( .not. needUpdate ) then if( levelDesc( iLevel )%total( pos ) /= nTreeID ) & & needUpdate = .true. end if if( needUpdate ) then ! Totalpos needs update! nUpdates = nUpdates + 1 levelDesc( iLevel )%elem%stencil%val( iElem )% & & val( iStencil )%totalPos( iStencilElem ) & & = tem_treeIDinTotal( nTreeID, levelDesc( iLevel )) end if end if ! pos > 0 end do ! iStencilElem end do ! iStencil end do ! iElem end do ! iLevel write(logUnit(8),"(A,I0)") ' Updated nEntries: ', nUpdates write(logUnit(8),"(A )") ' Finished updating dependencies' end subroutine update_elemPosToTotalPos