--- MITgcm/model/src/do_statevars_diags.F 2004/12/03 00:24:58 1.3 +++ MITgcm/model/src/do_statevars_diags.F 2012/03/26 01:47:08 1.19 @@ -1,4 +1,4 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/model/src/do_statevars_diags.F,v 1.3 2004/12/03 00:24:58 jmc Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/model/src/do_statevars_diags.F,v 1.19 2012/03/26 01:47:08 dimitri Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" @@ -8,18 +8,16 @@ CBOP C !ROUTINE: DO_STATEVARS_DIAGS C !INTERFACE: - SUBROUTINE DO_STATEVARS_DIAGS( myTime, myIter, myThid ) + SUBROUTINE DO_STATEVARS_DIAGS( myTime, seqFlag, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* -C | SUBROUTINE DO_STATEVARS_DIAGS +C | SUBROUTINE DO_STATEVARS_DIAGS C | o Controlling routine for state variables diagnostics C *==========================================================* -C | Computing statistics of the model state (state-variables) -C | is done at this level (after updating the halo region), -C | as opposed to other diagnostic calls (fluxes, tendencies) -C | that remain within the computation sequence. -C | Note: IO are not supposed to be done at this level -C | but later (in DO_THE_MODEL_IO) +C | Computing diagnostics of the model state (state-variables) +C | is done at this level ; +C | by contrast, other diagnostics (fluxes, tendencies) +C | remain within the computation sequence. C *==========================================================* C \ev @@ -32,51 +30,107 @@ C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == -C myTime - Current time of simulation ( s ) -C myIter - Iteration number -C myThid - Thread number for this instance of the routine. +C myTime :: Current time of simulation ( s ) +C seqFlag :: flag that indicate where this S/R is called from: +C :: =0 called from the beginning of forward_step +C :: =1 called from the middle of forward_step +C :: =2 called from the end of forward_step +C myIter :: Iteration number +C myThid :: my Thread Id number _RL myTime + INTEGER seqFlag INTEGER myIter INTEGER myThid - CEOP +#ifdef ALLOW_DIAGNOSTICS C !LOCAL VARIABLES: -C == Local variables - INTEGER bi,bj +C == Local variables == +C selectVars :: select which group of dianostics variables to fill-in +C = 1 :: fill-in diagnostics for tracer variables only +C = 2 :: fill-in diagnostics for momentum variables only +C = 3 :: fill-in diagnostics for momentum & tracer variables +C = 4 :: fill-in state variable tendency diagnostics the second time +C bi,bj :: tile indices + INTEGER selectVars +#if defined(ALLOW_THSICE) || defined(ALLOW_LAND) + INTEGER bi, bj +#endif -#ifdef ALLOW_TIMEAVE -C-- Fill-in TimeAve pkg diagnostics (for state-variables) +C-- Fill-in Diagnostics pkg storage array (for state-variables) + IF ( usediagnostics ) THEN - DO bj=myByLo(myThid),myByHi(myThid) - DO bi=myBxLo(myThid),myBxHi(myThid) +C- select which group of state-var diagnostics to fill-in, +C depending on: where this S/R is called from (seqFlag) +C and stagger/synchronous TimeStep + selectVars = 0 + IF ( staggerTimeStep ) THEN + IF ( seqFlag.EQ.0 ) selectVars = 2 + IF ( seqFlag.EQ.1 ) selectVars = 1 + ELSE + IF ( seqFlag.EQ.0 ) selectVars = 3 + ENDIF + IF ( seqFlag.EQ.2 ) selectVars = 4 + CALL DIAGNOSTICS_FILL_STATE( selectVars, myIter, myThid ) - IF ( taveFreq.GT.0. ) THEN - CALL TIMEAVE_STATVARS(myTime, myIter, bi, bj, myThid) -# ifdef ALLOW_PTRACERS - IF ( usePTRACERS ) THEN - CALL PTRACERS_STATVARS(myTime, myIter, bi, bj, myThid) - ENDIF -# endif /* ALLOW_PTRACERS */ +#ifdef ALLOW_GENERIC_ADVDIFF + IF ( seqFlag.EQ.0 .AND. useGAD ) THEN + CALL GAD_DIAGNOSTICS_STATE( myTime, myIter, myThid ) ENDIF +#endif /* ALLOW_GENERIC_ADVDIFF */ -C-- End of bi,bj loop - ENDDO - ENDDO -#endif /* ALLOW_TIMEAVE */ +#ifdef ALLOW_PTRACERS + IF ( (selectVars.EQ.1 .OR. selectVars.EQ.3) + & .AND. usePTRACERS ) THEN + CALL PTRACERS_DIAGNOSTICS_STATE( myTime, myIter, myThid ) + ENDIF +#endif /* ALLOW_PTRACERS */ -#ifdef ALLOW_DIAGNOSTICS -C-- Fill-in Diagnostics pkg storage array (for state-variables) +#ifdef ALLOW_GMREDI + IF ( seqFlag.EQ.2 .AND. useGMRedi ) THEN + CALL GMREDI_DIAGNOSTICS_IMPL( myTime, myIter, myThid ) + ENDIF +#endif /* ALLOW_GMREDI */ - IF ( usediagnostics ) THEN - CALL DIAGNOSTICS_FILL_STATE(myThid) -# ifdef ALLOW_PTRACERS - IF (useptracers) THEN - CALL PTRACERS_FILL_DIAGNOSTICS(myThid) +#ifdef ALLOW_BBL + IF ( seqFlag.EQ.0 .AND. useBBL ) THEN + CALL BBL_DIAGNOSTICS_STATE( myTime, myIter, myThid ) ENDIF -# endif - ENDIf +#endif /* ALLOW_BBL */ + +#ifdef ALLOW_SEAICE + IF ( seqFlag.EQ.0 .AND. useSEAICE ) THEN + CALL SEAICE_DIAGNOSTICS_STATE( myTime, myIter, myThid ) + ENDIF +#endif /* ALLOW_SEAICE */ + +#ifdef ALLOW_THSICE + IF ( seqFlag.EQ.0 .AND. useThSIce ) THEN + DO bj=myByLo(myThid),myByHi(myThid) + DO bi=myBxLo(myThid),myBxHi(myThid) + CALL THSICE_DIAGNOSTICS_STATE( myTime,myIter,bi,bj,myThid ) + ENDDO + ENDDO + ENDIF +#endif /* ALLOW_THSICE */ +#ifdef ALLOW_LAND + IF ( seqFlag.EQ.0 .AND. useLand ) THEN + DO bj=myByLo(myThid),myByHi(myThid) + DO bi=myBxLo(myThid),myBxHi(myThid) + CALL LAND_DIAGNOSTICS_STATE( myTime,myIter, bi,bj, myThid ) + ENDDO + ENDDO + ENDIF +#endif /* ALLOW_LAND */ + +#ifdef ALLOW_MYPACKAGE + IF ( seqFlag.EQ.0 .AND. useMYPACKAGE ) THEN + CALL MYPACKAGE_DIAGNOSTICS_STATE( myTime, myIter, myThid ) + ENDIF +#endif /* ALLOW_MYPACKAGE */ + + ENDIf #endif /* ALLOW_DIAGNOSTICS */ RETURN