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

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

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


Revision 1.4 - (hide annotations) (download)
Mon Feb 11 00:57:31 2013 UTC (12 years, 5 months ago) by dgoldberg
Branch: MAIN
Changes since 1.3: +53 -4 lines
fixed bug in specifying cell face mask

1 dgoldberg 1.4 C $Header: /u/gcmpack/MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F,v 1.3 2013/01/09 21:56:18 dgoldberg Exp $
2 heimbach 1.1 C $Name: $
3    
4     #include "STREAMICE_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7     CBOP 0
8     C !ROUTINE: STREAMICE_INIT_FIXED
9    
10     C !INTERFACE:
11     SUBROUTINE STREAMICE_INIT_FIXED( myThid )
12    
13     C !DESCRIPTION:
14     C Initialize STREAMICE variables that are kept fixed during the run.
15    
16     C !USES:
17     IMPLICIT NONE
18     #include "EEPARAMS.h"
19     #include "SIZE.h"
20     #include "PARAMS.h"
21     #include "STREAMICE.h"
22     #include "STREAMICE_CG.h"
23     #include "STREAMICE_BDRY.h"
24     #include "GRID.h"
25    
26     C myThid :: my Thread Id number
27     INTEGER myThid
28     CEOP
29    
30     C !LOCAL VARIABLES:
31     C === Local variables ===
32 dgoldberg 1.4 INTEGER bi, bj, i, j, Gi, Gj, m, k
33 dgoldberg 1.3 INTEGER maskFlag, hmaskFlag
34 heimbach 1.1 _RL x, y
35 dgoldberg 1.4 _RS dummyRS
36 heimbach 1.1 CHARACTER*(MAX_LEN_MBUF) msgBuf
37    
38     #ifdef ALLOW_STREAMICE
39    
40 dgoldberg 1.3 #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 heimbach 1.1 #ifdef ALLOW_MNC
47    
48     IF ( useMNC .AND. (streamice_tave_mnc.OR.streamice_dump_mnc)
49     & ) THEN
50     C CALL STREAMICE_MNC_INIT( myThid )
51     ENDIF
52     #endif /* ALLOW_MNC */
53    
54     #ifdef ALLOW_DIAGNOSTICS
55     IF ( useDiagnostics ) THEN
56     CALL STREAMICE_INIT_DIAGNOSTICS( myThid )
57     ENDIF
58     #endif
59    
60 dgoldberg 1.3 ! CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
61    
62 heimbach 1.1 IF ( STREAMICE_calve_to_mask ) THEN
63     IF ( STREAMICEcalveMaskFile .NE. ' ') THEN
64     _BARRIER
65     C The 0 is the "iteration" argument. The ' ' is an empty suffix
66     CALL READ_FLD_XY_RL( STREAMICEcalveMaskFile, ' ',
67     & STREAMICE_calve_mask, 0, myThid )
68     ELSE
69     WRITE(msgBuf,'(A)') 'INIT CALVE MASK - NOT IMPLENTED'
70     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
71     & SQUEEZE_RIGHT , 1)
72     ENDIF
73     ENDIF
74    
75 dgoldberg 1.2
76     ! INITIALIZE SIGMA COORD
77     IF (STREAMICEsigcoordInit.eq.'FILE') THEN
78     WRITE(msgBuf,'(A)') 'SIG FROM FILE - NOT IMPLENTED'
79     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
80     & SQUEEZE_RIGHT , 1)
81     ELSEIF (STREAMICEsigcoordInit.eq.'UNIFORM') THEN
82     do m=1,Nr
83     streamice_sigma_coord (m) = 1./Nr * (m-0.5)
84     streamice_delsigma (m) = 1./Nr
85     enddo
86     ELSE
87     WRITE(msgBuf,'(A)') 'SIG COORD INIT - NOT IMPLENTED'
88     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
89     & SQUEEZE_RIGHT , 1)
90     ENDIF
91 dgoldberg 1.3
92     ! READ IN FILES FOR BOUNDARY MASKS AND DIRICH VALUES
93     #ifdef STREAMICE_GEOM_FILE_SETUP
94    
95     IF ( STREAMICEuFaceBdryFile .NE. ' ') THEN
96     _BARRIER
97     CALL READ_FLD_XY_RS ( STREAMICEuFaceBdryFile, ' ',
98     & temp_ufacemask, 0, myThid )
99     ELSE
100     WRITE(msgBuf,'(A)') 'U FACE MASK - NOT SET'
101     CALL PRINT_ERROR( msgBuf, myThid)
102     ENDIF
103    
104     IF ( STREAMICEvFaceBdryFile .NE. ' ') THEN
105     _BARRIER
106     CALL READ_FLD_XY_RS ( STREAMICEvFaceBdryFile, ' ',
107     & temp_vfacemask, 0, myThid )
108     ELSE
109     WRITE(msgBuf,'(A)') 'V FACE MASK - NOT SET'
110     CALL PRINT_ERROR( msgBuf, myThid)
111     ENDIF
112    
113 dgoldberg 1.4 _EXCH_XY_RS(temp_ufacemask,myThid)
114     _EXCH_XY_RS(temp_ufacemask,myThid)
115    
116 dgoldberg 1.3 IF ( STREAMICEuDirichValsFile .NE. ' ') THEN
117     _BARRIER
118     CALL READ_FLD_XY_RL ( STREAMICEuDirichValsFile, ' ',
119     & u_bdry_values_SI, 0, myThid )
120     ELSE
121     WRITE(msgBuf,'(A)') 'U DIRICH VALS - NOT SET'
122     CALL PRINT_ERROR( msgBuf, myThid)
123     ENDIF
124    
125     IF ( STREAMICEvDirichValsFile .NE. ' ') THEN
126     _BARRIER
127     CALL READ_FLD_XY_RL ( STREAMICEvDirichValsFile, ' ',
128     & v_bdry_values_SI, 0, myThid )
129     ELSE
130     WRITE(msgBuf,'(A)') 'V DIRICH VALS - NOT SET'
131     CALL PRINT_ERROR( msgBuf, myThid)
132     ENDIF
133    
134     ! with this setup hmask is initialized here rather than in init_varia,
135     ! because it is needed to set no-flow boundaries, even though the field
136     ! could potentially change due to ice shelf front advance and calving
137     ! (POTENTIAL PROBLEMS WITH TAF?????? USE TEMP FIELD HERE AND SET HMASK IN INIT_VARIA??)
138    
139     IF ( STREAMICEhMaskFile .NE. ' ') THEN
140     _BARRIER
141     CALL READ_FLD_XY_RS ( STREAMICEhMaskFile, ' ',
142     & temp_hmask, 0, myThid )
143     ELSE
144     WRITE(msgBuf,'(A)') 'H MASK FILE - NOT SET'
145     CALL PRINT_ERROR( msgBuf, myThid)
146     ENDIF
147 dgoldberg 1.4
148     _EXCH_XY_RS(temp_hmask,myThid)
149    
150    
151     #ifdef ALLOW_CTRL
152     DO bj = myByLo(myThid), myByHi(myThid)
153     DO bi = myBxLo(myThid), myBxHi(myThid)
154     DO j=1,sNy
155     DO i=1,sNx
156     IF (temp_hmask(i,j,bi,bj) .eq. 1.0) THEN
157     DO k=1,Nr
158     STREAMICE_ctrl_mask(i,j,k,bi,bj) = 1. _d 0
159     ENDDO
160     ENDIF
161     ENDDO
162     ENDDO
163     ENDDO
164     ENDDO
165     #endif
166 dgoldberg 1.3
167     #endif
168    
169    
170 dgoldberg 1.2 !!!!!!!!!!!!!!!!!!!!!!!!!
171    
172 heimbach 1.1 C- fill in the overlap (+ BARRIER):
173     _EXCH_XY_RL(STREAMICE_calve_mask, myThid )
174    
175     DO bj = myByLo(myThid), myByHi(myThid)
176     DO bi = myBxLo(myThid), myBxHi(myThid)
177     DO j=1,sNy
178     DO i=1,sNx
179    
180     C INIT VALUES FOR METRIC TERMS
181    
182     k1AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
183     & (dxG(i+1,j,bi,bj)-dxG(i,j,bi,bj))
184     k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
185     & (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj))
186    
187 dgoldberg 1.2 #ifdef STREAMICE_HYBRID_STRESS
188     streamice_basal_geom (i,j,bi,bj) = 1.0
189     #endif
190    
191 heimbach 1.1 C INIT BDRY CONDITIONS
192    
193 dgoldberg 1.3 #ifndef STREAMICE_GEOM_FILE_SETUP
194    
195 heimbach 1.1 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
196     Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
197     x = xC(i,j,bi,bj)
198     y = yC(i,j,bi,bj)
199    
200     STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
201     STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
202    
203 dgoldberg 1.2 IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN
204 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT WEST
205     IF ((y .gt. min_y_noflow_WEST) .AND.
206     & (y .le. max_y_noflow_WEST)) THEN
207     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
208     ENDIF
209     IF ((y .gt. min_y_noStress_WEST) .AND.
210     & (y .le. max_y_noStress_WEST)) THEN
211     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
212     ENDIF
213     IF ((y .gt. min_y_FluxBdry_WEST) .AND.
214     & (y .le. max_y_FluxBdry_WEST)) THEN
215     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
216     u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_WEST
217     ENDIF
218     IF ((y .gt. min_y_Dirich_WEST) .AND.
219     & (y .le. max_y_Dirich_WEST)) THEN
220     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
221     u_bdry_values_SI (i,j,bi,bj) = 0.0
222     ENDIF
223     IF ((y .gt. min_y_CFBC_WEST) .AND.
224     & (y .le. max_y_CFBC_WEST)) THEN
225     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
226     ENDIF
227     ENDIF
228    
229 dgoldberg 1.2 IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN
230 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT EAST
231     IF ((y .gt. min_y_noflow_EAST) .AND.
232     & (y .le. max_y_noflow_EAST)) THEN
233     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
234     ENDIF
235     IF ((y .gt. min_y_noStress_EAST) .AND.
236     & (y .le. max_y_noStress_EAST)) THEN
237     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
238     ENDIF
239     IF ((y .gt. min_y_FluxBdry_EAST) .AND.
240     & (y .le. max_y_FluxBdry_EAST)) THEN
241     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
242     u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_EAST
243     ENDIF
244     IF ((y .gt. min_y_Dirich_EAST) .AND.
245     & (y .le. max_y_Dirich_EAST)) THEN
246     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
247     u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
248     ENDIF
249     IF ((y .gt. min_y_CFBC_EAST) .AND.
250     & (y .le. max_y_CFBC_EAST)) THEN
251     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
252     ENDIF
253     ENDIF
254    
255 dgoldberg 1.2 IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN
256 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT SOUTH
257     IF ((x .gt. min_x_noflow_SOUTH) .AND.
258     & (x .le. max_x_noflow_SOUTH)) THEN
259     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
260     ENDIF
261     IF ((x .gt. min_x_noStress_SOUTH) .AND.
262     & (x .le. max_x_noStress_SOUTH)) THEN
263     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
264     ENDIF
265     IF ((x .gt. min_x_FluxBdry_SOUTH) .AND.
266     & (x .le. max_x_FluxBdry_SOUTH)) THEN
267     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
268     u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_SOUTH
269     ENDIF
270     IF ((x .gt. min_x_Dirich_SOUTH) .AND.
271     & (x .le. max_x_Dirich_SOUTH)) THEN
272     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
273     u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
274     ENDIF
275     IF ((x .gt. min_x_CFBC_SOUTH) .AND.
276     & (x .le. max_x_CFBC_SOUTH)) THEN
277     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
278     ENDIF
279     ENDIF
280    
281 dgoldberg 1.2 IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN
282 heimbach 1.1 C INITIALIZE BOUNDARY CONDS AT NORTH
283     IF ((x .gt. min_x_noflow_NORTH) .AND.
284     & (x .le. max_x_noflow_NORTH)) THEN
285     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0. _d 0
286     ENDIF
287     IF ((x .gt. min_x_noStress_NORTH) .AND.
288     & (x .le. max_x_noStress_NORTH)) THEN
289     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
290     ENDIF
291     IF ((x .gt. min_x_FluxBdry_NORTH) .AND.
292     & (x .le. max_x_FluxBdry_NORTH)) THEN
293     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
294     v_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_NORTH
295     ENDIF
296     IF ((x .gt. min_x_Dirich_NORTH) .AND.
297     & (x .le. max_x_Dirich_NORTH)) THEN
298     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
299     v_bdry_values_SI (i,j,bi,bj) = 0. _d 0
300     ENDIF
301     IF ((x .gt. min_x_CFBC_NORTH) .AND.
302     & (x .le. max_x_CFBC_NORTH)) THEN
303     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
304     ENDIF
305     ENDIF
306 dgoldberg 1.3
307     #else
308     ! BOUNDARIES CONFIGURED FROM FILES
309    
310 dgoldberg 1.4
311 dgoldberg 1.3 IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
312 dgoldberg 1.4 & temp_hmask(i,j,bi,bj).eq.0.0 .or.
313     & temp_hmask(i-1,j,bi,bj).eq.1.0) THEN
314 dgoldberg 1.3
315     ! WEST FACE OF CELL
316     maskFlag=INT(temp_ufacemask(i,j,bi,bj))
317     IF (maskFlag.eq.2) THEN
318     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
319     ELSEIF (maskFlag.eq.3) THEN
320     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
321     ELSEIF (maskFlag.eq.1) THEN
322     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
323     ELSEIF ((maskFlag.eq.0) .or.
324     & ((maskFlag.eq.-1) .and.
325     & (temp_hmask(i-1,j,bi,bj).eq.-1.0))) THEN
326     STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
327     ELSE
328     STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
329     ENDIF
330    
331 dgoldberg 1.4 ENDIF
332    
333     IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
334     & temp_hmask(i,j,bi,bj).eq.0.0) THEN
335    
336 dgoldberg 1.3 ! EAST FACE OF CELL
337     maskFlag=INT(temp_ufacemask(i+1,j,bi,bj))
338     IF (maskFlag.eq.2) THEN
339     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 2.0
340     ELSEIF (maskFlag.eq.3) THEN
341     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 3.0
342     ELSEIF (maskFlag.eq.1) THEN
343     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 1.0
344     ELSEIF ((maskFlag.eq.0) .or.
345     & ((maskFlag.eq.-1) .and.
346     & (temp_hmask(i+1,j,bi,bj).eq.-1.0))) THEN
347     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = 0.0
348     ELSE
349     STREAMICE_ufacemask_bdry (i+1,j,bi,bj) = -1.0
350     ENDIF
351    
352 dgoldberg 1.4 ENDIF
353    
354     IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
355     & temp_hmask(i,j,bi,bj).eq.0.0 .or.
356     & temp_hmask(i,j-1,bi,bj).eq.1.0) THEN
357    
358 dgoldberg 1.3 ! SOUTH FACE OF CELL
359     maskFlag=INT(temp_vfacemask(i,j,bi,bj))
360     IF (maskFlag.eq.2) THEN
361     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
362     ELSEIF (maskFlag.eq.3) THEN
363     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
364     ELSEIF (maskFlag.eq.1) THEN
365     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
366     ELSEIF ((maskFlag.eq.0) .or.
367     & ((maskFlag.eq.-1) .and.
368     & (temp_hmask(i,j-1,bi,bj).eq.-1.0))) THEN
369     STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
370     ELSE
371     STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
372     ENDIF
373    
374 dgoldberg 1.4 ENDIF
375    
376     IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
377     & temp_hmask(i,j,bi,bj).eq.0.0) THEN
378    
379    
380 dgoldberg 1.3 ! NORTH FACE OF CELL
381     maskFlag=INT(temp_vfacemask(i,j+1,bi,bj))
382     IF (maskFlag.eq.2) THEN
383     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 2.0
384     ELSEIF (maskFlag.eq.3) THEN
385     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 3.0
386     ELSEIF (maskFlag.eq.1) THEN
387     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 1.0
388     ELSEIF ((maskFlag.eq.0) .or.
389     & ((maskFlag.eq.-1) .and.
390     & (temp_hmask(i,j+1,bi,bj).eq.-1.0))) THEN
391     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = 0.0
392     ELSE
393     STREAMICE_vfacemask_bdry (i,j+1,bi,bj) = -1.0
394     ENDIF
395    
396     ENDIF ! hmask==1 or hmask==0
397    
398     #endif
399 heimbach 1.1
400     ENDDO
401     ENDDO
402     ENDDO
403     ENDDO
404    
405 dgoldberg 1.4 #ifdef ALLOW_CTRL
406     ! _EXCH_XY_RL(STREAMICE_ctrl_mask, myThid )
407     CALL ACTIVE_WRITE_GEN_RS( 'maskCtrlL', STREAMICE_ctrl_mask,
408     & 'XY', Nr, 1, .FALSE., 0, mythid, dummyRS )
409     #endif
410    
411    
412 heimbach 1.1 _EXCH_XY_RL(k1AtC_str, myThid )
413     _EXCH_XY_RL(k2AtC_str, myThid )
414     _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )
415     _EXCH_XY_RL(STREAMICE_vfacemask_bdry, myThid )
416     _EXCH_XY_RL(u_bdry_values_SI, myThid )
417     _EXCH_XY_RL(v_bdry_values_SI, myThid )
418     _EXCH_XY_RL(u_flux_bdry_SI, myThid )
419     _EXCH_XY_RL(v_flux_bdry_SI, myThid )
420    
421     Xquad (1) = .5 * (1.-1./sqrt(3.))
422     Xquad (2) = .5 * (1.+1./sqrt(3.))
423    
424     CALL STREAMICE_INIT_PHI( myThid )
425 dgoldberg 1.4 PRINT *, "GOT HERE END INIT FIXED"
426 heimbach 1.1
427    
428     #endif
429    
430     RETURN
431     END
432    

  ViewVC Help
Powered by ViewVC 1.1.22