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

Annotation 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 - (hide 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 dgoldberg 1.6 C $Header: /u/gcmpack/MITgcm_contrib/shelfice_remeshing/code/forward_step.F,v 1.5 2015/09/02 12:22:35 dgoldberg Exp $
2 dgoldberg 1.1 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 dgoldberg 1.2 #ifdef ALLOW_GGL90
14     # include "GGL90_OPTIONS.h"
15     #endif
16 dgoldberg 1.1 #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 dgoldberg 1.2 C |-- OFFLINE_FIELDS_LOAD
165     C |
166 dgoldberg 1.1 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 dgoldberg 1.2 # ifdef ALLOW_GMREDI
275     # include "GMREDI.h"
276     # endif
277 dgoldberg 1.1 # 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 dgoldberg 1.2 # 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 dgoldberg 1.1 # 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 dgoldberg 1.4 #ifdef ALLOW_SHELFICE
388     C-- Remesh shelfice
389 dgoldberg 1.5 CALL TIMER_START('SHELFICE_REMESHING [FORWARD_STEP]',myThid)
390 dgoldberg 1.4 CALL SHELFICE_REMESHING (myTime, myIter, myThid )
391 dgoldberg 1.5 CALL TIMER_STOP('SHELFICE_REMESHING [FORWARD_STEP]',myThid)
392    
393 dgoldberg 1.4 #endif /* ALLOW_SHELFICE */
394 dgoldberg 1.2
395 dgoldberg 1.1
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 dgoldberg 1.2 ENDIF
450 dgoldberg 1.1
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 dgoldberg 1.2 #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 dgoldberg 1.1 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 dgoldberg 1.2 ENDIF
879 dgoldberg 1.1
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 dgoldberg 1.2
902 dgoldberg 1.1 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 dgoldberg 1.2 #endif
967 dgoldberg 1.1
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 dgoldberg 1.2
977 dgoldberg 1.1 #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 dgoldberg 1.2
1002    
1003 dgoldberg 1.1 # 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 dgoldberg 1.2 C-- Remesh shelfice
1178 dgoldberg 1.4 c CALL SHELFICE_REMESHING (myTime, myIter, myThid )
1179 dgoldberg 1.1 #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