C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/model/src/main_do_loop.F,v 1.14 2013/08/03 17:40:35 jmc Exp $ C $Name: $ #include "PACKAGES_CONFIG.h" #include "CPP_OPTIONS.h" #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_CTRL # include "CTRL_OPTIONS.h" #endif CBOP C !ROUTINE: MAIN_DO_LOOP C !INTERFACE: SUBROUTINE MAIN_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 | MAIN_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_AUTODIFF # ifndef ALLOW_AUTODIFF_OPENAD c These includes are needed for c AD-checkpointing. c They provide the fields to be stored. # include "AUTODIFF_MYFIELDS.h" # include "GRID.h" # include "DYNVARS.h" # include "SURFACE.h" # include "FFIELDS.h" # include "EOS.h" # include "AUTODIFF.h" # ifdef ALLOW_GENERIC_ADVDIFF # include "GAD.h" # include "GAD_SOM_VARS.h" # endif # ifdef ALLOW_MOM_FLUXFORM # include "MOM_FLUXFORM.h" # endif # ifdef ALLOW_CD_CODE # include "CD_CODE_VARS.h" # endif # ifdef ALLOW_EXF # include "EXF_FIELDS.h" # ifdef ALLOW_BULKFORMULAE # include "EXF_CONSTANTS.h" # endif # endif /* ALLOW_EXF */ # ifdef ALLOW_SEAICE # include "SEAICE_SIZE.h" # include "SEAICE.h" # include "SEAICE_PARAMS.h" # include "SEAICE_COST.h" # include "SEAICE_TRACER.h" # endif # ifdef ALLOW_SALT_PLUME # include "SALT_PLUME.h" # endif # ifdef ALLOW_THSICE # include "THSICE_SIZE.h" # include "THSICE_VARS.h" # include "THSICE_COST.h" # endif # ifdef ALLOW_EBM # include "EBM.h" # endif # ifdef ALLOW_RBCS # include "RBCS_SIZE.h" # include "RBCS_FIELDS.h" # endif # ifdef ALLOW_OFFLINE # include "OFFLINE.h" # endif # ifdef ALLOW_CG2D_NSA # include "CG2D.h" # endif # ifdef ALLOW_DIVIDED_ADJOINT # ifdef ALLOW_USE_MPI # include "mpif.h" # endif # endif # include "tamc.h" # ifdef ALLOW_GGL90 # include "GGL90.h" # endif # ifdef ALLOW_PROFILES # include "profiles.h" # endif # ifdef ALLOW_ECCO_EVOLUTION # ifdef ALLOW_ECCO # include "ecco_cost.h" # endif # endif # endif /* undef ALLOW_AUTODIFF_OPENAD */ # ifdef ALLOW_CTRL # include "CTRL_SIZE.h" # include "ctrl.h" # include "ctrl_dummy.h" # include "CTRL_GENARR.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_AUTODIFF */ 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. _RL myTime INTEGER myIter INTEGER myThid C !FUNCTIONS: C == Functions == C !LOCAL VARIABLES: C == Local variables == INTEGER iloop CEOP #ifdef ALLOW_DEBUG IF (debugMode) CALL DEBUG_ENTER('MAIN_DO_LOOP',myThid) #endif #ifdef ALLOW_AUTODIFF_OPENAD C >>>>>>>>>>>>>>>>>>>>>>>>>>> LOOP <<<<<<<<<<<<<<<<<<<<<<<<<<<< C >>>>>>>>>>>>>>>>>>>>>>>>>>> STARTS <<<<<<<<<<<<<<<<<<<<<<<<<<<< DO iloop = 1, nTimeSteps #endif #ifdef ALLOW_DEBUG IF (debugMode) CALL DEBUG_CALL('FORWARD_STEP',myThid) #endif #ifdef ALLOW_ATM2D CALL TIMER_START('FORWARD_STEP_ATM2D [MAIN_DO_LOOP]',myThid) CALL FORWARD_STEP_ATM2D( iloop, myTime, myIter, myThid ) CALL TIMER_STOP ('FORWARD_STEP_ATM2D [MAIN_DO_LOOP]',myThid) #else CALL TIMER_START('FORWARD_STEP [MAIN_DO_LOOP]',myThid) CALL FORWARD_STEP( iloop, myTime, myIter, myThid ) CALL TIMER_STOP ('FORWARD_STEP [MAIN_DO_LOOP]',myThid) #endif #ifdef ALLOW_AUTODIFF_OPENAD ENDDO C >>>>>>>>>>>>>>>>>>>>>>>>>>> LOOP <<<<<<<<<<<<<<<<<<<<<<<<<<<< C >>>>>>>>>>>>>>>>>>>>>>>>>>> STOPS <<<<<<<<<<<<<<<<<<<<<<<<<<<< #endif #ifdef ALLOW_DEBUG IF (debugMode) CALL DEBUG_LEAVE('MAIN_DO_LOOP',myThid) #endif RETURN END