--- MITgcm/pkg/mdsio/mdsio_pass_r4torl.F 2009/06/08 03:32:33 1.3 +++ MITgcm/pkg/mdsio/mdsio_pass_r4torl.F 2010/12/23 02:40:42 1.4 @@ -1,4 +1,4 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/mdsio/mdsio_pass_r4torl.F,v 1.3 2009/06/08 03:32:33 jmc Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/mdsio/mdsio_pass_r4torl.F,v 1.4 2010/12/23 02:40:42 jmc Exp $ C $Name: $ #include "MDSIO_OPTIONS.h" @@ -12,7 +12,9 @@ CBOP C !ROUTINE: MDS_PASS_R4toRL C !INTERFACE: - SUBROUTINE MDS_PASS_R4toRL( buffer, arrFld, nNz, kLo, kSize, + SUBROUTINE MDS_PASS_R4toRL( + U buffer, arrFld, + I oLi, oLj, nNz, kLo, kSize, I biArg, bjArg, copyTo, myThid ) C !DESCRIPTION: @@ -31,6 +33,8 @@ C Routine arguments C buffer (real*4) :: buffer 3-D array (Input/Output if copyTo=T/F) C arrFld ( RL ) :: model 3-D tiled array (Output/Input if copyTo=T/F) +C oLi (integer):: Overlap size (dim-1) of buffer to copy - to/from - arrFld +C oLj (integer):: Overlap size (dim-2) of buffer to copy - to/from - arrFld C nNz (integer):: Number of levels to - fill in / extract from - arrFld C kLo (integer):: 1rst level to - fill in / extract from - arrFld C kSize (integer):: third dimension of 3-D array "arrFld" @@ -38,8 +42,9 @@ C bjArg (integer):: tile Y-index to - fill in / extract from - tiled buffer C copyTo (logical):: if =T, copy 2-D -> 3-D ; if =F: copy 2-D <- 3-D C myThid (integer):: my Thread Id number + INTEGER oLi, oLj INTEGER nNz, kSize - Real*4 buffer(1:sNx,1:sNy,nNz,nSx,nSy) + Real*4 buffer(1-oLi:sNx+oLi,1-oLj:sNy+oLj,nNz,nSx,nSy) _RL arrFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy) INTEGER kLo INTEGER biArg @@ -53,6 +58,10 @@ INTEGER i,j,k,bi,bj INTEGER kLev CEOP + IF ( oLi.LT.0 .OR. oLi.GT.OLx .OR. + & oLj.LT.0 .OR. oLj.GT.OLy ) THEN + STOP 'ABNORMAL END: MDS_PASS_R4toRL invalid oLi,oLj Arg' + ENDIF IF ( biArg.EQ.0 .AND. bjArg.EQ.0 ) THEN IF ( copyTo ) THEN @@ -60,8 +69,8 @@ DO bi = myBxLo(myThid), myBxHi(myThid) DO k=1,nNz kLev = kLo+k-1 - DO j=1,sNy - DO i=1,sNx + DO j=1-oLj,sNy+oLj + DO i=1-oLi,sNx+oLi arrFld(i,j,kLev,bi,bj) = buffer(i,j,k,bi,bj) ENDDO ENDDO @@ -73,8 +82,8 @@ DO bi = myBxLo(myThid), myBxHi(myThid) DO k=1,nNz kLev = kLo+k-1 - DO j=1,sNy - DO i=1,sNx + DO j=1-oLj,sNy+oLj + DO i=1-oLi,sNx+oLi buffer(i,j,k,bi,bj) = arrFld(i,j,kLev,bi,bj) ENDDO ENDDO @@ -89,8 +98,8 @@ IF ( copyTo ) THEN DO k=1,nNz kLev = kLo+k-1 - DO j=1,sNy - DO i=1,sNx + DO j=1-oLj,sNy+oLj + DO i=1-oLi,sNx+oLi arrFld(i,j,kLev,1,1) = buffer(i,j,k,bi,bj) ENDDO ENDDO @@ -98,8 +107,8 @@ ELSE DO k=1,nNz kLev = kLo+k-1 - DO j=1,sNy - DO i=1,sNx + DO j=1-oLj,sNy+oLj + DO i=1-oLi,sNx+oLi buffer(i,j,k,bi,bj) = arrFld(i,j,kLev,1,1) ENDDO ENDDO