/[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.5 - (show annotations) (download)
Thu Mar 7 15:23:19 2013 UTC (12 years, 4 months ago) by dgoldberg
Branch: MAIN
Changes since 1.4: +33 -2 lines
bug fixes, GL smoothing, changes for controlling bathym with const surf elev

1 C $Header: /u/gcmpack/MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F,v 1.4 2013/02/11 00:57:31 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
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):
199 _EXCH_XY_RL(STREAMICE_calve_mask, myThid )
200
201 DO bj = myByLo(myThid), myByHi(myThid)
202 DO bi = myBxLo(myThid), myBxHi(myThid)
203 DO j=1,sNy
204 DO i=1,sNx
205
206 C INIT VALUES FOR METRIC TERMS
207
208 k1AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
209 & (dxG(i+1,j,bi,bj)-dxG(i,j,bi,bj))
210 k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) *
211 & (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj))
212
213 #ifdef STREAMICE_HYBRID_STRESS
214 streamice_basal_geom (i,j,bi,bj) = 1.0
215 #endif
216
217 C INIT BDRY CONDITIONS
218
219 #ifndef STREAMICE_GEOM_FILE_SETUP
220
221 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
222 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
223 x = xC(i,j,bi,bj)
224 y = yC(i,j,bi,bj)
225
226 STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0
227 STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0
228
229 IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN
230 C INITIALIZE BOUNDARY CONDS AT WEST
231 IF ((y .gt. min_y_noflow_WEST) .AND.
232 & (y .le. max_y_noflow_WEST)) THEN
233 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
234 ENDIF
235 IF ((y .gt. min_y_noStress_WEST) .AND.
236 & (y .le. max_y_noStress_WEST)) THEN
237 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
238 ENDIF
239 IF ((y .gt. min_y_FluxBdry_WEST) .AND.
240 & (y .le. max_y_FluxBdry_WEST)) THEN
241 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
242 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_WEST
243 ENDIF
244 IF ((y .gt. min_y_Dirich_WEST) .AND.
245 & (y .le. max_y_Dirich_WEST)) THEN
246 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
247 u_bdry_values_SI (i,j,bi,bj) = 0.0
248 ENDIF
249 IF ((y .gt. min_y_CFBC_WEST) .AND.
250 & (y .le. max_y_CFBC_WEST)) THEN
251 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
252 ENDIF
253 ENDIF
254
255 IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN
256 C INITIALIZE BOUNDARY CONDS AT EAST
257 IF ((y .gt. min_y_noflow_EAST) .AND.
258 & (y .le. max_y_noflow_EAST)) THEN
259 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0
260 ENDIF
261 IF ((y .gt. min_y_noStress_EAST) .AND.
262 & (y .le. max_y_noStress_EAST)) THEN
263 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0
264 ENDIF
265 IF ((y .gt. min_y_FluxBdry_EAST) .AND.
266 & (y .le. max_y_FluxBdry_EAST)) THEN
267 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0
268 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_EAST
269 ENDIF
270 IF ((y .gt. min_y_Dirich_EAST) .AND.
271 & (y .le. max_y_Dirich_EAST)) THEN
272 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0
273 u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
274 ENDIF
275 IF ((y .gt. min_y_CFBC_EAST) .AND.
276 & (y .le. max_y_CFBC_EAST)) THEN
277 STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0
278 ENDIF
279 ENDIF
280
281 IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN
282 C INITIALIZE BOUNDARY CONDS AT SOUTH
283 IF ((x .gt. min_x_noflow_SOUTH) .AND.
284 & (x .le. max_x_noflow_SOUTH)) THEN
285 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0
286 ENDIF
287 IF ((x .gt. min_x_noStress_SOUTH) .AND.
288 & (x .le. max_x_noStress_SOUTH)) THEN
289 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
290 ENDIF
291 IF ((x .gt. min_x_FluxBdry_SOUTH) .AND.
292 & (x .le. max_x_FluxBdry_SOUTH)) THEN
293 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
294 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_SOUTH
295 ENDIF
296 IF ((x .gt. min_x_Dirich_SOUTH) .AND.
297 & (x .le. max_x_Dirich_SOUTH)) THEN
298 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
299 u_bdry_values_SI (i,j,bi,bj) = 0. _d 0
300 ENDIF
301 IF ((x .gt. min_x_CFBC_SOUTH) .AND.
302 & (x .le. max_x_CFBC_SOUTH)) THEN
303 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
304 ENDIF
305 ENDIF
306
307 IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN
308 C INITIALIZE BOUNDARY CONDS AT NORTH
309 IF ((x .gt. min_x_noflow_NORTH) .AND.
310 & (x .le. max_x_noflow_NORTH)) THEN
311 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0. _d 0
312 ENDIF
313 IF ((x .gt. min_x_noStress_NORTH) .AND.
314 & (x .le. max_x_noStress_NORTH)) THEN
315 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0
316 ENDIF
317 IF ((x .gt. min_x_FluxBdry_NORTH) .AND.
318 & (x .le. max_x_FluxBdry_NORTH)) THEN
319 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0
320 v_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_NORTH
321 ENDIF
322 IF ((x .gt. min_x_Dirich_NORTH) .AND.
323 & (x .le. max_x_Dirich_NORTH)) THEN
324 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0
325 v_bdry_values_SI (i,j,bi,bj) = 0. _d 0
326 ENDIF
327 IF ((x .gt. min_x_CFBC_NORTH) .AND.
328 & (x .le. max_x_CFBC_NORTH)) THEN
329 STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0
330 ENDIF
331 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
427 ENDDO
428 ENDDO
429 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 )
445 _EXCH_XY_RL(k2AtC_str, myThid )
446 _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid )
447 _EXCH_XY_RL(STREAMICE_vfacemask_bdry, myThid )
448 _EXCH_XY_RL(u_bdry_values_SI, myThid )
449 _EXCH_XY_RL(v_bdry_values_SI, myThid )
450 _EXCH_XY_RL(u_flux_bdry_SI, myThid )
451 _EXCH_XY_RL(v_flux_bdry_SI, myThid )
452
453 Xquad (1) = .5 * (1.-1./sqrt(3.))
454 Xquad (2) = .5 * (1.+1./sqrt(3.))
455
456 CALL STREAMICE_INIT_PHI( myThid )
457
458
459 #endif
460
461 RETURN
462 END
463

  ViewVC Help
Powered by ViewVC 1.1.22