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

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

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

revision 1.1 by heimbach, Thu Mar 29 15:59:21 2012 UTC revision 1.3 by dgoldberg, Wed Jan 9 21:56:18 2013 UTC
# Line 29  CEOP Line 29  CEOP
29    
30  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
31  C     === Local variables ===  C     === Local variables ===
32        INTEGER bi, bj, i, j, Gi, Gj        INTEGER bi, bj, i, j, Gi, Gj, m
33          INTEGER maskFlag, hmaskFlag
34        _RL x, y        _RL x, y
35        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
36    
37  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
38    
39    #ifdef STREAMICE_GEOM_FILE_SETUP
40          _RS temp_ufacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
41          _RS temp_vfacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42          _RS temp_hmask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43    #endif
44    
45  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
46    
47        IF ( useMNC .AND. (streamice_tave_mnc.OR.streamice_dump_mnc)        IF ( useMNC .AND. (streamice_tave_mnc.OR.streamice_dump_mnc)
# Line 49  C        CALL STREAMICE_MNC_INIT( myThid Line 56  C        CALL STREAMICE_MNC_INIT( myThid
56        ENDIF        ENDIF
57  #endif  #endif
58    
59    !     CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
60    
61        IF ( STREAMICE_calve_to_mask ) THEN        IF ( STREAMICE_calve_to_mask ) THEN
62         IF ( STREAMICEcalveMaskFile .NE. ' ') THEN         IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
63          _BARRIER          _BARRIER
# Line 62  C       The 0 is the "iteration" argumen Line 71  C       The 0 is the "iteration" argumen
71         ENDIF         ENDIF
72        ENDIF        ENDIF
73    
74    
75    !  INITIALIZE SIGMA COORD
76          IF (STREAMICEsigcoordInit.eq.'FILE') THEN
77           WRITE(msgBuf,'(A)') 'SIG FROM FILE - NOT IMPLENTED'
78           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
79         &                    SQUEEZE_RIGHT , 1)
80          ELSEIF (STREAMICEsigcoordInit.eq.'UNIFORM') THEN
81           do m=1,Nr
82            streamice_sigma_coord (m) = 1./Nr * (m-0.5)
83            streamice_delsigma (m) = 1./Nr
84           enddo
85          ELSE
86           WRITE(msgBuf,'(A)') 'SIG COORD INIT - NOT IMPLENTED'
87           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
88         &                    SQUEEZE_RIGHT , 1)
89          ENDIF
90    
91    !    READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES
92    #ifdef STREAMICE_GEOM_FILE_SETUP
93    
94          IF ( STREAMICEuFaceBdryFile .NE. ' ') THEN
95            _BARRIER
96           CALL READ_FLD_XY_RS ( STREAMICEuFaceBdryFile, ' ',
97         &   temp_ufacemask, 0, myThid )
98          ELSE
99           WRITE(msgBuf,'(A)') 'U FACE MASK - NOT SET'
100           CALL PRINT_ERROR( msgBuf, myThid)
101          ENDIF
102    
103          IF ( STREAMICEvFaceBdryFile .NE. ' ') THEN
104            _BARRIER
105           CALL READ_FLD_XY_RS ( STREAMICEvFaceBdryFile, ' ',
106         &   temp_vfacemask, 0, myThid )
107          ELSE
108           WRITE(msgBuf,'(A)') 'V FACE MASK - NOT SET'
109           CALL PRINT_ERROR( msgBuf, myThid)
110          ENDIF
111    
112          IF ( STREAMICEuDirichValsFile .NE. ' ') THEN
113            _BARRIER
114           CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ',
115         &   u_bdry_values_SI, 0, myThid )
116          ELSE
117           WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET'
118           CALL PRINT_ERROR( msgBuf, myThid)
119          ENDIF
120    
121          IF ( STREAMICEvDirichValsFile .NE. ' ') THEN
122            _BARRIER
123           CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ',
124         &   v_bdry_values_SI, 0, myThid )
125          ELSE
126           WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET'
127           CALL PRINT_ERROR( msgBuf, myThid)
128          ENDIF
129    
130    ! with this setup hmask is initialized here rather than in init_varia,
131    ! because it is needed to set no-flow boundaries, even though the field
132    ! could potentially change due to ice shelf front advance and calving
133    ! (POTENTIAL PROBLEMS WITH TAF?????? USE TEMP FIELD HERE AND SET HMASK IN INIT_VARIA??)
134    
135          IF ( STREAMICEhMaskFile .NE. ' ') THEN
136            _BARRIER
137           CALL READ_FLD_XY_RS ( STREAMICEhMaskFile, ' ',
138         &   temp_hmask, 0, myThid )
139          ELSE
140           WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET'
141           CALL PRINT_ERROR( msgBuf, myThid)
142          ENDIF
143    
144    #endif
145    
146    
147    !!!!!!!!!!!!!!!!!!!!!!!!!
148    
149  C- fill in the overlap (+ BARRIER):  C- fill in the overlap (+ BARRIER):
150        _EXCH_XY_RL(STREAMICE_calve_mask, myThid )        _EXCH_XY_RL(STREAMICE_calve_mask, myThid )
151    
# Line 77  C         INIT VALUES FOR METRIC TERMS Line 161  C         INIT VALUES FOR METRIC TERMS
161            k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *            k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
162       &     (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj))       &     (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj))
163    
164    #ifdef STREAMICE_HYBRID_STRESS
165              streamice_basal_geom (i,j,bi,bj) = 1.0
166    #endif          
167    
168  C         INIT BDRY CONDITIONS  C         INIT BDRY CONDITIONS
169    
170    #ifndef STREAMICE_GEOM_FILE_SETUP
171    
172            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
173            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
174            x = xC(i,j,bi,bj)            x = xC(i,j,bi,bj)
# Line 87  C         INIT BDRY CONDITIONS Line 177  C         INIT BDRY CONDITIONS
177            STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0            STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
178            STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0            STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
179    
180            IF (Gi .EQ. 1) THEN            IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN
181  C         INITIALIZE BOUNDARY CONDS AT WEST  C         INITIALIZE BOUNDARY CONDS AT WEST
182             IF ((y .gt. min_y_noflow_WEST) .AND.             IF ((y .gt. min_y_noflow_WEST) .AND.
183       &         (y .le. max_y_noflow_WEST)) THEN       &         (y .le. max_y_noflow_WEST)) THEN
# Line 113  C         INITIALIZE BOUNDARY CONDS AT W Line 203  C         INITIALIZE BOUNDARY CONDS AT W
203             ENDIF             ENDIF
204            ENDIF            ENDIF
205    
206            IF (Gi .EQ. Nx) THEN            IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN
207  C         INITIALIZE BOUNDARY CONDS AT EAST  C         INITIALIZE BOUNDARY CONDS AT EAST
208             IF ((y .gt. min_y_noflow_EAST) .AND.             IF ((y .gt. min_y_noflow_EAST) .AND.
209       &         (y .le. max_y_noflow_EAST)) THEN       &         (y .le. max_y_noflow_EAST)) THEN
# Line 139  C         INITIALIZE BOUNDARY CONDS AT E Line 229  C         INITIALIZE BOUNDARY CONDS AT E
229             ENDIF             ENDIF
230            ENDIF            ENDIF
231    
232            IF (Gj .EQ. 1) THEN            IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN
233  C         INITIALIZE BOUNDARY CONDS AT SOUTH  C         INITIALIZE BOUNDARY CONDS AT SOUTH
234             IF ((x .gt. min_x_noflow_SOUTH) .AND.             IF ((x .gt. min_x_noflow_SOUTH) .AND.
235       &         (x .le. max_x_noflow_SOUTH)) THEN       &         (x .le. max_x_noflow_SOUTH)) THEN
# Line 165  C         INITIALIZE BOUNDARY CONDS AT S Line 255  C         INITIALIZE BOUNDARY CONDS AT S
255             ENDIF             ENDIF
256            ENDIF            ENDIF
257    
258            IF (Gj .EQ. Ny) THEN            IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN
259  C         INITIALIZE BOUNDARY CONDS AT NORTH  C         INITIALIZE BOUNDARY CONDS AT NORTH
260             IF ((x .gt. min_x_noflow_NORTH) .AND.             IF ((x .gt. min_x_noflow_NORTH) .AND.
261       &         (x .le. max_x_noflow_NORTH)) THEN       &         (x .le. max_x_noflow_NORTH)) THEN
# Line 190  C         INITIALIZE BOUNDARY CONDS AT N Line 280  C         INITIALIZE BOUNDARY CONDS AT N
280              STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0              STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
281             ENDIF             ENDIF
282            ENDIF            ENDIF
283    
284    #else
285    ! BOUNDARIES CONFIGURED FROM FILES
286    
287              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
288         &        temp_hmask(i,j,bi,bj).eq.0.0) THEN
289    
290              ! WEST FACE OF CELL
291               maskFlag=INT(temp_ufacemask(i,j,bi,bj))
292               IF (maskFlag.eq.2) THEN
293                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
294               ELSEIF (maskFlag.eq.3) THEN
295                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
296               ELSEIF (maskFlag.eq.1) THEN
297                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
298               ELSEIF ((maskFlag.eq.0) .or.
299         &      ((maskFlag.eq.-1) .and.
300         &       (temp_hmask(i-1,j,bi,bj).eq.-1.0))) THEN
301                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
302               ELSE
303                STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
304               ENDIF
305    
306               ! EAST FACE OF CELL
307               maskFlag=INT(temp_ufacemask(i+1,j,bi,bj))
308               IF (maskFlag.eq.2) THEN
309                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 2.0
310               ELSEIF (maskFlag.eq.3) THEN
311                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 3.0
312               ELSEIF (maskFlag.eq.1) THEN
313                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 1.0
314               ELSEIF ((maskFlag.eq.0) .or.
315         &      ((maskFlag.eq.-1) .and.
316         &       (temp_hmask(i+1,j,bi,bj).eq.-1.0))) THEN
317                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 0.0
318               ELSE
319                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0
320               ENDIF
321    
322               ! SOUTH FACE OF CELL
323               maskFlag=INT(temp_vfacemask(i,j,bi,bj))
324               IF (maskFlag.eq.2) THEN
325                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
326               ELSEIF (maskFlag.eq.3) THEN
327                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
328               ELSEIF (maskFlag.eq.1) THEN
329                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
330               ELSEIF ((maskFlag.eq.0) .or.
331         &      ((maskFlag.eq.-1) .and.
332         &       (temp_hmask(i,j-1,bi,bj).eq.-1.0))) THEN
333                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
334               ELSE
335                STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
336               ENDIF
337    
338               ! NORTH FACE OF CELL
339               maskFlag=INT(temp_vfacemask(i,j+1,bi,bj))
340               IF (maskFlag.eq.2) THEN
341                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 2.0
342               ELSEIF (maskFlag.eq.3) THEN
343                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 3.0
344               ELSEIF (maskFlag.eq.1) THEN
345                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 1.0
346               ELSEIF ((maskFlag.eq.0) .or.
347         &      ((maskFlag.eq.-1) .and.
348         &       (temp_hmask(i,j+1,bi,bj).eq.-1.0))) THEN
349                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 0.0
350               ELSE
351                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = -1.0
352               ENDIF
353    
354              ENDIF ! hmask==1 or hmask==0
355    
356    #endif
357                                        
358           ENDDO           ENDDO
359          ENDDO          ENDDO

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.3

  ViewVC Help
Powered by ViewVC 1.1.22