/[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.9 - (hide annotations) (download)
Fri Oct 26 15:07:52 2012 UTC (12 years, 9 months ago) by torge
Branch: MAIN
Changes since 1.8: +6 -5 lines
incorporating Jean-Michel's updates in files on main branch

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

  ViewVC Help
Powered by ViewVC 1.1.22