/[MITgcm]/MITgcm_contrib/MPMice/beaufort/code/do_oceanic_phys.F
ViewVC logotype

Annotation of /MITgcm_contrib/MPMice/beaufort/code/do_oceanic_phys.F

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


Revision 1.1 - (hide annotations) (download)
Sun May 31 03:41:36 2009 UTC (16 years, 2 months ago) by dimitri
Branch: MAIN
Saving code and input files, which had been used for test coupling of MITgcm with
MPMice and which were formely available at http://ecco2.jpl.nasa.gov/data1/beaufort/

1 dimitri 1.1 C $Header: /u/gcmpack/MITgcm/model/src/do_oceanic_phys.F,v 1.61 2007/11/28 09:26:16 dimitri Exp $
2     C $Name: $
3    
4     #include "PACKAGES_CONFIG.h"
5     #include "CPP_OPTIONS.h"
6    
7     #ifdef ALLOW_AUTODIFF_TAMC
8     # ifdef ALLOW_GMREDI
9     # include "GMREDI_OPTIONS.h"
10     # endif
11     # ifdef ALLOW_KPP
12     # include "KPP_OPTIONS.h"
13     # endif
14     # ifdef ALLOW_SEAICE
15     # include "SEAICE_OPTIONS.h"
16     # endif
17     #endif /* ALLOW_AUTODIFF_TAMC */
18    
19     CBOP
20     C !ROUTINE: DO_OCEANIC_PHYS
21     C !INTERFACE:
22     SUBROUTINE DO_OCEANIC_PHYS(myTime, myIter, myThid)
23     C !DESCRIPTION: \bv
24     C *==========================================================*
25     C | SUBROUTINE DO_OCEANIC_PHYS
26     C | o Controlling routine for oceanic physics and
27     C | parameterization
28     C *==========================================================*
29     C | o originally, part of S/R thermodynamics
30     C *==========================================================*
31     C \ev
32    
33     C !USES:
34     IMPLICIT NONE
35     C == Global variables ===
36     #include "SIZE.h"
37     #include "EEPARAMS.h"
38     #include "PARAMS.h"
39     #include "DYNVARS.h"
40     #include "GRID.h"
41     #ifdef ALLOW_TIMEAVE
42     #include "TIMEAVE_STATV.h"
43     #endif
44     #if defined (ALLOW_BALANCE_FLUXES) && !(defined ALLOW_AUTODIFF_TAMC)
45     #include "FFIELDS.h"
46     #endif
47    
48     #ifdef ALLOW_AUTODIFF_TAMC
49     # include "tamc.h"
50     # include "tamc_keys.h"
51     # include "FFIELDS.h"
52     # include "SURFACE.h"
53     # include "EOS.h"
54     # ifdef ALLOW_KPP
55     # include "KPP.h"
56     # endif
57     # ifdef ALLOW_GMREDI
58     # include "GMREDI.h"
59     # endif
60     # ifdef ALLOW_EBM
61     # include "EBM.h"
62     # endif
63     # ifdef ALLOW_EXF
64     # include "ctrl.h"
65     # include "EXF_FIELDS.h"
66     # ifdef ALLOW_BULKFORMULAE
67     # include "EXF_CONSTANTS.h"
68     # endif
69     # endif
70     # ifdef ALLOW_SEAICE
71     # include "SEAICE.h"
72     # endif
73     #endif /* ALLOW_AUTODIFF_TAMC */
74    
75     C !INPUT/OUTPUT PARAMETERS:
76     C == Routine arguments ==
77     C myTime :: Current time in simulation
78     C myIter :: Current iteration number in simulation
79     C myThid :: Thread number for this instance of the routine.
80     _RL myTime
81     INTEGER myIter
82     INTEGER myThid
83    
84     C !LOCAL VARIABLES:
85     C == Local variables
86     C rhoK, rhoKm1 :: Density at current level, and level above
87     C iMin, iMax :: Ranges and sub-block indices on which calculations
88     C jMin, jMax are applied.
89     C bi, bj :: tile indices
90     C i,j,k :: loop indices
91     _RL rhoKp1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92     _RL rhoKm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
93     _RL rhoK (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
94     _RL sigmaX (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
95     _RL sigmaY (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
96     _RL sigmaR (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
97     INTEGER iMin, iMax
98     INTEGER jMin, jMax
99     INTEGER bi, bj
100     INTEGER i, j, k
101     INTEGER doDiagsRho
102     #ifdef ALLOW_DIAGNOSTICS
103     LOGICAL DIAGNOSTICS_IS_ON
104     EXTERNAL DIAGNOSTICS_IS_ON
105     #endif /* ALLOW_DIAGNOSTICS */
106    
107     CEOP
108    
109     #ifdef ALLOW_AUTODIFF_TAMC
110     C-- dummy statement to end declaration part
111     itdkey = 1
112     #endif /* ALLOW_AUTODIFF_TAMC */
113    
114     #ifdef ALLOW_DEBUG
115     IF ( debugLevel .GE. debLevB )
116     & CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
117     #endif
118    
119     doDiagsRho = 0
120     #ifdef ALLOW_DIAGNOSTICS
121     IF ( useDiagnostics .AND. fluidIsWater ) THEN
122     IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.
123     & DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.
124     & DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.
125     & DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.
126     & DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2
127     IF ( doDiagsRho.EQ.0 .AND.
128     & DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) ) doDiagsRho = 1
129     IF ( doDiagsRho.EQ.0 .AND.
130     & DIAGNOSTICS_IS_ON('DRHODR ',myThid) ) doDiagsRho = 1
131     ENDIF
132     #endif /* ALLOW_DIAGNOSTICS */
133    
134     #ifdef ALLOW_CPL_MPMICE
135     CALL CPL_MPMICE( myTime, myIter, myThid )
136     #endif /* ALLOW_CPL_MPMICE */
137    
138     #ifdef ALLOW_SEAICE
139     C-- Call sea ice model to compute forcing/external data fields. In
140     C addition to computing prognostic sea-ice variables and diagnosing the
141     C forcing/external data fields that drive the ocean model, SEAICE_MODEL
142     C also sets theta to the freezing point under sea-ice. The implied
143     C surface heat flux is then stored in variable surfaceTendencyTice,
144     C which is needed by KPP package (kpp_calc.F and kpp_transport_t.F)
145     C to diagnose surface buoyancy fluxes and for the non-local transport
146     C term. Because this call precedes model thermodynamics, temperature
147     C under sea-ice may not be "exactly" at the freezing point by the time
148     C theta is dumped or time-averaged.
149     IF ( useSEAICE ) THEN
150     #ifdef ALLOW_AUTODIFF_TAMC
151     CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics
152     CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics
153     cph# ifdef EXF_READ_EVAP
154     CADJ STORE evap = comlev1, key = ikey_dynamics
155     cph# endif
156     CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics
157     # ifdef SEAICE_ALLOW_EVP
158     CADJ STORE seaice_sigma1 = comlev1, key = ikey_dynamics
159     CADJ STORE seaice_sigma2 = comlev1, key = ikey_dynamics
160     CADJ STORE seaice_sigma12 = comlev1, key = ikey_dynamics
161     # endif
162     # ifdef SEAICE_SALINITY
163     CADJ STORE salt = comlev1, key = ikey_dynamics
164     # endif
165     # ifdef ATMOSPHERIC_LOADING
166     CADJ STORE siceload = comlev1, key = ikey_dynamics
167     # endif
168     # ifdef NONLIN_FRSURF
169     CADJ STORE recip_hfacc = comlev1, key = ikey_dynamics
170     # endif
171     #endif
172     #ifdef ALLOW_DEBUG
173     IF ( debugLevel .GE. debLevB )
174     & CALL DEBUG_CALL('SEAICE_MODEL',myThid)
175     #endif
176     CALL TIMER_START('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
177     CALL SEAICE_MODEL( myTime, myIter, myThid )
178     CALL TIMER_STOP ('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
179     #ifdef ALLOW_COST
180     CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
181     #endif
182     ENDIF
183     #endif /* ALLOW_SEAICE */
184    
185     #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
186     IF ( useThSIce .AND. fluidIsWater ) THEN
187     #ifdef ALLOW_DEBUG
188     IF ( debugLevel .GE. debLevB )
189     & CALL DEBUG_CALL('THSICE_MAIN',myThid)
190     #endif
191     C-- Step forward Therm.Sea-Ice variables
192     C and modify forcing terms including effects from ice
193     CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
194     CALL THSICE_MAIN( myTime, myIter, myThid )
195     CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
196     ENDIF
197     #endif /* ALLOW_THSICE */
198    
199     #ifdef ALLOW_SHELFICE
200     IF ( useShelfIce .AND. fluidIsWater ) THEN
201     #ifdef ALLOW_DEBUG
202     IF ( debugLevel .GE. debLevB )
203     & CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
204     #endif
205     C compute temperature and (virtual) salt flux at the
206     C shelf-ice ocean interface
207     CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
208     & myThid)
209     CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
210     CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
211     & myThid)
212     ENDIF
213     #endif /* ALLOW_SHELFICE */
214    
215     C-- Freeze water at the surface
216     #ifdef ALLOW_AUTODIFF_TAMC
217     CADJ STORE theta = comlev1, key = ikey_dynamics
218     #endif
219     IF ( allowFreezing
220     & .AND. .NOT. useSEAICE
221     & .AND. .NOT. useThSIce ) THEN
222     CALL FREEZE_SURFACE( myTime, myIter, myThid )
223     ENDIF
224    
225     #ifdef ALLOW_OCN_COMPON_INTERF
226     C-- Apply imported data (from coupled interface) to forcing fields
227     C jmc: do not know precisely where to put this call (bf or af thSIce ?)
228     IF ( useCoupler ) THEN
229     CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
230     ENDIF
231     #endif /* ALLOW_OCN_COMPON_INTERF */
232    
233     #ifdef ALLOW_BALANCE_FLUXES
234     C balance fluxes
235     IF ( balanceEmPmR )
236     & CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,
237     & 'EmPmR', myTime, myThid )
238     IF ( balanceQnet )
239     & CALL REMOVE_MEAN_RS( 1, Qnet, maskH, maskH, rA, drF,
240     & 'Qnet ', myTime, myThid )
241     #endif /* ALLOW_BALANCE_FLUXES */
242    
243     #ifdef ALLOW_AUTODIFF_TAMC
244     C-- HPF directive to help TAMC
245     CHPF$ INDEPENDENT
246     #endif /* ALLOW_AUTODIFF_TAMC */
247     DO bj=myByLo(myThid),myByHi(myThid)
248     #ifdef ALLOW_AUTODIFF_TAMC
249     C-- HPF directive to help TAMC
250     CHPF$ INDEPENDENT
251     #endif /* ALLOW_AUTODIFF_TAMC */
252     DO bi=myBxLo(myThid),myBxHi(myThid)
253    
254     #ifdef ALLOW_AUTODIFF_TAMC
255     act1 = bi - myBxLo(myThid)
256     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
257     act2 = bj - myByLo(myThid)
258     max2 = myByHi(myThid) - myByLo(myThid) + 1
259     act3 = myThid - 1
260     max3 = nTx*nTy
261     act4 = ikey_dynamics - 1
262     itdkey = (act1 + 1) + act2*max1
263     & + act3*max1*max2
264     & + act4*max1*max2*max3
265     #else /* ALLOW_AUTODIFF_TAMC */
266     C if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
267     C and all vertical mixing schemes, but keep OBCS_CALC
268     IF ( fluidIsWater ) THEN
269     #endif /* ALLOW_AUTODIFF_TAMC */
270    
271     C-- Set up work arrays with valid (i.e. not NaN) values
272     C These inital values do not alter the numerical results. They
273     C just ensure that all memory references are to valid floating
274     C point numbers. This prevents spurious hardware signals due to
275     C uninitialised but inert locations.
276    
277     DO j=1-OLy,sNy+OLy
278     DO i=1-OLx,sNx+OLx
279     rhoK (i,j) = 0. _d 0
280     rhoKm1 (i,j) = 0. _d 0
281     rhoKp1 (i,j) = 0. _d 0
282     ENDDO
283     ENDDO
284    
285     DO k=1,Nr
286     DO j=1-OLy,sNy+OLy
287     DO i=1-OLx,sNx+OLx
288     C This is currently also used by IVDC and Diagnostics
289     sigmaX(i,j,k) = 0. _d 0
290     sigmaY(i,j,k) = 0. _d 0
291     sigmaR(i,j,k) = 0. _d 0
292     #ifdef ALLOW_AUTODIFF_TAMC
293     cph all the following init. are necessary for TAF
294     cph although some of these are re-initialised later.
295     IVDConvCount(i,j,k,bi,bj) = 0.
296     # ifdef ALLOW_GMREDI
297     Kwx(i,j,k,bi,bj) = 0. _d 0
298     Kwy(i,j,k,bi,bj) = 0. _d 0
299     Kwz(i,j,k,bi,bj) = 0. _d 0
300     # ifdef GM_NON_UNITY_DIAGONAL
301     Kux(i,j,k,bi,bj) = 0. _d 0
302     Kvy(i,j,k,bi,bj) = 0. _d 0
303     # endif
304     # ifdef GM_EXTRA_DIAGONAL
305     Kuz(i,j,k,bi,bj) = 0. _d 0
306     Kvz(i,j,k,bi,bj) = 0. _d 0
307     # endif
308     # ifdef GM_BOLUS_ADVEC
309     GM_PsiX(i,j,k,bi,bj) = 0. _d 0
310     GM_PsiY(i,j,k,bi,bj) = 0. _d 0
311     # endif
312     # ifdef GM_VISBECK_VARIABLE_K
313     VisbeckK(i,j,bi,bj) = 0. _d 0
314     # endif
315     # endif /* ALLOW_GMREDI */
316     # ifdef ALLOW_KPP
317     KPPdiffKzS(i,j,k,bi,bj) = 0. _d 0
318     KPPdiffKzT(i,j,k,bi,bj) = 0. _d 0
319     # endif /* ALLOW_KPP */
320     #endif /* ALLOW_AUTODIFF_TAMC */
321     ENDDO
322     ENDDO
323     ENDDO
324    
325     iMin = 1-OLx
326     iMax = sNx+OLx
327     jMin = 1-OLy
328     jMax = sNy+OLy
329    
330     #ifdef ALLOW_AUTODIFF_TAMC
331     CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
332     CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
333     CADJ STORE totphihyd(:,:,:,bi,bj)
334     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
335     # ifdef ALLOW_KPP
336     CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
337     CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
338     # endif
339     #endif /* ALLOW_AUTODIFF_TAMC */
340    
341     #ifdef ALLOW_DEBUG
342     IF ( debugLevel .GE. debLevB )
343     & CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
344     #endif
345    
346     C-- Start of diagnostic loop
347     DO k=Nr,1,-1
348    
349     #ifdef ALLOW_AUTODIFF_TAMC
350     C? Patrick, is this formula correct now that we change the loop range?
351     C? Do we still need this?
352     cph kkey formula corrected.
353     cph Needed for rhoK, rhoKm1, in the case useGMREDI.
354     kkey = (itdkey-1)*Nr + k
355     #endif /* ALLOW_AUTODIFF_TAMC */
356    
357     C-- Calculate gradients of potential density for isoneutral
358     C slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
359     IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
360     & .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
361     #ifdef ALLOW_DEBUG
362     IF ( debugLevel .GE. debLevB )
363     & CALL DEBUG_CALL('FIND_RHO',myThid)
364     #endif
365     #ifdef ALLOW_AUTODIFF_TAMC
366     CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
367     CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
368     #endif /* ALLOW_AUTODIFF_TAMC */
369     CALL FIND_RHO(
370     I bi, bj, iMin, iMax, jMin, jMax, k, k,
371     I theta, salt,
372     O rhoK,
373     I myThid )
374    
375     IF (k.GT.1) THEN
376     #ifdef ALLOW_AUTODIFF_TAMC
377     CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
378     CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
379     #endif /* ALLOW_AUTODIFF_TAMC */
380     CALL FIND_RHO(
381     I bi, bj, iMin, iMax, jMin, jMax, k-1, k,
382     I theta, salt,
383     O rhoKm1,
384     I myThid )
385     ENDIF
386     #ifdef ALLOW_DEBUG
387     IF ( debugLevel .GE. debLevB )
388     & CALL DEBUG_CALL('GRAD_SIGMA',myThid)
389     #endif
390     cph Avoid variable aliasing for adjoint !!!
391     DO j=jMin,jMax
392     DO i=iMin,iMax
393     rhoKp1(i,j) = rhoK(i,j)
394     ENDDO
395     ENDDO
396     CALL GRAD_SIGMA(
397     I bi, bj, iMin, iMax, jMin, jMax, k,
398     I rhoK, rhoKm1, rhoKp1,
399     O sigmaX, sigmaY, sigmaR,
400     I myThid )
401     ENDIF
402    
403     C-- Implicit Vertical Diffusion for Convection
404     c ==> should use sigmaR !!!
405     IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
406     #ifdef ALLOW_DEBUG
407     IF ( debugLevel .GE. debLevB )
408     & CALL DEBUG_CALL('CALC_IVDC',myThid)
409     #endif
410     CALL CALC_IVDC(
411     I bi, bj, iMin, iMax, jMin, jMax, k,
412     I rhoKm1, rhoK,
413     I myTime, myIter, myThid)
414     ENDIF
415    
416     #ifdef ALLOW_DIAGNOSTICS
417     IF ( doDiagsRho.GE.2 ) THEN
418     CALL DIAGS_RHO( k, bi, bj,
419     I rhoK, rhoKm1,
420     I myTime, myIter, myThid)
421     ENDIF
422     #endif
423    
424     C-- end of diagnostic k loop (Nr:1)
425     ENDDO
426    
427     #ifdef ALLOW_AUTODIFF_TAMC
428     CADJ STORE IVDConvCount(:,:,:,bi,bj)
429     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
430     #endif
431    
432     C-- Diagnose Mixed Layer Depth:
433     IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN
434     CALL CALC_OCE_MXLAYER( rhoK, sigmaR,
435     & bi, bj, myTime, myIter, myThid )
436     ENDIF
437    
438     #ifdef ALLOW_SALT_PLUME
439     IF ( useSALT_PLUME ) THEN
440     CALL SALT_PLUME_CALC_DEPTH( rhoK, sigmaR,
441     & bi, bj, myTime, myIter, myThid )
442     ENDIF
443     #endif /* ALLOW_SALT_PLUME */
444    
445     #ifdef ALLOW_DIAGNOSTICS
446     IF ( doDiagsRho.GE.1 ) THEN
447     CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR ', 0, Nr,
448     & 2, bi, bj, myThid)
449     ENDIF
450     #endif /* ALLOW_DIAGNOSTICS */
451    
452     C-- Determines forcing terms based on external fields
453     C relaxation terms, etc.
454     #ifdef ALLOW_DEBUG
455     IF ( debugLevel .GE. debLevB )
456     & CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
457     #endif
458     #ifdef ALLOW_AUTODIFF_TAMC
459     CADJ STORE EmPmR(:,:,bi,bj)
460     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
461     # ifdef EXACT_CONSERV
462     CADJ STORE PmEpR(:,:,bi,bj)
463     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
464     # endif
465     # ifdef NONLIN_FRSURF
466     CADJ STORE hFac_surfC(:,:,bi,bj)
467     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
468     CADJ STORE recip_hFacC(:,:,:,bi,bj)
469     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
470     # endif
471     #endif
472     CALL EXTERNAL_FORCING_SURF(
473     I bi, bj, iMin, iMax, jMin, jMax,
474     I myTime, myIter, myThid )
475     #ifdef ALLOW_AUTODIFF_TAMC
476     # ifdef EXACT_CONSERV
477     cph-test
478     cphCADJ STORE PmEpR(:,:,bi,bj)
479     cphCADJ & = comlev1_bibj, key=itdkey, byte=isbyte
480     # endif
481     #endif
482    
483     #ifdef ALLOW_AUTODIFF_TAMC
484     cph needed for KPP
485     CADJ STORE surfaceForcingU(:,:,bi,bj)
486     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
487     CADJ STORE surfaceForcingV(:,:,bi,bj)
488     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
489     CADJ STORE surfaceForcingS(:,:,bi,bj)
490     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
491     CADJ STORE surfaceForcingT(:,:,bi,bj)
492     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
493     CADJ STORE surfaceForcingTice(:,:,bi,bj)
494     CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
495     #endif /* ALLOW_AUTODIFF_TAMC */
496    
497     #ifdef ALLOW_KPP
498     C-- Compute KPP mixing coefficients
499     IF (useKPP) THEN
500     #ifdef ALLOW_DEBUG
501     IF ( debugLevel .GE. debLevB )
502     & CALL DEBUG_CALL('KPP_CALC',myThid)
503     #endif
504     CALL KPP_CALC(
505     I bi, bj, myTime, myIter, myThid )
506     #ifdef ALLOW_AUTODIFF_TAMC
507     ELSE
508     CALL KPP_CALC_DUMMY(
509     I bi, bj, myTime, myIter, myThid )
510     #endif /* ALLOW_AUTODIFF_TAMC */
511     ENDIF
512    
513     #endif /* ALLOW_KPP */
514    
515     #ifdef ALLOW_PP81
516     C-- Compute PP81 mixing coefficients
517     IF (usePP81) THEN
518     #ifdef ALLOW_DEBUG
519     IF ( debugLevel .GE. debLevB )
520     & CALL DEBUG_CALL('PP81_CALC',myThid)
521     #endif
522     CALL PP81_CALC(
523     I bi, bj, myTime, myThid )
524     ENDIF
525     #endif /* ALLOW_PP81 */
526    
527     #ifdef ALLOW_MY82
528     C-- Compute MY82 mixing coefficients
529     IF (useMY82) THEN
530     #ifdef ALLOW_DEBUG
531     IF ( debugLevel .GE. debLevB )
532     & CALL DEBUG_CALL('MY82_CALC',myThid)
533     #endif
534     CALL MY82_CALC(
535     I bi, bj, myTime, myThid )
536     ENDIF
537     #endif /* ALLOW_MY82 */
538    
539     #ifdef ALLOW_GGL90
540     C-- Compute GGL90 mixing coefficients
541     IF (useGGL90) THEN
542     #ifdef ALLOW_DEBUG
543     IF ( debugLevel .GE. debLevB )
544     & CALL DEBUG_CALL('GGL90_CALC',myThid)
545     #endif
546     CALL GGL90_CALC(
547     I bi, bj, myTime, myThid )
548     ENDIF
549     #endif /* ALLOW_GGL90 */
550    
551     #ifdef ALLOW_TIMEAVE
552     IF ( taveFreq.GT. 0. _d 0 ) THEN
553     CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
554     ENDIF
555     IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
556     CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
557     I Nr, deltaTclock, bi, bj, myThid)
558     ENDIF
559     #endif /* ALLOW_TIMEAVE */
560    
561     #ifdef ALLOW_GMREDI
562     #ifdef ALLOW_AUTODIFF_TAMC
563     # ifndef GM_EXCLUDE_CLIPPING
564     cph storing here is needed only for one GMREDI_OPTIONS:
565     cph define GM_BOLUS_ADVEC
566     cph keep it although TAF says you dont need to.
567     cph but I've avoided the #ifdef for now, in case more things change
568     CADJ STORE sigmaX(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
569     CADJ STORE sigmaY(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
570     CADJ STORE sigmaR(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
571     # endif
572     #endif /* ALLOW_AUTODIFF_TAMC */
573    
574     C-- Calculate iso-neutral slopes for the GM/Redi parameterisation
575     IF (useGMRedi) THEN
576     #ifdef ALLOW_DEBUG
577     IF ( debugLevel .GE. debLevB )
578     & CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
579     #endif
580     CALL GMREDI_CALC_TENSOR(
581     c I bi, bj, iMin, iMax, jMin, jMax,
582     c I sigmaX, sigmaY, sigmaR,
583     c I myThid )
584     I iMin, iMax, jMin, jMax,
585     I sigmaX, sigmaY, sigmaR,
586     I bi, bj, myTime, myIter, myThid )
587     #ifdef ALLOW_AUTODIFF_TAMC
588     ELSE
589     CALL GMREDI_CALC_TENSOR_DUMMY(
590     c I bi, bj, iMin, iMax, jMin, jMax,
591     c I sigmaX, sigmaY, sigmaR,
592     c I myThid )
593     I iMin, iMax, jMin, jMax,
594     I sigmaX, sigmaY, sigmaR,
595     I bi, bj, myTime, myIter, myThid )
596     #endif /* ALLOW_AUTODIFF_TAMC */
597     ENDIF
598     #endif /* ALLOW_GMREDI */
599    
600     #ifndef ALLOW_AUTODIFF_TAMC
601     C--- if fluid Is Water: end
602     ENDIF
603     #endif
604    
605     #ifdef ALLOW_OBCS
606     C-- Calculate future values on open boundaries
607     IF (useOBCS) THEN
608     #ifdef ALLOW_DEBUG
609     IF ( debugLevel .GE. debLevB )
610     & CALL DEBUG_CALL('OBCS_CALC',myThid)
611     #endif
612     CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,
613     I uVel, vVel, wVel, theta, salt,
614     I myThid )
615     ENDIF
616     #endif /* ALLOW_OBCS */
617    
618     C-- end bi,bj loops.
619     ENDDO
620     ENDDO
621    
622     #ifdef ALLOW_KPP
623     IF (useKPP) THEN
624     CALL KPP_DO_EXCH( myThid )
625     ENDIF
626     #endif /* ALLOW_KPP */
627    
628     #ifdef ALLOW_DIAGNOSTICS
629     IF ( fluidIsWater .AND. useDiagnostics ) THEN
630     CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
631     ENDIF
632     IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
633     CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',
634     & 0, Nr, 0, 1, 1, myThid )
635     ENDIF
636     #endif
637    
638     #ifdef ALLOW_DEBUG
639     IF ( debugLevel .GE. debLevB )
640     & CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
641     #endif
642    
643     RETURN
644     END

  ViewVC Help
Powered by ViewVC 1.1.22