/[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.6 by dgoldberg, Sat Jun 8 22:15:33 2013 UTC
# Line 22  C     !USES: Line 22  C     !USES:
22  #include "STREAMICE_CG.h"  #include "STREAMICE_CG.h"
23  #include "STREAMICE_BDRY.h"  #include "STREAMICE_BDRY.h"
24  #include "GRID.h"  #include "GRID.h"
25    #ifdef ALLOW_STREAMICE_FLUX_CONTROL
26    #include "STREAMICE_CTRL_FLUX.h"
27    #endif
28    
29  C     myThid ::  my Thread Id number  C     myThid ::  my Thread Id number
30        INTEGER myThid        INTEGER myThid
# Line 29  CEOP Line 32  CEOP
32    
33  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
34  C     === Local variables ===  C     === Local variables ===
35        INTEGER bi, bj, i, j, Gi, Gj, m        INTEGER bi, bj, i, j, Gi, Gj, m, k
36          INTEGER maskFlag, hmaskFlag
37        _RL x, y        _RL x, y
38          _RS dummyRS
39        CHARACTER*(MAX_LEN_MBUF) msgBuf        CHARACTER*(MAX_LEN_MBUF) msgBuf
40    
41  #ifdef ALLOW_STREAMICE  #ifdef ALLOW_STREAMICE
42    
43    #ifdef STREAMICE_GEOM_FILE_SETUP
44          _RS temp_ufacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
45          _RS temp_vfacemask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
46          _RS temp_hmask (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
47    #endif
48    
49  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
50    
51        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 60  C        CALL STREAMICE_MNC_INIT( myThid
60        ENDIF        ENDIF
61  #endif  #endif
62    
63    !     CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
64    
65        IF ( STREAMICE_calve_to_mask ) THEN        IF ( STREAMICE_calve_to_mask ) THEN
66         IF ( STREAMICEcalveMaskFile .NE. ' ') THEN         IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
67          _BARRIER          _BARRIER
# Line 78  C       The 0 is the "iteration" argumen Line 91  C       The 0 is the "iteration" argumen
91         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
92       &                    SQUEEZE_RIGHT , 1)       &                    SQUEEZE_RIGHT , 1)
93        ENDIF        ENDIF
94    
95          
96    #ifdef ALLOW_COST
97          IF ( STREAMICEcostMaskFile .NE. ' ') THEN
98            _BARRIER
99    C       The 0 is the "iteration" argument. The ' ' is an empty suffix
100            CALL READ_FLD_XY_RL( STREAMICEcostMaskFile, ' ',
101         &   STREAMICE_cost_mask, 0, myThid )
102           ELSE
103            WRITE(msgBuf,'(A)') 'COST MASK - NOT IMPLENTED'
104            CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
105         &                    SQUEEZE_RIGHT , 1)
106    
107           DO bj = myByLo(myThid), myByHi(myThid)
108            DO bi = myBxLo(myThid), myBxHi(myThid)
109             DO j=1,sNy
110              DO i=1,sNx
111               STREAMICE_cost_mask (i,j,bi,bj) = 1.0
112              ENDDO
113             ENDDO
114            ENDDO
115           ENDDO
116    
117          ENDIF
118    #endif
119          
120    
121    !    READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES
122    #ifdef STREAMICE_GEOM_FILE_SETUP
123    
124          IF ( STREAMICEuFaceBdryFile .NE. ' ') THEN
125            _BARRIER
126           CALL READ_FLD_XY_RS ( STREAMICEuFaceBdryFile, ' ',
127         &   temp_ufacemask, 0, myThid )
128          ELSE
129           WRITE(msgBuf,'(A)') 'U FACE MASK - NOT SET'
130           CALL PRINT_ERROR( msgBuf, myThid)
131          ENDIF
132    
133          IF ( STREAMICEvFaceBdryFile .NE. ' ') THEN
134            _BARRIER
135           CALL READ_FLD_XY_RS ( STREAMICEvFaceBdryFile, ' ',
136         &   temp_vfacemask, 0, myThid )
137          ELSE
138           WRITE(msgBuf,'(A)') 'V FACE MASK - NOT SET'
139           CALL PRINT_ERROR( msgBuf, myThid)
140          ENDIF
141    
142          _EXCH_XY_RS(temp_ufacemask,myThid)
143          _EXCH_XY_RS(temp_ufacemask,myThid)
144    
145          IF ( STREAMICEuDirichValsFile .NE. ' ') THEN
146            _BARRIER
147           CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ',
148    #ifdef ALLOW_STREAMICE_FLUX_CONTROL
149         &   u_bdry_values_SI_base, 0, myThid )
150    #else
151         &   u_bdry_values_SI, 0, myThid )
152    #endif
153          ELSE
154           WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET'
155           CALL PRINT_ERROR( msgBuf, myThid)
156          ENDIF
157    
158          IF ( STREAMICEvDirichValsFile .NE. ' ') THEN
159            _BARRIER
160           CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ',
161    #ifdef ALLOW_STREAMICE_FLUX_CONTROL
162         &   v_bdry_values_SI_base, 0, myThid )
163    #else
164         &   v_bdry_values_SI, 0, myThid )
165    #endif
166          ELSE
167           WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET'
168           CALL PRINT_ERROR( msgBuf, myThid)
169          ENDIF
170    
171          IF ( STREAMICEHBCxFile .NE. ' ') THEN
172            _BARRIER
173           CALL READ_FLD_XY_RL ( STREAMICEHBCxFile, ' ',
174         &   h_ubdry_values_SI, 0, myThid )
175          ELSE
176           WRITE(msgBuf,'(A)') 'THICK BC AT U FACE - NOT SET'
177           CALL PRINT_ERROR( msgBuf, myThid)
178          ENDIF
179    
180          IF ( STREAMICEHBCyFile .NE. ' ') THEN
181            _BARRIER
182           CALL READ_FLD_XY_RL ( STREAMICEHBCyFile, ' ',
183         &   h_vbdry_values_SI, 0, myThid )
184          ELSE
185           WRITE(msgBuf,'(A)') 'THICK BC AT V FACE - NOT SET'
186           CALL PRINT_ERROR( msgBuf, myThid)
187          ENDIF
188    
189    #ifdef ALLOW_STREAMICE_2DTRACER
190    
191          IF ( STREAMICETrac2dBCxFile .NE. ' ') THEN
192            _BARRIER
193           CALL READ_FLD_XY_RL ( STREAMICETrac2dBCxFile, ' ',
194         &   trac2d_ubdry_values_SI, 0, myThid )
195          ELSE
196           WRITE(msgBuf,'(A)') 'TRAC BC AT U FACE - NOT SET'
197           CALL PRINT_ERROR( msgBuf, myThid)
198          ENDIF
199    
200          IF ( STREAMICETRAC2DBCyFile .NE. ' ') THEN
201            _BARRIER
202           CALL READ_FLD_XY_RL ( STREAMICETrac2dBCyFile, ' ',
203         &   trac2d_vbdry_values_SI, 0, myThid )
204          ELSE
205           WRITE(msgBuf,'(A)') 'TRAC BC AT V FACE - NOT SET'
206           CALL PRINT_ERROR( msgBuf, myThid)
207          ENDIF
208    
209    #endif
210    
211    
212    ! with this setup hmask is initialized here rather than in init_varia,
213    ! because it is needed to set no-flow boundaries, even though the field
214    ! could potentially change due to ice shelf front advance and calving
215    ! (POTENTIAL PROBLEMS WITH TAF?????? USE TEMP FIELD HERE AND SET HMASK IN INIT_VARIA??)
216    
217          IF ( STREAMICEhMaskFile .NE. ' ') THEN
218            _BARRIER
219           CALL READ_FLD_XY_RS ( STREAMICEhMaskFile, ' ',
220         &   temp_hmask, 0, myThid )
221          ELSE
222           WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET'
223           CALL PRINT_ERROR( msgBuf, myThid)
224          ENDIF
225          
226          _EXCH_XY_RS(temp_hmask,myThid)
227    
228    
229    #ifdef ALLOW_CTRL
230          DO bj = myByLo(myThid), myByHi(myThid)
231           DO bi = myBxLo(myThid), myBxHi(myThid)
232            DO j=1,sNy
233             DO i=1,sNx
234              IF (temp_hmask(i,j,bi,bj) .eq. 1.0) THEN
235               DO k=1,Nr
236               STREAMICE_ctrl_mask(i,j,k,bi,bj) = 1. _d 0
237               ENDDO
238              ENDIF
239             ENDDO
240            ENDDO
241           ENDDO
242          ENDDO
243    #endif
244    
245    #ifdef ALLOW_STREAMICE_FLUX_CONTROL
246         DO bj = myByLo(myThid), myByHi(myThid)
247           DO bi = myBxLo(myThid), myBxHi(myThid)
248            DO j=1,sNy
249             DO i=1,sNx
250              u_bdry_values_SI (i,j,bi,bj) =
251         &     u_bdry_values_SI_base (i,j,bi,bj)
252              v_bdry_values_SI (i,j,bi,bj) =
253         &     v_bdry_values_SI_base (i,j,bi,bj)
254             ENDDO
255            ENDDO
256           ENDDO
257          ENDDO
258    #endif
259    
260    #endif /* STREAMICE_GEOM_FILE_SETUP */
261    
262    
263  !!!!!!!!!!!!!!!!!!!!!!!!!  !!!!!!!!!!!!!!!!!!!!!!!!!
264    
265  C- fill in the overlap (+ BARRIER):  C- fill in the overlap (+ BARRIER):
# Line 101  C         INIT VALUES FOR METRIC TERMS Line 283  C         INIT VALUES FOR METRIC TERMS
283    
284  C         INIT BDRY CONDITIONS  C         INIT BDRY CONDITIONS
285    
286    #ifndef STREAMICE_GEOM_FILE_SETUP
287    
288            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i            Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
289            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j            Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
290            x = xC(i,j,bi,bj)            x = xC(i,j,bi,bj)
# Line 212  C         INITIALIZE BOUNDARY CONDS AT N Line 396  C         INITIALIZE BOUNDARY CONDS AT N
396              STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0              STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
397             ENDIF             ENDIF
398            ENDIF            ENDIF
399    
400    #else /* ifndef STREAMICE_GEOM_FILE_SETUP */
401    ! BOUNDARY MASK CONFIGURED FROM FILES
402    
403    
404              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
405         &        temp_hmask(i,j,bi,bj).eq.0.0 .or.
406         &        temp_hmask(i-1,j,bi,bj).eq.1.0) THEN
407    
408              ! WEST FACE OF CELL
409               maskFlag=INT(temp_ufacemask(i,j,bi,bj))
410               IF (maskFlag.eq.2) THEN
411                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
412               ELSEIF (maskFlag.eq.3) THEN
413                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
414               ELSEIF (maskFlag.eq.1) THEN
415                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
416               ELSEIF ((maskFlag.eq.0) .or.
417         &      ((maskFlag.eq.-1) .and.
418         &       (temp_hmask(i-1,j,bi,bj).eq.-1.0))) THEN
419                STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
420               ELSE
421                STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
422               ENDIF
423    
424              ENDIF
425    
426              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
427         &        temp_hmask(i,j,bi,bj).eq.0.0) THEN
428    
429               ! EAST FACE OF CELL
430               maskFlag=INT(temp_ufacemask(i+1,j,bi,bj))
431               IF (maskFlag.eq.2) THEN
432                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 2.0
433               ELSEIF (maskFlag.eq.3) THEN
434                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 3.0
435               ELSEIF (maskFlag.eq.1) THEN
436                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 1.0
437               ELSEIF ((maskFlag.eq.0) .or.
438         &      ((maskFlag.eq.-1) .and.
439         &       (temp_hmask(i+1,j,bi,bj).eq.-1.0))) THEN
440                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 0.0
441               ELSE
442                STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0
443               ENDIF
444    
445              ENDIF
446    
447              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
448         &        temp_hmask(i,j,bi,bj).eq.0.0 .or.
449         &        temp_hmask(i,j-1,bi,bj).eq.1.0) THEN
450    
451               ! SOUTH FACE OF CELL
452               maskFlag=INT(temp_vfacemask(i,j,bi,bj))
453               IF (maskFlag.eq.2) THEN
454                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
455               ELSEIF (maskFlag.eq.3) THEN
456                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
457               ELSEIF (maskFlag.eq.1) THEN
458                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
459               ELSEIF ((maskFlag.eq.0) .or.
460         &      ((maskFlag.eq.-1) .and.
461         &       (temp_hmask(i,j-1,bi,bj).eq.-1.0))) THEN
462                STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
463               ELSE
464                STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
465               ENDIF
466    
467              ENDIF
468    
469              IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
470         &        temp_hmask(i,j,bi,bj).eq.0.0) THEN
471    
472    
473               ! NORTH FACE OF CELL
474               maskFlag=INT(temp_vfacemask(i,j+1,bi,bj))
475               IF (maskFlag.eq.2) THEN
476                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 2.0
477               ELSEIF (maskFlag.eq.3) THEN
478                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 3.0
479               ELSEIF (maskFlag.eq.1) THEN
480                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 1.0
481               ELSEIF ((maskFlag.eq.0) .or.
482         &      ((maskFlag.eq.-1) .and.
483         &       (temp_hmask(i,j+1,bi,bj).eq.-1.0))) THEN
484                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 0.0
485               ELSE
486                STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = -1.0
487               ENDIF
488    
489              ENDIF ! hmask==1 or hmask==0
490    
491    #endif
492                                        
493           ENDDO           ENDDO
494          ENDDO          ENDDO
495         ENDDO         ENDDO
496        ENDDO        ENDDO
497    
498    #ifdef ALLOW_CTRL
499    !      _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid )
500          CALL ACTIVE_WRITE_GEN_RS( 'maskCtrlL', STREAMICE_ctrl_mask,
501         &  'XY', Nr, 1, .FALSE., 0, mythid, dummyRS )
502    #endif
503    
504    #ifdef ALLOW_COST
505    !      _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid )
506          CALL WRITE_FLD_XY_RS ( 'maskCost', '',
507         & STREAMICE_cost_mask, 0, myThid )
508    #endif
509    
510    
511        _EXCH_XY_RL(k1AtC_str, myThid )        _EXCH_XY_RL(k1AtC_str, myThid )
512        _EXCH_XY_RL(k2AtC_str, myThid )        _EXCH_XY_RL(k2AtC_str, myThid )
513        _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )        _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )
# Line 231  C         INITIALIZE BOUNDARY CONDS AT N Line 521  C         INITIALIZE BOUNDARY CONDS AT N
521        Xquad (2) = .5 * (1.+1./sqrt(3.))        Xquad (2) = .5 * (1.+1./sqrt(3.))
522    
523        CALL STREAMICE_INIT_PHI( myThid )        CALL STREAMICE_INIT_PHI( myThid )
   
524                
   
525  #endif  #endif
526    
527        RETURN        RETURN

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

  ViewVC Help
Powered by ViewVC 1.1.22