/[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.8 - (hide annotations) (download)
Mon Oct 22 16:36:45 2012 UTC (12 years, 9 months ago) by torge
Branch: MAIN
Changes since 1.7: +12 -5 lines
wrap all msgBuf write statements in SEAICE_DEBUG preprocessor option;
in seaice_model: add a constant divergence rate to mimic dynamics for the 1D verification experiment (not a permanent change)

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

  ViewVC Help
Powered by ViewVC 1.1.22