/[MITgcm]/MITgcm/pkg/seaice/seaice_init_varia.F
ViewVC logotype

Contents of /MITgcm/pkg/seaice/seaice_init_varia.F

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


Revision 1.15 - (show annotations) (download)
Wed Jul 25 08:51:29 2007 UTC (16 years, 10 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint59e
Changes since 1.14: +6 -5 lines
added missing exchange for pkg/seaice OBCS mask

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_init_varia.F,v 1.14 2007/07/24 23:14:47 jmc Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE SEAICE_INIT_VARIA( myThid )
8 C /==========================================================\
9 C | SUBROUTINE SEAICE_INIT_VARIA |
10 C | o Initialization of sea ice model. |
11 C |==========================================================|
12 C \==========================================================/
13 IMPLICIT NONE
14
15 C === Global variables ===
16 #include "SIZE.h"
17 #include "EEPARAMS.h"
18 #include "PARAMS.h"
19 #include "GRID.h"
20 #include "SEAICE.h"
21 CML#include "SEAICE_GRID.h"
22 #include "SEAICE_DIAGS.h"
23 #include "SEAICE_PARAMS.h"
24 #include "FFIELDS.h"
25 #ifdef ALLOW_EXCH2
26 #include "W2_EXCH2_TOPOLOGY.h"
27 #include "W2_EXCH2_PARAMS.h"
28 #endif /* ALLOW_EXCH2 */
29 #ifdef ALLOW_OBCS
30 #include "OBCS.h"
31 #include "OBCS_OPTIONS.h"
32 #endif /* ALLOW_OBCS */
33
34 C === Routine arguments ===
35 C myThid - Thread no. that called this routine.
36 INTEGER myThid
37 CEndOfInterface
38
39 C === Local variables ===
40 C i,j,k,bi,bj - Loop counters
41
42 INTEGER i, j, k, bi, bj
43 _RL PSTAR
44 _RS mask_uice
45 INTEGER myIter, myTile
46
47 #ifdef ALLOW_OBCS
48 INTEGER I_obc, J_obc, kSurface
49 _RL obc_mask
50
51 if ( buoyancyRelation .eq. 'OCEANICP' ) then
52 kSurface = Nr
53 else
54 kSurface = 1
55 endif
56 #endif /* ALLOW_OBCS */
57
58 cph(
59 cph make sure TAF sees proper initialisation
60 cph to avoid partial recomputation issues
61 DO bj=myByLo(myThid),myByHi(myThid)
62 DO bi=myBxLo(myThid),myBxHi(myThid)
63 c
64 DO K=1,3
65 DO J=1-OLy,sNy+OLy
66 DO I=1-OLx,sNx+OLx
67 HEFF(I,J,k,bi,bj)=0. _d 0
68 AREA(I,J,k,bi,bj)=0. _d 0
69 UICE(I,J,k,bi,bj)=0. _d 0
70 VICE(I,J,k,bi,bj)=0. _d 0
71 ENDDO
72 ENDDO
73 ENDDO
74 c
75 DO J=1-OLy,sNy+OLy
76 DO I=1-OLx,sNx+OLx
77 ZETA(I,J,bi,bj)=0. _d 0
78 HSNOW(I,J,bi,bj)=0. _d 0
79 ENDDO
80 ENDDO
81 c
82 ENDDO
83 ENDDO
84 cph)
85
86 C-- Initialize grid info
87 DO bj=myByLo(myThid),myByHi(myThid)
88 DO bi=myBxLo(myThid),myBxHi(myThid)
89 DO j=1-OLy,sNy+OLy
90 DO i=1-OLx,sNx+OLx
91 HEFFM(i,j,bi,bj)=ONE
92 IF (_hFacC(i,j,1,bi,bj).eq.0.) HEFFM(i,j,bi,bj)=0. _d 0
93 ENDDO
94 ENDDO
95
96 #ifdef ALLOW_OBCS
97 C Apply OBCS T/S mask (taken from pkg/obcs/obcs_apply_ts.F)
98 #ifdef ALLOW_OBCS_NORTH
99 DO I=1-Olx,sNx+Olx
100 C Northern boundary
101 J_obc = OB_Jn(I,bi,bj)
102 IF (J_obc.NE.0) THEN
103 obc_mask = _maskS(I,J_obc,kSurface,bi,bj)
104 DO J = J_obc, J_obc+Oly
105 IF (obc_mask.eq.0.) HEFFM(i,j,bi,bj)=0. _d 0
106 ENDDO
107 ENDIF
108 ENDDO
109 #endif
110 #ifdef ALLOW_OBCS_SOUTH
111 DO I=1-Olx,sNx+Olx
112 C Southern boundary
113 J_obc = OB_Js(I,bi,bj)
114 IF (J_obc.NE.0) THEN
115 obc_mask = _maskS(I,J_obc+1,kSurface,bi,bj)
116 DO J = J_obc-Oly, J_obc
117 IF (obc_mask.eq.0.) HEFFM(i,j,bi,bj)=0. _d 0
118 ENDDO
119 ENDIF
120 ENDDO
121 #endif
122 #ifdef ALLOW_OBCS_EAST
123 DO J=1-Oly,sNy+Oly
124 C Eastern boundary
125 I_obc = OB_Ie(J,bi,bj)
126 IF (I_obc.NE.0) THEN
127 obc_mask = _maskW(I_obc,J,kSurface,bi,bj)
128 DO I = I_obc, I_obc+Olx
129 IF (obc_mask.eq.0.) HEFFM(i,j,bi,bj)=0. _d 0
130 ENDDO
131 ENDIF
132 ENDDO
133 #endif
134 #ifdef ALLOW_OBCS_WEST
135 DO J=1-Oly,sNy+Oly
136 C Western boundary
137 I_obc=OB_Iw(J,bi,bj)
138 IF (I_obc.NE.0) THEN
139 obc_mask = _maskW(I_obc+1,J,kSurface,bi,bj)
140 DO I = I_obc-Olx, I_obc
141 IF (obc_mask.eq.0.) HEFFM(i,j,bi,bj)=0. _d 0
142 ENDDO
143 ENDIF
144 ENDDO
145 #endif
146 _EXCH_XY_R8(HEFFM, myThid)
147 #endif /* ALLOW_OBCS */
148
149 DO J=1-OLy+1,sNy+OLy
150 DO I=1-OLx+1,sNx+OLx
151 #ifdef SEAICE_CGRID
152 seaiceMaskU(I,J,bi,bj)= 0.0 _d 0
153 seaiceMaskV(I,J,bi,bj)= 0.0 _d 0
154 mask_uice=HEFFM(I,J,bi,bj)+HEFFM(I-1,J ,bi,bj)
155 IF(mask_uice.GT.1.5) seaiceMaskU(I,J,bi,bj)=ONE
156 mask_uice=HEFFM(I,J,bi,bj)+HEFFM(I ,J-1,bi,bj)
157 IF(mask_uice.GT.1.5) seaiceMaskV(I,J,bi,bj)=ONE
158 #else
159 UVM(i,j,bi,bj)=0. _d 0
160 mask_uice=HEFFM(I,J, bi,bj)+HEFFM(I-1,J-1,bi,bj)
161 & +HEFFM(I,J-1,bi,bj)+HEFFM(I-1,J, bi,bj)
162 IF(mask_uice.GT.3.5) UVM(I,J,bi,bj)=ONE
163 #endif /* SEAICE_CGRID */
164 ENDDO
165 ENDDO
166
167 #ifdef ALLOW_EXCH2
168 #ifndef SEAICE_CGRID
169 C-- Special stuff for cubed sphere: assume grid is rectangular and
170 C set UV mask to zero except for Arctic and Antarctic cube faces.
171 IF (useCubedSphereExchange) THEN
172 myTile = W2_myTileList(bi)
173 IF ( exch2_myFace(myTile) .EQ. 1 .OR.
174 & exch2_myFace(myTile) .EQ. 2 .OR.
175 & exch2_myFace(myTile) .EQ. 4 .OR.
176 & exch2_myFace(myTile) .EQ. 5 ) THEN
177 DO J=1-OLy,sNy+OLy
178 DO I=1-OLx,sNx+OLx
179 UVM(i,j,bi,bj)=0. _d 0
180 ENDDO
181 ENDDO
182 ELSEIF ( exch2_isWedge(myTile) .EQ. 1 ) THEN
183 I=1
184 DO J=1-OLy,sNy+OLy
185 UVM(i,j,bi,bj)=0. _d 0
186 ENDDO
187 ELSEIF ( exch2_isSedge(myTile) .EQ. 1 ) THEN
188 J=1
189 DO I=1-OLx,sNx+OLx
190 UVM(i,j,bi,bj)=0. _d 0
191 ENDDO
192 ENDIF
193 ENDIF
194 #endif /* SEAICE_CGRID */
195 #endif /* ALLOW_EXCH2 */
196
197 DO j=1-OLy,sNy+OLy
198 DO i=1-OLx,sNx+OLx
199 TICE(I,J,bi,bj)=273.0 _d 0
200 #ifdef SEAICE_MULTICATEGORY
201 DO k=1,MULTDIM
202 TICES(I,J,k,bi,bj)=273.0 _d 0
203 ENDDO
204 #endif /* SEAICE_MULTICATEGORY */
205 UICEC (I,J,bi,bj)=0. _d 0
206 VICEC (I,J,bi,bj)=0. _d 0
207 DWATN (I,J,bi,bj)=0. _d 0
208 #ifndef SEAICE_CGRID
209 DAIRN (I,J,bi,bj)=0. _d 0
210 AMASS (I,J,bi,bj)=1000.0 _d 0
211 #else
212 seaiceMassC(I,J,bi,bj)=1000.0 _d 0
213 seaiceMassU(I,J,bi,bj)=1000.0 _d 0
214 seaiceMassV(I,J,bi,bj)=1000.0 _d 0
215 #endif
216 GWATX (I,J,bi,bj)=0. _d 0
217 GWATY (I,J,bi,bj)=0. _d 0
218 ENDDO
219 ENDDO
220
221 C-- Choose a proxy level for geostrophic velocity,
222 DO j=1-OLy,sNy+OLy
223 DO i=1-OLx,sNx+OLx
224 #ifdef SEAICE_TEST_ICE_STRESS_1
225 KGEO(I,J,bi,bj) = 1
226 #else /* SEAICE_TEST_ICE_STRESS_1 */
227 IF (klowc(i,j,bi,bj) .LT. 2) THEN
228 KGEO(I,J,bi,bj) = 1
229 ELSE
230 KGEO(I,J,bi,bj) = 2
231 DO WHILE ( abs(rC(KGEO(I,J,bi,bj))) .LT. 50.0 .AND.
232 & KGEO(I,J,bi,bj) .LT. (klowc(i,j,bi,bj)-1) )
233 KGEO(I,J,bi,bj) = KGEO(I,J,bi,bj) + 1
234 ENDDO
235 ENDIF
236 #endif /* SEAICE_TEST_ICE_STRESS_1 */
237 ENDDO
238 ENDDO
239
240 ENDDO
241 ENDDO
242
243 C-- Update overlap regions
244 #ifdef SEAICE_CGRID
245 CALL EXCH_UV_XY_RL(seaiceMaskU,seaiceMaskV,.FALSE.,myThid)
246 #else
247 _EXCH_XY_R8(UVM, myThid)
248 #endif
249
250 C-- Now lets look at all these beasts
251 IF ( debugLevel .GE. debLevB ) THEN
252 myIter=0
253 CALL PLOT_FIELD_XYRL( HEFFM , 'Current HEFFM ' ,
254 & myIter, myThid )
255 #ifdef SEAICE_CGRID
256 CALL PLOT_FIELD_XYRL( seaiceMaskU, 'Current seaiceMaskU',
257 & myIter, myThid )
258 CALL PLOT_FIELD_XYRL( seaiceMaskV, 'Current seaiceMaskV',
259 & myIter, myThid )
260 #else
261 CALL PLOT_FIELD_XYRL( UVM , 'Current UVM ' ,
262 & myIter, myThid )
263 #endif
264 ENDIF
265
266 #if (defined (SEAICE_CGRID) && defined (SEAICE_ALLOW_EVP))
267 DO bj=myByLo(myThid),myByHi(myThid)
268 DO bi=myBxLo(myThid),myBxHi(myThid)
269 DO j=1-OLy,sNy+OLy
270 DO i=1-OLx,sNx+OLx
271 stressDivergenceX(I,J,bi,bj) = 0. _d 0
272 stressDivergenceY(I,J,bi,bj) = 0. _d 0
273 seaice_sigma1 (I,J,bi,bj) = 0. _d 0
274 seaice_sigma2 (I,J,bi,bj) = 0. _d 0
275 seaice_sigma12(I,J,bi,bj) = 0. _d 0
276 ENDDO
277 ENDDO
278 ENDDO
279 ENDDO
280 #endif /* SEAICE_ALLOW_EVP and SEAICE_CGRID */
281
282 C-- Set model variables to initial/restart conditions
283 IF ( nIter0 .NE. 0 ) THEN
284
285 CALL SEAICE_READ_PICKUP ( myThid )
286
287 ELSE
288
289 DO bj=myByLo(myThid),myByHi(myThid)
290 DO bi=myBxLo(myThid),myBxHi(myThid)
291 DO j=1-OLy,sNy+OLy
292 DO i=1-OLx,sNx+OLx
293 YNEG(I,J,bi,bj)=ZERO
294 TMIX(I,J,bi,bj)=TICE(I,J,bi,bj)
295 DO k=1,3
296 HEFF(I,J,k,bi,bj)=SEAICE_initialHEFF*HEFFM(i,j,bi,bj)
297 UICE(I,J,k,bi,bj)=ZERO
298 VICE(I,J,k,bi,bj)=ZERO
299 ENDDO
300 ENDDO
301 ENDDO
302 ENDDO
303 ENDDO
304
305 C-- Read initial sea-ice thickness from file if available.
306 IF ( HeffFile .NE. ' ' ) THEN
307 _BEGIN_MASTER( myThid )
308 CALL READ_FLD_XY_RL( HeffFile, ' ', ZETA, 0, myThid )
309 _END_MASTER(myThid)
310 _EXCH_XY_R8(ZETA,myThid)
311 DO bj=myByLo(myThid),myByHi(myThid)
312 DO bi=myBxLo(myThid),myBxHi(myThid)
313 DO j=1-OLy,sNy+OLy
314 DO i=1-OLx,sNx+OLx
315 DO k=1,3
316 HEFF(I,J,k,bi,bj) = MAX(ZETA(i,j,bi,bj),ZERO)
317 ENDDO
318 ENDDO
319 ENDDO
320 ENDDO
321 ENDDO
322 ENDIF
323
324 DO bj=myByLo(myThid),myByHi(myThid)
325 DO bi=myBxLo(myThid),myBxHi(myThid)
326 DO j=1-OLy,sNy+OLy
327 DO i=1-OLx,sNx+OLx
328 DO k=1,3
329 IF(HEFF(I,J,k,bi,bj).GT.ZERO)
330 & AREA(I,J,k,bi,bj)=ONE
331 ENDDO
332 ENDDO
333 ENDDO
334 ENDDO
335 ENDDO
336
337 C-- Read initial area thickness from file if available.
338 IF ( AreaFile .NE. ' ' ) THEN
339 _BEGIN_MASTER( myThid )
340 CALL READ_FLD_XY_RL( AreaFile, ' ', ZETA, 0, myThid )
341 _END_MASTER(myThid)
342 _EXCH_XY_R8(ZETA,myThid)
343 DO bj=myByLo(myThid),myByHi(myThid)
344 DO bi=myBxLo(myThid),myBxHi(myThid)
345 DO j=1-OLy,sNy+OLy
346 DO i=1-OLx,sNx+OLx
347 DO k=1,3
348 AREA(I,J,k,bi,bj) = MAX(ZETA(i,j,bi,bj),ZERO)
349 AREA(I,J,k,bi,bj) = MIN(AREA(i,j,k,bi,bj),ONE)
350 IF ( AREA(I,J,k,bi,bj) .LE. ZERO )
351 & HEFF(I,J,k,bi,bj) = ZERO
352 IF ( HEFF(I,J,k,bi,bj) .LE. ZERO )
353 & AREA(I,J,k,bi,bj) = ZERO
354 ENDDO
355 ENDDO
356 ENDDO
357 ENDDO
358 ENDDO
359 ENDIF
360
361 DO bj=myByLo(myThid),myByHi(myThid)
362 DO bi=myBxLo(myThid),myBxHi(myThid)
363 DO j=1-OLy,sNy+OLy
364 DO i=1-OLx,sNx+OLx
365 HSNOW(I,J,bi,bj)=0.2*AREA(i,j,1,bi,bj)
366 ENDDO
367 ENDDO
368 ENDDO
369 ENDDO
370
371 C-- Read initial snow thickness from file if available.
372 IF ( HsnowFile .NE. ' ' ) THEN
373 _BEGIN_MASTER( myThid )
374 CALL READ_FLD_XY_RL( HsnowFile, ' ', ZETA, 0, myThid )
375 _END_MASTER(myThid)
376 _EXCH_XY_R8(ZETA,myThid)
377 DO bj=myByLo(myThid),myByHi(myThid)
378 DO bi=myBxLo(myThid),myBxHi(myThid)
379 DO j=1-OLy,sNy+OLy
380 DO i=1-OLx,sNx+OLx
381 HSNOW(I,J,bi,bj) = MAX(ZETA(i,j,bi,bj),ZERO)
382 ENDDO
383 ENDDO
384 ENDDO
385 ENDDO
386 ENDIF
387
388 ENDIF
389
390 C--- Complete initialization
391 PSTAR = SEAICE_strength
392 DO bj=myByLo(myThid),myByHi(myThid)
393 DO bi=myBxLo(myThid),myBxHi(myThid)
394 DO j=1-OLy,sNy+OLy
395 DO i=1-OLx,sNx+OLx
396 ZETA(I,J,bi,bj)=HEFF(I,J,1,bi,bj)*(1.0 _d 11)
397 ETA(I,J,bi,bj)=ZETA(I,J,bi,bj)/4.0 _d 0
398 PRESS0(I,J,bi,bj)=PSTAR*HEFF(I,J,1,bi,bj)
399 & *EXP(-20.0 _d 0*(ONE-AREA(I,J,1,bi,bj)))
400 ZMAX(I,J,bi,bj)=(5.0 _d +12/(2.0 _d +04))*PRESS0(I,J,bi,bj)
401 ZMIN(I,J,bi,bj)=0.0 _d 0
402 PRESS0(I,J,bi,bj)=PRESS0(I,J,bi,bj)*HEFFM(I,J,bi,bj)
403 ENDDO
404 ENDDO
405 IF ( useRealFreshWaterFlux .AND. .NOT.useThSIce ) THEN
406 DO j=1-OLy,sNy+OLy
407 DO i=1-OLx,sNx+OLx
408 sIceLoad(i,j,bi,bj) = HEFF(I,J,1,bi,bj)*SEAICE_rhoIce
409 & + HSNOW(I,J,bi,bj)* 330. _d 0
410
411 ENDDO
412 ENDDO
413 ENDIF
414 ENDDO
415 ENDDO
416
417 RETURN
418 END

  ViewVC Help
Powered by ViewVC 1.1.22