/[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.7 - (hide annotations) (download)
Mon Oct 22 16:02:25 2012 UTC (12 years, 9 months ago) by torge
Branch: MAIN
Changes since 1.6: +42 -22 lines
seaice_model and seaice_growth adjusted to deliver runtime output for 1D_ocean_ice_column;
this version of seaice_growth finally works,
though it is particularly designed for the case nITD=1 and #undef SEAICE_MULTICATEGORY,
then running the 1D verification experiment over 365 deays with
1) #undef SEAICE_ITD and
2) #define SEAICE_ITD
results in no difference for AREA and HEFF

1 dimitri 1.1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_model.F,v 1.100 2012/03/02 18:56:06 heimbach 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 dimitri 1.2 CToM<<<
59     C msgBuf :: Informational/error message buffer
60     CHARACTER*(MAX_LEN_MBUF) msgBuf
61     CHARACTER*10 HlimitMsgFormat
62 torge 1.7 C ToM a random number to generate divergence and convergence randomly for the 1-D case
63     _RL rand_num
64     _RL divergence
65     INTEGER IT
66 dimitri 1.2 C#if defined(SEAICE_GROWTH_LEGACY) || defined(ALLOW_AUTODIFF_TAMC)
67     #if defined(SEAICE_GROWTH_LEGACY) || defined(ALLOW_AUTODIFF_TAMC) || defined(SEAICE_ITD)
68     C>>>ToM
69 dimitri 1.1 INTEGER i, j, bi, bj
70     #endif
71     #ifdef ALLOW_SITRACER
72     INTEGER iTr
73     #endif
74     CEOP
75    
76     #ifdef ALLOW_DEBUG
77     IF (debugMode) CALL DEBUG_ENTER( 'SEAICE_MODEL', myThid )
78     #endif
79    
80     C-- Winds are from pkg/exf, which does not update edges.
81     CALL EXCH_UV_AGRID_3D_RL( uwind, vwind, .TRUE., 1, myThid )
82    
83     #ifdef ALLOW_THSICE
84     IF ( useThSice ) THEN
85     C-- Map thSice-variables to HEFF and AREA
86     CALL SEAICE_MAP_THSICE( myTime, myIter, myThid )
87     ENDIF
88     #endif /* ALLOW_THSICE */
89    
90     #ifdef SEAICE_GROWTH_LEGACY
91     IF ( .NOT.useThSice ) THEN
92     #ifdef ALLOW_AUTODIFF_TAMC
93     CADJ STORE heff = comlev1, key=ikey_dynamics, kind=isbyte
94     CADJ STORE heffm = comlev1, key=ikey_dynamics, kind=isbyte
95     CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
96     CADJ STORE hsnow = comlev1, key=ikey_dynamics, kind=isbyte
97     CADJ STORE tice = comlev1, key=ikey_dynamics, kind=isbyte
98     #ifdef SEAICE_VARIABLE_SALINITY
99     CADJ STORE hsalt = comlev1, key=ikey_dynamics, kind=isbyte
100     #endif
101     #endif
102     DO bj=myByLo(myThid),myByHi(myThid)
103     DO bi=myBxLo(myThid),myBxHi(myThid)
104     DO j=1-OLy,sNy+OLy
105     DO i=1-OLx,sNx+OLx
106     IF ( (heff(i,j,bi,bj).EQ.0.)
107     & .OR.(area(i,j,bi,bj).EQ.0.)
108     & ) THEN
109     HEFF(i,j,bi,bj) = 0. _d 0
110     AREA(i,j,bi,bj) = 0. _d 0
111     HSNOW(i,j,bi,bj) = 0. _d 0
112     TICE(i,j,bi,bj) = celsius2K
113     #ifdef SEAICE_VARIABLE_SALINITY
114     HSALT(i,j,bi,bj) = 0. _d 0
115     #endif
116     ENDIF
117     ENDDO
118     ENDDO
119     ENDDO
120     ENDDO
121     ENDIF
122     #endif
123    
124     #ifdef ALLOW_AUTODIFF_TAMC
125     DO bj=myByLo(myThid),myByHi(myThid)
126     DO bi=myBxLo(myThid),myBxHi(myThid)
127     DO j=1-OLy,sNy+OLy
128     DO i=1-OLx,sNx+OLx
129     # ifdef SEAICE_GROWTH_LEGACY
130     areaNm1(i,j,bi,bj) = 0. _d 0
131     hEffNm1(i,j,bi,bj) = 0. _d 0
132     # endif
133     uIceNm1(i,j,bi,bj) = 0. _d 0
134     vIceNm1(i,j,bi,bj) = 0. _d 0
135     # ifdef ALLOW_SITRACER
136     DO iTr = 1, SItrMaxNum
137     SItrBucket(i,j,bi,bj,iTr) = 0. _d 0
138     ENDDO
139     # endif
140     ENDDO
141     ENDDO
142     ENDDO
143     ENDDO
144     CADJ STORE uwind = comlev1, key=ikey_dynamics, kind=isbyte
145     CADJ STORE vwind = comlev1, key=ikey_dynamics, kind=isbyte
146     CADJ STORE heff = comlev1, key=ikey_dynamics, kind=isbyte
147     CADJ STORE heffm = comlev1, key=ikey_dynamics, kind=isbyte
148     CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
149     # ifdef SEAICE_ALLOW_DYNAMICS
150     # ifdef SEAICE_CGRID
151     CADJ STORE seaicemasku = comlev1, key=ikey_dynamics, kind=isbyte
152     CADJ STORE seaicemaskv = comlev1, key=ikey_dynamics, kind=isbyte
153     CADJ STORE fu = comlev1, key=ikey_dynamics, kind=isbyte
154     CADJ STORE fv = comlev1, key=ikey_dynamics, kind=isbyte
155     CADJ STORE uice = comlev1, key=ikey_dynamics, kind=isbyte
156     CADJ STORE vice = comlev1, key=ikey_dynamics, kind=isbyte
157     cphCADJ STORE eta = comlev1, key=ikey_dynamics, kind=isbyte
158     cphCADJ STORE zeta = comlev1, key=ikey_dynamics, kind=isbyte
159     cph(
160     CADJ STORE dwatn = comlev1, key=ikey_dynamics, kind=isbyte
161     cccCADJ STORE press0 = comlev1, key=ikey_dynamics, kind=isbyte
162     cccCADJ STORE taux = comlev1, key=ikey_dynamics, kind=isbyte
163     cccCADJ STORE tauy = comlev1, key=ikey_dynamics, kind=isbyte
164     cccCADJ STORE zmax = comlev1, key=ikey_dynamics, kind=isbyte
165     cccCADJ STORE zmin = comlev1, key=ikey_dynamics, kind=isbyte
166     cph)
167     # ifdef SEAICE_ALLOW_EVP
168     CADJ STORE seaice_sigma1 = comlev1, key=ikey_dynamics, kind=isbyte
169     CADJ STORE seaice_sigma2 = comlev1, key=ikey_dynamics, kind=isbyte
170     CADJ STORE seaice_sigma12 = comlev1, key=ikey_dynamics, kind=isbyte
171     # endif
172     # endif
173     # endif
174     # ifdef ALLOW_SITRACER
175     CADJ STORE siceload = comlev1, key=ikey_dynamics, kind=isbyte
176     CADJ STORE sitracer = comlev1, key=ikey_dynamics, kind=isbyte
177     # endif
178     #endif /* ALLOW_AUTODIFF_TAMC */
179    
180     C solve ice momentum equations and calculate ocean surface stress
181     #ifdef ALLOW_DEBUG
182     IF (debugMode) CALL DEBUG_CALL( 'SEAICE_DYNSOLVER', myThid )
183     #endif
184     #ifdef SEAICE_CGRID
185     CALL TIMER_START('SEAICE_DYNSOLVER [SEAICE_MODEL]',myThid)
186     CALL SEAICE_DYNSOLVER ( myTime, myIter, myThid )
187     CALL TIMER_STOP ('SEAICE_DYNSOLVER [SEAICE_MODEL]',myThid)
188     #else
189     CALL TIMER_START('DYNSOLVER [SEAICE_MODEL]',myThid)
190     CALL DYNSOLVER ( myTime, myIter, myThid )
191     CALL TIMER_STOP ('DYNSOLVER [SEAICE_MODEL]',myThid)
192     #endif /* SEAICE_CGRID */
193    
194     C-- Apply ice velocity open boundary conditions
195     #ifdef ALLOW_OBCS
196     # ifndef DISABLE_SEAICE_OBCS
197     IF ( useOBCS ) CALL OBCS_ADJUST_UVICE( uice, vice, myThid )
198     # endif /* DISABLE_SEAICE_OBCS */
199     #endif /* ALLOW_OBCS */
200    
201     #ifdef ALLOW_THSICE
202     IF ( .NOT.useThSice ) THEN
203     #endif
204     C-- Only call advection of heff, area, snow, and salt and
205     C-- growth for the generic 0-layer thermodynamics of seaice
206     C-- if useThSice=.false., otherwise the 3-layer Winton thermodynamics
207     C-- (called from DO_OCEANIC_PHYSICS) take care of this
208    
209     C NOW DO ADVECTION and DIFFUSION
210     IF ( SEAICEadvHeff .OR. SEAICEadvArea .OR. SEAICEadvSnow
211     & .OR. SEAICEadvSalt ) THEN
212 dimitri 1.2 CToM<<<
213     #ifdef SEAICE_ITD
214 torge 1.6 C ToM: generate some test output
215 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
216 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
217     DO bi=myBxLo(myThid),myBxHi(myThid)
218     c DO j=1-OLy,sNy+OLy
219     c DO i=1-OLx,sNx+OLx
220     ccc WRITE(msgBuf,HlimitMsgFormat)
221 torge 1.7 WRITE(msgBuf,'(A,F8.4,x,F8.4)')
222 torge 1.6 & ' SEAICE_MODEL: AREA and HEFF before advection: ',
223 torge 1.7 & AREA(1,1,bi,bj), HEFF(1,1,bi,bj)
224 torge 1.6 c & ' SEAICE_MODEL: AREA and HEFF/AREA before advection: ',
225 torge 1.7 c & AREA(1,1,bi,bj), HEFF(1,1,bi,bj)/AREA(1,1,bi,bj)
226 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
227     & SQUEEZE_RIGHT , myThid)
228     WRITE(msgBuf,HlimitMsgFormat)
229 torge 1.6 & ' SEAICE_MODEL: HEFFITD before advection: ',
230 torge 1.7 & HEFFITD(1,1,:,bi,bj)
231 torge 1.6 c & ' SEAICE_MODEL: HEFFITD/AREAITD before advection: ',
232 torge 1.7 c & HEFFITD(1,1,:,bi,bj) / AREAITD(1,1,:,bi,bj)
233 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
234     & SQUEEZE_RIGHT , myThid)
235     WRITE(msgBuf,HlimitMsgFormat)
236 torge 1.6 & ' SEAICE_MODEL: AREAITD before advection: ',
237 torge 1.7 & AREAITD(1,1,:,bi,bj)
238 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
239     & SQUEEZE_RIGHT , myThid)
240     c ENDDO
241     c ENDDO
242     ENDDO
243     ENDDO
244     #endif
245     C>>>ToM
246 dimitri 1.1 #ifdef ALLOW_DEBUG
247     IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ADVDIFF', myThid )
248     #endif
249     CALL SEAICE_ADVDIFF( myTime, myIter, myThid )
250 dimitri 1.2 CToM<<<
251     #ifdef SEAICE_ITD
252 torge 1.6 C ToM: generate some test output
253 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
254 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
255     DO bi=myBxLo(myThid),myBxHi(myThid)
256     WRITE(msgBuf,HlimitMsgFormat)
257 torge 1.6 & ' SEAICE_MODEL: HEFFITD after advection: ',
258 torge 1.7 & HEFFITD(1,1,:,bi,bj)
259 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
260     & SQUEEZE_RIGHT , myThid)
261     WRITE(msgBuf,HlimitMsgFormat)
262 torge 1.6 & ' SEAICE_MODEL: AREAITD after advection: ',
263 torge 1.7 & AREAITD(1,1,:,bi,bj)
264 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
265     & SQUEEZE_RIGHT , myThid)
266 torge 1.6 WRITE(msgBuf,'(A)')
267     & ' --------------------------------------------- '
268     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
269     & SQUEEZE_RIGHT , myThid)
270 dimitri 1.2 ENDDO
271     ENDDO
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 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.7 c create some open water
315     divergence = 1.0/(5*365.*86400./SEAICE_deltaTtherm)
316     DO bj=myByLo(myThid),myByHi(myThid)
317     DO bi=myBxLo(myThid),myBxHi(myThid)
318     DO IT=1,nITD
319     DO J=1-OLy,sNy+OLy
320     DO I=1-OLx,sNx+OLx
321     AREAITD(I,J,IT,bi,bj)=MAX(0.0,AREAITD(I,J,IT,bi,bj)
322     & -divergence)
323     HEFFITD(I,J,IT,bi,bj)=HEFFITD(I,J,IT,bi,bj)
324     & -divergence*HEFFITD(I,J,IT,bi,bj)
325     ENDDO
326     ENDDO
327     ENDDO
328     ENDDO
329     ENDDO
330 torge 1.6 C ToM: generate some test output
331 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
332 torge 1.6 DO bj=myByLo(myThid),myByHi(myThid)
333     DO bi=myBxLo(myThid),myBxHi(myThid)
334     WRITE(msgBuf,HlimitMsgFormat)
335     & ' SEAICE_MODEL: HEFFITD before growth: ',
336 torge 1.7 & HEFFITD(1,1,:,bi,bj)
337 torge 1.6 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
338     & SQUEEZE_RIGHT , myThid)
339     WRITE(msgBuf,HlimitMsgFormat)
340     & ' SEAICE_MODEL: AREAITD before growth: ',
341 torge 1.7 & AREAITD(1,1,:,bi,bj)
342 torge 1.6 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
343     & SQUEEZE_RIGHT , myThid)
344     WRITE(msgBuf,HlimitMsgFormat)
345     & ' SEAICE_MODEL: HSNOWITD before growth: ',
346 torge 1.7 & HSNOWITD(1,1,:,bi,bj)
347 torge 1.6 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
348     & SQUEEZE_RIGHT , myThid)
349     ENDDO
350     ENDDO
351     #endif
352    
353 dimitri 1.1 #ifndef DISABLE_SEAICE_GROWTH
354     C thermodynamics growth
355     C must call growth after calling advection
356     C because of ugly time level business
357     IF ( usePW79thermodynamics ) THEN
358     #ifdef ALLOW_DEBUG
359     IF (debugMode) CALL DEBUG_CALL( 'SEAICE_GROWTH', myThid )
360     #endif
361     CALL SEAICE_GROWTH( myTime, myIter, myThid )
362 dimitri 1.2 CToM<<<
363     #ifdef SEAICE_ITD
364 torge 1.6 C ToM: generate some test output
365 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
366 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
367     DO bi=myBxLo(myThid),myBxHi(myThid)
368     WRITE(msgBuf,HlimitMsgFormat)
369 torge 1.6 & ' SEAICE_MODEL: HEFFITD after growth: ',
370 torge 1.7 & HEFFITD(1,1,:,bi,bj)
371 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
372     & SQUEEZE_RIGHT , myThid)
373     WRITE(msgBuf,HlimitMsgFormat)
374 torge 1.6 & ' SEAICE_MODEL: AREAITD after growth: ',
375 torge 1.7 & AREAITD(1,1,:,bi,bj)
376 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
377     & SQUEEZE_RIGHT , myThid)
378     WRITE(msgBuf,HlimitMsgFormat)
379 torge 1.6 & ' SEAICE_MODEL: HSNOWITD after growth: ',
380 torge 1.7 & HSNOWITD(1,1,:,bi,bj)
381 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
382     & SQUEEZE_RIGHT , myThid)
383 torge 1.6 WRITE(msgBuf,'(A)')
384     & ' --------------------------------------------- '
385     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
386     & SQUEEZE_RIGHT , myThid)
387 dimitri 1.2 ENDDO
388     ENDDO
389     C
390     C redistribute sea ice into proper sea ice category after growth/melt
391     C in case model runs with ice thickness distribution
392     C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|
393     #ifdef ALLOW_DEBUG
394     IF (debugMode) CALL DEBUG_CALL( 'SEAICE_ITD_REDIST', myThid )
395     #endif
396 torge 1.5 DO bj=myByLo(myThid),myByHi(myThid)
397     DO bi=myBxLo(myThid),myBxHi(myThid)
398 torge 1.6 CALL SEAICE_ITD_REDIST(bi, bj, myTime, myIter, myThid)
399 torge 1.5 ENDDO
400     ENDDO
401 dimitri 1.2 C store the mean ice thickness in HEFF (for dynamic solver and diagnostics)
402 torge 1.5 DO bj=myByLo(myThid),myByHi(myThid)
403     DO bi=myBxLo(myThid),myBxHi(myThid)
404 torge 1.6 CALL SEAICE_ITD_SUM(bi, bj, myTime, myIter, myThid)
405 torge 1.5 ENDDO
406     ENDDO
407 dimitri 1.2
408 torge 1.6 C ToM: generate some test output
409 torge 1.7 WRITE(HlimitMsgFormat,'(A,I2,A)') '(A,',nITD,'F8.4)'
410 dimitri 1.2 DO bj=myByLo(myThid),myByHi(myThid)
411     DO bi=myBxLo(myThid),myBxHi(myThid)
412     WRITE(msgBuf,HlimitMsgFormat)
413 torge 1.6 & ' SEAICE_MODEL: HEFFITD after final sorting: ',
414 torge 1.7 & HEFFITD(1,1,:,bi,bj)
415 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
416     & SQUEEZE_RIGHT , myThid)
417     WRITE(msgBuf,HlimitMsgFormat)
418 torge 1.6 & ' SEAICE_MODEL: AREAITD after final sorting: ',
419 torge 1.7 & AREAITD(1,1,:,bi,bj)
420 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
421     & SQUEEZE_RIGHT , myThid)
422     WRITE(msgBuf,HlimitMsgFormat)
423 torge 1.6 & ' SEAICE_MODEL: HSNOWITD after final sorting: ',
424 torge 1.7 & HSNOWITD(1,1,:,bi,bj)
425 dimitri 1.2 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
426     & SQUEEZE_RIGHT , myThid)
427 torge 1.6 WRITE(msgBuf,'(A)')
428     & ' ============================================= '
429     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
430     & SQUEEZE_RIGHT , myThid)
431 dimitri 1.2 ENDDO
432     ENDDO
433     #endif
434     C
435     C>>>ToM
436 dimitri 1.1 ENDIF
437     #endif /* DISABLE_SEAICE_GROWTH */
438    
439     #ifdef ALLOW_SITRACER
440     # ifdef ALLOW_AUTODIFF_TAMC
441     CADJ STORE sitracer = comlev1, key=ikey_dynamics, kind=isbyte
442     # endif
443     CALL SEAICE_TRACER_PHYS ( myTime, myIter, myThid )
444     #endif
445    
446     C-- Apply ice tracer open boundary conditions
447     #ifdef ALLOW_OBCS
448     # ifndef DISABLE_SEAICE_OBCS
449     IF ( useOBCS ) CALL OBCS_APPLY_SEAICE( myThid )
450     # endif /* DISABLE_SEAICE_OBCS */
451     #endif /* ALLOW_OBCS */
452    
453     C-- Update overlap regions for a bunch of stuff
454     _EXCH_XY_RL( HEFF, myThid )
455     _EXCH_XY_RL( AREA, myThid )
456     _EXCH_XY_RL( HSNOW, myThid )
457     #ifdef SEAICE_VARIABLE_SALINITY
458     _EXCH_XY_RL( HSALT, myThid )
459     #endif
460     #ifdef ALLOW_SITRACER
461     DO iTr = 1, SItrNumInUse
462     _EXCH_XY_RL( SItracer(1-OLx,1-OLy,1,1,iTr),myThid )
463     ENDDO
464     #endif
465     _EXCH_XY_RS(EmPmR, myThid )
466     _EXCH_XY_RS(saltFlux, myThid )
467     _EXCH_XY_RS(Qnet , myThid )
468     #ifdef SHORTWAVE_HEATING
469     _EXCH_XY_RS(Qsw , myThid )
470     #endif /* SHORTWAVE_HEATING */
471     #ifdef ATMOSPHERIC_LOADING
472     IF ( useRealFreshWaterFlux )
473     & _EXCH_XY_RS( sIceLoad, myThid )
474     #endif
475    
476     #ifdef ALLOW_OBCS
477     C-- In case we use scheme with a large stencil that extends into overlap:
478     C no longer needed with the right masking in advection & diffusion S/R.
479     c IF ( useOBCS ) THEN
480     c DO bj=myByLo(myThid),myByHi(myThid)
481     c DO bi=myBxLo(myThid),myBxHi(myThid)
482     c CALL OBCS_COPY_TRACER( HEFF(1-OLx,1-OLy,bi,bj),
483     c I 1, bi, bj, myThid )
484     c CALL OBCS_COPY_TRACER( AREA(1-OLx,1-OLy,bi,bj),
485     c I 1, bi, bj, myThid )
486     c CALL OBCS_COPY_TRACER( HSNOW(1-OLx,1-OLy,bi,bj),
487     c I 1, bi, bj, myThid )
488     #ifdef SEAICE_VARIABLE_SALINITY
489     c CALL OBCS_COPY_TRACER( HSALT(1-OLx,1-OLy,bi,bj),
490     c I 1, bi, bj, myThid )
491     #endif
492     c ENDDO
493     c ENDDO
494     c ENDIF
495     #endif /* ALLOW_OBCS */
496    
497     #ifdef ALLOW_DIAGNOSTICS
498     IF ( useDiagnostics ) THEN
499     C diagnostics for "non-state variables" that are modified by
500     C the seaice model
501     # ifdef ALLOW_EXF
502     CALL DIAGNOSTICS_FILL(UWIND ,'SIuwind ',0,1 ,0,1,1,myThid)
503     CALL DIAGNOSTICS_FILL(VWIND ,'SIvwind ',0,1 ,0,1,1,myThid)
504     # endif
505     CALL DIAGNOSTICS_FILL_RS(FU ,'SIfu ',0,1 ,0,1,1,myThid)
506     CALL DIAGNOSTICS_FILL_RS(FV ,'SIfv ',0,1 ,0,1,1,myThid)
507     CALL DIAGNOSTICS_FILL_RS(EmPmR,'SIempmr ',0,1 ,0,1,1,myThid)
508     CALL DIAGNOSTICS_FILL_RS(Qnet ,'SIqnet ',0,1 ,0,1,1,myThid)
509     CALL DIAGNOSTICS_FILL_RS(Qsw ,'SIqsw ',0,1 ,0,1,1,myThid)
510 torge 1.4 #ifdef SEAICE_ITD
511     CALL DIAGNOSTICS_FILL(HEFFITD ,'SIheffN ',0,nITD,0,1,1,myThid)
512     CALL DIAGNOSTICS_FILL(AREAITD ,'SIareaN ',0,nITD,0,1,1,myThid)
513     #endif
514 dimitri 1.1 ENDIF
515     #endif /* ALLOW_DIAGNOSTICS */
516    
517     #ifdef ALLOW_THSICE
518     C endif .not.useThSice
519     ENDIF
520     #endif /* ALLOW_THSICE */
521     CML This has already been done in seaice_ocean_stress/ostres, so why repeat?
522     CML CALL EXCH_UV_XY_RS(fu,fv,.TRUE.,myThid)
523    
524     #ifdef ALLOW_EXF
525     # ifdef ALLOW_AUTODIFF_TAMC
526     # if (defined (ALLOW_AUTODIFF_MONITOR))
527     CALL EXF_ADJOINT_SNAPSHOTS( 3, myTime, myIter, myThid )
528     # endif
529     # endif
530     #endif
531    
532     #ifdef ALLOW_DEBUG
533     IF (debugMode) CALL DEBUG_LEAVE( 'SEAICE_MODEL', myThid )
534     #endif
535    
536     RETURN
537     END

  ViewVC Help
Powered by ViewVC 1.1.22