subroutine var_2d_locs(rlon,rlat,mdata,ivar,varlats,nvarlats,npes) include 'mpif.h' include "my_comm.h" real(4) rlon(max(1,mdata)),rlat(max(1,mdata)),varlats(nvarlats) integer(4) ivar(nvarlats) integer(4),allocatable::nearest0(:) real(4),allocatable::delmin0(:) call mpi_comm_rank(my_comm,mype,ierr) allocate(nearest0(0:npes-1)) allocate(delmin0(0:npes-1)) do j=1,nvarlats nearest=0 delmin=huge(dellat) if(mdata.gt.0) then do i=1,mdata del=(rlat(i)-varlats(j))**2 if(del.le.delmin) then nearest=i delmin=del end if end do end if call mpi_gather(nearest,1,mpi_integer,nearest0,1,mpi_integer,0,my_comm,ierr) call mpi_gather(delmin,1,mpi_real,delmin0,1,mpi_real,0,my_comm,ierr) if(mype.eq.0) then minpe=-1 delminmin=huge(delminmin) do i=0,npes-1 if(delmin0(i).le.delminmin) then minpe=i delminmin=delmin0(i) end if end do do i=0,npes-1 if(i.ne.minpe) then nearest0(i)=0 end if end do end if call mpi_scatter(nearest0,1,mpi_integer,ivar(j),1,mpi_integer,0,my_comm,ierr) ! if(ivar(j).ne.0) then ! print *,' in var_2d_locs, mype,ivar,varlat,oblat=',mype,ivar(j),varlats(j),rlat(ivar(j)) ! end if end do return end subroutine var_2d_locs