/[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.114 by jmc, Wed Apr 6 18:29:53 2005 UTC revision 1.127 by heimbach, Thu Dec 8 15:44:34 2005 UTC
# Line 40  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 53  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 109  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 132  c************************************** Line 143  c**************************************
143  C--   Switch on/off diagnostics for snap-shot output:  C--   Switch on/off diagnostics for snap-shot output:
144  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
145        IF ( useDiagnostics ) THEN        IF ( useDiagnostics ) THEN
146          CALL DIAGNOSTICS_SWITCH_ONOFF( myIter, myThid )          CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myIter, myThid )
147        ENDIF        ENDIF
148  #endif  #endif
149    
# Line 256  CADJ STORE ptracer  = comlev1, key = ike Line 267  CADJ STORE ptracer  = comlev1, key = ike
267  # endif  # endif
268  #endif  #endif
269    
270    #ifdef ALLOW_RBCS
271            IF ( useRBCS ) THEN
272             CALL RBCS_FIELDS_LOAD( mytime, myiter, mythid )
273            ENDIF
274    #endif
275    
276  #ifdef COMPONENT_MODULE  #ifdef COMPONENT_MODULE
277         IF ( useCoupler .AND. cpl_earlyExpImpCall ) THEN         IF ( useCoupler .AND. cpl_earlyExpImpCall ) THEN
278  C      Post coupling data that I export.  C      Post coupling data that I export.
# Line 302  CADJ STORE vvel               = comlev1, Line 319  CADJ STORE vvel               = comlev1,
319  CADJ STORE empmr              = comlev1, key = ikey_dynamics  CADJ STORE empmr              = comlev1, key = ikey_dynamics
320  CADJ STORE pmepr              = comlev1, key = ikey_dynamics  CADJ STORE pmepr              = comlev1, key = ikey_dynamics
321  # endif  # endif
322    # ifdef NONLIN_FRSURF
323    cph-test
324    CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics
325    CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics
326    CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics
327    CADJ STORE hFacC, hFacS, hFacW
328    CADJ &     = comlev1, key = ikey_dynamics
329    CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
330    CADJ &     = comlev1, key = ikey_dynamics
331    # endif
332  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
333    
334  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
# Line 373  CADJ STORE KPPfrac            = comlev1, Line 400  CADJ STORE KPPfrac            = comlev1,
400  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics
401  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics
402  # endif  # endif
403    c
404    # ifdef NONLIN_FRSURF
405    cph-test
406    CADJ STORE etaN               = comlev1, key = ikey_dynamics
407    CADJ STORE etaH               = comlev1, key = ikey_dynamics
408    CADJ STORE uVel               = comlev1, key = ikey_dynamics
409    CADJ STORE vVel               = comlev1, key = ikey_dynamics
410    #  ifdef ALLOW_CD_CODE
411    CADJ STORE etanm1             = comlev1, key = ikey_dynamics
412    #  endif
413    # endif
414  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
415    
416        IF ( .NOT.staggerTimeStep ) THEN        IF ( .NOT.staggerTimeStep ) THEN
# Line 420  C--   Step forward fields and calculate Line 458  C--   Step forward fields and calculate
458  #endif  #endif
459  #endif  #endif
460    
 #ifdef ALLOW_NONHYDROSTATIC  
 C--   Step forward W field in N-H algorithm  
       IF ( momStepping .AND. nonHydrostatic ) THEN  
 #ifdef ALLOW_DEBUG  
           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  
 #endif  
   
461  C--   Update time-counter  C--   Update time-counter
462        myIter = nIter0 + iLoop        myIter = nIter0 + iLoop
463        myTime = startTime + deltaTClock * float(iLoop)        myTime = startTime + deltaTClock * float(iLoop)
464    
465    #ifdef ALLOW_MNC
466    C     Update the default next iter for MNC
467          IF ( useMNC ) THEN
468             CALL MNC_CW_CITER_SETG( 1, 1, -1, myIter , myThid )
469    
470    C        TODO: Logic should be added here so that users can specify, on
471    C        a per-citer-group basis, when it is time to update the
472    C        "current" (and not just the "next") iteration
473    
474    C        TODO: the following is just a temporary band-aid (mostly, for
475    C        Baylor) until someone writes a routine that better handles time
476    C        boundaries such as weeks, months, years, etc.
477             IF ( mnc_filefreq .GT. 0 ) THEN
478               IF (DIFFERENT_MULTIPLE(mnc_filefreq,myTime,deltaTClock))
479         &          THEN
480                 CALL MNC_CW_CITER_SETG( 1, 1, myIter, -1 , myThid )
481               ENDIF
482             ENDIF
483           ENDIF
484    #endif
485    
486  C--   Update geometric factors:  C--   Update geometric factors:
487  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
488  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) :
489        IF ( nonlinFreeSurf.GT.0) THEN        IF ( nonlinFreeSurf.GT.0) THEN
490         IF ( select_rStar.GT.0 ) THEN         IF ( select_rStar.GT.0 ) THEN
491    # ifndef DISABLE_RSTAR_CODE
492          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
493          CALL UPDATE_R_STAR( myTime, myIter, myThid )          CALL UPDATE_R_STAR( myTime, myIter, myThid )
494          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_R_STAR      [FORWARD_STEP]',myThid)
495    # endif /* DISABLE_RSTAR_CODE */
496         ELSE         ELSE
497    #ifdef ALLOW_AUTODIFF_TAMC
498    cph-test
499    CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
500    CADJ &     = comlev1, key = ikey_dynamics
501    #endif
502          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
503          CALL UPDATE_SURF_DR( myTime, myIter, myThid )          CALL UPDATE_SURF_DR( myTime, myIter, myThid )
504          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_SURF_DR     [FORWARD_STEP]',myThid)
# Line 457  C-    update also CG2D matrix (and preco Line 510  C-    update also CG2D matrix (and preco
510          CALL UPDATE_CG2D( myTime, myIter, myThid )          CALL UPDATE_CG2D( myTime, myIter, myThid )
511          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_CG2D        [FORWARD_STEP]',myThid)
512        ENDIF        ENDIF
513  #endif  #endif /* NONLIN_FRSURF */
514    
515  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
516  #ifdef ALLOW_SHAP_FILT  #ifdef ALLOW_SHAP_FILT
517        IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN        IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
518          CALL TIMER_START('SHAP_FILT           [FORWARD_STEP]',myThid)          CALL TIMER_START('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
519          IF (implicDiv2Dflow.LT.1.) THEN          IF (implicDiv2Dflow.LT.1.) THEN
520  C--   Explicit+Implicit part of the Barotropic Flow Divergence  C--   Explicit+Implicit part of the Barotropic Flow Divergence
521  C      => Filtering of uVel,vVel is necessary  C      => Filtering of uVel,vVel is necessary
# Line 470  C      => Filtering of uVel,vVel is nece Line 523  C      => Filtering of uVel,vVel is nece
523       &                             myTime, myIter, myThid )       &                             myTime, myIter, myThid )
524          ENDIF          ENDIF
525          CALL SHAP_FILT_APPLY_UV( gU,gV,myTime,myIter,myThid)          CALL SHAP_FILT_APPLY_UV( gU,gV,myTime,myIter,myThid)
526          CALL TIMER_STOP ('SHAP_FILT           [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('SHAP_FILT_UV        [FORWARD_STEP]',myThid)
527        ENDIF        ENDIF
528  #endif  #endif
529  #ifdef ALLOW_ZONAL_FILT  #ifdef ALLOW_ZONAL_FILT
530        IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN        IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
531          CALL TIMER_START('ZONAL_FILT_APPLY    [FORWARD_STEP]',myThid)          CALL TIMER_START('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
532          IF (implicDiv2Dflow.LT.1.) THEN          IF (implicDiv2Dflow.LT.1.) THEN
533  C--   Explicit+Implicit part of the Barotropic Flow Divergence  C--   Explicit+Implicit part of the Barotropic Flow Divergence
534  C      => Filtering of uVel,vVel is necessary  C      => Filtering of uVel,vVel is necessary
535            CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )            CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )
536          ENDIF          ENDIF
537          CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )          CALL ZONAL_FILT_APPLY_UV( gU, gV, myThid )
538          CALL TIMER_STOP ('ZONAL_FILT_APPLY    [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('ZONAL_FILT_UV       [FORWARD_STEP]',myThid)
539        ENDIF        ENDIF
540  #endif    #endif  
541    
# Line 500  C     three-dimensional for non-hydrosta Line 553  C     three-dimensional for non-hydrosta
553  C--   Correct divergence in flow field and cycle time-stepping momentum  C--   Correct divergence in flow field and cycle time-stepping momentum
554  c     IF ( momStepping ) THEN  c     IF ( momStepping ) THEN
555  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
556          CALL TIMER_START('UV_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_START('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
557          CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)          CALL MOMENTUM_CORRECTION_STEP(myTime, myIter, myThid)
558          CALL TIMER_STOP ('UV_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('MOM_CORRECTION_STEP [FORWARD_STEP]',myThid)
559  #endif  #endif
560  c     ENDIF  c     ENDIF
561    
562  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
563        IF (exactConserv) THEN        IF (exactConserv) THEN
564  C--   Update etaH(n+1) :  C--   Update etaH(n+1) :
565          CALL TIMER_START('UPDATE_ETAH        [FORWARD_STEP]',mythid)          CALL TIMER_START('UPDATE_ETAH         [FORWARD_STEP]',mythid)
566          CALL UPDATE_ETAH( myTime, myIter, myThid )          CALL UPDATE_ETAH( myTime, myIter, myThid )
567          CALL TIMER_STOP ('UPDATE_ETAH        [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('UPDATE_ETAH         [FORWARD_STEP]',mythid)
568        ENDIF        ENDIF
569  #endif /* EXACT_CONSERV */  #endif /* EXACT_CONSERV */
570    
571  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
572        IF ( select_rStar.NE.0 ) THEN        IF ( select_rStar.NE.0 ) THEN
573    # ifndef DISABLE_RSTAR_CODE
574  C--   r* : compute the future level thickness according to etaH(n+1)  C--   r* : compute the future level thickness according to etaH(n+1)
575          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_R_STAR       [FORWARD_STEP]',mythid)
576          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )          CALL CALC_R_STAR(etaH, myTime, myIter, myThid )
577          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_R_STAR       [FORWARD_STEP]',mythid)
578    # endif /* DISABLE_RSTAR_CODE */
579        ELSEIF ( nonlinFreeSurf.GT.0) THEN        ELSEIF ( nonlinFreeSurf.GT.0) THEN
580  C--   compute the future surface level thickness according to etaH(n+1)  C--   compute the future surface level thickness according to etaH(n+1)
581    #ifdef ALLOW_AUTODIFF_TAMC
582    CADJ STORE etaH          = comlev1, key = ikey_dynamics
583    #endif
584          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',mythid)
585          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
586          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',mythid)
# Line 565  cph find_rho which may use pressure() Line 623  cph find_rho which may use pressure()
623  CADJ STORE totphihyd  = comlev1, key = ikey_dynamics  CADJ STORE totphihyd  = comlev1, key = ikey_dynamics
624  #endif  #endif
625  C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)  C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)
626          CALL TIMER_START('TS_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
627          CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)          CALL TRACERS_CORRECTION_STEP(myTime, myIter, myThid)
628          CALL TIMER_STOP ('TS_CORRECTION_STEP  [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
629    
630  #ifdef ALLOW_GCHEM  #ifdef ALLOW_GCHEM
631  C     Add separate timestepping of chemical/biological/forcing  C     Add separate timestepping of chemical/biological/forcing
# Line 654  C--   Do IO if needed. Line 712  C--   Do IO if needed.
712        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
713  #endif  #endif
714    
715    #ifdef HAVE_SIGREG
716          IF ( useSIGREG ) THEN
717            IF ( i_got_signal .GT. 0 ) THEN
718              CALL PACKAGES_WRITE_PICKUP(
719         I         .TRUE., myTime, myIter, myThid )
720    #ifndef ALLOW_OFFLINE
721              CALL WRITE_CHECKPOINT(
722         I         .TRUE., myTime, myIter, myThid )  
723    #endif
724              STOP 'Checkpoint completed -- killed by signal handler'
725            ENDIF
726          ENDIF
727    #endif
728    
729  C--   Save state for restarts  C--   Save state for restarts
730        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)        CALL TIMER_START('WRITE_CHECKPOINT    [FORWARD_STEP]',myThid)
731        CALL PACKAGES_WRITE_PICKUP(        CALL PACKAGES_WRITE_PICKUP(

Legend:
Removed from v.1.114  
changed lines
  Added in v.1.127

  ViewVC Help
Powered by ViewVC 1.1.22