/[MITgcm]/MITgcm/pkg/ecco/the_main_loop.F
ViewVC logotype

Diff of /MITgcm/pkg/ecco/the_main_loop.F

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

revision 1.21 by heimbach, Wed Aug 10 03:34:48 2005 UTC revision 1.32 by heimbach, Thu Apr 20 03:01:28 2006 UTC
# Line 83  c They provide the fields to be stored. Line 83  c They provide the fields to be stored.
83  # include "DYNVARS.h"  # include "DYNVARS.h"
84  # include "FFIELDS.h"  # include "FFIELDS.h"
85  # include "EOS.h"  # include "EOS.h"
 # include "GAD.h"  
86    
87    # ifdef ALLOW_GENERIC_ADVDIFF
88    #  include "GAD.h"
89    # endif
90  # ifdef ALLOW_CD_CODE  # ifdef ALLOW_CD_CODE
91  #  include "CD_CODE_VARS.h"  #  include "CD_CODE_VARS.h"
92  # endif  # endif
# Line 95  c They provide the fields to be stored. Line 97  c They provide the fields to be stored.
97  # ifdef ALLOW_NONHYDROSTATIC  # ifdef ALLOW_NONHYDROSTATIC
98  #  include "CG3D.h"  #  include "CG3D.h"
99  # endif  # endif
100  # ifdef EXACT_CONSERV  # if (defined (EXACT_CONSERV) || defined (NONLIN_FRSURF))
101  #  include "SURFACE.h"  #  include "SURFACE.h"
102  # endif  # endif
103  # ifdef ALLOW_OBCS  # ifdef ALLOW_OBCS
# Line 162  c     == local variables == Line 164  c     == local variables ==
164        integer max_lev4        integer max_lev4
165  #endif  #endif
166    
167    #if defined(TIME_PER_TIMESTEP) || defined(USE_PAPI_FLOPS)
168          CHARACTER*(MAX_LEN_MBUF) msgBuf
169    #ifdef TIME_PER_TIMESTEP
170    CCE107 common block for per timestep timing
171    C     !TIMING VARIABLES
172    C     == Timing variables ==
173          REAL*8 utnew, utold, stnew, stold, wtnew, wtold
174          DATA utnew, utold, stnew, stold, wtnew, wtold /6*0.0D0/
175    #endif
176    #ifdef USE_PAPI_FLOPS
177    CCE107 common block for PAPI summary performance
178    #include <fpapi.h>
179          INTEGER*8 flpops
180          DATA flpops /0/
181          INTEGER check
182          REAL real_time, proc_time, mflops
183          DATA real_time, proc_time, mflops /3*0.0D0/
184    #endif
185    #endif
186    
187  c--   == end of interface ==  c--   == end of interface ==
188    
189  #ifndef DISABLE_DEBUGMODE  #ifndef DISABLE_DEBUGMODE
# Line 202  cph because we only have active file han Line 224  cph because we only have active file han
224  c--   Get the current date.  c--   Get the current date.
225        call CAL_TIMESTAMP( myiter, mytime, mydate, mythid )        call CAL_TIMESTAMP( myiter, mytime, mydate, mythid )
226    
227    #ifdef ALLOW_AUTODIFF_TAMC
228    # ifdef NONLIN_FRSURF
229    CADJ STORE hFacC = tapelev_init, key = 1
230    # endif
231    #endif
232    
233  C--   Set initial conditions (variable arrays)  C--   Set initial conditions (variable arrays)
234  #ifndef DISABLE_DEBUGMODE  #ifndef DISABLE_DEBUGMODE
235        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
# Line 239  C--   Do IO if needed (Dump for start st Line 267  C--   Do IO if needed (Dump for start st
267        call timer_stop ('ECCO SPIN-UP', mythid)        call timer_stop ('ECCO SPIN-UP', mythid)
268        _BARRIER        _BARRIER
269    
270    #ifdef TIME_PER_TIMESTEP
271    CCE107 Initial call for timers
272          _BEGIN_MASTER( myThid )
273          CALL TIMER_GET_TIME( utold, stold, wtold )
274          _END_MASTER( myThid )
275    #endif
276    #ifdef USE_PAPI_FLOPS
277    CCE107 Initial call for PAPI
278          _BEGIN_MASTER( myThid )
279          call PAPIF_flops(real_time, proc_time, flpops, mflops, check)
280          _END_MASTER( myThid )
281    #endif
282    
283  c--   Do the model integration.  c--   Do the model integration.
284        call timer_start('ECCO MAIN LOOP',mythid)        call timer_start('ECCO MAIN LOOP',mythid)
285    
# Line 308  CADJ INIT comlev1_bibj_ptracers = COMMON Line 349  CADJ INIT comlev1_bibj_ptracers = COMMON
349  CADJ &    nchklev_1*nsx*nsy*nthreads_chkpt*PTRACERS_num  CADJ &    nchklev_1*nsx*nsy*nthreads_chkpt*PTRACERS_num
350  # endif /* ALLOW_PTRACERS */  # endif /* ALLOW_PTRACERS */
351  c--  c--
352  # ifndef DISABLE_MULTIDIM_ADVECTION  cph Now also needed by seaice
353    cph# ifndef DISABLE_MULTIDIM_ADVECTION
354  CADJ INIT comlev1_bibj_k_gad  CADJ INIT comlev1_bibj_k_gad
355  CADJ &    = COMMON,nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass  CADJ &    = COMMON,nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass
356  CADJ INIT comlev1_bibj_k_gad_pass  CADJ INIT comlev1_bibj_k_gad_pass
357  CADJ &    = COMMON,nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass*maxcube  CADJ &    = COMMON,nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass*maxcube
358  # endif /* DISABLE_MULTIDIM_ADVECTION */  cph# endif /* DISABLE_MULTIDIM_ADVECTION */
359  c--  c--
360  # if (defined (ALLOW_EXF) && defined (ALLOW_BULKFORMULAE))  # if (defined (ALLOW_EXF) && defined (ALLOW_BULKFORMULAE))
361  CADJ INIT comlev1_exf_1  CADJ INIT comlev1_exf_1
# Line 396  c--     Set the model iteration counter Line 438  c--     Set the model iteration counter
438  #endif  #endif
439    
440    
441    C--   Switch on/off diagnostics for snap-shot output:
442    #ifdef ALLOW_DIAGNOSTICS
443          IF ( useDiagnostics ) THEN
444            CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )
445          ENDIF
446    #endif
447    
448    C--   State-variables diagnostics
449          IF ( usediagnostics ) THEN
450            CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
451            CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid )
452            CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
453          ENDIF
454    
455  #ifdef ALLOW_COST  #ifdef ALLOW_COST
456    
457  c--     Accumulate time averages of temperature, salinity, and SSH.  c--     Accumulate time averages of temperature, salinity, and SSH.
# Line 423  c************************************** Line 479  c**************************************
479        CALL TIMER_START('EXF_GETFORCING     [FORWARD_STEP]',mythid)        CALL TIMER_START('EXF_GETFORCING     [FORWARD_STEP]',mythid)
480        CALL EXF_GETFORCING( mytime, myiter, mythid )        CALL EXF_GETFORCING( mytime, myiter, mythid )
481        CALL TIMER_STOP ('EXF_GETFORCING     [FORWARD_STEP]',mythid)        CALL TIMER_STOP ('EXF_GETFORCING     [FORWARD_STEP]',mythid)
482    # ifdef NONLIN_FRSURF
483    CADJ STORE SST    = comlev1, key = ikey_dynamics
484    CADJ STORE SSS    = comlev1, key = ikey_dynamics
485    #  ifdef SHORTWAVE_HEATING
486    CADJ STORE Qsw    = comlev1, key = ikey_dynamics
487    #  endif
488    # endif
489    
490  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
491  # if (defined (ALLOW_AUTODIFF_MONITOR))  # if (defined (ALLOW_AUTODIFF_MONITOR))
# Line 444  CADJ STORE area  = comlev1, key = ikey_d Line 507  CADJ STORE area  = comlev1, key = ikey_d
507           CALL SEAICE_MODEL( myTime, myIter, myThid )           CALL SEAICE_MODEL( myTime, myIter, myThid )
508           CALL TIMER_STOP ('SEAICE_MODEL       [FORWARD_STEP]',myThid)           CALL TIMER_STOP ('SEAICE_MODEL       [FORWARD_STEP]',myThid)
509  #ifdef ALLOW_COST_ICE  #ifdef ALLOW_COST_ICE
510           CALL COST_ICE    ( myTime, myIter, myThid )           CALL COST_ICE_TEST ( myTime, myIter, myThid )
511  #endif  #endif
512        ENDIF        ENDIF
513  #endif /* ALLOW_SEAICE */  #endif /* ALLOW_SEAICE */
# Line 468  CADJ STORE ptracer  = comlev1, key = ike Line 531  CADJ STORE ptracer  = comlev1, key = ike
531          ENDIF          ENDIF
532  #endif  #endif
533    
534    #ifdef ALLOW_PTRACERS
535    # ifdef ALLOW_GCHEM
536            IF ( useGCHEM ) THEN
537    #ifdef ALLOW_DEBUG
538             IF ( debugLevel .GE. debLevB )
539         &        CALL DEBUG_CALL('GCHEM_FIELDS_LOAD',myThid)
540    #endif /* ALLOW_DEBUG */
541             CALL GCHEM_FIELDS_LOAD( mytime, myiter, mythid )
542            ENDIF
543    # endif
544    #endif
545    
546  C--     Step forward fields and calculate time tendency terms.  C--     Step forward fields and calculate time tendency terms.
547    
548  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 478  C--     Step forward fields and calculat Line 553  C--     Step forward fields and calculat
553         CALL DO_ATMOSPHERIC_PHYS( myTime, myIter, myThid )         CALL DO_ATMOSPHERIC_PHYS( myTime, myIter, myThid )
554         CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',mythid)
555    
556    #ifdef ALLOW_AUTODIFF_TAMC
557    # ifdef EXACT_CONSERV
558    cphCADJ STORE empmr              = comlev1, key = ikey_dynamics
559    cphCADJ STORE pmepr              = comlev1, key = ikey_dynamics
560    # endif
561    # ifdef NONLIN_FRSURF
562    cph-test
563    CADJ STORE hFacC              = comlev1, key = ikey_dynamics
564    # endif
565    #endif /* ALLOW_AUTODIFF_TAMC */
566    
567  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
568  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
569         IF ( debugLevel .GE. debLevB )         IF ( debugLevel .GE. debLevB )
# Line 486  C--     Step forward fields and calculat Line 572  C--     Step forward fields and calculat
572         CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)         CALL TIMER_START('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
573         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
574         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',mythid)
575    #ifdef ALLOW_AUTODIFF_TAMC
576    CADJ STORE EmPmR    = comlev1, key = ikey_dynamics
577    # ifdef EXACT_CONSERV
578    CADJ STORE pmepr    = comlev1, key = ikey_dynamics
579    # endif
580    #endif
581  #endif  #endif
582    
583  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
584    # ifdef NONLIN_FRSURF
585    cph-test
586    CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics
587    CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics
588    CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics
589    CADJ STORE hFacC, hFacS, hFacW
590    CADJ &     = comlev1, key = ikey_dynamics
591    CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
592    CADJ &     = comlev1, key = ikey_dynamics
593    c
594    CADJ STORE surfaceforcingu = comlev1, key = ikey_dynamics
595    CADJ STORE surfaceforcingv = comlev1, key = ikey_dynamics
596    # endif
597    #endif /* ALLOW_AUTODIFF_TAMC */
598    
599    #ifdef ALLOW_GCHEM
600    C     GCHEM package is an interface for any bio-geochemical or
601    C     ecosystem model you would like to include.
602    C     If GCHEM_SEPARATE_FORCING is not defined, you are
603    C     responsible for computing tendency terms for passive
604    C     tracers and storing them on a 3DxNumPtracers-array called
605    C     gchemTendency in GCHEM_CALC_TENDENCY. This tendency is then added
606    C     to gPtr in ptracers_forcing later-on.
607    C     If GCHEM_SEPARATE_FORCING is defined, you are reponsible for
608    C     UPDATING ptracers directly in GCHEM_FORCING_SEP. This amounts
609    C     to a completely separate time step that you have to implement
610    C     yourself (Eulerian seems to be fine in most cases).
611    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
612    C     CAVEAT: Up to now, when GCHEM is turned on the field ptracerForcingSurf,
613    C     which is needed for KPP is not set properly. ptracerForcingSurf must
614    C     be treated differently depending on whether GCHEM_SEPARATE_FORCING
615    C     is define or not. TBD.
616    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
617           IF ( useGCHEM ) THEN
618    #ifdef ALLOW_DEBUG
619            IF ( debugLevel .GE. debLevB )
620         &       CALL DEBUG_CALL('GCHEM_CALC_TENDENCY',myThid)
621    #endif
622            CALL TIMER_START('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
623            CALL GCHEM_CALC_TENDENCY( myTime, myIter, myThid )
624            CALL TIMER_STOP ('GCHEM_CALC_TENDENCY [FORWARD_STEP]',myThid)
625           ENDIF
626    #endif /* ALLOW_GCHEM */
627    
628    #ifdef ALLOW_AUTODIFF_TAMC
629  cph needed to be moved here from do_oceanic_physics  cph needed to be moved here from do_oceanic_physics
630  cph to be visible down the road  cph to be visible down the road
631  c  c
# Line 520  CADJ STORE KPPdiffKzT         = comlev1, Line 657  CADJ STORE KPPdiffKzT         = comlev1,
657  # endif  # endif
658  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
659    
660    #ifdef ALLOW_AUTODIFF_TAMC
661    # ifdef NONLIN_FRSURF
662    CADJ STORE etaH               = comlev1, key = ikey_dynamics
663    #  ifdef ALLOW_CD_CODE
664    CADJ STORE etanm1             = comlev1, key = ikey_dynamics
665    #  endif
666    # endif
667    #endif /* ALLOW_AUTODIFF_TAMC */
668    
669        IF ( .NOT.staggerTimeStep ) THEN        IF ( .NOT.staggerTimeStep ) THEN
670  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 532  CADJ STORE KPPdiffKzT         = comlev1, Line 677  CADJ STORE KPPdiffKzT         = comlev1,
677  C--    if not staggerTimeStep: end  C--    if not staggerTimeStep: end
678        ENDIF        ENDIF
679    
680    #ifdef ALLOW_AUTODIFF_TAMC
681    # ifdef NONLIN_FRSURF
682    CADJ STORE hFacC          = comlev1, key = ikey_dynamics
683    CADJ STORE hFacS          = comlev1, key = ikey_dynamics
684    CADJ STORE hFacW          = comlev1, key = ikey_dynamics
685    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
686    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
687    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
688    CADJ STORE etaN           = comlev1, key = ikey_dynamics
689    # endif
690    #endif
691    
692  C--   Step forward fields and calculate time tendency terms.  C--   Step forward fields and calculate time tendency terms.
693  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
694  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
# Line 549  C--   Step forward fields and calculate Line 706  C--   Step forward fields and calculate
706  #endif  #endif
707  #endif  #endif
708    
709  #ifdef ALLOW_NONHYDROSTATIC  #ifdef ALLOW_AUTODIFF_TAMC
710  C--   Step forward W field in N-H algorithm  # ifdef NONLIN_FRSURF
711        IF ( momStepping .AND. nonHydrostatic ) THEN  cph-test
712  #ifdef ALLOW_DEBUG  CADJ STORE gU, gV  = comlev1, key = ikey_dynamics
713            IF ( debugLevel .GE. debLevB )  # endif
      &     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  
714  #endif  #endif
715    
716  C--   Update time-counter  C--   Update time-counter
717        myIter = nIter0 + iLoop        myIter = nIter0 + iLoop
718        myTime = startTime + deltaTClock * float(iLoop)        myTime = startTime + deltaTClock * float(iLoop)
719    
720    #ifdef ALLOW_MNC
721    C     Update the default next iter for MNC
722          IF ( useMNC ) THEN
723             CALL MNC_CW_CITER_SETG( 1, 1, -1, myIter , myThid )
724    
725    C        TODO: Logic should be added here so that users can specify, on
726    C        a per-citer-group basis, when it is time to update the
727    C        "current" (and not just the "next") iteration
728    
729    C        TODO: the following is just a temporary band-aid (mostly, for
730    C        Baylor) until someone writes a routine that better handles time
731    C        boundaries such as weeks, months, years, etc.
732             IF ( mnc_filefreq .GT. 0 ) THEN
733               IF (DIFFERENT_MULTIPLE(mnc_filefreq,myTime,deltaTClock))
734         &          THEN
735                 CALL MNC_CW_CITER_SETG( 1, 1, myIter, -1 , myThid )
736               ENDIF
737             ENDIF
738           ENDIF
739    #endif
740    
741  C--   Update geometric factors:  C--   Update geometric factors:
742  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
743  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) :
744        IF ( nonlinFreeSurf.GT.0) THEN        IF ( nonlinFreeSurf.GT.0) THEN
745         IF ( select_rStar.GT.0 ) THEN         IF ( select_rStar.GT.0 ) THEN
746    # ifndef DISABLE_RSTAR_CODE
747    # ifdef ALLOW_AUTODIFF_TAMC
748    cph-test
749    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
750    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
751    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
752    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
753    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
754    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
755    # endif
756          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
757          CALL UPDATE_R_STAR( myTime, myIter, myThid )          CALL UPDATE_R_STAR( myTime, myIter, myThid )
758          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
759    # ifdef ALLOW_AUTODIFF_TAMC
760    cph-test
761    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
762    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
763    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
764    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
765    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
766    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
767    # endif
768    # endif /* DISABLE_RSTAR_CODE */
769         ELSE         ELSE
770    #ifdef ALLOW_AUTODIFF_TAMC
771    CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
772    CADJ &     = comlev1, key = ikey_dynamics
773    #endif
774          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
775          CALL UPDATE_SURF_DR( myTime, myIter, myThid )          CALL UPDATE_SURF_DR( myTime, myIter, myThid )
776          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
777         ENDIF         ENDIF
778        ENDIF        ENDIF
779    # ifdef ALLOW_AUTODIFF_TAMC
780    cph-test
781    CADJ STORE hFacC    = comlev1, key = ikey_dynamics
782    CADJ STORE hFacS    = comlev1, key = ikey_dynamics
783    CADJ STORE hFacW    = comlev1, key = ikey_dynamics
784    CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics
785    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics
786    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics
787    # endif
788  C-    update also CG2D matrix (and preconditioner)  C-    update also CG2D matrix (and preconditioner)
789        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
790          CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_CG2D        [FORWARD_STEP]',myThid)
791          CALL UPDATE_CG2D( myTime, myIter, myThid )          CALL UPDATE_CG2D( myTime, myIter, myThid )
792          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)
793        ENDIF        ENDIF
794  #endif  #endif /* NONLIN_FRSURF */
795    
796  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
797  #ifdef ALLOW_SHAP_FILT  #ifdef ALLOW_SHAP_FILT
# Line 620  C     Two-dimensional only for conventio Line 825  C     Two-dimensional only for conventio
825  C     three-dimensional for non-hydrostatic and/or IGW scheme.  C     three-dimensional for non-hydrostatic and/or IGW scheme.
826  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
827        IF ( momStepping ) THEN        IF ( momStepping ) THEN
828    #ifdef ALLOW_AUTODIFF_TAMC
829    # ifdef NONLIN_FRSURF
830    CADJ STORE uvel, vvel
831    CADJ &     = comlev1, key = ikey_dynamics
832    CADJ STORE empmr,hfacs,hfacw
833    CADJ &     = comlev1, key = ikey_dynamics
834    # endif
835    #endif
836          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
837          CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)          CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)
838          CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
# Line 637  c     ENDIF Line 850  c     ENDIF
850    
851  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
852        IF (exactConserv) THEN        IF (exactConserv) THEN
853    #ifdef ALLOW_AUTODIFF_TAMC
854    cph-test
855    cphCADJ STORE etaH          = comlev1, key = ikey_dynamics
856    #endif
857  C--   Update etaH(n+1) :  C--   Update etaH(n+1) :
858          CALL TIMER_START('UPDATE_ETAH        [FORWARD_STEP]',mythid)          CALL TIMER_START('UPDATE_ETAH        [FORWARD_STEP]',mythid)
859          CALL UPDATE_ETAH( myTime, myIter, myThid )          CALL UPDATE_ETAH( myTime, myIter, myThid )
# Line 646  C--   Update etaH(n+1) : Line 863  C--   Update etaH(n+1) :
863    
864  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
865        IF ( select_rStar.NE.0 ) THEN        IF ( select_rStar.NE.0 ) THEN
866    # ifndef DISABLE_RSTAR_CODE
867  C--   r* : compute the future level thickness according to etaH(n+1)  C--   r* : compute the future level thickness according to etaH(n+1)
868          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)
869          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
870          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)
871    # endif /* DISABLE_RSTAR_CODE */
872        ELSEIF ( nonlinFreeSurf.GT.0) THEN        ELSEIF ( nonlinFreeSurf.GT.0) THEN
873  C--   compute the future surface level thickness according to etaH(n+1)  C--   compute the future surface level thickness according to etaH(n+1)
874    # ifdef ALLOW_AUTODIFF_TAMC
875    CADJ STORE etaH          = comlev1, key = ikey_dynamics
876    # endif
877          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)
878          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
879          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)
880        ENDIF        ENDIF
881    # ifdef ALLOW_AUTODIFF_TAMC
882    cph-test
883    CADJ STORE hFac_surfC    = comlev1, key = ikey_dynamics
884    # endif
885  #endif /* NONLIN_FRSURF */  #endif /* NONLIN_FRSURF */
886    
887  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
# Line 669  C--   do exchanges of U,V (needed for mu Line 895  C--   do exchanges of U,V (needed for mu
895          CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )          CALL DO_STAGGER_FIELDS_EXCHANGES( myTime, myIter, myThid )
896          CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
897    
898    C--   State-variables diagnostics
899           IF ( usediagnostics ) THEN
900            CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
901            CALL DO_STATEVARS_DIAGS( myTime, 1, myIter, myThid )
902            CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)
903           ENDIF
904    
905  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
906          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
907       &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)
# Line 691  C--   Cycle time-stepping Tracers arrays Line 924  C--   Cycle time-stepping Tracers arrays
924          CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)          CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
925          CALL TIMER_STOP ('TS_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('TS_CORRECTION_STEP  [FORWARD_STEP]',myThid)
926    
927    #ifdef ALLOW_GCHEM
928    C     Add separate timestepping of chemical/biological/forcing
929    C     of ptracers here in GCHEM_FORCING_SEP
930            IF ( useGCHEM ) THEN
931    #ifdef ALLOW_DEBUG
932             IF ( debugLevel .GE. debLevB )
933         &        CALL DEBUG_CALL('GCHEM_FORCING_SEP',myThid)
934    #endif /* ALLOW_DEBUG */
935             CALL TIMER_START('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
936             CALL GCHEM_FORCING_SEP( myTime,myIter,myThid )
937             CALL TIMER_STOP ('GCHEM_FORCING_SEP  [FORWARD_STEP]',myThid)
938            ENDIF  
939    #endif /* ALLOW_GCHEM */
940    
941  C--   Do "blocking" sends and receives for tendency "overlap" terms  C--   Do "blocking" sends and receives for tendency "overlap" terms
942  c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)  c     CALL TIMER_START('BLOCKING_EXCHANGES  [FORWARD_STEP]',myThid)
943  c     CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )  c     CALL DO_GTERM_BLOCKING_EXCHANGES( myThid )
# Line 714  C--   Calculate float trajectories Line 961  C--   Calculate float trajectories
961          CALL AUTODIFF_INADMODE_SET( myThid )          CALL AUTODIFF_INADMODE_SET( myThid )
962  #endif  #endif
963    
964  C--   State-variables statistics (time-aver, diagnostics ...)  C--   State-variables time-averaging
965        CALL TIMER_START('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)        CALL TIMER_START('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
966        CALL DO_STATEVARS_DIAGS( myTime, myIter, myThid )        CALL DO_STATEVARS_TAVE( myTime, myIter, myThid )
967        CALL TIMER_STOP ('DO_STATEVARS_DIAGS  [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_STATEVARS_TAVE   [FORWARD_STEP]',myThid)
968    
969  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
970  #ifdef ALLOW_MONITOR  #ifdef ALLOW_MONITOR
# Line 749  C--   Save state for restarts Line 996  C--   Save state for restarts
996  #endif  #endif
997        CALL TIMER_STOP ('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
998    
999    #ifdef TIME_PER_TIMESTEP
1000    CCE107 Time per timestep information
1001          _BEGIN_MASTER( myThid )
1002          CALL TIMER_GET_TIME( utnew, stnew, wtnew )
1003          WRITE(msgBuf,'(A34,3F10.6,I8)')
1004         $        'User, system and wallclock time:', utnew - utold,
1005         $        stnew - stold, wtnew - wtold, iloop
1006          CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
1007          utold = utnew
1008          stold = stnew
1009          wtold = wtnew
1010          _END_MASTER( myThid )
1011    #endif
1012    #ifdef USE_PAPI_FLOPS
1013    CCE107 PAPI summary performance
1014          _BEGIN_MASTER( myThid )
1015          call PAPIF_flops(real_time, proc_time, flpops, mflops, check)
1016          WRITE(msgBuf,'(F10.6,A34,I8)')
1017         $        mflops, 'Mflop/s during timestep ', iloop
1018          CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
1019          _END_MASTER( myThid )
1020    #endif
1021    
1022  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
1023  #ifdef ALLOW_TAMC_CHECKPOINTING  #ifdef ALLOW_TAMC_CHECKPOINTING
1024               endif               endif
# Line 826  c--   Compute cost function contribution Line 1096  c--   Compute cost function contribution
1096        call cost_hyd( myiter, mytime, mythid )        call cost_hyd( myiter, mytime, mythid )
1097        call timer_stop ('cost_hyd           [ECCO SPIN-DOWN]', mythid)        call timer_stop ('cost_hyd           [ECCO SPIN-DOWN]', mythid)
1098    
1099    #ifdef ALLOW_SEAICE
1100    #ifndef DISABLE_DEBUGMODE
1101          IF ( debugLevel .GE. debLevB )
1102         &    CALL DEBUG_CALL('seaice_cost_driver',myThid)
1103    #endif
1104          call timer_start('seaice_cost_driver [ECCO SPIN-DOWN]', mythid)
1105          call seaice_cost_driver( myiter, mytime, mythid )
1106          call timer_stop ('seaice_cost_driver [ECCO SPIN-DOWN]', mythid)
1107    #endif
1108    
1109  #ifdef ALLOW_OBCS_COST_CONTRIBUTION  #ifdef ALLOW_OBCS_COST_CONTRIBUTION
1110  #ifndef DISABLE_DEBUGMODE  #ifndef DISABLE_DEBUGMODE
1111        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
# Line 879  c--   Compute cost function contribution Line 1159  c--   Compute cost function contribution
1159        call timer_stop ('cost_scat            [ECCO SPIN-DOWN]', mythid)        call timer_stop ('cost_scat            [ECCO SPIN-DOWN]', mythid)
1160  #endif  #endif
1161    
 c--   Compute cost function contribution of wind stress observations.    
 #ifdef ALLOW_MEAN_HFLUX_COST_CONTRIBUTION  
       call timer_start('cost_mean_heatflux   [ECCO SPIN-DOWN]', mythid)  
       call cost_mean_heatflux( myiter, mytime, mythid )  
       call timer_stop ('cost_mean_heatflux   [ECCO SPIN-DOWN]', mythid)  
 #endif  
   
 c--   Compute cost function contribution of wind stress observations.  
 #ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION  
       call timer_start('cost_mean_saltflux   [ECCO SPIN-DOWN]', mythid)  
       call cost_mean_saltflux( myiter, mytime, mythid )  
       call timer_stop ('cost_mean_saltflux   [ECCO SPIN-DOWN]', mythid)          
 #endif  
   
1162  c--   Compute cost function contribution of drift between the first  c--   Compute cost function contribution of drift between the first
1163  c     and the last year.  c     and the last year.
1164  #ifdef ALLOW_DRIFT_COST_CONTRIBUTION  #ifdef ALLOW_DRIFT_COST_CONTRIBUTION
# Line 937  c--   Sum all cost function contribution Line 1203  c--   Sum all cost function contribution
1203       &    CALL DEBUG_CALL('cost_final',myThid)       &    CALL DEBUG_CALL('cost_final',myThid)
1204  #endif  #endif
1205        call timer_start('COST_FINAL         [ECCO SPIN-DOWN]', mythid)        call timer_start('COST_FINAL         [ECCO SPIN-DOWN]', mythid)
1206        call ecco_cost_final( mythid )        call cost_final( mythid )
1207        call timer_stop ('COST_FINAL         [ECCO SPIN-DOWN]', mythid)        call timer_stop ('COST_FINAL         [ECCO SPIN-DOWN]', mythid)
1208    
1209  #endif /* ALLOW_COST */  #endif /* ALLOW_COST */

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.32

  ViewVC Help
Powered by ViewVC 1.1.22