/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_velmask_upd.F
ViewVC logotype

Diff of /MITgcm_contrib/dgoldberg/streamice/streamice_velmask_upd.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.6 by dgoldberg, Sat Jun 8 22:15:34 2013 UTC revision 1.7 by dgoldberg, Wed Aug 27 19:29:14 2014 UTC
# Line 9  CBOP Line 9  CBOP
9        SUBROUTINE STREAMICE_VELMASK_UPD ( myThid )        SUBROUTINE STREAMICE_VELMASK_UPD ( myThid )
10    
11  C     /============================================================\  C     /============================================================\
12  C     | SUBROUTINE                                                 |    C     | SUBROUTINE                                                 |
13  C     | o                                                          |  C     | o                                                          |
14  C     |============================================================|  C     |============================================================|
15  C     |                                                            |  C     |                                                            |
# Line 22  C     === Global variables === Line 22  C     === Global variables ===
22  #include "EEPARAMS.h"  #include "EEPARAMS.h"
23  #include "PARAMS.h"  #include "PARAMS.h"
24  #include "STREAMICE.h"  #include "STREAMICE.h"
25  #ifdef ALLOW_USE_MPI  !#ifdef ALLOW_PETSC
26  # include "EESUPPORT.h"  !# ifdef ALLOW_USE_MPI
27  #endif  !#  include "EESUPPORT.h"
28    !# endif
29    !#endif
30  ! #include "STREAMICE_ADV.h"  ! #include "STREAMICE_ADV.h"
31    
32    #ifdef ALLOW_AUTODIFF_TAMC
33    # include "tamc.h"
34    #endif
35    
36        INTEGER myThid        INTEGER myThid
37    
38  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
39    
40        INTEGER i, j, bi, bj, ki, kj        INTEGER i, j, bi, bj, ki, kj
41        INTEGER maskFlag        INTEGER maskFlag, myThidCopy
42        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
43  #ifdef ALLOW_USE_MPI  #ifdef ALLOW_USE_MPI
44        integer mpiRC, mpiMyWid        integer mpiRC, mpiMyWid
# Line 45  C     === Global variables === Line 51  C     === Global variables ===
51    
52        _EXCH_XY_RL( H_streamice, myThid )        _EXCH_XY_RL( H_streamice, myThid )
53        _EXCH_XY_RL( area_shelf_streamice, myThid )        _EXCH_XY_RL( area_shelf_streamice, myThid )
54        _EXCH_XY_RL( STREAMICE_hmask, myThid )        _EXCH_XY_RS( STREAMICE_hmask, myThid )
55    
56        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
57         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
58          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
59           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
60            STREAMICE_umask(i,j,bi,bj) = 0. _d 0            STREAMICE_umask(i,j,bi,bj) = -1. _d 0
61            STREAMICE_vmask(i,j,bi,bj) = 0. _d 0            STREAMICE_vmask(i,j,bi,bj) = -1. _d 0
62            STREAMICE_ufacemask(i,j,bi,bj) = 0. _d 0            STREAMICE_ufacemask(i,j,bi,bj) = 0. _d 0
63            STREAMICE_vfacemask(i,j,bi,bj) = 0. _d 0            STREAMICE_vfacemask(i,j,bi,bj) = 0. _d 0
64           ENDDO           ENDDO
# Line 64  C     === Global variables === Line 70  C     === Global variables ===
70         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
71          DO j=0,sNy+1          DO j=0,sNy+1
72           DO i=0,sNx+1           DO i=0,sNx+1
73            IF (STREAMICE_hmask(i,j,bi,bj) .eq. 1) THEN            IF (STREAMICE_hmask(i,j,bi,bj) .eq. 1.0) THEN
74    
75             DO kj=0,1             DO kj=0,1
76              DO ki=0,1              DO ki=0,1
77               STREAMICE_umask (i+ki,j+kj,bi,bj) = 1.0               if (STREAMICE_umask(i+ki,j+kj,bi,bj).eq.-1.0) then
78               STREAMICE_vmask (i+ki,j+kj,bi,bj) = 1.0                STREAMICE_umask (i+ki,j+kj,bi,bj) = 1.0
79                 endif
80                 if (STREAMICE_vmask(i+ki,j+kj,bi,bj).eq.-1.0) then
81                  STREAMICE_vmask (i+ki,j+kj,bi,bj) = 1.0
82                 endif
83              ENDDO              ENDDO
84             ENDDO             ENDDO
85    
# Line 77  C     === Global variables === Line 87  C     === Global variables ===
87              maskFlag=INT(STREAMICE_ufacemask_bdry(i+ki,j,bi,bj))              maskFlag=INT(STREAMICE_ufacemask_bdry(i+ki,j,bi,bj))
88               IF (maskFlag.EQ.3) THEN               IF (maskFlag.EQ.3) THEN
89                DO kj=0,1                DO kj=0,1
90                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 3.0                 if (STREAMICE_umask(i+ki,j+kj,bi,bj).ne.0.0) then
91                 STREAMICE_vmask(i+ki,j+kj,bi,bj) = 3.0                  STREAMICE_umask(i+ki,j+kj,bi,bj) = 3.0
92                   endif
93                   if(STREAMICE_vmask(i+ki,j+kj,bi,bj).ne.0.0) then
94                    STREAMICE_vmask(i+ki,j+kj,bi,bj) = 3.0
95                   endif
96                ENDDO                ENDDO
97                STREAMICE_ufacemask(i+ki,j,bi,bj) = 3.0                STREAMICE_ufacemask(i+ki,j,bi,bj) = 3.0
98               ELSE IF (maskFlag.EQ.2) THEN               ELSE IF (maskFlag.EQ.2) THEN
# Line 88  C     === Global variables === Line 102  C     === Global variables ===
102               ELSE IF (maskFlag.EQ.4) THEN               ELSE IF (maskFlag.EQ.4) THEN
103                DO kj=0,1                DO kj=0,1
104                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
105                 STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0                             STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
106                ENDDO                ENDDO
107                STREAMICE_ufacemask(i+ki,j,bi,bj) = 4.0                STREAMICE_ufacemask(i+ki,j,bi,bj) = 4.0
108               ELSE IF (maskFlag.EQ.0) THEN               ELSE IF (maskFlag.EQ.0) THEN
109                DO kj=0,1                DO kj=0,1
110                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
111                 STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0                             STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
112                ENDDO                ENDDO
113                STREAMICE_ufacemask(i+ki,j,bi,bj) = 0.0                STREAMICE_ufacemask(i+ki,j,bi,bj) = 0.0
114               ELSE IF (maskFlag.EQ.1) THEN               ELSE IF (maskFlag.EQ.1) THEN
# Line 108  C     === Global variables === Line 122  C     === Global variables ===
122              maskFlag=INT(STREAMICE_vfacemask_bdry(i,j+kj,bi,bj))              maskFlag=INT(STREAMICE_vfacemask_bdry(i,j+kj,bi,bj))
123              IF (maskFlag.EQ.3) THEN              IF (maskFlag.EQ.3) THEN
124                DO ki=0,1                DO ki=0,1
125                 STREAMICE_vmask(i+ki,j+kj,bi,bj) = 3.0                 if(STREAMICE_vmask(i+ki,j+kj,bi,bj).ne.0.0) then
126                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 3.0                  STREAMICE_vmask(i+ki,j+kj,bi,bj) = 3.0
127                   endif
128                   if(STREAMICE_umask(i+ki,j+kj,bi,bj).ne.0.0) then
129                    STREAMICE_umask(i+ki,j+kj,bi,bj) = 3.0
130                   endif
131                ENDDO                ENDDO
132                STREAMICE_vfacemask(i,j+kj,bi,bj) = 3.0                STREAMICE_vfacemask(i,j+kj,bi,bj) = 3.0
133             ELSE IF (maskFlag.EQ.2) THEN             ELSE IF (maskFlag.EQ.2) THEN
# Line 119  C     === Global variables === Line 137  C     === Global variables ===
137             ELSE IF (maskFlag.EQ.4) THEN             ELSE IF (maskFlag.EQ.4) THEN
138                DO ki=0,1                DO ki=0,1
139                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
140                 STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0                             STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
141                ENDDO                ENDDO
142                STREAMICE_vfacemask(i,j+kj,bi,bj) = 4.0                STREAMICE_vfacemask(i,j+kj,bi,bj) = 4.0
143             ELSE IF (maskFlag.EQ.0) THEN             ELSE IF (maskFlag.EQ.0) THEN
144                DO ki=0,1                DO ki=0,1
145                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0                 STREAMICE_umask(i+ki,j+kj,bi,bj) = 0.0
146                 STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0                             STREAMICE_vmask(i+ki,j+kj,bi,bj) = 0.0
147                ENDDO                ENDDO
148                STREAMICE_vfacemask(i+ki,j,bi,bj) = 0.0                STREAMICE_vfacemask(i+ki,j,bi,bj) = 0.0
149             ELSE IF (maskFlag.EQ.1) THEN             ELSE IF (maskFlag.EQ.1) THEN
# Line 173  C     === Global variables === Line 191  C     === Global variables ===
191         ENDDO         ENDDO
192        ENDDO        ENDDO
193    
194        _EXCH_XY_RL( STREAMICE_ufacemask, myThid )  !$TAF STORE streamice_umask = comlev1, key=ikey_dynamics
195        _EXCH_XY_RL( STREAMICE_vfacemask, myThid )  !$TAF STORE streamice_vmask = comlev1, key=ikey_dynamics
       _EXCH_XY_RL( STREAMICE_umask, myThid )  
       _EXCH_XY_RL( 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  
   
       DO bj = myByLo(myThid), myByHi(myThid)  
        DO bi = myBxLo(myThid), myBxHi(myThid)  
         DO j=1,sNy  
          DO i=1,sNx  
            streamice_petsc_dofs_u (i,j,bi,bj) = -2.0  
            streamice_petsc_dofs_v (i,j,bi,bj) = -2.0  
          ENDDO  
         ENDDO  
        ENDDO  
       ENDDO  
   
       DoFCount = -1.0  
       DO bj = myByLo(myThid), myByHi(myThid)  
        DO bi = myBxLo(myThid), myBxHi(myThid)  
         DO j=1,sNy  
          DO i=1,sNx  
   
   
 C   DOFS ARE NUMBERED AS FOLLOWS ON PROCESSOR DOMAIN:  
 C    grid is stepped through in order bj, bi, j, i  
 C    1) if umask(i,j,bi,bj)==1, the counter is updated by 1;  
 C        streamice_petsc_dofs_u is assigned the counter;  
 C        o/w  streamice_petsc_dofs_u is assigned -1  
 C    2) if vmask(i,j,bi,bj)==1, the counter is updated by 1;  
 C        streamice_petsc_dofs_v is assigned the counter;  
 C        o/w  streamice_petsc_dofs_v is assigned -1  
 C    NOTE THESE NUMBERING ARRAYS ARE USED TO CONSTRUCT PETSC VECTORS AND MATRIX  
   
           if (STREAMICE_umask (i,j,bi,bj).eq.1.0) THEN  
            DoFCount = DoFCount + 1.0  
            streamice_petsc_dofs_u (i,j,bi,bj) = DoFCount  
           else  
            streamice_petsc_dofs_u (i,j,bi,bj) = -1.0  
           endif  
   
           if (STREAMICE_vmask (i,j,bi,bj).eq.1.0) THEN  
            DoFCount = DoFCount + 1.0  
            streamice_petsc_dofs_v (i,j,bi,bj) = DoFCount  
           else  
            streamice_petsc_dofs_v (i,j,bi,bj) = -1.0  
           endif  
196    
197           ENDDO        DO bj=myByLo(myThid),myByHi(myThid)
198          ENDDO         DO bi=myBxLo(myThid),myBxHi(myThid)
        ENDDO  
       ENDDO  
   
 #ifdef ALLOW_USE_MPI  
   
       DO i=0,nPx*nPy-1  
        n_dofs_proc_loc (i) = 0  
       ENDDO  
   
       CALL MPI_COMM_RANK( MPI_COMM_WORLD, mpiMyWId, mpiRC )  
   
       n_dofs_proc_loc (mpiMyWId) = INT(DoFCount)+1  
   
       CALL MPI_Allreduce(n_dofs_proc_loc,n_dofs_process,nPx*nPy,  
      &       MPI_INTEGER, MPI_SUM,MPI_COMM_MODEL,mpiRC)  
   
       n_dofs_cum_sum(0) = 0  
   
       DO i=1,nPx*nPy-1  
        n_dofs_cum_sum(i) = n_dofs_cum_sum(i-1)+  
      &                     n_dofs_process(i-1)  
       ENDDO  
   
 #else /* ALLOW_USE_MPI */  
   
       n_dofs_process (0) = INT(DoFCount)+1  
       n_dofs_cum_sum (0) = INT(DoFCount)+1  
   
 #endif /* ALLOW_USE_MPI */  
   
       DO bj = myByLo(myThid), myByHi(myThid)  
        DO bi = myBxLo(myThid), myBxHi(myThid)  
199          DO j=1,sNy          DO j=1,sNy
200           DO i=1,sNx           DO i=1,sNx
201            IF (streamice_petsc_dofs_u(i,j,bi,bj).ge.0 ) THEN            IF(streamice_umask(i,j,bi,bj).eq.-1.0) THEN
202             streamice_petsc_dofs_u(i,j,bi,bj) =             streamice_umask(i,j,bi,bj)=0.0
      &      streamice_petsc_dofs_u(i,j,bi,bj) +  
      &      n_dofs_cum_sum(mpimywid)  
203            ENDIF            ENDIF
204            IF (streamice_petsc_dofs_v(i,j,bi,bj).ge.0 ) THEN            IF(streamice_vmask(i,j,bi,bj).eq.-1.0) THEN
205             streamice_petsc_dofs_v(i,j,bi,bj) =             streamice_vmask(i,j,bi,bj)=0.0
      &      streamice_petsc_dofs_v(i,j,bi,bj) +  
      &      n_dofs_cum_sum(mpimywid)  
206            ENDIF            ENDIF
207           ENDDO           ENDDO
208          ENDDO          ENDDO
209         ENDDO         ENDDO
210        ENDDO        ENDDO
211    
212        _EXCH_XY_RS(streamice_petsc_dofs_u,myThid)        
213        _EXCH_XY_RS(streamice_petsc_dofs_v,myThid)  
214          _EXCH_XY_RS( STREAMICE_ufacemask, myThid )
215          _EXCH_XY_RS( STREAMICE_vfacemask, myThid )
216          _EXCH_XY_RS( STREAMICE_umask, myThid )
217          _EXCH_XY_RS( STREAMICE_vmask, myThid )
218    
219    !       CALL WRITE_FULLARRAY_RL ("umask",STREAMICE_umask,
220    !      c   1,0,0,1,0,myThid)
221    !      CALL WRITE_FLD_XY_RL ("umask","",STREAMICE_umask,0,myThid)
222    !      CALL WRITE_FLD_XY_RL ("vmask","",STREAMICE_vmask,0,myThid)
223    !      CALL WRITE_FLD_XY_RL ("ufacemask","",STREAMICE_ufacemask,0,myThid)
224    !      CALL WRITE_FLD_XY_RL ("vfacemask","",STREAMICE_vfacemask,0,myThid)
225    !      CALL WRITE_FLD_XY_RL ("ufacemaskbdry","",
226    !     &  STREAMICE_ufacemask_bdry,0,myThid)
227    !      CALL WRITE_FLD_XY_RL ("vfacemaskbdry","",
228    !     &  STREAMICE_vfacemask_bdry,0,myThid)
229    
230  #endif /* ALLOW_PETSC */  #ifdef ALLOW_PETSC
231          myThidCopy = myThid
232          call streamice_petsc_numerate (myThidCopy)
233    #endif
234    
235    
236  #endif  #endif

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.22