/[MITgcm]/MITgcm_contrib/shelfice_remeshing/code/forward_step.F
ViewVC logotype

Contents of /MITgcm_contrib/shelfice_remeshing/code/forward_step.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (show annotations) (download)
Thu Sep 10 14:41:57 2015 UTC (9 years, 10 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +1 -1 lines
FILE REMOVED
*** empty log message ***

1 C $Header: /u/gcmpack/MITgcm_contrib/shelfice_remeshing/code/forward_step.F,v 1.5 2015/09/02 12:22:35 dgoldberg Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 #ifdef ALLOW_AUTODIFF
8 # include "AUTODIFF_OPTIONS.h"
9 #endif
10 #ifdef ALLOW_GENERIC_ADVDIFF
11 # include "GAD_OPTIONS.h"
12 #endif
13 #ifdef ALLOW_GGL90
14 # include "GGL90_OPTIONS.h"
15 #endif
16 #ifdef ALLOW_GMREDI
17 # include "GMREDI_OPTIONS.h"
18 #endif
19 #ifdef ALLOW_OBCS
20 # include "OBCS_OPTIONS.h"
21 #endif
22 #ifdef ALLOW_THSICE
23 # include "THSICE_OPTIONS.h"
24 #endif
25 #ifdef ALLOW_SEAICE
26 # include "SEAICE_OPTIONS.h"
27 #endif
28 #ifdef ALLOW_PTRACERS
29 # include "PTRACERS_OPTIONS.h"
30 #endif
31 #ifdef ALLOW_EXF
32 # include "EXF_OPTIONS.h"
33 #endif
34 #ifdef ALLOW_STREAMICE
35 # include "STREAMICE_OPTIONS.h"
36 #endif
37 #ifdef ALLOW_COST
38 # include "COST_OPTIONS.h"
39 #endif
40 #ifdef ALLOW_CTRL
41 # include "CTRL_OPTIONS.h"
42 #endif
43 #ifdef ALLOW_ECCO
44 # include "ECCO_OPTIONS.h"
45 #endif
46
47 #define ALLOW_MOM_STEPPING
48 #if ( defined (ALLOW_AUTODIFF) && defined (ALLOW_OFFLINE) )
49 # undef ALLOW_MOM_STEPPING
50 #endif
51
52 CBOP
53 C !ROUTINE: FORWARD_STEP
54 C !INTERFACE:
55 SUBROUTINE FORWARD_STEP( iloop, myTime, myIter, myThid )
56
57 C !DESCRIPTION: \bv
58 C *=================================================================
59 C | SUBROUTINE forward_step
60 C | o Step forward in time the model variables for one time-step
61 C *=================================================================
62 C | The algorithm...
63 C |
64 C | "Calculation of Gs"
65 C | ===================
66 C | This is where all the accelerations and tendencies (ie.
67 C | physics, parameterizations etc...) are calculated
68 C | rho = rho ( theta[n], salt[n] )
69 C | b = b(rho, theta)
70 C | K31 = K31 ( rho )
71 C | Gu[n] = Gu( u[n], v[n], wVel, b, ... )
72 C | Gv[n] = Gv( u[n], v[n], wVel, b, ... )
73 C | Gt[n] = Gt( theta[n], u[n], v[n], wVel, K31, ... )
74 C | Gs[n] = Gs( salt[n], u[n], v[n], wVel, K31, ... )
75 C |
76 C | "Time-stepping" or "Prediction"
77 C | ================================
78 C | The models variables are stepped forward with the appropriate
79 C | time-stepping scheme (currently we use Adams-Bashforth II)
80 C | - For momentum, the result is always *only* a "prediction"
81 C | in that the flow may be divergent and will be "corrected"
82 C | later with a surface pressure gradient.
83 C | - Normally for tracers the result is the new field at time
84 C | level [n+1} *BUT* in the case of implicit diffusion the result
85 C | is also *only* a prediction.
86 C | - We denote "predictors" with an asterisk (*).
87 C | U* = U[n] + dt x ( 3/2 Gu[n] - 1/2 Gu[n-1] )
88 C | V* = V[n] + dt x ( 3/2 Gv[n] - 1/2 Gv[n-1] )
89 C | theta[n+1] = theta[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
90 C | salt[n+1] = salt[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
91 C | With implicit diffusion:
92 C | theta* = theta[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
93 C | salt* = salt[n] + dt x ( 3/2 Gt[n] - 1/2 atG[n-1] )
94 C | (1 + dt * K * d_zz) theta[n+1] = theta*
95 C | (1 + dt * K * d_zz) salt[n+1] = salt*
96 C |
97 C | "Correction Step"
98 C | =================
99 C | Here we update the horizontal velocities with the surface
100 C | pressure such that the resulting flow is either consistent
101 C | with the free-surface evolution or the rigid-lid:
102 C | U[n] = U* + dt x d/dx P
103 C | V[n] = V* + dt x d/dy P
104 C | W[n] = W* + dt x d/dz P (NH mode)
105 C *=================================================================
106 C \ev
107
108 C !CALLING SEQUENCE:
109 C FORWARD_STEP
110 C |
111 C |-- AUTODIFF_INADMODE_UNSET
112 C |
113 C |-- RESET_NLFS_VARS
114 C |-- UPDATE_R_STAR
115 C |-- UPDATE_SURF_DR
116 C |
117 C |-- PTRACERS_SWITCH_ONOFF
118 C |
119 C |-- DIAGNOSTICS_SWITCH_ONOFF
120 C |-- DO_STATEVARS_DIAGS
121 C |
122 C |-- NEST_CHILD_SETMEMO
123 C |-- NEST_PARENT_IO_1
124 C |
125 C |-- LOAD_FIELDS_DRIVER
126 C |
127 C |-- BULKF_FORCING
128 C |
129 C |-- CHEAPAML
130 C |
131 C |-- CTRL_MAP_FORCING
132 C |-- DUMMY_IN_STEPPING
133 C |
134 C |-- CPL_EXPORT_MY_DATA
135 C |-- CPL_IMPORT_EXTERNAL_DATA
136 C |
137 C |-- OASIS_PUT
138 C |-- OASIS_GET
139 C |
140 C |-- EBM_DRIVER
141 C |
142 C |-- DO_ATMOSPHERIC_PHYS
143 C |
144 C |-- DO_OCEANIC_PHYS
145 C |
146 C |-- STREAMICE_TIMESTEP
147 C |
148 C |-- GCHEM_CALC_TENDENCY
149 C |
150 C |-- LONGSTEP_AVERAGE
151 C |-- LONGSTEP_THERMODYNAMICS
152 C |
153 C |-- THERMODYNAMICS
154 C |
155 C |-- LONGSTEP_AVERAGE
156 C |-- LONGSTEP_THERMODYNAMICS
157 C |
158 C |-- DO_STAGGER_FIELDS_EXCHANGES
159 C |
160 C |-- DYNAMICS
161 C |
162 C |-- MNC_UPDATE_TIME
163 C |
164 C |-- OFFLINE_FIELDS_LOAD
165 C |
166 C |-- UPDATE_R_STAR
167 C |-- UPDATE_SIGMA
168 C |-- UPDATE_SURF_DR
169 C |-- UPDATE_CG2D
170 C |
171 C |-- SHAP_FILT_APPLY_UV
172 C |-- ZONAL_FILT_APPLY_UV
173 C |
174 C |-- SOLVE_FOR_PRESSURE
175 C |
176 C |-- MOMENTUM_CORRECTION_STEP
177 C |
178 C |-- INTEGR_CONTINUITY
179 C |
180 C |-- CALC_R_STAR
181 C |-- CALC_SURF_DR
182 C |
183 C |-- DO_STAGGER_FIELDS_EXCHANGES
184 C |
185 C |-- DO_STATEVARS_DIAGS
186 C |
187 C |-- THERMODYNAMICS
188 C |
189 C |-- TRACERS_CORRECTION_STEP
190 C |
191 C |-- LONGSTEP_AVERAGE
192 C |-- LONGSTEP_THERMODYNAMICS
193 C |
194 C |-- GCHEM_FORCING_SEP
195 C |
196 C |-- DO_FIELDS_BLOCKING_EXCHANGES
197 C |
198 C |-- DO_STATEVARS_DIAGS
199 C |
200 C |-- GRIDALT_UPDATE
201 C |-- STEP_FIZHI_CORR
202 C |
203 C |-- FLT_MAIN
204 C |
205 C |-- DO_STATEVARS_TAVE
206 C |
207 C |-- NEST_PARENT_IO_2
208 C |-- NEST_CHILD_TRANSP
209 C |
210 C |-- MONITOR
211 C |
212 C |-- COST_TILE
213 C |
214 C |-- DO_THE_MODEL_IO
215 C |
216 C |-- PTRACERS_RESET
217 C |
218 C |-- DO_WRITE_PICKUP
219 C |
220 C |-- AUTODIFF_INADMODE_SET
221 C |
222 C |-- SHOWFLOPS_INLOOP
223
224 C !USES:
225 IMPLICIT NONE
226 C == Global variables ==
227 #include "SIZE.h"
228 #include "EEPARAMS.h"
229 #include "PARAMS.h"
230 #include "DYNVARS.h"
231 #include "GRID.h"
232 #ifdef HAVE_SIGREG
233 #include "SIGREG.h"
234 #endif
235
236 #ifdef ALLOW_SHAP_FILT
237 # include "SHAP_FILT.h"
238 #endif
239 #ifdef ALLOW_ZONAL_FILT
240 # include "ZONAL_FILT.h"
241 #endif
242 #ifdef COMPONENT_MODULE
243 # include "CPL_PARAMS.h"
244 #endif
245
246 #ifdef ALLOW_LONGSTEP
247 # include "LONGSTEP_PARAMS.h"
248 # include "LONGSTEP.h"
249 #endif
250
251 #ifdef ALLOW_AUTODIFF
252 # include "AUTODIFF_MYFIELDS.h"
253 # include "FFIELDS.h"
254 # include "SURFACE.h"
255
256 # include "tamc.h"
257 # ifdef ALLOW_CTRL
258 # include "CTRL_SIZE.h"
259 # include "ctrl.h"
260 # include "ctrl_dummy.h"
261 # include "CTRL_GENARR.h"
262 # include "CTRL_OBCS.h"
263 # endif
264 # ifdef ALLOW_COST
265 # include "cost.h"
266 # endif
267 # ifdef ALLOW_ECCO
268 # include "ecco_cost.h"
269 # endif
270 # include "EOS.h"
271 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
272 # include "GRID.h"
273 # endif
274 # ifdef ALLOW_GMREDI
275 # include "GMREDI.h"
276 # endif
277 # ifdef ALLOW_EXF
278 # include "EXF_FIELDS.h"
279 # include "EXF_PARAM.h"
280 # ifdef ALLOW_BULKFORMULAE
281 # include "EXF_CONSTANTS.h"
282 # endif
283 # endif
284 # ifdef ALLOW_CD_CODE
285 # include "CD_CODE_VARS.h"
286 # endif
287 # ifdef ALLOW_GENERIC_ADVDIFF
288 # include "GAD.h"
289 # include "GAD_SOM_VARS.h"
290 # endif
291 # ifdef ALLOW_GGL90
292 # include "GGL90.h"
293 # endif
294 # ifdef ALLOW_PTRACERS
295 # include "PTRACERS_SIZE.h"
296 # include "PTRACERS_FIELDS.h"
297 # endif
298 # ifdef ALLOW_GCHEM
299 # include "GCHEM_FIELDS.h"
300 # endif
301 # ifdef ALLOW_CFC
302 # include "CFC.h"
303 # endif
304 # ifdef ALLOW_DIC
305 # include "DIC_VARS.h"
306 # include "DIC_LOAD.h"
307 # include "DIC_ATMOS.h"
308 # include "DIC_COST.h"
309 # endif
310 # ifdef ALLOW_OBCS
311 # include "OBCS_PARAMS.h"
312 # include "OBCS_FIELDS.h"
313 # include "OBCS_SEAICE.h"
314 # ifdef ALLOW_PTRACERS
315 # include "OBCS_PTRACERS.h"
316 # endif
317 # endif
318 # ifdef ALLOW_THSICE
319 # include "THSICE_PARAMS.h"
320 # include "THSICE_SIZE.h"
321 # include "THSICE_VARS.h"
322 # include "THSICE_COST.h"
323 # endif
324 # ifdef ALLOW_SEAICE
325 # include "SEAICE_SIZE.h"
326 # include "SEAICE.h"
327 # include "SEAICE_COST.h"
328 # endif
329 # ifdef ALLOW_SALT_PLUME
330 # include "SALT_PLUME.h"
331 # endif
332 # ifdef ALLOW_SHELFICE
333 # include "SHELFICE.h"
334 # include "SHELFICE_COST.h"
335 # endif
336 # ifdef ALLOW_STREAMICE
337 # include "STREAMICE.h"
338 # include "STREAMICE_ADV.h"
339 # include "STREAMICE_BDRY.h"
340 # include "STREAMICE_CG.h"
341 # endif
342 # ifdef ALLOW_EBM
343 # include "EBM.h"
344 # endif
345 # ifdef ALLOW_KPP
346 # include "KPP.h"
347 # endif
348 # ifdef ALLOW_RBCS
349 # include "RBCS_SIZE.h"
350 # include "RBCS_FIELDS.h"
351 # endif
352 # ifdef ALLOW_OFFLINE
353 # include "OFFLINE.h"
354 # endif
355 # ifdef ALLOW_CG2D_NSA
356 # include "CG2D.h"
357 # endif
358 #endif /* ALLOW_AUTODIFF */
359
360 C !INPUT/OUTPUT PARAMETERS:
361 C == Routine arguments ==
362 C note: under the multi-threaded model myIter and
363 C myTime are local variables passed around as routine
364 C arguments. Although this is fiddly it saves the need to
365 C impose additional synchronisation points when they are
366 C updated.
367 C myTime :: time counter for this thread
368 C myIter :: iteration counter for this thread
369 C myThid :: thread number for this instance of the routine.
370 INTEGER iloop
371 _RL myTime
372 INTEGER myIter
373 INTEGER myThid
374
375 C !LOCAL VARIABLES:
376 C == Local variables ==
377 C modelEnd :: true if reaching the end of the run
378 C myTimeBeg :: time at beginning of time step (needed by longstep)
379 C myIterBeg :: iteration number at beginning of time step
380 LOGICAL modelEnd
381 #ifdef ALLOW_LONGSTEP
382 INTEGER myIterBeg
383 _RL myTimeBeg
384 #endif /* ALLOW_LONGSTEP */
385 CEOP
386
387 #ifdef ALLOW_SHELFICE
388 C-- Remesh shelfice
389 CALL TIMER_START('SHELFICE_REMESHING [FORWARD_STEP]',myThid)
390 CALL SHELFICE_REMESHING (myTime, myIter, myThid )
391 CALL TIMER_STOP('SHELFICE_REMESHING [FORWARD_STEP]',myThid)
392
393 #endif /* ALLOW_SHELFICE */
394
395
396 #ifdef ALLOW_DEBUG
397 IF (debugMode) CALL DEBUG_ENTER('FORWARD_STEP',myThid)
398 #endif
399
400 #ifdef ALLOW_AUTODIFF
401 CALL AUTODIFF_INADMODE_UNSET( myThid )
402 #endif
403
404 #ifdef ALLOW_AUTODIFF
405 C-- Reset the model iteration counter and the model time.
406 myIter = nIter0 + (iloop-1)
407 myTime = startTime + float(iloop-1)*deltaTClock
408 #endif
409
410 #ifdef ALLOW_LONGSTEP
411 C store this for longstep_average with staggerTimeStep
412 C which is called after myIter and myTime are incremented
413 C but needs iter/time at beginning of time step
414 myIterBeg = myIter
415 myTimeBeg = myTime
416 #endif /* ALLOW_LONGSTEP */
417
418 #ifdef ALLOW_AUTODIFF_TAMC
419 c**************************************
420 #include "checkpoint_lev1_directives.h"
421 #include "checkpoint_lev1_template.h"
422 c**************************************
423 #endif
424 C-- Reset geometric factors (hFacC,W,S & recip_hFac) to their current values:
425 C added to simplify adjoint derivation - no effect in forward run
426 #ifdef NONLIN_FRSURF
427 #ifndef ALLOW_AUTODIFF
428 IF ( doResetHFactors ) THEN
429 #endif
430 CALL RESET_NLFS_VARS( myTime, myIter, myThid )
431 IF ( select_rStar.GT.0 ) THEN
432 # ifndef DISABLE_RSTAR_CODE
433 # ifdef ALLOW_AUTODIFF_TAMC
434 CADJ STORE rStarFacC, rStarFacS, rStarFacW =
435 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
436 # endif
437 CALL TIMER_START('UPDATE_R_STAR [FORWARD_STEP]',myThid)
438 CALL UPDATE_R_STAR( .FALSE., myTime, myIter, myThid )
439 CALL TIMER_STOP ('UPDATE_R_STAR [FORWARD_STEP]',myThid)
440 # endif /* DISABLE_RSTAR_CODE */
441 ELSE
442 #ifdef ALLOW_AUTODIFF_TAMC
443 CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
444 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
445 #endif
446 CALL TIMER_START('UPDATE_SURF_DR [FORWARD_STEP]',myThid)
447 CALL UPDATE_SURF_DR( .FALSE., myTime, myIter, myThid )
448 CALL TIMER_STOP ('UPDATE_SURF_DR [FORWARD_STEP]',myThid)
449 ENDIF
450
451 #ifdef ALLOW_AUTODIFF_TAMC
452 CADJ STORE hFacC, hFacS, hFacW =
453 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
454 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW =
455 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
456 #endif
457 #ifndef ALLOW_AUTODIFF
458 ENDIF
459 #endif
460 #endif /* NONLIN_FRSURF */
461
462 #ifdef ALLOW_PTRACERS
463 C-- Switch on/off individual tracer time-stepping
464 IF ( usePTRACERS ) THEN
465 CALL PTRACERS_SWITCH_ONOFF( myTime, myIter, myThid )
466 ENDIF
467 #endif /* ALLOW_PTRACERS */
468
469 C-- Switch on/off diagnostics for snap-shot output:
470 #ifdef ALLOW_DIAGNOSTICS
471 IF ( useDiagnostics ) THEN
472 CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )
473 C-- State-variables diagnostics
474 CALL TIMER_START('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid)
475 CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
476 CALL TIMER_STOP ('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid)
477 ENDIF
478 #endif /* ALLOW_DIAGNOSTICS */
479
480 #ifdef ALLOW_NEST_CHILD
481 IF ( useNEST_CHILD) THEN
482 CALL NEST_CHILD_SETMEMO( myTime, myIter, myThid )
483 ENDIF
484 #endif /* ALLOW_NEST_CHILD */
485
486 #ifdef ALLOW_NEST_PARENT
487 IF ( useNEST_PARENT) THEN
488 CALL NEST_PARENT_IO_1( myTime, myIter, myThid )
489 ENDIF
490 #endif /* ALLOW_NEST_PARENT */
491
492 C-- Call driver to load external forcing fields from file
493 #ifdef ALLOW_DEBUG
494 IF (debugMode) CALL DEBUG_CALL('LOAD_FIELDS_DRIVER',myThid)
495 #endif
496 #ifdef ALLOW_AUTODIFF_TAMC
497 cph Important STORE that avoids hidden recomp. of load_fields_driver
498 CADJ STORE theta = comlev1, key = ikey_dynamics,
499 CADJ & kind = isbyte
500 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics,
501 CADJ & kind = isbyte
502 #endif
503 CALL TIMER_START('LOAD_FIELDS_DRIVER [FORWARD_STEP]',myThid)
504 CALL LOAD_FIELDS_DRIVER( myTime, myIter, myThid )
505 CALL TIMER_STOP ('LOAD_FIELDS_DRIVER [FORWARD_STEP]',myThid)
506
507 C-- Call Bulk-Formulae forcing package
508 #ifdef ALLOW_BULK_FORCE
509 IF ( useBulkForce ) THEN
510 #ifdef ALLOW_DEBUG
511 IF (debugMode) CALL DEBUG_CALL('BULKF_FORCING',myThid)
512 #endif
513 CALL TIMER_START('BULKF_FORCING [FORWARD_STEP]',myThid)
514 C- calculate qnet and empmr (and wind stress)
515 CALL BULKF_FORCING( myTime, myIter, myThid )
516 CALL TIMER_STOP ('BULKF_FORCING [FORWARD_STEP]',myThid)
517 ENDIF
518 #endif /* ALLOW_BULK_FORCE */
519
520 C-- Call external chepaml forcing package
521 #ifdef ALLOW_CHEAPAML
522 IF ( useCheapAML ) THEN
523 #ifdef ALLOW_DEBUG
524 IF (debugMode) CALL DEBUG_CALL('CHEAPAML',myThid)
525 #endif
526 CALL TIMER_START('CHEAPAML [FORWARD_STEP]',myThid)
527 C- calculate qnet (and wind stress)
528 CALL CHEAPAML( myTime, myIter,myThid )
529 CALL TIMER_STOP ('CHEAPAML [FORWARD_STEP]',myThid)
530 ENDIF
531 #endif /*ALLOW_CHEAPAML */
532
533 #ifdef ALLOW_CTRL
534 C-- Add control vector for forcing and parameter fields
535 IF ( ( useCTRL ).AND.( myIter .EQ. nIter0 ) )
536 & CALL CTRL_MAP_FORCING (myThid)
537 #endif
538
539 #ifdef ALLOW_AUTODIFF_MONITOR
540 CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )
541 #endif
542
543 #ifdef COMPONENT_MODULE
544 IF ( useCoupler ) THEN
545 C Post coupling data that I export.
546 C Read in coupling data that I import.
547 CALL TIMER_START('CPL_EXPORT-IMPORT [FORWARD_STEP]',myThid)
548 CALL CPL_EXPORT_MY_DATA( myTime, myIter, myThid )
549 CALL CPL_IMPORT_EXTERNAL_DATA( myTime, myIter, myThid )
550 CALL TIMER_STOP ('CPL_EXPORT-IMPORT [FORWARD_STEP]',myThid)
551 ENDIF
552 #endif /* COMPONENT_MODULE */
553 #ifdef ALLOW_OASIS
554 IF ( useOASIS ) THEN
555 CALL TIMER_START('OASIS_PUT-GET [FORWARD_STEP]',myThid)
556 C Post coupling data that I export.
557 CALL OASIS_PUT( myTime, myIter, myThid )
558 C Read in coupling data that I import.
559 CALL OASIS_GET( myTime, myIter, myThid )
560 CALL TIMER_STOP ('OASIS_PUT-GET [FORWARD_STEP]',myThid)
561 ENDIF
562 #endif /* ALLOW_OASIS */
563
564 #ifdef ALLOW_EBM
565 IF ( useEBM ) THEN
566 # ifdef ALLOW_DEBUG
567 IF (debugMode) CALL DEBUG_CALL('EBM',myThid)
568 # endif
569 CALL TIMER_START('EBM [FORWARD_STEP]',myThid)
570 CALL EBM_DRIVER ( myTime, myIter, myThid )
571 CALL TIMER_STOP ('EBM [FORWARD_STEP]',myThid)
572 ENDIF
573 #endif /* ALLOW_EBM */
574
575 C-- Step forward fields and calculate time tendency terms.
576
577 #ifdef ALLOW_DEBUG
578 IF (debugMode) CALL DEBUG_CALL('DO_ATMOSPHERIC_PHYS',myThid)
579 #endif
580 CALL TIMER_START('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
581 CALL DO_ATMOSPHERIC_PHYS( myTime, myIter, myThid )
582 CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
583
584 #ifdef ALLOW_AUTODIFF_TAMC
585 CADJ STORE surfaceForcingTice = comlev1, key = ikey_dynamics,
586 CADJ & kind = isbyte
587 # ifdef ALLOW_KPP
588 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics,
589 CADJ & kind = isbyte
590 # endif /* ALLOW_KPP */
591 # ifdef EXACT_CONSERV
592 CADJ STORE EmPmR = comlev1, key=ikey_dynamics, kind=isbyte
593 CADJ STORE PmEpR = comlev1, key=ikey_dynamics, kind=isbyte
594 # endif
595 # ifdef ALLOW_OBCS
596 CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
597 CADJ STORE totphihyd = comlev1, key=ikey_dynamics, kind=isbyte
598 # ifdef ALLOW_OBCS_STEVENS
599 CADJ STORE gsNm1 = comlev1, key=ikey_dynamics, kind=isbyte
600 CADJ STORE gtNm1 = comlev1, key=ikey_dynamics, kind=isbyte
601 # endif
602 # endif /* ALLOW_OBCS */
603 # ifdef ALLOW_PTRACERS
604 CADJ STORE pTracer = comlev1, key = ikey_dynamics,
605 CADJ & kind = isbyte
606 # endif /* ALLOW_PTRACERS */
607 # ifdef ALLOW_DEPTH_CONTROL
608 CADJ STORE hFacC = comlev1, key = ikey_dynamics, kind = isbyte
609 # endif
610 #endif /* ALLOW_AUTODIFF_TAMC */
611
612 #ifdef ALLOW_DEBUG
613 IF (debugMode) CALL DEBUG_CALL('DO_OCEANIC_PHYS',myThid)
614 #endif
615 CALL TIMER_START('DO_OCEANIC_PHYS [FORWARD_STEP]',myThid)
616 CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
617 CALL TIMER_STOP ('DO_OCEANIC_PHYS [FORWARD_STEP]',myThid)
618
619
620 #ifdef ALLOW_STREAMICE
621 IF (useStreamIce) THEN
622 CALL STREAMICE_TIMESTEP ( myThid, myIter,
623 & iLoop, myTime )
624 ENDIF
625 #endif
626
627 #ifdef ALLOW_AUTODIFF_TAMC
628 CADJ STORE EmPmR = comlev1, key = ikey_dynamics,
629 CADJ & kind = isbyte
630 # ifdef EXACT_CONSERV
631 CADJ STORE PmEpR = comlev1, key = ikey_dynamics,
632 CADJ & kind = isbyte
633 # endif
634 cph-test(
635 CADJ STORE surfaceForcingU = comlev1, key=ikey_dynamics, kind=isbyte
636 CADJ STORE surfaceForcingV = comlev1, key=ikey_dynamics, kind=isbyte
637 CADJ STORE qsw = comlev1, key = ikey_dynamics, kind = isbyte
638 # ifdef ATMOSPHERIC_LOADING
639 CADJ STORE phi0surf = comlev1, key = ikey_dynamics, kind = isbyte
640 # endif
641 cph-test)
642
643 # ifdef ALLOW_DEPTH_CONTROL
644 CADJ STORE hFacC, hFacS, hFacW
645 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
646 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
647 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
648 CADJ STORE surfaceForcingU, surfaceForcingV =
649 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
650 # endif
651 #endif /* ALLOW_AUTODIFF_TAMC */
652
653 #ifdef ALLOW_GCHEM
654 IF ( useGCHEM ) THEN
655 #ifdef ALLOW_AUTODIFF_TAMC
656 CADJ STORE pTracer = comlev1, key = ikey_dynamics,
657 CADJ & kind = isbyte
658 CADJ STORE theta, salt = comlev1, key = ikey_dynamics,
659 CADJ & kind = isbyte
660 #endif
661 #ifdef ALLOW_DEBUG
662 IF (debugMode) CALL DEBUG_CALL('GCHEM_CALC_TENDENCY',myThid)
663 #endif
664 CALL TIMER_START('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
665 CALL GCHEM_CALC_TENDENCY( myTime, myIter, myThid )
666 CALL TIMER_STOP ('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
667 ENDIF
668 #endif /* ALLOW_GCHEM */
669
670 #ifdef ALLOW_AUTODIFF_TAMC
671 cph needed to be moved here from do_oceanic_physics
672 cph to be visible down the road
673
674 CADJ STORE rhoInSitu = comlev1, key = ikey_dynamics,
675 CADJ & kind = isbyte
676 CADJ STORE surfaceForcingS = comlev1, key = ikey_dynamics,
677 CADJ & kind = isbyte
678 CADJ STORE surfaceForcingT = comlev1, key = ikey_dynamics,
679 CADJ & kind = isbyte
680 CADJ STORE surfaceForcingTice = comlev1, key = ikey_dynamics,
681 CADJ & kind = isbyte
682 CADJ STORE IVDConvCount = comlev1, key = ikey_dynamics,
683 CADJ & kind = isbyte
684 # ifdef ALLOW_PTRACERS
685 CADJ STORE surfaceForcingPTr = comlev1, key = ikey_dynamics,
686 CADJ & kind = isbyte
687 # endif
688
689 # ifdef ALLOW_GMREDI
690 CADJ STORE Kwx = comlev1, key = ikey_dynamics,
691 CADJ & kind = isbyte
692 CADJ STORE Kwy = comlev1, key = ikey_dynamics,
693 CADJ & kind = isbyte
694 CADJ STORE Kwz = comlev1, key = ikey_dynamics,
695 CADJ & kind = isbyte
696 # ifdef GM_BOLUS_ADVEC
697 CADJ STORE GM_PsiX = comlev1, key = ikey_dynamics,
698 CADJ & kind = isbyte
699 CADJ STORE GM_PsiY = comlev1, key = ikey_dynamics,
700 CADJ & kind = isbyte
701 # endif
702 # endif
703
704 # ifdef ALLOW_KPP
705 CADJ STORE KPPghat = comlev1, key = ikey_dynamics,
706 CADJ & kind = isbyte
707 CADJ STORE KPPfrac = comlev1, key = ikey_dynamics,
708 CADJ & kind = isbyte
709 CADJ STORE KPPdiffKzS = comlev1, key = ikey_dynamics,
710 CADJ & kind = isbyte
711 CADJ STORE KPPdiffKzT = comlev1, key = ikey_dynamics,
712 CADJ & kind = isbyte
713 # endif
714
715 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
716 CADJ STORE theta,salt = comlev1, key = ikey_dynamics, kind = isbyte
717 CADJ STORE etaH = comlev1, key = ikey_dynamics, kind = isbyte
718 # ifdef ALLOW_CD_CODE
719 CADJ STORE etaNm1 = comlev1, key = ikey_dynamics, kind = isbyte
720 # endif
721 # ifndef DISABLE_RSTAR_CODE
722 CADJ STORE rStarExpC = comlev1, key = ikey_dynamics, kind = isbyte
723 # endif
724 # endif
725 #endif /* ALLOW_AUTODIFF_TAMC */
726
727 #ifdef ALLOW_LONGSTEP
728 IF ( usePTRACERS .AND. LS_whenToSample .EQ. 0 ) THEN
729 C Average all variables before advection (but after do_oceanic_phys
730 C where Qsw, KPP and GMRedi stuff is computed).
731 C This is like diagnostics package and will reproduce offline
732 C results.
733 #ifdef ALLOW_DEBUG
734 IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
735 #endif
736 CALL TIMER_START('LONGSTEP_AVERAGE [FORWARD_STEP]',myThid)
737 CALL LONGSTEP_AVERAGE( myTime, myIter, myThid )
738 CALL TIMER_STOP ('LONGSTEP_AVERAGE [FORWARD_STEP]',myThid)
739
740 #ifdef ALLOW_DEBUG
741 IF (debugMode)
742 & CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
743 #endif
744 CALL TIMER_START('LONGSTEP_THERMODYNAMICS [FORWARD_STEP]',
745 & myThid)
746 CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
747 CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS [FORWARD_STEP]',
748 & myThid)
749 ENDIF
750 #endif /* ALLOW_LONGSTEP */
751
752 IF ( .NOT.staggerTimeStep ) THEN
753 #ifdef ALLOW_AUTODIFF_TAMC
754 CADJ STORE wVel = comlev1, key = ikey_dynamics, kind = isbyte
755 #endif
756 #ifdef ALLOW_DEBUG
757 IF (debugMode) CALL DEBUG_CALL('THERMODYNAMICS',myThid)
758 #endif
759 CALL TIMER_START('THERMODYNAMICS [FORWARD_STEP]',myThid)
760 CALL THERMODYNAMICS( myTime, myIter, myThid )
761 CALL TIMER_STOP ('THERMODYNAMICS [FORWARD_STEP]',myThid)
762 C-- if not staggerTimeStep: end
763 ENDIF
764
765 #ifdef ALLOW_LONGSTEP
766 IF ( usePTRACERS .AND. LS_whenToSample .EQ. 1 ) THEN
767 C Average T and S after thermodynamics, but U,V,W before dynamics.
768 C This will reproduce online results with staggerTimeStep=.FALSE.
769 C for LS_nIter=1
770 #ifdef ALLOW_DEBUG
771 IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
772 #endif
773 CALL TIMER_START('LONGSTEP_AVERAGE [FORWARD_STEP]',myThid)
774 CALL LONGSTEP_AVERAGE( myTime, myIter, myThid )
775 CALL TIMER_STOP ('LONGSTEP_AVERAGE [FORWARD_STEP]',myThid)
776
777 #ifdef ALLOW_DEBUG
778 IF (debugMode)
779 & CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
780 #endif
781 CALL TIMER_START('LONGSTEP_THERMODYNAMICS [FORWARD_STEP]',
782 & myThid)
783 CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
784 CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS [FORWARD_STEP]',
785 & myThid)
786 ENDIF
787 #endif /* ALLOW_LONGSTEP */
788
789 c #ifdef ALLOW_NONHYDROSTATIC
790 IF ( implicitIntGravWave ) THEN
791 CALL TIMER_START('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
792 CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
793 CALL TIMER_STOP ('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
794 ENDIF
795 c #endif
796
797 #ifdef ALLOW_AUTODIFF_TAMC
798 CADJ STORE etaN = comlev1, key = ikey_dynamics, kind = isbyte
799 # ifdef ALLOW_DEPTH_CONTROL
800 CADJ STORE hFacC, hFacS, hFacW
801 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
802 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
803 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
804 # endif /* ALLOW_DEPTH_CONTROL */
805 #endif /* ALLOW_AUTODIFF_TAMC */
806
807 C-- Step forward fields and calculate time tendency terms.
808 #ifdef ALLOW_MOM_STEPPING
809 #ifndef ALLOW_AUTODIFF
810 IF ( momStepping ) THEN
811 #endif
812 #ifdef ALLOW_DEBUG
813 IF (debugMode) CALL DEBUG_CALL('DYNAMICS',myThid)
814 #endif
815 CALL TIMER_START('DYNAMICS [FORWARD_STEP]',myThid)
816 CALL DYNAMICS( myTime, myIter, myThid )
817 CALL TIMER_STOP ('DYNAMICS [FORWARD_STEP]',myThid)
818 #ifndef ALLOW_AUTODIFF
819 ENDIF
820 #endif
821 #endif /* ALLOW_MOM_STEPPING */
822
823 #ifdef ALLOW_AUTODIFF_TAMC
824 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
825 CADJ STORE gU, gV = comlev1, key = ikey_dynamics,
826 CADJ & kind = isbyte
827 # endif
828 #endif
829
830 C-- Update time-counter
831 myIter = nIter0 + iLoop
832 myTime = startTime + deltaTClock * float(iLoop)
833
834 #ifdef ALLOW_MNC
835 C Update MNC time information
836 IF ( useMNC ) THEN
837 CALL MNC_UPDATE_TIME( myTime, myIter, myThid )
838 ENDIF
839 #endif /* ALLOW_MNC */
840
841 #ifdef ALLOW_OFFLINE
842 C Load new Offline fields and update state-variable
843 IF ( useOffLine ) THEN
844 #ifdef ALLOW_DEBUG
845 IF (debugMode) CALL DEBUG_CALL('OFFLINE_FIELDS_LOAD',myThid)
846 #endif /* ALLOW_DEBUG */
847 CALL TIMER_START('OFFLINE_FLDS_LOAD [FORWARD_STEP]',myThid)
848 CALL OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
849 CALL TIMER_STOP ('OFFLINE_FLDS_LOAD [FORWARD_STEP]',myThid)
850 ENDIF
851 #endif /* ALLOW_OFFLINE */
852
853 C-- Update geometric factors:
854 #ifdef NONLIN_FRSURF
855 C- update hfacC,W,S and recip_hFac according to etaH(n+1) :
856 IF ( select_rStar.GT.0 ) THEN
857 # ifndef DISABLE_RSTAR_CODE
858 # ifdef ALLOW_AUTODIFF_TAMC
859 CADJ STORE rStarFacC, rStarFacS, rStarFacW =
860 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
861 # endif
862 CALL TIMER_START('UPDATE_R_STAR [FORWARD_STEP]',myThid)
863 CALL UPDATE_R_STAR( .TRUE., myTime, myIter, myThid )
864 CALL TIMER_STOP ('UPDATE_R_STAR [FORWARD_STEP]',myThid)
865 # endif /* DISABLE_RSTAR_CODE */
866 ELSEIF ( selectSigmaCoord.NE.0 ) THEN
867 # ifndef DISABLE_SIGMA_CODE
868 CALL UPDATE_SIGMA( etaH, myTime, myIter, myThid )
869 # endif /* DISABLE_RSTAR_CODE */
870 ELSE
871 # ifdef ALLOW_AUTODIFF_TAMC
872 CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
873 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
874 # endif
875 CALL TIMER_START('UPDATE_SURF_DR [FORWARD_STEP]',myThid)
876 CALL UPDATE_SURF_DR( .TRUE., myTime, myIter, myThid )
877 CALL TIMER_STOP ('UPDATE_SURF_DR [FORWARD_STEP]',myThid)
878 ENDIF
879
880
881 # ifdef ALLOW_AUTODIFF_TAMC
882 CADJ STORE hFacC, hFacS, hFacW =
883 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
884 CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW =
885 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
886 # ifdef ALLOW_CG2D_NSA
887 CADJ STORE aW2d, aS2d, aC2d =
888 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
889 CADJ STORE pC, pS, pW =
890 CADJ & comlev1, key = ikey_dynamics, kind = isbyte
891 # endif
892 # endif
893 C- update also CG2D matrix (and preconditioner)
894 IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
895 CALL TIMER_START('UPDATE_CG2D [FORWARD_STEP]',myThid)
896 CALL UPDATE_CG2D( myTime, myIter, myThid )
897 CALL TIMER_STOP ('UPDATE_CG2D [FORWARD_STEP]',myThid)
898 ENDIF
899 #endif /* NONLIN_FRSURF */
900
901
902 C-- Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
903 #ifdef ALLOW_SHAP_FILT
904 IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
905 CALL TIMER_START('SHAP_FILT_UV [FORWARD_STEP]',myThid)
906 IF (implicDiv2Dflow.LT.1.) THEN
907 C-- Explicit+Implicit part of the Barotropic Flow Divergence
908 C => Filtering of uVel,vVel is necessary
909 CALL SHAP_FILT_APPLY_UV( uVel,vVel,
910 & myTime, myIter, myThid )
911 ENDIF
912 CALL SHAP_FILT_APPLY_UV( gU,gV,myTime,myIter,myThid)
913 CALL TIMER_STOP ('SHAP_FILT_UV [FORWARD_STEP]',myThid)
914 ENDIF
915 #endif
916 #ifdef ALLOW_ZONAL_FILT
917 IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
918 CALL TIMER_START('ZONAL_FILT_UV [FORWARD_STEP]',myThid)
919 IF (implicDiv2Dflow.LT.1.) THEN
920 C-- Explicit+Implicit part of the Barotropic Flow Divergence
921 C => Filtering of uVel,vVel is necessary
922 CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )
923 ENDIF
924 CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
925 CALL TIMER_STOP ('ZONAL_FILT_UV [FORWARD_STEP]',myThid)
926 ENDIF
927 #endif
928
929 C-- Solve elliptic equation(s).
930 C Two-dimensional only for conventional hydrostatic or
931 C three-dimensional for non-hydrostatic and/or IGW scheme.
932 IF ( momStepping ) THEN
933 #ifdef ALLOW_AUTODIFF_TAMC
934 # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
935 CADJ STORE uVel, vVel
936 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
937 CADJ STORE EmPmR,hFacS,hFacW
938 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
939 # endif
940 #endif
941 CALL TIMER_START('SOLVE_FOR_PRESSURE [FORWARD_STEP]',myThid)
942 CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)
943 CALL TIMER_STOP ('SOLVE_FOR_PRESSURE [FORWARD_STEP]',myThid)
944 ENDIF
945
946 C-- Correct divergence in flow field and cycle time-stepping momentum
947 #ifdef ALLOW_MOM_STEPPING
948 #ifndef ALLOW_AUTODIFF
949 IF ( momStepping ) THEN
950 #endif
951 #ifdef ALLOW_AUTODIFF_TAMC
952 # ifdef ALLOW_DEPTH_CONTROL
953 CADJ STORE etaN, uVel,vVel
954 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
955 # endif /* ALLOW_DEPTH_CONTROL */
956 #endif /* ALLOW_AUTODIFF_TAMC */
957 CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
958 CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)
959 CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
960 #ifndef ALLOW_AUTODIFF
961 ENDIF
962 #endif
963 #endif /* ALLOW_MOM_STEPPING */
964 #ifdef ALLOW_AUTODIFF_TAMC
965 CADJ STORE uVel, vVel = comlev1, key = ikey_dynamics, kind = isbyte
966 #endif
967
968 IF ( calc_wVelocity ) THEN
969 C-- Integrate continuity vertically for vertical velocity
970 C (+ update "etaN" & "etaH", exact volume conservation):
971 CALL TIMER_START('INTEGR_CONTINUITY [FORWARD_STEP]',myThid)
972 CALL INTEGR_CONTINUITY( uVel, vVel, myTime, myIter, myThid)
973 CALL TIMER_STOP ('INTEGR_CONTINUITY [FORWARD_STEP]',myThid)
974 ENDIF
975
976
977 #ifdef NONLIN_FRSURF
978 IF ( select_rStar.NE.0 ) THEN
979 # ifndef DISABLE_RSTAR_CODE
980 # ifdef ALLOW_AUTODIFF_TAMC
981 CADJ STORE etaH
982 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
983 CADJ STORE rStarFacC,rStarFacS,rStarFacW
984 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
985 # endif
986 C-- r* : compute the future level thickness according to etaH(n+1)
987 CALL TIMER_START('CALC_R_STAR [FORWARD_STEP]',myThid)
988 CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
989 CALL TIMER_STOP ('CALC_R_STAR [FORWARD_STEP]',myThid)
990 # endif /* DISABLE_RSTAR_CODE */
991 ELSEIF ( nonlinFreeSurf.GT.0 .AND. selectSigmaCoord.EQ.0 ) THEN
992 C-- compute the future surface level thickness according to etaH(n+1)
993 # ifdef ALLOW_AUTODIFF_TAMC
994 CADJ STORE etaH = comlev1, key = ikey_dynamics,
995 CADJ & kind = isbyte
996 # endif
997 CALL TIMER_START('CALC_SURF_DR [FORWARD_STEP]',myThid)
998 CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
999 CALL TIMER_STOP ('CALC_SURF_DR [FORWARD_STEP]',myThid)
1000 ENDIF
1001
1002
1003 # ifdef ALLOW_AUTODIFF_TAMC
1004 CADJ STORE rStarExpC
1005 CADJ & = comlev1, key = ikey_dynamics, kind = isbyte
1006 CADJ STORE hFac_surfC = comlev1, key = ikey_dynamics,
1007 CADJ & kind = isbyte
1008 CADJ STORE salt,theta = comlev1, key = ikey_dynamics,
1009 CADJ & kind = isbyte
1010 # endif
1011 #endif /* NONLIN_FRSURF */
1012
1013 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
1014 IF ( staggerTimeStep ) THEN
1015 C-- do exchanges of U,V (needed for multiDim) when using stagger time-step :
1016 #ifdef ALLOW_DEBUG
1017 IF (debugMode)
1018 & CALL DEBUG_CALL('DO_STAGGER_FIELDS_EXCH.',myThid)
1019 #endif
1020 CALL TIMER_START('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
1021 CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
1022 CALL TIMER_STOP ('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
1023
1024 #ifdef ALLOW_DIAGNOSTICS
1025 C-- State-variables diagnostics
1026 IF ( useDiagnostics ) THEN
1027 CALL TIMER_START('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid)
1028 CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
1029 CALL TIMER_STOP ('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid)
1030 ENDIF
1031 #endif
1032
1033 #ifdef ALLOW_AUTODIFF_TAMC
1034 CADJ STORE wVel = comlev1, key = ikey_dynamics, kind = isbyte
1035 #endif
1036 #ifdef ALLOW_DEBUG
1037 IF (debugMode) CALL DEBUG_CALL('THERMODYNAMICS',myThid)
1038 #endif
1039 CALL TIMER_START('THERMODYNAMICS [FORWARD_STEP]',myThid)
1040 CALL THERMODYNAMICS( myTime, myIter, myThid )
1041 CALL TIMER_STOP ('THERMODYNAMICS [FORWARD_STEP]',myThid)
1042
1043 C-- if staggerTimeStep: end
1044 ENDIF
1045 C---+--------+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
1046
1047 #ifdef ALLOW_AUTODIFF_TAMC
1048 cph This is needed because convective_adjustment calls
1049 cph find_rho which may use pressure()
1050 CADJ STORE totPhiHyd = comlev1, key = ikey_dynamics,
1051 CADJ & kind = isbyte
1052 #endif
1053 C-- Apply adjustments to Tracers arrays (T,S,+pTracers)
1054 CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
1055 CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
1056 CALL TIMER_STOP ('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
1057
1058 #ifdef ALLOW_LONGSTEP
1059 IF ( usePTRACERS ) THEN
1060 IF ( LS_whenToSample .EQ. 2 ) THEN
1061 C Average everything at the end of the timestep. This will
1062 C reproduce online results with staggerTimeStep=.TRUE.
1063 C when LS_nIter=1
1064 #ifdef ALLOW_DEBUG
1065 IF (debugMode) CALL DEBUG_CALL('LONGSTEP_AVERAGE',myThid)
1066 #endif
1067 CALL TIMER_START('LONGSTEP_AVERAGE [FORWARD_STEP]',myThid)
1068 C myIter has been update after dynamics, but the averaging window
1069 C should be determined by myIter at beginning of timestep
1070 CALL LONGSTEP_AVERAGE( myTimeBeg, myIterBeg, myThid )
1071 CALL TIMER_STOP ('LONGSTEP_AVERAGE [FORWARD_STEP]',myThid)
1072
1073 #ifdef ALLOW_DEBUG
1074 IF (debugMode)
1075 & CALL DEBUG_CALL('LONGSTEP_THERMODYNAMICS',myThid)
1076 #endif
1077 CALL TIMER_START('LONGSTEP_THERMODYNAMICS [FORWARD_STEP]',
1078 & myThid)
1079 CALL LONGSTEP_THERMODYNAMICS( myTime, myIter, myThid )
1080 CALL TIMER_STOP ('LONGSTEP_THERMODYNAMICS [FORWARD_STEP]',
1081 & myThid)
1082 C-- if LS_whenToSample.EQ.2: end
1083 ENDIF
1084
1085 C-- Apply adjustments to passive Tracers arrays (pTracers)
1086 c CALL TIMER_START('LS_CORRECTION_STEP [FORWARD_STEP]',myThid)
1087 c CALL LONGSTEP_CORRECTION_STEP(myTime, myIter, myThid)
1088 c CALL TIMER_STOP ('LS_CORRECTION_STEP [FORWARD_STEP]',myThid)
1089 C-- if usePTRACERS: end
1090 ENDIF
1091 #endif /* ALLOW_LONGSTEP */
1092
1093 #ifdef ALLOW_GCHEM
1094 C Add separate timestepping of chemical/biological/forcing
1095 C of ptracers here in GCHEM_FORCING_SEP
1096 #ifdef ALLOW_LONGSTEP
1097 IF ( useGCHEM .AND. LS_doTimeStep ) THEN
1098 #else
1099 IF ( useGCHEM ) THEN
1100 #endif
1101 #ifdef ALLOW_AUTODIFF_TAMC
1102 CADJ STORE pTracer = comlev1, key = ikey_dynamics,
1103 CADJ & kind = isbyte
1104 CADJ STORE theta, salt = comlev1, key = ikey_dynamics,
1105 CADJ & kind = isbyte
1106 #endif
1107 #ifdef ALLOW_DEBUG
1108 IF (debugMode) CALL DEBUG_CALL('GCHEM_FORCING_SEP',myThid)
1109 #endif /* ALLOW_DEBUG */
1110 CALL TIMER_START('GCHEM_FORCING_SEP [FORWARD_STEP]',myThid)
1111 CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
1112 CALL TIMER_STOP ('GCHEM_FORCING_SEP [FORWARD_STEP]',myThid)
1113 ENDIF
1114 #endif /* ALLOW_GCHEM */
1115
1116 C-- Do "blocking" sends and receives for tendency "overlap" terms
1117 c CALL TIMER_START('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
1118 c CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )
1119 c CALL TIMER_STOP ('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
1120
1121 C-- Do "blocking" sends and receives for field "overlap" terms
1122 CALL TIMER_START('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
1123 CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
1124 CALL TIMER_STOP ('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)
1125
1126 #ifdef ALLOW_DIAGNOSTICS
1127 IF ( useDiagnostics ) THEN
1128 CALL TIMER_START('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid)
1129 CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid )
1130 CALL TIMER_STOP ('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid)
1131 ENDIF
1132 #endif
1133
1134 #ifdef ALLOW_GRIDALT
1135 IF (useGRIDALT) THEN
1136 CALL GRIDALT_UPDATE(myThid)
1137 ENDIF
1138 #endif
1139
1140 #ifdef ALLOW_FIZHI
1141 IF (useFIZHI) THEN
1142 CALL TIMER_START('FIZHI [FORWARD_STEP]',myThid)
1143 CALL STEP_FIZHI_CORR ( myTime, myIter, myThid, dTtracerLev(1) )
1144 CALL TIMER_STOP ('FIZHI [FORWARD_STEP]',myThid)
1145 ENDIF
1146 #endif
1147
1148 #ifdef ALLOW_FLT
1149 C-- Calculate float trajectories
1150 IF (useFLT) THEN
1151 CALL TIMER_START('FLOATS [FORWARD_STEP]',myThid)
1152 CALL FLT_MAIN( myTime, myIter, myThid )
1153 CALL TIMER_STOP ('FLOATS [FORWARD_STEP]',myThid)
1154 ENDIF
1155 #endif
1156
1157 #ifdef ALLOW_TIMEAVE
1158 C-- State-variables time-averaging
1159 CALL TIMER_START('DO_STATEVARS_TAVE [FORWARD_STEP]',myThid)
1160 CALL DO_STATEVARS_TAVE( myTime, myIter, myThid )
1161 CALL TIMER_STOP ('DO_STATEVARS_TAVE [FORWARD_STEP]',myThid)
1162 #endif
1163
1164 #ifdef ALLOW_NEST_PARENT
1165 IF ( useNEST_PARENT) THEN
1166 CALL NEST_PARENT_IO_2( myTime, myIter, myThid )
1167 ENDIF
1168 #endif /* ALLOW_NEST_PARENT */
1169
1170 #ifdef ALLOW_NEST_CHILD
1171 IF ( useNEST_CHILD) THEN
1172 CALL NEST_CHILD_TRANSP( myTime, myIter, myThid )
1173 ENDIF
1174 #endif /* ALLOW_NEST_CHILD */
1175
1176 #ifdef ALLOW_SHELFICE
1177 C-- Remesh shelfice
1178 c CALL SHELFICE_REMESHING (myTime, myIter, myThid )
1179 #endif /* ALLOW_SHELFICE */
1180
1181 #ifdef ALLOW_MONITOR
1182 IF ( monitorFreq.GT.0. .OR. adjMonitorFreq.GT.0. ) THEN
1183 C-- Check status of solution (statistics, cfl, etc...)
1184 CALL TIMER_START('MONITOR [FORWARD_STEP]',myThid)
1185 CALL MONITOR( myTime, myIter, myThid )
1186 CALL TIMER_STOP ('MONITOR [FORWARD_STEP]',myThid)
1187 ENDIF
1188 #endif /* ALLOW_MONITOR */
1189
1190 #ifdef ALLOW_COST
1191 C-- compare model with data and compute cost function
1192 C-- this is done after exchanges to allow interpolation
1193 CALL TIMER_START('COST_TILE [FORWARD_STEP]',myThid)
1194 CALL COST_TILE ( myTime, myIter, myThid )
1195 CALL TIMER_STOP ('COST_TILE [FORWARD_STEP]',myThid)
1196 #endif
1197
1198 C-- Check if it has reached the end of simulation
1199 modelEnd = myTime.EQ.endTime .OR. myIter.EQ.nEndIter
1200 #ifdef HAVE_SIGREG
1201 IF ( useSIGREG ) THEN
1202 modelEnd = modelEnd .OR. ( i_got_signal.GT.0 )
1203 ENDIF
1204 #endif /* HAVE_SIGREG */
1205
1206 C-- Do IO if needed.
1207 CALL TIMER_START('DO_THE_MODEL_IO [FORWARD_STEP]',myThid)
1208 CALL DO_THE_MODEL_IO( modelEnd, myTime, myIter, myThid )
1209 CALL TIMER_STOP ('DO_THE_MODEL_IO [FORWARD_STEP]',myThid)
1210
1211 #ifdef ALLOW_PTRACERS
1212 C Reset the ptracers (but after the io is done)
1213 IF ( usePTRACERS ) THEN
1214 CALL TIMER_START('PTRACERS_RESET [FORWARD_STEP]',myThid)
1215 CALL PTRACERS_RESET( myTime, myIter, myThid )
1216 CALL TIMER_STOP ('PTRACERS_RESET [FORWARD_STEP]',myThid)
1217 ENDIF
1218 #endif /* ALLOW_PTRACERS */
1219
1220 C-- Save state for restarts
1221 CALL TIMER_START('DO_WRITE_PICKUP [FORWARD_STEP]',myThid)
1222 CALL DO_WRITE_PICKUP( modelEnd, myTime, myIter, myThid )
1223 CALL TIMER_STOP ('DO_WRITE_PICKUP [FORWARD_STEP]',myThid)
1224
1225 #ifdef HAVE_SIGREG
1226 IF ( useSIGREG ) THEN
1227 IF ( modelEnd .AND. i_got_signal.GT.0 ) THEN
1228 STOP 'Checkpoint completed -- killed by signal handler'
1229 ENDIF
1230 ENDIF
1231 #endif /* HAVE_SIGREG */
1232
1233 #ifdef ALLOW_AUTODIFF
1234 CALL AUTODIFF_INADMODE_SET( myThid )
1235 #endif
1236
1237 #ifdef ALLOW_SHOWFLOPS
1238 CALL TIMER_START('SHOWFLOPS_INLOOP [THE_MAIN_LOOP]', myThid)
1239 CALL SHOWFLOPS_INLOOP( iloop, myThid )
1240 CALL TIMER_STOP ('SHOWFLOPS_INLOOP [THE_MAIN_LOOP]', myThid)
1241 #endif
1242
1243 #ifdef ALLOW_DEBUG
1244 IF (debugMode) CALL DEBUG_LEAVE('FORWARD_STEP',myThid)
1245 #endif
1246 RETURN
1247 END

  ViewVC Help
Powered by ViewVC 1.1.22