/[MITgcm]/MITgcm/model/src/timestep.F
ViewVC logotype

Diff of /MITgcm/model/src/timestep.F

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

revision 1.39 by jmc, Sun Sep 4 19:24:26 2005 UTC revision 1.52 by jmc, Sat Sep 11 21:27:13 2010 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "PACKAGES_CONFIG.h"  #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    #ifdef ALLOW_CD_CODE
7    #include "CD_CODE_OPTIONS.h"
8    #endif
9    
10  CBOP  CBOP
11  C     !ROUTINE: TIMESTEP  C     !ROUTINE: TIMESTEP
# Line 13  C     !INTERFACE: Line 16  C     !INTERFACE:
16       I                     myTime, myIter, myThid )       I                     myTime, myIter, myThid )
17  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
18  C     *==========================================================*  C     *==========================================================*
19  C     | S/R TIMESTEP                                                C     | S/R TIMESTEP
20  C     | o Step model fields forward in time                        C     | o Step model fields forward in time
21  C     *==========================================================*  C     *==========================================================*
22  C     \ev  C     \ev
23    
# Line 22  C     !USES: Line 25  C     !USES:
25        IMPLICIT NONE        IMPLICIT NONE
26  C     == Global variables ==  C     == Global variables ==
27  #include "SIZE.h"  #include "SIZE.h"
 #include "DYNVARS.h"  
28  #include "EEPARAMS.h"  #include "EEPARAMS.h"
29  #include "PARAMS.h"  #include "PARAMS.h"
30  #include "GRID.h"  #include "GRID.h"
31  #include "SURFACE.h"  #include "SURFACE.h"
32    #include "RESTART.h"
33    #include "DYNVARS.h"
34    #ifdef ALLOW_NONHYDROSTATIC
35    #include "NH_VARS.h"
36    #endif
37    
38  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
39  C     == Routine Arguments ==  C     == Routine Arguments ==
# Line 49  C     gvDissip :: dissipation tendency ( Line 56  C     gvDissip :: dissipation tendency (
56    
57  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
58  C     == Local variables ==  C     == Local variables ==
       LOGICAL momForcing_In_AB  
       LOGICAL momDissip_In_AB  
59        INTEGER i,j        INTEGER i,j
       _RL ab15,ab05  
60        _RL phxFac,phyFac, psFac        _RL phxFac,phyFac, psFac
61        _RL     gUtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     gUtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
62        _RL     gVtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     gVtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
63    #ifdef ALLOW_NONHYDROSTATIC
64          _RL     nhFac
65    #endif
66    #ifdef ALLOW_DIAGNOSTICS
67    C    Allow diagnosis of external forcing
68          LOGICAL  DIAGNOSTICS_IS_ON
69          EXTERNAL DIAGNOSTICS_IS_ON
70    #endif
71          LOGICAL externForcDiagIsOn
72    #if (defined ALLOW_DIAGNOSTICS) || (defined CD_CODE_NO_AB_MOMENTUM)
73          _RL     gUext(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
74          _RL     gVext(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
75    #endif
76  #ifdef ALLOW_CD_CODE  #ifdef ALLOW_CD_CODE
77        _RL     guCor(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     guCor(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
78        _RL     gvCor(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL     gvCor(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
79  #endif  #endif
80  CEOP  CEOP
81    
 C     Adams-Bashforth timestepping weights  
       IF (myIter .EQ. 0) THEN  
        ab15=1.0  
        ab05=0.0  
       ELSE  
        ab15=1.5+abeps  
        ab05=-0.5-abeps  
       ENDIF  
   
82  C-- explicit part of the surface potential gradient is added in this S/R  C-- explicit part of the surface potential gradient is added in this S/R
83        psFac = pfFacMom*(1. _d 0 - implicSurfPress)        psFac = pfFacMom*(1. _d 0 - implicSurfPress)
84         &       *recip_deepFacC(k)*recip_rhoFacC(k)
85    
86  C--  factors for gradient (X & Y directions) of Hydrostatic Potential  C--  factors for gradient (X & Y directions) of Hydrostatic Potential
87        phxFac = pfFacMom        phxFac = pfFacMom
88        phyFac = pfFacMom        phyFac = pfFacMom
89    
90  C-- including or excluding momentum forcing from Adams-Bashforth:        externForcDiagIsOn = useDiagnostics .AND. momForcing
91        momForcing_In_AB = forcing_In_AB  #ifdef ALLOW_DIAGNOSTICS
92        momForcing_In_AB = .TRUE.        IF ( externForcDiagIsOn ) THEN
93        momDissip_In_AB  = .TRUE.          externForcDiagIsOn = DIAGNOSTICS_IS_ON('Um_Ext  ',myThid)
94         &                  .OR. DIAGNOSTICS_IS_ON('Vm_Ext  ',myThid)
95          ENDIF
96    #endif /* ALLOW_DIAGNOSTICS */
97    
98  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
99    
100  C-    Initialize local arrays (not really necessary but safer)  C-    Initialize local arrays (not really necessary but safer)
101        DO j=1-Oly,sNy+Oly        DO j=1-Oly,sNy+Oly
102         DO i=1-Olx,sNx+Olx          DO i=1-Olx,sNx+Olx
103          gUtmp(i,j) = 0. _d 0            gUtmp(i,j) = 0. _d 0
104          gVtmp(i,j) = 0. _d 0            gVtmp(i,j) = 0. _d 0
105  #ifdef ALLOW_CD_CODE  #ifdef ALLOW_CD_CODE
106          guCor(i,j) = 0. _d 0            guCor(i,j) = 0. _d 0
107          gvCor(i,j) = 0. _d 0            gvCor(i,j) = 0. _d 0
108  #endif  #endif
109         ENDDO          ENDDO
110        ENDDO        ENDDO
111    
112        IF ( .NOT.staggerTimeStep ) THEN        IF ( .NOT.staggerTimeStep .AND. .NOT. implicitIntGravWave ) THEN
113  C--   Synchronous time step: add grad Phi_Hyp to gU,gV before doing Adams-Bashforth  C--   Synchronous time step: add grad Phi_Hyp to gU,gV before doing Adams-Bashforth
114          DO j=jMin,jMax          DO j=jMin,jMax
115           DO i=iMin,iMax           DO i=iMin,iMax
116            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj) - phxFac*dPhiHydX(i,j)             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj) - phxFac*dPhiHydX(i,j)
117            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj) - phyFac*dPhiHydY(i,j)             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj) - phyFac*dPhiHydY(i,j)
118           ENDDO           ENDDO
119          ENDDO          ENDDO
120          phxFac = 0.          phxFac = 0.
121          phyFac = 0.          phyFac = 0.
122  c     ELSE  c     ELSE
123  C--   Stagger time step: grad Phi_Hyp will be added later  C--   Stagger time step: grad Phi_Hyp will be added later
124        ENDIF        ENDIF
125    
126  C--   Dissipation term inside the Adams-Bashforth:  C--   Dissipation term inside the Adams-Bashforth:
127        IF ( momViscosity .AND. momDissip_In_AB) THEN        IF ( momViscosity .AND. momDissip_In_AB) THEN
128          DO j=jMin,jMax          DO j=jMin,jMax
129           DO i=iMin,iMax           DO i=iMin,iMax
130            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj) + guDissip(i,j)             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj) + guDissip(i,j)
131            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj) + gvDissip(i,j)             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj) + gvDissip(i,j)
132           ENDDO           ENDDO
133          ENDDO          ENDDO
134        ENDIF        ENDIF
135    
136  C--   Forcing term inside the Adams-Bashforth:  C--   Forcing term inside the Adams-Bashforth:
137        IF (momForcing .AND. momForcing_In_AB) THEN        IF ( momForcing .AND. momForcingOutAB.NE.1 ) THEN
138    #ifdef ALLOW_DIAGNOSTICS
139            IF ( externForcDiagIsOn ) THEN
140             DO j=1,sNy+1
141              DO i=1,sNx+1
142               gUext(i,j) = gU(i,j,k,bi,bj)
143               gVext(i,j) = gV(i,j,k,bi,bj)
144              ENDDO
145             ENDDO
146            ENDIF
147    #endif /* ALLOW_DIAGNOSTICS */
148    
149          CALL EXTERNAL_FORCING_U(          CALL EXTERNAL_FORCING_U(
150       I     iMin,iMax,jMin,jMax,bi,bj,k,       I     iMin,iMax,jMin,jMax,bi,bj,k,
151       I     myTime,myThid)       I     myTime,myThid)
152          CALL EXTERNAL_FORCING_V(          CALL EXTERNAL_FORCING_V(
153       I     iMin,iMax,jMin,jMax,bi,bj,k,       I     iMin,iMax,jMin,jMax,bi,bj,k,
154       I     myTime,myThid)       I     myTime,myThid)
155    
156    #ifdef ALLOW_DIAGNOSTICS
157            IF ( externForcDiagIsOn ) THEN
158             DO j=1,sNy+1
159              DO i=1,sNx+1
160               gUext(i,j) = gU(i,j,k,bi,bj)-gUext(i,j)
161               gVext(i,j) = gV(i,j,k,bi,bj)-gVext(i,j)
162              ENDDO
163             ENDDO
164            ENDIF
165    #endif /* ALLOW_DIAGNOSTICS */
166        ENDIF        ENDIF
167    
168    #ifdef CD_CODE_NO_AB_MOMENTUM
169        IF (useCDscheme) THEN        IF (useCDscheme) THEN
170  C-     for CD-scheme, store gU,Vtmp = gU,V^n + forcing  C-    CD-scheme, before doing AB, store gU,Vtmp = gU,V^n (+dissip. +forcing)
171          DO j=jMin,jMax          DO j=jMin,jMax
172           DO i=iMin,iMax           DO i=iMin,iMax
173            gUtmp(i,j) = gU(i,j,k,bi,bj)             gUtmp(i,j) = gU(i,j,k,bi,bj)
174            gVtmp(i,j) = gV(i,j,k,bi,bj)             gVtmp(i,j) = gV(i,j,k,bi,bj)
175           ENDDO           ENDDO
176          ENDDO          ENDDO
177        ENDIF        ENDIF
178    #endif /* CD_CODE_NO_AB_MOMENTUM */
179    
180  C-    Compute effective gU,gV_[n+1/2] terms (including Adams-Bashforth weights)  C-    Compute effective gU,gV_[n+1/2] terms (including Adams-Bashforth weights)
181  C     and save gU,gV_[n] into guNm1,gvNm1 for the next time step.  C     and save gU,gV_[n] into guNm1,gvNm1 for the next time step.
# Line 147  C     and save gU,gV_[n] into guNm1,gvNm Line 183  C     and save gU,gV_[n] into guNm1,gvNm
183        CALL ADAMS_BASHFORTH3(        CALL ADAMS_BASHFORTH3(
184       I                        bi, bj, k,       I                        bi, bj, k,
185       U                        gU, guNm,       U                        gU, guNm,
186       I                        myIter, myThid )       I                        mom_StartAB, myIter, myThid )
187        CALL ADAMS_BASHFORTH3(        CALL ADAMS_BASHFORTH3(
188       I                        bi, bj, k,       I                        bi, bj, k,
189       U                        gV, gvNm,       U                        gV, gvNm,
190       I                        myIter, myThid )       I                        mom_StartAB, myIter, myThid )
191  #else /* ALLOW_ADAMSBASHFORTH_3 */  #else /* ALLOW_ADAMSBASHFORTH_3 */
192        CALL ADAMS_BASHFORTH2(        CALL ADAMS_BASHFORTH2(
193       I                        bi, bj, k,       I                        bi, bj, k,
194       U                        gU, guNm1,       U                        gU, guNm1,
195       I                        myIter, myThid )       I                        mom_StartAB, myIter, myThid )
196        CALL ADAMS_BASHFORTH2(        CALL ADAMS_BASHFORTH2(
197       I                        bi, bj, k,       I                        bi, bj, k,
198       U                        gV, gvNm1,       U                        gV, gvNm1,
199       I                        myIter, myThid )       I                        mom_StartAB, myIter, myThid )
200  #endif /* ALLOW_ADAMSBASHFORTH_3 */  #endif /* ALLOW_ADAMSBASHFORTH_3 */
201          
202  C--   Forcing term outside the Adams-Bashforth:  C--   Forcing term outside the Adams-Bashforth:
203  C     (not recommanded with CD-scheme ON)        IF ( momForcing .AND. momForcingOutAB.EQ.1 ) THEN
204        IF (momForcing .AND. .NOT.momForcing_In_AB) THEN  
205         IF (useCDscheme) THEN  #if (defined ALLOW_DIAGNOSTICS) || (defined CD_CODE_NO_AB_MOMENTUM)
206          DO j=jMin,jMax          IF ( externForcDiagIsOn .OR. useCDscheme ) THEN
207           DO i=iMin,iMax           DO j=jMin,jMax
208            gUtmp(i,j) = gUtmp(i,j) - gU(i,j,k,bi,bj)            DO i=iMin,iMax
209            gVtmp(i,j) = gVtmp(i,j) - gV(i,j,k,bi,bj)             gUext(i,j) = gU(i,j,k,bi,bj)
210               gVext(i,j) = gV(i,j,k,bi,bj)
211              ENDDO
212           ENDDO           ENDDO
213          ENDDO          ENDIF
214         ENDIF  #endif /* ALLOW_DIAGNOSTICS or CD_CODE_NO_AB_MOMENTUM */
215    
216          CALL EXTERNAL_FORCING_U(          CALL EXTERNAL_FORCING_U(
217       I     iMin,iMax,jMin,jMax,bi,bj,k,       I     iMin,iMax,jMin,jMax,bi,bj,k,
218       I     myTime,myThid)       I     myTime,myThid)
# Line 181  C     (not recommanded with CD-scheme ON Line 220  C     (not recommanded with CD-scheme ON
220       I     iMin,iMax,jMin,jMax,bi,bj,k,       I     iMin,iMax,jMin,jMax,bi,bj,k,
221       I     myTime,myThid)       I     myTime,myThid)
222    
223  C-     for CD-scheme, compute gU,Vtmp = gU,V^n + forcing  #if (defined ALLOW_DIAGNOSTICS) || (defined CD_CODE_NO_AB_MOMENTUM)
224         IF (useCDscheme) THEN          IF ( externForcDiagIsOn .OR. useCDscheme ) THEN
225          DO j=jMin,jMax           DO j=jMin,jMax
226           DO i=iMin,iMax            DO i=iMin,iMax
227            gUtmp(i,j) = gUtmp(i,j) + gU(i,j,k,bi,bj)             gUext(i,j) = gU(i,j,k,bi,bj)-gUext(i,j)
228            gVtmp(i,j) = gVtmp(i,j) + gV(i,j,k,bi,bj)             gVext(i,j) = gV(i,j,k,bi,bj)-gVext(i,j)
229              ENDDO
230           ENDDO           ENDDO
231          ENDDO          ENDIF
232         ENDIF  #endif /* ALLOW_DIAGNOSTICS or CD_CODE_NO_AB_MOMENTUM */
233    
234    C--   Forcing term outside the Adams-Bashforth: end of if block
235        ENDIF        ENDIF
236    
237  #ifdef ALLOW_CD_CODE  #ifdef ALLOW_CD_CODE
238        IF (useCDscheme) THEN        IF (useCDscheme) THEN
239  C-     Step forward D-grid velocity using C-grid gU,Vtmp = gU,V^n + forcing  #ifdef CD_CODE_NO_AB_MOMENTUM
240    C-     CD-scheme, add forcing to gU,Vtmp = gU,V^n (+ dissip.)
241            IF ( momForcing .AND. momForcingOutAB.EQ.1 ) THEN
242             DO j=jMin,jMax
243              DO i=iMin,iMax
244               gUtmp(i,j) = gUtmp(i,j) + guExt(i,j)
245               gVtmp(i,j) = gVtmp(i,j) + gvExt(i,j)
246              ENDDO
247             ENDDO
248            ENDIF
249    #else /* CD_CODE_NO_AB_MOMENTUM */
250    C-     CD-scheme, store gU,Vtmp = gU,V^n+1/2 (+dissip.) +forcing
251            DO j=jMin,jMax
252             DO i=iMin,iMax
253               gUtmp(i,j) = gU(i,j,k,bi,bj)
254               gVtmp(i,j) = gV(i,j,k,bi,bj)
255             ENDDO
256            ENDDO
257    #endif /* CD_CODE_NO_AB_MOMENTUM */
258            IF ( momViscosity .AND. .NOT.momDissip_In_AB ) THEN
259    C-     CD-scheme, add dissip. to gU,Vtmp = gU,V  + forcing
260             DO j=jMin,jMax
261              DO i=iMin,iMax
262               gUtmp(i,j) = gUtmp(i,j) + guDissip(i,j)
263               gVtmp(i,j) = gVtmp(i,j) + gvDissip(i,j)
264              ENDDO
265             ENDDO
266            ENDIF
267    C-     Step forward D-grid velocity using C-grid gU,Vtmp = gU,V +dissip +forcing
268  C      and return coriolis terms on C-grid (guCor,gvCor)  C      and return coriolis terms on C-grid (guCor,gvCor)
269          CALL CD_CODE_SCHEME(          CALL CD_CODE_SCHEME(
270       I                  bi,bj,k, dPhiHydX,dPhiHydY, gUtmp,gVtmp,       I                  bi,bj,k, dPhiHydX,dPhiHydY, gUtmp,gVtmp,
# Line 202  C      and return coriolis terms on C-gr Line 272  C      and return coriolis terms on C-gr
272       I                  myTime, myIter, myThid)       I                  myTime, myIter, myThid)
273          DO j=jMin,jMax          DO j=jMin,jMax
274           DO i=iMin,iMax           DO i=iMin,iMax
275            gUtmp(i,j) = gU(i,j,k,bi,bj)             gUtmp(i,j) = gU(i,j,k,bi,bj)
276       &               + guCor(i,j)       &                + guCor(i,j)
277            gVtmp(i,j) = gV(i,j,k,bi,bj)             gVtmp(i,j) = gV(i,j,k,bi,bj)
278       &               + gvCor(i,j)       &                + gvCor(i,j)
279           ENDDO           ENDDO
280          ENDDO          ENDDO
281        ELSE        ELSE
282  #endif /* ALLOW_CD_CODE */  #endif /* ALLOW_CD_CODE */
283          DO j=jMin,jMax          DO j=jMin,jMax
284           DO i=iMin,iMax           DO i=iMin,iMax
285            gUtmp(i,j) = gU(i,j,k,bi,bj)             gUtmp(i,j) = gU(i,j,k,bi,bj)
286            gVtmp(i,j) = gV(i,j,k,bi,bj)             gVtmp(i,j) = gV(i,j,k,bi,bj)
287           ENDDO           ENDDO
288          ENDDO          ENDDO
289  #ifdef ALLOW_CD_CODE  #ifdef ALLOW_CD_CODE
290        ENDIF        ENDIF
291  #endif  #endif /* ALLOW_CD_CODE */
292    
293  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
294        IF (.NOT. vectorInvariantMomentum        IF ( .NOT. vectorInvariantMomentum
295       &    .AND. nonlinFreeSurf.GT.1) THEN       &     .AND. nonlinFreeSurf.GT.1 ) THEN
296         IF (select_rStar.GT.0) THEN         IF ( select_rStar.GT.0 ) THEN
297    # ifndef DISABLE_RSTAR_CODE
298          DO j=jMin,jMax          DO j=jMin,jMax
299           DO i=iMin,iMax           DO i=iMin,iMax
300             gUtmp(i,j) = gUtmp(i,j)/rStarExpW(i,j,bi,bj)             gUtmp(i,j) = gUtmp(i,j)/rStarExpW(i,j,bi,bj)
301             gVtmp(i,j) = gVtmp(i,j)/rStarExpS(i,j,bi,bj)             gVtmp(i,j) = gVtmp(i,j)/rStarExpS(i,j,bi,bj)
302           ENDDO           ENDDO
303          ENDDO          ENDDO
304    # endif /* DISABLE_RSTAR_CODE */
305           ELSEIF ( selectSigmaCoord.NE.0 ) THEN
306    # ifndef DISABLE_SIGMA_CODE
307            DO j=jMin,jMax
308             DO i=iMin,iMax
309               gUtmp(i,j) = gUtmp(i,j)
310         &        /( 1. _d 0 + dEtaWdt(i,j,bi,bj)*deltaTfreesurf
311         &                    *dBHybSigF(k)*recip_drF(k)
312         &                    *recip_hFacW(i,j,k,bi,bj)
313         &         )
314               gVtmp(i,j) = gVtmp(i,j)
315         &        /( 1. _d 0 + dEtaSdt(i,j,bi,bj)*deltaTfreesurf
316         &                    *dBHybSigF(k)*recip_drF(k)
317         &                    *recip_hFacS(i,j,k,bi,bj)
318         &         )
319             ENDDO
320            ENDDO
321    # endif /* DISABLE_SIGMA_CODE */
322         ELSE         ELSE
323          DO j=jMin,jMax          DO j=jMin,jMax
324           DO i=iMin,iMax           DO i=iMin,iMax
325            IF ( k.EQ.ksurfW(i,j,bi,bj) ) THEN            IF ( k.EQ.kSurfW(i,j,bi,bj) ) THEN
326             gUtmp(i,j) = gUtmp(i,j)             gUtmp(i,j) = gUtmp(i,j)
327       &         *hFacW(i,j,k,bi,bj)/hFac_surfW(i,j,bi,bj)       &         *_hFacW(i,j,k,bi,bj)/hFac_surfW(i,j,bi,bj)
328            ENDIF            ENDIF
329            IF ( k.EQ.ksurfS(i,j,bi,bj) ) THEN            IF ( k.EQ.kSurfS(i,j,bi,bj) ) THEN
330             gVtmp(i,j) = gVtmp(i,j)             gVtmp(i,j) = gVtmp(i,j)
331       &         *hFacS(i,j,k,bi,bj)/hFac_surfS(i,j,bi,bj)       &         *_hFacS(i,j,k,bi,bj)/hFac_surfS(i,j,bi,bj)
332            ENDIF            ENDIF
333           ENDDO           ENDDO
334          ENDDO          ENDDO
# Line 259  C--   Dissipation term outside the Adams Line 348  C--   Dissipation term outside the Adams
348          ENDDO          ENDDO
349        ENDIF        ENDIF
350    
351    #ifdef ALLOW_NONHYDROSTATIC
352    C-- explicit part of the NH pressure gradient is added here
353          IF ( use3Dsolver .AND. implicitNHPress.NE.1. _d 0 ) THEN
354            nhFac = pfFacMom*(1. _d 0 - implicitNHPress)
355         &         *recip_deepFacC(k)*recip_rhoFacC(k)
356           IF ( exactConserv ) THEN
357            DO j=jMin,jMax
358             DO i=iMin,iMax
359              gUtmp(i,j) = gUtmp(i,j)
360         &               - nhFac*_recip_dxC(i,j,bi,bj)*
361         &                ( (phi_nh(i,j,k,bi,bj)-phi_nh(i-1,j,k,bi,bj))
362         &                 -( dPhiNH(i,j,bi,bj) - dPhiNH(i-1,j,bi,bj) )
363         &                )
364              gVtmp(i,j) = gVtmp(i,j)
365         &               - nhFac*_recip_dyC(i,j,bi,bj)*
366         &                ( (phi_nh(i,j,k,bi,bj)-phi_nh(i,j-1,k,bi,bj))
367         &                 -( dPhiNH(i,j,bi,bj) - dPhiNH(i,j-1,bi,bj) )
368         &                )
369             ENDDO
370            ENDDO
371           ELSE
372            DO j=jMin,jMax
373             DO i=iMin,iMax
374              gUtmp(i,j) = gUtmp(i,j)
375         &               - nhFac*_recip_dxC(i,j,bi,bj)*
376         &                  (phi_nh(i,j,k,bi,bj)-phi_nh(i-1,j,k,bi,bj))
377              gVtmp(i,j) = gVtmp(i,j)
378         &               - nhFac*_recip_dyC(i,j,bi,bj)*
379         &                  (phi_nh(i,j,k,bi,bj)-phi_nh(i,j-1,k,bi,bj))
380             ENDDO
381            ENDDO
382           ENDIF
383          ENDIF
384    #endif /* ALLOW_NONHYDROSTATIC */
385    
386  C     Step forward zonal velocity (store in Gu)  C     Step forward zonal velocity (store in Gu)
387        DO j=jMin,jMax        DO j=jMin,jMax
388          DO i=iMin,iMax          DO i=iMin,iMax
389            gU(i,j,k,bi,bj) = uVel(i,j,k,bi,bj)            gU(i,j,k,bi,bj) = uVel(i,j,k,bi,bj)
390       &     +deltaTmom*(       &     +deltaTmom*(
391       &         gUtmp(i,j)       &         gUtmp(i,j)
392       &       - psFac*phiSurfX(i,j)       &       - psFac*phiSurfX(i,j)
393       &       - phxFac*dPhiHydX(i,j)       &       - phxFac*dPhiHydX(i,j)
# Line 284  C     Step forward meridional velocity ( Line 408  C     Step forward meridional velocity (
408        ENDDO        ENDDO
409    
410  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
411          IF ( externForcDiagIsOn ) THEN
412            CALL DIAGNOSTICS_FILL( gUext,'Um_Ext  ',k,1,2,bi,bj,myThid )
413            CALL DIAGNOSTICS_FILL( gVext,'Vm_Ext  ',k,1,2,bi,bj,myThid )
414          ENDIF
415  #ifdef ALLOW_CD_CODE  #ifdef ALLOW_CD_CODE
416        IF ( useCDscheme .AND. useDiagnostics ) THEN        IF ( useCDscheme .AND. useDiagnostics ) THEN
417            CALL DIAGNOSTICS_FILL(guCor,'Um_Cori ',k,1,2,bi,bj,myThid)          CALL DIAGNOSTICS_FILL( guCor,'Um_Cori ',k,1,2,bi,bj,myThid )
418            CALL DIAGNOSTICS_FILL(gvCor,'Vm_Cori ',k,1,2,bi,bj,myThid)          CALL DIAGNOSTICS_FILL( gvCor,'Vm_Cori ',k,1,2,bi,bj,myThid )
419        ENDIF        ENDIF
420  #endif /* ALLOW_CD_CODE */  #endif /* ALLOW_CD_CODE */
421  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */

Legend:
Removed from v.1.39  
changed lines
  Added in v.1.52

  ViewVC Help
Powered by ViewVC 1.1.22