/[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.3 - (show annotations) (download)
Wed Jan 9 21:56:18 2013 UTC (12 years, 6 months ago) by dgoldberg
Branch: MAIN
Changes since 1.2: +143 -1 lines
changes to accept real datasets

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

  ViewVC Help
Powered by ViewVC 1.1.22