Check if additional communications have to be performed
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_levelDesc_type), | intent(in) | :: | levelDesc(minlevel:) |
level descriptor |
||
type(tem_comm_env_type), | intent(in) | :: | proc |
Process description to use. |
||
logical, | intent(out) | :: | doAdditional |
do addtional steps to identify neighbors of elems in require list |
||
integer, | intent(in) | :: | minlevel |
minlevel in tree |
subroutine check_additionalComm( levelDesc, proc, doAdditional, minlevel ) ! --------------------------------------------------------------------------- !> minlevel in tree integer, intent(in) :: minlevel !> level descriptor type(tem_levelDesc_type), intent(in) :: levelDesc(minlevel:) !> Process description to use. type(tem_comm_env_type), intent(in) :: proc !> do addtional steps to identify neighbors of elems in require list ! and do overall communication again, if require%nVals > 0 logical, intent(out) :: doAdditional ! --------------------------------------------------------------------------- integer :: iError, iLevel logical :: do_local ! --------------------------------------------------------------------------- doAdditional = .false. do_local = .false. do iLevel = minlevel, ubound( levelDesc, 1 ) do_local = ( do_local .or. (levelDesc( iLevel )%require%nVals > 0)) end do ! JUROPA work-around for crash in the mpi_allreduce call mpi_barrier( proc%comm, iError ) call mpi_allreduce( do_local, doAdditional, 1, mpi_logical, & & mpi_LOR, proc%comm, iError ) if( doAdditional ) then write(dbgUnit(1),*)'Perform additional exchanges for required neighbors' end if end subroutine check_additionalComm