C $Header: /u/gcmpack/MITgcm/model/src/do_atmospheric_phys.F,v 1.13 2014/09/04 22:30:46 jmc Exp $
C $Name: $
#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"
#ifdef ALLOW_AUTODIFF
# include "AUTODIFF_OPTIONS.h"
#endif
CBOP
C !ROUTINE: DO_ATMOSPHERIC_PHYS
C !INTERFACE:
SUBROUTINE DO_ATMOSPHERIC_PHYS(myTime, myIter, myThid)
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE DO_ATMOSPHERIC_PHYS
C | o Controlling routine for atmospheric physics and
C | parameterization
C *==========================================================*
C | o originally, part of S/R thermodynamics & forward_step
C *==========================================================*
C \ev
C !CALLING SEQUENCE:
C DO_ATMOSPHERIC_PHYS
C |
C |-- UPDATE_OCEAN_EXPORTS
C |-- UPDATE_EARTH_EXPORTS
C |-- UPDATE_CHEMISTRY_EXPORTS
C |-- FIZHI_WRAPPER
C |-- STEP_FIZHI_FG
C |-- FIZHI_UPDATE_TIME
C |
C |-- ATM_PHYS_DRIVER
C |
C |-- AIM_DO_PHYSICS
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "DYNVARS.h"
#ifdef ALLOW_AUTODIFF
# include "tamc.h"
#endif /* ALLOW_AUTODIFF */
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C myTime :: Current time in simulation
C myIter :: Current iteration number in simulation
C myThid :: my Thread Id number
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
C !LOCAL VARIABLES:
C == Local variables
C bi, bj :: tile indices
C i,j,k :: loop indices
INTEGER bi, bj
INTEGER i, j, k
_RL thetaRef
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_ENTER('DO_ATMOSPHERIC_PHYS',myThid)
#endif
IF ( fluidIsAir ) THEN
#ifdef ALLOW_AUTODIFF_TAMC
CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
#endif
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
C-- Compute virtual potential temperature anomaly (including water vapour
C effect), stored in rhoInSitu (similar to what is done for oceanic EOS)
DO k=1,Nr
IF ( select_rStar.GE.1 .OR. selectSigmaCoord.GE.1 ) THEN
C- isothermal (theta=const) reference state
thetaRef = thetaConst
ELSE
C- horizontally uniform (tRef) reference state
thetaRef = tRef(k)
ENDIF
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
rhoInSitu(i,j,k,bi,bj) =
& ( theta(i,j,k,bi,bj)
& *( salt(i,j,k,bi,bj)*atm_Rq + oneRL )
& - thetaRef )*maskC(i,j,k,bi,bj)
ENDDO
ENDDO
ENDDO
ENDDO
ENDDO
#ifdef ALLOW_AUTODIFF
ELSE
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO k=1,Nr
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
rhoInSitu(i,j,k,bi,bj) = 0.
ENDDO
ENDDO
ENDDO
ENDDO
ENDDO
#endif /* ALLOW_AUTODIFF */
ENDIF
#ifdef ALLOW_FIZHI
IF ( useFIZHI ) THEN
CALL TIMER_START('FIZHI [DO_ATMOSPHERIC_PHYS]',myThid)
CALL UPDATE_OCEAN_EXPORTS ( myTime, myIter, myThid )
CALL UPDATE_EARTH_EXPORTS ( myTime, myIter, myThid )
CALL UPDATE_CHEMISTRY_EXPORTS ( myTime, myIter, myThid )
CALL FIZHI_WRAPPER ( myTime, myIter, myThid )
CALL STEP_FIZHI_FG ( myTime, myIter, myThid, dTtracerLev(1) )
CALL FIZHI_UPDATE_TIME ( myIter, myThid, deltaTClock )
CALL TIMER_STOP ('FIZHI [DO_ATMOSPHERIC_PHYS]',myThid)
ENDIF
#endif /* ALLOW_FIZHI */
#ifdef ALLOW_ATM_PHYS
C Atmospheric Physics package - Atm_Phys - main driver
IF ( useAtm_Phys ) THEN
CALL TIMER_START('ATM_PHYS_DRIVER [DO_ATMOSPHERIC_PHYS]',myThid)
CALL ATM_PHYS_DRIVER( myTime, myIter, myThid )
CALL TIMER_STOP( 'ATM_PHYS_DRIVER [DO_ATMOSPHERIC_PHYS]',myThid)
ENDIF
#endif /* ALLOW_ATM_PHYS */
#ifdef ALLOW_AIM
IF ( useAIM ) THEN
C AIM - atmospheric intermediate model, physics package code.
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_CALL('AIM_DO_PHYSICS',myThid)
#endif
CALL TIMER_START('AIM_DO_PHYSICS [DO_ATMOSPHERIC_PHYS]',myThid)
CALL AIM_DO_PHYSICS( myTime, myIter, myThid )
CALL TIMER_STOP( 'AIM_DO_PHYSICS [DO_ATMOSPHERIC_PHYS]',myThid)
ENDIF
#endif /* ALLOW_AIM */
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_LEAVE('DO_ATMOSPHERIC_PHYS',myThid)
#endif
RETURN
END