/[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.125 by edhill, Sat Dec 3 08:30:32 2005 UTC revision 1.140 by heimbach, Fri Apr 28 22:53:14 2006 UTC
# Line 4  C $Name$ Line 4  C $Name$
4  #include "PACKAGES_CONFIG.h"  #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    
 #ifdef ALLOW_OFFLINE  
 # include "OFFLINE_OPTIONS.h"  
 #endif  
7  #ifdef ALLOW_GMREDI  #ifdef ALLOW_GMREDI
8  # include "GMREDI_OPTIONS.h"  # include "GMREDI_OPTIONS.h"
9  #endif  #endif
10    #ifdef ALLOW_OBCS
11    # include "OBCS_OPTIONS.h"
12    #endif
13    
14  CBOP  CBOP
15  C     !ROUTINE: FORWARD_STEP  C     !ROUTINE: FORWARD_STEP
# Line 25  C     | Line 25  C     |
25  C     | THE_MAIN_LOOP is the toplevel routine for the Tangent Linear and  C     | THE_MAIN_LOOP is the toplevel routine for the Tangent Linear and
26  C     | Adjoint Model Compiler (TAMC). For this purpose the initialization  C     | Adjoint Model Compiler (TAMC). For this purpose the initialization
27  C     | of the model was split into two parts. Those parameters that do  C     | of the model was split into two parts. Those parameters that do
28  C     | not depend on a specific model run are set in INITIALISE_FIXED,    C     | not depend on a specific model run are set in INITIALISE_FIXED,
29  C     | whereas those that do depend on the specific realization are  C     | whereas those that do depend on the specific realization are
30  C     | initialized in INITIALISE_VARIA.    C     | initialized in INITIALISE_VARIA.
31  C     |  C     |
32  C     *==================================================================  C     *==================================================================
33  C     \ev  C     \ev
# Line 68  C     == Global variables == Line 68  C     == Global variables ==
68  # include "ctrl_dummy.h"  # include "ctrl_dummy.h"
69  # include "cost.h"  # include "cost.h"
70  # include "EOS.h"  # include "EOS.h"
71    # ifdef NONLIN_FRSURF
72    #  include "GRID.h"
73    # endif
74  # ifdef ALLOW_EXF  # ifdef ALLOW_EXF
75  #  include "exf_fields.h"  #  include "exf_fields.h"
76  #  include "exf_clim_fields.h"  #  include "exf_clim_fields.h"
# Line 75  C     == Global variables == Line 78  C     == Global variables ==
78  #   include "exf_constants.h"  #   include "exf_constants.h"
79  #  endif  #  endif
80  # endif  # endif
 # ifdef ALLOW_OBCS  
 #  include "OBCS.h"  
 # endif  
81  # ifdef ALLOW_PTRACERS  # ifdef ALLOW_PTRACERS
82  #  include "PTRACERS_SIZE.h"  #  include "PTRACERS_SIZE.h"
83  #  include "PTRACERS.h"  #  include "PTRACERS.h"
84  # endif  # endif
85    # ifdef ALLOW_OBCS
86    #  include "OBCS.h"
87    #  ifdef ALLOW_PTRACERS
88    #   include "OBCS_PTRACERS.h"
89    #  endif
90    # endif
91  # ifdef ALLOW_CD_CODE  # ifdef ALLOW_CD_CODE
92  #  include "CD_CODE_VARS.h"  #  include "CD_CODE_VARS.h"
93  # endif  # endif
94    # ifdef ALLOW_THSICE
95    #  include "THSICE_VARS.h"
96    # endif
97  # ifdef ALLOW_EBM  # ifdef ALLOW_EBM
98  #  include "EBM.h"  #  include "EBM.h"
99  # endif  # endif
# Line 110  C     myIter - iteration counter for thi Line 119  C     myIter - iteration counter for thi
119  C     myTime - time counter for this thread  C     myTime - time counter for this thread
120  C     myThid - thread number for this instance of the routine.  C     myThid - thread number for this instance of the routine.
121        INTEGER iloop        INTEGER iloop
122        INTEGER myThid        INTEGER myThid
123        INTEGER myIter        INTEGER myIter
124        _RL     myTime        _RL     myTime
125    
# Line 134  C--   Reset the model iteration counter Line 143  C--   Reset the model iteration counter
143  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
144  c**************************************  c**************************************
145  #include "checkpoint_lev1_directives.h"  #include "checkpoint_lev1_directives.h"
146    #include "checkpoint_lev1_template.h"
147  c**************************************  c**************************************
148  #endif  #endif
149    
# Line 141  C--   Switch on/off diagnostics for snap Line 151  C--   Switch on/off diagnostics for snap
151  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
152        IF ( useDiagnostics ) THEN        IF ( useDiagnostics ) THEN
153          CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )          CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )
       ENDIF  
 #endif  
   
154  C--   State-variables diagnostics  C--   State-variables diagnostics
       IF ( usediagnostics ) THEN  
155          CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)          CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
156          CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )          CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
157          CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
158        ENDIF        ENDIF
159    #endif
160    
161  C--   Call external forcing package  C--   Call Bulk-Formulae forcing package
162  #ifdef ALLOW_BULK_FORCE  #ifdef ALLOW_BULK_FORCE
163        IF ( useBulkForce ) THEN        IF ( useBulkForce ) THEN
164  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 164  C-    load all forcing fields at current Line 171  C-    load all forcing fields at current
171  C-    calculate qnet and empmr (and wind stress)  C-    calculate qnet and empmr (and wind stress)
172         CALL BULKF_FORCING( myTime, myIter, myThid )         CALL BULKF_FORCING( myTime, myIter, myThid )
173         CALL TIMER_STOP ('BULKF_FORCING      [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('BULKF_FORCING      [FORWARD_STEP]',mythid)
174        ELSE        ENDIF
175  #endif /* ALLOW_BULK_FORCE */  #endif /* ALLOW_BULK_FORCE */
176    
177    C--   Call external forcing package
178  # ifdef ALLOW_EXF  # ifdef ALLOW_EXF
179  #  ifdef ALLOW_DEBUG  #  ifdef ALLOW_DEBUG
180        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
# Line 190  cph assuming that ALLOW_SEAICE has not y Line 198  cph assuming that ALLOW_SEAICE has not y
198         CALL TIMER_START('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)         CALL TIMER_START('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)
199         CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )         CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )
200         CALL TIMER_STOP ('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)         CALL TIMER_STOP ('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)
201    # ifdef NONLIN_FRSURF
202    CADJ STORE SST    = comlev1, key = ikey_dynamics
203    CADJ STORE SSS    = comlev1, key = ikey_dynamics
204    #  ifdef SHORTWAVE_HEATING
205    CADJ STORE Qsw    = comlev1, key = ikey_dynamics
206    #  endif
207    # endif
208  #  if (defined (ALLOW_SEAICE) || defined (ALLOW_EBM))  #  if (defined (ALLOW_SEAICE) || defined (ALLOW_EBM))
209        ENDIF        ENDIF
210  #  endif  #  endif
211  # endif /* ALLOW_EXF */  # endif /* ALLOW_EXF */
 #ifdef ALLOW_BULK_FORCE  
 C--   end of if/else block useBulfforce --  
       ENDIF  
 #endif /* ALLOW_BULK_FORCE */  
212    
213  #ifdef ALLOW_AUTODIFF  #ifdef ALLOW_AUTODIFF
214  c--   Add control vector for forcing and parameter fields  c--   Add control vector for forcing and parameter fields
# Line 243  C     theta is dumped or time-averaged. Line 254  C     theta is dumped or time-averaged.
254    
255  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
256  # ifdef ALLOW_PTRACERS  # ifdef ALLOW_PTRACERS
257  cph this replaces _bibj storing of ptracer within thermodynamics  cph this is now also replaced by storing elsewhere
258  CADJ STORE ptracer  = comlev1, key = ikey_dynamics  cphCADJ STORE ptracer  = comlev1, key = ikey_dynamics
259  # endif  # endif
260  #endif  #endif
261    
262  #ifdef ALLOW_OFFLINE  #ifdef ALLOW_OFFLINE
263          call OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )        IF ( useOffLine ) THEN
264  #endif          CALL TIMER_START('OFFLINE_FIELDS_LOAD [FORWARD_STEP]',myThid)
265    #ifdef ALLOW_DEBUG
266            IF ( debugLevel .GE. debLevB )
267         &        CALL DEBUG_CALL('OFFLINE_FIELDS_LOAD',myThid)
268    #endif /* ALLOW_DEBUG */
269            CALL OFFLINE_FIELDS_LOAD( myTime, myIter, myThid )
270            CALL TIMER_STOP ('OFFLINE_FIELDS_LOAD [FORWARD_STEP]',myThid)
271          ENDIF
272    #endif /* ALLOW_OFFLINE */
273    
274  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_GCHEM
275  # ifdef ALLOW_GCHEM          IF ( useGCHEM ) THEN
         IF ( useGCHEM ) THEN  
276  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
277           IF ( debugLevel .GE. debLevB )           IF ( debugLevel .GE. debLevB )
278       &        CALL DEBUG_CALL('GCHEM_FIELDS_LOAD',myThid)       &        CALL DEBUG_CALL('GCHEM_FIELDS_LOAD',myThid)
279  #endif /* ALLOW_DEBUG */  #endif /* ALLOW_DEBUG */
280           CALL GCHEM_FIELDS_LOAD( mytime, myiter, mythid )           CALL GCHEM_FIELDS_LOAD( mytime, myiter, mythid )
281          ENDIF          ENDIF
282  # endif  #endif /* ALLOW_GCHEM */
283    
284    #ifdef ALLOW_RBCS
285            IF ( useRBCS ) THEN
286             CALL RBCS_FIELDS_LOAD( mytime, myiter, mythid )
287            ENDIF
288  #endif  #endif
289    
290  #ifdef COMPONENT_MODULE  #ifdef COMPONENT_MODULE
# Line 298  C--     Step forward fields and calculat Line 321  C--     Step forward fields and calculat
321         CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)
322    
323  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
 CADJ STORE theta              = comlev1, key = ikey_dynamics  
 CADJ STORE salt               = comlev1, key = ikey_dynamics  
 CADJ STORE totphihyd          = comlev1, key = ikey_dynamics  
 CADJ STORE surfaceforcingtice = comlev1, key = ikey_dynamics  
324  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
325  CADJ STORE uvel               = comlev1, key = ikey_dynamics  CADJ STORE uvel               = comlev1, key = ikey_dynamics
326  CADJ STORE vvel               = comlev1, key = ikey_dynamics  CADJ STORE vvel               = comlev1, key = ikey_dynamics
327  # endif  # endif
328  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
329  CADJ STORE empmr              = comlev1, key = ikey_dynamics  cphCADJ STORE empmr              = comlev1, key = ikey_dynamics
330  CADJ STORE pmepr              = comlev1, key = ikey_dynamics  cphCADJ STORE pmepr              = comlev1, key = ikey_dynamics
331    # endif
332    # ifdef NONLIN_FRSURF
333    cph-test
334    CADJ STORE hFacC              = comlev1, key = ikey_dynamics
335  # endif  # endif
336  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
337    
338  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_AUTODIFF_TAMC
339           IF ( .NOT. useOffLine ) THEN
340    #endif
341  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
342         IF ( debugLevel .GE. debLevB )         IF ( debugLevel .GE. debLevB )
343       &    CALL DEBUG_CALL('DO_OCEANIC_PHYS',myThid)       &    CALL DEBUG_CALL('DO_OCEANIC_PHYS',myThid)
344  #endif  #endif
345         CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)         CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
346         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
347         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
348    #ifdef ALLOW_AUTODIFF_TAMC
349    CADJ STORE EmPmR    = comlev1, key = ikey_dynamics
350    # ifdef EXACT_CONSERV
351    CADJ STORE pmepr    = comlev1, key = ikey_dynamics
352    # endif
353    #else
354           ENDIF
355  #endif  #endif
356    
357    #ifdef ALLOW_AUTODIFF_TAMC
358    # ifdef NONLIN_FRSURF
359    cph-test
360    CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics
361    CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics
362    CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics
363    CADJ STORE hFacC, hFacS, hFacW
364    CADJ &     = comlev1, key = ikey_dynamics
365    CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
366    CADJ &     = comlev1, key = ikey_dynamics
367    c
368    CADJ STORE surfaceforcingu = comlev1, key = ikey_dynamics
369    CADJ STORE surfaceforcingv = comlev1, key = ikey_dynamics
370    # endif
371    #endif /* ALLOW_AUTODIFF_TAMC */
372    
373  #ifdef ALLOW_GCHEM  #ifdef ALLOW_GCHEM
374  C     GCHEM package is an interface for any bio-geochemical or  C     GCHEM package is an interface for any bio-geochemical or
375  C     ecosystem model you would like to include.  C     ecosystem model you would like to include.
# Line 381  CADJ STORE KPPfrac            = comlev1, Line 429  CADJ STORE KPPfrac            = comlev1,
429  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics
430  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics
431  # endif  # endif
432    c
433    # ifdef NONLIN_FRSURF
434    CADJ STORE etaH               = comlev1, key = ikey_dynamics
435    #  ifdef ALLOW_CD_CODE
436    CADJ STORE etanm1             = comlev1, key = ikey_dynamics
437    #  endif
438    # endif
439  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
440    
441        IF ( .NOT.staggerTimeStep ) THEN        IF ( .NOT.staggerTimeStep ) THEN
# Line 393  CADJ STORE KPPdiffKzT         = comlev1, Line 448  CADJ STORE KPPdiffKzT         = comlev1,
448          CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',mythid)
449  C--    if not staggerTimeStep: end  C--    if not staggerTimeStep: end
450        ENDIF        ENDIF
451    c #ifdef ALLOW_NONHYDROSTATIC
452          IF ( implicitIntGravWave ) THEN
453            CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
454            CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
455            CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
456          ENDIF
457    c #endif
458    
459  #ifdef COMPONENT_MODULE  #ifdef COMPONENT_MODULE
460         IF ( useCoupler .AND. .NOT.cpl_earlyExpImpCall ) THEN         IF ( useCoupler .AND. .NOT.cpl_earlyExpImpCall ) THEN
# Line 403  C      Read in coupling data that I impo Line 465  C      Read in coupling data that I impo
465           CALL CPL_EXPORT_MY_DATA(       myItP1, myTime, myThid )           CALL CPL_EXPORT_MY_DATA(       myItP1, myTime, myThid )
466           CALL CPL_IMPORT_EXTERNAL_DATA( myItP1, myTime, myThid )           CALL CPL_IMPORT_EXTERNAL_DATA( myItP1, myTime, myThid )
467           CALL TIMER_STOP ('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)           CALL TIMER_STOP ('CPL_EXPORT-IMPORT  [FORWARD_STEP]',myThid)
468  # ifndef ALLOW_AIM  # ifdef ALLOW_OCN_COMPON_INTERF
469          IF ( useRealFreshWaterFlux ) THEN          IF ( useRealFreshWaterFlux ) THEN
470           CALL OCN_APPLY_IMPORT( .FALSE., myTime, myIter, myThid )           CALL OCN_APPLY_IMPORT( .FALSE., myTime, myIter, myThid )
471          ENDIF          ENDIF
472  # endif  # endif /* ALLOW_OCN_COMPON_INTERF */
473         ENDIF         ENDIF
474  #endif /* COMPONENT_MODULE */  #endif /* COMPONENT_MODULE */
475    
476    #ifdef ALLOW_AUTODIFF_TAMC
477    # ifdef NONLIN_FRSURF
478    CADJ STORE hFacC          = comlev1, key = ikey_dynamics
479    CADJ STORE hFacS          = comlev1, key = ikey_dynamics
480    CADJ STORE hFacW          = comlev1, key = ikey_dynamics
481    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
482    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
483    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
484    CADJ STORE etaN           = comlev1, key = ikey_dynamics
485    # endif
486    #endif
487  C--   Step forward fields and calculate time tendency terms.  C--   Step forward fields and calculate time tendency terms.
 #ifndef ALLOW_OFFLINE  
488  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
489        IF ( momStepping ) THEN        IF ( momStepping ) THEN
490  #endif  #endif
# Line 426  C--   Step forward fields and calculate Line 498  C--   Step forward fields and calculate
498  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
499        ENDIF        ENDIF
500  #endif  #endif
501    
502    #ifdef ALLOW_AUTODIFF_TAMC
503    # ifdef NONLIN_FRSURF
504    cph-test
505    CADJ STORE gU, gV  = comlev1, key = ikey_dynamics
506    # endif
507  #endif  #endif
508    
509  C--   Update time-counter  C--   Update time-counter
# Line 458  C--   Update geometric factors: Line 536  C--   Update geometric factors:
536  C-    update hfacC,W,S and recip_hFac according to etaH(n+1) :  C-    update hfacC,W,S and recip_hFac according to etaH(n+1) :
537        IF ( nonlinFreeSurf.GT.0) THEN        IF ( nonlinFreeSurf.GT.0) THEN
538         IF ( select_rStar.GT.0 ) THEN         IF ( select_rStar.GT.0 ) THEN
539    # ifndef DISABLE_RSTAR_CODE
540    # ifdef ALLOW_AUTODIFF_TAMC
541    cph-test
542    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
543    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
544    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
545    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
546    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
547    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
548    # endif
549          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
550          CALL UPDATE_R_STAR( myTime, myIter, myThid )          CALL UPDATE_R_STAR( myTime, myIter, myThid )
551          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
552    # ifdef ALLOW_AUTODIFF_TAMC
553    cph-test
554    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
555    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
556    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
557    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
558    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
559    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
560    # endif
561    # endif /* DISABLE_RSTAR_CODE */
562         ELSE         ELSE
563    #ifdef ALLOW_AUTODIFF_TAMC
564    CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
565    CADJ &     = comlev1, key = ikey_dynamics
566    #endif
567          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
568          CALL UPDATE_SURF_DR( myTime, myIter, myThid )          CALL UPDATE_SURF_DR( myTime, myIter, myThid )
569          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
570         ENDIF         ENDIF
571        ENDIF        ENDIF
572    # ifdef ALLOW_AUTODIFF_TAMC
573    cph-test
574    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
575    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
576    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
577    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
578    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
579    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
580    # endif
581  C-    update also CG2D matrix (and preconditioner)  C-    update also CG2D matrix (and preconditioner)
582        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
583          CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)
584          CALL UPDATE_CG2D( myTime, myIter, myThid )          CALL UPDATE_CG2D( myTime, myIter, myThid )
585          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)
586        ENDIF        ENDIF
587  #endif  #endif /* NONLIN_FRSURF */
588    
589  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
590  #ifdef ALLOW_SHAP_FILT  #ifdef ALLOW_SHAP_FILT
# Line 500  C      => Filtering of uVel,vVel is nece Line 611  C      => Filtering of uVel,vVel is nece
611          CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )          CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
612          CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
613        ENDIF        ENDIF
614  #endif    #endif
615    
616  C--   Solve elliptic equation(s).  C--   Solve elliptic equation(s).
617  C     Two-dimensional only for conventional hydrostatic or  C     Two-dimensional only for conventional hydrostatic or
618  C     three-dimensional for non-hydrostatic and/or IGW scheme.  C     three-dimensional for non-hydrostatic and/or IGW scheme.
 #ifndef ALLOW_OFFLINE  
619        IF ( momStepping ) THEN        IF ( momStepping ) THEN
620    #ifdef ALLOW_AUTODIFF_TAMC
621    # ifdef NONLIN_FRSURF
622    CADJ STORE uvel, vvel
623    CADJ &     = comlev1, key = ikey_dynamics
624    CADJ STORE empmr,hfacs,hfacw
625    CADJ &     = comlev1, key = ikey_dynamics
626    # endif
627    #endif
628          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
629          CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)          CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)
630          CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
631        ENDIF        ENDIF
 #endif  
632    
633  C--   Correct divergence in flow field and cycle time-stepping momentum  C--   Correct divergence in flow field and cycle time-stepping momentum
634  c     IF ( momStepping ) THEN  #ifndef ALLOW_AUTODIFF_TAMC
635  #ifndef ALLOW_OFFLINE        IF ( momStepping ) THEN
636    #endif
637          CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)          CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
638          CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)          CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)
639          CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
640    #ifndef ALLOW_AUTODIFF_TAMC
641          ENDIF
642  #endif  #endif
 c     ENDIF  
643    
644  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
645        IF (exactConserv) THEN        IF (exactConserv) THEN
646    #ifdef ALLOW_AUTODIFF_TAMC
647    cph-test
648    cphCADJ STORE etaH          = comlev1, key = ikey_dynamics
649    #endif
650  C--   Update etaH(n+1) :  C--   Update etaH(n+1) :
651          CALL TIMER_START('UPDATE_ETAH         [FORWARD_STEP]',mythid)          CALL TIMER_START('UPDATE_ETAH         [FORWARD_STEP]',mythid)
652          CALL UPDATE_ETAH( myTime, myIter, myThid )          CALL UPDATE_ETAH( myTime, myIter, myThid )
# Line 533  C--   Update etaH(n+1) : Line 656  C--   Update etaH(n+1) :
656    
657  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
658        IF ( select_rStar.NE.0 ) THEN        IF ( select_rStar.NE.0 ) THEN
659    # ifndef DISABLE_RSTAR_CODE
660  C--   r* : compute the future level thickness according to etaH(n+1)  C--   r* : compute the future level thickness according to etaH(n+1)
661          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)
662          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
663          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)
664    # endif /* DISABLE_RSTAR_CODE */
665        ELSEIF ( nonlinFreeSurf.GT.0) THEN        ELSEIF ( nonlinFreeSurf.GT.0) THEN
666  C--   compute the future surface level thickness according to etaH(n+1)  C--   compute the future surface level thickness according to etaH(n+1)
667    # ifdef ALLOW_AUTODIFF_TAMC
668    CADJ STORE etaH          = comlev1, key = ikey_dynamics
669    # endif
670          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)
671          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
672          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)
673        ENDIF        ENDIF
674    # ifdef ALLOW_AUTODIFF_TAMC
675    cph-test
676    CADJ STORE hFac_surfC    = comlev1, key = ikey_dynamics
677    # endif
678  #endif /* NONLIN_FRSURF */  #endif /* NONLIN_FRSURF */
679    
680  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
# Line 556  C--   do exchanges of U,V (needed for mu Line 688  C--   do exchanges of U,V (needed for mu
688          CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )          CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
689          CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
690    
691    #ifdef ALLOW_DIAGNOSTICS
692  C--   State-variables diagnostics  C--   State-variables diagnostics
693         IF ( usediagnostics ) THEN         IF ( useDiagnostics ) THEN
694          CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)          CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
695          CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )          CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
696          CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
697         ENDIF         ENDIF
698    #endif
699    
700  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
701          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
# Line 596  C     of ptracers here in GCHEM_FORCING_ Line 730  C     of ptracers here in GCHEM_FORCING_
730           CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)           CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
731           CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )           CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
732           CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)           CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
733          ENDIF            ENDIF
734  #endif /* ALLOW_GCHEM */  #endif /* ALLOW_GCHEM */
735    
736  C--   Do "blocking" sends and receives for tendency "overlap" terms  C--   Do "blocking" sends and receives for tendency "overlap" terms
# Line 609  C--   Do "blocking" sends and receives f Line 743  C--   Do "blocking" sends and receives f
743        CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )        CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
744        CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
745    
746    #ifdef ALLOW_DIAGNOSTICS
747          IF ( useDiagnostics ) THEN
748           CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
749           CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid )
750           CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
751          ENDIF
752    #endif
753    
754  C AMM  C AMM
755  #ifdef ALLOW_GRIDALT  #ifdef ALLOW_GRIDALT
# Line 622  C AMM Line 763  C AMM
763  #ifdef ALLOW_FIZHI  #ifdef ALLOW_FIZHI
764          if( useFIZHI) then          if( useFIZHI) then
765           CALL TIMER_START('FIZHI               [FORWARD_STEP]',mythid)           CALL TIMER_START('FIZHI               [FORWARD_STEP]',mythid)
766           CALL STEP_FIZHI_CORR ( myTime, myIter, myThid )           CALL STEP_FIZHI_CORR ( myTime, myIter, myThid, dTtracerLev(1) )
767           CALL TIMER_STOP('FIZHI               [FORWARD_STEP]',mythid)           CALL TIMER_STOP('FIZHI               [FORWARD_STEP]',mythid)
768          endif          endif
769  #endif  #endif
# Line 637  C--   Calculate float trajectories Line 778  C--   Calculate float trajectories
778        ENDIF        ENDIF
779  #endif  #endif
780    
781    #ifdef ALLOW_TIMEAVE
782  C--   State-variables time-averaging  C--   State-variables time-averaging
783        CALL TIMER_START('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)        CALL TIMER_START('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
784        CALL DO_STATEVARS_TAVE( myTime, myIter, myThid )        CALL DO_STATEVARS_TAVE( myTime, myIter, myThid )
785        CALL TIMER_STOP ('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
786    #endif
787    
 #ifndef ALLOW_OFFLINE  
788  #ifdef ALLOW_MONITOR  #ifdef ALLOW_MONITOR
789          IF ( .NOT.useOffLine ) THEN
790  C--   Check status of solution (statistics, cfl, etc...)  C--   Check status of solution (statistics, cfl, etc...)
791        CALL TIMER_START('MONITOR             [FORWARD_STEP]',myThid)          CALL TIMER_START('MONITOR             [FORWARD_STEP]',myThid)
792        CALL MONITOR( myIter, myTime, myThid )          CALL MONITOR( myIter, myTime, myThid )
793        CALL TIMER_STOP ('MONITOR             [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('MONITOR             [FORWARD_STEP]',myThid)
794          ENDIF
795  #endif /* ALLOW_MONITOR */  #endif /* ALLOW_MONITOR */
 #endif  
796    
797  #ifdef ALLOW_COST  #ifdef ALLOW_COST
798  C--     compare model with data and compute cost function  C--     compare model with data and compute cost function
# Line 660  C--     this is done after exchanges to Line 803  C--     this is done after exchanges to
803  #endif  #endif
804    
805  C--   Do IO if needed.  C--   Do IO if needed.
 #ifdef ALLOW_OFFLINE  
       CALL TIMER_START('OFFLINE_MODEL_IO    [FORWARD_STEP]',myThid)  
       CALL OFFLINE_MODEL_IO( myTime, myIter, myThid )  
       CALL TIMER_STOP ('OFFLINE_MODEL_IO    [FORWARD_STEP]',myThid)  
 #else  
806        CALL TIMER_START('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)        CALL TIMER_START('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
807        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )
808        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
 #endif  
809    
810  #ifdef HAVE_SIGREG  #ifdef HAVE_SIGREG
811        IF ( useSIGREG ) THEN        IF ( useSIGREG ) THEN
812          IF ( i_got_signal .GT. 0 ) THEN          IF ( i_got_signal .GT. 0 ) THEN
813            CALL PACKAGES_WRITE_PICKUP(            CALL PACKAGES_WRITE_PICKUP(
814       I         .TRUE., myTime, myIter, myThid )       I         .TRUE., myTime, myIter, myThid )
 #ifndef ALLOW_OFFLINE  
815            CALL WRITE_CHECKPOINT(            CALL WRITE_CHECKPOINT(
816       I         .TRUE., myTime, myIter, myThid )         I         .TRUE., myTime, myIter, myThid )
 #endif  
817            STOP 'Checkpoint completed -- killed by signal handler'            STOP 'Checkpoint completed -- killed by signal handler'
818          ENDIF          ENDIF
819        ENDIF        ENDIF
820  #endif  #endif /* HAVE_SIGREG */
821    
822  C--   Save state for restarts  C--   Save state for restarts
823        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
824        CALL PACKAGES_WRITE_PICKUP(        CALL PACKAGES_WRITE_PICKUP(
825       I               .FALSE., myTime, myIter, myThid )       I               .FALSE., myTime, myIter, myThid )
 #ifndef ALLOW_OFFLINE  
826        CALL WRITE_CHECKPOINT(        CALL WRITE_CHECKPOINT(
827       I               .FALSE., myTime, myIter, myThid )         I               .FALSE., myTime, myIter, myThid )
 #endif  
828        CALL TIMER_STOP ('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
829    
830  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
831        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
832       &    CALL DEBUG_LEAVE('FORWARD_STEP',myThid)       &    CALL DEBUG_LEAVE('FORWARD_STEP',myThid)
833  #endif  #endif
834    

Legend:
Removed from v.1.125  
changed lines
  Added in v.1.140

  ViewVC Help
Powered by ViewVC 1.1.22