/[MITgcm]/MITgcm/model/src/do_oceanic_phys.F
ViewVC logotype

Annotation of /MITgcm/model/src/do_oceanic_phys.F

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


Revision 1.52 - (hide annotations) (download)
Sun Jul 22 23:51:16 2007 UTC (16 years, 10 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint59e
Changes since 1.51: +5 -1 lines
o starting implementation of Duffy et al. (GRL 1999) salt plume scheme
  (#ifdef ALLOW_SALT_PLUME)

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

  ViewVC Help
Powered by ViewVC 1.1.22