C $Header: /u/gcmpack/MITgcm/pkg/openad/inner_do_loop.F,v 1.1 2015/07/03 21:32:49 heimbach Exp $
C $Name: $
#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"
#include "OPENAD_OPTIONS.h"
c#ifdef ALLOW_AUTODIFF
c# include "AUTODIFF_OPTIONS.h"
c#endif
#ifdef ALLOW_OBCS
# include "OBCS_OPTIONS.h"
#endif
#ifdef ALLOW_SEAICE
# include "SEAICE_OPTIONS.h"
#endif
#ifdef ALLOW_GENERIC_ADVDIFF
# include "GAD_OPTIONS.h"
#endif
#ifdef ALLOW_GMREDI
# include "GMREDI_OPTIONS.h"
#endif
#ifdef ALLOW_STREAMICE
# include "STREAMICE_OPTIONS.h"
#endif
#ifdef ALLOW_GGL90
# include "GGL90_OPTIONS.h"
#endif
#ifdef ALLOW_EXF
# include "EXF_OPTIONS.h"
#endif
#ifdef ALLOW_COST
# include "COST_OPTIONS.h"
#endif
#ifdef ALLOW_CTRL
# include "CTRL_OPTIONS.h"
#endif
c#ifdef ALLOW_ECCO
c# include "ECCO_OPTIONS.h"
c#endif
CBOP
C !ROUTINE: INNER_DO_LOOP
C !INTERFACE:
SUBROUTINE INNER_DO_LOOP( iloop, myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *================================================================*
C | SUBROUTINE the_loop_body
C | o Run the ocean model and evaluate the specified cost function.
C *================================================================*
C |
C | INNER_DO_LOOP is the toplevel routine for the Tangent Linear and
C | Adjoint Model Compiler (TAMC).
C | For this purpose the initialization
C | of the model was split into two parts. Those parameters that do
C | not depend on a specific model run are set in INITIALISE_FIXED,
C | whereas those that do depend on the specific realization are
C | initialized in INITIALISE_VARIA.
C | This routine is to be used in conjuction with the MITgcmuv
C | checkpoint 37.
C *================================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
c**************************************
#ifdef ALLOW_OPENAD
C-- The folowing header files are included in the_main_loop.F for TAF
C and might be needed here (where the iloop is done) for OpenAD
c# include "AUTODIFF_MYFIELDS.h"
c# include "GRID.h"
c# include "DYNVARS.h"
c# include "SURFACE.h"
c# include "FFIELDS.h"
c# include "EOS.h"
c# include "AUTODIFF.h"
c# ifdef ALLOW_GENERIC_ADVDIFF
c# include "GAD.h"
c# include "GAD_SOM_VARS.h"
c# endif
c# ifdef ALLOW_MOM_FLUXFORM
c# include "MOM_FLUXFORM.h"
c# endif
c# ifdef ALLOW_CD_CODE
c# include "CD_CODE_VARS.h"
c# endif
c# ifdef ALLOW_EXF
c# include "EXF_FIELDS.h"
c# ifdef ALLOW_BULKFORMULAE
c# include "EXF_CONSTANTS.h"
c# endif
c# endif /* ALLOW_EXF */
c# ifdef ALLOW_SEAICE
c# include "SEAICE_SIZE.h"
c# include "SEAICE.h"
c# include "SEAICE_PARAMS.h"
c# include "SEAICE_COST.h"
c# include "SEAICE_TRACER.h"
c# endif
c# ifdef ALLOW_SALT_PLUME
c# include "SALT_PLUME.h"
c# endif
c# ifdef ALLOW_THSICE
c# include "THSICE_SIZE.h"
c# include "THSICE_VARS.h"
c# include "THSICE_COST.h"
c# endif
c# ifdef ALLOW_EBM
c# include "EBM.h"
c# endif
c# ifdef ALLOW_RBCS
c# include "RBCS_SIZE.h"
c# include "RBCS_FIELDS.h"
c# endif
c# ifdef ALLOW_OFFLINE
c# include "OFFLINE.h"
c# endif
c# ifdef ALLOW_CG2D_NSA
c# include "CG2D.h"
c# endif
c# ifdef ALLOW_GGL90
c# include "GGL90.h"
c# endif
c# ifdef ALLOW_PROFILES
c# include "profiles.h"
c# endif
c# ifdef ALLOW_ECCO_EVOLUTION
c# ifdef ALLOW_ECCO
c# include "ecco_cost.h"
c# endif
c# endif
# ifdef ALLOW_CTRL
# include "CTRL_SIZE.h"
# include "ctrl.h"
# include "ctrl_dummy.h"
# include "CTRL_GENARR.h"
# include "CTRL_OBCS.h"
# endif
# ifdef ALLOW_COST
# include "cost.h"
# endif
# ifdef ALLOW_PTRACERS
# include "PTRACERS_SIZE.h"
# include "PTRACERS_FIELDS.h"
# include "PTRACERS_START.h"
# endif
# ifdef ALLOW_GCHEM
# include "GCHEM_FIELDS.h"
# endif
# ifdef ALLOW_CFC
# include "CFC.h"
# endif
# ifdef ALLOW_DIC
# include "DIC_VARS.h"
# include "DIC_LOAD.h"
# include "DIC_ATMOS.h"
# include "DIC_CTRL.h"
# include "DIC_COST.h"
# endif
# ifdef ALLOW_OBCS
# include "OBCS_PARAMS.h"
# include "OBCS_FIELDS.h"
# include "OBCS_SEAICE.h"
# ifdef ALLOW_PTRACERS
# include "OBCS_PTRACERS.h"
# endif
# endif
# ifdef ALLOW_SHELFICE
# include "SHELFICE.h"
# include "SHELFICE_COST.h"
# endif
# ifdef ALLOW_STREAMICE
# include "STREAMICE.h"
# include "STREAMICE_ADV.h"
# include "STREAMICE_BDRY.h"
# include "STREAMICE_CG.h"
# endif
#endif /* ALLOW_OPENAD */
c**************************************
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C note: under the multi-threaded model myIter and
C myTime are local variables passed around as routine
C arguments. Although this is fiddly it saves the need to
C impose additional synchronisation points when they are
C updated.
C myTime :: time counter for this thread
C myIter :: iteration counter for this thread
C myThid :: thread number for this instance of the routine.
INTEGER iloop
_RL myTime
INTEGER myIter
INTEGER myThid
#if (defined ALLOW_OPENAD) (defined ALLOW_OPENAD_DIVA)
C !FUNCTIONS:
C == Functions ==
C !LOCAL VARIABLES:
C == Local variables ==
INTEGER iloop1
INTEGER prod
CEOP
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_ENTER('INNER_DO_LOOP',myThid)
#endif
#ifdef ALLOW_OPENAD
C >>>>>>>>>>>>>>>>>>>>>>>>>>> LOOP <<<<<<<<<<<<<<<<<<<<<<<<<<<<
C >>>>>>>>>>>>>>>>>>>>>>>>>>> STARTS <<<<<<<<<<<<<<<<<<<<<<<<<<<<
DO iloop1 = 1, nTimeSteps
prod = (iloop-1)*nTimeSteps_l2+iloop1
#endif
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_CALL('FORWARD_STEP',myThid)
#endif
#ifdef ALLOW_ATM2D
CALL TIMER_START('FORWARD_STEP_ATM2D [INNER_DO_LOOP]',myThid)
#ifdef ALLOW_OPENAD
CALL FORWARD_STEP_ATM2D( prod, myTime, myIter, myThid )
#else
CALL FORWARD_STEP_ATM2D( iloop, myTime, myIter, myThid )
#endif
CALL TIMER_STOP ('FORWARD_STEP_ATM2D [INNER_DO_LOOP]',myThid)
#else
CALL TIMER_START('FORWARD_STEP [INNER_DO_LOOP]',myThid)
#ifdef ALLOW_OPENAD
CALL FORWARD_STEP( prod, myTime, myIter, myThid )
#else
CALL FORWARD_STEP( iloop, myTime, myIter, myThid )
#endif
CALL TIMER_STOP ('FORWARD_STEP [INNER_DO_LOOP]',myThid)
#endif
#ifdef ALLOW_OPENAD
ENDDO
C >>>>>>>>>>>>>>>>>>>>>>>>>>> LOOP <<<<<<<<<<<<<<<<<<<<<<<<<<<<
C >>>>>>>>>>>>>>>>>>>>>>>>>>> STOPS <<<<<<<<<<<<<<<<<<<<<<<<<<<<
#endif
#ifdef ALLOW_DEBUG
IF (debugMode) CALL DEBUG_LEAVE('INNER_DO_LOOP',myThid)
#endif
RETURN
#endif
END