C $Header: /u/gcmpack/MITgcm/model/src/tracers_correction_step.F,v 1.18 2014/08/07 17:32:03 jmc Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" #include "CPP_OPTIONS.h" CBOP C !ROUTINE: TRACERS_CORRECTION_STEP C !INTERFACE: SUBROUTINE TRACERS_CORRECTION_STEP(myTime, myIter, myThid) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE TRACERS_CORRECTION_STEP C *==========================================================* C |1rst Part : Update T,S. C |part2: Adjustments & Diagnostics C | o Filter T,S (Shapiro Filter, Zonal_Filter) C | o Convective Adjustment C | o Diagmnostic of state variables (Time average) C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "DYNVARS.h" #ifdef ALLOW_GENERIC_ADVDIFF # include "GAD.h" #endif 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 #ifdef ALLOW_GENERIC_ADVDIFF C !LOCAL VARIABLES: C == Local variables INTEGER iMin,iMax INTEGER jMin,jMax INTEGER bi, bj CEOP #ifdef ALLOW_NONHYDROSTATIC IF ( implicitIntGravWave ) THEN DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) CALL TRACERS_IIGW_CORRECTION(bi,bj, myTime,myIter,myThid) ENDDO ENDDO ENDIF #endif /* ALLOW_NONHYDROSTATIC */ C--- 2nd Part : Adjustment. C C Static stability is calculated and the tracers are C convective adjusted where statically unstable. C-- Filter (and exchange) #ifdef ALLOW_SHAP_FILT IF (useSHAP_FILT) THEN CALL TIMER_START('SHAP_FILT_TS [TRC_CORR_STEP]',myThid) CALL SHAP_FILT_APPLY_TS( theta,salt, myTime, myIter, myThid ) CALL TIMER_STOP ('SHAP_FILT_TS [TRC_CORR_STEP]',myThid) ENDIF #endif #ifdef ALLOW_ZONAL_FILT IF (useZONAL_FILT) THEN CALL TIMER_START('ZONAL_FILT_TS [TRC_CORR_STEP]',myThid) CALL ZONAL_FILT_APPLY_TS( theta, salt, myThid ) CALL TIMER_STOP ('ZONAL_FILT_TS [TRC_CORR_STEP]',myThid) # ifdef ALLOW_PTRACERS C- apply to passive tracer fields IF (usePTRACERS) THEN CALL PTRACERS_ZONAL_FILT_APPLY( myThid ) ENDIF # endif ENDIF #endif /* ALLOW_ZONAL_FILT */ C -- Fill negative tracer values (for now, only if Fizhi is running) #ifdef ALLOW_FIZHI IF (useFIZHI .and. saltAdvScheme.eq.2) THEN CALL TIMER_START('SALT_FILL [TRC_CORR_STEP]',myThid) CALL SALT_FILL( uVel,vVel,salt,1,myTime,myIter,myThid ) CALL TIMER_STOP ('SALT_FILL [TRC_CORR_STEP]',myThid) ENDIF #endif DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) C-- Convectively adjust new fields to be statically stable iMin = 1 iMax = sNx jMin = 1 jMax = sNy #ifdef ALLOW_OPPS IF ( useOPPS ) THEN CALL OPPS_INTERFACE( I bi, bj, iMin, iMax, jMin, jMax, I myTime, myIter, myThid ) ELSEIF ( cAdjFreq .NE. 0. ) THEN #else /* ALLOW_OPPS */ IF ( cAdjFreq .NE. 0. ) THEN #endif /* ALLOW_OPPS */ CALL CONVECTIVE_ADJUSTMENT( I bi, bj, myTime, myIter, myThid ) ENDIF #ifdef ALLOW_MATRIX IF (useMATRIX) & CALL MATRIX_STORE_TENDENCY_IMP( bi, bj, myTime, myIter, myThid ) #endif C-- End of 2nd bi,bj loop ENDDO ENDDO #endif /* ALLOW_GENERIC_ADVDIFF */ RETURN END