/[MITgcm]/MITgcm/model/src/forward_step.F
ViewVC logotype

Diff of /MITgcm/model/src/forward_step.F

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

revision 1.10 by jmc, Tue Mar 6 16:51:02 2001 UTC revision 1.135 by jmc, Fri Mar 17 04:24:34 2006 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2  C $Name$  C $Name$
3    
4    #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    
7        SUBROUTINE FORWARD_STEP(  #ifdef ALLOW_GMREDI
8       I                    iLoop,  # include "GMREDI_OPTIONS.h"
9       U                    myCurrentTime, myCurrentIter,  #endif
      &                    myThid)  
 C     /==========================================================\  
 C     | SUBROUTINE FORWARD_STEP                                  |  
 C     | o Does one instance of the model time stepping           |  
 C     |   The time stepping loop in THE_MAIN_LOOP() calls        |  
 C     |   this routine                                           |  
 C     |==========================================================|  
 C     \==========================================================/  
       IMPLICIT NONE  
 C  
 C     Call Tree  
 C     =========  
 C      
 C      THE_MAIN_LOOP()  
 C       |  
 C  ==>  | ** Time stepping loop starts here **  
 C  |    |  
 C /|\   |-FORWARD_STEP  
 C  |    |  |  
 C /|\   |  |--LOAD_EXTERNAL_DATA  
 C  |    |  |   o Load and/or set time dependent forcing fields  
 C /|\   |  |  
 C  |    |  |--DYNAMICS  
 C /|\   |  |   o Evaluate "forward" terms  
 C  |    |  |  
 C /|\   |  |  
 C  |    |  |--SOLVE_FOR_PRESSURE  
 C /|\   |  |   o Find pressure field to keep flow non-divergent  
 C  |    |  |  
 C /|\   |  |  
 C  |    |  |--THE_CORRECTION_STEP  
 C /|\   |  |   o Correct flow field with pressure gradient  
 C  |    |  |     and cycle time-stepping arrays (for all fields)  
 C /|\   |  |  
 C  |    |  |--DO_GTERM_BLOCKING_EXCHANGES  
 C /|\   |  |   o Update overlap regions  
 C  |    |  |  
 C /|\   |  |  
 C  |    |  |--DO_THE_MODEL_IO  
 C /|\   |  |   o Write model state  
 C  |    |  |  
 C /|\   |  |  
 C  |    |  |--WRITE_CHECKPOINT  
 C /|\   |  |   o Write restart file(s)  
 C  |    |  
 C /|\   |  
 C  |<== | ** Time stepping loop finishes here **  
 C  
10    
11  C     == Global variables ===  CBOP
12    C     !ROUTINE: FORWARD_STEP
13    C     !INTERFACE:
14          SUBROUTINE FORWARD_STEP( iloop, myTime, myIter, myThid )
15    
16    C     !DESCRIPTION: \bv
17    C     *==================================================================
18    C     | SUBROUTINE forward_step
19    C     | o Run the ocean model and, optionally, evaluate a cost function.
20    C     *==================================================================
21    C     |
22    C     | THE_MAIN_LOOP is the toplevel routine for the Tangent Linear and
23    C     | Adjoint Model Compiler (TAMC). For this purpose the initialization
24    C     | of the model was split into two parts. Those parameters that do
25    C     | not depend on a specific model run are set in INITIALISE_FIXED,
26    C     | whereas those that do depend on the specific realization are
27    C     | initialized in INITIALISE_VARIA.
28    C     |
29    C     *==================================================================
30    C     \ev
31    
32    C     !USES:
33          IMPLICIT NONE
34    C     == Global variables ==
35  #include "SIZE.h"  #include "SIZE.h"
36  #include "EEPARAMS.h"  #include "EEPARAMS.h"
37  #include "PARAMS.h"  #include "PARAMS.h"
38  #include "DYNVARS.h"  #include "DYNVARS.h"
39  #ifdef ALLOW_NONHYDROSTATIC  
40  #include "CG3D.h"  #ifdef ALLOW_MNC
41    #include "MNC_PARAMS.h"
42          EXTERNAL DIFFERENT_MULTIPLE
43          LOGICAL  DIFFERENT_MULTIPLE
44    #endif
45    
46    #ifdef HAVE_SIGREG
47    #include "SIGREG.h"
48  #endif  #endif
49    
50    #ifdef ALLOW_SHAP_FILT
51    # include "SHAP_FILT.h"
52    #endif
53    #ifdef ALLOW_ZONAL_FILT
54    # include "ZONAL_FILT.h"
55    #endif
56    #ifdef COMPONENT_MODULE
57    # include "CPL_PARAMS.h"
58    #endif
59    
60    #ifdef ALLOW_AUTODIFF_TAMC
61    # include "FFIELDS.h"
62    
63    # include "tamc.h"
64    # include "ctrl.h"
65    # include "ctrl_dummy.h"
66    # include "cost.h"
67    # include "EOS.h"
68    # ifdef NONLIN_FRSURF
69    #  include "GRID.h"
70    # endif
71    # ifdef ALLOW_EXF
72    #  include "exf_fields.h"
73    #  include "exf_clim_fields.h"
74    #  ifdef ALLOW_BULKFORMULAE
75    #   include "exf_constants.h"
76    #  endif
77    # endif
78    # ifdef ALLOW_OBCS
79    #  include "OBCS.h"
80    # endif
81    # ifdef ALLOW_PTRACERS
82    #  include "PTRACERS_SIZE.h"
83    #  include "PTRACERS.h"
84    # endif
85    # ifdef ALLOW_CD_CODE
86    #  include "CD_CODE_VARS.h"
87    # endif
88    # ifdef ALLOW_EBM
89    #  include "EBM.h"
90    # endif
91    # ifdef EXACT_CONSERV
92    #  include "SURFACE.h"
93    # endif
94    # ifdef ALLOW_KPP
95    #  include "KPP.h"
96    # endif
97    # ifdef ALLOW_GMREDI
98    #  include "GMREDI.h"
99    # endif
100    #endif /* ALLOW_AUTODIFF_TAMC */
101    
102    C     !LOCAL VARIABLES:
103  C     == Routine arguments ==  C     == Routine arguments ==
104  C     iLoop         - Invocation count (counter in THE_MAIN_LOOP)  C     note: under the multi-threaded model myiter and
105  C     myCurrentIter - Iteration counter for this thread  C           mytime are local variables passed around as routine
106  C     myCurrentTime - Time counter for this thread  C           arguments. Although this is fiddly it saves the need to
107  C     myThid - Thread number for this instance of the routine.  C           impose additional synchronisation points when they are
108        INTEGER iLoop  C           updated.
109        INTEGER myCurrentIter  C     myIter - iteration counter for this thread
110        _RL     myCurrentTime  C     myTime - time counter for this thread
111        INTEGER myThid    C     myThid - thread number for this instance of the routine.
112          INTEGER iloop
113          INTEGER myThid
114          INTEGER myIter
115          _RL     myTime
116    
117  C     == Local variables ==  C     == Local variables ==
118    #ifdef COMPONENT_MODULE
119          INTEGER myItP1
120    #endif
121    CEOP
122    
123    #ifdef ALLOW_DEBUG
124          IF ( debugLevel .GE. debLevB )
125         &    CALL DEBUG_ENTER('FORWARD_STEP',myThid)
126    #endif
127    
128    #ifdef ALLOW_AUTODIFF_TAMC
129    C--   Reset the model iteration counter and the model time.
130          myIter = nIter0 + (iloop-1)
131          myTime = startTime + float(iloop-1)*deltaTclock
132    #endif
133    
134    #ifdef ALLOW_AUTODIFF_TAMC
135    c**************************************
136    #include "checkpoint_lev1_directives.h"
137    c**************************************
138    #endif
139    
140  C--   Load forcing/external data fields  C--   Switch on/off diagnostics for snap-shot output:
141        CALL TIMER_START('I/O (READ)         [FORWARD_STEP]',myThid)  #ifdef ALLOW_DIAGNOSTICS
142        CALL EXTERNAL_FIELDS_LOAD( myCurrentTime, myCurrentIter, myThid )        IF ( useDiagnostics ) THEN
143        CALL TIMER_STOP ('I/O (READ)         [FORWARD_STEP]',myThid)          CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )
144    C--   State-variables diagnostics
145  C--   Step forward fields and calculate time tendency terms          CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
146        CALL TIMER_START('DYNAMICS           [FORWARD_STEP]',myThid)          CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
147        CALL DYNAMICS( myCurrentTime, myCurrentIter, myThid )          CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
       CALL TIMER_STOP ('DYNAMICS           [FORWARD_STEP]',myThid)  
   
 #ifdef ALLOW_NONHYDROSTATIC  
 C--   Step forward W field in N-H algorithm  
       IF ( nonHydrostatic ) THEN  
        CALL TIMER_START('CALC_GW            [FORWARD_STEP]',myThid)  
        CALL CALC_GW( myThid)  
        CALL TIMER_STOP ('CALC_GW            [FORWARD_STEP]',myThid)  
148        ENDIF        ENDIF
149  #endif  #endif
150    
151    C--   Call Bulk-Formulae forcing package
152    #ifdef ALLOW_BULK_FORCE
153          IF ( useBulkForce ) THEN
154    #ifdef ALLOW_DEBUG
155           IF ( debugLevel .GE. debLevB )
156         &    CALL DEBUG_CALL('BULKF_FIELDS_LOAD',myThid)
157    #endif
158           CALL TIMER_START('BULKF_FORCING      [FORWARD_STEP]',mythid)
159    C-    load all forcing fields at current time
160           CALL BULKF_FIELDS_LOAD( myTime, myIter, myThid )
161    C-    calculate qnet and empmr (and wind stress)
162           CALL BULKF_FORCING( myTime, myIter, myThid )
163           CALL TIMER_STOP ('BULKF_FORCING      [FORWARD_STEP]',mythid)
164          ENDIF
165    #endif /* ALLOW_BULK_FORCE */
166    
167    C--   Call external forcing package
168    # ifdef ALLOW_EXF
169    #  ifdef ALLOW_DEBUG
170          IF ( debugLevel .GE. debLevB )
171         &    CALL DEBUG_CALL('EXF_GETFORCING',myThid)
172    #  endif
173          CALL TIMER_START('EXF_GETFORCING     [FORWARD_STEP]',mythid)
174          CALL EXF_GETFORCING( mytime, myiter, mythid )
175          CALL TIMER_STOP ('EXF_GETFORCING     [FORWARD_STEP]',mythid)
176    # else /* ALLOW_EXF undef */
177    cph The following IF-statement creates an additional dependency
178    cph for the forcing fields requiring additional storing.
179    cph Therefore, the IF-statement will be put between CPP-OPTIONS,
180    cph assuming that ALLOW_SEAICE has not yet been differentiated.
181    #  if (defined (ALLOW_SEAICE) || defined (ALLOW_EBM))
182          IF ( .NOT. useSEAICE .AND. .NOT. useEBM ) THEN
183    #  endif
184    #ifdef ALLOW_DEBUG
185           IF ( debugLevel .GE. debLevB )
186         &    CALL DEBUG_CALL('EXTERNAL_FIELDS_LOAD',myThid)
187    #endif
188           CALL TIMER_START('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)
189           CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )
190           CALL TIMER_STOP ('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)
191    # ifdef NONLIN_FRSURF
192    CADJ STORE SST    = comlev1, key = ikey_dynamics
193    CADJ STORE SSS    = comlev1, key = ikey_dynamics
194    #  ifdef SHORTWAVE_HEATING
195    CADJ STORE Qsw    = comlev1, key = ikey_dynamics
196    #  endif
197    # endif
198    #  if (defined (ALLOW_SEAICE) || defined (ALLOW_EBM))
199          ENDIF
200    #  endif
201    # endif /* ALLOW_EXF */
202    
203    #ifdef ALLOW_AUTODIFF
204    c--   Add control vector for forcing and parameter fields
205          if ( myiter .EQ. nIter0 )
206         &     CALL CTRL_MAP_FORCING (mythid)
207    #endif
208    
209    #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_AUTODIFF_MONITOR))
210    C     Include call to a dummy routine. Its adjoint will be
211    C     called at the proper place in the adjoint code.
212    C     The adjoint routine will print out adjoint values
213    C     if requested. The location of the call is important,
214    C     it has to be after the adjoint of the exchanges
215    C     (DO_GTERM_BLOCKING_EXCHANGES).
216          CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )
217    cph   I've commented this line since it may conflict with MITgcm's adjoint
218    cph   However, need to check whether that's still consistent
219    cph   with the ecco-branch (it should).
220    cph      CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
221    #endif
222    
223    # ifdef ALLOW_SEAICE
224    C--   Call sea ice model to compute forcing/external data fields.  In
225    C     addition to computing prognostic sea-ice variables and diagnosing the
226    C     forcing/external data fields that drive the ocean model, SEAICE_MODEL
227    C     also sets theta to the freezing point under sea-ice.  The implied
228    C     surface heat flux is then stored in variable surfaceTendencyTice,
229    C     which is needed by KPP package (kpp_calc.F and kpp_transport_t.F)
230    C     to diagnose surface buoyancy fluxes and for the non-local transport
231    C     term.  Because this call precedes model thermodynamics, temperature
232    C     under sea-ice may not be "exactly" at the freezing point by the time
233    C     theta is dumped or time-averaged.
234          IF ( useSEAICE ) THEN
235    #ifdef ALLOW_DEBUG
236             IF ( debugLevel .GE. debLevB )
237         &    CALL DEBUG_CALL('SEAICE_MODEL',myThid)
238    #endif
239             CALL TIMER_START('SEAICE_MODEL       [FORWARD_STEP]',myThid)
240             CALL SEAICE_MODEL( myTime, myIter, myThid )
241             CALL TIMER_STOP ('SEAICE_MODEL       [FORWARD_STEP]',myThid)
242          ENDIF
243    # endif /* ALLOW_SEAICE */
244    
245    #ifdef ALLOW_AUTODIFF_TAMC
246    # ifdef ALLOW_PTRACERS
247    cph this replaces _bibj storing of ptracer within thermodynamics
248    CADJ STORE ptracer  = comlev1, key = ikey_dynamics
249    # endif
250    #endif
251    
252    #ifdef ALLOW_OFFLINE
253          IF ( useOffLine ) THEN
254            CALL TIMER_START('OFFLINE_FIELDS_LOAD [FORWARD_STEP]',myThid)
255    #ifdef ALLOW_DEBUG
256            IF ( debugLevel .GE. debLevB )
257         &        CALL DEBUG_CALL('OFFLINE_FIELDS_LOAD',myThid)
258    #endif /* ALLOW_DEBUG */
259            CALL OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
260            CALL TIMER_STOP ('OFFLINE_FIELDS_LOAD [FORWARD_STEP]',myThid)
261          ENDIF
262    #endif /* ALLOW_OFFLINE */
263    
264    #ifdef ALLOW_GCHEM
265            IF ( useGCHEM ) THEN
266    #ifdef ALLOW_DEBUG
267             IF ( debugLevel .GE. debLevB )
268         &        CALL DEBUG_CALL('GCHEM_FIELDS_LOAD',myThid)
269    #endif /* ALLOW_DEBUG */
270             CALL GCHEM_FIELDS_LOAD( mytime, myiter, mythid )
271            ENDIF
272    #endif /* ALLOW_GCHEM */
273    
274    #ifdef ALLOW_RBCS
275            IF ( useRBCS ) THEN
276             CALL RBCS_FIELDS_LOAD( mytime, myiter, mythid )
277            ENDIF
278    #endif
279    
280    #ifdef COMPONENT_MODULE
281           IF ( useCoupler .AND. cpl_earlyExpImpCall ) THEN
282    C      Post coupling data that I export.
283    C      Read in coupling data that I import.
284             CALL TIMER_START('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
285             CALL CPL_EXPORT_MY_DATA(       myIter, myTime, myThid )
286             CALL CPL_IMPORT_EXTERNAL_DATA( myIter, myTime, myThid )
287             CALL TIMER_STOP ('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
288           ENDIF
289    #endif /* COMPONENT_MODULE */
290    
291    #ifdef ALLOW_EBM
292            IF ( useEBM ) THEN
293    # ifdef ALLOW_DEBUG
294             IF ( debugLevel .GE. debLevB )
295         &    CALL DEBUG_CALL('EBM',myThid)
296    # endif
297             CALL TIMER_START('EBM                [FORWARD_STEP]',mythid)
298             CALL EBM_DRIVER ( myTime, myIter, myThid )
299             CALL TIMER_STOP ('EBM                [FORWARD_STEP]',mythid)
300            ENDIF
301    #endif
302    
303    C--     Step forward fields and calculate time tendency terms.
304    
305    #ifdef ALLOW_DEBUG
306           IF ( debugLevel .GE. debLevB )
307         &    CALL DEBUG_CALL('DO_ATMOSPHERIC_PHYS',myThid)
308    #endif
309           CALL TIMER_START('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)
310           CALL DO_ATMOSPHERIC_PHYS( myTime, myIter, myThid )
311           CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)
312    
313    #ifdef ALLOW_AUTODIFF_TAMC
314    # ifdef ALLOW_KPP
315    CADJ STORE uvel               = comlev1, key = ikey_dynamics
316    CADJ STORE vvel               = comlev1, key = ikey_dynamics
317    # endif
318    # ifdef EXACT_CONSERV
319    cphCADJ STORE empmr              = comlev1, key = ikey_dynamics
320    cphCADJ STORE pmepr              = comlev1, key = ikey_dynamics
321    # endif
322    # ifdef NONLIN_FRSURF
323    cph-test
324    CADJ STORE hFacC              = comlev1, key = ikey_dynamics
325    # endif
326    #endif /* ALLOW_AUTODIFF_TAMC */
327    
328    #ifndef ALLOW_AUTODIFF_TAMC
329           IF ( .NOT. useOffLine ) THEN
330    #endif
331    #ifdef ALLOW_DEBUG
332           IF ( debugLevel .GE. debLevB )
333         &    CALL DEBUG_CALL('DO_OCEANIC_PHYS',myThid)
334    #endif
335           CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
336           CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
337           CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
338    #ifdef ALLOW_AUTODIFF_TAMC
339    CADJ STORE EmPmR    = comlev1, key = ikey_dynamics
340    # ifdef EXACT_CONSERV
341    CADJ STORE pmepr    = comlev1, key = ikey_dynamics
342    # endif
343    #else
344           ENDIF
345    #endif
346    
347    #ifdef ALLOW_AUTODIFF_TAMC
348    # ifdef NONLIN_FRSURF
349    cph-test
350    CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics
351    CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics
352    CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics
353    CADJ STORE hFacC, hFacS, hFacW
354    CADJ &     = comlev1, key = ikey_dynamics
355    CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
356    CADJ &     = comlev1, key = ikey_dynamics
357    c
358    CADJ STORE surfaceforcingu = comlev1, key = ikey_dynamics
359    CADJ STORE surfaceforcingv = comlev1, key = ikey_dynamics
360    # endif
361    #endif /* ALLOW_AUTODIFF_TAMC */
362    
363    #ifdef ALLOW_GCHEM
364    C     GCHEM package is an interface for any bio-geochemical or
365    C     ecosystem model you would like to include.
366    C     If GCHEM_SEPARATE_FORCING is not defined, you are
367    C     responsible for computing tendency terms for passive
368    C     tracers and storing them on a 3DxNumPtracers-array called
369    C     gchemTendency in GCHEM_CALC_TENDENCY. This tendency is then added
370    C     to gPtr in ptracers_forcing later-on.
371    C     If GCHEM_SEPARATE_FORCING is defined, you are reponsible for
372    C     UPDATING ptracers directly in GCHEM_FORCING_SEP. This amounts
373    C     to a completely separate time step that you have to implement
374    C     yourself (Eulerian seems to be fine in most cases).
375    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
376    C     CAVEAT: Up to now, when GCHEM is turned on the field ptracerForcingSurf,
377    C     which is needed for KPP is not set properly. ptracerForcingSurf must
378    C     be treated differently depending on whether GCHEM_SEPARATE_FORCING
379    C     is define or not. TBD.
380    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
381           IF ( useGCHEM ) THEN
382    #ifdef ALLOW_DEBUG
383            IF ( debugLevel .GE. debLevB )
384         &       CALL DEBUG_CALL('GCHEM_CALC_TENDENCY',myThid)
385    #endif
386            CALL TIMER_START('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
387            CALL GCHEM_CALC_TENDENCY( myTime, myIter, myThid )
388            CALL TIMER_STOP ('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
389           ENDIF
390    #endif /* ALLOW_GCHEM */
391    
392    #ifdef ALLOW_AUTODIFF_TAMC
393    cph needed to be moved here from do_oceanic_physics
394    cph to be visible down the road
395    c
396    CADJ STORE surfaceForcingS    = comlev1, key = ikey_dynamics
397    CADJ STORE surfaceForcingT    = comlev1, key = ikey_dynamics
398    CADJ STORE surfaceForcingTice = comlev1, key = ikey_dynamics
399    ctest(
400    CADJ STORE IVDConvCount       = comlev1, key = ikey_dynamics
401    ctest)
402    # ifdef ALLOW_PTRACERS
403    CADJ STORE surfaceForcingPtr  = comlev1, key = ikey_dynamics
404    # endif
405    c
406    # ifdef ALLOW_GMREDI
407    CADJ STORE Kwx                = comlev1, key = ikey_dynamics
408    CADJ STORE Kwy                = comlev1, key = ikey_dynamics
409    CADJ STORE Kwz                = comlev1, key = ikey_dynamics
410    #  ifdef GM_BOLUS_ADVEC
411    CADJ STORE GM_PsiX            = comlev1, key = ikey_dynamics
412    CADJ STORE GM_PsiY            = comlev1, key = ikey_dynamics
413    #  endif
414    # endif
415    c
416    # ifdef ALLOW_KPP
417    CADJ STORE KPPghat            = comlev1, key = ikey_dynamics
418    CADJ STORE KPPfrac            = comlev1, key = ikey_dynamics
419    CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics
420    CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics
421    # endif
422    c
423    # ifdef NONLIN_FRSURF
424    CADJ STORE etaH               = comlev1, key = ikey_dynamics
425    #  ifdef ALLOW_CD_CODE
426    CADJ STORE etanm1             = comlev1, key = ikey_dynamics
427    #  endif
428    # endif
429    #endif /* ALLOW_AUTODIFF_TAMC */
430    
431          IF ( .NOT.staggerTimeStep ) THEN
432    #ifdef ALLOW_DEBUG
433            IF ( debugLevel .GE. debLevB )
434         &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)
435    #endif
436            CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',mythid)
437            CALL THERMODYNAMICS( myTime, myIter, myThid )
438            CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',mythid)
439    C--    if not staggerTimeStep: end
440          ENDIF
441    c #ifdef ALLOW_NONHYDROSTATIC
442          IF ( implicitIntGravWave ) THEN
443            CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
444            CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
445            CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
446          ENDIF
447    c #endif
448    
449    #ifdef COMPONENT_MODULE
450           IF ( useCoupler .AND. .NOT.cpl_earlyExpImpCall ) THEN
451    C      Post coupling data that I export.
452    C      Read in coupling data that I import.
453             myItP1 = myIter + 1
454             CALL TIMER_START('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
455             CALL CPL_EXPORT_MY_DATA(       myItP1, myTime, myThid )
456             CALL CPL_IMPORT_EXTERNAL_DATA( myItP1, myTime, myThid )
457             CALL TIMER_STOP ('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
458    # ifndef ALLOW_AIM
459            IF ( useRealFreshWaterFlux ) THEN
460             CALL OCN_APPLY_IMPORT( .FALSE., myTime, myIter, myThid )
461            ENDIF
462    # endif
463           ENDIF
464    #endif /* COMPONENT_MODULE */
465    
466    #ifdef ALLOW_AUTODIFF_TAMC
467    # ifdef NONLIN_FRSURF
468    CADJ STORE hFacC          = comlev1, key = ikey_dynamics
469    CADJ STORE hFacS          = comlev1, key = ikey_dynamics
470    CADJ STORE hFacW          = comlev1, key = ikey_dynamics
471    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
472    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
473    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
474    CADJ STORE etaN           = comlev1, key = ikey_dynamics
475    # endif
476    #endif
477    C--   Step forward fields and calculate time tendency terms.
478    #ifndef ALLOW_AUTODIFF_TAMC
479          IF ( momStepping ) THEN
480    #endif
481    #ifdef ALLOW_DEBUG
482            IF ( debugLevel .GE. debLevB )
483         &    CALL DEBUG_CALL('DYNAMICS',myThid)
484    #endif
485            CALL TIMER_START('DYNAMICS            [FORWARD_STEP]',mythid)
486            CALL DYNAMICS( myTime, myIter, myThid )
487            CALL TIMER_STOP ('DYNAMICS            [FORWARD_STEP]',mythid)
488    #ifndef ALLOW_AUTODIFF_TAMC
489          ENDIF
490    #endif
491    
492    #ifdef ALLOW_AUTODIFF_TAMC
493    # ifdef NONLIN_FRSURF
494    cph-test
495    CADJ STORE gU, gV  = comlev1, key = ikey_dynamics
496    # endif
497    #endif
498    
499    C--   Update time-counter
500          myIter = nIter0 + iLoop
501          myTime = startTime + deltaTClock * float(iLoop)
502    
503    #ifdef ALLOW_MNC
504    C     Update the default next iter for MNC
505          IF ( useMNC ) THEN
506             CALL MNC_CW_CITER_SETG( 1, 1, -1, myIter , myThid )
507    
508    C        TODO: Logic should be added here so that users can specify, on
509    C        a per-citer-group basis, when it is time to update the
510    C        "current" (and not just the "next") iteration
511    
512    C        TODO: the following is just a temporary band-aid (mostly, for
513    C        Baylor) until someone writes a routine that better handles time
514    C        boundaries such as weeks, months, years, etc.
515             IF ( mnc_filefreq .GT. 0 ) THEN
516               IF (DIFFERENT_MULTIPLE(mnc_filefreq,myTime,deltaTClock))
517         &          THEN
518                 CALL MNC_CW_CITER_SETG( 1, 1, myIter, -1 , myThid )
519               ENDIF
520             ENDIF
521           ENDIF
522    #endif
523    
524    C--   Update geometric factors:
525    #ifdef NONLIN_FRSURF
526    C-    update hfacC,W,S and recip_hFac according to etaH(n+1) :
527          IF ( nonlinFreeSurf.GT.0) THEN
528           IF ( select_rStar.GT.0 ) THEN
529    # ifndef DISABLE_RSTAR_CODE
530    # ifdef ALLOW_AUTODIFF_TAMC
531    cph-test
532    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
533    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
534    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
535    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
536    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
537    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
538    # endif
539            CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
540            CALL UPDATE_R_STAR( myTime, myIter, myThid )
541            CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
542    # ifdef ALLOW_AUTODIFF_TAMC
543    cph-test
544    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
545    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
546    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
547    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
548    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
549    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
550    # endif
551    # endif /* DISABLE_RSTAR_CODE */
552           ELSE
553    #ifdef ALLOW_AUTODIFF_TAMC
554    CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
555    CADJ &     = comlev1, key = ikey_dynamics
556    #endif
557            CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
558            CALL UPDATE_SURF_DR( myTime, myIter, myThid )
559            CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
560           ENDIF
561          ENDIF
562    # ifdef ALLOW_AUTODIFF_TAMC
563    cph-test
564    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
565    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
566    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
567    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
568    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
569    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
570    # endif
571    C-    update also CG2D matrix (and preconditioner)
572          IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
573            CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)
574            CALL UPDATE_CG2D( myTime, myIter, myThid )
575            CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)
576          ENDIF
577    #endif /* NONLIN_FRSURF */
578    
579    C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
580  #ifdef ALLOW_SHAP_FILT  #ifdef ALLOW_SHAP_FILT
581  C--   Step forward all tiles, filter and exchange.        IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
582        CALL TIMER_START('SHAP_FILT          [FORWARD_STEP]',myThid)          CALL TIMER_START('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
583        CALL SHAP_FILT_APPLY(          IF (implicDiv2Dflow.LT.1.) THEN
      I                     gUnm1, gVnm1, gTnm1, gSnm1,  
      I                     myCurrentTime, myCurrentIter, myThid )  
       IF (implicDiv2Dflow.LT.1.) THEN  
584  C--   Explicit+Implicit part of the Barotropic Flow Divergence  C--   Explicit+Implicit part of the Barotropic Flow Divergence
585  C      => Filtering of uVel,vVel is necessary  C      => Filtering of uVel,vVel is necessary
586           CALL SHAP_FILT_UV( uVel, vVel, myCurrentTime, myThid )            CALL SHAP_FILT_APPLY_UV( uVel,vVel,
587         &                             myTime, myIter, myThid )
588            ENDIF
589            CALL SHAP_FILT_APPLY_UV( gU,gV,myTime,myIter,myThid)
590            CALL TIMER_STOP ('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
591        ENDIF        ENDIF
       CALL TIMER_STOP ('SHAP_FILT          [FORWARD_STEP]',myThid)  
592  #endif  #endif
   
593  #ifdef ALLOW_ZONAL_FILT  #ifdef ALLOW_ZONAL_FILT
594        IF (zonal_filt_lat.LT.90.) THEN        IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
595        CALL ZONAL_FILT_APPLY(          CALL TIMER_START('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
596       U           gUnm1, gVnm1, gTnm1, gSnm1,          IF (implicDiv2Dflow.LT.1.) THEN
597       I           myThid )  C--   Explicit+Implicit part of the Barotropic Flow Divergence
598    C      => Filtering of uVel,vVel is necessary
599              CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )
600            ENDIF
601            CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
602            CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
603        ENDIF        ENDIF
604  #endif  #endif
605    
606  C--   Solve elliptic equation(s).  C--   Solve elliptic equation(s).
607  C     Two-dimensional only for conventional hydrostatic or  C     Two-dimensional only for conventional hydrostatic or
608  C     three-dimensional for non-hydrostatic and/or IGW scheme.  C     three-dimensional for non-hydrostatic and/or IGW scheme.
609        CALL TIMER_START('SOLVE_FOR_PRESSURE [FORWARD_STEP]',myThid)        IF ( momStepping ) THEN
610        CALL SOLVE_FOR_PRESSURE( myThid )  #ifdef ALLOW_AUTODIFF_TAMC
611        CALL TIMER_STOP ('SOLVE_FOR_PRESSURE [FORWARD_STEP]',myThid)  # ifdef NONLIN_FRSURF
612    CADJ STORE uvel, vvel
613  C--   Correct divergence in flow field and cycle time-stepping  CADJ &     = comlev1, key = ikey_dynamics
614  C     arrays (for all fields) ; update time-counter  CADJ STORE empmr,hfacs,hfacw
615        myCurrentIter = nIter0 + iLoop  CADJ &     = comlev1, key = ikey_dynamics
616        myCurrentTime = startTime + deltaTClock * float(iLoop)  # endif
617        CALL THE_CORRECTION_STEP(myCurrentTime, myCurrentIter, myThid)  #endif
618            CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
619            CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)
620            CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
621          ENDIF
622    
623    C--   Correct divergence in flow field and cycle time-stepping momentum
624    #ifndef ALLOW_AUTODIFF_TAMC
625          IF ( momStepping ) THEN
626    #endif
627            CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
628            CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)
629            CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
630    #ifndef ALLOW_AUTODIFF_TAMC
631          ENDIF
632    #endif
633    
634    #ifdef EXACT_CONSERV
635          IF (exactConserv) THEN
636    #ifdef ALLOW_AUTODIFF_TAMC
637    cph-test
638    cphCADJ STORE etaH          = comlev1, key = ikey_dynamics
639    #endif
640    C--   Update etaH(n+1) :
641            CALL TIMER_START('UPDATE_ETAH         [FORWARD_STEP]',mythid)
642            CALL UPDATE_ETAH( myTime, myIter, myThid )
643            CALL TIMER_STOP ('UPDATE_ETAH         [FORWARD_STEP]',mythid)
644          ENDIF
645    #endif /* EXACT_CONSERV */
646    
647    #ifdef NONLIN_FRSURF
648          IF ( select_rStar.NE.0 ) THEN
649    # ifndef DISABLE_RSTAR_CODE
650    C--   r* : compute the future level thickness according to etaH(n+1)
651            CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)
652            CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
653            CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)
654    # endif /* DISABLE_RSTAR_CODE */
655          ELSEIF ( nonlinFreeSurf.GT.0) THEN
656    C--   compute the future surface level thickness according to etaH(n+1)
657    # ifdef ALLOW_AUTODIFF_TAMC
658    CADJ STORE etaH          = comlev1, key = ikey_dynamics
659    # endif
660            CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)
661            CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
662            CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)
663          ENDIF
664    # ifdef ALLOW_AUTODIFF_TAMC
665    cph-test
666    CADJ STORE hFac_surfC    = comlev1, key = ikey_dynamics
667    # endif
668    #endif /* NONLIN_FRSURF */
669    
670    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
671          IF ( staggerTimeStep ) THEN
672    C--   do exchanges of U,V (needed for multiDim) when using stagger time-step :
673    #ifdef ALLOW_DEBUG
674            IF ( debugLevel .GE. debLevB )
675         &    CALL DEBUG_CALL('DO_STAGGER_FIELDS_EXCH.',myThid)
676    #endif
677            CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
678            CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
679            CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
680    
681    #ifdef ALLOW_DIAGNOSTICS
682    C--   State-variables diagnostics
683           IF ( useDiagnostics ) THEN
684            CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
685            CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
686            CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
687           ENDIF
688    #endif
689    
690    #ifdef ALLOW_DEBUG
691            IF ( debugLevel .GE. debLevB )
692         &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)
693    #endif
694            CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',mythid)
695            CALL THERMODYNAMICS( myTime, myIter, myThid )
696            CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',mythid)
697    
698    C--    if staggerTimeStep: end
699          ENDIF
700    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
701    
702    #ifdef ALLOW_AUTODIFF_TAMC
703    cph This is needed because convective_adjustment calls
704    cph find_rho which may use pressure()
705    CADJ STORE totphihyd  = comlev1, key = ikey_dynamics
706    #endif
707    C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)
708            CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
709            CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
710            CALL TIMER_STOP ('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
711    
712    #ifdef ALLOW_GCHEM
713    C     Add separate timestepping of chemical/biological/forcing
714    C     of ptracers here in GCHEM_FORCING_SEP
715            IF ( useGCHEM ) THEN
716    #ifdef ALLOW_DEBUG
717             IF ( debugLevel .GE. debLevB )
718         &        CALL DEBUG_CALL('GCHEM_FORCING_SEP',myThid)
719    #endif /* ALLOW_DEBUG */
720             CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
721             CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
722             CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
723            ENDIF  
724    #endif /* ALLOW_GCHEM */
725    
726  C--   Do "blocking" sends and receives for tendency "overlap" terms  C--   Do "blocking" sends and receives for tendency "overlap" terms
727  c     CALL TIMER_START('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)  c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
728  c     CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )  c     CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )
729  c     CALL TIMER_STOP ('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)  c     CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
730    
731  C--   Do "blocking" sends and receives for field "overlap" terms  C--   Do "blocking" sends and receives for field "overlap" terms
732        CALL TIMER_START('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)        CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
733        CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )        CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
734        CALL TIMER_STOP ('BLOCKING_EXCHANGES [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
735    
736    #ifdef ALLOW_DIAGNOSTICS
737          IF ( useDiagnostics ) THEN
738           CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
739           CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid )
740           CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
741          ENDIF
742    #endif
743    
744    C AMM
745    #ifdef ALLOW_GRIDALT
746            if (useGRIDALT) then
747             CALL GRIDALT_UPDATE(myThid)
748            endif
749    #endif
750    C AMM
751    
752    C AMM
753    #ifdef ALLOW_FIZHI
754            if( useFIZHI) then
755             CALL TIMER_START('FIZHI               [FORWARD_STEP]',mythid)
756             CALL STEP_FIZHI_CORR ( myTime, myIter, myThid, dTtracerLev(1) )
757             CALL TIMER_STOP('FIZHI               [FORWARD_STEP]',mythid)
758            endif
759    #endif
760    C AMM
761    
762    #ifdef ALLOW_FLT
763    C--   Calculate float trajectories
764          IF (useFLT) THEN
765            CALL TIMER_START('FLOATS            [FORWARD_STEP]',myThid)
766            CALL FLT_MAIN(myIter,myTime, myThid)
767            CALL TIMER_STOP ('FLOATS            [FORWARD_STEP]',myThid)
768          ENDIF
769    #endif
770    
771    #ifdef ALLOW_TIMEAVE
772    C--   State-variables time-averaging
773          CALL TIMER_START('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
774          CALL DO_STATEVARS_TAVE( myTime, myIter, myThid )
775          CALL TIMER_STOP ('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
776    #endif
777    
778    #ifdef ALLOW_MONITOR
779          IF ( .NOT.useOffLine ) THEN
780    C--   Check status of solution (statistics, cfl, etc...)
781            CALL TIMER_START('MONITOR             [FORWARD_STEP]',myThid)
782            CALL MONITOR( myIter, myTime, myThid )
783            CALL TIMER_STOP ('MONITOR             [FORWARD_STEP]',myThid)
784          ENDIF
785    #endif /* ALLOW_MONITOR */
786    
787    #ifdef ALLOW_COST
788    C--     compare model with data and compute cost function
789    C--     this is done after exchanges to allow interpolation
790          CALL TIMER_START('COST_TILE           [FORWARD_STEP]',myThid)
791          CALL COST_TILE  ( mytime, myiter, myThid )
792          CALL TIMER_STOP ('COST_TILE           [FORWARD_STEP]',myThid)
793    #endif
794    
795  C--   Do IO if needed.  C--   Do IO if needed.
796        CALL TIMER_START('I/O (WRITE)        [FORWARD_STEP]',myThid)        CALL TIMER_START('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
797        CALL DO_THE_MODEL_IO(.FALSE.,        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )
798       &                     myCurrentTime, myCurrentIter, myThid )        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
799        CALL TIMER_STOP ('I/O (WRITE)        [FORWARD_STEP]',myThid)  
800    #ifdef HAVE_SIGREG
801          IF ( useSIGREG ) THEN
802            IF ( i_got_signal .GT. 0 ) THEN
803              CALL PACKAGES_WRITE_PICKUP(
804         I         .TRUE., myTime, myIter, myThid )
805              CALL WRITE_CHECKPOINT(
806         I         .TRUE., myTime, myIter, myThid )
807              STOP 'Checkpoint completed -- killed by signal handler'
808            ENDIF
809          ENDIF
810    #endif /* HAVE_SIGREG */
811    
812  C--   Save state for restarts  C--   Save state for restarts
813  C     Note:    (jmc: is it still the case after ckp35 ?)        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
814  C     =====        CALL PACKAGES_WRITE_PICKUP(
815  C     Because of the ordering of the timestepping code and       I               .FALSE., myTime, myIter, myThid )
 C     tendency term code at end of loop model arrays hold  
 C     U,V,T,S  at "time-level" N but gu, gv, gs, gt, guNM1,...  
 C     at "time-level" N+1/2 (guNM1 at "time-level" N+1/2 is  
 C     gu at "time-level" N-1/2) and etaN at "time-level" N+1/2.  
 C      where N = I+timeLevBase-1  
 C     Thus a checkpoint contains U.0000000000, GU.0000000001 and  
 C     etaN.0000000001 in the indexing scheme used for the model  
 C     "state" files. This example is referred to as a checkpoint  
 C     at time level 1  
       CALL TIMER_START('I/O (WRITE)        [FORWARD_STEP]',myThid)  
816        CALL WRITE_CHECKPOINT(        CALL WRITE_CHECKPOINT(
817       &        .FALSE., myCurrentTime, myCurrentIter, myThid )       I               .FALSE., myTime, myIter, myThid )
818        CALL TIMER_STOP ('I/O (WRITE)        [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
819    
820    #ifdef ALLOW_DEBUG
821          IF ( debugLevel .GE. debLevB )
822         &    CALL DEBUG_LEAVE('FORWARD_STEP',myThid)
823    #endif
824    
825        RETURN        RETURN
826        END        END

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.135

  ViewVC Help
Powered by ViewVC 1.1.22