C $Header: /u/gcmpack/MITgcm/pkg/grdchk/grdchk_get_position.F,v 1.1 2004/03/23 19:42:53 heimbach Exp $
#include "CTRL_CPPOPTIONS.h"
subroutine GRDCHK_GET_POSITION( mythid )
c ==================================================================
c SUBROUTINE grdchk_loc
c ==================================================================
c
c o Get the location of a given component of the control vector for
c the current process.
c
c started: Christian Eckert eckert@mit.edu 04-Apr-2000
c continued: heimbach@mit.edu: 13-Jun-2001
c
c ==================================================================
c SUBROUTINE grdchk_loc
c ==================================================================
implicit none
c == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "GRID.h"
#include "ctrl.h"
#include "grdchk.h"
c == routine arguments ==
integer icvrec
integer jtile
integer itile
integer layer
integer obcspos
integer itilepos
integer jtilepos
integer itest
integer ierr
integer mythid
#ifdef ALLOW_GRDCHK
c == local variables ==
integer iG,jG
integer bi,bj
integer i,j,k
integer iobcs
integer biwrk,bjwrk
integer iwrk, jwrk, kwrk
integer iobcswrk
integer irec, irecwrk
integer itlo,ithi
integer jtlo,jthi
integer jmin,jmax
integer imin,imax
integer icomptest
integer nobcsmax
integer pastit
_RL wetlocal
c == end of interface ==
jtlo = 1
jthi = nsy
itlo = 1
ithi = nsx
jmin = 1
jmax = sny
imin = 1
imax = snx
_BEGIN_MASTER( mythid )
c-- determine proc. number from following assumptions
iG = INT(iGloPos/sNx) + 1
jG = INT(jGloPos/sNy) + 1
grdchkwhichproc = iG-1 + (jG-1)*nPx
itilepos = iGloPos - (iG-1)*sNx
jtilepos = jGloPos - (jG-1)*sNy
layer = kGloPos
obcspos = obcsglo
icvrec = recglo
if ( myProcId .EQ. grdchkwhichproc ) then
c initialise parameters
ierr = -5
pastit = -1
wetlocal = 0
itest = 0
icomptest = 0
irecwrk = 1
bjwrk = 1
biwrk = 1
kwrk = 1
iobcswrk = 1
jwrk = 1
iwrk = 1
c-- set max loop index for obcs multiplicities
if ( ncvargrd(grdchkvarindex) .eq. 'm' ) then
nobcsmax = nobcs
else
nobcsmax = 1
endif
c-- Start to loop over records.
do irec = irecwrk, ncvarrecs(grdchkvarindex)
iobcs = MOD((irec-1),nobcsmax) + 1
do bj = bjwrk, jthi
do bi = biwrk, ithi
do k = kwrk, ncvarnrmax(grdchkvarindex)
if ( ierr .ne. 0 ) then
icvrec = irec
itile = bi
jtile = bj
do j = jwrk, ncvarymax(grdchkvarindex)
do i = iwrk, ncvarxmax(grdchkvarindex)
if (ierr .ne. 0) then
if ( ncvargrd(grdchkvarindex) .eq. 'c' ) then
if ( maskC(i,j,k,bi,bj) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = maskC(i,j,k,bi,bj)
else if ( ncvargrd(grdchkvarindex) .eq. 's' ) then
if ( _maskS(i,j,k,bi,bj) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = _maskS(i,j,k,bi,bj)
else if ( ncvargrd(grdchkvarindex) .eq. 'w' ) then
if ( _maskW(i,j,k,bi,bj) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = _maskW(i,j,k,bi,bj)
else if ( ncvargrd(grdchkvarindex) .eq. 'm' ) then
if ( grdchkvarindex .EQ. 11 ) then
#ifdef ALLOW_OBCSN_CONTROL
if (grdchk_maskxz(i,k,bi,bj,iobcs) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = grdchk_maskxz(i,k,bi,bj,iobcs)
#endif
else if ( grdchkvarindex .EQ. 12 ) then
#ifdef ALLOW_OBCSS_CONTROL
if (grdchk_maskxz(i,k,bi,bj,iobcs) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = grdchk_maskxz(i,k,bi,bj,iobcs)
#endif
else if ( grdchkvarindex .EQ. 13 ) then
#ifdef ALLOW_OBCSW_CONTROL
if (grdchk_maskyz(j,k,bi,bj,iobcs) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = grdchk_maskyz(j,k,bi,bj,iobcs)
#endif
else if ( grdchkvarindex .EQ. 14 ) then
#ifdef ALLOW_OBCSE_CONTROL
if (grdchk_maskyz(j,k,bi,bj,iobcs) .gt. 0.) then
icomptest = icomptest + 1
endif
wetlocal = grdchk_maskyz(j,k,bi,bj,iobcs)
#endif
endif
endif
c
if ( i .EQ. itilepos .AND.
& j .EQ. jtilepos .AND.
& k .EQ. layer .AND.
& iobcs .EQ. obcspos .AND.
& irec .EQ. icvrec ) then
pastit = 0
if ( wetlocal .NE.0 ) then
nbeg = icomptest
nend = nbeg + nend
ierr = 0
print '(a,6I5)',
& ' grad-res exact position met: '
print '(a,7I5)',
& ' grad-res ', grdchkwhichproc,
& nbeg, itilepos, jtilepos, layer,
& iG, jG
endif
else if ( pastit .EQ. 0 .AND.
& wetlocal .NE.0 ) then
nbeg = icomptest
nend = nbeg + nend
ierr = 0
print '(a,6I5)',
& ' grad-res closest next position: '
print '(a,7I5)',
& ' grad-res ', grdchkwhichproc,
& nbeg, itilepos, jtilepos, layer,
& iG, jG
endif
c
endif
enddo
iwrk = 1
enddo
jwrk = 1
else if (ierr .NE. 0) then
itest = itest + nwettile(bi,bj,k,iobcs)
iwrk = 1
jwrk = 1
endif
c-- End of loop over k
enddo
kwrk = 1
c-- End of loop over bi
enddo
biwrk = 1
c-- End of loop over bj
enddo
bjwrk = 1
c-- End of loop over iobcs
cph enddo
cph iobcswrk = 1
c-- End of loop over irec records.
enddo
c-- End of if myProcId statement
endif
_END_MASTER( mythid )
_BARRIER
#endif /* ALLOW_GRDCHK */
end