module drifter_module contains subroutine drifter(s,par) use params use spaceparams use readkey_module use xmpi_module use mnemmodule IMPLICIT NONE type(spacepars), target :: s type(parameters) :: par integer :: i integer :: ishift,jshift integer :: iu,ju,iv,jv real*8 :: di,dj include 's.ind' include 's.inp' #ifdef USEMPI ishift = s%is(xmpi_rank+1)-1 jshift = s%js(xmpi_rank+1)-1 #else ishift = 0.d0 jshift = 0.d0 #endif do i=1,par%ndrifter if (par%t>s%tdriftb(i) .and. par%t= 1 .and. iu <= s%nx .and. & ju >= 1 .and. ju <= s%ny .and. & iv >= 1 .and. iv <= s%nx .and. & jv >= 1 .and. jv <= s%ny ) then ! determine movement of drifter relative to grid size di = uu(iu,ju)/dsu(iu,ju)*par%dt dj = vv(iv,jv)/dnv(iv,jv)*par%dt s%idrift(i) = s%idrift(i) + di s%jdrift(i) = s%jdrift(i) + dj #ifdef USEMPI else s%idrift(i) = huge(0.0d0) s%jdrift(i) = huge(0.0d0) #endif endif #ifdef USEMPI call xmpi_allreduce(s%idrift(i),MPI_MIN) call xmpi_allreduce(s%jdrift(i),MPI_MIN) #endif endif enddo end subroutine drifter end module drifter_module