/[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.105 by heimbach, Thu Nov 11 02:24:20 2004 UTC revision 1.134 by heimbach, Wed Mar 8 06:36:39 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_GCHEM  
 # include "GCHEM_OPTIONS.h"  
 #endif  
7  #ifdef ALLOW_OFFLINE  #ifdef ALLOW_OFFLINE
8  # include "OFFLINE_OPTIONS.h"  # include "OFFLINE_OPTIONS.h"
9  #endif  #endif
# Line 43  C     == Global variables == Line 40  C     == Global variables ==
40  #include "PARAMS.h"  #include "PARAMS.h"
41  #include "DYNVARS.h"  #include "DYNVARS.h"
42    
43    #ifdef ALLOW_MNC
44    #include "MNC_PARAMS.h"
45          EXTERNAL DIFFERENT_MULTIPLE
46          LOGICAL  DIFFERENT_MULTIPLE
47    #endif
48    
49    #ifdef HAVE_SIGREG
50    #include "SIGREG.h"
51    #endif
52    
53  #ifdef ALLOW_SHAP_FILT  #ifdef ALLOW_SHAP_FILT
54  # include "SHAP_FILT.h"  # include "SHAP_FILT.h"
55  #endif  #endif
# Line 56  C     == Global variables == Line 63  C     == Global variables ==
63  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
64  # include "FFIELDS.h"  # include "FFIELDS.h"
65    
 # ifdef ALLOW_NONHYDROSTATIC  
 #  include "CG3D.h"  
 # endif  
   
66  # include "tamc.h"  # include "tamc.h"
67  # include "ctrl.h"  # include "ctrl.h"
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 112  C     myThid - thread number for this in Line 118  C     myThid - thread number for this in
118        _RL     myTime        _RL     myTime
119    
120  C     == Local variables ==  C     == Local variables ==
121    #ifdef COMPONENT_MODULE
122        INTEGER myItP1        INTEGER myItP1
123    #endif
124  CEOP  CEOP
125    
126  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 122  CEOP Line 130  CEOP
130    
131  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
132  C--   Reset the model iteration counter and the model time.  C--   Reset the model iteration counter and the model time.
133        myiter = nIter0 + (iloop-1)        myIter = nIter0 + (iloop-1)
134        mytime = startTime + float(iloop-1)*deltaTclock        myTime = startTime + float(iloop-1)*deltaTclock
 #endif  
   
 #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_AUTODIFF_MONITOR))  
 C     Include call to a dummy routine. Its adjoint will be  
 C     called at the proper place in the adjoint code.  
 C     The adjoint routine will print out adjoint values  
 C     if requested. The location of the call is important,  
 C     it has to be after the adjoint of the exchanges  
 C     (DO_GTERM_BLOCKING_EXCHANGES).  
       CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )  
 cph   I've commented this line since it may conflict with MITgcm's adjoint  
 cph   However, need to check whether that's still consistent  
 cph   with the ecco-branch (it should).  
 cph      CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )  
135  #endif  #endif
136    
137  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 146  c************************************** Line 140  c**************************************
140  c**************************************  c**************************************
141  #endif  #endif
142    
143  C--   Call external forcing package  C--   Switch on/off diagnostics for snap-shot output:
144    #ifdef ALLOW_DIAGNOSTICS
145          IF ( useDiagnostics ) THEN
146            CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )
147    C--   State-variables diagnostics
148            CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
149            CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
150            CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
151          ENDIF
152    #endif
153    
154    C--   Call Bulk-Formulae forcing package
155  #ifdef ALLOW_BULK_FORCE  #ifdef ALLOW_BULK_FORCE
156        IF ( useBulkForce ) THEN        IF ( useBulkForce ) THEN
157  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 159  C-    load all forcing fields at current Line 164  C-    load all forcing fields at current
164  C-    calculate qnet and empmr (and wind stress)  C-    calculate qnet and empmr (and wind stress)
165         CALL BULKF_FORCING( myTime, myIter, myThid )         CALL BULKF_FORCING( myTime, myIter, myThid )
166         CALL TIMER_STOP ('BULKF_FORCING      [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('BULKF_FORCING      [FORWARD_STEP]',mythid)
167        ELSE        ENDIF
168  #endif /* ALLOW_BULK_FORCE */  #endif /* ALLOW_BULK_FORCE */
169    
170    C--   Call external forcing package
171  # ifdef ALLOW_EXF  # ifdef ALLOW_EXF
172  #  ifdef ALLOW_DEBUG  #  ifdef ALLOW_DEBUG
173        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
# Line 185  cph assuming that ALLOW_SEAICE has not y Line 191  cph assuming that ALLOW_SEAICE has not y
191         CALL TIMER_START('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)         CALL TIMER_START('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)
192         CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )         CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )
193         CALL TIMER_STOP ('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)         CALL TIMER_STOP ('EXTERNAL_FIELDS_LOAD[FORWARD_STEP]',mythid)
194    # ifdef NONLIN_FRSURF
195    CADJ STORE SST    = comlev1, key = ikey_dynamics
196    CADJ STORE SSS    = comlev1, key = ikey_dynamics
197    #  ifdef SHORTWAVE_HEATING
198    CADJ STORE Qsw    = comlev1, key = ikey_dynamics
199    #  endif
200    # endif
201  #  if (defined (ALLOW_SEAICE) || defined (ALLOW_EBM))  #  if (defined (ALLOW_SEAICE) || defined (ALLOW_EBM))
202        ENDIF        ENDIF
203  #  endif  #  endif
204  # endif /* ALLOW_EXF */  # endif /* ALLOW_EXF */
 #ifdef ALLOW_BULK_FORCE  
 C--   end of if/else block useBulfforce --  
       ENDIF  
 #endif /* ALLOW_BULK_FORCE */  
205    
206  #ifdef ALLOW_AUTODIFF  #ifdef ALLOW_AUTODIFF
207  c--   Add control vector for forcing and parameter fields  c--   Add control vector for forcing and parameter fields
# Line 200  c--   Add control vector for forcing and Line 209  c--   Add control vector for forcing and
209       &     CALL CTRL_MAP_FORCING (mythid)       &     CALL CTRL_MAP_FORCING (mythid)
210  #endif  #endif
211    
212    #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_AUTODIFF_MONITOR))
213    C     Include call to a dummy routine. Its adjoint will be
214    C     called at the proper place in the adjoint code.
215    C     The adjoint routine will print out adjoint values
216    C     if requested. The location of the call is important,
217    C     it has to be after the adjoint of the exchanges
218    C     (DO_GTERM_BLOCKING_EXCHANGES).
219          CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )
220    cph   I've commented this line since it may conflict with MITgcm's adjoint
221    cph   However, need to check whether that's still consistent
222    cph   with the ecco-branch (it should).
223    cph      CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
224    #endif
225    
226  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
227  C--   Call sea ice model to compute forcing/external data fields.  In  C--   Call sea ice model to compute forcing/external data fields.  In
228  C     addition to computing prognostic sea-ice variables and diagnosing the  C     addition to computing prognostic sea-ice variables and diagnosing the
# Line 235  CADJ STORE ptracer  = comlev1, key = ike Line 258  CADJ STORE ptracer  = comlev1, key = ike
258    
259  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
260  # ifdef ALLOW_GCHEM  # ifdef ALLOW_GCHEM
261            IF ( useGCHEM ) THEN
262    #ifdef ALLOW_DEBUG
263             IF ( debugLevel .GE. debLevB )
264         &        CALL DEBUG_CALL('GCHEM_FIELDS_LOAD',myThid)
265    #endif /* ALLOW_DEBUG */
266           CALL GCHEM_FIELDS_LOAD( mytime, myiter, mythid )           CALL GCHEM_FIELDS_LOAD( mytime, myiter, mythid )
267            ENDIF
268  # endif  # endif
269  #endif  #endif
270    
271    #ifdef ALLOW_RBCS
272            IF ( useRBCS ) THEN
273             CALL RBCS_FIELDS_LOAD( mytime, myiter, mythid )
274            ENDIF
275    #endif
276    
277  #ifdef COMPONENT_MODULE  #ifdef COMPONENT_MODULE
278         IF ( useCoupler .AND. cpl_earlyExpImpCall ) THEN         IF ( useCoupler .AND. cpl_earlyExpImpCall ) THEN
279  C      Post coupling data that I export.  C      Post coupling data that I export.
# Line 273  C--     Step forward fields and calculat Line 308  C--     Step forward fields and calculat
308         CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)
309    
310  #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  
311  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
312  CADJ STORE uvel               = comlev1, key = ikey_dynamics  CADJ STORE uvel               = comlev1, key = ikey_dynamics
313  CADJ STORE vvel               = comlev1, key = ikey_dynamics  CADJ STORE vvel               = comlev1, key = ikey_dynamics
314  # endif  # endif
315  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
316  CADJ STORE empmr              = comlev1, key = ikey_dynamics  cphCADJ STORE empmr              = comlev1, key = ikey_dynamics
317  CADJ STORE pmepr              = comlev1, key = ikey_dynamics  cphCADJ STORE pmepr              = comlev1, key = ikey_dynamics
318    # endif
319    # ifdef NONLIN_FRSURF
320    cph-test
321    CADJ STORE hFacC              = comlev1, key = ikey_dynamics
322  # endif  # endif
323  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
324    
# Line 295  CADJ STORE pmepr              = comlev1, Line 330  CADJ STORE pmepr              = comlev1,
330         CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)         CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
331         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
332         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
333    #ifdef ALLOW_AUTODIFF_TAMC
334    CADJ STORE EmPmR    = comlev1, key = ikey_dynamics
335    # ifdef EXACT_CONSERV
336    CADJ STORE pmepr    = comlev1, key = ikey_dynamics
337    # endif
338    #endif
339    #endif
340    C
341    #ifdef ALLOW_AUTODIFF_TAMC
342    # ifdef NONLIN_FRSURF
343    cph-test
344    CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics
345    CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics
346    CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics
347    CADJ STORE hFacC, hFacS, hFacW
348    CADJ &     = comlev1, key = ikey_dynamics
349    CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
350    CADJ &     = comlev1, key = ikey_dynamics
351    c
352    CADJ STORE surfaceforcingu = comlev1, key = ikey_dynamics
353    CADJ STORE surfaceforcingv = comlev1, key = ikey_dynamics
354    # endif
355    #endif /* ALLOW_AUTODIFF_TAMC */
356    
357    #ifdef ALLOW_GCHEM
358    C     GCHEM package is an interface for any bio-geochemical or
359    C     ecosystem model you would like to include.
360    C     If GCHEM_SEPARATE_FORCING is not defined, you are
361    C     responsible for computing tendency terms for passive
362    C     tracers and storing them on a 3DxNumPtracers-array called
363    C     gchemTendency in GCHEM_CALC_TENDENCY. This tendency is then added
364    C     to gPtr in ptracers_forcing later-on.
365    C     If GCHEM_SEPARATE_FORCING is defined, you are reponsible for
366    C     UPDATING ptracers directly in GCHEM_FORCING_SEP. This amounts
367    C     to a completely separate time step that you have to implement
368    C     yourself (Eulerian seems to be fine in most cases).
369    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
370    C     CAVEAT: Up to now, when GCHEM is turned on the field ptracerForcingSurf,
371    C     which is needed for KPP is not set properly. ptracerForcingSurf must
372    C     be treated differently depending on whether GCHEM_SEPARATE_FORCING
373    C     is define or not. TBD.
374    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
375           IF ( useGCHEM ) THEN
376    #ifdef ALLOW_DEBUG
377            IF ( debugLevel .GE. debLevB )
378         &       CALL DEBUG_CALL('GCHEM_CALC_TENDENCY',myThid)
379  #endif  #endif
380            CALL TIMER_START('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
381            CALL GCHEM_CALC_TENDENCY( myTime, myIter, myThid )
382            CALL TIMER_STOP ('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
383           ENDIF
384    #endif /* ALLOW_GCHEM */
385    
386  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
387  cph needed to be moved here from do_oceanic_physics  cph needed to be moved here from do_oceanic_physics
# Line 327  CADJ STORE KPPfrac            = comlev1, Line 413  CADJ STORE KPPfrac            = comlev1,
413  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics
414  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics
415  # endif  # endif
416    c
417    # ifdef NONLIN_FRSURF
418    CADJ STORE etaH               = comlev1, key = ikey_dynamics
419    #  ifdef ALLOW_CD_CODE
420    CADJ STORE etanm1             = comlev1, key = ikey_dynamics
421    #  endif
422    # endif
423  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
424    
425        IF ( .NOT.staggerTimeStep ) THEN        IF ( .NOT.staggerTimeStep ) THEN
# Line 339  CADJ STORE KPPdiffKzT         = comlev1, Line 432  CADJ STORE KPPdiffKzT         = comlev1,
432          CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',mythid)
433  C--    if not staggerTimeStep: end  C--    if not staggerTimeStep: end
434        ENDIF        ENDIF
435    c #ifdef ALLOW_NONHYDROSTATIC
436          IF ( implicitIntGravWave ) THEN
437            CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
438            CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
439            CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
440          ENDIF
441    c #endif
442    
443  #ifdef COMPONENT_MODULE  #ifdef COMPONENT_MODULE
444         IF ( useCoupler .AND. .NOT.cpl_earlyExpImpCall ) THEN         IF ( useCoupler .AND. .NOT.cpl_earlyExpImpCall ) THEN
# Line 357  C      Read in coupling data that I impo Line 457  C      Read in coupling data that I impo
457         ENDIF         ENDIF
458  #endif /* COMPONENT_MODULE */  #endif /* COMPONENT_MODULE */
459    
460    #ifdef ALLOW_AUTODIFF_TAMC
461    # ifdef NONLIN_FRSURF
462    CADJ STORE hFacC          = comlev1, key = ikey_dynamics
463    CADJ STORE hFacS          = comlev1, key = ikey_dynamics
464    CADJ STORE hFacW          = comlev1, key = ikey_dynamics
465    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
466    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
467    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
468    CADJ STORE etaN           = comlev1, key = ikey_dynamics
469    # endif
470    #endif
471  C--   Step forward fields and calculate time tendency terms.  C--   Step forward fields and calculate time tendency terms.
472  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
473  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
# Line 369  C--   Step forward fields and calculate Line 480  C--   Step forward fields and calculate
480          CALL TIMER_START('DYNAMICS            [FORWARD_STEP]',mythid)          CALL TIMER_START('DYNAMICS            [FORWARD_STEP]',mythid)
481          CALL DYNAMICS( myTime, myIter, myThid )          CALL DYNAMICS( myTime, myIter, myThid )
482          CALL TIMER_STOP ('DYNAMICS            [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('DYNAMICS            [FORWARD_STEP]',mythid)
483  #ifndef ALLOW_AUTODIFF_TAMC  # ifndef ALLOW_AUTODIFF_TAMC
484        ENDIF        ENDIF
485    # endif
486  #endif  #endif
487  #endif  C
488    #ifdef ALLOW_AUTODIFF_TAMC
489  #ifdef ALLOW_NONHYDROSTATIC  # ifdef NONLIN_FRSURF
490  C--   Step forward W field in N-H algorithm  cph-test
491        IF ( momStepping .AND. nonHydrostatic ) THEN  CADJ STORE gU, gV  = comlev1, key = ikey_dynamics
492  #ifdef ALLOW_DEBUG  # endif
           IF ( debugLevel .GE. debLevB )  
      &     CALL DEBUG_CALL('CALC_GW',myThid)  
 #endif  
          CALL TIMER_START('CALC_GW          [FORWARD_STEP]',myThid)  
          CALL CALC_GW(myThid)  
          CALL TIMER_STOP ('CALC_GW          [FORWARD_STEP]',myThid)  
       ENDIF  
493  #endif  #endif
494    
495  C--   Update time-counter  C--   Update time-counter
496        myIter = nIter0 + iLoop        myIter = nIter0 + iLoop
497        myTime = startTime + deltaTClock * float(iLoop)        myTime = startTime + deltaTClock * float(iLoop)
498    
499    #ifdef ALLOW_MNC
500    C     Update the default next iter for MNC
501          IF ( useMNC ) THEN
502             CALL MNC_CW_CITER_SETG( 1, 1, -1, myIter , myThid )
503    
504    C        TODO: Logic should be added here so that users can specify, on
505    C        a per-citer-group basis, when it is time to update the
506    C        "current" (and not just the "next") iteration
507    
508    C        TODO: the following is just a temporary band-aid (mostly, for
509    C        Baylor) until someone writes a routine that better handles time
510    C        boundaries such as weeks, months, years, etc.
511             IF ( mnc_filefreq .GT. 0 ) THEN
512               IF (DIFFERENT_MULTIPLE(mnc_filefreq,myTime,deltaTClock))
513         &          THEN
514                 CALL MNC_CW_CITER_SETG( 1, 1, myIter, -1 , myThid )
515               ENDIF
516             ENDIF
517           ENDIF
518    #endif
519    
520  C--   Update geometric factors:  C--   Update geometric factors:
521  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
522  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) :
523        IF ( nonlinFreeSurf.GT.0) THEN        IF ( nonlinFreeSurf.GT.0) THEN
524         IF ( select_rStar.GT.0 ) THEN         IF ( select_rStar.GT.0 ) THEN
525    # ifndef DISABLE_RSTAR_CODE
526    # ifdef ALLOW_AUTODIFF_TAMC
527    cph-test
528    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
529    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
530    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
531    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
532    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
533    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
534    # endif
535          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
536          CALL UPDATE_R_STAR( myTime, myIter, myThid )          CALL UPDATE_R_STAR( myTime, myIter, myThid )
537          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
538    # ifdef ALLOW_AUTODIFF_TAMC
539    cph-test
540    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
541    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
542    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
543    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
544    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
545    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
546    # endif
547    # endif /* DISABLE_RSTAR_CODE */
548         ELSE         ELSE
549    #ifdef ALLOW_AUTODIFF_TAMC
550    CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
551    CADJ &     = comlev1, key = ikey_dynamics
552    #endif
553          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
554          CALL UPDATE_SURF_DR( myTime, myIter, myThid )          CALL UPDATE_SURF_DR( myTime, myIter, myThid )
555          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
556         ENDIF         ENDIF
557        ENDIF        ENDIF
558    # ifdef ALLOW_AUTODIFF_TAMC
559    cph-test
560    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
561    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
562    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
563    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
564    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
565    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
566    # endif
567  C-    update also CG2D matrix (and preconditioner)  C-    update also CG2D matrix (and preconditioner)
568        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
569          CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)
570          CALL UPDATE_CG2D( myTime, myIter, myThid )          CALL UPDATE_CG2D( myTime, myIter, myThid )
571          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)
572        ENDIF        ENDIF
573  #endif  #endif /* NONLIN_FRSURF */
574    
575  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
576  #ifdef ALLOW_SHAP_FILT  #ifdef ALLOW_SHAP_FILT
577        IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN        IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
578          CALL TIMER_START('SHAP_FILT           [FORWARD_STEP]',myThid)          CALL TIMER_START('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
579          IF (implicDiv2Dflow.LT.1.) THEN          IF (implicDiv2Dflow.LT.1.) THEN
580  C--   Explicit+Implicit part of the Barotropic Flow Divergence  C--   Explicit+Implicit part of the Barotropic Flow Divergence
581  C      => Filtering of uVel,vVel is necessary  C      => Filtering of uVel,vVel is necessary
# Line 424  C      => Filtering of uVel,vVel is nece Line 583  C      => Filtering of uVel,vVel is nece
583       &                             myTime, myIter, myThid )       &                             myTime, myIter, myThid )
584          ENDIF          ENDIF
585          CALL SHAP_FILT_APPLY_UV( gU,gV,myTime,myIter,myThid)          CALL SHAP_FILT_APPLY_UV( gU,gV,myTime,myIter,myThid)
586          CALL TIMER_STOP ('SHAP_FILT           [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
587        ENDIF        ENDIF
588  #endif  #endif
589  #ifdef ALLOW_ZONAL_FILT  #ifdef ALLOW_ZONAL_FILT
590        IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN        IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
591          CALL TIMER_START('ZONAL_FILT_APPLY    [FORWARD_STEP]',myThid)          CALL TIMER_START('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
592          IF (implicDiv2Dflow.LT.1.) THEN          IF (implicDiv2Dflow.LT.1.) THEN
593  C--   Explicit+Implicit part of the Barotropic Flow Divergence  C--   Explicit+Implicit part of the Barotropic Flow Divergence
594  C      => Filtering of uVel,vVel is necessary  C      => Filtering of uVel,vVel is necessary
595            CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )            CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )
596          ENDIF          ENDIF
597          CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )          CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
598          CALL TIMER_STOP ('ZONAL_FILT_APPLY    [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
599        ENDIF        ENDIF
600  #endif    #endif  
601    
# Line 445  C     Two-dimensional only for conventio Line 604  C     Two-dimensional only for conventio
604  C     three-dimensional for non-hydrostatic and/or IGW scheme.  C     three-dimensional for non-hydrostatic and/or IGW scheme.
605  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
606        IF ( momStepping ) THEN        IF ( momStepping ) THEN
607    #ifdef ALLOW_AUTODIFF_TAMC
608    # ifdef NONLIN_FRSURF
609    CADJ STORE uvel, vvel
610    CADJ &     = comlev1, key = ikey_dynamics
611    CADJ STORE empmr,hfacs,hfacw
612    CADJ &     = comlev1, key = ikey_dynamics
613    # endif
614    #endif
615          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
616          CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)          CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)
617          CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
# Line 454  C     three-dimensional for non-hydrosta Line 621  C     three-dimensional for non-hydrosta
621  C--   Correct divergence in flow field and cycle time-stepping momentum  C--   Correct divergence in flow field and cycle time-stepping momentum
622  c     IF ( momStepping ) THEN  c     IF ( momStepping ) THEN
623  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
624          CALL TIMER_START('UV_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
625          CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)          CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)
626          CALL TIMER_STOP ('UV_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
627  #endif  #endif
628  c     ENDIF  c     ENDIF
629    
630  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
631        IF (exactConserv) THEN        IF (exactConserv) THEN
632    #ifdef ALLOW_AUTODIFF_TAMC
633    cph-test
634    cphCADJ STORE etaH          = comlev1, key = ikey_dynamics
635    #endif
636  C--   Update etaH(n+1) :  C--   Update etaH(n+1) :
637          CALL TIMER_START('UPDATE_ETAH        [FORWARD_STEP]',mythid)          CALL TIMER_START('UPDATE_ETAH         [FORWARD_STEP]',mythid)
638          CALL UPDATE_ETAH( myTime, myIter, myThid )          CALL UPDATE_ETAH( myTime, myIter, myThid )
639          CALL TIMER_STOP ('UPDATE_ETAH        [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('UPDATE_ETAH         [FORWARD_STEP]',mythid)
640        ENDIF        ENDIF
641  #endif /* EXACT_CONSERV */  #endif /* EXACT_CONSERV */
642    
643  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
644        IF ( select_rStar.NE.0 ) THEN        IF ( select_rStar.NE.0 ) THEN
645    # ifndef DISABLE_RSTAR_CODE
646  C--   r* : compute the future level thickness according to etaH(n+1)  C--   r* : compute the future level thickness according to etaH(n+1)
647          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)
648          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
649          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)
650    # endif /* DISABLE_RSTAR_CODE */
651        ELSEIF ( nonlinFreeSurf.GT.0) THEN        ELSEIF ( nonlinFreeSurf.GT.0) THEN
652  C--   compute the future surface level thickness according to etaH(n+1)  C--   compute the future surface level thickness according to etaH(n+1)
653    # ifdef ALLOW_AUTODIFF_TAMC
654    CADJ STORE etaH          = comlev1, key = ikey_dynamics
655    # endif
656          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)
657          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
658          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)
659        ENDIF        ENDIF
660    # ifdef ALLOW_AUTODIFF_TAMC
661    cph-test
662    CADJ STORE hFac_surfC    = comlev1, key = ikey_dynamics
663    # endif
664  #endif /* NONLIN_FRSURF */  #endif /* NONLIN_FRSURF */
665    
666  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
# Line 494  C--   do exchanges of U,V (needed for mu Line 674  C--   do exchanges of U,V (needed for mu
674          CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )          CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
675          CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
676    
677    #ifdef ALLOW_DIAGNOSTICS
678    C--   State-variables diagnostics
679           IF ( usediagnostics ) THEN
680            CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
681            CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
682            CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
683           ENDIF
684    #endif
685    
686  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
687          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
688       &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)
# Line 512  cph find_rho which may use pressure() Line 701  cph find_rho which may use pressure()
701  CADJ STORE totphihyd  = comlev1, key = ikey_dynamics  CADJ STORE totphihyd  = comlev1, key = ikey_dynamics
702  #endif  #endif
703  C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)  C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)
704          CALL TIMER_START('TS_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
705          CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)          CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
706          CALL TIMER_STOP ('TS_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
707    
708    #ifdef ALLOW_GCHEM
709    C     Add separate timestepping of chemical/biological/forcing
710    C     of ptracers here in GCHEM_FORCING_SEP
711            IF ( useGCHEM ) THEN
712    #ifdef ALLOW_DEBUG
713             IF ( debugLevel .GE. debLevB )
714         &        CALL DEBUG_CALL('GCHEM_FORCING_SEP',myThid)
715    #endif /* ALLOW_DEBUG */
716             CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
717             CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
718             CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
719            ENDIF  
720    #endif /* ALLOW_GCHEM */
721    
722  C--   Do "blocking" sends and receives for tendency "overlap" terms  C--   Do "blocking" sends and receives for tendency "overlap" terms
723  c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)  c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
# Line 526  C--   Do "blocking" sends and receives f Line 729  C--   Do "blocking" sends and receives f
729        CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )        CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
730        CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
731    
732  cswdptr -- add for seperate timestepping of chemical/biological/forcing  #ifdef ALLOW_DIAGNOSTICS
733  cswdptr    of ptracers ---        IF ( usediagnostics ) THEN
734  #ifdef ALLOW_GCHEM         CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
735  ceh3 This is broken -- this ifdef should not be visible!         CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid )
736  #ifdef PTRACERS_SEPARATE_FORCING         CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
737  ceh3 needs an IF ( use GCHEM ) THEN        ENDIF
738          call GCHEM_FORCING_SEP( myTime,myIter,myThid )  #endif
 #endif /* PTRACERS_SEPARATE_FORCING */  
 #endif /* ALLOW_GCHEM */  
 cswdptr -- end add ---  
739    
740  C AMM  C AMM
741  #ifdef ALLOW_GRIDALT  #ifdef ALLOW_GRIDALT
# Line 549  C AMM Line 749  C AMM
749  #ifdef ALLOW_FIZHI  #ifdef ALLOW_FIZHI
750          if( useFIZHI) then          if( useFIZHI) then
751           CALL TIMER_START('FIZHI               [FORWARD_STEP]',mythid)           CALL TIMER_START('FIZHI               [FORWARD_STEP]',mythid)
752           CALL STEP_FIZHI_CORR ( myTime, myIter, myThid )           CALL STEP_FIZHI_CORR ( myTime, myIter, myThid, dTtracerLev(1) )
753           CALL TIMER_STOP('FIZHI               [FORWARD_STEP]',mythid)           CALL TIMER_STOP('FIZHI               [FORWARD_STEP]',mythid)
754          endif          endif
755  #endif  #endif
# Line 564  C--   Calculate float trajectories Line 764  C--   Calculate float trajectories
764        ENDIF        ENDIF
765  #endif  #endif
766    
767  C--   State-variables statistics (time-aver, diagnostics ...)  #ifdef ALLOW_TIMEAVE
768        CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)  C--   State-variables time-averaging
769        CALL DO_STATEVARS_DIAGS( myTime, myIter, myThid )        CALL TIMER_START('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
770        CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)        CALL DO_STATEVARS_TAVE( myTime, myIter, myThid )
771          CALL TIMER_STOP ('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
772    #endif
773    
774  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
775  #ifdef ALLOW_MONITOR  #ifdef ALLOW_MONITOR
# Line 597  C--   Do IO if needed. Line 799  C--   Do IO if needed.
799        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
800  #endif  #endif
801    
802    #ifdef HAVE_SIGREG
803          IF ( useSIGREG ) THEN
804            IF ( i_got_signal .GT. 0 ) THEN
805              CALL PACKAGES_WRITE_PICKUP(
806         I         .TRUE., myTime, myIter, myThid )
807    #ifndef ALLOW_OFFLINE
808              CALL WRITE_CHECKPOINT(
809         I         .TRUE., myTime, myIter, myThid )  
810    #endif
811              STOP 'Checkpoint completed -- killed by signal handler'
812            ENDIF
813          ENDIF
814    #endif
815    
816  C--   Save state for restarts  C--   Save state for restarts
817        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
818        CALL PACKAGES_WRITE_PICKUP(        CALL PACKAGES_WRITE_PICKUP(

Legend:
Removed from v.1.105  
changed lines
  Added in v.1.134

  ViewVC Help
Powered by ViewVC 1.1.22