Back to home page

darwin3

 
 

    


File indexing completed on 2025-11-15 13:23:47 UTC

view on githubraw file Latest commit 2552df94 on 2025-11-14 20:30:12 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"
9b45bc1f6c Patr*0343 #  include "SEAICE.h"
34ea64e027 Patr*0344 #  include "SEAICE_COST.h"
9b45bc1f6c Patr*0345 # endif
56b3a0d0fa Patr*0346 # ifdef ALLOW_SALT_PLUME
                0347 #  include "SALT_PLUME.h"
                0348 # endif
9c41af81f6 Timo*0349 # ifdef ALLOW_DOWN_SLOPE
                0350 #  include "DWNSLP_SIZE.h"
                0351 #  include "DWNSLP_VARS.h"
                0352 # endif
3e86393e2c Patr*0353 # ifdef ALLOW_SHELFICE
                0354 #  include "SHELFICE.h"
                0355 #  include "SHELFICE_COST.h"
                0356 # endif
376d4a0160 Patr*0357 # ifdef ALLOW_STREAMICE
                0358 #  include "STREAMICE.h"
                0359 #  include "STREAMICE_ADV.h"
                0360 #  include "STREAMICE_BDRY.h"
                0361 #  include "STREAMICE_CG.h"
                0362 # endif
d8206d87ee Patr*0363 # ifdef ALLOW_EBM
                0364 #  include "EBM.h"
                0365 # endif
9b184aa726 Patr*0366 # ifdef ALLOW_KPP
                0367 #  include "KPP.h"
                0368 # endif
cc747f5a7a Patr*0369 # ifdef ALLOW_RBCS
de7a0e15d8 Jean*0370 #  include "RBCS_SIZE.h"
                0371 #  include "RBCS_FIELDS.h"
cc747f5a7a Patr*0372 # endif
9683f9bbcc Patr*0373 # ifdef ALLOW_OFFLINE
                0374 #  include "OFFLINE.h"
                0375 # endif
aecc8b0f47 Mart*0376 # if (defined ALLOW_CG2D_NSA || defined NONLIN_FRSURF || \
                0377       defined ALLOW_DEPTH_CONTROL)
55d9234027 Patr*0378 #  include "CG2D.h"
                0379 # endif
517dbdc414 Jean*0380 #endif /* ALLOW_AUTODIFF */
d8ea337c6c Patr*0381 
b4daa24319 Shre*0382 #ifdef ALLOW_TAPENADE
                0383 c# ifdef ALLOW_KPP
                0384 c#  include "KPP_PARAMS.h"
                0385 c# endif
                0386 # ifdef ALLOW_MOM_FLUXFORM
                0387 #  include "MOM_FLUXFORM.h"
                0388 # endif
                0389 # ifdef ALLOW_EXF
                0390 #  include "EXF_PARAM.h"
                0391 #  include "EXF_INTERP_PARAM.h"
                0392 # endif
                0393 #endif /* ALLOW_TAPENADE */
                0394 
455a90837c Jean*0395 C     !INPUT/OUTPUT PARAMETERS:
9366854e02 Chri*0396 C     == Routine arguments ==
529408dc72 Jean*0397 C     note: under the multi-threaded model myIter and
                0398 C           myTime are local variables passed around as routine
                0399 C           arguments. Although this is fiddly it saves the need to
                0400 C           impose additional synchronisation points when they are
b7d016da10 Alis*0401 C           updated.
455a90837c Jean*0402 C     myTime :: time counter for this thread
                0403 C     myIter :: iteration counter for this thread
                0404 C     myThid :: thread number for this instance of the routine.
9fcf571bcd Jean*0405       INTEGER iloop
                0406       _RL     myTime
455a90837c Jean*0407       INTEGER myIter
                0408       INTEGER myThid
9fcf571bcd Jean*0409 
455a90837c Jean*0410 C     !LOCAL VARIABLES:
9fcf571bcd Jean*0411 C     == Local variables ==
455a90837c Jean*0412 C     modelEnd  :: true if reaching the end of the run
4e66ab0b67 Oliv*0413 C     myTimeBeg :: time at beginning of time step (needed by longstep)
                0414 C     myIterBeg :: iteration number at beginning of time step
455a90837c Jean*0415       LOGICAL modelEnd
ea669e205e Jean*0416 #ifdef ALLOW_LONGSTEP
fda3710353 Oliv*0417       INTEGER myIterBeg
                0418       _RL myTimeBeg
ea669e205e Jean*0419 #endif /* ALLOW_LONGSTEP */
9366854e02 Chri*0420 CEOP
d8ea337c6c Patr*0421 
49e3578e36 Ed H*0422 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0423       IF (debugMode) CALL DEBUG_ENTER('FORWARD_STEP',myThid)
73ead277e0 Alis*0424 #endif
                0425 
517dbdc414 Jean*0426 #ifdef ALLOW_AUTODIFF
cee16b76ae Dimi*0427 C--   Reset the model iteration counter and the model time.
51d88069bf Jean*0428       myIter = nIter0 + (iloop-1)
7c3b863339 Jean*0429       myTime = startTime + deltaTClock*(iLoop-1)
d8ea337c6c Patr*0430 #endif
                0431 
a10c595eb6 Timo*0432 #ifdef ALLOW_AUTODIFF
                0433       CALL AUTODIFF_INADMODE_UNSET( myTime, myIter, myThid )
                0434 #endif
                0435 
ea669e205e Jean*0436 #ifdef ALLOW_LONGSTEP
4e66ab0b67 Oliv*0437 C     store this for longstep_average with staggerTimeStep
fda3710353 Oliv*0438 C     which is called after myIter and myTime are incremented
                0439 C     but needs iter/time at beginning of time step
4e66ab0b67 Oliv*0440       myIterBeg = myIter
                0441       myTimeBeg = myTime
ea669e205e Jean*0442 #endif /* ALLOW_LONGSTEP */
4e66ab0b67 Oliv*0443 
32117771cc Patr*0444 #ifdef ALLOW_AUTODIFF_TAMC
                0445 c**************************************
                0446 #include "checkpoint_lev1_directives.h"
32af943b8a Patr*0447 #include "checkpoint_lev1_template.h"
32117771cc Patr*0448 c**************************************
67a1e439d8 Patr*0449 #endif
6424ee9bc0 Curt*0450 
9952f046d7 dngo*0451 #ifdef ALLOW_SHELFICE_REMESHING
                0452       IF ( useShelfIce ) THEN
                0453 C--   Remesh shelfice
                0454         CALL TIMER_START('SHELFICE_REMESHING     [FORWARD_STEP]',myThid)
                0455         CALL SHELFICE_REMESHING ( myTime, myIter, myThid )
                0456         CALL TIMER_STOP('SHELFICE_REMESHING     [FORWARD_STEP]',myThid)
                0457       ENDIF
                0458 #endif /* ALLOW_SHELFICE_REMESHING */
                0459 
0bcf1b56f4 Jean*0460 C--   Reset geometric factors (hFacC,W,S & recip_hFac) to their current values:
                0461 C     added to simplify adjoint derivation - no effect in forward run
72a058b866 Gael*0462 #ifdef NONLIN_FRSURF
517dbdc414 Jean*0463 #ifndef ALLOW_AUTODIFF
0bcf1b56f4 Jean*0464       IF ( doResetHFactors ) THEN
                0465 #endif
ccbf39d1a4 Jean*0466        CALL RESET_NLFS_VARS( myTime, myIter, myThid )
72a058b866 Gael*0467        IF ( select_rStar.GT.0 ) THEN
                0468 # ifndef DISABLE_RSTAR_CODE
                0469 # ifdef ALLOW_AUTODIFF_TAMC
35d3d94e31 Jean*0470 CADJ STORE rStarFacC, rStarFacS, rStarFacW =
ced23bb277 Gael*0471 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
72a058b866 Gael*0472 # endif
                0473         CALL TIMER_START('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
                0474         CALL UPDATE_R_STAR( .FALSE., myTime, myIter, myThid )
                0475         CALL TIMER_STOP ('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
                0476 # endif /* DISABLE_RSTAR_CODE */
                0477        ELSE
                0478 #ifdef ALLOW_AUTODIFF_TAMC
                0479 CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
ced23bb277 Gael*0480 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
72a058b866 Gael*0481 #endif
                0482         CALL TIMER_START('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
                0483         CALL UPDATE_SURF_DR( .FALSE., myTime, myIter, myThid )
                0484         CALL TIMER_STOP ('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
                0485        ENDIF
0bcf1b56f4 Jean*0486 #ifdef ALLOW_AUTODIFF_TAMC
ced23bb277 Gael*0487 CADJ STORE hFacC, hFacS, hFacW =
                0488 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
                0489 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW  =
                0490 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
45ae106d3b Jean*0491 #endif
                0492 #ifndef ALLOW_AUTODIFF
0bcf1b56f4 Jean*0493       ENDIF
                0494 #endif
72a058b866 Gael*0495 #endif /* NONLIN_FRSURF */
                0496 
7bfcf7940f Jean*0497 #ifdef ALLOW_PTRACERS
                0498 C--   Switch on/off individual tracer time-stepping
                0499       IF ( usePTRACERS ) THEN
                0500         CALL PTRACERS_SWITCH_ONOFF( myTime, myIter, myThid )
                0501       ENDIF
                0502 #endif /* ALLOW_PTRACERS */
                0503 
be7aceba73 Jean*0504 C--   Switch on/off diagnostics for snap-shot output:
                0505 #ifdef ALLOW_DIAGNOSTICS
                0506       IF ( useDiagnostics ) THEN
41c4545f8f Jean*0507         CALL DIAGNOSTICS_SWITCH_ONOFF( 1, myTime, myIter, myThid )
b5c2f2589c Jean*0508 C--   State-variables diagnostics
                0509         CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0510         CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
                0511         CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0512       ENDIF
7bfcf7940f Jean*0513 #endif /* ALLOW_DIAGNOSTICS */
b5c2f2589c Jean*0514 
ba9a45d563 Jean*0515 #ifdef ALLOW_NEST_CHILD
                0516       IF ( useNEST_CHILD) THEN
8440e8ae5d Jean*0517         CALL NEST_CHILD_SETMEMO( myTime, myIter, myThid )
ba9a45d563 Jean*0518       ENDIF
                0519 #endif /* ALLOW_NEST_CHILD */
                0520 
                0521 #ifdef ALLOW_NEST_PARENT
                0522       IF ( useNEST_PARENT) THEN
                0523         CALL NEST_PARENT_IO_1( myTime, myIter, myThid )
                0524       ENDIF
                0525 #endif /* ALLOW_NEST_PARENT */
                0526 
529408dc72 Jean*0527 C--   Call driver to load external forcing fields from file
                0528 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0529       IF (debugMode) CALL DEBUG_CALL('LOAD_FIELDS_DRIVER',myThid)
13783cb644 Patr*0530 #endif
                0531 #ifdef ALLOW_AUTODIFF_TAMC
                0532 cph Important STORE that avoids hidden recomp. of load_fields_driver
8a7ca847ff Patr*0533 CADJ STORE theta      = comlev1, key = ikey_dynamics,
                0534 CADJ &     kind = isbyte
35d3d94e31 Jean*0535 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics,
8a7ca847ff Patr*0536 CADJ &     kind = isbyte
529408dc72 Jean*0537 #endif
                0538       CALL TIMER_START('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)
                0539       CALL LOAD_FIELDS_DRIVER( myTime, myIter, myThid )
                0540       CALL TIMER_STOP ('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)
                0541 
40ad671a6b Jean*0542 C--   Call Bulk-Formulae forcing package
7753507405 Curt*0543 #ifdef ALLOW_BULK_FORCE
10e4bbdd7f Jean*0544       IF ( useBulkForce ) THEN
49e3578e36 Ed H*0545 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0546         IF (debugMode) CALL DEBUG_CALL('BULKF_FORCING',myThid)
73ead277e0 Alis*0547 #endif
529408dc72 Jean*0548         CALL TIMER_START('BULKF_FORCING       [FORWARD_STEP]',myThid)
10e4bbdd7f Jean*0549 C-    calculate qnet and empmr (and wind stress)
529408dc72 Jean*0550         CALL BULKF_FORCING( myTime, myIter, myThid )
                0551         CALL TIMER_STOP ('BULKF_FORCING       [FORWARD_STEP]',myThid)
40ad671a6b Jean*0552       ENDIF
b2498468b3 Jean*0553 #endif /* ALLOW_BULK_FORCE */
33c873885d Jean*0554 
86f14fa6df Jean*0555 C--   Call external chepaml forcing package
                0556 #ifdef ALLOW_CHEAPAML
                0557       IF ( useCheapAML  ) THEN
                0558 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0559         IF (debugMode) CALL DEBUG_CALL('CHEAPAML',myThid)
86f14fa6df Jean*0560 #endif
9e647b4f24 Jean*0561         CALL TIMER_START('CHEAPAML      [FORWARD_STEP]',myThid)
86f14fa6df Jean*0562 C-    calculate qnet (and wind stress)
8440e8ae5d Jean*0563         CALL CHEAPAML( myTime, myIter,myThid )
9e647b4f24 Jean*0564         CALL TIMER_STOP ('CHEAPAML      [FORWARD_STEP]',myThid)
86f14fa6df Jean*0565       ENDIF
                0566 #endif /*ALLOW_CHEAPAML */
                0567 
a424c359ed Gael*0568 #ifdef ALLOW_CTRL
35d3d94e31 Jean*0569 C--   Add control vector for forcing and parameter fields
25c5ed8154 Gael*0570       IF ( useCTRL ) THEN
                0571        CALL TIMER_START('CTRL_MAP_FORCING  [FORWARD_STEP]',myThid)
                0572        CALL CTRL_MAP_FORCING( myTime, myIter, myThid )
                0573        CALL TIMER_STOP ('CTRL_MAP_FORCING  [FORWARD_STEP]',myThid)
                0574       ENDIF
448ff6251a Patr*0575 #endif
6424ee9bc0 Curt*0576 
517dbdc414 Jean*0577 #ifdef ALLOW_AUTODIFF_MONITOR
8f0b59c61c Patr*0578       CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )
176ce185cd Step*0579 #endif
                0580 
c1b6df074d Jean*0581 #ifdef COMPONENT_MODULE
904dd2a012 Jean*0582       IF ( useCoupler ) THEN
c1b6df074d Jean*0583 C      Post coupling data that I export.
                0584 C      Read in coupling data that I import.
                0585          CALL TIMER_START('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
f533a5790a Jean*0586          CALL CPL_EXPORT_IMPORT_DATA( myTime, myIter, myThid )
c1b6df074d Jean*0587          CALL TIMER_STOP ('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
529408dc72 Jean*0588       ENDIF
c1b6df074d Jean*0589 #endif /* COMPONENT_MODULE */
696c4221e9 Mart*0590 #ifdef ALLOW_OASIS
                0591       IF ( useOASIS ) THEN
                0592        CALL TIMER_START('OASIS_PUT-GET  [FORWARD_STEP]',myThid)
                0593 C      Post coupling data that I export.
                0594        CALL OASIS_PUT( myTime, myIter, myThid )
                0595 C      Read in coupling data that I import.
                0596        CALL OASIS_GET( myTime, myIter, myThid )
                0597        CALL TIMER_STOP ('OASIS_PUT-GET  [FORWARD_STEP]',myThid)
                0598       ENDIF
                0599 #endif /* ALLOW_OASIS */
                0600 
d8206d87ee Patr*0601 #ifdef ALLOW_EBM
529408dc72 Jean*0602       IF ( useEBM ) THEN
d8206d87ee Patr*0603 # ifdef ALLOW_DEBUG
8440e8ae5d Jean*0604         IF (debugMode) CALL DEBUG_CALL('EBM',myThid)
d8206d87ee Patr*0605 # endif
8440e8ae5d Jean*0606         CALL TIMER_START('EBM                [FORWARD_STEP]',myThid)
                0607         CALL EBM_DRIVER ( myTime, myIter, myThid )
                0608         CALL TIMER_STOP ('EBM                [FORWARD_STEP]',myThid)
529408dc72 Jean*0609       ENDIF
                0610 #endif /* ALLOW_EBM */
d8206d87ee Patr*0611 
9c41af81f6 Timo*0612 #ifdef ALLOW_AUTODIFF_TAMC
                0613 C******************************************************
                0614 C     Store surface forcing fields if required to avoid
                0615 C     calling load_fields_driver in forward_step_ad
                0616 # include "check_lev1_dir_forcing.h"
                0617 C******************************************************
                0618 #endif /* ALLOW_AUTODIFF_TAMC */
                0619 
c8e3a3b543 Jean*0620 C--     Step forward fields and calculate time tendency terms.
                0621 
                0622 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0623       IF (debugMode) CALL DEBUG_CALL('DO_ATMOSPHERIC_PHYS',myThid)
c8e3a3b543 Jean*0624 #endif
529408dc72 Jean*0625       CALL TIMER_START('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
                0626       CALL DO_ATMOSPHERIC_PHYS( myTime, myIter, myThid )
                0627       CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
c8e3a3b543 Jean*0628 
9b184aa726 Patr*0629 #ifdef ALLOW_AUTODIFF_TAMC
                0630 # ifdef ALLOW_KPP
aecc8b0f47 Mart*0631 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics, kind = isbyte
38b71af82a Patr*0632 # endif /* ALLOW_KPP */
aecc8b0f47 Mart*0633 CADJ STORE EmPmR      = comlev1, key = ikey_dynamics, kind = isbyte
                0634 CADJ STORE PmEpR      = comlev1, key = ikey_dynamics, kind = isbyte
b919404dfb Patr*0635 # ifdef ALLOW_OBCS
aecc8b0f47 Mart*0636 CADJ STORE salt       = comlev1, key = ikey_dynamics, kind = isbyte
                0637 CADJ STORE totphihyd  = comlev1, key = ikey_dynamics, kind = isbyte
38b71af82a Patr*0638 # endif /* ALLOW_OBCS */
49a23c9cb2 Patr*0639 # ifdef ALLOW_PTRACERS
aecc8b0f47 Mart*0640 CADJ STORE pTracer    = comlev1, key = ikey_dynamics, kind = isbyte
38b71af82a Patr*0641 # endif /* ALLOW_PTRACERS */
0bcf1b56f4 Jean*0642 # ifdef ALLOW_DEPTH_CONTROL
aecc8b0f47 Mart*0643 CADJ STORE hFacC      = comlev1, key = ikey_dynamics, kind = isbyte
cdc9f269ae Patr*0644 # endif
9b184aa726 Patr*0645 #endif /* ALLOW_AUTODIFF_TAMC */
                0646 
49e3578e36 Ed H*0647 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0648        IF (debugMode) CALL DEBUG_CALL('DO_OCEANIC_PHYS',myThid)
1d71c648ad Jean*0649 #endif
529408dc72 Jean*0650        CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',myThid)
615c650f5e Jean*0651        CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
529408dc72 Jean*0652        CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',myThid)
376d4a0160 Patr*0653 
9e647b4f24 Jean*0654 #ifdef ALLOW_STREAMICE
5fb2fbfa94 Jean*0655        IF (useStreamIce) THEN
                0656          CALL STREAMICE_TIMESTEP ( myThid, myIter,
                0657      &                             iLoop, myTime )
                0658        ENDIF
376d4a0160 Patr*0659 #endif
                0660 
a1ee12c555 Patr*0661 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0662 C***********************************************************************
                0663 C     This block of store directives is for variables that have been
                0664 C     computed in do_oceanics_phys. Storing them here avoids calling
                0665 C     do_oceanic_phys again in forward_step_ad, which should improve
                0666 C     performance because expensive parts of the model are not
                0667 C     recomputed (e.g. seaice).
                0668 # include "check_lev1_dir_ocephys.h"
                0669 C***********************************************************************
0499e7ef48 Patr*0670 #endif /* ALLOW_AUTODIFF_TAMC */
91bac1c842 Andr*0671 
9c41af81f6 Timo*0672 #ifdef GCHEM_ADD2TR_TENDENCY
                0673 #ifndef ALLOW_AUTODIFF
35d3d94e31 Jean*0674       IF ( useGCHEM ) THEN
9c41af81f6 Timo*0675 #endif
529eea311c Gael*0676 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0677 CADJ STORE pTracer     = comlev1, key=ikey_dynamics, kind=isbyte
                0678 CADJ STORE theta, salt = comlev1, key=ikey_dynamics, kind=isbyte
529eea311c Gael*0679 #endif
6153ee95d4 Mart*0680 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0681         IF (debugMode) CALL DEBUG_CALL('GCHEM_CALC_TENDENCY',myThid)
6153ee95d4 Mart*0682 #endif
                0683         CALL TIMER_START('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
                0684         CALL GCHEM_CALC_TENDENCY( myTime, myIter, myThid )
                0685         CALL TIMER_STOP ('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
9b184aa726 Patr*0686 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0687 CADJ STORE gchemTendency = comlev1, key=ikey_dynamics, kind=isbyte
                0688 #endif
                0689 #ifndef ALLOW_AUTODIFF
                0690       ENDIF
                0691 #endif
                0692 #endif /* GCHEM_ADD2TR_TENDENCY */
9b184aa726 Patr*0693 
9a7312b062 Oliv*0694 #ifdef ALLOW_GCHEM
                0695       IF ( .NOT.staggerTimeStep ) THEN
                0696         IF ( useGCHEM ) THEN
61264e5471 Oliv*0697 #ifdef ALLOW_LONGSTEP
                0698          IF ( MOD(myIterBeg, LS_nIter) .EQ. 0 ) THEN
                0699 #endif
9a7312b062 Oliv*0700           CALL GCHEM_CONS(0, myTime, myIter, myThid)
61264e5471 Oliv*0701 #ifdef ALLOW_LONGSTEP
                0702          ENDIF
                0703 #endif
9a7312b062 Oliv*0704         ENDIF
                0705       ENDIF
                0706 #endif
                0707 
4e66ab0b67 Oliv*0708 #ifdef ALLOW_LONGSTEP
9e647b4f24 Jean*0709       IF ( usePTRACERS .AND. LS_whenToSample .EQ. 0 ) THEN
4e66ab0b67 Oliv*0710 C       Average all variables before advection (but after do_oceanic_phys
                0711 C       where Qsw, KPP and GMRedi stuff is computed).
                0712 C       This is like diagnostics package and will reproduce offline
                0713 C       results.
                0714 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0715         IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
4e66ab0b67 Oliv*0716 #endif
                0717         CALL TIMER_START('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                0718         CALL LONGSTEP_AVERAGE( myTime, myIter, myThid )
                0719         CALL TIMER_STOP ('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
fda3710353 Oliv*0720 
                0721 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0722         IF (debugMode)
fda3710353 Oliv*0723      &    CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
                0724 #endif
                0725         CALL TIMER_START('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0726      &                   myThid)
                0727         CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
                0728         CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0729      &                    myThid)
4e66ab0b67 Oliv*0730       ENDIF
                0731 #endif /* ALLOW_LONGSTEP */
                0732 
615c650f5e Jean*0733       IF ( .NOT.staggerTimeStep ) THEN
35d3d94e31 Jean*0734 #ifdef ALLOW_AUTODIFF_TAMC
                0735 CADJ STORE wVel = comlev1, key = ikey_dynamics, kind = isbyte
                0736 #endif
49e3578e36 Ed H*0737 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0738         IF (debugMode) CALL DEBUG_CALL('THERMODYNAMICS',myThid)
544a4ff6e0 Patr*0739 #endif
529408dc72 Jean*0740         CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',myThid)
615c650f5e Jean*0741         CALL THERMODYNAMICS( myTime, myIter, myThid )
529408dc72 Jean*0742         CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',myThid)
fda3710353 Oliv*0743 C--     if not staggerTimeStep: end
b649ac9bae Jean*0744       ENDIF
9c41af81f6 Timo*0745 #if (defined ALLOW_AUTODIFF_TAMC) && (defined ALLOW_OBCS)
                0746 CADJ STORE salt, theta = comlev1, key = ikey_dynamics, kind = isbyte
                0747 #endif /* ALLOW_AUTODIFF_TAMC && ALLOW_OBCS */
4e66ab0b67 Oliv*0748 
                0749 #ifdef ALLOW_LONGSTEP
9e647b4f24 Jean*0750       IF ( usePTRACERS .AND. LS_whenToSample .EQ. 1 ) THEN
fda3710353 Oliv*0751 C       Average T and S after thermodynamics, but U,V,W before dynamics.
                0752 C       This will reproduce online results with staggerTimeStep=.FALSE.
4e66ab0b67 Oliv*0753 C       for LS_nIter=1
                0754 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0755         IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
4e66ab0b67 Oliv*0756 #endif
                0757         CALL TIMER_START('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                0758         CALL LONGSTEP_AVERAGE( myTime, myIter, myThid )
                0759         CALL TIMER_STOP ('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
fda3710353 Oliv*0760 
                0761 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0762         IF (debugMode)
fda3710353 Oliv*0763      &    CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
                0764 #endif
                0765         CALL TIMER_START('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0766      &                   myThid)
                0767         CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
                0768         CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                0769      &                   myThid)
4e66ab0b67 Oliv*0770       ENDIF
                0771 #endif /* ALLOW_LONGSTEP */
                0772 
cb7fa97db9 Jean*0773 c #ifdef ALLOW_NONHYDROSTATIC
                0774       IF ( implicitIntGravWave ) THEN
                0775         CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                0776         CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
                0777         CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                0778       ENDIF
                0779 c #endif
1d71c648ad Jean*0780 
0499e7ef48 Patr*0781 #ifdef ALLOW_AUTODIFF_TAMC
79fda098df Gael*0782 CADJ STORE etaN = comlev1, key = ikey_dynamics, kind = isbyte
bfdbc242ac Jean*0783 # ifdef ALLOW_DEPTH_CONTROL
ced23bb277 Gael*0784 CADJ STORE hFacC, hFacS, hFacW
                0785 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
                0786 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
                0787 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
bfdbc242ac Jean*0788 # endif /* ALLOW_DEPTH_CONTROL */
                0789 #endif /* ALLOW_AUTODIFF_TAMC */
fc62302ca1 Patr*0790 
cee16b76ae Dimi*0791 C--   Step forward fields and calculate time tendency terms.
9e647b4f24 Jean*0792 #ifdef ALLOW_MOM_STEPPING
517dbdc414 Jean*0793 #ifndef ALLOW_AUTODIFF
cee16b76ae Dimi*0794       IF ( momStepping ) THEN
edc3e287c7 Patr*0795 #endif
49e3578e36 Ed H*0796 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0797         IF (debugMode) CALL DEBUG_CALL('DYNAMICS',myThid)
73ead277e0 Alis*0798 #endif
529408dc72 Jean*0799         CALL TIMER_START('DYNAMICS            [FORWARD_STEP]',myThid)
d8ea337c6c Patr*0800         CALL DYNAMICS( myTime, myIter, myThid )
529408dc72 Jean*0801         CALL TIMER_STOP ('DYNAMICS            [FORWARD_STEP]',myThid)
517dbdc414 Jean*0802 #ifndef ALLOW_AUTODIFF
cee16b76ae Dimi*0803       ENDIF
edc3e287c7 Patr*0804 #endif
9e647b4f24 Jean*0805 #endif /* ALLOW_MOM_STEPPING */
a27159adf7 Jean*0806 
0499e7ef48 Patr*0807 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0808 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
8a7ca847ff Patr*0809 CADJ STORE gU, gV  = comlev1, key = ikey_dynamics,
                0810 CADJ &     kind = isbyte
0499e7ef48 Patr*0811 # endif
f66c946416 Step*0812 #endif
d8ea337c6c Patr*0813 
615c650f5e Jean*0814 C--   Update time-counter
                0815       myIter = nIter0 + iLoop
7c3b863339 Jean*0816       myTime = startTime + deltaTClock*iLoop
615c650f5e Jean*0817 
5bc9611487 Ed H*0818 #ifdef ALLOW_MNC
ce8f1dd452 Jean*0819 C     Update MNC time information
5bc9611487 Ed H*0820       IF ( useMNC ) THEN
ce8f1dd452 Jean*0821          CALL MNC_UPDATE_TIME( myTime, myIter, myThid )
529408dc72 Jean*0822       ENDIF
                0823 #endif /* ALLOW_MNC */
5bc9611487 Ed H*0824 
dc2ebbdaf0 Jean*0825 #ifdef ALLOW_OFFLINE
                0826 C     Load new Offline fields and update state-variable
                0827       IF ( useOffLine ) THEN
                0828 #ifdef ALLOW_DEBUG
                0829         IF (debugMode) CALL DEBUG_CALL('OFFLINE_FIELDS_LOAD',myThid)
                0830 #endif /* ALLOW_DEBUG */
                0831         CALL TIMER_START('OFFLINE_FLDS_LOAD   [FORWARD_STEP]',myThid)
                0832         CALL OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
                0833         CALL TIMER_STOP ('OFFLINE_FLDS_LOAD   [FORWARD_STEP]',myThid)
                0834       ENDIF
                0835 #endif /* ALLOW_OFFLINE */
                0836 
615c650f5e Jean*0837 C--   Update geometric factors:
8de3419279 Jean*0838 #ifdef NONLIN_FRSURF
615c650f5e Jean*0839 C-    update hfacC,W,S and recip_hFac according to etaH(n+1) :
855d57fc61 Jean*0840       IF ( select_rStar.GT.0 ) THEN
cdc9f269ae Patr*0841 # ifndef DISABLE_RSTAR_CODE
0499e7ef48 Patr*0842 # ifdef ALLOW_AUTODIFF_TAMC
35d3d94e31 Jean*0843 CADJ STORE rStarFacC, rStarFacS, rStarFacW =
ced23bb277 Gael*0844 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
0499e7ef48 Patr*0845 # endif
529408dc72 Jean*0846         CALL TIMER_START('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
72a058b866 Gael*0847         CALL UPDATE_R_STAR( .TRUE., myTime, myIter, myThid )
529408dc72 Jean*0848         CALL TIMER_STOP ('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
a2a20dcddc Jean*0849 # endif /* DISABLE_RSTAR_CODE */
855d57fc61 Jean*0850       ELSEIF ( selectSigmaCoord.NE.0 ) THEN
a2a20dcddc Jean*0851 # ifndef DISABLE_SIGMA_CODE
                0852         CALL UPDATE_SIGMA( etaH, myTime, myIter, myThid )
cdc9f269ae Patr*0853 # endif /* DISABLE_RSTAR_CODE */
855d57fc61 Jean*0854       ELSE
517dbdc414 Jean*0855 # ifdef ALLOW_AUTODIFF_TAMC
ba9a45d563 Jean*0856 CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
ced23bb277 Gael*0857 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
517dbdc414 Jean*0858 # endif
529408dc72 Jean*0859         CALL TIMER_START('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
72a058b866 Gael*0860         CALL UPDATE_SURF_DR( .TRUE., myTime, myIter, myThid )
529408dc72 Jean*0861         CALL TIMER_STOP ('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
855d57fc61 Jean*0862       ENDIF
0499e7ef48 Patr*0863 # ifdef ALLOW_AUTODIFF_TAMC
de7a0e15d8 Jean*0864 CADJ STORE hFacC, hFacS, hFacW =
ced23bb277 Gael*0865 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
de7a0e15d8 Jean*0866 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW  =
ced23bb277 Gael*0867 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
0499e7ef48 Patr*0868 # endif
855d57fc61 Jean*0869 #endif /* NONLIN_FRSURF */
                0870 
aecc8b0f47 Mart*0871 #if ( defined NONLIN_FRSURF || defined ALLOW_SOLVE4_PS_AND_DRAG || \
                0872       defined ALLOW_CG2D_NSA || defined ALLOW_DEPTH_CONTROL )
855d57fc61 Jean*0873 C-    update CG2D matrix (and preconditioner)
                0874       IF ( momStepping .AND.
                0875      &     ( nonlinFreeSurf.GT.2 .OR. selectImplicitDrag.EQ.2 ) ) THEN
529408dc72 Jean*0876         CALL TIMER_START('UPDATE_CG2D         [FORWARD_STEP]',myThid)
8de3419279 Jean*0877         CALL UPDATE_CG2D( myTime, myIter, myThid )
529408dc72 Jean*0878         CALL TIMER_STOP ('UPDATE_CG2D         [FORWARD_STEP]',myThid)
8de3419279 Jean*0879       ENDIF
aecc8b0f47 Mart*0880 # ifdef ALLOW_AUTODIFF_TAMC
79b5d5775c Jean*0881 CADJ STORE aW2d, aS2d, aC2d, pC, pS, pW =
aecc8b0f47 Mart*0882 CADJ &     comlev1, key = ikey_dynamics, kind = isbyte
                0883 # endif
855d57fc61 Jean*0884 #endif /* NONLIN_FRSURF or ALLOW_SOLVE4_PS_AND_DRAG */
8de3419279 Jean*0885 
b649ac9bae Jean*0886 C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
                0887 #ifdef ALLOW_SHAP_FILT
                0888       IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
f3ec658fc9 Jean*0889         CALL TIMER_START('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
79b5d5775c Jean*0890         CALL SHAP_FILT_APPLY_UV( gU, gV, myTime, myIter, myThid )
f3ec658fc9 Jean*0891         CALL TIMER_STOP ('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
b649ac9bae Jean*0892       ENDIF
                0893 #endif
                0894 #ifdef ALLOW_ZONAL_FILT
                0895       IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
f3ec658fc9 Jean*0896         CALL TIMER_START('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
db44121e58 Jean*0897         CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
f3ec658fc9 Jean*0898         CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
b649ac9bae Jean*0899       ENDIF
a27159adf7 Jean*0900 #endif
b7d016da10 Alis*0901 
d8ea337c6c Patr*0902 C--   Solve elliptic equation(s).
529408dc72 Jean*0903 C     Two-dimensional only for conventional hydrostatic or
d8ea337c6c Patr*0904 C     three-dimensional for non-hydrostatic and/or IGW scheme.
85937bd52b Alis*0905       IF ( momStepping ) THEN
d6e8c9ce95 Patr*0906 #ifdef ALLOW_AUTODIFF_TAMC
616600b8d2 Patr*0907 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
79b5d5775c Jean*0908 CADJ STORE hFacS, hFacW = comlev1, key = ikey_dynamics, kind = isbyte
9c41af81f6 Timo*0909 # endif
d6e8c9ce95 Patr*0910 #endif
615c650f5e Jean*0911         CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
79b5d5775c Jean*0912         CALL SOLVE_FOR_PRESSURE( myTime, myIter, myThid )
615c650f5e Jean*0913         CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
                0914       ENDIF
                0915 
                0916 C--   Correct divergence in flow field and cycle time-stepping momentum
9e647b4f24 Jean*0917 #ifdef ALLOW_MOM_STEPPING
517dbdc414 Jean*0918 #ifndef ALLOW_AUTODIFF
a27159adf7 Jean*0919       IF ( momStepping ) THEN
e2c5f2fe7c Patr*0920 #endif
f3ec658fc9 Jean*0921         CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
79b5d5775c Jean*0922         CALL MOMENTUM_CORRECTION_STEP( myTime, myIter, myThid )
f3ec658fc9 Jean*0923         CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
517dbdc414 Jean*0924 #ifndef ALLOW_AUTODIFF
a27159adf7 Jean*0925       ENDIF
f66c946416 Step*0926 #endif
9e647b4f24 Jean*0927 #endif /* ALLOW_MOM_STEPPING */
9257d2aab8 Patr*0928 #ifdef ALLOW_AUTODIFF_TAMC
b1d6b00360 Jean*0929 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics, kind = isbyte
9257d2aab8 Patr*0930 #endif
615c650f5e Jean*0931 
bfdbc242ac Jean*0932       IF ( calc_wVelocity ) THEN
                0933 C--     Integrate continuity vertically for vertical velocity
                0934 C       (+ update "etaN" & "etaH", exact volume conservation):
                0935         CALL TIMER_START('INTEGR_CONTINUITY   [FORWARD_STEP]',myThid)
                0936         CALL INTEGR_CONTINUITY( uVel, vVel, myTime, myIter, myThid)
                0937         CALL TIMER_STOP ('INTEGR_CONTINUITY   [FORWARD_STEP]',myThid)
85937bd52b Alis*0938       ENDIF
9c41af81f6 Timo*0939 #ifdef ALLOW_AUTODIFF_TAMC
aa93ca8e85 Ciar*0940 C--   These store directives avoid an (expensive) extra
9c41af81f6 Timo*0941 C     "call solve_for_pressure" in forward_step_ad
                0942 CADJ STORE wVel = comlev1, key = ikey_dynamics, kind = isbyte
aa93ca8e85 Ciar*0943 CADJ STORE etaN = comlev1, key = ikey_dynamics, kind = isbyte
9c41af81f6 Timo*0944 #endif
615c650f5e Jean*0945 
                0946 #ifdef NONLIN_FRSURF
                0947       IF ( select_rStar.NE.0 ) THEN
cdc9f269ae Patr*0948 # ifndef DISABLE_RSTAR_CODE
e2c5f2fe7c Patr*0949 #  ifdef ALLOW_AUTODIFF_TAMC
9257d2aab8 Patr*0950 CADJ STORE etaH
                0951 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
35d3d94e31 Jean*0952 CADJ STORE rStarFacC,rStarFacS,rStarFacW
9257d2aab8 Patr*0953 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
e2c5f2fe7c Patr*0954 #  endif
529408dc72 Jean*0955 C--   r* : compute the future level thickness according to etaH(n+1)
                0956         CALL TIMER_START('CALC_R_STAR         [FORWARD_STEP]',myThid)
615c650f5e Jean*0957         CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
529408dc72 Jean*0958         CALL TIMER_STOP ('CALC_R_STAR         [FORWARD_STEP]',myThid)
cdc9f269ae Patr*0959 # endif /* DISABLE_RSTAR_CODE */
a2a20dcddc Jean*0960       ELSEIF ( nonlinFreeSurf.GT.0 .AND. selectSigmaCoord.EQ.0 ) THEN
529408dc72 Jean*0961 C--   compute the future surface level thickness according to etaH(n+1)
0499e7ef48 Patr*0962 # ifdef ALLOW_AUTODIFF_TAMC
8a7ca847ff Patr*0963 CADJ STORE etaH          = comlev1, key = ikey_dynamics,
                0964 CADJ &     kind = isbyte
0499e7ef48 Patr*0965 # endif
529408dc72 Jean*0966         CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',myThid)
615c650f5e Jean*0967         CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
529408dc72 Jean*0968         CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',myThid)
615c650f5e Jean*0969       ENDIF
0499e7ef48 Patr*0970 # ifdef ALLOW_AUTODIFF_TAMC
9257d2aab8 Patr*0971 CADJ STORE rStarExpC
                0972 CADJ &     = comlev1, key = ikey_dynamics, kind = isbyte
8a7ca847ff Patr*0973 CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
                0974 CADJ &     kind = isbyte
35d3d94e31 Jean*0975 CADJ STORE salt,theta = comlev1, key = ikey_dynamics,
8a7ca847ff Patr*0976 CADJ &     kind = isbyte
9c41af81f6 Timo*0977 #  ifdef ALLOW_PTRACERS
                0978 CADJ STORE pTracer    = comlev1, key = ikey_dynamics, kind = isbyte
                0979 #  endif /* ALLOW_PTRACERS */
529408dc72 Jean*0980 # endif
615c650f5e Jean*0981 #endif /* NONLIN_FRSURF */
                0982 
                0983 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0984       IF ( staggerTimeStep ) THEN
ffd0966f4f Jean*0985 C--   do exchanges of U,V (needed for multiDim) when using stagger time-step :
                0986 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*0987         IF (debugMode)
529408dc72 Jean*0988      &   CALL DEBUG_CALL('DO_STAGGER_FIELDS_EXCH.',myThid)
ffd0966f4f Jean*0989 #endif
                0990         CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                0991         CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
                0992         CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
615c650f5e Jean*0993 
0499e7ef48 Patr*0994 #ifdef ALLOW_DIAGNOSTICS
b5c2f2589c Jean*0995 C--   State-variables diagnostics
529408dc72 Jean*0996         IF ( useDiagnostics ) THEN
                0997           CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                0998           CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
                0999           CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                1000         ENDIF
0499e7ef48 Patr*1001 #endif
b5c2f2589c Jean*1002 
9a7312b062 Oliv*1003 #ifdef ALLOW_GCHEM
                1004         IF ( useGCHEM ) THEN
61264e5471 Oliv*1005 #ifdef ALLOW_LONGSTEP
                1006          IF ( MOD(myIterBeg, LS_nIter) .EQ. 0 ) THEN
                1007 #endif
9a7312b062 Oliv*1008           CALL GCHEM_CONS(0, myTime, myIter, myThid)
61264e5471 Oliv*1009 #ifdef ALLOW_LONGSTEP
                1010          ENDIF
                1011 #endif
9a7312b062 Oliv*1012         ENDIF
                1013 #endif
                1014 
35d3d94e31 Jean*1015 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*1016 C     these store directives prevent calling do_stagger_fields_exchanges
                1017 C     again in the AD-part of forward_step_ad
                1018 CADJ STORE salt, theta = comlev1, key = ikey_dynamics, kind = isbyte
                1019 CADJ STORE wVel        = comlev1, key = ikey_dynamics, kind = isbyte
35d3d94e31 Jean*1020 #endif
615c650f5e Jean*1021 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1022         IF (debugMode) CALL DEBUG_CALL('THERMODYNAMICS',myThid)
615c650f5e Jean*1023 #endif
529408dc72 Jean*1024         CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',myThid)
615c650f5e Jean*1025         CALL THERMODYNAMICS( myTime, myIter, myThid )
529408dc72 Jean*1026         CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',myThid)
615c650f5e Jean*1027 
                1028 C--    if staggerTimeStep: end
                1029       ENDIF
9c41af81f6 Timo*1030 #ifdef ALLOW_AUTODIFF_TAMC
                1031 C     this may not be necessary, but it does not do any harm (i.e. it is
                1032 C     ignored by TAF if not needed)
                1033 CADJ STORE salt, theta = comlev1, key = ikey_dynamics, kind = isbyte
                1034 #endif /* ALLOW_AUTODIFF_TAMC */
529408dc72 Jean*1035 C---+--------+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
d8ea337c6c Patr*1036 
7103bd8015 Patr*1037 #ifdef ALLOW_AUTODIFF_TAMC
                1038 cph This is needed because convective_adjustment calls
                1039 cph find_rho which may use pressure()
35d3d94e31 Jean*1040 CADJ STORE totPhiHyd  = comlev1, key = ikey_dynamics,
8a7ca847ff Patr*1041 CADJ &     kind = isbyte
7103bd8015 Patr*1042 #endif
bd27360393 Jean*1043 C--   Apply adjustments to Tracers arrays (T,S,+pTracers)
529408dc72 Jean*1044       CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
                1045       CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
                1046       CALL TIMER_STOP ('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
d8ea337c6c Patr*1047 
4e66ab0b67 Oliv*1048 #ifdef ALLOW_LONGSTEP
                1049       IF ( usePTRACERS ) THEN
fda3710353 Oliv*1050        IF ( LS_whenToSample .EQ. 2 ) THEN
4e66ab0b67 Oliv*1051 C       Average everything at the end of the timestep.  This will
                1052 C       reproduce online results with staggerTimeStep=.TRUE.
fda3710353 Oliv*1053 C       when LS_nIter=1
4e66ab0b67 Oliv*1054 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1055         IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
4e66ab0b67 Oliv*1056 #endif
                1057         CALL TIMER_START('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                1058 C       myIter has been update after dynamics, but the averaging window
                1059 C       should be determined by myIter at beginning of timestep
                1060         CALL LONGSTEP_AVERAGE( myTimeBeg, myIterBeg, myThid )
                1061         CALL TIMER_STOP ('LONGSTEP_AVERAGE    [FORWARD_STEP]',myThid)
                1062 
                1063 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1064         IF (debugMode)
fda3710353 Oliv*1065      &    CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
4e66ab0b67 Oliv*1066 #endif
fda3710353 Oliv*1067         CALL TIMER_START('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
4e66ab0b67 Oliv*1068      &                   myThid)
fda3710353 Oliv*1069         CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
                1070         CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS      [FORWARD_STEP]',
                1071      &                   myThid)
                1072 C--    if LS_whenToSample.EQ.2: end
                1073        ENDIF
4e66ab0b67 Oliv*1074 
bd27360393 Jean*1075 C--   Apply adjustments to passive Tracers arrays (pTracers)
                1076 c      CALL TIMER_START('LS_CORRECTION_STEP  [FORWARD_STEP]',myThid)
                1077 c      CALL LONGSTEP_CORRECTION_STEP(myTime, myIter, myThid)
                1078 c      CALL TIMER_STOP ('LS_CORRECTION_STEP  [FORWARD_STEP]',myThid)
fda3710353 Oliv*1079 C--    if usePTRACERS: end
4e66ab0b67 Oliv*1080       ENDIF
                1081 #endif /* ALLOW_LONGSTEP */
                1082 
6153ee95d4 Mart*1083 #ifdef ALLOW_GCHEM
e359829a2b Mart*1084 C     Add separate timestepping of chemical/biological/forcing
                1085 C     of ptracers here in GCHEM_FORCING_SEP
35d3d94e31 Jean*1086 #ifdef ALLOW_LONGSTEP
                1087       IF ( useGCHEM .AND. LS_doTimeStep ) THEN
                1088 #else
                1089       IF ( useGCHEM ) THEN
                1090 #endif
9c41af81f6 Timo*1091 # ifdef ALLOW_AUTODIFF_TAMC
                1092 CADJ STORE theta, salt = comlev1, key = ikey_dynamics, kind = isbyte
                1093 #  ifdef ALLOW_PTRACERS
                1094 CADJ STORE pTracer     = comlev1, key = ikey_dynamics, kind = isbyte
                1095 #  endif /* ALLOW_PTRACERS */
                1096 # endif
e359829a2b Mart*1097 #ifdef ALLOW_DEBUG
35d3d94e31 Jean*1098         IF (debugMode) CALL DEBUG_CALL('GCHEM_FORCING_SEP',myThid)
e359829a2b Mart*1099 #endif /* ALLOW_DEBUG */
35d3d94e31 Jean*1100         CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
                1101         CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
                1102         CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
529408dc72 Jean*1103       ENDIF
6d54cf9ca1 Ed H*1104 #endif /* ALLOW_GCHEM */
e39d13c4c9 Step*1105 
30a55c64a0 Mart*1106 C--   Do "blocking" sends and receives for tendency "overlap" terms
                1107 c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                1108 c     CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )
                1109 c     CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                1110 
                1111 C--   Do "blocking" sends and receives for field "overlap" terms
                1112       CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
                1113       CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
                1114       CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
9c41af81f6 Timo*1115 #ifdef ALLOW_AUTODIFF_TAMC
                1116 C     These store directives avoid extra subroutine calls, for example,
                1117 C     thermodynamics, tracers_correction_step, gchem_forcing_sep, and
                1118 C     do_fields_blocking_exchages
                1119 CADJ STORE theta, salt = comlev1, key = ikey_dynamics, kind = isbyte
                1120 CADJ STORE uvel,  vvel = comlev1, key = ikey_dynamics, kind = isbyte
                1121 CADJ STORE totPhiHyd   = comlev1, key = ikey_dynamics, kind = isbyte
                1122 # ifdef ALLOW_PTRACERS
                1123 CADJ STORE pTracer     = comlev1, key = ikey_dynamics, kind = isbyte
                1124 # endif
                1125 #endif
30a55c64a0 Mart*1126 
0499e7ef48 Patr*1127 #ifdef ALLOW_DIAGNOSTICS
a27159adf7 Jean*1128       IF ( useDiagnostics ) THEN
cf44a6a231 Andr*1129        CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                1130        CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid )
                1131        CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
                1132       ENDIF
0499e7ef48 Patr*1133 #endif
30a55c64a0 Mart*1134 
bc57263004 Andr*1135 #ifdef ALLOW_GRIDALT
529408dc72 Jean*1136       IF (useGRIDALT) THEN
dc451e9e8f Andr*1137          CALL GRIDALT_UPDATE(myThid)
529408dc72 Jean*1138       ENDIF
bc57263004 Andr*1139 #endif
                1140 
468f196fcd Andr*1141 #ifdef ALLOW_FIZHI
529408dc72 Jean*1142       IF (useFIZHI) THEN
                1143          CALL TIMER_START('FIZHI               [FORWARD_STEP]',myThid)
a9203e518a Andr*1144          CALL STEP_FIZHI_CORR ( myTime, myIter, myThid, dTtracerLev(1) )
529408dc72 Jean*1145          CALL TIMER_STOP ('FIZHI               [FORWARD_STEP]',myThid)
                1146       ENDIF
468f196fcd Andr*1147 #endif
e39d13c4c9 Step*1148 
c806179eb4 Alis*1149 #ifdef ALLOW_FLT
                1150 C--   Calculate float trajectories
                1151       IF (useFLT) THEN
650cc6304d Patr*1152         CALL TIMER_START('FLOATS            [FORWARD_STEP]',myThid)
5fcc68371c Jean*1153         CALL FLT_MAIN( myTime, myIter, myThid )
650cc6304d Patr*1154         CALL TIMER_STOP ('FLOATS            [FORWARD_STEP]',myThid)
c806179eb4 Alis*1155       ENDIF
                1156 #endif
                1157 
94884059ae Jean*1158 #ifdef ALLOW_NEST_PARENT
                1159       IF ( useNEST_PARENT) THEN
                1160         CALL NEST_PARENT_IO_2( myTime, myIter, myThid )
                1161       ENDIF
                1162 #endif /* ALLOW_NEST_PARENT */
                1163 
                1164 #ifdef ALLOW_NEST_CHILD
                1165       IF ( useNEST_CHILD) THEN
                1166             CALL NEST_CHILD_TRANSP( myTime, myIter, myThid )
                1167       ENDIF
                1168 #endif /* ALLOW_NEST_CHILD */
                1169 
ffced37781 Ed H*1170 #ifdef ALLOW_MONITOR
5f45e58a14 Jean*1171       IF ( monitorFreq.GT.0. .OR. adjMonitorFreq.GT.0. ) THEN
d8ea337c6c Patr*1172 C--   Check status of solution (statistics, cfl, etc...)
a27159adf7 Jean*1173         CALL TIMER_START('MONITOR             [FORWARD_STEP]',myThid)
4f8feb8bdf Jean*1174         CALL MONITOR( myTime, myIter, myThid )
a27159adf7 Jean*1175         CALL TIMER_STOP ('MONITOR             [FORWARD_STEP]',myThid)
                1176       ENDIF
ffced37781 Ed H*1177 #endif /* ALLOW_MONITOR */
d8ea337c6c Patr*1178 
449f3c105b Patr*1179 #ifdef ALLOW_COST
                1180 C--     compare model with data and compute cost function
                1181 C--     this is done after exchanges to allow interpolation
                1182       CALL TIMER_START('COST_TILE           [FORWARD_STEP]',myThid)
529408dc72 Jean*1183       CALL COST_TILE  ( myTime, myIter, myThid )
449f3c105b Patr*1184       CALL TIMER_STOP ('COST_TILE           [FORWARD_STEP]',myThid)
                1185 #endif
                1186 
3949c257c5 Gael*1187 #ifdef ALLOW_ECCO
aa93ca8e85 Ciar*1188 C--   Diagnose variables for pkg/ecco averaging and cost function purposes
0cd0083da8 Ou W*1189       IF ( useECCO ) CALL ECCO_PHYS( myTime, myIter, myThid )
3949c257c5 Gael*1190 #endif
                1191 
94884059ae Jean*1192 C--   Check if it has reached the end of simulation
455a90837c Jean*1193       modelEnd = myTime.EQ.endTime .OR. myIter.EQ.nEndIter
b81731e160 Ed H*1194 #ifdef HAVE_SIGREG
                1195       IF ( useSIGREG ) THEN
455a90837c Jean*1196         modelEnd = modelEnd .OR. ( i_got_signal.GT.0 )
b81731e160 Ed H*1197       ENDIF
a27159adf7 Jean*1198 #endif /* HAVE_SIGREG */
b81731e160 Ed H*1199 
94884059ae Jean*1200 C--   Do IO if needed.
                1201       CALL TIMER_START('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
                1202       CALL DO_THE_MODEL_IO( modelEnd, myTime, myIter, myThid )
                1203       CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
                1204 
9fbec3c176 Oliv*1205 #ifdef ALLOW_PTRACERS
                1206 C     Reset the ptracers (but after the io is done)
                1207       IF ( usePTRACERS ) THEN
                1208         CALL TIMER_START('PTRACERS_RESET      [FORWARD_STEP]',myThid)
                1209         CALL PTRACERS_RESET( myTime, myIter, myThid )
                1210         CALL TIMER_STOP ('PTRACERS_RESET      [FORWARD_STEP]',myThid)
                1211       ENDIF
                1212 #endif /* ALLOW_PTRACERS */
                1213 
d8ea337c6c Patr*1214 C--   Save state for restarts
931983c6ab Jean*1215       CALL TIMER_START('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)
94884059ae Jean*1216       CALL DO_WRITE_PICKUP( modelEnd, myTime, myIter, myThid )
931983c6ab Jean*1217       CALL TIMER_STOP ('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)
d8ea337c6c Patr*1218 
455a90837c Jean*1219 #ifdef HAVE_SIGREG
                1220       IF ( useSIGREG ) THEN
                1221         IF ( modelEnd .AND. i_got_signal.GT.0 ) THEN
                1222           STOP 'Checkpoint completed -- killed by signal handler'
                1223         ENDIF
                1224       ENDIF
                1225 #endif /* HAVE_SIGREG */
e01e1e4fa5 Patr*1226 
517dbdc414 Jean*1227 #ifdef ALLOW_AUTODIFF
a10c595eb6 Timo*1228       CALL AUTODIFF_INADMODE_SET( myTime, myIter, myThid )
e01e1e4fa5 Patr*1229 #endif
                1230 
                1231 #ifdef ALLOW_SHOWFLOPS
9e647b4f24 Jean*1232       CALL TIMER_START('SHOWFLOPS_INLOOP   [THE_MAIN_LOOP]', myThid)
                1233       CALL SHOWFLOPS_INLOOP( iloop, myThid )
                1234       CALL TIMER_STOP ('SHOWFLOPS_INLOOP   [THE_MAIN_LOOP]', myThid)
e01e1e4fa5 Patr*1235 #endif
                1236 
49e3578e36 Ed H*1237 #ifdef ALLOW_DEBUG
8440e8ae5d Jean*1238       IF (debugMode) CALL DEBUG_LEAVE('FORWARD_STEP',myThid)
73ead277e0 Alis*1239 #endif
                1240 
fddb7fab2a Jean*1241       RETURN
d8ea337c6c Patr*1242       END