/[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.1 by jmc, Tue Jul 6 00:58:40 2004 UTC revision 1.11 by heimbach, Mon Sep 27 14:56:42 2004 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "PACKAGES_CONFIG.h"  #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
 c #ifdef ALLOW_PTRACERS  
 c # include "PTRACERS_OPTIONS.h"  
 c #endif  
6    
7  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
8  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
# Line 39  C     == Global variables === Line 36  C     == Global variables ===
36  #include "DYNVARS.h"  #include "DYNVARS.h"
37  #include "GRID.h"  #include "GRID.h"
38  c #include "GAD.h"  c #include "GAD.h"
 c #ifdef ALLOW_PASSIVE_TRACER  
 c #include "TR1.h"  
 c #endif  
39  c #ifdef ALLOW_PTRACERS  c #ifdef ALLOW_PTRACERS
40    c #include "PTRACERS_SIZE.h"
41  c #include "PTRACERS.h"  c #include "PTRACERS.h"
42  c #endif  c #endif
43  c #ifdef ALLOW_TIMEAVE  c #ifdef ALLOW_TIMEAVE
# Line 63  c #endif Line 58  c #endif
58  # ifdef ALLOW_EBM  # ifdef ALLOW_EBM
59  #  include "EBM.h"  #  include "EBM.h"
60  # endif  # endif
61    # ifdef EXACT_CONSERV
62    #  include "SURFACE.h"
63    # endif
64  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
65    
66  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
# Line 101  C                      index into fVerTe Line 99  C                      index into fVerTe
99  CEOP  CEOP
100    
101  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
102           IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
103       &    CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)       &    CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
104  #endif  #endif
105    
106    #ifdef ALLOW_THSICE
107          IF ( useThSIce .AND. buoyancyRelation(1:7) .EQ. 'OCEANIC' ) THEN
108    #ifdef ALLOW_DEBUG
109            IF ( debugLevel .GE. debLevB )
110         &    CALL DEBUG_CALL('THSICE_MAIN',myThid)
111    #endif
112    C--     Step forward Therm.Sea-Ice variables
113    C       and modify forcing terms including effects from ice
114            CALL TIMER_START('THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
115            CALL THSICE_MAIN( myTime, myIter, myThid )
116            CALL TIMER_STOP( 'THSICE_MAIN     [DO_OCEANIC_PHYS]', myThid)
117          ENDIF
118    #endif /* ALLOW_THSICE */
119    
120    C--   Freeze water at the surface
121    #ifdef ALLOW_AUTODIFF_TAMC
122    CADJ STORE theta = comlev1, key = ikey_dynamics
123    #endif
124          IF ( allowFreezing .AND. .NOT. useSEAICE
125         &                   .AND. .NOT. useThSIce ) THEN
126            CALL FREEZE_SURFACE(  myTime, myIter, myThid )
127          ENDIF
128    
129    #ifdef COMPONENT_MODULE
130    # ifndef ALLOW_AIM
131    C--    Apply imported data (from coupled interface) to forcing fields
132    C jmc: do not know precisely where to put this call (bf or af thSIce ?)
133           IF ( useCoupler ) THEN
134             CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
135           ENDIF
136    # endif
137    #endif /* COMPONENT_MODULE */
138    
139  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
140  C--   dummy statement to end declaration part  C--   dummy statement to end declaration part
141        ikey = 1        ikey = 1
# Line 199  CADJ STORE theta(:,:,:,bi,bj) = comlev1_ Line 230  CADJ STORE theta(:,:,:,bi,bj) = comlev1_
230  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
231  CADJ STORE totphihyd  CADJ STORE totphihyd
232  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
233  #ifdef ALLOW_KPP  # ifdef ALLOW_KPP
234  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
235  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
236  #endif  # endif
237    # ifdef EXACT_CONSERV
238    CADJ STORE pmepr(:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte
239    # endif
240  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
241    
242  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 262  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 296  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
296            ENDIF            ENDIF
297    
298  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
299    # ifndef GM_EXCLUDE_CLIPPING
300  CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte
301    # endif
302  CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte
303  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
304  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
# Line 281  c ==> should use sigmaR !!! Line 317  c ==> should use sigmaR !!!
317  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
318          ENDDO          ENDDO
319    
320  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_DIAGNOSTICS
321  cph avoids recomputation of integrate_for_w          IF ( usediagnostics .AND.
322  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte       &       (useGMRedi .OR. ivdc_kappa.NE.0.) ) THEN
323  #endif /* ALLOW_AUTODIFF_TAMC */            CALL fill_diagnostics (myThid, 'DRHODR  ', 0, Nr,
324         &         3, bi, bj, sigmaR)
325            ENDIF
326    #endif
327    
328  #ifdef  ALLOW_OBCS  #ifdef  ALLOW_OBCS
329  C--     Calculate future values on open boundaries  C--     Calculate future values on open boundaries
# Line 293  C--     Calculate future values on open Line 332  C--     Calculate future values on open
332            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
333       &     CALL DEBUG_CALL('OBCS_CALC',myThid)       &     CALL DEBUG_CALL('OBCS_CALC',myThid)
334  #endif  #endif
335            CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1,            CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,
336       I            uVel, vVel, wVel, theta, salt,       I            uVel, vVel, wVel, theta, salt,
337       I            myThid )       I            myThid )
338          ENDIF          ENDIF
# Line 317  C       relaxation terms, etc. Line 356  C       relaxation terms, etc.
356    
357  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
358  cph needed for KPP  cph needed for KPP
359  CADJ STORE surfacetendencyU(:,:,bi,bj)  CADJ STORE surfaceForcingU(:,:,bi,bj)
360  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
361  CADJ STORE surfacetendencyV(:,:,bi,bj)  CADJ STORE surfaceForcingV(:,:,bi,bj)
362  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
363  CADJ STORE surfacetendencyS(:,:,bi,bj)  CADJ STORE surfaceForcingS(:,:,bi,bj)
364  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
365  CADJ STORE surfacetendencyT(:,:,bi,bj)  CADJ STORE surfaceForcingT(:,:,bi,bj)
366  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
367  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
368  CADJ STORE surfacetendencyTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
369  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
370  # endif  # endif
371  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 334  CADJ &     = comlev1_bibj, key=itdkey, b Line 373  CADJ &     = comlev1_bibj, key=itdkey, b
373  #ifdef  ALLOW_GMREDI  #ifdef  ALLOW_GMREDI
374    
375  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
376    # ifndef GM_EXCLUDE_CLIPPING
377  cph storing here is needed only for one GMREDI_OPTIONS:  cph storing here is needed only for one GMREDI_OPTIONS:
378  cph define GM_BOLUS_ADVEC  cph define GM_BOLUS_ADVEC
379    cph keep it although TAF says you dont need to.
380  cph but I've avoided the #ifdef for now, in case more things change  cph but I've avoided the #ifdef for now, in case more things change
381  CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
382  CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
383  CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  cnewCADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
384    # endif
385  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
386    
387  C--     Calculate iso-neutral slopes for the GM/Redi parameterisation  C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
# Line 361  C--     Calculate iso-neutral slopes for Line 403  C--     Calculate iso-neutral slopes for
403  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
404          ENDIF          ENDIF
405    
 #ifdef ALLOW_AUTODIFF_TAMC  
 CADJ STORE Kwx(:,:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte  
 CADJ STORE Kwy(:,:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte  
 CADJ STORE Kwz(:,:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte  
 #endif /* ALLOW_AUTODIFF_TAMC */  
   
406  #endif  /* ALLOW_GMREDI */  #endif  /* ALLOW_GMREDI */
407    
408  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
# Line 385  C--     Compute KPP mixing coefficients Line 421  C--     Compute KPP mixing coefficients
421  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
422          ENDIF          ENDIF
423    
 #ifdef ALLOW_AUTODIFF_TAMC  
 CADJ STORE KPPghat   (:,:,:,bi,bj)  
 CADJ &   , KPPfrac   (:,:  ,bi,bj)  
 CADJ &                 = comlev1_bibj, key=itdkey, byte=isbyte  
 #endif /* ALLOW_AUTODIFF_TAMC */  
   
424  #endif  /* ALLOW_KPP */  #endif  /* ALLOW_KPP */
425    
426  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef  ALLOW_PP81
427  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  C--     Compute PP81 mixing coefficients
428  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte          IF (usePP81) THEN
429  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  #ifdef ALLOW_DEBUG
430  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte            IF ( debugLevel .GE. debLevB )
431  #ifdef ALLOW_PASSIVE_TRACER       &     CALL DEBUG_CALL('PP81_CALC',myThid)
 CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  
432  #endif  #endif
433  #ifdef ALLOW_PTRACERS            CALL PP81_CALC(
434  cph-- moved to forward_step to avoid key computation       I                  bi, bj, myTime, myThid )
435  cphCADJ STORE ptracer(:,:,:,bi,bj,itracer) = comlev1_bibj,          ENDIF
436  cphCADJ &                              key=itdkey, byte=isbyte  #endif /* ALLOW_PP81 */
437    
438    #ifdef  ALLOW_MY82
439    C--     Compute MY82 mixing coefficients
440            IF (useMY82) THEN
441    #ifdef ALLOW_DEBUG
442              IF ( debugLevel .GE. debLevB )
443         &     CALL DEBUG_CALL('MY82_CALC',myThid)
444  #endif  #endif
445  #endif /* ALLOW_AUTODIFF_TAMC */            CALL MY82_CALC(
446         I                  bi, bj, myTime, myThid )
447            ENDIF
448    #endif /* ALLOW_MY82 */
449    
450  #ifdef ALLOW_AIM  #ifdef  ALLOW_GGL90
451  C       AIM - atmospheric intermediate model, physics package code.  C--     Compute GGL90 mixing coefficients
452          IF ( useAIM ) THEN          IF (useGGL90) THEN
453  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
454            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
455       &     CALL DEBUG_CALL('AIM_DO_PHYSICS',myThid)       &     CALL DEBUG_CALL('GGL90_CALC',myThid)
456  #endif  #endif
457           CALL TIMER_START('AIM_DO_PHYSICS   [THERMODYNAMICS]', myThid)            CALL GGL90_CALC(
458           CALL AIM_DO_PHYSICS( bi, bj, myTime, myIter, myThid )       I                  bi, bj, myTime, myThid )
          CALL TIMER_STOP( 'AIM_DO_PHYSICS   [THERMODYNAMICS]', myThid)  
459          ENDIF          ENDIF
460  #endif /* ALLOW_AIM */  #endif /* ALLOW_GGL90 */
461    
462  C--   end bi,bj loops.  C--   end bi,bj loops.
463         ENDDO         ENDDO
464        ENDDO        ENDDO
465    
 #ifdef ALLOW_AIM  
       IF ( useAIM ) THEN  
        CALL AIM_AIM2DYN_EXCHANGES( myTime, myIter, myThid )  
       ENDIF  
 #endif /* ALLOW_AIM */  
   
466  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
467           IF ( debugLevel .GE. debLevB )           IF ( debugLevel .GE. debLevB )
468       &    CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)       &    CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.11

  ViewVC Help
Powered by ViewVC 1.1.22