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

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

  ViewVC Help
Powered by ViewVC 1.1.22