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

Contents 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 - (show 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 C $Header: /u/gcmpack/MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F,v 1.3 2013/01/09 21:56:18 dgoldberg Exp $
2 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 INTEGER bi, bj, i, j, Gi, Gj, m, k
33 INTEGER maskFlag, hmaskFlag
34 _RL x, y
35 _RS dummyRS
36 CHARACTER*(MAX_LEN_MBUF) msgBuf
37
38 #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
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 ! CALVING MASK - LIMIT OF ICE SHELF FRONT ADVANCE
61
62 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
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
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 _EXCH_XY_RS(temp_ufacemask,myThid)
114 _EXCH_XY_RS(temp_ufacemask,myThid)
115
116 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
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
167 #endif
168
169
170 !!!!!!!!!!!!!!!!!!!!!!!!!
171
172 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 #ifdef STREAMICE_HYBRID_STRESS
188 streamice_basal_geom (i,j,bi,bj) = 1.0
189 #endif
190
191 C INIT BDRY CONDITIONS
192
193 #ifndef STREAMICE_GEOM_FILE_SETUP
194
195 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 IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN
204 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 IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN
230 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 IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN
256 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 IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN
282 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
307 #else
308 ! BOUNDARIES CONFIGURED FROM FILES
309
310
311 IF (temp_hmask(i,j,bi,bj).eq.1.0 .or.
312 & temp_hmask(i,j,bi,bj).eq.0.0 .or.
313 & temp_hmask(i-1,j,bi,bj).eq.1.0) THEN
314
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 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 ! 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 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 ! 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 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 ! 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
400 ENDDO
401 ENDDO
402 ENDDO
403 ENDDO
404
405 #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 _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 PRINT *, "GOT HERE END INIT FIXED"
426
427
428 #endif
429
430 RETURN
431 END
432

  ViewVC Help
Powered by ViewVC 1.1.22