/[MITgcm]/MITgcm_contrib/torge/itd/code/seaice_model.F
ViewVC logotype

Contents of /MITgcm_contrib/torge/itd/code/seaice_model.F

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


Revision 1.10 - (show annotations) (download)
Tue Oct 30 21:32:54 2012 UTC (12 years, 9 months ago) by torge
Branch: MAIN
Changes since 1.9: +1 -19 lines
remove artificial "divergence" rate introduced for quick n dirty 1-D test

1 C $Header: /u/gcmpack/MITgcm_contrib/torge/itd/code/seaice_model.F,v 1.9 2012/10/26 15:07:52 torge Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: SEAICE_MODEL
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE SEAICE_MODEL( myTime, myIter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *===========================================================*
14 C | SUBROUTINE SEAICE_MODEL |
15 C | o Time stepping of a dynamic/thermodynamic sea ice model. |
16 C | Dynamics solver: Zhang/Hibler, JGR, 102, 8691-8702, 1997 |
17 C | Thermodynamics: Hibler, MWR, 108, 1943-1973, 1980 |
18 C | Rheology: Hibler, JPO, 9, 815- 846, 1979 |
19 C | Snow: Zhang et al. , JPO, 28, 191- 217, 1998 |
20 C | Parallel forward ice model written by Jinlun Zhang PSC/UW|
21 C | & coupled into MITgcm by Dimitris Menemenlis (JPL) 2/2001|
22 C | zhang@apl.washington.edu / menemenlis@jpl.nasa.gov |
23 C *===========================================================*
24 C *===========================================================*
25 IMPLICIT NONE
26 C \ev
27
28 C !USES: ===============================================================
29 #include "SIZE.h"
30 #include "EEPARAMS.h"
31 #include "DYNVARS.h"
32 #include "PARAMS.h"
33 #include "GRID.h"
34 #include "FFIELDS.h"
35 #include "SEAICE_SIZE.h"
36 #include "SEAICE_PARAMS.h"
37 #include "SEAICE.h"
38 #include "SEAICE_TRACER.h"
39 #ifdef ALLOW_EXF
40 # include "EXF_OPTIONS.h"
41 # include "EXF_FIELDS.h"
42 #endif
43 #ifdef ALLOW_AUTODIFF_TAMC
44 # include "tamc.h"
45 #endif
46
47 C !INPUT PARAMETERS: ===================================================
48 C myTime - Simulation time
49 C myIter - Simulation timestep number
50 C myThid - Thread no. that called this routine.
51 _RL myTime
52 INTEGER myIter
53 INTEGER myThid
54 CEndOfInterface
55
56 C !LOCAL VARIABLES: ====================================================
57 C i,j,bi,bj :: Loop counters
58 #ifdef SEAICE_DEBUG
59 CToM<<<
60 C msgBuf :: Informational/error message buffer
61 CHARACTER*(MAX_LEN_MBUF) msgBuf
62 CHARACTER*10 HlimitMsgFormat
63 #endif
64 #ifdef SEAICE_ITD
65 INTEGER IT
66 #endif
67 C#if defined(SEAICE_GROWTH_LEGACY) || defined(ALLOW_AUTODIFF_TAMC)
68 #if defined(SEAICE_GROWTH_LEGACY) || defined(ALLOW_AUTODIFF_TAMC) || defined(SEAICE_ITD)
69 C>>>ToM
70 INTEGER i, j, bi, bj
71 #endif
72 #ifdef ALLOW_SITRACER
73 INTEGER iTr
74 #endif
75 CEOP
76
77 #ifdef ALLOW_DEBUG
78 IF (debugMode) CALL DEBUG_ENTER( 'SEAICE_MODEL', myThid )
79 #endif
80
81 C-- Winds are from pkg/exf, which does not update edges.
82 CALL EXCH_UV_AGRID_3D_RL( uwind, vwind, .TRUE., 1, myThid )
83
84 #ifdef ALLOW_THSICE
85 IF ( useThSice ) THEN
86 C-- Map thSice-variables to HEFF and AREA
87 CALL SEAICE_MAP_THSICE( myTime, myIter, myThid )
88 ENDIF
89 #endif /* ALLOW_THSICE */
90
91 #ifdef SEAICE_GROWTH_LEGACY
92 IF ( .NOT.useThSice ) THEN
93 #ifdef ALLOW_AUTODIFF_TAMC
94 CADJ STORE heff = comlev1, key=ikey_dynamics, kind=isbyte
95 CADJ STORE heffm = comlev1, key=ikey_dynamics, kind=isbyte
96 CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
97 CADJ STORE hsnow = comlev1, key=ikey_dynamics, kind=isbyte
98 CADJ STORE tice = comlev1, key=ikey_dynamics, kind=isbyte
99 #ifdef SEAICE_VARIABLE_SALINITY
100 CADJ STORE hsalt = comlev1, key=ikey_dynamics, kind=isbyte
101 #endif
102 #endif
103 DO bj=myByLo(myThid),myByHi(myThid)
104 DO bi=myBxLo(myThid),myBxHi(myThid)
105 DO j=1-OLy,sNy+OLy
106 DO i=1-OLx,sNx+OLx
107 IF ( (heff(i,j,bi,bj).EQ.0.)
108 & .OR.(area(i,j,bi,bj).EQ.0.)
109 & ) THEN
110 HEFF(i,j,bi,bj) = 0. _d 0
111 AREA(i,j,bi,bj) = 0. _d 0
112 HSNOW(i,j,bi,bj) = 0. _d 0
113 TICE(i,j,bi,bj) = celsius2K
114 #ifdef SEAICE_VARIABLE_SALINITY
115 HSALT(i,j,bi,bj) = 0. _d 0
116 #endif
117 ENDIF
118 ENDDO
119 ENDDO
120 ENDDO
121 ENDDO
122 ENDIF
123 #endif
124
125 #ifdef ALLOW_AUTODIFF_TAMC
126 DO bj=myByLo(myThid),myByHi(myThid)
127 DO bi=myBxLo(myThid),myBxHi(myThid)
128 DO j=1-OLy,sNy+OLy
129 DO i=1-OLx,sNx+OLx
130 # ifdef SEAICE_GROWTH_LEGACY
131 areaNm1(i,j,bi,bj) = 0. _d 0
132 hEffNm1(i,j,bi,bj) = 0. _d 0
133 # endif
134 uIceNm1(i,j,bi,bj) = 0. _d 0
135 vIceNm1(i,j,bi,bj) = 0. _d 0
136 # ifdef ALLOW_SITRACER
137 DO iTr = 1, SItrMaxNum
138 SItrBucket(i,j,bi,bj,iTr) = 0. _d 0
139 ENDDO
140 # endif
141 ENDDO
142 ENDDO
143 ENDDO
144 ENDDO
145 CADJ STORE uwind = comlev1, key=ikey_dynamics, kind=isbyte
146 CADJ STORE vwind = comlev1, key=ikey_dynamics, kind=isbyte
147 CADJ STORE heff = comlev1, key=ikey_dynamics, kind=isbyte
148 CADJ STORE heffm = comlev1, key=ikey_dynamics, kind=isbyte
149 CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
150 # ifdef SEAICE_ALLOW_DYNAMICS
151 # ifdef SEAICE_CGRID
152 CADJ STORE seaicemasku = comlev1, key=ikey_dynamics, kind=isbyte
153 CADJ STORE seaicemaskv = comlev1, key=ikey_dynamics, kind=isbyte
154 CADJ STORE fu = comlev1, key=ikey_dynamics, kind=isbyte
155 CADJ STORE fv = comlev1, key=ikey_dynamics, kind=isbyte
156 CADJ STORE uice = comlev1, key=ikey_dynamics, kind=isbyte
157 CADJ STORE vice = comlev1, key=ikey_dynamics, kind=isbyte
158 cphCADJ STORE eta = comlev1, key=ikey_dynamics, kind=isbyte
159 cphCADJ STORE zeta = comlev1, key=ikey_dynamics, kind=isbyte
160 cph(
161 CADJ STORE dwatn = comlev1, key=ikey_dynamics, kind=isbyte
162 cccCADJ STORE press0 = comlev1, key=ikey_dynamics, kind=isbyte
163 cccCADJ STORE taux = comlev1, key=ikey_dynamics, kind=isbyte
164 cccCADJ STORE tauy = comlev1, key=ikey_dynamics, kind=isbyte
165 cccCADJ STORE zmax = comlev1, key=ikey_dynamics, kind=isbyte
166 cccCADJ STORE zmin = comlev1, key=ikey_dynamics, kind=isbyte
167 cph)
168 # ifdef SEAICE_ALLOW_EVP
169 CADJ STORE seaice_sigma1 = comlev1, key=ikey_dynamics, kind=isbyte
170 CADJ STORE seaice_sigma2 = comlev1, key=ikey_dynamics, kind=isbyte
171 CADJ STORE seaice_sigma12 = comlev1, key=ikey_dynamics, kind=isbyte
172 # endif
173 # endif
174 # endif
175 # ifdef ALLOW_SITRACER
176 CADJ STORE siceload = comlev1, key=ikey_dynamics, kind=isbyte
177 CADJ STORE sitracer = comlev1, key=ikey_dynamics, kind=isbyte
178 # endif
179 #endif /* ALLOW_AUTODIFF_TAMC */
180
181 C solve ice momentum equations and calculate ocean surface stress
182 #ifdef ALLOW_DEBUG
183 IF (debugMode) CALL DEBUG_CALL( 'SEAICE_DYNSOLVER', myThid )
184 #endif
185 #ifdef SEAICE_CGRID
186 CALL TIMER_START('SEAICE_DYNSOLVER [SEAICE_MODEL]',myThid)
187 CALL SEAICE_DYNSOLVER ( myTime, myIter, myThid )
188 CALL TIMER_STOP ('SEAICE_DYNSOLVER [SEAICE_MODEL]',myThid)
189 #else
190 CALL TIMER_START('DYNSOLVER [SEAICE_MODEL]',myThid)
191 CALL DYNSOLVER ( myTime, myIter, myThid )
192 CALL TIMER_STOP ('DYNSOLVER [SEAICE_MODEL]',myThid)
193 #endif /* SEAICE_CGRID */
194
195 C-- Apply ice velocity open boundary conditions
196 #ifdef ALLOW_OBCS
197 # ifndef DISABLE_SEAICE_OBCS
198 IF ( useOBCS ) CALL OBCS_ADJUST_UVICE( uice, vice, myThid )
199 # endif /* DISABLE_SEAICE_OBCS */
200 #endif /* ALLOW_OBCS */
201
202 #ifdef ALLOW_THSICE
203 IF ( .NOT.useThSice ) THEN
204 #endif
205 C-- Only call advection of heff, area, snow, and salt and
206 C-- growth for the generic 0-layer thermodynamics of seaice
207 C-- if useThSice=.false., otherwise the 3-layer Winton thermodynamics
208 C-- (called from DO_OCEANIC_PHYSICS) take care of this
209
210 C NOW DO ADVECTION and DIFFUSION
211 IF ( SEAICEadvHeff .OR. SEAICEadvArea .OR. SEAICEadvSnow
212 & .OR. SEAICEadvSalt ) THEN
213 CToM<<<
214 #ifdef SEAICE_ITD
215 #ifdef SEAICE_DEBUG
216 C ToM: generate some test output
217 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
218 DO bj=myByLo(myThid),myByHi(myThid)
219 DO bi=myBxLo(myThid),myBxHi(myThid)
220 WRITE(msgBuf,'(A,F8.4,x,F8.4)')
221 & ' SEAICE_MODEL: AREA and HEFF before advection: ',
222 & AREA(1,1,bi,bj), HEFF(1,1,bi,bj)
223 c & ' SEAICE_MODEL: AREA and HEFF/AREA before advection: ',
224 c & AREA(1,1,bi,bj), HEFF(1,1,bi,bj)/AREA(1,1,bi,bj)
225 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
226 & SQUEEZE_RIGHT , myThid)
227 WRITE(msgBuf,HlimitMsgFormat)
228 & ' SEAICE_MODEL: HEFFITD before advection: ',
229 & HEFFITD(1,1,:,bi,bj)
230 c & ' SEAICE_MODEL: HEFFITD/AREAITD before advection: ',
231 c & HEFFITD(1,1,:,bi,bj) / AREAITD(1,1,:,bi,bj)
232 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
233 & SQUEEZE_RIGHT , myThid)
234 WRITE(msgBuf,HlimitMsgFormat)
235 & ' SEAICE_MODEL: AREAITD before advection: ',
236 & AREAITD(1,1,:,bi,bj)
237 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
238 & SQUEEZE_RIGHT , myThid)
239 ENDDO
240 ENDDO
241 #endif
242 #endif
243 C>>>ToM
244 #ifdef ALLOW_DEBUG
245 IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ADVDIFF', myThid )
246 #endif
247 CALL SEAICE_ADVDIFF( myTime, myIter, myThid )
248 CToM<<<
249 #ifdef SEAICE_ITD
250 #ifdef SEAICE_DEBUG
251 C ToM: generate some test output
252 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
253 DO bj=myByLo(myThid),myByHi(myThid)
254 DO bi=myBxLo(myThid),myBxHi(myThid)
255 WRITE(msgBuf,HlimitMsgFormat)
256 & ' SEAICE_MODEL: HEFFITD after advection: ',
257 & HEFFITD(1,1,:,bi,bj)
258 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
259 & SQUEEZE_RIGHT , myThid)
260 WRITE(msgBuf,HlimitMsgFormat)
261 & ' SEAICE_MODEL: AREAITD after advection: ',
262 & AREAITD(1,1,:,bi,bj)
263 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
264 & SQUEEZE_RIGHT , myThid)
265 WRITE(msgBuf,'(A)')
266 & ' --------------------------------------------- '
267 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
268 & SQUEEZE_RIGHT , myThid)
269 ENDDO
270 ENDDO
271 #endif
272 C
273 C check that all ice thickness categories meet their limits
274 C (includes Hibler-type ridging)
275 #ifdef ALLOW_DEBUG
276 IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ITD_REDIST', myThid )
277 #endif
278 DO bj=myByLo(myThid),myByHi(myThid)
279 DO bi=myBxLo(myThid),myBxHi(myThid)
280 CALL SEAICE_ITD_REDIST(bi, bj, myTime, myIter, myThid)
281 ENDDO
282 ENDDO
283 C update mean ice thickness HEFF and total ice concentration AREA
284 C to match single category values
285 #ifdef ALLOW_DEBUG
286 IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ITD_SUM', myThid )
287 #endif
288 DO bj=myByLo(myThid),myByHi(myThid)
289 DO bi=myBxLo(myThid),myBxHi(myThid)
290 CALL SEAICE_ITD_SUM(bi, bj, myTime, myIter, myThid)
291 ENDDO
292 ENDDO
293 #endif
294 C>>>ToM
295 #ifdef SEAICE_GROWTH_LEGACY
296 ELSE
297 DO bj=myByLo(myThid),myByHi(myThid)
298 DO bi=myBxLo(myThid),myBxHi(myThid)
299 DO j=1-OLy,sNy+OLy
300 DO i=1-OLx,sNx+OLx
301 areaNm1(i,j,bi,bj) = AREA(i,j,bi,bj)
302 hEffNm1(i,j,bi,bj) = HEFF(i,j,bi,bj)
303 ENDDO
304 ENDDO
305 ENDDO
306 ENDDO
307 #endif /* SEAICE_GROWTH_LEGACY */
308 ENDIF
309 #ifdef ALLOW_AUTODIFF_TAMC
310 CADJ STORE heffm = comlev1, key=ikey_dynamics, kind=isbyte
311 #endif /* ALLOW_AUTODIFF_TAMC */
312
313 #ifdef SEAICE_ITD
314 #ifdef SEAICE_DEBUG
315 C ToM: generate some test output
316 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
317 DO bj=myByLo(myThid),myByHi(myThid)
318 DO bi=myBxLo(myThid),myBxHi(myThid)
319 WRITE(msgBuf,HlimitMsgFormat)
320 & ' SEAICE_MODEL: HEFFITD before growth: ',
321 & HEFFITD(1,1,:,bi,bj)
322 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
323 & SQUEEZE_RIGHT , myThid)
324 WRITE(msgBuf,HlimitMsgFormat)
325 & ' SEAICE_MODEL: AREAITD before growth: ',
326 & AREAITD(1,1,:,bi,bj)
327 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
328 & SQUEEZE_RIGHT , myThid)
329 WRITE(msgBuf,HlimitMsgFormat)
330 & ' SEAICE_MODEL: HSNOWITD before growth: ',
331 & HSNOWITD(1,1,:,bi,bj)
332 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
333 & SQUEEZE_RIGHT , myThid)
334 ENDDO
335 ENDDO
336 #endif
337 #endif
338
339 #ifndef DISABLE_SEAICE_GROWTH
340 C thermodynamics growth
341 C must call growth after calling advection
342 C because of ugly time level business
343 IF ( usePW79thermodynamics ) THEN
344 #ifdef ALLOW_DEBUG
345 IF (debugMode) CALL DEBUG_CALL( 'SEAICE_GROWTH', myThid )
346 #endif
347 CALL SEAICE_GROWTH( myTime, myIter, myThid )
348 CToM<<<
349 #ifdef SEAICE_ITD
350 #ifdef SEAICE_DEBUG
351 C ToM: generate some test output
352 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
353 DO bj=myByLo(myThid),myByHi(myThid)
354 DO bi=myBxLo(myThid),myBxHi(myThid)
355 WRITE(msgBuf,HlimitMsgFormat)
356 & ' SEAICE_MODEL: HEFFITD after growth: ',
357 & HEFFITD(1,1,:,bi,bj)
358 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
359 & SQUEEZE_RIGHT , myThid)
360 WRITE(msgBuf,HlimitMsgFormat)
361 & ' SEAICE_MODEL: AREAITD after growth: ',
362 & AREAITD(1,1,:,bi,bj)
363 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
364 & SQUEEZE_RIGHT , myThid)
365 WRITE(msgBuf,HlimitMsgFormat)
366 & ' SEAICE_MODEL: HSNOWITD after growth: ',
367 & HSNOWITD(1,1,:,bi,bj)
368 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
369 & SQUEEZE_RIGHT , myThid)
370 WRITE(msgBuf,'(A)')
371 & ' --------------------------------------------- '
372 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
373 & SQUEEZE_RIGHT , myThid)
374 ENDDO
375 ENDDO
376 #endif
377 C
378 C redistribute sea ice into proper sea ice category after growth/melt
379 C in case model runs with ice thickness distribution
380 C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|
381 #ifdef ALLOW_DEBUG
382 IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ITD_REDIST', myThid )
383 #endif
384 DO bj=myByLo(myThid),myByHi(myThid)
385 DO bi=myBxLo(myThid),myBxHi(myThid)
386 CALL SEAICE_ITD_REDIST(bi, bj, myTime, myIter, myThid)
387 ENDDO
388 ENDDO
389 C store the mean ice thickness in HEFF (for dynamic solver and diagnostics)
390 DO bj=myByLo(myThid),myByHi(myThid)
391 DO bi=myBxLo(myThid),myBxHi(myThid)
392 CALL SEAICE_ITD_SUM(bi, bj, myTime, myIter, myThid)
393 ENDDO
394 ENDDO
395
396 #ifdef SEAICE_DEBUG
397 C ToM: generate some test output
398 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
399 DO bj=myByLo(myThid),myByHi(myThid)
400 DO bi=myBxLo(myThid),myBxHi(myThid)
401 WRITE(msgBuf,HlimitMsgFormat)
402 & ' SEAICE_MODEL: HEFFITD after final sorting: ',
403 & HEFFITD(1,1,:,bi,bj)
404 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
405 & SQUEEZE_RIGHT , myThid)
406 WRITE(msgBuf,HlimitMsgFormat)
407 & ' SEAICE_MODEL: AREAITD after final sorting: ',
408 & AREAITD(1,1,:,bi,bj)
409 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
410 & SQUEEZE_RIGHT , myThid)
411 WRITE(msgBuf,HlimitMsgFormat)
412 & ' SEAICE_MODEL: HSNOWITD after final sorting: ',
413 & HSNOWITD(1,1,:,bi,bj)
414 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
415 & SQUEEZE_RIGHT , myThid)
416 WRITE(msgBuf,'(A)')
417 & ' ============================================= '
418 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
419 & SQUEEZE_RIGHT , myThid)
420 ENDDO
421 ENDDO
422 #endif
423 #endif
424 C
425 C>>>ToM
426 ENDIF
427 #endif /* DISABLE_SEAICE_GROWTH */
428
429 #ifdef ALLOW_SITRACER
430 # ifdef ALLOW_AUTODIFF_TAMC
431 CADJ STORE sitracer = comlev1, key=ikey_dynamics, kind=isbyte
432 # endif
433 CALL SEAICE_TRACER_PHYS ( myTime, myIter, myThid )
434 #endif
435
436 C-- Apply ice tracer open boundary conditions
437 #ifdef ALLOW_OBCS
438 # ifndef DISABLE_SEAICE_OBCS
439 IF ( useOBCS ) CALL OBCS_APPLY_SEAICE( myThid )
440 # endif /* DISABLE_SEAICE_OBCS */
441 #endif /* ALLOW_OBCS */
442
443 C-- Update overlap regions for a bunch of stuff
444 _EXCH_XY_RL( HEFF, myThid )
445 _EXCH_XY_RL( AREA, myThid )
446 _EXCH_XY_RL( HSNOW, myThid )
447 #ifdef SEAICE_VARIABLE_SALINITY
448 _EXCH_XY_RL( HSALT, myThid )
449 #endif
450 #ifdef ALLOW_SITRACER
451 DO iTr = 1, SItrNumInUse
452 _EXCH_XY_RL( SItracer(1-OLx,1-OLy,1,1,iTr),myThid )
453 ENDDO
454 #endif
455 _EXCH_XY_RS(EmPmR, myThid )
456 _EXCH_XY_RS(saltFlux, myThid )
457 _EXCH_XY_RS(Qnet , myThid )
458 #ifdef SHORTWAVE_HEATING
459 _EXCH_XY_RS(Qsw , myThid )
460 #endif /* SHORTWAVE_HEATING */
461 #ifdef ATMOSPHERIC_LOADING
462 IF ( useRealFreshWaterFlux )
463 & _EXCH_XY_RS( sIceLoad, myThid )
464 #endif
465
466 #ifdef ALLOW_OBCS
467 C-- In case we use scheme with a large stencil that extends into overlap:
468 C no longer needed with the right masking in advection & diffusion S/R.
469 c IF ( useOBCS ) THEN
470 c DO bj=myByLo(myThid),myByHi(myThid)
471 c DO bi=myBxLo(myThid),myBxHi(myThid)
472 c CALL OBCS_COPY_TRACER( HEFF(1-OLx,1-OLy,bi,bj),
473 c I 1, bi, bj, myThid )
474 c CALL OBCS_COPY_TRACER( AREA(1-OLx,1-OLy,bi,bj),
475 c I 1, bi, bj, myThid )
476 c CALL OBCS_COPY_TRACER( HSNOW(1-OLx,1-OLy,bi,bj),
477 c I 1, bi, bj, myThid )
478 #ifdef SEAICE_VARIABLE_SALINITY
479 c CALL OBCS_COPY_TRACER( HSALT(1-OLx,1-OLy,bi,bj),
480 c I 1, bi, bj, myThid )
481 #endif
482 c ENDDO
483 c ENDDO
484 c ENDIF
485 #endif /* ALLOW_OBCS */
486
487 #ifdef ALLOW_DIAGNOSTICS
488 IF ( useDiagnostics ) THEN
489 C diagnostics for "non-state variables" that are modified by
490 C the seaice model
491 # ifdef ALLOW_EXF
492 CALL DIAGNOSTICS_FILL(UWIND ,'SIuwind ',0,1 ,0,1,1,myThid)
493 CALL DIAGNOSTICS_FILL(VWIND ,'SIvwind ',0,1 ,0,1,1,myThid)
494 # endif
495 CALL DIAGNOSTICS_FILL_RS(FU ,'SIfu ',0,1 ,0,1,1,myThid)
496 CALL DIAGNOSTICS_FILL_RS(FV ,'SIfv ',0,1 ,0,1,1,myThid)
497 CALL DIAGNOSTICS_FILL_RS(EmPmR,'SIempmr ',0,1 ,0,1,1,myThid)
498 CALL DIAGNOSTICS_FILL_RS(Qnet ,'SIqnet ',0,1 ,0,1,1,myThid)
499 CALL DIAGNOSTICS_FILL_RS(Qsw ,'SIqsw ',0,1 ,0,1,1,myThid)
500 #ifdef SEAICE_ITD
501 CALL DIAGNOSTICS_FILL(HEFFITD ,'SIheffN ',0,nITD,0,1,1,myThid)
502 CALL DIAGNOSTICS_FILL(AREAITD ,'SIareaN ',0,nITD,0,1,1,myThid)
503 #endif
504 ENDIF
505 #endif /* ALLOW_DIAGNOSTICS */
506
507 #ifdef ALLOW_THSICE
508 C endif .not.useThSice
509 ENDIF
510 #endif /* ALLOW_THSICE */
511 CML This has already been done in seaice_ocean_stress/ostres, so why repeat?
512 CML CALL EXCH_UV_XY_RS(fu,fv,.TRUE.,myThid)
513
514 #ifdef ALLOW_EXF
515 # ifdef ALLOW_AUTODIFF_TAMC
516 # if (defined (ALLOW_AUTODIFF_MONITOR))
517 CALL EXF_ADJOINT_SNAPSHOTS( 3, myTime, myIter, myThid )
518 # endif
519 # endif
520 #endif
521
522 #ifdef ALLOW_DEBUG
523 IF (debugMode) CALL DEBUG_LEAVE( 'SEAICE_MODEL', myThid )
524 #endif
525
526 RETURN
527 END

  ViewVC Help
Powered by ViewVC 1.1.22