Exchange mesh elements with other process The following data within treelmesh_type is updated in this routine: treeID, ElemPropertyBits, Part_First, Part_Last Data pathList is deallocated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(treelmesh_type), | intent(inout) | :: | me |
Tree Mesh type nElems and offset should be ready before this routine |
||
type(tem_sparta_type), | intent(in) | :: | sparta |
How many elements to exchange with other processes |
subroutine exchange_elements( me, sparta )
! -------------------------------------------------------------------- !
!> Tree Mesh type
!! nElems and offset should be ready before this routine
type( treelmesh_type ), intent(inout) :: me
!> How many elements to exchange with other processes
type( tem_sparta_type ), intent(in) :: sparta
! -------------------------------------------------------------------- !
integer :: iError, iProp
! -------------------------------------------------------------------- !
! Exchange treeID and propertyBits ---------------------------------
call tem_exchange_sparta( me = sparta, &
& val = me%treeID, &
& nComponents = 1, &
& comm = me%global%comm )
call tem_exchange_sparta( me = sparta, &
& val = me%ElemPropertyBits, &
& nComponents = 1, &
& comm = me%global%comm )
! Exchange treeID and propertyBits ---------------------------------
! Update Part_first and Part_Last ------------------------
call MPI_allgather( me%treeID(1), 1, long_k_mpi, &
& me%Part_First, 1, long_k_mpi, &
& me%global%comm, iError )
call MPI_allgather( me%treeID(me%nElems), 1, long_k_mpi, &
& me%Part_Last, 1, long_k_mpi, &
& me%global%comm, iError )
! Update Part_first and Part_Last ------------------------
do iProp=1,me%global%nProperties
call gather_Property( Property = me%Property(iProp), &
& Header = me%global%Property(iProp), &
& BitField = me%ElemPropertyBits, &
& comm = me%global%comm )
end do
if (allocated(me%pathList)) deallocate( me%pathList )
end subroutine exchange_elements