Back to home page

MITgcm

 
 

    


File indexing completed on 2026-05-05 05:08:22 UTC

view on githubraw file Latest commit 3f0f10fc on 2026-05-04 14:55:37 UTC
6d54cf9ca1 Ed H*0001 #include "PACKAGES_CONFIG.h"
d8ea337c6c Patr*0002 #include "CPP_OPTIONS.h"
6d54cf9ca1 Ed H*0003 
517dbdc414 Jean*0004 #ifdef ALLOW_AUTODIFF
                0005 # include "AUTODIFF_OPTIONS.h"
                0006 #endif
83df00bce7 Patr*0007 #ifdef ALLOW_GENERIC_ADVDIFF
                0008 # include "GAD_OPTIONS.h"
                0009 #endif
685f7544b6 Patr*0010 #ifdef ALLOW_GGL90
                0011 # include "GGL90_OPTIONS.h"
                0012 #endif
9b184aa726 Patr*0013 #ifdef ALLOW_GMREDI
                0014 # include "GMREDI_OPTIONS.h"
                0015 #endif
65b69c6b17 Patr*0016 #ifdef ALLOW_OBCS
                0017 # include "OBCS_OPTIONS.h"
                0018 #endif
a7828ed4d5 Patr*0019 #ifdef ALLOW_THSICE
                0020 # include "THSICE_OPTIONS.h"
                0021 #endif
9b45bc1f6c Patr*0022 #ifdef ALLOW_SEAICE
                0023 # include "SEAICE_OPTIONS.h"
                0024 #endif
80fd556159 Ou W*0025 #ifdef ALLOW_SALT_PLUME
                0026 # include "SALT_PLUME_OPTIONS.h"
                0027 #endif
544a4ff6e0 Patr*0028 #ifdef ALLOW_PTRACERS
                0029 # include "PTRACERS_OPTIONS.h"
                0030 #endif
1dc3e353c5 Jean*0031 #ifdef ALLOW_GCHEM
                0032 # include "GCHEM_OPTIONS.h"
                0033 #endif
                0034 #ifdef ALLOW_DIC
                0035 # include "DIC_OPTIONS.h"
                0036 #endif
4e5fc818bf Matt*0037 #ifdef ALLOW_BLING
                0038 # include "BLING_OPTIONS.h"
                0039 #endif
9a00d4fc17 Gael*0040 #ifdef ALLOW_EXF
                0041 # include "EXF_OPTIONS.h"
                0042 #endif
376d4a0160 Patr*0043 #ifdef ALLOW_STREAMICE
                0044 # include "STREAMICE_OPTIONS.h"
                0045 #endif
9952f046d7 dngo*0046 #ifdef ALLOW_SHELFICE
                0047 # include "SHELFICE_OPTIONS.h"
                0048 #endif
517dbdc414 Jean*0049 #ifdef ALLOW_COST
                0050 # include "COST_OPTIONS.h"
                0051 #endif
c1fca7389f Gael*0052 #ifdef ALLOW_CTRL
                0053 # include "CTRL_OPTIONS.h"
                0054 #endif
30c7aa4d63 Gael*0055 #ifdef ALLOW_ECCO
                0056 # include "ECCO_OPTIONS.h"
                0057 #endif
80fd556159 Ou W*0058 #ifdef ALLOW_RBCS
                0059 # include "RBCS_OPTIONS.h"
                0060 #endif
d8ea337c6c Patr*0061 
9e647b4f24 Jean*0062 #define ALLOW_MOM_STEPPING
                0063 #if ( defined (ALLOW_AUTODIFF) && defined (ALLOW_OFFLINE) )
                0064 # undef ALLOW_MOM_STEPPING
                0065 #endif
                0066 
9366854e02 Chri*0067 CBOP
                0068 C     !ROUTINE: FORWARD_STEP
                0069 C     !INTERFACE:
b7d016da10 Alis*0070       SUBROUTINE FORWARD_STEP( iloop, myTime, myIter, myThid )
d8ea337c6c Patr*0071 
9366854e02 Chri*0072 C     !DESCRIPTION: \bv
adcc4b1a0c Jean*0073 C     *=================================================================
9366854e02 Chri*0074 C     | SUBROUTINE forward_step
adcc4b1a0c Jean*0075 C     | o Step forward in time the model variables for one time-step
                0076 C     *=================================================================
                0077 C     | The algorithm...
9366854e02 Chri*0078 C     |
adcc4b1a0c Jean*0079 C     | "Calculation of Gs"
                0080 C     | ===================
                0081 C     | This is where all the accelerations and tendencies (ie.
                0082 C     | physics, parameterizations etc...) are calculated
                0083 C     |   rho = rho ( theta[n], salt[n] )
                0084 C     |   b   = b(rho, theta)
                0085 C     |   K31 = K31 ( rho )
                0086 C     |   Gu[n] = Gu( u[n], v[n], wVel, b, ... )
                0087 C     |   Gv[n] = Gv( u[n], v[n], wVel, b, ... )
                0088 C     |   Gt[n] = Gt( theta[n], u[n], v[n], wVel, K31, ... )
                0089 C     |   Gs[n] = Gs( salt[n], u[n], v[n], wVel, K31, ... )
9366854e02 Chri*0090 C     |
adcc4b1a0c Jean*0091 C     | "Time-stepping" or "Prediction"
                0092 C     | ================================
                0093 C     | The models variables are stepped forward with the appropriate
                0094 C     | time-stepping scheme (currently we use Adams-Bashforth II)
                0095 C     | - For momentum, the result is always *only* a "prediction"
                0096 C     | in that the flow may be divergent and will be "corrected"
                0097 C     | later with a surface pressure gradient.
                0098 C     | - Normally for tracers the result is the new field at time
                0099 C     | level [n+1} *BUT* in the case of implicit diffusion the result
                0100 C     | is also *only* a prediction.
                0101 C     | - We denote "predictors" with an asterisk (*).
                0102 C     |   U* = U[n] + dt x ( 3/2 Gu[n] - 1/2 Gu[n-1] )
                0103 C     |   V* = V[n] + dt x ( 3/2 Gv[n] - 1/2 Gv[n-1] )
                0104 C     |   theta[n+1] = theta[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
                0105 C     |   salt[n+1]  = salt[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
                0106 C     | With implicit diffusion:
                0107 C     |   theta* = theta[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
                0108 C     |   salt*  = salt[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
                0109 C     |   (1 + dt * K * d_zz) theta[n+1] = theta*
                0110 C     |   (1 + dt * K * d_zz) salt[n+1]  = salt*
                0111 C     |
                0112 C     | "Correction Step"
                0113 C     | =================
                0114 C     | Here we update the horizontal velocities with the surface
                0115 C     | pressure such that the resulting flow is either consistent
                0116 C     | with the free-surface evolution or the rigid-lid:
                0117 C     |   U[n] = U* + dt x d/dx P
                0118 C     |   V[n] = V* + dt x d/dy P
                0119 C     |   W[n] = W* + dt x d/dz P  (NH mode)
                0120 C     *=================================================================
9366854e02 Chri*0121 C     \ev
d8ea337c6c Patr*0122 
8f92343d9b Jean*0123 C     !CALLING SEQUENCE:
                0124 C     FORWARD_STEP
                0125 C       |
                0126 C       |-- AUTODIFF_INADMODE_UNSET
                0127 C       |
9952f046d7 dngo*0128 C       |-- SHELFICE_REMESHING
                0129 C       |
8f92343d9b Jean*0130 C       |-- RESET_NLFS_VARS
                0131 C       |-- UPDATE_R_STAR
                0132 C       |-- UPDATE_SURF_DR
                0133 C       |
                0134 C       |-- PTRACERS_SWITCH_ONOFF
                0135 C       |
                0136 C       |-- DIAGNOSTICS_SWITCH_ONOFF
                0137 C       |-- DO_STATEVARS_DIAGS
                0138 C       |
                0139 C       |-- NEST_CHILD_SETMEMO
                0140 C       |-- NEST_PARENT_IO_1
                0141 C       |
                0142 C       |-- LOAD_FIELDS_DRIVER
                0143 C       |
                0144 C       |-- BULKF_FORCING
                0145 C       |
                0146 C       |-- CHEAPAML
                0147 C       |
                0148 C       |-- CTRL_MAP_FORCING
                0149 C       |-- DUMMY_IN_STEPPING
                0150 C       |
f533a5790a Jean*0151 C       |-- CPL_EXPORT_IMPORT_DATA
8f92343d9b Jean*0152 C       |
                0153 C       |-- OASIS_PUT
                0154 C       |-- OASIS_GET
                0155 C       |
                0156 C       |-- EBM_DRIVER
                0157 C       |
                0158 C       |-- DO_ATMOSPHERIC_PHYS
                0159 C       |
                0160 C       |-- DO_OCEANIC_PHYS
                0161 C       |
9400d89b34 Dani*0162 C       |-- STREAMICE_TIMESTEP
8f92343d9b Jean*0163 C       |
                0164 C       |-- GCHEM_CALC_TENDENCY
                0165 C       |
                0166 C       |-- LONGSTEP_AVERAGE
                0167 C       |-- LONGSTEP_THERMODYNAMICS
                0168 C       |
                0169 C       |-- THERMODYNAMICS
                0170 C       |
                0171 C       |-- LONGSTEP_AVERAGE
6a828494d3 Jean*0172 C       |-- LONGSTEP_THERMODYNAMICS
8f92343d9b Jean*0173 C       |
                0174 C       |-- DO_STAGGER_FIELDS_EXCHANGES
                0175 C       |
                0176 C       |-- DYNAMICS
                0177 C       |
                0178 C       |-- MNC_UPDATE_TIME
                0179 C       |
dc2ebbdaf0 Jean*0180 C       |-- OFFLINE_FIELDS_LOAD
                0181 C       |
8f92343d9b Jean*0182 C       |-- UPDATE_R_STAR
                0183 C       |-- UPDATE_SIGMA
                0184 C       |-- UPDATE_SURF_DR
                0185 C       |-- UPDATE_CG2D
                0186 C       |
                0187 C       |-- SHAP_FILT_APPLY_UV
                0188 C       |-- ZONAL_FILT_APPLY_UV
                0189 C       |
                0190 C       |-- SOLVE_FOR_PRESSURE
                0191 C       |
                0192 C       |-- MOMENTUM_CORRECTION_STEP
                0193 C       |
                0194 C       |-- INTEGR_CONTINUITY
                0195 C       |
                0196 C       |-- CALC_R_STAR
                0197 C       |-- CALC_SURF_DR
                0198 C       |
                0199 C       |-- DO_STAGGER_FIELDS_EXCHANGES
                0200 C       |
                0201 C       |-- DO_STATEVARS_DIAGS
                0202 C       |
                0203 C       |-- THERMODYNAMICS
                0204 C       |
                0205 C       |-- TRACERS_CORRECTION_STEP
                0206 C       |
                0207 C       |-- LONGSTEP_AVERAGE
                0208 C       |-- LONGSTEP_THERMODYNAMICS
                0209 C       |
                0210 C       |-- GCHEM_FORCING_SEP
                0211 C       |
                0212 C       |-- DO_FIELDS_BLOCKING_EXCHANGES
                0213 C       |
                0214 C       |-- DO_STATEVARS_DIAGS
                0215 C       |
                0216 C       |-- GRIDALT_UPDATE
                0217 C       |-- STEP_FIZHI_CORR
                0218 C       |
                0219 C       |-- FLT_MAIN
                0220 C       |
                0221 C       |-- NEST_PARENT_IO_2
                0222 C       |-- NEST_CHILD_TRANSP
                0223 C       |
                0224 C       |-- MONITOR
                0225 C       |
                0226 C       |-- COST_TILE
                0227 C       |
                0228 C       |-- DO_THE_MODEL_IO
                0229 C       |
                0230 C       |-- PTRACERS_RESET
                0231 C       |
                0232 C       |-- DO_WRITE_PICKUP
                0233 C       |
                0234 C       |-- AUTODIFF_INADMODE_SET
                0235 C       |
                0236 C       |-- SHOWFLOPS_INLOOP
                0237 
9366854e02 Chri*0238 C     !USES:
                0239       IMPLICIT NONE
                0240 C     == Global variables ==
d8ea337c6c Patr*0241 #include "SIZE.h"
                0242 #include "EEPARAMS.h"
                0243 #include "PARAMS.h"
                0244 #include "DYNVARS.h"
                0245 
b81731e160 Ed H*0246 #ifdef HAVE_SIGREG
                0247 #include "SIGREG.h"
                0248 #endif
                0249 
b649ac9bae Jean*0250 #ifdef ALLOW_SHAP_FILT
47738741e7 Jean*0251 # include "SHAP_FILT.h"
b649ac9bae Jean*0252 #endif
                0253 #ifdef ALLOW_ZONAL_FILT
47738741e7 Jean*0254 # include "ZONAL_FILT.h"
b649ac9bae Jean*0255 #endif
                0256 
4e66ab0b67 Oliv*0257 #ifdef ALLOW_LONGSTEP
                0258 # include "LONGSTEP_PARAMS.h"
                0259 # include "LONGSTEP.h"
                0260 #endif
                0261 
517dbdc414 Jean*0262 #ifdef ALLOW_AUTODIFF
47738741e7 Jean*0263 # include "FFIELDS.h"
bef5cbe0ec Patr*0264 # include "SURFACE.h"
47738741e7 Jean*0265 
7c50f07931 Mart*0266 # ifdef ALLOW_AUTODIFF_TAMC
                0267 #  include "tamc.h"
                0268 # endif
0513668de6 Gael*0269 # ifdef ALLOW_CTRL
                0270 #  include "CTRL_SIZE.h"
4d72283393 Mart*0271 #  include "CTRL.h"
edcd27be69 Mart*0272 #  include "CTRL_DUMMY.h"
c1fca7389f Gael*0273 #  include "CTRL_GENARR.h"
4948b10fac Gael*0274 #  include "CTRL_OBCS.h"
0513668de6 Gael*0275 # endif
                0276 # ifdef ALLOW_COST
                0277 #  include "cost.h"
                0278 # endif
345f7357c1 Gael*0279 # ifdef ALLOW_ECCO
                0280 #  include "ecco_cost.h"
                0281 # endif
7103bd8015 Patr*0282 # include "EOS.h"
616600b8d2 Patr*0283 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
cdc9f269ae Patr*0284 #  include "GRID.h"
                0285 # endif
685f7544b6 Patr*0286 # ifdef ALLOW_GMREDI
                0287 #  include "GMREDI.h"
                0288 # endif
95c7d150a4 Ed H*0289 # ifdef ALLOW_EXF
33c873885d Jean*0290 #  ifdef ALLOW_BULKFORMULAE
798a745844 Jean*0291 #   include "EXF_CONSTANTS.h"
de416ebcde Patr*0292 #  endif
67647493ca Jean*0293 #  include "EXF_INTERP_SIZE.h"
                0294 #  include "EXF_FIELDS.h"
de416ebcde Patr*0295 # endif
685f7544b6 Patr*0296 # ifdef ALLOW_CD_CODE
                0297 #  include "CD_CODE_VARS.h"
                0298 # endif
                0299 # ifdef ALLOW_GENERIC_ADVDIFF
                0300 #  include "GAD.h"
                0301 #  include "GAD_SOM_VARS.h"
                0302 # endif
                0303 # ifdef ALLOW_GGL90
                0304 #  include "GGL90.h"
                0305 # endif
cf2549e769 Patr*0306 # ifdef ALLOW_PTRACERS
636477d15b Jean*0307 #  include "PTRACERS_SIZE.h"
85f77391e5 Jean*0308 #  include "PTRACERS_FIELDS.h"
cf2549e769 Patr*0309 # endif
529eea311c Gael*0310 # ifdef ALLOW_GCHEM
1dc3e353c5 Jean*0311 #  include "GCHEM_SIZE.h"
529eea311c Gael*0312 #  include "GCHEM_FIELDS.h"
                0313 # endif
                0314 # ifdef ALLOW_CFC
                0315 #  include "CFC.h"
                0316 # endif
                0317 # ifdef ALLOW_DIC
                0318 #  include "DIC_VARS.h"
                0319 #  include "DIC_LOAD.h"
                0320 #  include "DIC_ATMOS.h"
fc62302ca1 Patr*0321 #  include "DIC_COST.h"
529eea311c Gael*0322 # endif
f09d2da379 Jean*0323 # ifdef ALLOW_BLING
                0324 #  include "BLING_VARS.h"
                0325 #  include "BLING_LOAD.h"
                0326 # endif
65b69c6b17 Patr*0327 # ifdef ALLOW_OBCS
6f4cf52d27 Dimi*0328 #  include "OBCS_PARAMS.h"
a9eb030de2 Jean*0329 #  include "OBCS_FIELDS.h"
                0330 #  include "OBCS_SEAICE.h"
65b69c6b17 Patr*0331 #  ifdef ALLOW_PTRACERS
                0332 #   include "OBCS_PTRACERS.h"
                0333 #  endif
                0334 # endif
c567874792 Patr*0335 # ifdef ALLOW_THSICE
a7828ed4d5 Patr*0336 #  include "THSICE_PARAMS.h"
                0337 #  include "THSICE_SIZE.h"
c567874792 Patr*0338 #  include "THSICE_VARS.h"
a7828ed4d5 Patr*0339 #  include "THSICE_COST.h"
c567874792 Patr*0340 # endif
9b45bc1f6c Patr*0341 # ifdef ALLOW_SEAICE
a2c8840cf9 Jean*0342 #  include "SEAICE_SIZE.h"
3f0f10fc37 Mart*0343 #  include "SEAICE_GRID.h"
9b45bc1f6c Patr*0344 #  include "SEAICE.h"
34ea64e027 Patr*0345 #  include "SEAICE_COST.h"
9b45bc1f6c Patr*0346 # endif
56b3a0d0fa Patr*0347 # ifdef ALLOW_SALT_PLUME
                0348 #  include "SALT_PLUME.h"
                0349 # endif
9c41af81f6 Timo*0350 # ifdef ALLOW_DOWN_SLOPE
                0351 #  include "DWNSLP_SIZE.h"
                0352 #  include "DWNSLP_VARS.h"
                0353 # endif
3e86393e2c Patr*0354 # ifdef ALLOW_SHELFICE
                0355 #  include "SHELFICE.h"
                0356 #  include "SHELFICE_COST.h"
                0357 # endif
376d4a0160 Patr*0358 # ifdef ALLOW_STREAMICE
                0359 #  include "STREAMICE.h"
                0360 #  include "STREAMICE_ADV.h"
                0361 #  include "STREAMICE_BDRY.h"
                0362 #  include "STREAMICE_CG.h"
                0363 # endif
d8206d87ee Patr*0364 # ifdef ALLOW_EBM
                0365 #  include "EBM.h"
                0366 # endif
9b184aa726 Patr*0367 # ifdef ALLOW_KPP
                0368 #  include "KPP.h"
                0369 # endif
cc747f5a7a Patr*0370 # ifdef ALLOW_RBCS
de7a0e15d8 Jean*0371 #  include "RBCS_SIZE.h"
                0372 #  include "RBCS_FIELDS.h"
cc747f5a7a Patr*0373 # endif
9683f9bbcc Patr*0374 # ifdef ALLOW_OFFLINE
                0375 #  include "OFFLINE.h"
                0376 # endif
aecc8b0f47 Mart*0377 # if (defined ALLOW_CG2D_NSA || defined NONLIN_FRSURF || \
                0378       defined ALLOW_DEPTH_CONTROL)
55d9234027 Patr*0379 #  include "CG2D.h"
                0380 # endif
517dbdc414 Jean*0381 #endif /* ALLOW_AUTODIFF */
d8ea337c6c Patr*0382 
b4daa24319 Shre*0383 #ifdef ALLOW_TAPENADE
                0384 c# ifdef ALLOW_KPP
                0385 c#  include "KPP_PARAMS.h"
                0386 c# endif
                0387 # ifdef ALLOW_MOM_FLUXFORM
                0388 #  include "MOM_FLUXFORM.h"
                0389 # endif
                0390 # ifdef ALLOW_EXF
                0391 #  include "EXF_PARAM.h"
                0392 #  include "EXF_INTERP_PARAM.h"
                0393 # endif
                0394 #endif /* ALLOW_TAPENADE */
                0395 
455a90837c Jean*0396 C     !INPUT/OUTPUT PARAMETERS:
9366854e02 Chri*0397 C     == Routine arguments ==
529408dc72 Jean*0398 C     note: under the multi-threaded model myIter and
                0399 C           myTime are local variables passed around as routine
                0400 C           arguments. Although this is fiddly it saves the need to
                0401 C           impose additional synchronisation points when they are
b7d016da10 Alis*0402 C           updated.
455a90837c Jean*0403 C     myTime :: time counter for this thread
                0404 C     myIter :: iteration counter for this thread
                0405 C     myThid :: thread number for this instance of the routine.
9fcf571bcd Jean*0406       INTEGER iloop
                0407       _RL     myTime
455a90837c Jean*0408       INTEGER myIter
                0409       INTEGER myThid
9fcf571bcd Jean*0410 
455a90837c Jean*0411 C     !LOCAL VARIABLES:
9fcf571bcd Jean*0412 C     == Local variables ==
455a90837c Jean*0413 C     modelEnd  :: true if reaching the end of the run
4e66ab0b67 Oliv*0414 C     myTimeBeg :: time at beginning of time step (needed by longstep)
                0415 C     myIterBeg :: iteration number at beginning of time step
455a90837c Jean*0416       LOGICAL modelEnd
ea669e205e Jean*0417 #ifdef ALLOW_LONGSTEP
fda3710353 Oliv*0418       INTEGER myIterBeg
                0419       _RL myTimeBeg
ea669e205e Jean*0420 #endif /* ALLOW_LONGSTEP */
9366854e02 Chri*0421 CEOP
d8ea337c6c Patr*0422 
49e3578e36 Ed H*0423 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0424       IF (debugMode) CALL DEBUG_ENTER('FORWARD_STEP',myThid)
73ead277e0 Alis*0425 #endif
                0426 
517dbdc414 Jean*0427 #ifdef ALLOW_AUTODIFF
cee16b76ae Dimi*0428 C--   Reset the model iteration counter and the model time.
51d88069bf Jean*0429       myIter = nIter0 + (iloop-1)
7c3b863339 Jean*0430       myTime = startTime + deltaTClock*(iLoop-1)
d8ea337c6c Patr*0431 #endif
                0432 
a10c595eb6 Timo*0433 #ifdef ALLOW_AUTODIFF
                0434       CALL AUTODIFF_INADMODE_UNSET( myTime, myIter, myThid )
                0435 #endif
                0436 
ea669e205e Jean*0437 #ifdef ALLOW_LONGSTEP
4e66ab0b67 Oliv*0438 C     store this for longstep_average with staggerTimeStep
fda3710353 Oliv*0439 C     which is called after myIter and myTime are incremented
                0440 C     but needs iter/time at beginning of time step
4e66ab0b67 Oliv*0441       myIterBeg = myIter
                0442       myTimeBeg = myTime
ea669e205e Jean*0443 #endif /* ALLOW_LONGSTEP */
4e66ab0b67 Oliv*0444 
32117771cc Patr*0445 #ifdef ALLOW_AUTODIFF_TAMC
                0446 c**************************************
                0447 #include "checkpoint_lev1_directives.h"
32af943b8a Patr*0448 #include "checkpoint_lev1_template.h"
32117771cc Patr*0449 c**************************************
67a1e439d8 Patr*0450 #endif
6424ee9bc0 Curt*0451 
9952f046d7 dngo*0452 #ifdef ALLOW_SHELFICE_REMESHING
                0453       IF ( useShelfIce ) THEN
                0454 C--   Remesh shelfice
                0455         CALL TIMER_START('SHELFICE_REMESHING     [FORWARD_STEP]',myThid)
                0456         CALL SHELFICE_REMESHING ( myTime, myIter, myThid )
                0457         CALL TIMER_STOP('SHELFICE_REMESHING     [FORWARD_STEP]',myThid)
                0458       ENDIF
                0459 #endif /* ALLOW_SHELFICE_REMESHING */
                0460 
0bcf1b56f4 Jean*0461 C--   Reset geometric factors (hFacC,W,S & recip_hFac) to their current values:
                0462 C     added to simplify adjoint derivation - no effect in forward run
72a058b866 Gael*0463 #ifdef NONLIN_FRSURF
517dbdc414 Jean*0464 #ifndef ALLOW_AUTODIFF
0bcf1b56f4 Jean*0465       IF ( doResetHFactors ) THEN
                0466 #endif
ccbf39d1a4 Jean*0467        CALL RESET_NLFS_VARS( myTime, myIter, myThid )
72a058b866 Gael*0468        IF ( select_rStar.GT.0 ) THEN
                0469 # ifndef DISABLE_RSTAR_CODE
                0470 # ifdef ALLOW_AUTODIFF_TAMC
35d3d94e31 Jean*0471 CADJ STORE rStarFacC, rStarFacS, rStarFacW =
ced23bb277 Gael*0472 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
72a058b866 Gael*0473 # endif
                0474         CALL TIMER_START('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
                0475         CALL UPDATE_R_STAR( .FALSE., myTime, myIter, myThid )
                0476         CALL TIMER_STOP ('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
                0477 # endif /* DISABLE_RSTAR_CODE */
                0478        ELSE
                0479 #ifdef ALLOW_AUTODIFF_TAMC
                0480 CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
ced23bb277 Gael*0481 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
72a058b866 Gael*0482 #endif
                0483         CALL TIMER_START('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
                0484         CALL UPDATE_SURF_DR( .FALSE., myTime, myIter, myThid )
                0485         CALL TIMER_STOP ('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
                0486        ENDIF
0bcf1b56f4 Jean*0487 #ifdef ALLOW_AUTODIFF_TAMC
ced23bb277 Gael*0488 CADJ STORE hFacC, hFacS, hFacW =
                0489 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
                0490 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW  =
                0491 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
45ae106d3b Jean*0492 #endif
                0493 #ifndef ALLOW_AUTODIFF
0bcf1b56f4 Jean*0494       ENDIF
                0495 #endif
72a058b866 Gael*0496 #endif /* NONLIN_FRSURF */
                0497 
7bfcf7940f Jean*0498 #ifdef ALLOW_PTRACERS
                0499 C--   Switch on/off individual tracer time-stepping
                0500       IF ( usePTRACERS ) THEN
                0501         CALL PTRACERS_SWITCH_ONOFF( myTime, myIter, myThid )
                0502       ENDIF
                0503 #endif /* ALLOW_PTRACERS */
                0504 
be7aceba73 Jean*0505 C--   Switch on/off diagnostics for snap-shot output:
                0506 #ifdef ALLOW_DIAGNOSTICS
                0507       IF ( useDiagnostics ) THEN
41c4545f8f Jean*0508         CALL DIAGNOSTICS_SWITCH_ONOFF( 1, myTime, myIter, myThid )
b5c2f2589c Jean*0509 C--   State-variables diagnostics
                0510         CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0511         CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
                0512         CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0513       ENDIF
7bfcf7940f Jean*0514 #endif /* ALLOW_DIAGNOSTICS */
b5c2f2589c Jean*0515 
ba9a45d563 Jean*0516 #ifdef ALLOW_NEST_CHILD
                0517       IF ( useNEST_CHILD) THEN
8440e8ae5d Jean*0518         CALL NEST_CHILD_SETMEMO( myTime, myIter, myThid )
ba9a45d563 Jean*0519       ENDIF
                0520 #endif /* ALLOW_NEST_CHILD */
                0521 
                0522 #ifdef ALLOW_NEST_PARENT
                0523       IF ( useNEST_PARENT) THEN
                0524         CALL NEST_PARENT_IO_1( myTime, myIter, myThid )
                0525       ENDIF
                0526 #endif /* ALLOW_NEST_PARENT */
                0527 
529408dc72 Jean*0528 C--   Call driver to load external forcing fields from file
                0529 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0530       IF (debugMode) CALL DEBUG_CALL('LOAD_FIELDS_DRIVER',myThid)
529408dc72 Jean*0531 #endif
13783cb644 Patr*0532 #ifdef ALLOW_AUTODIFF_TAMC
                0533 cph Important STORE that avoids hidden recomp. of load_fields_driver
8a7ca847ff Patr*0534 CADJ STORE theta      = comlev1, key = ikey_dynamics,
                0535 CADJ &     kind = isbyte
35d3d94e31 Jean*0536 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics,
8a7ca847ff Patr*0537 CADJ &     kind = isbyte
13783cb644 Patr*0538 #endif
529408dc72 Jean*0539       CALL TIMER_START('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)
                0540       CALL LOAD_FIELDS_DRIVER( myTime, myIter, myThid )
                0541       CALL TIMER_STOP ('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)
                0542 
40ad671a6b Jean*0543 C--   Call Bulk-Formulae forcing package
7753507405 Curt*0544 #ifdef ALLOW_BULK_FORCE
10e4bbdd7f Jean*0545       IF ( useBulkForce ) THEN
49e3578e36 Ed H*0546 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0547         IF (debugMode) CALL DEBUG_CALL('BULKF_FORCING',myThid)
73ead277e0 Alis*0548 #endif
529408dc72 Jean*0549         CALL TIMER_START('BULKF_FORCING       [FORWARD_STEP]',myThid)
10e4bbdd7f Jean*0550 C-    calculate qnet and empmr (and wind stress)
529408dc72 Jean*0551         CALL BULKF_FORCING( myTime, myIter, myThid )
                0552         CALL TIMER_STOP ('BULKF_FORCING       [FORWARD_STEP]',myThid)
40ad671a6b Jean*0553       ENDIF
b2498468b3 Jean*0554 #endif /* ALLOW_BULK_FORCE */
33c873885d Jean*0555 
86f14fa6df Jean*0556 C--   Call external chepaml forcing package
                0557 #ifdef ALLOW_CHEAPAML
                0558       IF ( useCheapAML  ) THEN
                0559 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0560         IF (debugMode) CALL DEBUG_CALL('CHEAPAML',myThid)
86f14fa6df Jean*0561 #endif
9e647b4f24 Jean*0562         CALL TIMER_START('CHEAPAML      [FORWARD_STEP]',myThid)
86f14fa6df Jean*0563 C-    calculate qnet (and wind stress)
8440e8ae5d Jean*0564         CALL CHEAPAML( myTime, myIter,myThid )
9e647b4f24 Jean*0565         CALL TIMER_STOP ('CHEAPAML      [FORWARD_STEP]',myThid)
86f14fa6df Jean*0566       ENDIF
                0567 #endif /*ALLOW_CHEAPAML */
                0568 
a424c359ed Gael*0569 #ifdef ALLOW_CTRL
35d3d94e31 Jean*0570 C--   Add control vector for forcing and parameter fields
25c5ed8154 Gael*0571       IF ( useCTRL ) THEN
                0572        CALL TIMER_START('CTRL_MAP_FORCING  [FORWARD_STEP]',myThid)
                0573        CALL CTRL_MAP_FORCING( myTime, myIter, myThid )
                0574        CALL TIMER_STOP ('CTRL_MAP_FORCING  [FORWARD_STEP]',myThid)
                0575       ENDIF
448ff6251a Patr*0576 #endif
6424ee9bc0 Curt*0577 
517dbdc414 Jean*0578 #ifdef ALLOW_AUTODIFF_MONITOR
8f0b59c61c Patr*0579       CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )
176ce185cd Step*0580 #endif
                0581 
c1b6df074d Jean*0582 #ifdef COMPONENT_MODULE
904dd2a012 Jean*0583       IF ( useCoupler ) THEN
c1b6df074d Jean*0584 C      Post coupling data that I export.
                0585 C      Read in coupling data that I import.
                0586          CALL TIMER_START('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
f533a5790a Jean*0587          CALL CPL_EXPORT_IMPORT_DATA( myTime, myIter, myThid )
c1b6df074d Jean*0588          CALL TIMER_STOP ('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
529408dc72 Jean*0589       ENDIF
c1b6df074d Jean*0590 #endif /* COMPONENT_MODULE */
696c4221e9 Mart*0591 #ifdef ALLOW_OASIS
                0592       IF ( useOASIS ) THEN
                0593        CALL TIMER_START('OASIS_PUT-GET  [FORWARD_STEP]',myThid)
                0594 C      Post coupling data that I export.
                0595        CALL OASIS_PUT( myTime, myIter, myThid )
                0596 C      Read in coupling data that I import.
                0597        CALL OASIS_GET( myTime, myIter, myThid )
                0598        CALL TIMER_STOP ('OASIS_PUT-GET  [FORWARD_STEP]',myThid)
                0599       ENDIF
                0600 #endif /* ALLOW_OASIS */
                0601 
d8206d87ee Patr*0602 #ifdef ALLOW_EBM
529408dc72 Jean*0603       IF ( useEBM ) THEN
d8206d87ee Patr*0604 # ifdef ALLOW_DEBUG
8440e8ae5d Jean*0605         IF (debugMode) CALL DEBUG_CALL('EBM',myThid)
d8206d87ee Patr*0606 # endif
8440e8ae5d Jean*0607         CALL TIMER_START('EBM                [FORWARD_STEP]',myThid)
                0608         CALL EBM_DRIVER ( myTime, myIter, myThid )
                0609         CALL TIMER_STOP ('EBM                [FORWARD_STEP]',myThid)
529408dc72 Jean*0610       ENDIF
                0611 #endif /* ALLOW_EBM */
d8206d87ee Patr*0612 
9c41af81f6 Timo*0613 #ifdef ALLOW_AUTODIFF_TAMC
                0614 C******************************************************
                0615 C     Store surface forcing fields if required to avoid
                0616 C     calling load_fields_driver in forward_step_ad
                0617 # include "check_lev1_dir_forcing.h"
                0618 C******************************************************
                0619 #endif /* ALLOW_AUTODIFF_TAMC */
                0620 
c8e3a3b543 Jean*0621 C--     Step forward fields and calculate time tendency terms.
                0622 
                0623 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0624       IF (debugMode) CALL DEBUG_CALL('DO_ATMOSPHERIC_PHYS',myThid)
c8e3a3b543 Jean*0625 #endif
529408dc72 Jean*0626       CALL TIMER_START('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
                0627       CALL DO_ATMOSPHERIC_PHYS( myTime, myIter, myThid )
                0628       CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
c8e3a3b543 Jean*0629 
9b184aa726 Patr*0630 #ifdef ALLOW_AUTODIFF_TAMC
                0631 # ifdef ALLOW_KPP
aecc8b0f47 Mart*0632 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics, kind = isbyte
38b71af82a Patr*0633 # endif /* ALLOW_KPP */
aecc8b0f47 Mart*0634 CADJ STORE EmPmR      = comlev1, key = ikey_dynamics, kind = isbyte
                0635 CADJ STORE PmEpR      = comlev1, key = ikey_dynamics, kind = isbyte
b919404dfb Patr*0636 # ifdef ALLOW_OBCS
aecc8b0f47 Mart*0637 CADJ STORE salt       = comlev1, key = ikey_dynamics, kind = isbyte
                0638 CADJ STORE totphihyd  = comlev1, key = ikey_dynamics, kind = isbyte
38b71af82a Patr*0639 # endif /* ALLOW_OBCS */
49a23c9cb2 Patr*0640 # ifdef ALLOW_PTRACERS
aecc8b0f47 Mart*0641 CADJ STORE pTracer    = comlev1, key = ikey_dynamics, kind = isbyte
38b71af82a Patr*0642 # endif /* ALLOW_PTRACERS */
0bcf1b56f4 Jean*0643 # ifdef ALLOW_DEPTH_CONTROL
aecc8b0f47 Mart*0644 CADJ STORE hFacC      = comlev1, key = ikey_dynamics, kind = isbyte
69361556c2 Mart*0645 #  ifdef ALLOW_SEAICE
                0646 CADJ STORE hFacS      = comlev1, key = ikey_dynamics, kind = isbyte
                0647 CADJ STORE hFacW      = comlev1, key = ikey_dynamics, kind = isbyte
                0648 CADJ STORE recip_hFacC= comlev1, key = ikey_dynamics, kind = isbyte
                0649 #  endif
cdc9f269ae Patr*0650 # endif
9b184aa726 Patr*0651 #endif /* ALLOW_AUTODIFF_TAMC */
                0652 
49e3578e36 Ed H*0653 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0654        IF (debugMode) CALL DEBUG_CALL('DO_OCEANIC_PHYS',myThid)
1d71c648ad Jean*0655 #endif
529408dc72 Jean*0656        CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',myThid)
615c650f5e Jean*0657        CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
529408dc72 Jean*0658        CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',myThid)
376d4a0160 Patr*0659 
9e647b4f24 Jean*0660 #ifdef ALLOW_STREAMICE
5fb2fbfa94 Jean*0661        IF (useStreamIce) THEN
                0662          CALL STREAMICE_TIMESTEP ( myThid, myIter,
                0663      &                             iLoop, myTime )
                0664        ENDIF
376d4a0160 Patr*0665 #endif
                0666 
a1ee12c555 Patr*0667 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0668 C***********************************************************************
                0669 C     This block of store directives is for variables that have been
                0670 C     computed in do_oceanics_phys. Storing them here avoids calling
                0671 C     do_oceanic_phys again in forward_step_ad, which should improve
                0672 C     performance because expensive parts of the model are not
                0673 C     recomputed (e.g. seaice).
                0674 # include "check_lev1_dir_ocephys.h"
                0675 C***********************************************************************
0499e7ef48 Patr*0676 #endif /* ALLOW_AUTODIFF_TAMC */
91bac1c842 Andr*0677 
9c41af81f6 Timo*0678 #ifdef GCHEM_ADD2TR_TENDENCY
                0679 #ifndef ALLOW_AUTODIFF
35d3d94e31 Jean*0680       IF ( useGCHEM ) THEN
9c41af81f6 Timo*0681 #endif
529eea311c Gael*0682 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0683 CADJ STORE pTracer     = comlev1, key=ikey_dynamics, kind=isbyte
                0684 CADJ STORE theta, salt = comlev1, key=ikey_dynamics, kind=isbyte
529eea311c Gael*0685 #endif
6153ee95d4 Mart*0686 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0687         IF (debugMode) CALL DEBUG_CALL('GCHEM_CALC_TENDENCY',myThid)
6153ee95d4 Mart*0688 #endif
                0689         CALL TIMER_START('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
                0690         CALL GCHEM_CALC_TENDENCY( myTime, myIter, myThid )
                0691         CALL TIMER_STOP ('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
9b184aa726 Patr*0692 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0693 CADJ STORE gchemTendency = comlev1, key=ikey_dynamics, kind=isbyte
                0694 #endif
                0695 #ifndef ALLOW_AUTODIFF
                0696       ENDIF
                0697 #endif
                0698 #endif /* GCHEM_ADD2TR_TENDENCY */
9b184aa726 Patr*0699 
4e66ab0b67 Oliv*0700 #ifdef ALLOW_LONGSTEP
9e647b4f24 Jean*0701       IF ( usePTRACERS .AND. LS_whenToSample .EQ. 0 ) THEN
4e66ab0b67 Oliv*0702 C       Average all variables before advection (but after do_oceanic_phys
                0703 C       where Qsw, KPP and GMRedi stuff is computed).
                0704 C       This is like diagnostics package and will reproduce offline
                0705 C       results.
                0706 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0707         IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
4e66ab0b67 Oliv*0708 #endif
                0709         CALL TIMER_START('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                0710         CALL LONGSTEP_AVERAGE( myTime, myIter, myThid )
                0711         CALL TIMER_STOP ('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
fda3710353 Oliv*0712 
                0713 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0714         IF (debugMode)
fda3710353 Oliv*0715      &    CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
                0716 #endif
                0717         CALL TIMER_START('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0718      &                   myThid)
                0719         CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
                0720         CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0721      &                    myThid)
4e66ab0b67 Oliv*0722       ENDIF
                0723 #endif /* ALLOW_LONGSTEP */
                0724 
615c650f5e Jean*0725       IF ( .NOT.staggerTimeStep ) THEN
35d3d94e31 Jean*0726 #ifdef ALLOW_AUTODIFF_TAMC
                0727 CADJ STORE wVel = comlev1, key = ikey_dynamics, kind = isbyte
                0728 #endif
49e3578e36 Ed H*0729 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0730         IF (debugMode) CALL DEBUG_CALL('THERMODYNAMICS',myThid)
73ead277e0 Alis*0731 #endif
529408dc72 Jean*0732         CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',myThid)
615c650f5e Jean*0733         CALL THERMODYNAMICS( myTime, myIter, myThid )
529408dc72 Jean*0734         CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',myThid)
fda3710353 Oliv*0735 C--     if not staggerTimeStep: end
b649ac9bae Jean*0736       ENDIF
9c41af81f6 Timo*0737 #if (defined ALLOW_AUTODIFF_TAMC) && (defined ALLOW_OBCS)
                0738 CADJ STORE salt, theta = comlev1, key = ikey_dynamics, kind = isbyte
                0739 #endif /* ALLOW_AUTODIFF_TAMC && ALLOW_OBCS */
4e66ab0b67 Oliv*0740 
                0741 #ifdef ALLOW_LONGSTEP
9e647b4f24 Jean*0742       IF ( usePTRACERS .AND. LS_whenToSample .EQ. 1 ) THEN
fda3710353 Oliv*0743 C       Average T and S after thermodynamics, but U,V,W before dynamics.
                0744 C       This will reproduce online results with staggerTimeStep=.FALSE.
4e66ab0b67 Oliv*0745 C       for LS_nIter=1
                0746 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0747         IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
4e66ab0b67 Oliv*0748 #endif
                0749         CALL TIMER_START('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                0750         CALL LONGSTEP_AVERAGE( myTime, myIter, myThid )
                0751         CALL TIMER_STOP ('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
fda3710353 Oliv*0752 
                0753 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0754         IF (debugMode)
fda3710353 Oliv*0755      &    CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
                0756 #endif
                0757         CALL TIMER_START('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0758      &                   myThid)
                0759         CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
                0760         CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0761      &                   myThid)
4e66ab0b67 Oliv*0762       ENDIF
                0763 #endif /* ALLOW_LONGSTEP */
                0764 
cb7fa97db9 Jean*0765 c #ifdef ALLOW_NONHYDROSTATIC
                0766       IF ( implicitIntGravWave ) THEN
                0767         CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                0768         CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
                0769         CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                0770       ENDIF
                0771 c #endif
1d71c648ad Jean*0772 
0499e7ef48 Patr*0773 #ifdef ALLOW_AUTODIFF_TAMC
79fda098df Gael*0774 CADJ STORE etaN = comlev1, key = ikey_dynamics, kind = isbyte
bfdbc242ac Jean*0775 # ifdef ALLOW_DEPTH_CONTROL
ced23bb277 Gael*0776 CADJ STORE hFacC, hFacS, hFacW
                0777 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
                0778 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
                0779 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
bfdbc242ac Jean*0780 # endif /* ALLOW_DEPTH_CONTROL */
                0781 #endif /* ALLOW_AUTODIFF_TAMC */
fc62302ca1 Patr*0782 
cee16b76ae Dimi*0783 C--   Step forward fields and calculate time tendency terms.
9e647b4f24 Jean*0784 #ifdef ALLOW_MOM_STEPPING
517dbdc414 Jean*0785 #ifndef ALLOW_AUTODIFF
cee16b76ae Dimi*0786       IF ( momStepping ) THEN
edc3e287c7 Patr*0787 #endif
49e3578e36 Ed H*0788 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0789         IF (debugMode) CALL DEBUG_CALL('DYNAMICS',myThid)
73ead277e0 Alis*0790 #endif
529408dc72 Jean*0791         CALL TIMER_START('DYNAMICS            [FORWARD_STEP]',myThid)
d8ea337c6c Patr*0792         CALL DYNAMICS( myTime, myIter, myThid )
529408dc72 Jean*0793         CALL TIMER_STOP ('DYNAMICS            [FORWARD_STEP]',myThid)
517dbdc414 Jean*0794 #ifndef ALLOW_AUTODIFF
cee16b76ae Dimi*0795       ENDIF
edc3e287c7 Patr*0796 #endif
9e647b4f24 Jean*0797 #endif /* ALLOW_MOM_STEPPING */
a27159adf7 Jean*0798 
0499e7ef48 Patr*0799 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0800 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
8a7ca847ff Patr*0801 CADJ STORE gU, gV  = comlev1, key = ikey_dynamics,
                0802 CADJ &     kind = isbyte
0499e7ef48 Patr*0803 # endif
f66c946416 Step*0804 #endif
d8ea337c6c Patr*0805 
615c650f5e Jean*0806 C--   Update time-counter
                0807       myIter = nIter0 + iLoop
7c3b863339 Jean*0808       myTime = startTime + deltaTClock*iLoop
615c650f5e Jean*0809 
5bc9611487 Ed H*0810 #ifdef ALLOW_MNC
ce8f1dd452 Jean*0811 C     Update MNC time information
5bc9611487 Ed H*0812       IF ( useMNC ) THEN
ce8f1dd452 Jean*0813          CALL MNC_UPDATE_TIME( myTime, myIter, myThid )
529408dc72 Jean*0814       ENDIF
                0815 #endif /* ALLOW_MNC */
5bc9611487 Ed H*0816 
dc2ebbdaf0 Jean*0817 #ifdef ALLOW_OFFLINE
                0818 C     Load new Offline fields and update state-variable
                0819       IF ( useOffLine ) THEN
                0820 #ifdef ALLOW_DEBUG
                0821         IF (debugMode) CALL DEBUG_CALL('OFFLINE_FIELDS_LOAD',myThid)
                0822 #endif /* ALLOW_DEBUG */
                0823         CALL TIMER_START('OFFLINE_FLDS_LOAD   [FORWARD_STEP]',myThid)
                0824         CALL OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
                0825         CALL TIMER_STOP ('OFFLINE_FLDS_LOAD   [FORWARD_STEP]',myThid)
                0826       ENDIF
                0827 #endif /* ALLOW_OFFLINE */
                0828 
615c650f5e Jean*0829 C--   Update geometric factors:
8de3419279 Jean*0830 #ifdef NONLIN_FRSURF
615c650f5e Jean*0831 C-    update hfacC,W,S and recip_hFac according to etaH(n+1) :
855d57fc61 Jean*0832       IF ( select_rStar.GT.0 ) THEN
cdc9f269ae Patr*0833 # ifndef DISABLE_RSTAR_CODE
0499e7ef48 Patr*0834 # ifdef ALLOW_AUTODIFF_TAMC
35d3d94e31 Jean*0835 CADJ STORE rStarFacC, rStarFacS, rStarFacW =
ced23bb277 Gael*0836 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
0499e7ef48 Patr*0837 # endif
529408dc72 Jean*0838         CALL TIMER_START('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
72a058b866 Gael*0839         CALL UPDATE_R_STAR( .TRUE., myTime, myIter, myThid )
529408dc72 Jean*0840         CALL TIMER_STOP ('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
cdc9f269ae Patr*0841 # endif /* DISABLE_RSTAR_CODE */
855d57fc61 Jean*0842       ELSEIF ( selectSigmaCoord.NE.0 ) THEN
a2a20dcddc Jean*0843 # ifndef DISABLE_SIGMA_CODE
                0844         CALL UPDATE_SIGMA( etaH, myTime, myIter, myThid )
                0845 # endif /* DISABLE_RSTAR_CODE */
855d57fc61 Jean*0846       ELSE
517dbdc414 Jean*0847 # ifdef ALLOW_AUTODIFF_TAMC
ba9a45d563 Jean*0848 CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
ced23bb277 Gael*0849 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
517dbdc414 Jean*0850 # endif
529408dc72 Jean*0851         CALL TIMER_START('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
72a058b866 Gael*0852         CALL UPDATE_SURF_DR( .TRUE., myTime, myIter, myThid )
529408dc72 Jean*0853         CALL TIMER_STOP ('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
855d57fc61 Jean*0854       ENDIF
0499e7ef48 Patr*0855 # ifdef ALLOW_AUTODIFF_TAMC
de7a0e15d8 Jean*0856 CADJ STORE hFacC, hFacS, hFacW =
ced23bb277 Gael*0857 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
de7a0e15d8 Jean*0858 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW  =
ced23bb277 Gael*0859 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
0499e7ef48 Patr*0860 # endif
855d57fc61 Jean*0861 #endif /* NONLIN_FRSURF */
                0862 
aecc8b0f47 Mart*0863 #if ( defined NONLIN_FRSURF || defined ALLOW_SOLVE4_PS_AND_DRAG || \
                0864       defined ALLOW_CG2D_NSA || defined ALLOW_DEPTH_CONTROL )
855d57fc61 Jean*0865 C-    update CG2D matrix (and preconditioner)
                0866       IF ( momStepping .AND.
                0867      &     ( nonlinFreeSurf.GT.2 .OR. selectImplicitDrag.EQ.2 ) ) THEN
529408dc72 Jean*0868         CALL TIMER_START('UPDATE_CG2D         [FORWARD_STEP]',myThid)
8de3419279 Jean*0869         CALL UPDATE_CG2D( myTime, myIter, myThid )
529408dc72 Jean*0870         CALL TIMER_STOP ('UPDATE_CG2D         [FORWARD_STEP]',myThid)
8de3419279 Jean*0871       ENDIF
aecc8b0f47 Mart*0872 # ifdef ALLOW_AUTODIFF_TAMC
79b5d5775c Jean*0873 CADJ STORE aW2d, aS2d, aC2d, pC, pS, pW =
aecc8b0f47 Mart*0874 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
                0875 # endif
855d57fc61 Jean*0876 #endif /* NONLIN_FRSURF or ALLOW_SOLVE4_PS_AND_DRAG */
8de3419279 Jean*0877 
b649ac9bae Jean*0878 C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
                0879 #ifdef ALLOW_SHAP_FILT
                0880       IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
f3ec658fc9 Jean*0881         CALL TIMER_START('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
79b5d5775c Jean*0882         CALL SHAP_FILT_APPLY_UV( gU, gV, myTime, myIter, myThid )
f3ec658fc9 Jean*0883         CALL TIMER_STOP ('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
b649ac9bae Jean*0884       ENDIF
                0885 #endif
                0886 #ifdef ALLOW_ZONAL_FILT
                0887       IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
f3ec658fc9 Jean*0888         CALL TIMER_START('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
db44121e58 Jean*0889         CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
f3ec658fc9 Jean*0890         CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
b649ac9bae Jean*0891       ENDIF
a27159adf7 Jean*0892 #endif
b7d016da10 Alis*0893 
d8ea337c6c Patr*0894 C--   Solve elliptic equation(s).
529408dc72 Jean*0895 C     Two-dimensional only for conventional hydrostatic or
d8ea337c6c Patr*0896 C     three-dimensional for non-hydrostatic and/or IGW scheme.
85937bd52b Alis*0897       IF ( momStepping ) THEN
d6e8c9ce95 Patr*0898 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0899 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
79b5d5775c Jean*0900 CADJ STORE hFacS, hFacW = comlev1, key = ikey_dynamics, kind = isbyte
9c41af81f6 Timo*0901 # endif
d6e8c9ce95 Patr*0902 #endif
615c650f5e Jean*0903         CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
79b5d5775c Jean*0904         CALL SOLVE_FOR_PRESSURE( myTime, myIter, myThid )
615c650f5e Jean*0905         CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
                0906       ENDIF
                0907 
                0908 C--   Correct divergence in flow field and cycle time-stepping momentum
9e647b4f24 Jean*0909 #ifdef ALLOW_MOM_STEPPING
517dbdc414 Jean*0910 #ifndef ALLOW_AUTODIFF
a27159adf7 Jean*0911       IF ( momStepping ) THEN
                0912 #endif
f3ec658fc9 Jean*0913         CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
79b5d5775c Jean*0914         CALL MOMENTUM_CORRECTION_STEP( myTime, myIter, myThid )
f3ec658fc9 Jean*0915         CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
517dbdc414 Jean*0916 #ifndef ALLOW_AUTODIFF
a27159adf7 Jean*0917       ENDIF
f66c946416 Step*0918 #endif
9e647b4f24 Jean*0919 #endif /* ALLOW_MOM_STEPPING */
9257d2aab8 Patr*0920 #ifdef ALLOW_AUTODIFF_TAMC
b1d6b00360 Jean*0921 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics, kind = isbyte
9257d2aab8 Patr*0922 #endif
615c650f5e Jean*0923 
bfdbc242ac Jean*0924       IF ( calc_wVelocity ) THEN
                0925 C--     Integrate continuity vertically for vertical velocity
                0926 C       (+ update "etaN" & "etaH", exact volume conservation):
                0927         CALL TIMER_START('INTEGR_CONTINUITY   [FORWARD_STEP]',myThid)
                0928         CALL INTEGR_CONTINUITY( uVel, vVel, myTime, myIter, myThid)
                0929         CALL TIMER_STOP ('INTEGR_CONTINUITY   [FORWARD_STEP]',myThid)
85937bd52b Alis*0930       ENDIF
9c41af81f6 Timo*0931 #ifdef ALLOW_AUTODIFF_TAMC
aa93ca8e85 Ciar*0932 C--   These store directives avoid an (expensive) extra
9c41af81f6 Timo*0933 C     "call solve_for_pressure" in forward_step_ad
                0934 CADJ STORE wVel = comlev1, key = ikey_dynamics, kind = isbyte
aa93ca8e85 Ciar*0935 CADJ STORE etaN = comlev1, key = ikey_dynamics, kind = isbyte
9c41af81f6 Timo*0936 #endif
615c650f5e Jean*0937 
                0938 #ifdef NONLIN_FRSURF
                0939       IF ( select_rStar.NE.0 ) THEN
cdc9f269ae Patr*0940 # ifndef DISABLE_RSTAR_CODE
e2c5f2fe7c Patr*0941 #  ifdef ALLOW_AUTODIFF_TAMC
9257d2aab8 Patr*0942 CADJ STORE etaH
                0943 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
35d3d94e31 Jean*0944 CADJ STORE rStarFacC,rStarFacS,rStarFacW
9257d2aab8 Patr*0945 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
e2c5f2fe7c Patr*0946 #  endif
529408dc72 Jean*0947 C--   r* : compute the future level thickness according to etaH(n+1)
                0948         CALL TIMER_START('CALC_R_STAR         [FORWARD_STEP]',myThid)
615c650f5e Jean*0949         CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
529408dc72 Jean*0950         CALL TIMER_STOP ('CALC_R_STAR         [FORWARD_STEP]',myThid)
cdc9f269ae Patr*0951 # endif /* DISABLE_RSTAR_CODE */
a2a20dcddc Jean*0952       ELSEIF ( nonlinFreeSurf.GT.0 .AND. selectSigmaCoord.EQ.0 ) THEN
529408dc72 Jean*0953 C--   compute the future surface level thickness according to etaH(n+1)
0499e7ef48 Patr*0954 # ifdef ALLOW_AUTODIFF_TAMC
8a7ca847ff Patr*0955 CADJ STORE etaH          = comlev1, key = ikey_dynamics,
                0956 CADJ &     kind = isbyte
0499e7ef48 Patr*0957 # endif
529408dc72 Jean*0958         CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',myThid)
615c650f5e Jean*0959         CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
529408dc72 Jean*0960         CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',myThid)
615c650f5e Jean*0961       ENDIF
0499e7ef48 Patr*0962 # ifdef ALLOW_AUTODIFF_TAMC
9257d2aab8 Patr*0963 CADJ STORE rStarExpC
                0964 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
8a7ca847ff Patr*0965 CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
                0966 CADJ &     kind = isbyte
35d3d94e31 Jean*0967 CADJ STORE salt,theta = comlev1, key = ikey_dynamics,
8a7ca847ff Patr*0968 CADJ &     kind = isbyte
9c41af81f6 Timo*0969 #  ifdef ALLOW_PTRACERS
                0970 CADJ STORE pTracer    = comlev1, key = ikey_dynamics, kind = isbyte
                0971 #  endif /* ALLOW_PTRACERS */
529408dc72 Jean*0972 # endif
615c650f5e Jean*0973 #endif /* NONLIN_FRSURF */
                0974 
                0975 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0976       IF ( staggerTimeStep ) THEN
ffd0966f4f Jean*0977 C--   do exchanges of U,V (needed for multiDim) when using stagger time-step :
                0978 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0979         IF (debugMode)
529408dc72 Jean*0980      &   CALL DEBUG_CALL('DO_STAGGER_FIELDS_EXCH.',myThid)
ffd0966f4f Jean*0981 #endif
                0982         CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                0983         CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
                0984         CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
615c650f5e Jean*0985 
0499e7ef48 Patr*0986 #ifdef ALLOW_DIAGNOSTICS
b5c2f2589c Jean*0987 C--   State-variables diagnostics
529408dc72 Jean*0988         IF ( useDiagnostics ) THEN
                0989           CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0990           CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
                0991           CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0992         ENDIF
0499e7ef48 Patr*0993 #endif
b5c2f2589c Jean*0994 
35d3d94e31 Jean*0995 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0996 C     these store directives prevent calling do_stagger_fields_exchanges
                0997 C     again in the AD-part of forward_step_ad
                0998 CADJ STORE salt, theta = comlev1, key = ikey_dynamics, kind = isbyte
                0999 CADJ STORE wVel        = comlev1, key = ikey_dynamics, kind = isbyte
35d3d94e31 Jean*1000 #endif
615c650f5e Jean*1001 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1002         IF (debugMode) CALL DEBUG_CALL('THERMODYNAMICS',myThid)
615c650f5e Jean*1003 #endif
529408dc72 Jean*1004         CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',myThid)
615c650f5e Jean*1005         CALL THERMODYNAMICS( myTime, myIter, myThid )
529408dc72 Jean*1006         CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',myThid)
615c650f5e Jean*1007 
                1008 C--    if staggerTimeStep: end
                1009       ENDIF
9c41af81f6 Timo*1010 #ifdef ALLOW_AUTODIFF_TAMC
                1011 C     this may not be necessary, but it does not do any harm (i.e. it is
                1012 C     ignored by TAF if not needed)
                1013 CADJ STORE salt, theta = comlev1, key = ikey_dynamics, kind = isbyte
                1014 #endif /* ALLOW_AUTODIFF_TAMC */
529408dc72 Jean*1015 C---+--------+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
d8ea337c6c Patr*1016 
7103bd8015 Patr*1017 #ifdef ALLOW_AUTODIFF_TAMC
                1018 cph This is needed because convective_adjustment calls
                1019 cph find_rho which may use pressure()
35d3d94e31 Jean*1020 CADJ STORE totPhiHyd  = comlev1, key = ikey_dynamics,
8a7ca847ff Patr*1021 CADJ &     kind = isbyte
7103bd8015 Patr*1022 #endif
bd27360393 Jean*1023 C--   Apply adjustments to Tracers arrays (T,S,+pTracers)
529408dc72 Jean*1024       CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
                1025       CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
                1026       CALL TIMER_STOP ('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
d8ea337c6c Patr*1027 
4e66ab0b67 Oliv*1028 #ifdef ALLOW_LONGSTEP
                1029       IF ( usePTRACERS ) THEN
fda3710353 Oliv*1030        IF ( LS_whenToSample .EQ. 2 ) THEN
4e66ab0b67 Oliv*1031 C       Average everything at the end of the timestep.  This will
                1032 C       reproduce online results with staggerTimeStep=.TRUE.
fda3710353 Oliv*1033 C       when LS_nIter=1
4e66ab0b67 Oliv*1034 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1035         IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
4e66ab0b67 Oliv*1036 #endif
                1037         CALL TIMER_START('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                1038 C       myIter has been update after dynamics, but the averaging window
                1039 C       should be determined by myIter at beginning of timestep
                1040         CALL LONGSTEP_AVERAGE( myTimeBeg, myIterBeg, myThid )
                1041         CALL TIMER_STOP ('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                1042 
                1043 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1044         IF (debugMode)
fda3710353 Oliv*1045      &    CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
4e66ab0b67 Oliv*1046 #endif
fda3710353 Oliv*1047         CALL TIMER_START('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
4e66ab0b67 Oliv*1048      &                   myThid)
fda3710353 Oliv*1049         CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
                1050         CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                1051      &                   myThid)
                1052 C--    if LS_whenToSample.EQ.2: end
                1053        ENDIF
4e66ab0b67 Oliv*1054 
bd27360393 Jean*1055 C--   Apply adjustments to passive Tracers arrays (pTracers)
                1056 c      CALL TIMER_START('LS_CORRECTION_STEP  [FORWARD_STEP]',myThid)
                1057 c      CALL LONGSTEP_CORRECTION_STEP(myTime, myIter, myThid)
                1058 c      CALL TIMER_STOP ('LS_CORRECTION_STEP  [FORWARD_STEP]',myThid)
fda3710353 Oliv*1059 C--    if usePTRACERS: end
4e66ab0b67 Oliv*1060       ENDIF
                1061 #endif /* ALLOW_LONGSTEP */
                1062 
6153ee95d4 Mart*1063 #ifdef ALLOW_GCHEM
e359829a2b Mart*1064 C     Add separate timestepping of chemical/biological/forcing
                1065 C     of ptracers here in GCHEM_FORCING_SEP
35d3d94e31 Jean*1066 #ifdef ALLOW_LONGSTEP
                1067       IF ( useGCHEM .AND. LS_doTimeStep ) THEN
                1068 #else
                1069       IF ( useGCHEM ) THEN
                1070 #endif
9c41af81f6 Timo*1071 # ifdef ALLOW_AUTODIFF_TAMC
                1072 CADJ STORE theta, salt = comlev1, key = ikey_dynamics, kind = isbyte
                1073 #  ifdef ALLOW_PTRACERS
                1074 CADJ STORE pTracer     = comlev1, key = ikey_dynamics, kind = isbyte
                1075 #  endif /* ALLOW_PTRACERS */
                1076 # endif
e359829a2b Mart*1077 #ifdef ALLOW_DEBUG
35d3d94e31 Jean*1078         IF (debugMode) CALL DEBUG_CALL('GCHEM_FORCING_SEP',myThid)
e359829a2b Mart*1079 #endif /* ALLOW_DEBUG */
35d3d94e31 Jean*1080         CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
                1081         CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
                1082         CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
529408dc72 Jean*1083       ENDIF
6d54cf9ca1 Ed H*1084 #endif /* ALLOW_GCHEM */
e39d13c4c9 Step*1085 
30a55c64a0 Mart*1086 C--   Do "blocking" sends and receives for tendency "overlap" terms
                1087 c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                1088 c     CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )
                1089 c     CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                1090 
                1091 C--   Do "blocking" sends and receives for field "overlap" terms
                1092       CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                1093       CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
                1094       CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
9c41af81f6 Timo*1095 #ifdef ALLOW_AUTODIFF_TAMC
                1096 C     These store directives avoid extra subroutine calls, for example,
                1097 C     thermodynamics, tracers_correction_step, gchem_forcing_sep, and
                1098 C     do_fields_blocking_exchages
                1099 CADJ STORE theta, salt = comlev1, key = ikey_dynamics, kind = isbyte
                1100 CADJ STORE uvel,  vvel = comlev1, key = ikey_dynamics, kind = isbyte
                1101 CADJ STORE totPhiHyd   = comlev1, key = ikey_dynamics, kind = isbyte
                1102 # ifdef ALLOW_PTRACERS
                1103 CADJ STORE pTracer     = comlev1, key = ikey_dynamics, kind = isbyte
                1104 # endif
                1105 #endif
30a55c64a0 Mart*1106 
0499e7ef48 Patr*1107 #ifdef ALLOW_DIAGNOSTICS
a27159adf7 Jean*1108       IF ( useDiagnostics ) THEN
cf44a6a231 Andr*1109        CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                1110        CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid )
                1111        CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                1112       ENDIF
0499e7ef48 Patr*1113 #endif
30a55c64a0 Mart*1114 
bc57263004 Andr*1115 #ifdef ALLOW_GRIDALT
529408dc72 Jean*1116       IF (useGRIDALT) THEN
dc451e9e8f Andr*1117          CALL GRIDALT_UPDATE(myThid)
529408dc72 Jean*1118       ENDIF
bc57263004 Andr*1119 #endif
                1120 
468f196fcd Andr*1121 #ifdef ALLOW_FIZHI
529408dc72 Jean*1122       IF (useFIZHI) THEN
                1123          CALL TIMER_START('FIZHI               [FORWARD_STEP]',myThid)
a9203e518a Andr*1124          CALL STEP_FIZHI_CORR ( myTime, myIter, myThid, dTtracerLev(1) )
529408dc72 Jean*1125          CALL TIMER_STOP ('FIZHI               [FORWARD_STEP]',myThid)
                1126       ENDIF
468f196fcd Andr*1127 #endif
e39d13c4c9 Step*1128 
c806179eb4 Alis*1129 #ifdef ALLOW_FLT
                1130 C--   Calculate float trajectories
                1131       IF (useFLT) THEN
650cc6304d Patr*1132         CALL TIMER_START('FLOATS            [FORWARD_STEP]',myThid)
5fcc68371c Jean*1133         CALL FLT_MAIN( myTime, myIter, myThid )
650cc6304d Patr*1134         CALL TIMER_STOP ('FLOATS            [FORWARD_STEP]',myThid)
c806179eb4 Alis*1135       ENDIF
                1136 #endif
                1137 
94884059ae Jean*1138 #ifdef ALLOW_NEST_PARENT
                1139       IF ( useNEST_PARENT) THEN
                1140         CALL NEST_PARENT_IO_2( myTime, myIter, myThid )
                1141       ENDIF
                1142 #endif /* ALLOW_NEST_PARENT */
                1143 
                1144 #ifdef ALLOW_NEST_CHILD
                1145       IF ( useNEST_CHILD) THEN
                1146             CALL NEST_CHILD_TRANSP( myTime, myIter, myThid )
                1147       ENDIF
                1148 #endif /* ALLOW_NEST_CHILD */
                1149 
ffced37781 Ed H*1150 #ifdef ALLOW_MONITOR
5f45e58a14 Jean*1151       IF ( monitorFreq.GT.0. .OR. adjMonitorFreq.GT.0. ) THEN
d8ea337c6c Patr*1152 C--   Check status of solution (statistics, cfl, etc...)
a27159adf7 Jean*1153         CALL TIMER_START('MONITOR             [FORWARD_STEP]',myThid)
4f8feb8bdf Jean*1154         CALL MONITOR( myTime, myIter, myThid )
a27159adf7 Jean*1155         CALL TIMER_STOP ('MONITOR             [FORWARD_STEP]',myThid)
                1156       ENDIF
ffced37781 Ed H*1157 #endif /* ALLOW_MONITOR */
d8ea337c6c Patr*1158 
449f3c105b Patr*1159 #ifdef ALLOW_COST
                1160 C--     compare model with data and compute cost function
                1161 C--     this is done after exchanges to allow interpolation
                1162       CALL TIMER_START('COST_TILE           [FORWARD_STEP]',myThid)
529408dc72 Jean*1163       CALL COST_TILE  ( myTime, myIter, myThid )
449f3c105b Patr*1164       CALL TIMER_STOP ('COST_TILE           [FORWARD_STEP]',myThid)
                1165 #endif
                1166 
3949c257c5 Gael*1167 #ifdef ALLOW_ECCO
aa93ca8e85 Ciar*1168 C--   Diagnose variables for pkg/ecco averaging and cost function purposes
0cd0083da8 Ou W*1169       IF ( useECCO ) CALL ECCO_PHYS( myTime, myIter, myThid )
3949c257c5 Gael*1170 #endif
                1171 
94884059ae Jean*1172 C--   Check if it has reached the end of simulation
455a90837c Jean*1173       modelEnd = myTime.EQ.endTime .OR. myIter.EQ.nEndIter
b81731e160 Ed H*1174 #ifdef HAVE_SIGREG
                1175       IF ( useSIGREG ) THEN
455a90837c Jean*1176         modelEnd = modelEnd .OR. ( i_got_signal.GT.0 )
b81731e160 Ed H*1177       ENDIF
a27159adf7 Jean*1178 #endif /* HAVE_SIGREG */
b81731e160 Ed H*1179 
94884059ae Jean*1180 C--   Do IO if needed.
                1181       CALL TIMER_START('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
                1182       CALL DO_THE_MODEL_IO( modelEnd, myTime, myIter, myThid )
                1183       CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
                1184 
9fbec3c176 Oliv*1185 #ifdef ALLOW_PTRACERS
                1186 C     Reset the ptracers (but after the io is done)
                1187       IF ( usePTRACERS ) THEN
                1188         CALL TIMER_START('PTRACERS_RESET      [FORWARD_STEP]',myThid)
                1189         CALL PTRACERS_RESET( myTime, myIter, myThid )
                1190         CALL TIMER_STOP ('PTRACERS_RESET      [FORWARD_STEP]',myThid)
                1191       ENDIF
                1192 #endif /* ALLOW_PTRACERS */
                1193 
d8ea337c6c Patr*1194 C--   Save state for restarts
931983c6ab Jean*1195       CALL TIMER_START('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)
94884059ae Jean*1196       CALL DO_WRITE_PICKUP( modelEnd, myTime, myIter, myThid )
931983c6ab Jean*1197       CALL TIMER_STOP ('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)
d8ea337c6c Patr*1198 
455a90837c Jean*1199 #ifdef HAVE_SIGREG
                1200       IF ( useSIGREG ) THEN
                1201         IF ( modelEnd .AND. i_got_signal.GT.0 ) THEN
                1202           STOP 'Checkpoint completed -- killed by signal handler'
                1203         ENDIF
                1204       ENDIF
                1205 #endif /* HAVE_SIGREG */
e01e1e4fa5 Patr*1206 
517dbdc414 Jean*1207 #ifdef ALLOW_AUTODIFF
a10c595eb6 Timo*1208       CALL AUTODIFF_INADMODE_SET( myTime, myIter, myThid )
e01e1e4fa5 Patr*1209 #endif
                1210 
                1211 #ifdef ALLOW_SHOWFLOPS
9e647b4f24 Jean*1212       CALL TIMER_START('SHOWFLOPS_INLOOP   [THE_MAIN_LOOP]', myThid)
                1213       CALL SHOWFLOPS_INLOOP( iloop, myThid )
                1214       CALL TIMER_STOP ('SHOWFLOPS_INLOOP   [THE_MAIN_LOOP]', myThid)
e01e1e4fa5 Patr*1215 #endif
                1216 
49e3578e36 Ed H*1217 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1218       IF (debugMode) CALL DEBUG_LEAVE('FORWARD_STEP',myThid)
73ead277e0 Alis*1219 #endif
                1220 
fddb7fab2a Jean*1221       RETURN
d8ea337c6c Patr*1222       END