/[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.23 by heimbach, Thu Sep 27 20:12:10 2001 UTC revision 1.23.2.5 by heimbach, Thu Nov 7 16:48:46 2002 UTC
# Line 37  C     == Global variables == Line 37  C     == Global variables ==
37  #include "CG3D.h"  #include "CG3D.h"
38  #endif  #endif
39    
40    #ifdef ALLOW_SHAP_FILT
41    #include "SHAP_FILT.h"
42    #endif
43    #ifdef ALLOW_ZONAL_FILT
44    #include "ZONAL_FILT.h"
45    #endif
46    
47  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
48  #include "tamc.h"  # include "tamc.h"
49  #include "ctrl.h"  # include "ctrl.h"
50  #include "ctrl_dummy.h"  # include "ctrl_dummy.h"
51  #include "cost.h"  # include "cost.h"
52    # ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE
53    #  include "exf_fields.h"
54    #  ifdef ALLOW_BULKFORMULAE
55    #   include "exf_constants.h"
56    #  endif
57    # endif
58    # ifdef ALLOW_OBCS
59    #  include "OBCS.h"
60    # endif
61  #endif  #endif
62    
63  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
# Line 62  C     mythid - thread number for this in Line 78  C     mythid - thread number for this in
78    
79  CEOP  CEOP
80    
   
81  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
82  C--     Reset the model iteration counter and the model time.  C--     Reset the model iteration counter and the model time.
83          myiter = nIter0 + (iloop-1)          myiter = nIter0 + (iloop-1)
84          mytime = startTime + float(iloop-1)*deltaTclock          mytime = startTime + float(iloop-1)*deltaTclock
85  #endif  #endif
86    
87  #ifdef ALLOW_AUTODIFF_TAMC  #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_AUTODIFF_MONITOR))
88  C       Include call to a dummy routine. Its adjoint will be  C       Include call to a dummy routine. Its adjoint will be
89  C       called at the proper place in the adjoint code.  C       called at the proper place in the adjoint code.
90  C       The adjoint routine will print out adjoint values  C       The adjoint routine will print out adjoint values
# Line 77  C       if requested. The location of th Line 92  C       if requested. The location of th
92  C       it has to be after the adjoint of the exchanges  C       it has to be after the adjoint of the exchanges
93  C       (DO_GTERM_BLOCKING_EXCHANGES).  C       (DO_GTERM_BLOCKING_EXCHANGES).
94          CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )          CALL DUMMY_IN_STEPPING( myTime, myIter, myThid )
95            CALL DO_FIELDS_BLOCKING_EXCHANGES( myThid )
96  #endif  #endif
97    
98  #ifdef EXACT_CONSERV  #ifdef EXACT_CONSERV
# Line 85  C--   Update etaH(n+1) : Line 101  C--   Update etaH(n+1) :
101          DO bj=myByLo(myThid),myByHi(myThid)          DO bj=myByLo(myThid),myByHi(myThid)
102           DO bi=myBxLo(myThid),myBxHi(myThid)           DO bi=myBxLo(myThid),myBxHi(myThid)
103             CALL CALC_EXACT_ETA( .FALSE., bi,bj, uVel,vVel,             CALL CALC_EXACT_ETA( .FALSE., bi,bj, uVel,vVel,
104       I                          startTime, nIter0, myThid )       I                          myTime, myIter, myThid )
105           ENDDO           ENDDO
106          ENDDO          ENDDO
107          IF (implicDiv2Dflow .NE. 1. _d 0 )          IF (implicDiv2Dflow .NE. 1. _d 0 .OR. useOBCS )
108       &     _EXCH_XY_R8(etaH, myThid )       &     _EXCH_XY_R8(etaH, myThid )
109        ENDIF        ENDIF
110  #endif /* EXACT_CONSERV */  #endif /* EXACT_CONSERV */
# Line 102  C      according to etaH(n+1) Line 118  C      according to etaH(n+1)
118  #endif /* NONLIN_FRSURF */  #endif /* NONLIN_FRSURF */
119    
120  C--     Load forcing/external data fields.  C--     Load forcing/external data fields.
121    #ifdef ALLOW_AUTODIFF_TAMC
122    c**************************************
123    #include "checkpoint_lev1_directives.h"
124    c**************************************
125    #endif
126  #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE  #ifdef INCLUDE_EXTERNAL_FORCING_PACKAGE
127  C       NOTE, that although the exf package is part of the  C       NOTE, that although the exf package is part of the
128  C       distribution, it is not currently maintained, i.e.  C       distribution, it is not currently maintained, i.e.
129  C       exf is disabled by default in genmake.  C       exf is disabled by default in genmake.
130  #ifdef ALLOW_BULKFORMULAE          CALL TIMER_START('EXF_GETFORCING      [THE_MAIN_LOOP]',mythid)
 CADJ STORE theta     = comlev1, key = ikey_dynamics  
 #endif  
131          CALL EXF_GETFORCING( mytime, myiter, mythid )          CALL EXF_GETFORCING( mytime, myiter, mythid )
132            CALL TIMER_STOP ('EXF_GETFORCING      [THE_MAIN_LOOP]',mythid)
133  #else  #else
134          CALL TIMER_START('EXTERNAL_FIELDS_LOAD[THE_MAIN_LOOP]',mythid)          CALL TIMER_START('EXTERNAL_FIELDS_LOAD[THE_MAIN_LOOP]',mythid)
135          CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )          CALL EXTERNAL_FIELDS_LOAD( mytime, myiter, mythid )
# Line 121  C--     Step forward fields and calculat Line 141  C--     Step forward fields and calculat
141          CALL THERMODYNAMICS( myTime, myIter, myThid )          CALL THERMODYNAMICS( myTime, myIter, myThid )
142          CALL TIMER_STOP ('THERMODYNAMICS      [THE_MAIN_LOOP]',mythid)          CALL TIMER_STOP ('THERMODYNAMICS      [THE_MAIN_LOOP]',mythid)
143    
144    #ifdef ALLOW_SHAP_FILT
145           IF (useSHAP_FILT .AND.
146         &     staggerTimeStep .AND. shap_filt_TrStagg ) THEN
147            CALL TIMER_START('SHAP_FILT           [THE_MAIN_LOOP]',myThid)
148            CALL SHAP_FILT_APPLY_TS( gT, gS, myTime, myIter, myThid )
149            CALL TIMER_STOP ('SHAP_FILT           [THE_MAIN_LOOP]',myThid)
150           ENDIF
151    #endif
152    #ifdef ALLOW_ZONAL_FILT
153           IF (useZONAL_FILT .AND.
154         &     staggerTimeStep .AND. zonal_filt_TrStagg ) THEN
155            CALL TIMER_START('ZONAL_FILT_APPLY    [THE_MAIN_LOOP]',myThid)
156            CALL ZONAL_FILT_APPLY_TS( gT, gS, myThid )
157            CALL TIMER_STOP ('ZONAL_FILT_APPLY    [THE_MAIN_LOOP]',myThid)
158          ENDIF
159    #endif  
160    
161  C--     Step forward fields and calculate time tendency terms.  C--     Step forward fields and calculate time tendency terms.
162          IF ( momStepping ) THEN          IF ( momStepping ) THEN
163          CALL TIMER_START('DYNAMICS            [THE_MAIN_LOOP]',mythid)          CALL TIMER_START('DYNAMICS            [THE_MAIN_LOOP]',mythid)
# Line 128  C--     Step forward fields and calculat Line 165  C--     Step forward fields and calculat
165          CALL TIMER_STOP ('DYNAMICS            [THE_MAIN_LOOP]',mythid)          CALL TIMER_STOP ('DYNAMICS            [THE_MAIN_LOOP]',mythid)
166          ENDIF          ENDIF
167    
 #ifndef ALLOW_AUTODIFF_TAMC  
168  #ifdef ALLOW_NONHYDROSTATIC  #ifdef ALLOW_NONHYDROSTATIC
169  C--   Step forward W field in N-H algorithm  C--   Step forward W field in N-H algorithm
170          IF ( momStepping .AND. nonHydrostatic ) THEN          IF ( momStepping .AND. nonHydrostatic ) THEN
# Line 137  C--   Step forward W field in N-H algori Line 173  C--   Step forward W field in N-H algori
173            CALL TIMER_STOP ('CALC_GW          [THE_MAIN_LOOP]',myThid)            CALL TIMER_STOP ('CALC_GW          [THE_MAIN_LOOP]',myThid)
174          ENDIF          ENDIF
175  #endif  #endif
 #endif /* ALLOW_AUTODIFF_TAMC */  
176    
177  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
178  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) :
       IF ( momStepping ) THEN  
179        IF ( nonlinFreeSurf.GT.0) THEN        IF ( nonlinFreeSurf.GT.0) THEN
180            CALL TIMER_START('UPDATE_SURF_DR     [THE_MAIN_LOOP]',myThid)
181          CALL UPDATE_SURF_DR( myTime, myIter, myThid )          CALL UPDATE_SURF_DR( myTime, myIter, myThid )
182            CALL TIMER_STOP ('UPDATE_SURF_DR     [THE_MAIN_LOOP]',myThid)
183        ENDIF        ENDIF
184  C-    update also CG2D matrix (and preconditioner)  C-    update also CG2D matrix (and preconditioner)
185        IF ( nonlinFreeSurf.GT.2) THEN        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
186            CALL TIMER_START('UPDATE_CG2D        [THE_MAIN_LOOP]',myThid)
187          CALL UPDATE_CG2D( myTime, myIter, myThid )          CALL UPDATE_CG2D( myTime, myIter, myThid )
188        ENDIF          CALL TIMER_STOP ('UPDATE_CG2D       [THE_MAIN_LOOP]',myThid)
189        ENDIF        ENDIF
190  #endif  #endif
191    
192  C-- This block has been moved to the_correction_step(). We have  C--   Apply Filters to u*,v* before SOLVE_FOR_PRESSURE
193  C   left this code here to indicate where the filters used to be  #ifdef ALLOW_SHAP_FILT
194  C   in the algorithm before JMC moved them to after the pressure        IF (useSHAP_FILT .AND. shap_filt_uvStar) THEN
195  C   solver.          CALL TIMER_START('SHAP_FILT           [THE_MAIN_LOOP]',myThid)
196  C          CALL SHAP_FILT_APPLY_UV( gUnm1,gVnm1, myTime,myIter,myThid )
197  C#ifdef ALLOW_SHAP_FILT          IF (implicDiv2Dflow.LT.1.) THEN
198  CC--   Step forward all tiles, filter and exchange.  C--   Explicit+Implicit part of the Barotropic Flow Divergence
199  C      CALL TIMER_START('SHAP_FILT           [THE_MAIN_LOOP]',myThid)  C      => Filtering of uVel,vVel is necessary
200  C      CALL SHAP_FILT_APPLY(            CALL SHAP_FILT_APPLY_UV( uVel,vVel, myTime,myIter,myThid )
201  C     I                     gUnm1, gVnm1, gTnm1, gSnm1,          ENDIF
202  C     I                     myTime, myIter, myThid )          CALL TIMER_STOP ('SHAP_FILT           [THE_MAIN_LOOP]',myThid)
203  C      IF (implicDiv2Dflow.LT.1.) THEN        ENDIF
204  CC--   Explicit+Implicit part of the Barotropic Flow Divergence  #endif
205  CC      => Filtering of uVel,vVel is necessary  #ifdef ALLOW_ZONAL_FILT
206  C         CALL SHAP_FILT_UV( uVel, vVel, myTime, myThid )        IF (useZONAL_FILT .AND. zonal_filt_uvStar) THEN
207  C      ENDIF          CALL TIMER_START('ZONAL_FILT_APPLY    [THE_MAIN_LOOP]',myThid)
208  C      CALL TIMER_STOP ('SHAP_FILT           [THE_MAIN_LOOP]',myThid)          CALL ZONAL_FILT_APPLY_UV( gUnm1, gVnm1, myThid )
209  C#endif          IF (implicDiv2Dflow.LT.1.) THEN
210  C  C--   Explicit+Implicit part of the Barotropic Flow Divergence
211  C#ifdef ALLOW_ZONAL_FILT  C      => Filtering of uVel,vVel is necessary
212  C      IF (zonal_filt_lat.LT.90.) THEN            CALL ZONAL_FILT_APPLY_UV( uVel, vVel, myThid )
213  C        CALL TIMER_START('ZONAL_FILT_APPLY    [THE_MAIN_LOOP]',myThid)          ENDIF
214  C        CALL ZONAL_FILT_APPLY(          CALL TIMER_STOP ('ZONAL_FILT_APPLY    [THE_MAIN_LOOP]',myThid)
215  C     U           gUnm1, gVnm1, gTnm1, gSnm1,        ENDIF
216  C     I           myThid )  #endif  
 C        CALL TIMER_STOP ('ZONAL_FILT_APPLY    [THE_MAIN_LOOP]',myThid)  
 C      ENDIF  
 C#endif  
217    
218  C--   Solve elliptic equation(s).  C--   Solve elliptic equation(s).
219  C     Two-dimensional only for conventional hydrostatic or  C     Two-dimensional only for conventional hydrostatic or
220  C     three-dimensional for non-hydrostatic and/or IGW scheme.  C     three-dimensional for non-hydrostatic and/or IGW scheme.
221        IF ( momStepping ) THEN        IF ( momStepping ) THEN
222        CALL TIMER_START('SOLVE_FOR_PRESSURE  [THE_MAIN_LOOP]',myThid)        CALL TIMER_START('SOLVE_FOR_PRESSURE  [THE_MAIN_LOOP]',myThid)
223        CALL SOLVE_FOR_PRESSURE( myThid )        CALL SOLVE_FOR_PRESSURE(myTime, myIter, myThid)
224        CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [THE_MAIN_LOOP]',myThid)        CALL TIMER_STOP ('SOLVE_FOR_PRESSURE  [THE_MAIN_LOOP]',myThid)
225        ENDIF        ENDIF
226    
# Line 219  C--   Calculate float trajectories Line 253  C--   Calculate float trajectories
253    
254  #ifndef EXCLUDE_MONITOR  #ifndef EXCLUDE_MONITOR
255  C--   Check status of solution (statistics, cfl, etc...)  C--   Check status of solution (statistics, cfl, etc...)
256          CALL TIMER_START('MONITOR             [THE_MAIN_LOOP]',myThid)
257        CALL MONITOR( myIter, myTime, myThid )        CALL MONITOR( myIter, myTime, myThid )
258          CALL TIMER_STOP ('MONITOR             [THE_MAIN_LOOP]',myThid)
259  #endif /* EXCLUDE_MONITOR */  #endif /* EXCLUDE_MONITOR */
260    
 #ifndef ALLOW_AUTODIFF_TAMC  
261  C--   Do IO if needed.  C--   Do IO if needed.
262        CALL TIMER_START('DO_THE_MODEL_IO     [THE_MAIN_LOOP]',myThid)        CALL TIMER_START('DO_THE_MODEL_IO     [THE_MAIN_LOOP]',myThid)
263        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )
# Line 246  C     at time level 1 Line 281  C     at time level 1
281       &        .FALSE., myTime, myIter, myThid )       &        .FALSE., myTime, myIter, myThid )
282        CALL TIMER_STOP ('WRITE_CHECKPOINT    [THE_MAIN_LOOP]',myThid)        CALL TIMER_STOP ('WRITE_CHECKPOINT    [THE_MAIN_LOOP]',myThid)
283    
 #endif /* ALLOW_AUTODIFF_TAMC */  
   
284        END        END

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.23.2.5

  ViewVC Help
Powered by ViewVC 1.1.22