/[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.2 by dgoldberg, Tue Sep 18 17:06:48 2012 UTC revision 1.5 by dgoldberg, Thu Mar 7 15:23:19 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, m        INTEGER bi, bj, i, j, Gi, Gj, m, k
33          INTEGER maskFlag, hmaskFlag
34        _RL x, y        _RL x, y
35          _RS dummyRS
36        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
37    
38  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
39    
40    #ifdef STREAMICE_GEOM_FILE_SETUP
41          _RS temp_ufacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42          _RS temp_vfacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43          _RS temp_hmask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
44    #endif
45    
46  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
47    
48        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 57  C        CALL STREAMICE_MNC_INIT( myThid
57        ENDIF        ENDIF
58  #endif  #endif
59    
60    !     CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
61    
62        IF ( STREAMICE_calve_to_mask ) THEN        IF ( STREAMICE_calve_to_mask ) THEN
63         IF ( STREAMICEcalveMaskFile .NE. ' ') THEN         IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
64          _BARRIER          _BARRIER
# Line 78  C       The 0 is the "iteration" argumen Line 88  C       The 0 is the "iteration" argumen
88         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
89       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
90        ENDIF        ENDIF
91    
92          
93    #ifdef ALLOW_COST
94          IF ( STREAMICEcostMaskFile .NE. ' ') THEN
95            _BARRIER
96    C       The 0 is the "iteration" argument. The ' ' is an empty suffix
97            CALL READ_FLD_XY_RL( STREAMICEcostMaskFile, ' ',
98         &   STREAMICE_cost_mask, 0, myThid )
99           ELSE
100            WRITE(msgBuf,'(A)') 'COST MASK - NOT IMPLENTED'
101            CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
102         &                    SQUEEZE_RIGHT , 1)
103    
104           DO bj = myByLo(myThid), myByHi(myThid)
105            DO bi = myBxLo(myThid), myBxHi(myThid)
106             DO j=1,sNy
107              DO i=1,sNx
108               STREAMICE_cost_mask (i,j,bi,bj) = 1.0
109              ENDDO
110             ENDDO
111            ENDDO
112           ENDDO
113    
114          ENDIF
115    #endif
116          
117    
118    !    READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES
119    #ifdef STREAMICE_GEOM_FILE_SETUP
120    
121          IF ( STREAMICEuFaceBdryFile .NE. ' ') THEN
122            _BARRIER
123           CALL READ_FLD_XY_RS ( STREAMICEuFaceBdryFile, ' ',
124         &   temp_ufacemask, 0, myThid )
125          ELSE
126           WRITE(msgBuf,'(A)') 'U FACE MASK - NOT SET'
127           CALL PRINT_ERROR( msgBuf, myThid)
128          ENDIF
129    
130          IF ( STREAMICEvFaceBdryFile .NE. ' ') THEN
131            _BARRIER
132           CALL READ_FLD_XY_RS ( STREAMICEvFaceBdryFile, ' ',
133         &   temp_vfacemask, 0, myThid )
134          ELSE
135           WRITE(msgBuf,'(A)') 'V FACE MASK - NOT SET'
136           CALL PRINT_ERROR( msgBuf, myThid)
137          ENDIF
138    
139          _EXCH_XY_RS(temp_ufacemask,myThid)
140          _EXCH_XY_RS(temp_ufacemask,myThid)
141    
142          IF ( STREAMICEuDirichValsFile .NE. ' ') THEN
143            _BARRIER
144           CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ',
145         &   u_bdry_values_SI, 0, myThid )
146          ELSE
147           WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET'
148           CALL PRINT_ERROR( msgBuf, myThid)
149          ENDIF
150    
151          IF ( STREAMICEvDirichValsFile .NE. ' ') THEN
152            _BARRIER
153           CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ',
154         &   v_bdry_values_SI, 0, myThid )
155          ELSE
156           WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET'
157           CALL PRINT_ERROR( msgBuf, myThid)
158          ENDIF
159    
160    ! with this setup hmask is initialized here rather than in init_varia,
161    ! because it is needed to set no-flow boundaries, even though the field
162    ! could potentially change due to ice shelf front advance and calving
163    ! (POTENTIAL PROBLEMS WITH TAF?????? USE TEMP FIELD HERE AND SET HMASK IN INIT_VARIA??)
164    
165          IF ( STREAMICEhMaskFile .NE. ' ') THEN
166            _BARRIER
167           CALL READ_FLD_XY_RS ( STREAMICEhMaskFile, ' ',
168         &   temp_hmask, 0, myThid )
169          ELSE
170           WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET'
171           CALL PRINT_ERROR( msgBuf, myThid)
172          ENDIF
173          
174          _EXCH_XY_RS(temp_hmask,myThid)
175    
176    
177    #ifdef ALLOW_CTRL
178          DO bj = myByLo(myThid), myByHi(myThid)
179           DO bi = myBxLo(myThid), myBxHi(myThid)
180            DO j=1,sNy
181             DO i=1,sNx
182              IF (temp_hmask(i,j,bi,bj) .eq. 1.0) THEN
183               DO k=1,Nr
184               STREAMICE_ctrl_mask(i,j,k,bi,bj) = 1. _d 0
185               ENDDO
186              ENDIF
187             ENDDO
188            ENDDO
189           ENDDO
190          ENDDO
191    #endif
192    
193    #endif
194    
195    
196  !!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!
197    
198  C- fill in the overlap (+ BARRIER):  C- fill in the overlap (+ BARRIER):
# Line 101  C         INIT VALUES FOR METRIC TERMS Line 216  C         INIT VALUES FOR METRIC TERMS
216    
217  C         INIT BDRY CONDITIONS  C         INIT BDRY CONDITIONS
218    
219    #ifndef STREAMICE_GEOM_FILE_SETUP
220    
221            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
222            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
223            x = xC(i,j,bi,bj)            x = xC(i,j,bi,bj)
# Line 212  C         INITIALIZE BOUNDARY CONDS AT N Line 329  C         INITIALIZE BOUNDARY CONDS AT N
329              STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0              STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
330             ENDIF             ENDIF
331            ENDIF            ENDIF
332    
333    #else
334    ! BOUNDARIES CONFIGURED FROM FILES
335    
336    
337              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
338         &        temp_hmask(i,j,bi,bj).eq.0.0 .or.
339         &        temp_hmask(i-1,j,bi,bj).eq.1.0) THEN
340    
341              ! WEST FACE OF CELL
342               maskFlag=INT(temp_ufacemask(i,j,bi,bj))
343               IF (maskFlag.eq.2) THEN
344                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
345               ELSEIF (maskFlag.eq.3) THEN
346                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
347               ELSEIF (maskFlag.eq.1) THEN
348                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
349               ELSEIF ((maskFlag.eq.0) .or.
350         &      ((maskFlag.eq.-1) .and.
351         &       (temp_hmask(i-1,j,bi,bj).eq.-1.0))) THEN
352                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
353               ELSE
354                STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
355               ENDIF
356    
357              ENDIF
358    
359              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
360         &        temp_hmask(i,j,bi,bj).eq.0.0) THEN
361    
362               ! EAST FACE OF CELL
363               maskFlag=INT(temp_ufacemask(i+1,j,bi,bj))
364               IF (maskFlag.eq.2) THEN
365                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 2.0
366               ELSEIF (maskFlag.eq.3) THEN
367                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 3.0
368               ELSEIF (maskFlag.eq.1) THEN
369                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 1.0
370               ELSEIF ((maskFlag.eq.0) .or.
371         &      ((maskFlag.eq.-1) .and.
372         &       (temp_hmask(i+1,j,bi,bj).eq.-1.0))) THEN
373                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 0.0
374               ELSE
375                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0
376               ENDIF
377    
378              ENDIF
379    
380              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
381         &        temp_hmask(i,j,bi,bj).eq.0.0 .or.
382         &        temp_hmask(i,j-1,bi,bj).eq.1.0) THEN
383    
384               ! SOUTH FACE OF CELL
385               maskFlag=INT(temp_vfacemask(i,j,bi,bj))
386               IF (maskFlag.eq.2) THEN
387                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
388               ELSEIF (maskFlag.eq.3) THEN
389                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
390               ELSEIF (maskFlag.eq.1) THEN
391                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
392               ELSEIF ((maskFlag.eq.0) .or.
393         &      ((maskFlag.eq.-1) .and.
394         &       (temp_hmask(i,j-1,bi,bj).eq.-1.0))) THEN
395                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
396               ELSE
397                STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
398               ENDIF
399    
400              ENDIF
401    
402              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
403         &        temp_hmask(i,j,bi,bj).eq.0.0) THEN
404    
405    
406               ! NORTH FACE OF CELL
407               maskFlag=INT(temp_vfacemask(i,j+1,bi,bj))
408               IF (maskFlag.eq.2) THEN
409                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 2.0
410               ELSEIF (maskFlag.eq.3) THEN
411                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 3.0
412               ELSEIF (maskFlag.eq.1) THEN
413                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 1.0
414               ELSEIF ((maskFlag.eq.0) .or.
415         &      ((maskFlag.eq.-1) .and.
416         &       (temp_hmask(i,j+1,bi,bj).eq.-1.0))) THEN
417                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 0.0
418               ELSE
419                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = -1.0
420               ENDIF
421    
422              ENDIF ! hmask==1 or hmask==0
423    
424    #endif
425                                        
426           ENDDO           ENDDO
427          ENDDO          ENDDO
428         ENDDO         ENDDO
429        ENDDO        ENDDO
430    
431    #ifdef ALLOW_CTRL
432    !      _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid )
433          CALL ACTIVE_WRITE_GEN_RS( 'maskCtrlL', STREAMICE_ctrl_mask,
434         &  'XY', Nr, 1, .FALSE., 0, mythid, dummyRS )
435    #endif
436    
437    #ifdef ALLOW_COST
438    !      _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid )
439          CALL WRITE_FLD_XY_RS ( 'maskCost', '',
440         & STREAMICE_cost_mask, 0, myThid )
441    #endif
442    
443    
444        _EXCH_XY_RL(k1AtC_str, myThid )        _EXCH_XY_RL(k1AtC_str, myThid )
445        _EXCH_XY_RL(k2AtC_str, myThid )        _EXCH_XY_RL(k2AtC_str, myThid )
446        _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )        _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )
# Line 231  C         INITIALIZE BOUNDARY CONDS AT N Line 454  C         INITIALIZE BOUNDARY CONDS AT N
454        Xquad (2) = .5 * (1.+1./sqrt(3.))        Xquad (2) = .5 * (1.+1./sqrt(3.))
455    
456        CALL STREAMICE_INIT_PHI( myThid )        CALL STREAMICE_INIT_PHI( myThid )
   
457                
458    
459  #endif  #endif

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.5

  ViewVC Help
Powered by ViewVC 1.1.22