C $Header: /u/gcmpack/MITgcm/pkg/compon_communic/mitcomponent_tile_register.F,v 1.3 2013/11/27 21:53:04 jmc Exp $
C $Name: $
!=======================================================================
subroutine MITCOMPONENT_TILE_REGISTER( num_tiles, iReg )
implicit none
! MPI variables
#include "mpif.h"
c integer myid, numprocs, ierr, rc
! Predefined constants/arrays
#include "CPLR_SIG.h"
! Arguments
integer num_tiles
integer iReg(6,num_tiles)
! Functions
integer mitcplr_match_comp
integer generate_tag
external
external
! Local
c integer bi, bj
integer n
integer count, datatype, dest, tag, comm, ierr
integer ibuf(MAX_IBUF)
! ------------------------------------------------------------------
write(LogUnit,'(A,I6,A,2I4)')
& 'MITCOMPONENT_tile_register (pId=', my_rank_in_local,
& '): Starts ; num_tiles=', num_tiles
if (num_tiles.lt.1)
& STOP 'MITCOMPONENT_tile_register: num_tiles < 1'
if (num_tiles.gt.MAX_TILES)
& STOP 'MITCOMPONENT_tile_register: num_tiles > MAX_TILES'
my_num_tiles = num_tiles
do n=1,num_tiles
my_tile_bi(n) = iReg(1,n)
my_tile_bj(n) = iReg(2,n)
my_tile_nx(n) = iReg(3,n)
my_tile_ny(n) = iReg(4,n)
my_tile_i0(n) = iReg(5,n)
my_tile_j0(n) = iReg(6,n)
write(LogUnit,'(A,I5,A,2I4,A,2I5,A,2I8)')
& ' tile #', n,
& ' ; bi,bj=', iReg(1,n), iReg(2,n),
& ' ; Ni,Nj=', iReg(3,n), iReg(4,n),
& ' ; Io,Jo=', iReg(5,n), iReg(6,n)
enddo
! Set up buffer
ibuf(1) = num_tiles
! Send message
count=1
datatype=MPI_INTEGER
dest=my_coupler_rank
tag=generate_tag(112,my_rank_in_global,'Register Tiles')
comm=MPI_COMM_myglobal
call MPI_SEND( ibuf, count, datatype, dest, tag, comm, ierr )
if (ierr.ne.0) then
write(LogUnit,*) 'MITCOMPONENT_tile_register: rank(W,G,L)=',
& my_rank_in_world,my_rank_in_global,my_rank_in_local,
& ' ierr=',ierr
STOP 'MITCOMPONENT_tile_register: MPI_Send failed'
endif
do n=1,my_num_tiles
! Set up buffer
c bi = my_tile_bi(n)
c bj = my_tile_bj(n)
ibuf(1) = my_tile_nx(n)
ibuf(2) = my_tile_ny(n)
ibuf(3) = my_tile_i0(n)
ibuf(4) = my_tile_j0(n)
! Send message
count=4
datatype=MPI_INTEGER
dest=my_coupler_rank
tag=generate_tag(113,n,'Register each tile')
comm=MPI_COMM_myglobal
call MPI_SEND( ibuf, count, datatype, dest, tag, comm, ierr )
if (ierr.ne.0) then
write(LogUnit,*) 'MITCOMPONENT_tile_register: rank(W,G,L)=',
& my_rank_in_world,my_rank_in_global,my_rank_in_local,
& ' ierr=',ierr
STOP 'MITCOMPONENT_tile_register: MPI_Send failed'
endif
enddo
write(LogUnit,'(A,I6,A,2I4)')
& 'MITCOMPONENT_tile_register (pId=', my_rank_in_local, '): done'
! ------------------------------------------------------------------
call FLUSH(LogUnit)
return
end
!=======================================================================