C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_velmask_upd.F,v 1.9 2015/02/16 16:46:45 dgoldberg Exp $
C $Name: $
#include "STREAMICE_OPTIONS.h"
#ifdef ALLOW_AUTODIFF
# include "AUTODIFF_OPTIONS.h"
#endif
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
CBOP
SUBROUTINE STREAMICE_VELMASK_UPD ( myThid )
C /============================================================\
C | SUBROUTINE |
C | o |
C |============================================================|
C | |
C \============================================================/
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "GRID.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "STREAMICE.h"
!#ifdef ALLOW_PETSC
!# ifdef ALLOW_USE_MPI
!# include "EESUPPORT.h"
!# endif
!#endif
! #include "STREAMICE_ADV.h"
#ifdef ALLOW_AUTODIFF_TAMC
# include "tamc.h"
#endif
INTEGER myThid
#ifdef ALLOW_STREAMICE
INTEGER i, j, bi, bj, ki, kj
INTEGER maskFlag, myThidCopy
CHARACTER*(MAX_LEN_MBUF) msgBuf
#ifdef ALLOW_USE_MPI
integer mpiRC, mpiMyWid
#endif
#ifdef ALLOW_PETSC
_RS DoFCount
integer n_dofs_proc_loc (0:nPx*nPy-1)
integer n_dofs_cum_sum (0:nPx*nPy-1)
#endif
_EXCH_XY_RL( H_streamice, myThid )
_EXCH_XY_RL( area_shelf_streamice, myThid )
_EXCH_XY_RS( STREAMICE_hmask, myThid )
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
STREAMICE_umask(i,j,bi,bj) = -1. _d 0
STREAMICE_vmask(i,j,bi,bj) = -1. _d 0
STREAMICE_ufacemask(i,j,bi,bj) = 0. _d 0
STREAMICE_vfacemask(i,j,bi,bj) = 0. _d 0
ENDDO
ENDDO
ENDDO
ENDDO
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=0,sNy+1
DO i=0,sNx+1
IF (STREAMICE_hmask(i,j,bi,bj) .eq. 1.0) THEN
DO kj=0,1
DO ki=0,1
if (STREAMICE_umask(i+ki,j+kj,bi,bj).eq.-1.0) then
STREAMICE_umask (i+ki,j+kj,bi,bj) = 1.0
endif
if (STREAMICE_vmask(i+ki,j+kj,bi,bj).eq.-1.0) then
STREAMICE_vmask (i+ki,j+kj,bi,bj) = 1.0
endif
ENDDO
ENDDO
DO ki=0,1
maskFlag=INT(STREAMICE_ufacemask_bdry(i+ki,j,bi,bj))
IF (maskFlag.EQ.3) THEN
DO kj=0,1
if (STREAMICE_umask(i+ki,j+kj,bi,bj).ne.0.0) then
STREAMICE_umask(i+ki,j+kj,bi,bj) = 3.0
endif
if(STREAMICE_vmask(i+ki,j+kj,bi,bj).ne.0.0) then
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 3.0
endif
ENDDO
STREAMICE_ufacemask(i+ki,j,bi,bj) = 3.0
ELSE IF (maskFlag.EQ.2) THEN
!DO kj=0,1
STREAMICE_ufacemask(i+ki,j,bi,bj) = 2.0
!ENDDO
ELSE IF (maskFlag.EQ.4) THEN
DO kj=0,1
STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
ENDDO
STREAMICE_ufacemask(i+ki,j,bi,bj) = 4.0
ELSE IF (maskFlag.EQ.0) THEN
DO kj=0,1
STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
ENDDO
STREAMICE_ufacemask(i+ki,j,bi,bj) = 0.0
ELSE IF (maskFlag.EQ.1) THEN
DO kj=0,1
STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
ENDDO
END
IF
ENDDO
DO kj=0,1
maskFlag=INT(STREAMICE_vfacemask_bdry(i,j+kj,bi,bj))
IF (maskFlag.EQ.3) THEN
DO ki=0,1
if(STREAMICE_vmask(i+ki,j+kj,bi,bj).ne.0.0) then
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 3.0
endif
if(STREAMICE_umask(i+ki,j+kj,bi,bj).ne.0.0) then
STREAMICE_umask(i+ki,j+kj,bi,bj) = 3.0
endif
ENDDO
STREAMICE_vfacemask(i,j+kj,bi,bj) = 3.0
ELSE IF (maskFlag.EQ.2) THEN
!DO ki=0,1
STREAMICE_vfacemask(i,j+kj,bi,bj) = 2.0
!ENDDO
ELSE IF (maskFlag.EQ.4) THEN
DO ki=0,1
STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
ENDDO
STREAMICE_vfacemask(i,j+kj,bi,bj) = 4.0
ELSE IF (maskFlag.EQ.0) THEN
DO ki=0,1
STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
ENDDO
STREAMICE_vfacemask(i+ki,j,bi,bj) = 0.0
ELSE IF (maskFlag.EQ.1) THEN
DO ki=0,1
STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
ENDDO
ENDIF
ENDDO
IF (i .lt. sNx+OLx) THEN
IF ((STREAMICE_hmask(i+1,j,bi,bj) .eq. 0.0) .OR.
& (STREAMICE_hmask(i+1,j,bi,bj) .eq. 2.0)) THEN
!right boundary or adjacent to unfilled cell
STREAMICE_ufacemask(i+1,j,bi,bj) = 2.0
ENDIF
ENDIF
IF (i .gt. 1-OLx) THEN
IF ((STREAMICE_hmask(i-1,j,bi,bj) .eq. 0.0) .OR.
& (STREAMICE_hmask(i-1,j,bi,bj) .eq. 2.0)) THEN
!left boundary or adjacent to unfilled cell
STREAMICE_ufacemask(i,j,bi,bj) = 2
ENDIF
ENDIF
IF (j .lt. sNy+OLy) THEN
IF ((STREAMICE_hmask(i,j+1,bi,bj) .eq. 0.0) .OR.
& (STREAMICE_hmask(i,j+1,bi,bj) .eq. 2.0)) THEN
!top boundary or adjacent to unfilled cell
STREAMICE_vfacemask(i,j+1,bi,bj) = 2
ENDIF
ENDIF
IF (j .gt. 1-OLy) THEN
IF ((STREAMICE_hmask(i,j-1,bi,bj) .eq. 0.0) .OR.
& (STREAMICE_hmask(i,j-1,bi,bj) .eq. 2.0)) THEN
!bot boundary or adjacent to unfilled cell
STREAMICE_vfacemask(i,j,bi,bj) = 2.0
ENDIF
ENDIF
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO
!$TAF STORE streamice_umask = comlev1, key=ikey_dynamics
!$TAF STORE streamice_vmask = comlev1, key=ikey_dynamics
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=1,sNy
DO i=1,sNx
IF(streamice_umask(i,j,bi,bj).eq.-1.0) THEN
streamice_umask(i,j,bi,bj)=0.0
ENDIF
IF(streamice_vmask(i,j,bi,bj).eq.-1.0) THEN
streamice_vmask(i,j,bi,bj)=0.0
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO
_EXCH_XY_RS( STREAMICE_ufacemask, myThid )
_EXCH_XY_RS( STREAMICE_vfacemask, myThid )
_EXCH_XY_RS( STREAMICE_umask, myThid )
_EXCH_XY_RS( STREAMICE_vmask, myThid )
! CALL WRITE_FULLARRAY_RL ("umask",STREAMICE_umask,
! c 1,0,0,1,0,myThid)
! CALL WRITE_FLD_XY_RL ("umask","",STREAMICE_umask,0,myThid)
! CALL WRITE_FLD_XY_RL ("vmask","",STREAMICE_vmask,0,myThid)
! CALL WRITE_FLD_XY_RL ("ufacemask","",STREAMICE_ufacemask,0,myThid)
! CALL WRITE_FLD_XY_RL ("vfacemask","",STREAMICE_vfacemask,0,myThid)
#ifdef ALLOW_PETSC
myThidCopy = myThid
if (streamice_use_petsc) then
call STREAMICE_PETSC_NUMERATE (myThidCopy)
endif
#endif
#endif
RETURN
END