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

Annotation 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 - (hide 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 torge 1.10 C $Header: /u/gcmpack/MITgcm_contrib/torge/itd/code/seaice_model.F,v 1.9 2012/10/26 15:07:52 torge Exp $
2 dimitri 1.1 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 torge 1.8 #ifdef SEAICE_DEBUG
59 dimitri 1.2 CToM<<<
60     C msgBuf :: Informational/error message buffer
61     CHARACTER*(MAX_LEN_MBUF) msgBuf
62     CHARACTER*10 HlimitMsgFormat
63 torge 1.8 #endif
64 torge 1.9 #ifdef SEAICE_ITD
65     INTEGER IT
66     #endif
67 dimitri 1.2 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 dimitri 1.1 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 dimitri 1.2 CToM<<<
214     #ifdef SEAICE_ITD
215 torge 1.8 #ifdef SEAICE_DEBUG
216 torge 1.6 C ToM: generate some test output
217 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
218 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
219     DO bi=myBxLo(myThid),myBxHi(myThid)
220 torge 1.7 WRITE(msgBuf,'(A,F8.4,x,F8.4)')
221 torge 1.6 & ' SEAICE_MODEL: AREA and HEFF before advection: ',
222 torge 1.7 & AREA(1,1,bi,bj), HEFF(1,1,bi,bj)
223 torge 1.6 c & ' SEAICE_MODEL: AREA and HEFF/AREA before advection: ',
224 torge 1.7 c & AREA(1,1,bi,bj), HEFF(1,1,bi,bj)/AREA(1,1,bi,bj)
225 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
226     & SQUEEZE_RIGHT , myThid)
227     WRITE(msgBuf,HlimitMsgFormat)
228 torge 1.6 & ' SEAICE_MODEL: HEFFITD before advection: ',
229 torge 1.7 & HEFFITD(1,1,:,bi,bj)
230 torge 1.6 c & ' SEAICE_MODEL: HEFFITD/AREAITD before advection: ',
231 torge 1.7 c & HEFFITD(1,1,:,bi,bj) / AREAITD(1,1,:,bi,bj)
232 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
233     & SQUEEZE_RIGHT , myThid)
234     WRITE(msgBuf,HlimitMsgFormat)
235 torge 1.6 & ' SEAICE_MODEL: AREAITD before advection: ',
236 torge 1.7 & AREAITD(1,1,:,bi,bj)
237 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
238     & SQUEEZE_RIGHT , myThid)
239     ENDDO
240     ENDDO
241     #endif
242 torge 1.8 #endif
243 dimitri 1.2 C>>>ToM
244 dimitri 1.1 #ifdef ALLOW_DEBUG
245     IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ADVDIFF', myThid )
246     #endif
247     CALL SEAICE_ADVDIFF( myTime, myIter, myThid )
248 dimitri 1.2 CToM<<<
249     #ifdef SEAICE_ITD
250 torge 1.8 #ifdef SEAICE_DEBUG
251 torge 1.6 C ToM: generate some test output
252 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
253 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
254     DO bi=myBxLo(myThid),myBxHi(myThid)
255     WRITE(msgBuf,HlimitMsgFormat)
256 torge 1.6 & ' SEAICE_MODEL: HEFFITD after advection: ',
257 torge 1.7 & HEFFITD(1,1,:,bi,bj)
258 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
259     & SQUEEZE_RIGHT , myThid)
260     WRITE(msgBuf,HlimitMsgFormat)
261 torge 1.6 & ' SEAICE_MODEL: AREAITD after advection: ',
262 torge 1.7 & AREAITD(1,1,:,bi,bj)
263 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
264     & SQUEEZE_RIGHT , myThid)
265 torge 1.6 WRITE(msgBuf,'(A)')
266     & ' --------------------------------------------- '
267     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
268     & SQUEEZE_RIGHT , myThid)
269 dimitri 1.2 ENDDO
270     ENDDO
271 torge 1.8 #endif
272 dimitri 1.2 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 torge 1.5 DO bj=myByLo(myThid),myByHi(myThid)
279     DO bi=myBxLo(myThid),myBxHi(myThid)
280 torge 1.6 CALL SEAICE_ITD_REDIST(bi, bj, myTime, myIter, myThid)
281 torge 1.5 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 torge 1.6 CALL SEAICE_ITD_SUM(bi, bj, myTime, myIter, myThid)
291 torge 1.5 ENDDO
292     ENDDO
293 dimitri 1.2 #endif
294     C>>>ToM
295 dimitri 1.1 #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 torge 1.6 #ifdef SEAICE_ITD
314 torge 1.8 #ifdef SEAICE_DEBUG
315 torge 1.6 C ToM: generate some test output
316 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
317 torge 1.6 DO bj=myByLo(myThid),myByHi(myThid)
318     DO bi=myBxLo(myThid),myBxHi(myThid)
319     WRITE(msgBuf,HlimitMsgFormat)
320     & ' SEAICE_MODEL: HEFFITD before growth: ',
321 torge 1.7 & HEFFITD(1,1,:,bi,bj)
322 torge 1.6 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
323     & SQUEEZE_RIGHT , myThid)
324     WRITE(msgBuf,HlimitMsgFormat)
325     & ' SEAICE_MODEL: AREAITD before growth: ',
326 torge 1.7 & AREAITD(1,1,:,bi,bj)
327 torge 1.6 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
328     & SQUEEZE_RIGHT , myThid)
329     WRITE(msgBuf,HlimitMsgFormat)
330     & ' SEAICE_MODEL: HSNOWITD before growth: ',
331 torge 1.7 & HSNOWITD(1,1,:,bi,bj)
332 torge 1.6 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
333     & SQUEEZE_RIGHT , myThid)
334     ENDDO
335     ENDDO
336     #endif
337 torge 1.8 #endif
338 torge 1.6
339 dimitri 1.1 #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 dimitri 1.2 CToM<<<
349     #ifdef SEAICE_ITD
350 torge 1.8 #ifdef SEAICE_DEBUG
351 torge 1.6 C ToM: generate some test output
352 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
353 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
354     DO bi=myBxLo(myThid),myBxHi(myThid)
355     WRITE(msgBuf,HlimitMsgFormat)
356 torge 1.6 & ' SEAICE_MODEL: HEFFITD after growth: ',
357 torge 1.7 & HEFFITD(1,1,:,bi,bj)
358 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
359     & SQUEEZE_RIGHT , myThid)
360     WRITE(msgBuf,HlimitMsgFormat)
361 torge 1.6 & ' SEAICE_MODEL: AREAITD after growth: ',
362 torge 1.7 & AREAITD(1,1,:,bi,bj)
363 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
364     & SQUEEZE_RIGHT , myThid)
365     WRITE(msgBuf,HlimitMsgFormat)
366 torge 1.6 & ' SEAICE_MODEL: HSNOWITD after growth: ',
367 torge 1.7 & HSNOWITD(1,1,:,bi,bj)
368 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
369     & SQUEEZE_RIGHT , myThid)
370 torge 1.6 WRITE(msgBuf,'(A)')
371     & ' --------------------------------------------- '
372     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
373     & SQUEEZE_RIGHT , myThid)
374 dimitri 1.2 ENDDO
375     ENDDO
376 torge 1.8 #endif
377 dimitri 1.2 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 torge 1.5 DO bj=myByLo(myThid),myByHi(myThid)
385     DO bi=myBxLo(myThid),myBxHi(myThid)
386 torge 1.6 CALL SEAICE_ITD_REDIST(bi, bj, myTime, myIter, myThid)
387 torge 1.5 ENDDO
388     ENDDO
389 dimitri 1.2 C store the mean ice thickness in HEFF (for dynamic solver and diagnostics)
390 torge 1.5 DO bj=myByLo(myThid),myByHi(myThid)
391     DO bi=myBxLo(myThid),myBxHi(myThid)
392 torge 1.6 CALL SEAICE_ITD_SUM(bi, bj, myTime, myIter, myThid)
393 torge 1.5 ENDDO
394     ENDDO
395 dimitri 1.2
396 torge 1.8 #ifdef SEAICE_DEBUG
397 torge 1.6 C ToM: generate some test output
398 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
399 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
400     DO bi=myBxLo(myThid),myBxHi(myThid)
401     WRITE(msgBuf,HlimitMsgFormat)
402 torge 1.6 & ' SEAICE_MODEL: HEFFITD after final sorting: ',
403 torge 1.7 & HEFFITD(1,1,:,bi,bj)
404 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
405     & SQUEEZE_RIGHT , myThid)
406     WRITE(msgBuf,HlimitMsgFormat)
407 torge 1.6 & ' SEAICE_MODEL: AREAITD after final sorting: ',
408 torge 1.7 & AREAITD(1,1,:,bi,bj)
409 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
410     & SQUEEZE_RIGHT , myThid)
411     WRITE(msgBuf,HlimitMsgFormat)
412 torge 1.6 & ' SEAICE_MODEL: HSNOWITD after final sorting: ',
413 torge 1.7 & HSNOWITD(1,1,:,bi,bj)
414 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
415     & SQUEEZE_RIGHT , myThid)
416 torge 1.6 WRITE(msgBuf,'(A)')
417     & ' ============================================= '
418     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
419     & SQUEEZE_RIGHT , myThid)
420 dimitri 1.2 ENDDO
421     ENDDO
422     #endif
423 torge 1.8 #endif
424 dimitri 1.2 C
425     C>>>ToM
426 dimitri 1.1 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 torge 1.4 #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 dimitri 1.1 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