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

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

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

revision 1.28 by jmc, Thu Mar 30 02:33:05 2006 UTC revision 1.125 by heimbach, Sat Mar 30 01:25:44 2013 UTC
# Line 11  C $Name$ Line 11  C $Name$
11  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
12  #  include "KPP_OPTIONS.h"  #  include "KPP_OPTIONS.h"
13  # endif  # endif
14    # ifdef ALLOW_SEAICE
15    #  include "SEAICE_OPTIONS.h"
16    # endif
17    # ifdef ALLOW_EXF
18    #  include "EXF_OPTIONS.h"
19    # endif
20  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
21    
22  CBOP  CBOP
# Line 33  C     == Global variables === Line 39  C     == Global variables ===
39  #include "SIZE.h"  #include "SIZE.h"
40  #include "EEPARAMS.h"  #include "EEPARAMS.h"
41  #include "PARAMS.h"  #include "PARAMS.h"
 #include "DYNVARS.h"  
42  #include "GRID.h"  #include "GRID.h"
43    #include "DYNVARS.h"
44  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
45  #include "TIMEAVE_STATV.h"  #include "TIMEAVE_STATV.h"
46  #endif  #endif
47  #if defined (ALLOW_BALANCE_FLUXES) && !(defined ALLOW_AUTODIFF_TAMC)  #ifdef ALLOW_BALANCE_FLUXES
48  #include "FFIELDS.h"  #include "FFIELDS.h"
49  #endif  #endif
50    
51  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
52    # include "AUTODIFF_MYFIELDS.h"
53  # include "tamc.h"  # include "tamc.h"
54  # include "tamc_keys.h"  # include "tamc_keys.h"
55    #ifndef ALLOW_BALANCE_FLUXES
56  # include "FFIELDS.h"  # include "FFIELDS.h"
57    #endif
58    # include "SURFACE.h"
59  # include "EOS.h"  # include "EOS.h"
60  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
61  #  include "KPP.h"  #  include "KPP.h"
62  # endif  # endif
63    # ifdef ALLOW_GGL90
64    #  include "GGL90.h"
65    # endif
66  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
67  #  include "GMREDI.h"  #  include "GMREDI.h"
68  # endif  # endif
69  # ifdef ALLOW_EBM  # ifdef ALLOW_EBM
70  #  include "EBM.h"  #  include "EBM.h"
71  # endif  # endif
72  # ifdef EXACT_CONSERV  # ifdef ALLOW_EXF
73  #  include "SURFACE.h"  #  include "ctrl.h"
74    #  include "EXF_FIELDS.h"
75    #  ifdef ALLOW_BULKFORMULAE
76    #   include "EXF_CONSTANTS.h"
77    #  endif
78    # endif
79    # ifdef ALLOW_SEAICE
80    #  include "SEAICE_SIZE.h"
81    #  include "SEAICE.h"
82    #  include "SEAICE_PARAMS.h"
83    # endif
84    # ifdef ALLOW_THSICE
85    #  include "THSICE_VARS.h"
86    # endif
87    # ifdef ALLOW_SALT_PLUME
88    #  include "SALT_PLUME.h"
89  # endif  # endif
90  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
91    
# Line 72  C     myThid :: Thread number for this i Line 100  C     myThid :: Thread number for this i
100    
101  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
102  C     == Local variables  C     == Local variables
103  C     rhoK, rhoKM1  :: Density at current level, and level above  C     rhoK, rhoKm1  :: Density at current level, and level above
104  C     iMin, iMax    :: Ranges and sub-block indices on which calculations  C     iMin, iMax    :: Ranges and sub-block indices on which calculations
105  C     jMin, jMax       are applied.  C     jMin, jMax       are applied.
106  C     bi, bj        :: tile indices  C     bi, bj        :: tile indices
107  C     i,j,k         :: loop indices  C     i,j,k         :: loop indices
108        _RL rhokm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
109        _RL rhok    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
110        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
111        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
112        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 100  C--   dummy statement to end declaration Line 128  C--   dummy statement to end declaration
128  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
129    
130  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
131        IF ( debugLevel .GE. debLevB )        IF (debugMode) CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
      &    CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)  
132  #endif  #endif
133    
134        doDiagsRho = 0        doDiagsRho = 0
135  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
136        IF ( useDiagnostics .AND. fluidIsWater ) THEN        IF ( useDiagnostics .AND. fluidIsWater ) THEN
137          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) ) doDiagsRho = 1          IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
138          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.       &       doDiagsRho = doDiagsRho + 1
139       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) )
140       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 2
141       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('WdRHO_P ',myThid) )
142       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2       &       doDiagsRho = doDiagsRho + 4
143            IF ( DIAGNOSTICS_IS_ON('WdRHOdP ',myThid) )
144         &       doDiagsRho = doDiagsRho + 8
145        ENDIF        ENDIF
146  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
147    
148  #ifdef ALLOW_THSICE  #ifdef  ALLOW_OBCS
149          IF (useOBCS) THEN
150    C--   Calculate future values on open boundaries
151    C--   moved before SEAICE_MODEL call since SEAICE_MODEL needs seaice-obcs fields
152    # ifdef ALLOW_AUTODIFF_TAMC
153    CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
154    CADJ STORE salt  = comlev1, key=ikey_dynamics, kind=isbyte
155    # endif
156    # ifdef ALLOW_DEBUG
157           IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
158    # endif
159           CALL OBCS_CALC( myTime+deltaTClock, myIter+1,
160         I                 uVel, vVel, wVel, theta, salt, myThid )
161          ENDIF
162    #endif  /* ALLOW_OBCS */
163    
164    #ifdef ALLOW_AUTODIFF_TAMC
165    # ifdef ALLOW_SALT_PLUME
166          DO bj=myByLo(myThid),myByHi(myThid)
167           DO bi=myBxLo(myThid),myBxHi(myThid)
168            DO j=1-OLy,sNy+OLy
169             DO i=1-OLx,sNx+OLx
170              saltPlumeDepth(i,j,bi,bj) = 0. _d 0
171              saltPlumeFlux(i,j,bi,bj)  = 0. _d 0
172             ENDDO
173            ENDDO
174           ENDDO
175          ENDDO
176    # endif
177    #endif /* ALLOW_AUTODIFF_TAMC */
178    
179    #ifdef ALLOW_FRAZIL
180          IF ( useFRAZIL ) THEN
181    C--   Freeze water in the ocean interior and let it rise to the surface
182           CALL FRAZIL_CALC_RHS( myTime, myIter, myThid )
183          ENDIF
184    #endif /* ALLOW_FRAZIL */
185    
186    #ifndef OLD_THSICE_CALL_SEQUENCE
187    #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
188        IF ( useThSIce .AND. fluidIsWater ) THEN        IF ( useThSIce .AND. fluidIsWater ) THEN
189  #ifdef ALLOW_DEBUG  # ifdef ALLOW_AUTODIFF_TAMC
190          IF ( debugLevel .GE. debLevB )  CADJ STORE uice,vice         = comlev1, key = ikey_dynamics,
191       &    CALL DEBUG_CALL('THSICE_MAIN',myThid)  CADJ &     kind = isbyte
192    CADJ STORE iceMask,iceHeight = comlev1, key = ikey_dynamics,
193    CADJ &     kind = isbyte
194    CADJ STORE snowHeight, Tsrf  = comlev1, key = ikey_dynamics,
195    CADJ &     kind = isbyte
196    CADJ STORE Qice1, Qice2      = comlev1, key = ikey_dynamics,
197    CADJ &     kind = isbyte
198    CADJ STORE sHeating, snowAge = comlev1, key = ikey_dynamics,
199    CADJ &     kind = isbyte
200    CADJ STORE hocemxl = comlev1, key = ikey_dynamics,
201    CADJ &     kind = isbyte
202    CADJ STORE salt,theta        = comlev1, key = ikey_dynamics,
203    CADJ &     kind = isbyte
204    CADJ STORE uvel,vvel         = comlev1, key = ikey_dynamics,
205    CADJ &     kind = isbyte
206    CADJ STORE qnet,qsw, empmr   = comlev1, key = ikey_dynamics,
207    CADJ &     kind = isbyte
208    CADJ STORE atemp,aqh,precip  = comlev1, key = ikey_dynamics,
209    CADJ &     kind = isbyte
210    CADJ STORE swdown,lwdown     = comlev1, key = ikey_dynamics,
211    CADJ &     kind = isbyte
212    #  ifdef NONLIN_FRSURF
213    CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
214    CADJ &     kind = isbyte
215    #  endif
216    # endif
217    # ifdef ALLOW_DEBUG
218            IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
219    # endif
220    C--     Step forward Therm.Sea-Ice variables
221    C       and modify forcing terms including effects from ice
222            CALL TIMER_START('THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
223            CALL THSICE_MAIN( myTime, myIter, myThid )
224            CALL TIMER_STOP( 'THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
225          ENDIF
226    #endif /* ALLOW_THSICE */
227    #endif /* ndef OLD_THSICE_CALL_SEQUENCE */
228    
229    #ifdef ALLOW_SEAICE
230    # ifdef ALLOW_AUTODIFF_TAMC
231    CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
232    CADJ STORE fu,fv  = comlev1, key=ikey_dynamics, kind=isbyte
233    CADJ STORE qnet   = comlev1, key=ikey_dynamics, kind=isbyte
234    CADJ STORE qsw    = comlev1, key=ikey_dynamics, kind=isbyte
235    CADJ STORE theta  = comlev1, key=ikey_dynamics, kind=isbyte
236    CADJ STORE salt   = comlev1, key=ikey_dynamics, kind=isbyte
237    #if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
238    CADJ STORE evap   = comlev1, key=ikey_dynamics, kind=isbyte
239    #endif
240          IF ( .NOT.useSEAICE ) THEN
241          IF ( SEAICEadjMODE .EQ. -1 ) THEN
242            CALL SEAICE_FAKE( myTime, myIter, myThid )
243          ENDIF
244          ENDIF
245    CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
246    CADJ STORE fu,fv  = comlev1, key=ikey_dynamics, kind=isbyte
247    CADJ STORE qnet   = comlev1, key=ikey_dynamics, kind=isbyte
248    CADJ STORE qsw    = comlev1, key=ikey_dynamics, kind=isbyte
249    CADJ STORE theta  = comlev1, key=ikey_dynamics, kind=isbyte
250    CADJ STORE salt   = comlev1, key=ikey_dynamics, kind=isbyte
251    #if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
252    CADJ STORE evap   = comlev1, key=ikey_dynamics, kind=isbyte
253    #endif
254    # endif /* ALLOW_AUTODIFF_TAMC */
255    #endif /* ALLOW_SEAICE */
256    
257    #ifdef ALLOW_SEAICE
258          IF ( useSEAICE ) THEN
259    # ifdef ALLOW_AUTODIFF_TAMC
260    cph-adj-test(
261    CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
262    CADJ STORE hsnow  = comlev1, key=ikey_dynamics, kind=isbyte
263    CADJ STORE heff   = comlev1, key=ikey_dynamics, kind=isbyte
264    CADJ STORE empmr,qsw,theta   = comlev1, key = ikey_dynamics,
265    CADJ &     kind = isbyte
266    cph-adj-test)
267    CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics,
268    CADJ &     kind = isbyte
269    CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics,
270    CADJ &     kind = isbyte
271    cph# ifdef EXF_READ_EVAP
272    CADJ STORE evap                = comlev1, key = ikey_dynamics,
273    CADJ &     kind = isbyte
274    cph# endif
275    CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics,
276    CADJ &     kind = isbyte
277    #  ifdef SEAICE_CGRID
278    CADJ STORE stressdivergencex   = comlev1, key = ikey_dynamics,
279    CADJ &     kind = isbyte
280    CADJ STORE stressdivergencey   = comlev1, key = ikey_dynamics,
281    CADJ &     kind = isbyte
282    #  endif
283    #  ifdef SEAICE_ALLOW_DYNAMICS
284    CADJ STORE uice                = comlev1, key = ikey_dynamics,
285    CADJ &     kind = isbyte
286    CADJ STORE vice                = comlev1, key = ikey_dynamics,
287    CADJ &     kind = isbyte
288    #   ifdef SEAICE_ALLOW_EVP
289    CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics,
290    CADJ &     kind = isbyte
291    CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics,
292    CADJ &     kind = isbyte
293    CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics,
294    CADJ &     kind = isbyte
295    #   endif
296    #  endif
297    cph#  ifdef SEAICE_SALINITY
298    CADJ STORE salt                = comlev1, key = ikey_dynamics,
299    CADJ &     kind = isbyte
300    cph#  endif
301    #  ifdef ATMOSPHERIC_LOADING
302    CADJ STORE pload               = comlev1, key = ikey_dynamics,
303    CADJ &     kind = isbyte
304    CADJ STORE siceload            = comlev1, key = ikey_dynamics,
305    CADJ &     kind = isbyte
306    #  endif
307    #  ifdef NONLIN_FRSURF
308    CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics,
309    CADJ &     kind = isbyte
310    #  endif
311    #  ifdef ANNUAL_BALANCE
312    CADJ STORE balance_itcount     = comlev1, key = ikey_dynamics,
313    CADJ &     kind = isbyte
314    #  endif /* ANNUAL_BALANCE */
315    # endif
316    # ifdef ALLOW_DEBUG
317            IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid)
318    # endif
319            CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
320            CALL SEAICE_MODEL( myTime, myIter, myThid )
321            CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
322    # ifdef ALLOW_COST
323            CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
324    # endif
325          ENDIF
326    #endif /* ALLOW_SEAICE */
327    
328    #ifdef ALLOW_AUTODIFF_TAMC
329    CADJ STORE sst, sss           = comlev1, key = ikey_dynamics,
330    CADJ &     kind = isbyte
331    CADJ STORE qsw                = comlev1, key = ikey_dynamics,
332    CADJ &     kind = isbyte
333    # ifdef ALLOW_SEAICE
334    CADJ STORE area               = comlev1, key = ikey_dynamics,
335    CADJ &     kind = isbyte
336    # endif
337  #endif  #endif
338    
339    #ifdef OLD_THSICE_CALL_SEQUENCE
340    #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
341          IF ( useThSIce .AND. fluidIsWater ) THEN
342    # ifdef ALLOW_AUTODIFF_TAMC
343    cph(
344    #  ifdef NONLIN_FRSURF
345    CADJ STORE uice,vice        = comlev1, key = ikey_dynamics,
346    CADJ &     kind = isbyte
347    CADJ STORE salt,theta       = comlev1, key = ikey_dynamics,
348    CADJ &     kind = isbyte
349    CADJ STORE qnet,qsw, empmr  = comlev1, key = ikey_dynamics,
350    CADJ &     kind = isbyte
351    CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
352    CADJ &     kind = isbyte
353    #  endif
354    # endif
355    # ifdef ALLOW_DEBUG
356            IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
357    # endif
358  C--     Step forward Therm.Sea-Ice variables  C--     Step forward Therm.Sea-Ice variables
359  C       and modify forcing terms including effects from ice  C       and modify forcing terms including effects from ice
360          CALL TIMER_START('THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_START('THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
# Line 129  C       and modify forcing terms includi Line 362  C       and modify forcing terms includi
362          CALL TIMER_STOP( 'THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_STOP( 'THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
363        ENDIF        ENDIF
364  #endif /* ALLOW_THSICE */  #endif /* ALLOW_THSICE */
365    #endif /* OLD_THSICE_CALL_SEQUENCE */
366    
367  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
368    # ifdef ALLOW_AUTODIFF_TAMC
369    CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
370    CADJ &     kind = isbyte
371    # endif
372        IF ( useShelfIce .AND. fluidIsWater ) THEN        IF ( useShelfIce .AND. fluidIsWater ) THEN
373  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
374          IF ( debugLevel .GE. debLevB )         IF (debugMode) CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
      &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)  
375  #endif  #endif
376  C     compute temperature and (virtual) salt flux at the  C     compute temperature and (virtual) salt flux at the
377  C     shelf-ice ocean interface  C     shelf-ice ocean interface
378         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
379       &       myThid)       &       myThid)
# Line 146  C     shelf-ice ocean interface Line 383  C     shelf-ice ocean interface
383        ENDIF        ENDIF
384  #endif /* ALLOW_SHELFICE */  #endif /* ALLOW_SHELFICE */
385    
386    #ifdef ALLOW_ICEFRONT
387          IF ( useICEFRONT .AND. fluidIsWater ) THEN
388    #ifdef ALLOW_DEBUG
389           IF (debugMode) CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
390    #endif
391    C     compute temperature and (virtual) salt flux at the
392    C     ice-front ocean interface
393           CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
394         &       myThid)
395           CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
396           CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
397         &      myThid)
398          ENDIF
399    #endif /* ALLOW_ICEFRONT */
400    
401    #ifdef ALLOW_SALT_PLUME
402          IF ( useSALT_PLUME ) THEN
403              CALL SALT_PLUME_DO_EXCH( myTime, myIter, myThid )
404          ENDIF
405    #endif /* ALLOW_SALT_PLUME */
406    
407  C--   Freeze water at the surface  C--   Freeze water at the surface
408          IF ( allowFreezing ) THEN
409  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
410  CADJ STORE theta = comlev1, key = ikey_dynamics  CADJ STORE theta = comlev1, key = ikey_dynamics,
411    CADJ &     kind = isbyte
412  #endif  #endif
       IF ( allowFreezing  
      &                   .AND. .NOT. useSEAICE  
      &                   .AND. .NOT. useThSIce ) THEN  
413          CALL FREEZE_SURFACE(  myTime, myIter, myThid )          CALL FREEZE_SURFACE(  myTime, myIter, myThid )
414        ENDIF        ENDIF
415    
416  #ifdef ALLOW_OCN_COMPON_INTERF  #ifdef ALLOW_OCN_COMPON_INTERF
417  C--    Apply imported data (from coupled interface) to forcing fields  C--    Apply imported data (from coupled interface) to forcing fields
418  C jmc: do not know precisely where to put this call (bf or af thSIce ?)  C jmc: do not know precisely where to put this call (bf or af thSIce ?)
419         IF ( useCoupler ) THEN        IF ( useCoupler ) THEN
420           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
421         ENDIF        ENDIF
422  #endif /* ALLOW_OCN_COMPON_INTERF */  #endif /* ALLOW_OCN_COMPON_INTERF */
423    
424  #ifdef ALLOW_BALANCE_FLUXES  #ifdef ALLOW_BALANCE_FLUXES
425  C     balance fluxes  C     balance fluxes
426         IF ( balanceEmPmR )        IF ( balanceEmPmR .AND. (.NOT.useSeaice .OR. useThSIce) )
427       &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, EmPmR, maskInC, maskInC, rA, drF,
428       &        'EmPmR', myTime, myThid )       &        'EmPmR', myTime, myThid )
429         IF ( balanceQnet )        IF ( balanceQnet  .AND. (.NOT.useSeaice .OR. useThSIce) )
430       &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, Qnet,  maskInC, maskInC, rA, drF,
431       &        'Qnet ', myTime, myThid )       &        'Qnet ', myTime, myThid )
432  #endif /* ALLOW_BALANCE_FLUXES */  #endif /* ALLOW_BALANCE_FLUXES */
433    
434  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
435  C--   HPF directive to help TAMC  C--   HPF directive to help TAMC
436  CHPF$ INDEPENDENT  CHPF$ INDEPENDENT
437    #else  /* ALLOW_AUTODIFF_TAMC */
438    C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
439    C     and all vertical mixing schemes, but keep OBCS_CALC
440          IF ( fluidIsWater ) THEN
441  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
442        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
443  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 204  C     just ensure that all memory refere Line 465  C     just ensure that all memory refere
465  C     point numbers. This prevents spurious hardware signals due to  C     point numbers. This prevents spurious hardware signals due to
466  C     uninitialised but inert locations.  C     uninitialised but inert locations.
467    
468    #ifdef ALLOW_AUTODIFF_TAMC
469          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
470           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
471            rhok   (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
472            rhoKM1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
473           ENDDO           ENDDO
474          ENDDO          ENDDO
475    #endif /* ALLOW_AUTODIFF_TAMC */
476    
477          DO k=1,Nr          DO k=1,Nr
478           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
479            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
480  C This is currently also used by IVDC and Diagnostics  C This is currently used by GMRedi, IVDC, MXL-depth  and Diagnostics
481             sigmaX(i,j,k) = 0. _d 0             sigmaX(i,j,k) = 0. _d 0
482             sigmaY(i,j,k) = 0. _d 0             sigmaY(i,j,k) = 0. _d 0
483             sigmaR(i,j,k) = 0. _d 0             sigmaR(i,j,k) = 0. _d 0
484  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
485  cph all the following init. are necessary for TAF  cph all the following init. are necessary for TAF
486  cph although some of these are re-initialised later.  cph although some of these are re-initialised later.
487               rhoInSitu(i,j,k,bi,bj) = 0.
488             IVDConvCount(i,j,k,bi,bj) = 0.             IVDConvCount(i,j,k,bi,bj) = 0.
489  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
490             Kwx(i,j,k,bi,bj)  = 0. _d 0             Kwx(i,j,k,bi,bj)  = 0. _d 0
# Line 242  cph although some of these are re-initia Line 506  cph although some of these are re-initia
506             VisbeckK(i,j,bi,bj)   = 0. _d 0             VisbeckK(i,j,bi,bj)   = 0. _d 0
507  #  endif  #  endif
508  # endif /* ALLOW_GMREDI */  # endif /* ALLOW_GMREDI */
509    # ifdef ALLOW_KPP
510               KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
511               KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
512    # endif /* ALLOW_KPP */
513    # ifdef ALLOW_GGL90
514               GGL90viscArU(i,j,k,bi,bj)  = 0. _d 0
515               GGL90viscArV(i,j,k,bi,bj)  = 0. _d 0
516               GGL90diffKr(i,j,k,bi,bj)  = 0. _d 0
517    # endif /* ALLOW_GGL90 */
518  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
519            ENDDO            ENDDO
520           ENDDO           ENDDO
# Line 253  cph although some of these are re-initia Line 526  cph although some of these are re-initia
526          jMax = sNy+OLy          jMax = sNy+OLy
527    
528  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
529  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
530  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
531    CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
532    CADJ &     kind = isbyte
533  CADJ STORE totphihyd(:,:,:,bi,bj)  CADJ STORE totphihyd(:,:,:,bi,bj)
534  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
535    CADJ &     kind = isbyte
536  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
537  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
538  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
539    CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
540    CADJ &     kind = isbyte
541    # endif
542    # ifdef ALLOW_SALT_PLUME
543    CADJ STORE saltplumedepth(:,:,bi,bj) = comlev1_bibj, key=itdkey,
544    CADJ &     kind = isbyte
545  # endif  # endif
546  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
547    
548    C--   Always compute density (stored in common block) here; even when it is not
549    C     needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
550  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
551          IF ( debugLevel .GE. debLevB )          IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D (xNr)',myThid)
552       &    CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)  #endif
553    #ifdef ALLOW_AUTODIFF_TAMC
554            IF ( fluidIsWater ) THEN
555    #endif /* ALLOW_AUTODIFF_TAMC */
556    #ifdef ALLOW_DOWN_SLOPE
557             IF ( useDOWN_SLOPE ) THEN
558               DO k=1,Nr
559                CALL DWNSLP_CALC_RHO(
560         I                  theta, salt,
561         O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
562         I                  k, bi, bj, myTime, myIter, myThid )
563               ENDDO
564             ENDIF
565    #endif /* ALLOW_DOWN_SLOPE */
566    #ifdef ALLOW_BBL
567             IF ( useBBL ) THEN
568    C     pkg/bbl requires in-situ bbl density for depths equal to and deeper than the bbl.
569    C     To reduce computation and storage requirement, these densities are stored in the
570    C     dry grid boxes of rhoInSitu.  See BBL_CALC_RHO for details.
571               DO k=Nr,1,-1
572                CALL BBL_CALC_RHO(
573         I                  theta, salt,
574         O                  rhoInSitu,
575         I                  k, bi, bj, myTime, myIter, myThid )
576    
577               ENDDO
578             ENDIF
579    #endif /* ALLOW_BBL */
580             IF ( .NOT. ( useDOWN_SLOPE .OR. useBBL ) ) THEN
581               DO k=1,Nr
582                CALL FIND_RHO_2D(
583         I                iMin, iMax, jMin, jMax, k,
584         I                theta(1-OLx,1-OLy,k,bi,bj),
585         I                salt (1-OLx,1-OLy,k,bi,bj),
586         O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
587         I                k, bi, bj, myThid )
588               ENDDO
589             ENDIF
590    #ifdef ALLOW_AUTODIFF_TAMC
591            ELSE
592    C-        fluid is not water:
593              DO k=1,Nr
594               DO j=1-OLy,sNy+OLy
595                DO i=1-OLx,sNx+OLx
596                  rhoInSitu(i,j,k,bi,bj) = 0.
597                ENDDO
598               ENDDO
599              ENDDO
600            ENDIF
601    #endif /* ALLOW_AUTODIFF_TAMC */
602    
603    #ifdef ALLOW_DEBUG
604            IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
605  #endif  #endif
606    
607  C--     Start of diagnostic loop  C--     Start of diagnostic loop
# Line 274  C--     Start of diagnostic loop Line 610  C--     Start of diagnostic loop
610  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
611  C? Patrick, is this formula correct now that we change the loop range?  C? Patrick, is this formula correct now that we change the loop range?
612  C? Do we still need this?  C? Do we still need this?
613  cph kkey formula corrected.  cph kkey formula corrected.
614  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
615           kkey = (itdkey-1)*Nr + k            kkey = (itdkey-1)*Nr + k
616  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
617    
618    c#ifdef ALLOW_AUTODIFF_TAMC
619    cCADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
620    cCADJ &     kind = isbyte
621    cCADJ STORE salt(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey,
622    cCADJ &     kind = isbyte
623    c#endif /* ALLOW_AUTODIFF_TAMC */
624    
625  C--       Calculate gradients of potential density for isoneutral  C--       Calculate gradients of potential density for isoneutral
626  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
 c         IF ( k.GT.1 .AND. (useGMRedi.OR.ivdc_kappa.NE.0.) ) THEN  
627            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
628       &                   .OR. doDiagsRho.GE.1 ) THEN       &         .OR. usePP81 .OR. useMY82 .OR. useGGL90
629  #ifdef ALLOW_DEBUG       &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
             IF ( debugLevel .GE. debLevB )  
      &       CALL DEBUG_CALL('FIND_RHO',myThid)  
 #endif  
 #ifdef ALLOW_AUTODIFF_TAMC  
 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  
 CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  
 #endif /* ALLOW_AUTODIFF_TAMC */  
             CALL FIND_RHO(  
      I        bi, bj, iMin, iMax, jMin, jMax, k, k,  
      I        theta, salt,  
      O        rhoK,  
      I        myThid )  
   
630              IF (k.GT.1) THEN              IF (k.GT.1) THEN
631  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
632  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
633  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ &     kind = isbyte
634  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
635               CALL FIND_RHO(  CADJ &     kind = isbyte
636       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,  CADJ STORE rhokm1 (bi,bj)       = comlev1_bibj_k, key=kkey,
637       I        theta, salt,  CADJ &     kind = isbyte
638       O        rhoKm1,  #endif /* ALLOW_AUTODIFF_TAMC */
639       I        myThid )               CALL FIND_RHO_2D(
640         I                 iMin, iMax, jMin, jMax, k,
641         I                 theta(1-OLx,1-OLy,k-1,bi,bj),
642         I                 salt (1-OLx,1-OLy,k-1,bi,bj),
643         O                 rhoKm1,
644         I                 k-1, bi, bj, myThid )
645              ENDIF              ENDIF
646  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
647              IF ( debugLevel .GE. debLevB )              IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid)
      &       CALL DEBUG_CALL('GRAD_SIGMA',myThid)  
648  #endif  #endif
649    cph Avoid variable aliasing for adjoint !!!
650                DO j=jMin,jMax
651                 DO i=iMin,iMax
652                  rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
653                 ENDDO
654                ENDDO
655              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
656       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
657       I             rhoK, rhoKm1, rhoK,       I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
658       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
659       I             myThid )       I             myThid )
           ENDIF  
   
660  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
661  ctest# ifndef GM_EXCLUDE_CLIPPING  #ifdef GMREDI_WITH_STABLE_ADJOINT
662  CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
663  ctest# endif  cgf -> cuts adjoint dependency from slope to state
664  CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte              CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
665                CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
666                CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
667    #endif
668  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
669              ENDIF
670    
671  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
 c ==> should use sigmaR !!!  
672            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
673  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
674              IF ( debugLevel .GE. debLevB )              IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid)
      &       CALL DEBUG_CALL('CALC_IVDC',myThid)  
675  #endif  #endif
676              CALL CALC_IVDC(              CALL CALC_IVDC(
677       I        bi, bj, iMin, iMax, jMin, jMax, k,       I        bi, bj, iMin, iMax, jMin, jMax, k,
678       I        rhoKm1, rhoK,       I        sigmaR,
679       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
680            ENDIF            ENDIF
681    
682  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
683            IF ( doDiagsRho.GE.2 ) THEN            IF ( doDiagsRho.GE.4 ) THEN
684              CALL DIAGS_RHO( k, bi, bj,              CALL DIAGS_RHO_L( doDiagsRho, k, bi, bj,
685       I                      rhoK, rhoKm1,       I                        rhoInSitu(1-OLx,1-OLy,1,bi,bj),
686       I                      myTime, myIter, myThid)       I                        rhoKm1, wVel,
687         I                        myTime, myIter, myThid )
688            ENDIF            ENDIF
689  #endif  #endif
690    
691  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
692          ENDDO          ENDDO
693    
694    #ifdef ALLOW_AUTODIFF_TAMC
695    CADJ STORE IVDConvCount(:,:,:,bi,bj)
696    CADJ &     = comlev1_bibj, key=itdkey,
697    CADJ &     kind = isbyte
698    #endif
699    
700    C--     Diagnose Mixed Layer Depth:
701            IF ( useGMRedi .OR. MOD(doDiagsRho,2).EQ.1 ) THEN
702              CALL CALC_OCE_MXLAYER(
703         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
704         I              bi, bj, myTime, myIter, myThid )
705            ENDIF
706    
707    #ifdef ALLOW_SALT_PLUME
708            IF ( useSALT_PLUME ) THEN
709              CALL SALT_PLUME_CALC_DEPTH(
710         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
711         I              bi, bj, myTime, myIter, myThid )
712            ENDIF
713    #endif /* ALLOW_SALT_PLUME */
714    
715  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
716  c       IF ( useDiagnostics .AND.          IF ( MOD(doDiagsRho,4).GE.2 ) THEN
 c    &       (useGMRedi .OR. ivdc_kappa.NE.0.) ) THEN  
         IF ( doDiagsRho.GE.1 ) THEN  
717            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
718       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
719          ENDIF          ENDIF
720  #endif  #endif /* ALLOW_DIAGNOSTICS */
   
 #ifdef  ALLOW_OBCS  
 C--     Calculate future values on open boundaries  
         IF (useOBCS) THEN  
 #ifdef ALLOW_DEBUG  
           IF ( debugLevel .GE. debLevB )  
      &     CALL DEBUG_CALL('OBCS_CALC',myThid)  
 #endif  
           CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,  
      I            uVel, vVel, wVel, theta, salt,  
      I            myThid )  
         ENDIF  
 #endif  /* ALLOW_OBCS */  
721    
 #ifndef ALLOW_AUTODIFF_TAMC  
         IF ( fluidIsWater ) THEN  
 #endif  
722  C--     Determines forcing terms based on external fields  C--     Determines forcing terms based on external fields
723  C       relaxation terms, etc.  C       relaxation terms, etc.
724  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
725          IF ( debugLevel .GE. debLevB )          IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
      &    CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)  
726  #endif  #endif
727  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
728  CADJ STORE EmPmR(:,:,bi,bj)  CADJ STORE EmPmR(:,:,bi,bj)
729  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
730    CADJ &     kind = isbyte
731  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
732  CADJ STORE PmEpR(:,:,bi,bj)  CADJ STORE PmEpR(:,:,bi,bj)
733  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
734    CADJ &     kind = isbyte
735  # endif  # endif
736  # ifdef NONLIN_FRSURF  # ifdef NONLIN_FRSURF
737  CADJ STORE hFac_surfC(:,:,bi,bj)  CADJ STORE hFac_surfC(:,:,bi,bj)
738  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
739    CADJ &     kind = isbyte
740  CADJ STORE recip_hFacC(:,:,:,bi,bj)  CADJ STORE recip_hFacC(:,:,:,bi,bj)
741  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
742  # endif  CADJ &     kind = isbyte
743    #  if (defined (ALLOW_PTRACERS))
744    CADJ STORE surfaceForcingS(:,:,bi,bj)   = comlev1_bibj, key=itdkey,
745    CADJ &     kind = isbyte
746    CADJ STORE surfaceForcingT(:,:,bi,bj)   = comlev1_bibj, key=itdkey,
747    CADJ &     kind = isbyte
748    #  endif /* ALLOW_PTRACERS */
749    # endif /* NONLIN_FRSURF */
750  #endif  #endif
751           CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
752       I             bi, bj, iMin, iMax, jMin, jMax,       I             bi, bj, iMin, iMax, jMin, jMax,
753       I             myTime, myIter, myThid )       I             myTime, myIter, myThid )
 #ifndef ALLOW_AUTODIFF_TAMC  
         ENDIF  
 #endif  
754  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
755  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
756  cph-test  cph-test
757  cphCADJ STORE PmEpR(:,:,bi,bj)  cphCADJ STORE PmEpR(:,:,bi,bj)
758  cphCADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  cphCADJ &     = comlev1_bibj, key=itdkey,
759    cphCADJ &     kind = isbyte
760  # endif  # endif
761  #endif  #endif
762    
763  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
764  cph needed for KPP  cph needed for KPP
765  CADJ STORE surfaceForcingU(:,:,bi,bj)  CADJ STORE surfaceForcingU(:,:,bi,bj)
766  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
767    CADJ &     kind = isbyte
768  CADJ STORE surfaceForcingV(:,:,bi,bj)  CADJ STORE surfaceForcingV(:,:,bi,bj)
769  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
770    CADJ &     kind = isbyte
771  CADJ STORE surfaceForcingS(:,:,bi,bj)  CADJ STORE surfaceForcingS(:,:,bi,bj)
772  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
773    CADJ &     kind = isbyte
774  CADJ STORE surfaceForcingT(:,:,bi,bj)  CADJ STORE surfaceForcingT(:,:,bi,bj)
775  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
776    CADJ &     kind = isbyte
777  CADJ STORE surfaceForcingTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
778  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
779  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ &     kind = isbyte
   
 #ifdef  ALLOW_GMREDI  
   
 #ifdef ALLOW_AUTODIFF_TAMC  
 # ifndef GM_EXCLUDE_CLIPPING  
 cph storing here is needed only for one GMREDI_OPTIONS:  
 cph define GM_BOLUS_ADVEC  
 cph keep it although TAF says you dont need to.  
 cph but I've avoided the #ifdef for now, in case more things change  
 CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  
 CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  
 CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  
 # endif  
 #endif /* ALLOW_AUTODIFF_TAMC */  
   
 C--     Calculate iso-neutral slopes for the GM/Redi parameterisation  
         IF (useGMRedi) THEN  
 #ifdef ALLOW_DEBUG  
           IF ( debugLevel .GE. debLevB )  
      &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)  
 #endif  
           CALL GMREDI_CALC_TENSOR(  
      I             bi, bj, iMin, iMax, jMin, jMax,  
      I             sigmaX, sigmaY, sigmaR,  
      I             myThid )  
 #ifdef ALLOW_AUTODIFF_TAMC  
         ELSE  
           CALL GMREDI_CALC_TENSOR_DUMMY(  
      I             bi, bj, iMin, iMax, jMin, jMax,  
      I             sigmaX, sigmaY, sigmaR,  
      I             myThid )  
780  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
         ENDIF  
   
 #endif  /* ALLOW_GMREDI */  
781    
782  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
783  C--     Compute KPP mixing coefficients  C--     Compute KPP mixing coefficients
784          IF (useKPP) THEN          IF (useKPP) THEN
785  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
786            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid)
      &     CALL DEBUG_CALL('KPP_CALC',myThid)  
787  #endif  #endif
788              CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
789            CALL KPP_CALC(            CALL KPP_CALC(
790       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
791              CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
792  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
793          ELSE          ELSE
794            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
795       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
796  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
797          ENDIF          ENDIF
798    
# Line 480  C--     Compute KPP mixing coefficients Line 802  C--     Compute KPP mixing coefficients
802  C--     Compute PP81 mixing coefficients  C--     Compute PP81 mixing coefficients
803          IF (usePP81) THEN          IF (usePP81) THEN
804  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
805            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid)
      &     CALL DEBUG_CALL('PP81_CALC',myThid)  
806  #endif  #endif
807            CALL PP81_CALC(            CALL PP81_CALC(
808       I                  bi, bj, myTime, myThid )       I                     bi, bj, sigmaR, myTime, myIter, myThid )
809          ENDIF          ENDIF
810  #endif /* ALLOW_PP81 */  #endif /* ALLOW_PP81 */
811    
# Line 492  C--     Compute PP81 mixing coefficients Line 813  C--     Compute PP81 mixing coefficients
813  C--     Compute MY82 mixing coefficients  C--     Compute MY82 mixing coefficients
814          IF (useMY82) THEN          IF (useMY82) THEN
815  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
816            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid)
      &     CALL DEBUG_CALL('MY82_CALC',myThid)  
817  #endif  #endif
818            CALL MY82_CALC(            CALL MY82_CALC(
819       I                  bi, bj, myTime, myThid )       I                     bi, bj, sigmaR, myTime, myIter, myThid )
820          ENDIF          ENDIF
821  #endif /* ALLOW_MY82 */  #endif /* ALLOW_MY82 */
822    
823  #ifdef  ALLOW_GGL90  #ifdef  ALLOW_GGL90
824    #ifdef ALLOW_AUTODIFF_TAMC
825    CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
826    CADJ &     kind = isbyte
827    #endif /* ALLOW_AUTODIFF_TAMC */
828  C--     Compute GGL90 mixing coefficients  C--     Compute GGL90 mixing coefficients
829          IF (useGGL90) THEN          IF (useGGL90) THEN
830  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
831            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('GGL90_CALC',myThid)
      &     CALL DEBUG_CALL('GGL90_CALC',myThid)  
832  #endif  #endif
833              CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
834            CALL GGL90_CALC(            CALL GGL90_CALC(
835       I                  bi, bj, myTime, myThid )       I                     bi, bj, sigmaR, myTime, myIter, myThid )
836              CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
837          ENDIF          ENDIF
838  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
839    
840  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
841          IF ( taveFreq.GT. 0. _d 0 .AND. fluidIsWater ) THEN          IF ( taveFreq.GT. 0. _d 0 ) THEN
842            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
843          ENDIF          ENDIF
844          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
845            CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,            CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
846       I                           Nr, deltaTclock, bi, bj, myThid)       I                           Nr, deltaTClock, bi, bj, myThid)
847          ENDIF          ENDIF
848  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
849    
850    #ifdef ALLOW_GMREDI
851    #ifdef ALLOW_AUTODIFF_TAMC
852    # ifndef GM_EXCLUDE_CLIPPING
853    cph storing here is needed only for one GMREDI_OPTIONS:
854    cph define GM_BOLUS_ADVEC
855    cph keep it although TAF says you dont need to.
856    cph but I have avoided the #ifdef for now, in case more things change
857    CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey,
858    CADJ &     kind = isbyte
859    CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey,
860    CADJ &     kind = isbyte
861    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey,
862    CADJ &     kind = isbyte
863    # endif
864    #endif /* ALLOW_AUTODIFF_TAMC */
865    
866    C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
867            IF (useGMRedi) THEN
868    #ifdef ALLOW_DEBUG
869              IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
870    #endif
871              CALL GMREDI_CALC_TENSOR(
872         I             iMin, iMax, jMin, jMax,
873         I             sigmaX, sigmaY, sigmaR,
874         I             bi, bj, myTime, myIter, myThid )
875    #ifdef ALLOW_AUTODIFF_TAMC
876            ELSE
877              CALL GMREDI_CALC_TENSOR_DUMMY(
878         I             iMin, iMax, jMin, jMax,
879         I             sigmaX, sigmaY, sigmaR,
880         I             bi, bj, myTime, myIter, myThid )
881    #endif /* ALLOW_AUTODIFF_TAMC */
882            ENDIF
883    #endif /* ALLOW_GMREDI */
884    
885    #ifdef ALLOW_DOWN_SLOPE
886            IF ( useDOWN_SLOPE ) THEN
887    C--     Calculate Downsloping Flow for Down_Slope parameterization
888             IF ( usingPCoords ) THEN
889              CALL DWNSLP_CALC_FLOW(
890         I                bi, bj, kSurfC, rhoInSitu,
891         I                myTime, myIter, myThid )
892             ELSE
893              CALL DWNSLP_CALC_FLOW(
894         I                bi, bj, kLowC, rhoInSitu,
895         I                myTime, myIter, myThid )
896             ENDIF
897            ENDIF
898    #endif /* ALLOW_DOWN_SLOPE */
899    
900  C--   end bi,bj loops.  C--   end bi,bj loops.
901         ENDDO         ENDDO
902        ENDDO        ENDDO
903    
904    #ifdef ALLOW_BALANCE_RELAX
905    # ifdef ALLOW_AUTODIFF_TAMC
906    CADJ STORE SSSrlx = comlev1, key=ikey_dynamics, kind=isbyte
907    CADJ STORE SSSrlxTile = comlev1, key=ikey_dynamics, kind=isbyte
908    CADJ STORE SSSrlxGlob = comlev1, key=ikey_dynamics, kind=isbyte
909    CADJ STORE SSTrlx = comlev1, key=ikey_dynamics, kind=isbyte
910    CADJ STORE SSTrlxTile = comlev1, key=ikey_dynamics, kind=isbyte
911    CADJ STORE SSTrlxGlob = comlev1, key=ikey_dynamics, kind=isbyte
912    # endif /* ALLOW_AUTODIFF_TAMC */
913           CALL BALANCE_RELAX( myTime, myIter, myThid )
914    #endif /* ALLOW_BALANCE_RELAX */
915    
916    #ifndef ALLOW_AUTODIFF_TAMC
917    C---  if fluid Is Water: end
918          ENDIF
919    #endif
920    
921    #ifdef ALLOW_BBL
922          IF ( useBBL ) THEN
923           CALL BBL_CALC_RHS(
924         I                          myTime, myIter, myThid )
925          ENDIF
926    #endif /* ALLOW_BBL */
927    
928    #ifdef ALLOW_MYPACKAGE
929          IF ( useMYPACKAGE ) THEN
930           CALL MYPACKAGE_CALC_RHS(
931         I                          myTime, myIter, myThid )
932          ENDIF
933    #endif /* ALLOW_MYPACKAGE */
934    
935    #ifdef ALLOW_GMREDI
936          IF ( useGMRedi ) THEN
937            CALL GMREDI_DO_EXCH( myTime, myIter, myThid )
938          ENDIF
939    #endif /* ALLOW_GMREDI */
940    
941    #ifdef ALLOW_KPP
942          IF (useKPP) THEN
943            CALL KPP_DO_EXCH( myThid )
944          ENDIF
945    #endif /* ALLOW_KPP */
946    
947  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
948        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
949            CALL DIAGS_RHO_G(
950         I                    rhoInSitu, uVel, vVel, wVel,
951         I                    myTime, myIter, myThid )
952          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
953        ENDIF        ENDIF
954        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
955          CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',          CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
956       &                         0, Nr, 0, 1, 1, myThid )       &                               0, Nr, 0, 1, 1, myThid )
957        ENDIF        ENDIF
958  #endif  #endif
959    
960    #ifdef ALLOW_ECCO
961          CALL ECCO_PHYS(mythid)
962    #endif
963    
964  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
965           IF ( debugLevel .GE. debLevB )        IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
      &    CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)  
966  #endif  #endif
967    
968        RETURN        RETURN

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.125

  ViewVC Help
Powered by ViewVC 1.1.22