adve_orig.h

References to this file elsewhere.
1 !*********************************************************************** 
2       SUBROUTINE ADVE(NTSD,DT,DETA1,DETA2,PDTOP                         &
3      &               ,CURV,F,FAD,F4D,EM_LOC,EMT_LOC,EN,ENT,DX,DY        &
4      &               ,HTM,HBM2,VTM,VBM2,LMH,LMV                         &
5      &               ,T,U,V,PDSLO,TOLD,UOLD,VOLD                        &
6      &               ,PETDT,UPSTRM                                      &
7      &               ,FEW,FNS,FNE,FSE                                   &
8      &               ,ADT,ADU,ADV                                       &
9      &               ,N_IUP_H,N_IUP_V                                   &
10      &               ,N_IUP_ADH,N_IUP_ADV                               &
11      &               ,IUP_H,IUP_V,IUP_ADH,IUP_ADV                       &
12      &               ,IHE,IHW,IVE,IVW,INDX3_WRK                         &
13      &               ,IDS,IDE,JDS,JDE,KDS,KDE                           &
14      &               ,IMS,IME,JMS,JME,KMS,KME                           &
15      &               ,ITS,ITE,JTS,JTE,KTS,KTE)
16 !***********************************************************************
17 !$$$  SUBPROGRAM DOCUMENTATION BLOCK
18 !                .      .    .     
19 ! SUBPROGRAM:    ADVE        HORIZONTAL AND VERTICAL ADVECTION
20 !   PRGRMMR: JANJIC          ORG: W/NP22     DATE: 93-10-28       
21 !     
22 ! ABSTRACT:
23 !     ADVE CALCULATES THE CONTRIBUTION OF THE HORIZONTAL AND VERTICAL
24 !     ADVECTION TO THE TENDENCIES OF TEMPERATURE AND WIND AND THEN
25 !     UPDATES THOSE VARIABLES.
26 !     THE JANJIC ADVECTION SCHEME FOR THE ARAKAWA E GRID IS USED
27 !     FOR ALL VARIABLES INSIDE THE FIFTH ROW.  AN UPSTREAM SCHEME
28 !     IS USED ON ALL VARIABLES IN THE THIRD, FOURTH, AND FIFTH
29 !     OUTERMOST ROWS.  THE ADAMS-BASHFORTH TIME SCHEME IS USED.
30 !     
31 ! PROGRAM HISTORY LOG:
32 !   87-06-??  JANJIC     - ORIGINATOR
33 !   95-03-25  BLACK      - CONVERSION FROM 1-D TO 2-D IN HORIZONTAL
34 !   96-03-28  BLACK      - ADDED EXTERNAL EDGE
35 !   98-10-30  BLACK      - MODIFIED FOR DISTRIBUTED MEMORY
36 !   99-07-    JANJIC     - CONVERTED TO ADAMS-BASHFORTH SCHEME
37 !                          COMBINING HORIZONTAL AND VERTICAL ADVECTION
38 !   02-02-04  BLACK      - ADDED VERTICAL CFL CHECK
39 !   02-02-05  BLACK      - CONVERTED TO WRF FORMAT
40 !   02-08-29  MICHALAKES - CONDITIONAL COMPILATION OF MPI
41 !                          CONVERT TO GLOBAL INDEXING
42 !   02-09-06  WOLFE      - MORE CONVERSION TO GLOBAL INDEXING
43 !   04-05-29  JANJIC,BLACK - CRANK-NICHOLSON VERTICAL ADVECTION
44 !     
45 ! USAGE: CALL ADVE FROM SUBROUTINE SOLVE_RUNSTREAM
46 !   INPUT ARGUMENT LIST:
47 !  
48 !   OUTPUT ARGUMENT LIST: 
49 !     
50 !   OUTPUT FILES:
51 !     NONE
52 !     
53 !   SUBPROGRAMS CALLED:
54 !  
55 !     UNIQUE: NONE
56 !  
57 !     LIBRARY: NONE
58 !  
59 ! ATTRIBUTES:
60 !   LANGUAGE: FORTRAN 90
61 !   MACHINE : IBM SP
62 !$$$  
63 !***********************************************************************
64 !-----------------------------------------------------------------------
65 !
66       IMPLICIT NONE
67 !
68 !-----------------------------------------------------------------------
69 !
70       INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE                     &
71      &                     ,IMS,IME,JMS,JME,KMS,KME                     &
72      &                     ,ITS,ITE,JTS,JTE,KTS,KTE
73 !
74       INTEGER,DIMENSION(JMS:JME),INTENT(IN) :: IHE,IHW,IVE,IVW
75       INTEGER,DIMENSION(JMS:JME),INTENT(IN) :: N_IUP_H,N_IUP_V          &
76      &                                        ,N_IUP_ADH,N_IUP_ADV
77       INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: IUP_H,IUP_V      &
78      &                                                ,IUP_ADH,IUP_ADV  &
79      &                                                ,LMH,LMV
80 !
81 !***  NMM_MAX_DIM is set in configure.wrf and must agree with
82 !***  the value of dimspec q in the Registry/Registry
83 !
84       INTEGER,DIMENSION(-3:3,NMM_MAX_DIM,0:6),INTENT(IN) :: INDX3_WRK
85 !
86       INTEGER,INTENT(IN) :: NTSD
87 !
88       REAL,INTENT(IN) :: DT,DY,EN,ENT,F4D,PDTOP
89 !
90       REAL,DIMENSION(NMM_MAX_DIM),INTENT(IN) :: EM_LOC,EMT_LOC
91 !
92       REAL,DIMENSION(KMS:KME),INTENT(IN) :: DETA1,DETA2
93 !
94       REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: CURV,DX,F,FAD,HBM2  &
95      &                                             ,PDSLO,VBM2
96 !
97       REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: PETDT
98 !
99       REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: HTM,VTM
100 !
101       REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(INOUT) :: T,TOLD   &
102      &                                                        ,U,UOLD   &
103      &                                                        ,V,VOLD
104 !
105       REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(OUT) :: ADT,ADU    &
106      &                                                      ,ADV        &
107      &                                                      ,FEW,FNE    &
108      &                                                      ,FNS,FSE
109 !
110 !-----------------------------------------------------------------------
111 !
112 !***  LOCAL VARIABLES
113 !
114       LOGICAL :: UPSTRM
115 !
116       INTEGER :: I,IEND,IFP,IFQ,II,IPQ,ISP,ISQ,ISTART                   &
117      &          ,IUP_ADH_J,IVH,IVL                                      &
118      &          ,J,J1,JA,JAK,JEND,JGLOBAL,JJ,JKNT,JP2,JSTART            &
119      &          ,K,KNTI_ADH,KSTART,KSTOP,LMHK,LMVK                      &
120      &          ,N,N_IUPH_J,N_IUPADH_J,N_IUPADV_J
121 !
122       INTEGER :: MY_IS_GLB,MY_IE_GLB,MY_JS_GLB,MY_JE_GLB
123 !
124       INTEGER :: J0_P3,J0_P2,J0_P1,J0_00,J0_M1,J1_P2,J1_P1,J1_00,J1_M1  &
125      &          ,J2_P1,J2_00,J2_M1,J3_P2,J3_P1,J3_00                    &
126      &          ,J4_P1,J4_00,J4_M1,J5_00,J5_M1,J6_P1,J6_00
127 !
128       INTEGER,DIMENSION(ITS-5:ITE+5,KTS:KTE) :: ISPA,ISQA
129 !
130       REAL :: ARRAY3_X,CFT,CFU,CFV,CMT,CMU,CMV                          &
131      &       ,DPDE_P3,DTE,DTQ                                           &
132      &       ,F0,F1,F2,F3,FEW_00,FEW_P1,FNE_X,FNS_P1,FNS_X,FPP,FSE_X    &
133      &       ,HM,PDOP,PDOPU,PDOPV,PP                                    &
134      &       ,PVVLO,PVVLOU,PVVLOV,PVVUP,PVVUPU,PVVUPV                   &
135      &       ,QP,RDP,RDPD,RDPDX,RDPDY,RDPU,RDPV                         &
136      &       ,T_UP,TEMPA,TEMPB,TTA,TTB,U_UP,UDY_P1,UDY_X                &
137      &       ,VXD_X,VDX_P2,V_UP,VDX_X,VM,VTA,VUA,VVA                    &
138      &       ,VVLO,VVLOU,VVLOV,VVUP,VVUPU,VVUPV
139 !
140       REAL,DIMENSION(ITS-5:ITE+5,KTS:KTE) :: ARRAY0,ARRAY1              &
141      &                                      ,ARRAY2,ARRAY3              &
142      &                                      ,VAD_TEND_T,VAD_TEND_U      &
143      &                                      ,VAD_TEND_V
144 !
145       REAL,DIMENSION(ITS-5:ITE+5,KTS:KTE) :: TEW,UEW,VEW
146 !
147       REAL,DIMENSION(KTS:KTE) :: CRT,CRU,CRV,DETA1_PDTOP                &
148      &                          ,RCMT,RCMU,RCMV,RSTT,RSTU,RSTV,TN,UN    &
149      &                          ,VAD_TNDX_T,VAD_TNDX_U,VAD_TNDX_V,VN
150 !
151       REAL,DIMENSION(ITS-5:ITE+5,-1:1) :: PETDTK
152 !
153       REAL,DIMENSION(ITS-5:ITE+5) :: TDN,UDN,VDN
154 !
155 !-----------------------------------------------------------------------
156 !
157 !***  TYPE 0 WORKING ARRAY
158 !
159       REAL,DIMENSION(ITS-5:ITE+5,KMS:KME,-3:3) :: DPDE
160 !
161 !***  TYPE 1 WORKING ARRAY
162 !
163       REAL,DIMENSION(ITS-5:ITE+5,KMS:KME,-2:2) :: TST,UDY,UST,VDX,VST
164 !
165 !***  TYPE 4 WORKING ARRAY
166 !
167       REAL,DIMENSION(ITS-5:ITE+5,KMS:KME,-1:1) :: TNS,UNS,VNS
168 !
169 !***  TYPE 5 WORKING ARRAY
170 !
171       REAL,DIMENSION(ITS-5:ITE+5,KMS:KME,-1:0) :: TNE,UNE,VNE
172 !
173 !***  TYPE 6 WORKING ARRAY
174 !
175       REAL,DIMENSION(ITS-5:ITE+5,KMS:KME, 0:1) :: TSE,USE,VSE
176 !-----------------------------------------------------------------------
177 !-----------------------------------------------------------------------
178 !***********************************************************************
179 !
180 !                         DPDE      -----  3
181 !                          |                      J Increasing
182 !                          |                        
183 !                          |                            ^
184 !                         FNS       -----  2            |
185 !                          |                            |
186 !                          |                            |
187 !                          |                            |
188 !                         VNS       -----  1            |
189 !                          |
190 !                          |
191 !                          |
192 !                         ADV       -----  0  ------> Current J
193 !                          |
194 !                          |
195 !                          |
196 !                         VNS       ----- -1
197 !                          |
198 !                          |
199 !                          |
200 !                         FNS       ----- -2
201 !                          |
202 !                          |
203 !                          |
204 !                         DPDE      ----- -3
205 !
206 !***********************************************************************
207 !-----------------------------------------------------------------------
208 !-----------------------------------------------------------------------
209 !
210       ISTART=MYIS_P2
211       IEND=MYIE_P2 
212       IF(ITE==IDE)IEND=MYIE-3 
213 !
214       DTQ=DT*0.25
215       DTE=DT*(0.5*0.25)
216 !***
217 !***  INITIALIZE SOME WORKING ARRAYS TO ZERO
218 !***
219       DO K=KTS,KTE
220       DO I=ITS-5,ITE+5
221         TEW(I,K)=0.
222         UEW(I,K)=0.
223         VEW(I,K)=0.
224       ENDDO
225       ENDDO
226 !
227 !***  TYPE 0
228 !
229       DO N=-3,3
230         DO K=KTS,KTE
231         DO I=ITS-5,ITE+5
232           DPDE(I,K,N)=0.
233         ENDDO
234         ENDDO
235       ENDDO
236 !
237 !***  TYPE 1
238 !
239       DO N=-2,2
240         DO K=KTS,KTE
241         DO I=ITS-5,ITE+5
242           TST(I,K,N)=0.
243           UST(I,K,N)=0.
244           VST(I,K,N)=0.
245           UDY(I,K,N)=0.
246           VDX(I,K,N)=0.
247         ENDDO
248         ENDDO
249       ENDDO
250 !
251 !***  TYPES 5 AND 6
252 !
253       DO N=-1,0
254         DO K=KTS,KTE
255         DO I=ITS-5,ITE+5
256           TNE(I,K,N)=0.
257           TSE(I,K,N+1)=0.
258           UNE(I,K,N)=0.
259           USE(I,K,N+1)=0.
260           VNE(I,K,N)=0.
261           VSE(I,K,N+1)=0.
262         ENDDO
263         ENDDO
264       ENDDO
265 !-----------------------------------------------------------------------
266 !***
267 !***  PRECOMPUTE DETA1 TIMES PDTOP.
268 !***
269 !-----------------------------------------------------------------------
270 !
271       DO K=KTS,KTE
272         DETA1_PDTOP(K)=DETA1(K)*PDTOP
273       ENDDO
274 !-----------------------------------------------------------------------
275 !***
276 !***  WE NEED THE STARTING AND ENDING J FOR THIS TASK'S INTEGRATION
277 !***
278       JSTART=MYJS2
279       JEND=MYJE2
280 !
281 !
282 !-----------------------------------------------------------------------
283 !
284 !***  START THE HORIZONTAL ADVECTION IN THE INITIAL SOUTHERN SLABS.
285 !
286 !-----------------------------------------------------------------------
287 !
288       DO J=-2,1
289         JJ=JSTART+J
290         DO K=KTS,KTE
291         DO I=MYIS_P4,MYIE_P4
292           TST(I,K,J)=T(I,K,JJ)*FFC+TOLD(I,K,JJ)*FBC
293           UST(I,K,J)=U(I,K,JJ)*FFC+UOLD(I,K,JJ)*FBC
294           VST(I,K,J)=V(I,K,JJ)*FFC+VOLD(I,K,JJ)*FBC
295         ENDDO
296         ENDDO
297       ENDDO
298 !
299 !-----------------------------------------------------------------------
300 !***  MARCH NORTHWARD THROUGH THE SOUTHERNMOST SLABS TO BEGIN
301 !***  FILLING THE MAIN WORKING ARRAYS WHICH ARE MULTI-DIMENSIONED
302 !***  IN J BECAUSE THEY ARE DIFFERENCED OR AVERAGED IN J.
303 !***  ONLY THE NORTHERNMOST OF EACH OF THE WORKING ARRAYS WILL BE
304 !***  FILLED IN THE PRIMARY INTEGRATION SECTION.
305 !-----------------------------------------------------------------------
306 !
307       J1=-3
308       IF(JTS==JDS)J1=-2  ! Cannot go 3 south from J=2 for south tasks
309 !
310       DO J=J1,2
311         JJ=JSTART+J
312 !
313         DO K=KTS,KTE
314         DO I=MYIS_P4,MYIE_P4
315           DPDE(I,K,J)=DETA1_PDTOP(K)+DETA2(K)*PDSLO(I,JJ)
316         ENDDO
317         ENDDO
318 !
319       ENDDO
320 !
321 !-----------------------------------------------------------------------
322       DO J=-2,1
323         JJ=JSTART+J
324 !
325         DO K=KTS,KTE
326         DO I=MYIS_P4,MYIE_P4
327           UDY(I,K,J)=U(I,K,JJ)*DY
328           VDX_X=V(I,K,JJ)*DX(I,JJ)
329           FNS(I,K,JJ)=VDX_X*(DPDE(I,K,J-1)+DPDE(I,K,J+1))
330           VDX(I,K,J)=VDX_X
331         ENDDO
332         ENDDO
333 !
334       ENDDO
335 !
336 !-----------------------------------------------------------------------
337       DO J=-2,0
338         JJ=JSTART+J
339 !
340         DO K=KTS,KTE
341         DO I=MYIS_P3,MYIE_P3
342           TEMPA=(UDY(I+IHE(JJ),K,J)+VDX(I+IHE(JJ),K,J))                 &
343      &         +(UDY(I,K,J+1)      +VDX(I,K,J+1))
344           FNE(I,K,JJ)=TEMPA*(DPDE(I,K,J)+DPDE(I+IHE(JJ),K,J+1))
345         ENDDO
346         ENDDO
347 !
348       ENDDO
349 !
350 !-----------------------------------------------------------------------
351       DO J=-1,1
352         JJ=JSTART+J
353 !
354         DO K=KTS,KTE
355         DO I=MYIS_P3,MYIE_P3
356           TEMPB=(UDY(I+IHE(JJ),K,J)-VDX(I+IHE(JJ),K,J))                 &
357      &         +(UDY(I,K,J-1)      -VDX(I,K,J-1))
358           FSE(I,K,JJ)=TEMPB*(DPDE(I,K,J)+DPDE(I+IHE(JJ),K,J-1))
359         ENDDO
360         ENDDO
361 !
362       ENDDO
363 !
364 !-----------------------------------------------------------------------
365       DO J=-1,0
366         JJ=JSTART+J
367 !
368         DO K=KTS,KTE
369         DO I=MYIS1_P3,MYIE1_P3
370           FNS_X=FNS(I,K,JJ)
371           TNS(I,K,J)=FNS_X*(TST(I,K,J+1)-TST(I,K,J-1))
372 !
373           UDY_X=U(I,K,JJ)*DY
374           FEW(I,K,JJ)=UDY_X*(DPDE(I+IVW(JJ),K,J)+DPDE(I+IVE(JJ),K,J))   
375         ENDDO
376         ENDDO
377 !
378         DO K=KTS,KTE
379         DO I=MYIS1_P4,MYIE1_P4
380           UNS(I,K,J)=(FNS(I+IHW(JJ),K,JJ)+FNS(I+IHE(JJ),K,JJ))          &
381      &              *(UST(I,K,J+1)-UST(I,K,J-1))
382           VNS(I,K,J)=(FNS(I,K,JJ-1)+FNS(I,K,JJ+1))                      &
383      &              *(VST(I,K,J+1)-VST(I,K,J-1))
384         ENDDO
385         ENDDO
386 !
387       ENDDO
388 !
389 !-----------------------------------------------------------------------
390       JJ=JSTART-1
391 !
392       DO K=KTS,KTE
393       DO I=MYIS1_P2,MYIE1_P2
394         FNE_X=FNE(I,K,JJ)
395         TNE(I,K,-1)=FNE_X*(TST(I+IHE(JJ),K,0)-TST(I,K,-1))
396 !
397         FSE_X=FSE(I,K,JJ+1)
398         TSE(I,K,0)=FSE_X*(TST(I+IHE(JJ+1),K,-1)-TST(I,K,0))
399 !
400         UNE(I,K,-1)=(FNE(I+IVW(JJ),K,JJ)+FNE(I+IVE(JJ),K,JJ))           &
401      &             *(UST(I+IVE(JJ),K,0)-UST(I,K,-1))
402         USE(I,K,0)=(FSE(I+IVW(JJ+1),K,JJ+1)+FSE(I+IVE(JJ+1),K,JJ+1))    &
403      &            *(UST(I+IVE(JJ+1),K,-1)-UST(I,K,0))
404         VNE(I,K,-1)=(FNE(I,K,JJ-1)+FNE(I,K,JJ+1))                       &
405      &             *(VST(I+IVE(JJ),K,0)-VST(I,K,-1))
406         VSE(I,K,0)=(FSE(I,K,JJ)+FSE(I,K,JJ+2))                          &
407      &            *(VST(I+IVE(JJ+1),K,-1)-VST(I,K,0))
408       ENDDO
409       ENDDO
410 !
411       JKNT=0
412 !
413 !-----------------------------------------------------------------------
414 !-----------------------------------------------------------------------
415 !
416       main_integration : DO J=JSTART,JEND
417 !
418 !-----------------------------------------------------------------------
419 !-----------------------------------------------------------------------
420 !***
421 !***  SET THE 3RD INDEX IN THE WORKING ARRAYS (SEE SUBROUTINE INIT
422 !***                                           AND PFDHT DIAGRAMS)
423 !***
424 !***  J[TYPE]_NN WHERE "TYPE" IS THE WORKING ARRAY TYPE SEEN IN THE
425 !***  LOCAL DECLARATION ABOVE (DEPENDENT UPON THE J EXTENT) AND
426 !***  NN IS THE NUMBER OF ROWS NORTH OF THE CENTRAL ROW WHOSE J IS
427 !***  THE CURRENT VALUE OF THE main_integration LOOP.
428 !***  (P3 denotes +3, M1 denotes -1, etc.)
429 !***
430 
431 !
432 ! John and Tom both think this is all right, even for tiles,
433 ! as long as the slab arrays being indexed by these things
434 ! are locally defined.
435 !
436       JKNT=JKNT+1
437 !
438       J0_P3=INDX3_WRK(3,JKNT,0)
439       J0_P2=INDX3_WRK(2,JKNT,0)
440       J0_P1=INDX3_WRK(1,JKNT,0)
441       J0_00=INDX3_WRK(0,JKNT,0)
442       J0_M1=INDX3_WRK(-1,JKNT,0)
443 !
444       J1_P2=INDX3_WRK(2,JKNT,1)
445       J1_P1=INDX3_WRK(1,JKNT,1)
446       J1_00=INDX3_WRK(0,JKNT,1)
447       J1_M1=INDX3_WRK(-1,JKNT,1)
448 !
449       J2_P1=INDX3_WRK(1,JKNT,2)
450       J2_00=INDX3_WRK(0,JKNT,2)
451       J2_M1=INDX3_WRK(-1,JKNT,2)
452 !
453       J3_P2=INDX3_WRK(2,JKNT,3)
454       J3_P1=INDX3_WRK(1,JKNT,3)
455       J3_00=INDX3_WRK(0,JKNT,3)
456 !
457       J4_P1=INDX3_WRK(1,JKNT,4)
458       J4_00=INDX3_WRK(0,JKNT,4)
459       J4_M1=INDX3_WRK(-1,JKNT,4)
460 !
461       J5_00=INDX3_WRK(0,JKNT,5)
462       J5_M1=INDX3_WRK(-1,JKNT,5)
463 !
464       J6_P1=INDX3_WRK(1,JKNT,6)
465       J6_00=INDX3_WRK(0,JKNT,6)
466 !
467       MY_IS_GLB=1  ! make this a noop for global indexing
468       MY_IE_GLB=1  ! make this a noop for global indexing
469       MY_JS_GLB=1  ! make this a noop for global indexing
470       MY_JE_GLB=1  ! make this a noop for global indexing
471 !  
472 !-----------------------------------------------------------------------
473 !***  THE WORKING ARRAYS FOR THE PRIMARY VARIABLES
474 !-----------------------------------------------------------------------
475 !
476       DO K=KTS,KTE
477       DO I=MYIS_P4,MYIE_P4
478         TST(I,K,J1_P2)=T(I,K,J+2)*FFC+TOLD(I,K,J+2)*FBC
479         UST(I,K,J1_P2)=U(I,K,J+2)*FFC+UOLD(I,K,J+2)*FBC
480         VST(I,K,J1_P2)=V(I,K,J+2)*FFC+VOLD(I,K,J+2)*FBC
481       ENDDO
482       ENDDO
483 !
484 !-----------------------------------------------------------------------
485 !***  MASS FLUXES AND MASS POINT ADVECTION COMPONENTS
486 !-----------------------------------------------------------------------
487 !
488       DO K=KTS,KTE
489       DO I=MYIS_P4,MYIE_P4
490 !
491 !-----------------------------------------------------------------------
492 !***  THE NS AND EW FLUXES IN THE FOLLOWING LOOP ARE ON V POINTS
493 !***  FOR T.
494 !-----------------------------------------------------------------------
495 !
496         DPDE_P3=DETA1_PDTOP(K)+DETA2(K)*PDSLO(I,J+3)
497         DPDE(I,K,J0_P3)=DPDE_P3
498 !
499 !-----------------------------------------------------------------------
500         UDY(I,K,J1_P2)=U(I,K,J+2)*DY
501         VDX_P2=V(I,K,J+2)*DX(I,J+2)
502         VDX(I,K,J1_P2)=VDX_P2
503         FNS(I,K,J+2)=VDX_P2*(DPDE(I,K,J0_P1)+DPDE_P3)
504       ENDDO
505       ENDDO
506 !
507 !-----------------------------------------------------------------------
508       DO K=KTS,KTE
509       DO I=MYIS_P3,MYIE_P3
510         TEMPA=(UDY(I+IHE(J+1),K,J1_P1)+VDX(I+IHE(J+1),K,J1_P1))         &
511      &       +(UDY(I,K,J1_P2)         +VDX(I,K,J1_P2))
512         FNE(I,K,J+1)=TEMPA*(DPDE(I,K,J0_P1)+DPDE(I+IHE(J+1),K,J0_P2))
513 !
514 !-----------------------------------------------------------------------
515         TEMPB=(UDY(I+IHE(J+2),K,J1_P2)-VDX(I+IHE(J+2),K,J1_P2))         &
516      &       +(UDY(I,K,J1_P1)         -VDX(I,K,J1_P1))
517         FSE(I,K,J+2)=TEMPB*(DPDE(I,K,J0_P2)+DPDE(I+IHE(J),K,J0_P1))
518 !
519 !-----------------------------------------------------------------------
520         FNS_P1=FNS(I,K,J+1)
521         TNS(I,K,J4_P1)=FNS_P1*(TST(I,K,J1_P2)-TST(I,K,J1_00))
522 !
523 !-----------------------------------------------------------------------
524         UDY_P1=U(I,K,J+1)*DY
525         FEW(I,K,J+1)=UDY_P1*(DPDE(I+IVW(J+1),K,J0_P1)                   &
526      &                        +DPDE(I+IVE(J+1),K,J0_P1))
527         FEW_00=FEW(I,K,J)
528         TEW(I,K)=FEW_00*(TST(I+IVE(J),K,J1_00)-TST(I+IVW(J),K,J1_00))
529 !
530 !-----------------------------------------------------------------------
531 !***  THE NE AND SE FLUXES ARE ASSOCIATED WITH H POINTS
532 !***  (ACTUALLY JUST TO THE NE AND SE OF EACH H POINT).
533 !-----------------------------------------------------------------------
534 !
535         FNE_X=FNE(I,K,J)
536         TNE(I,K,J5_00)=FNE_X*(TST(I+IHE(J),K,J1_P1)-TST(I,K,J1_00))
537 !
538         FSE_X=FSE(I,K,J+1)
539         TSE(I,K,J6_P1)=FSE_X*(TST(I+IHE(J+1),K,J1_00)-TST(I,K,J1_P1))
540       ENDDO
541       ENDDO
542 !
543 !-----------------------------------------------------------------------
544 !***  CALCULATION OF MOMENTUM ADVECTION COMPONENTS
545 !-----------------------------------------------------------------------
546 !-----------------------------------------------------------------------
547 !***  THE NS AND EW FLUXES ARE ON H POINTS FOR U AND V.
548 !-----------------------------------------------------------------------
549 !
550       DO K=KTS,KTE
551       DO I=MYIS_P2,MYIE_P2
552         UEW(I,K)=(FEW(I+IHW(J),K,J)+FEW(I+IHE(J),K,J))                  &
553      &          *(UST(I+IHE(J),K,J1_00)-UST(I+IHW(J),K,J1_00))
554         UNS(I,K,J4_P1)=(FNS(I+IHW(J+1),K,J+1)                           &
555      &                 +FNS(I+IHE(J+1),K,J+1))                          &
556      &                *(UST(I,K,J1_P2)-UST(I,K,J1_00))
557         VEW(I,K)=(FEW(I,K,J-1)+FEW(I,K,J+1))                            &
558      &          *(VST(I+IHE(J),K,J1_00)-VST(I+IHW(J),K,J1_00))
559         VNS(I,K,J4_P1)=(FNS(I,K,J)+FNS(I,K,J+2))                        &
560      &                *(VST(I,K,J1_P2)-VST(I,K,J1_00))
561 !
562 !-----------------------------------------------------------------------
563 !***  THE FOLLOWING NE AND SE FLUXES ARE TIED TO V POINTS AND ARE
564 !***  LOCATED JUST TO THE NE AND SE OF THE GIVEN I,J.
565 !-----------------------------------------------------------------------
566 !
567         UNE(I,K,J5_00)=(FNE(I+IVW(J),K,J)+FNE(I+IVE(J),K,J))            &
568      &                *(UST(I+IVE(J),K,J1_P1)-UST(I,K,J1_00))
569         USE(I,K,J6_P1)=(FSE(I+IVW(J+1),K,J+1)                           &
570      &                 +FSE(I+IVE(J+1),K,J+1))                          &
571      &                *(UST(I+IVE(J+1),K,J1_00)-UST(I,K,J1_P1))
572         VNE(I,K,J5_00)=(FNE(I,K,J-1)+FNE(I,K,J+1))                      &
573      &                *(VST(I+IVE(J),K,J1_P1)-VST(I,K,J1_00))
574         VSE(I,K,J6_P1)=(FSE(I,K,J)+FSE(I,K,J+2))                        &
575      &                *(VST(I+IVE(J+1),K,J1_00)-VST(I,K,J1_P1))
576       ENDDO
577       ENDDO
578 !
579 !-----------------------------------------------------------------------
580 !***  COMPUTE THE ADVECTION TENDENCIES FOR T.
581 !***  THE AD ARRAYS ARE ON H POINTS.
582 !***  SKIP TO UPSTREAM IF THESE ROWS HAVE ONLY UPSTREAM POINTS.
583 !-----------------------------------------------------------------------
584 !
585       
586       JGLOBAL=J+MY_JS_GLB-1
587       IF(JGLOBAL>=6.AND.JGLOBAL<=JDE-5)THEN
588 !
589         JJ=J+MY_JS_GLB-1   ! okay because MY_JS_GLB is 1
590         IF(ITS==IDS)ISTART=3+MOD(JJ,2)  ! need to think about this
591                                         ! more in terms of how to 
592                                         ! convert to global indexing
593 !
594         DO K=KTS,KTE
595         DO I=ISTART,IEND
596           RDPD=1./DPDE(I,K,J0_00)
597 !
598           ADT(I,K,J)=(TEW(I+IHW(J),K)+TEW(I+IHE(J),K)                   &
599      &               +TNS(I,K,J4_M1)+TNS(I,K,J4_P1)                     &
600      &               +TNE(I+IHW(J),K,J5_M1)+TNE(I,K,J5_00)              &
601      &               +TSE(I,K,J6_00)+TSE(I+IHW(J),K,J6_P1))             &
602      &               *RDPD*FAD(I,J)
603 !
604         ENDDO
605         ENDDO
606 !
607 !-----------------------------------------------------------------------
608 !***  COMPUTE THE ADVECTION TENDENCIES FOR U AND V.
609 !***  THE AD ARRAYS ARE ON VELOCITY POINTS.
610 !-----------------------------------------------------------------------
611 !
612         IF(ITS==IDS)ISTART=3+MOD(JJ+1,2)
613 !
614         DO K=KTS,KTE
615         DO I=ISTART,IEND
616           RDPDX=1./(DPDE(I+IVW(J),K,J0_00)+DPDE(I+IVE(J),K,J0_00))
617           RDPDY=1./(DPDE(I,K,J0_M1)+DPDE(I,K,J0_P1))
618 !
619           ADU(I,K,J)=(UEW(I+IVW(J),K)+UEW(I+IVE(J),K)                   &
620      &               +UNS(I,K,J4_M1)+UNS(I,K,J4_P1)                     &
621      &               +UNE(I+IVW(J),K,J5_M1)+UNE(I,K,J5_00)              &
622      &               +USE(I,K,J6_00)+USE(I+IVW(J),K,J6_P1))             &
623      &               *RDPDX*FAD(I+IVW(J),J)
624 !
625           ADV(I,K,J)=(VEW(I+IVW(J),K)+VEW(I+IVE(J),K)                   &
626      &               +VNS(I,K,J4_M1)+VNS(I,K,J4_P1)                     &
627      &               +VNE(I+IVW(J),K,J5_M1)+VNE(I,K,J5_00)              &
628      &               +VSE(I,K,J6_00)+VSE(I+IVW(J),K,J6_P1))             &
629      &               *RDPDY*FAD(I+IVW(J),J)
630 !
631         ENDDO
632         ENDDO
633 !
634       ENDIF
635 !
636 !-----------------------------------------------------------------------
637 !-----------------------------------------------------------------------
638 !
639 !***  END OF JANJIC HORIZONTAL ADVECTION 
640 !
641 !-----------------------------------------------------------------------
642 !-----------------------------------------------------------------------
643 !***  UPSTREAM ADVECTION OF T, U, AND V
644 !-----------------------------------------------------------------------
645 !-----------------------------------------------------------------------
646 !
647       upstream : IF(UPSTRM)THEN
648 !
649 !-----------------------------------------------------------------------
650 !***
651 !***  COMPUTE UPSTREAM COMPUTATIONS ON THIS TASK'S ROWS.
652 !***
653 !-----------------------------------------------------------------------
654 !
655           N_IUPH_J=N_IUP_H(J)   ! See explanation in INIT
656 !
657           DO K=KTS,KTE
658 !
659             DO II=0,N_IUPH_J-1
660               I=IUP_H(IMS+II,J)
661               TTA=EMT_LOC(J)*(UST(I,K,J1_M1)+UST(I+IHW(J),K,J1_00)      &
662      &                       +UST(I+IHE(J),K,J1_00)+UST(I,K,J1_P1))
663               TTB=ENT       *(VST(I,K,J1_M1)+VST(I+IHW(J),K,J1_00)      &
664      &                       +VST(I+IHE(J),K,J1_00)+VST(I,K,J1_P1))
665               PP=-TTA-TTB
666               QP= TTA-TTB
667 !
668               IF(PP<0.)THEN
669                 ISPA(I,K)=-1
670               ELSE
671                 ISPA(I,K)= 1
672               ENDIF
673 !
674               IF(QP<0.)THEN
675                 ISQA(I,K)=-1
676               ELSE
677                 ISQA(I,K)= 1
678               ENDIF
679 !
680               PP=ABS(PP)
681               QP=ABS(QP)
682               ARRAY3_X=PP*QP
683               ARRAY0(I,K)=ARRAY3_X-PP-QP
684               ARRAY1(I,K)=PP-ARRAY3_X
685               ARRAY2(I,K)=QP-ARRAY3_X
686               ARRAY3(I,K)=ARRAY3_X
687             ENDDO
688 !
689           ENDDO
690 !-----------------------------------------------------------------------
691 !
692           N_IUPADH_J=N_IUP_ADH(J) 
693 !
694           DO K=KTS,KTE
695 !
696             KNTI_ADH=1
697             IUP_ADH_J=IUP_ADH(IMS,J)
698 !
699             DO II=0,N_IUPH_J-1
700               I=IUP_H(IMS+II,J)
701 !
702               ISP=ISPA(I,K)
703               ISQ=ISQA(I,K)
704               IFP=(ISP-1)/2
705               IFQ=(-ISQ-1)/2
706               IPQ=(ISP-ISQ)/2
707 !
708               IF(HTM(I+IHE(J)+IFP,K,J+ISP)                              &
709      &          *HTM(I+IHE(J)+IFQ,K,J+ISQ)                              &
710      &          *HTM(I+IPQ,K,J+ISP+ISQ)>0.1)THEN
711                  GO TO 150
712               ENDIF
713 !
714               IF(HTM(I+IHE(J)+IFP,K,J+ISP)                              &
715      &          +HTM(I+IHE(J)+IFQ,K,J+ISQ)                              &
716      &          +HTM(I+IPQ,K,J+ISP+ISQ)<0.1)THEN 
717 !
718                 T(I+IHE(J)+IFP,K,J+ISP)=T(I,K,J)
719                 T(I+IHE(J)+IFQ,K,J+ISQ)=T(I,K,J)
720                 T(I+IPQ,K,J+ISP+ISQ)=T(I,K,J)
721 !
722               ELSEIF                                                    &
723      &        (HTM(I+IHE(J)+IFP,K,J+ISP)+HTM(I+IPQ,K,J+ISP+ISQ)         &
724      &         <0.99)THEN
725 !
726                 T(I+IHE(J)+IFP,K,J+ISP)=T(I,K,J)
727                 T(I+IPQ,K,J+ISP+ISQ)=T(I+IHE(J)+IFQ,K,J+ISQ)
728 !
729               ELSEIF                                                    &
730      &        (HTM(I+IHE(J)+IFQ,K,J+ISQ)+HTM(I+IPQ,K,J+ISP+ISQ)         &
731                <0.99)THEN
732 !
733                 T(I+IHE(J)+IFQ,K,J+ISQ)=T(I,K,J)
734                 T(I+IPQ,K,J+ISP+ISQ)=T(I+IHE(J)+IFP,K,J+ISP)
735 !
736               ELSEIF                                                    &
737      &        (HTM(I+IHE(J)+IFP,K,J+ISP)                                &
738      &        +HTM(I+IHE(J)+IFQ,K,J+ISQ)<0.99)THEN
739                 T(I+IHE(J)+IFP,K,J+ISP)=0.5*(T(I,K,J)                   &
740      &                                      +T(I+IPQ,K,J+ISP+ISQ))
741                 T(I+IHE(J)+IFQ,K,J+ISQ)=T(I+IHE(J)+IFP,K,J+ISP)
742 !
743               ELSEIF(HTM(I+IHE(J)+IFP,K,J+ISP)<0.99)THEN
744                 T(I+IHE(J)+IFP,K,J+ISP)=T(I,K,J)                        &
745      &                                 +T(I+IPQ,K,J+ISP+ISQ)            &
746      &                                 -T(I+IHE(J)+IFQ,K,J+ISQ)
747 !
748               ELSEIF(HTM(I+IHE(J)+IFQ,K,J+ISQ)<0.99)THEN
749                 T(I+IHE(J)+IFQ,K,J+ISQ)=T(I,K,J)                        &
750      &                                 +T(I+IPQ,K,J+ISP+ISQ)            &
751      &                                 -T(I+IHE(J)+IFP,K,J+ISP)
752 !
753               ELSE
754                 T(I+IPQ,K,J+ISP+ISQ)=T(I+IHE(J)+IFP,K,J+ISP)            &
755      &                              +T(I+IHE(J)+IFQ,K,J+ISQ)            &
756      &                              -T(I,K,J)
757 !
758               ENDIF
759 !
760   150         CONTINUE
761 !
762 !-----------------------------------------------------------------------
763 !
764               IF(I==IUP_ADH_J)THEN  ! Update advection H tendencies
765 !
766                 ISP=ISPA(I,K)
767                 ISQ=ISQA(I,K)
768                 IFP=(ISP-1)/2
769                 IFQ=(-ISQ-1)/2
770                 IPQ=(ISP-ISQ)/2
771 !
772                 F0=ARRAY0(I,K)
773                 F1=ARRAY1(I,K)
774                 F2=ARRAY2(I,K)
775                 F3=ARRAY3(I,K)
776 !
777                 ADT(I,K,J)=F0*T(I,K,J)                                  &
778      &                    +F1*T(I+IHE(J)+IFP,K,J+ISP)                   &
779      &                    +F2*T(I+IHE(J)+IFQ,K,J+ISQ)                   &
780                           +F3*T(I+IPQ,K,J+ISP+ISQ)
781 !
782 !-----------------------------------------------------------------------
783 !
784                 IF(KNTI_ADH<N_IUPADH_J)THEN
785                   IUP_ADH_J=IUP_ADH(IMS+KNTI_ADH,J)
786                   KNTI_ADH=KNTI_ADH+1
787                 ENDIF
788 !
789               ENDIF  ! End of advection H tendency IF block
790 !
791             ENDDO  ! End of II loop
792 !
793           ENDDO  ! End of K loop
794 !
795 !-----------------------------------------------------------------------
796 !-----------------------------------------------------------------------
797 !***  UPSTREAM ADVECTION OF VELOCITY COMPONENTS
798 !-----------------------------------------------------------------------
799 !-----------------------------------------------------------------------
800 !
801           N_IUPADV_J=N_IUP_ADV(J)
802 !
803           DO K=KTS,KTE
804 !
805             DO II=0,N_IUPADV_J-1
806               I=IUP_ADV(IMS+II,J)
807 !
808               TTA=EM_LOC(J)*UST(I,K,J1_00)
809               TTB=EN       *VST(I,K,J1_00)
810               PP=-TTA-TTB
811               QP=TTA-TTB
812 !
813               IF(PP<0.)THEN
814                 ISP=-1
815               ELSE
816                 ISP= 1
817               ENDIF
818 !
819               IF(QP<0.)THEN
820                 ISQ=-1
821               ELSE
822                 ISQ= 1
823               ENDIF
824 !
825               IFP=(ISP-1)/2
826               IFQ=(-ISQ-1)/2
827               IPQ=(ISP-ISQ)/2
828               PP=ABS(PP)
829               QP=ABS(QP)
830               F3=PP*QP
831               F0=F3-PP-QP
832               F1=PP-F3
833               F2=QP-F3
834 !
835               ADU(I,K,J)=F0*U(I,K,J)                                    &
836      &                  +F1*U(I+IVE(J)+IFP,K,J+ISP)                     &
837      &                  +F2*U(I+IVE(J)+IFQ,K,J+ISQ)                     &
838      &                  +F3*U(I+IPQ,K,J+ISP+ISQ)
839 ! 
840               ADV(I,K,J)=F0*V(I,K,J)                                    &
841      &                  +F1*V(I+IVE(J)+IFP,K,J+ISP)                     &
842      &                  +F2*V(I+IVE(J)+IFQ,K,J+ISQ)                     &
843      &                  +F3*V(I+IPQ,K,J+ISP+ISQ)
844 !
845             ENDDO
846 !
847           ENDDO  !  End of K loop
848 !
849 !-----------------------------------------------------------------------
850 !
851         ENDIF upstream
852 !
853 !-----------------------------------------------------------------------
854 !-----------------------------------------------------------------------
855 !***  END OF THIS UPSTREAM REGION
856 !-----------------------------------------------------------------------
857 !-----------------------------------------------------------------------
858 !
859 !***  COMPUTE VERTICAL ADVECTION TENDENCIES USING CRANK-NICHOLSON.
860 !
861 !-----------------------------------------------------------------------
862 !***  FIRST THE TEMPERATURE
863 !-----------------------------------------------------------------------
864 !
865       iloop_for_t:  DO I=MYIS1,MYIE1
866 !
867         PDOP=PDSLO(I,J)
868         PVVLO=PETDT(I,KTE-1,J)*DTQ
869         VVLO=PVVLO/(DETA1_PDTOP(KTE)+DETA2(KTE)*PDOP)
870         CMT=-VVLO+1.
871         RCMT(KTE)=1./CMT
872         CRT(KTE)=VVLO
873         RSTT(KTE)=-VVLO*(T(I,KTE-1,J)-T(I,KTE,J))+T(I,KTE,J)
874 !
875         LMHK=KTE-LMH(I,J)+1
876         DO K=KTE-1,LMHK+1,-1
877           RDP=1./(DETA1_PDTOP(K)+DETA2(K)*PDOP)
878           PVVUP=PVVLO
879           PVVLO=PETDT(I,K-1,J)*DTQ
880           VVUP=PVVUP*RDP
881           VVLO=PVVLO*RDP
882           CFT=-VVUP*RCMT(K+1)
883           CMT=-CRT(K+1)*CFT+(VVUP-VVLO+1.)
884           RCMT(K)=1./CMT
885           CRT(K)=VVLO
886           RSTT(K)=-RSTT(K+1)*CFT+T(I,K,J)                               &
887      &            -(T(I,K,J)-T(I,K+1,J))*VVUP                           &
888      &            -(T(I,K-1,J)-T(I,K,J))*VVLO
889         ENDDO
890 !
891         PVVUP=PVVLO
892         VVUP=PVVUP/(DETA1_PDTOP(LMHK)+DETA2(LMHK)*PDOP)
893         CFT=-VVUP*RCMT(LMHK+1)
894         CMT=-CRT(LMHK+1)*CFT+VVUP+1.
895         CRT(LMHK)=0.
896         RSTT(LMHK)=-(T(I,LMHK,J)-T(I,LMHK+1,J))*VVUP                    &
897      &               -RSTT(LMHK+1)*CFT+T(I,LMHK,J)
898         TN(LMHK)=RSTT(LMHK)/CMT
899         VAD_TEND_T(I,LMHK)=TN(LMHK)-T(I,LMHK,J)
900 !
901         DO K=LMHK+1,KTE
902           TN(K)=(-CRT(K)*TN(K-1)+RSTT(K))*RCMT(K)
903           VAD_TEND_T(I,K)=TN(K)-T(I,K,J)
904         ENDDO
905 !
906 !-----------------------------------------------------------------------
907 !***  The following section is only for checking the implicit solution
908 !***  using back-substitution.  Remove this section otherwise.
909 !-----------------------------------------------------------------------
910 !
911 !       IF(I==ITEST.AND.J==JTEST)THEN
912 !!
913 !         PVVLO=PETDT(I,KTE-1,J)*DT*0.25
914 !         VVLO=PVVLO/(DETA1_PDTOP(KTE)+DETA2(KTE)*PDOP)
915 !         TTLO=VVLO*(T(I,KTE-1,J)-T(I,KTE,J)                            &
916 !    &              +TN(KTE-1)-TN(KTE))
917 !         ADTP=TTLO+TN(KTE)-T(I,KTE,J)
918 !         WRITE(0,*)' NTSD=',NTSD,' I=',ITEST,' J=',JTEST,' K=',KTE     &
919 !    &,             ' ADTP=',ADTP
920 !         WRITE(0,*)' T=',T(I,KTE,J),' TN=',TN(KTE)                     &
921 !    &,               ' VAD_TEND_T=',VAD_TEND_T(I,KTE)
922 !         WRITE(0,*)' '
923 !!
924 !         DO K=KTE-1,LMHK+1,-1
925 !           RDP=1./(DETA1_PDTOP(K)+DETA2(K)*PDOP)
926 !           PVVUP=PVVLO
927 !           PVVLO=PETDT(I,K-1,J)*DT*0.25
928 !           VVUP=PVVUP*RDP
929 !           VVLO=PVVLO*RDP
930 !           TTUP=VVUP*(T(I,K,J)-T(I,K+1,J)+TN(K)-TN(K+1))
931 !           TTLO=VVLO*(T(I,K-1,J)-T(I,K,J)+TN(K-1)-TN(K))
932 !           ADTP=TTLO+TTUP+TN(K)-T(I,K,J)
933 !           WRITE(0,*)' NTSD=',NTSD,' I=',I,' J=',J,' K=',K             &
934 !    &,               ' ADTP=',ADTP
935 !           WRITE(0,*)' T=',T(I,K,J),' TN=',TN(K)                       &
936 !    &,               ' VAD_TEND_T=',VAD_TEND_T(I,K)
937 !           WRITE(0,*)' '
938 !         ENDDO
939 !!
940 !         IF(LMHK==KTS)THEN
941 !           PVVUP=PVVLO
942 !           VVUP=PVVUP/(DETA1_PDTOP(KTS)+DETA2(KTS)*PDOP)
943 !           TTUP=VVUP*(T(I,KTS,J)-T(I,KTS+1,J)+TN(KTS)-TN(KTS+1))
944 !           ADTP=TTUP+TN(KTS)-T(I,KTS,J)
945 !           WRITE(0,*)' NTSD=',NTSD,' I=',I,' J=',J,' K=',KTS           &
946 !    &,               ' ADTP=',ADTP
947 !           WRITE(0,*)' T=',T(I,KTS,J),' TN=',TN(KTS)                   &
948 !    &,               ' VAD_TEND_T=',VAD_TEND_T(I,KTS)
949 !           WRITE(0,*)' '
950 !         ENDIF
951 !       ENDIF
952 !
953 !-----------------------------------------------------------------------
954 !***  End of check.
955 !-----------------------------------------------------------------------
956 !
957       ENDDO iloop_for_t
958 !
959 !-----------------------------------------------------------------------
960 !***  NOW VERTICAL ADVECTION OF WIND COMPONENTS
961 !-----------------------------------------------------------------------
962 !
963       iloop_for_uv:  DO I=MYIS1,MYIE1
964 !
965         PDOPU=(PDSLO(I+IVW(J),J)+PDSLO(I+IVE(J),J))*0.5
966         PDOPV=(PDSLO(I,J-1)+PDSLO(I,J+1))*0.5
967         PVVLOU=(PETDT(I+IVW(J),KTE-1,J)+PETDT(I+IVE(J),KTE-1,J))*DTE
968         PVVLOV=(PETDT(I,KTE-1,J-1)+PETDT(I,KTE-1,J+1))*DTE
969         VVLOU=PVVLOU/(DETA1_PDTOP(KTE)+DETA2(KTE)*PDOPU)
970         VVLOV=PVVLOV/(DETA1_PDTOP(KTE)+DETA2(KTE)*PDOPV)
971         CMU=-VVLOU+1.
972         CMV=-VVLOV+1.
973         RCMU(KTE)=1./CMU
974         RCMV(KTE)=1./CMV
975         CRU(KTE)=VVLOU
976         CRV(KTE)=VVLOV
977         RSTU(KTE)=-VVLOU*(U(I,KTE-1,J)-U(I,KTE,J))+U(I,KTE,J)
978         RSTV(KTE)=-VVLOV*(V(I,KTE-1,J)-V(I,KTE,J))+V(I,KTE,J)
979 !
980         LMVK=KTE-LMV(I,J)+1
981         DO K=KTE-1,LMVK+1,-1
982           RDPU=1./(DETA1_PDTOP(K)+DETA2(K)*PDOPU)
983           RDPV=1./(DETA1_PDTOP(K)+DETA2(K)*PDOPV)
984           PVVUPU=PVVLOU
985           PVVUPV=PVVLOV
986           PVVLOU=(PETDT(I+IVW(J),K-1,J)+PETDT(I+IVE(J),K-1,J))*DTE
987           PVVLOV=(PETDT(I,K-1,J-1)+PETDT(I,K-1,J+1))*DTE
988           VVUPU=PVVUPU*RDPU
989           VVUPV=PVVUPV*RDPV
990           VVLOU=PVVLOU*RDPU
991           VVLOV=PVVLOV*RDPV
992           CFU=-VVUPU*RCMU(K+1)
993           CFV=-VVUPV*RCMV(K+1)
994           CMU=-CRU(K+1)*CFU+VVUPU-VVLOU+1.
995           CMV=-CRV(K+1)*CFV+VVUPV-VVLOV+1.
996           RCMU(K)=1./CMU
997           RCMV(K)=1./CMV
998           CRU(K)=VVLOU
999           CRV(K)=VVLOV
1000           RSTU(K)=-RSTU(K+1)*CFU+U(I,K,J)                               &
1001      &            -(U(I,K,J)-U(I,K+1,J))*VVUPU                          &
1002      &            -(U(I,K-1,J)-U(I,K,J))*VVLOU
1003           RSTV(K)=-RSTV(K+1)*CFV+V(I,K,J)                               &
1004      &            -(V(I,K,J)-V(I,K+1,J))*VVUPV                          &
1005      &            -(V(I,K-1,J)-V(I,K,J))*VVLOV
1006         ENDDO
1007 !
1008         RDPU=1./(DETA1_PDTOP(LMVK)+DETA2(LMVK)*PDOPU)
1009         RDPV=1./(DETA1_PDTOP(LMVK)+DETA2(LMVK)*PDOPV)
1010         PVVUPU=PVVLOU
1011         PVVUPV=PVVLOV
1012         VVUPU=PVVUPU*RDPU
1013         VVUPV=PVVUPV*RDPV
1014         CFU=-VVUPU*RCMU(LMVK+1)
1015         CFV=-VVUPV*RCMV(LMVK+1)
1016         CMU=-CRU(LMVK+1)*CFU+VVUPU+1.
1017         CMV=-CRV(LMVK+1)*CFV+VVUPV+1.
1018         CRU(LMVK)=0.
1019         CRV(LMVK)=0.
1020         RSTU(LMVK)=-(U(I,LMVK,J)-U(I,LMVK+1,J))*VVUPU                   &
1021      &               -RSTU(LMVK+1)*CFU+U(I,LMVK,J)
1022         RSTV(LMVK)=-(V(I,LMVK,J)-V(I,LMVK+1,J))*VVUPV                   &
1023      &               -RSTV(LMVK+1)*CFV+V(I,LMVK,J)
1024         UN(LMVK)=RSTU(LMVK)/CMU
1025         VN(LMVK)=RSTV(LMVK)/CMV
1026         VAD_TEND_U(I,LMVK)=UN(LMVK)-U(I,LMVK,J)
1027         VAD_TEND_V(I,LMVK)=VN(LMVK)-V(I,LMVK,J)
1028 !
1029         DO K=LMVK+1,KTE
1030           UN(K)=(-CRU(K)*UN(K-1)+RSTU(K))*RCMU(K)
1031           VN(K)=(-CRV(K)*VN(K-1)+RSTV(K))*RCMV(K)
1032           VAD_TEND_U(I,K)=UN(K)-U(I,K,J)
1033           VAD_TEND_V(I,K)=VN(K)-V(I,K,J)
1034         ENDDO
1035 !
1036 !-----------------------------------------------------------------------
1037 !***  The following section is only for checking the implicit solution
1038 !***  using back-substitution.  Remove this section otherwise.
1039 !-----------------------------------------------------------------------
1040 !
1041 !       IF(I==ITEST.AND.J==JTEST)THEN
1042 !!
1043 !         PDOPU=(PDSLO(I+IVW(J),J)+PDSLO(I+IVE(J),J))*0.5
1044 !         PDOPV=(PDSLO(I,J-1)+PDSLO(I,J+1))*0.5
1045 !         PVVLOU=(PETDT(I+IVW(J),KTE-1,J)                               &
1046 !    &           +PETDT(I+IVE(J),KTE-1,J))*DTE
1047 !         PVVLOV=(PETDT(I,KTE-1,J-1)                                    &
1048 !    &           +PETDT(I,KTE-1,J+1))*DTE
1049 !         VVLOU=PVVLOU/(DETA1_PDTOP(KTE)+DETA2(KTE)*PDOPU)
1050 !         VVLOV=PVVLOV/(DETA1_PDTOP(KTE)+DETA2(KTE)*PDOPV)
1051 !         TULO=VVLOU*(U(I,KTE-1,J)-U(I,KTE,J)+UN(KTE-1)-UN(KTE))
1052 !         TVLO=VVLOV*(V(I,KTE-1,J)-V(I,KTE,J)+VN(KTE-1)-VN(KTE))
1053 !         ADUP=TULO+UN(KTE)-U(I,KTE,J)
1054 !         ADVP=TVLO+VN(KTE)-V(I,KTE,J)
1055 !         WRITE(0,*)' NTSD=',NTSD,' I=',I,' J=',J,' K=',KTE             &
1056 !    &,             ' ADUP=',ADUP,' ADVP=',ADVP
1057 !         WRITE(0,*)' U=',U(I,KTE,J),' UN=',UN(KTE)                     &
1058 !    &,             ' VAD_TEND_U=',VAD_TEND_U(I,KTE)                    &
1059 !    &,             ' V=',V(I,KTE,J),' VN=',VN(KTE)                     &
1060 !    &,             ' VAD_TEND_V=',VAD_TEND_V(I,KTE)
1061 !         WRITE(0,*)' '
1062 !!
1063 !         DO K=KTE-1,LMVK+1,-1
1064 !           RDPU=1./(DETA1_PDTOP(K)+DETA2(K)*PDOPU)
1065 !           RDPV=1./(DETA1_PDTOP(K)+DETA2(K)*PDOPV)
1066 !           PVVUPU=PVVLOU
1067 !           PVVUPV=PVVLOV
1068 !           PVVLOU=(PETDT(I+IVW(J),K-1,J)                               &
1069 !    &            +PETDT(I+IVE(J),K-1,J))*DTE
1070 !           PVVLOV=(PETDT(I,K-1,J-1)+PETDT(I,K-1,J+1))*DTE
1071 !           VVUPU=PVVUPU*RDPU
1072 !           VVUPV=PVVUPV*RDPV
1073 !           VVLOU=PVVLOU*RDPU
1074 !           VVLOV=PVVLOV*RDPV
1075 !           TUUP=VVUPU*(U(I,K,J)-U(I,K+1,J)+UN(K)-UN(K+1))
1076 !           TVUP=VVUPV*(V(I,K,J)-V(I,K+1,J)+VN(K)-VN(K+1))
1077 !           TULO=VVLOU*(U(I,K-1,J)-U(I,K,J)+UN(K-1)-UN(K))
1078 !           TVLO=VVLOV*(V(I,K-1,J)-V(I,K,J)+VN(K-1)-VN(K))
1079 !           ADUP=TUUP+TULO+UN(K)-U(I,K,J)
1080 !           ADVP=TVUP+TVLO+VN(K)-V(I,K,J)
1081 !           WRITE(0,*)' NTSD=',NTSD,' I=',ITEST,' J=',JTEST,' K=',K     &
1082 !    &,               ' ADUP=',ADUP,' ADVP=',ADVP
1083 !           WRITE(0,*)' U=',U(I,K,J),' UN=',UN(K)                       &
1084 !    &,               ' VAD_TEND_U=',VAD_TEND_U(I,K)                    &
1085 !    &,               ' V=',V(I,K,J),' VN=',VN(K)                       &
1086 !    &,               ' VAD_TEND_V=',VAD_TEND_V(I,K)
1087 !           WRITE(0,*)' '
1088 !         ENDDO
1089 !!
1090 !         IF(LMVK==KTS)THEN
1091 !           PVVUPU=PVVLOU
1092 !           PVVUPV=PVVLOV
1093 !           VVUPU=PVVUPU/(DETA1_PDTOP(KTS)+DETA2(KTS)*PDOPU)
1094 !           VVUPV=PVVUPV/(DETA1_PDTOP(KTS)+DETA2(KTS)*PDOPV)
1095 !           TUUP=VVUPU*(U(I,KTS,J)-U(I,KTS+1,J)+UN(KTS)-UN(KTS+1))
1096 !           TVUP=VVUPV*(V(I,KTS,J)-V(I,KTS+1,J)+VN(KTS)-VN(KTS+1))
1097 !           ADUP=TUUP+UN(KTS)-U(I,KTS,J)
1098 !           ADVP=TVUP+VN(KTS)-V(I,KTS,J)
1099 !           WRITE(0,*)' NTSD=',NTSD,' I=',ITEST,' J=',JTEST,' K=',KTS   &
1100 !    &,               ' ADUP=',ADUP,' ADVP=',ADVP
1101 !           WRITE(0,*)' U=',U(I,KTS,J),' UN=',UN(KTS)                   &
1102 !    &,               ' VAD_TEND_U=',VAD_TEND_U(I,KTS)                  &
1103 !    &,               ' V=',V(I,KTS,J),' VN=',VN(KTS)                   &
1104 !    &,               ' VAD_TEND_V=',VAD_TEND_V(I,KTS)
1105 !           WRITE(0,*)' '
1106 !         ENDIF
1107 !       ENDIF
1108 !
1109 !-----------------------------------------------------------------------
1110 !***  End of check.
1111 !-----------------------------------------------------------------------
1112 !
1113       ENDDO iloop_for_uv
1114 !
1115 !
1116 !-----------------------------------------------------------------------
1117 !
1118 !***  NOW SUM THE VERTICAL AND HORIZONTAL TENDENCIES,
1119 !***  CURVATURE AND CORIOLIS TERMS
1120 !
1121 !-----------------------------------------------------------------------
1122 !
1123       DO K=KTS,KTE
1124       DO I=MYIS1,MYIE1
1125         HM=HTM(I,K,J)*HBM2(I,J)
1126         VM=VTM(I,K,J)*VBM2(I,J)
1127         ADT(I,K,J)=(VAD_TEND_T(I,K)+2.*ADT(I,K,J))*HM
1128 !
1129         FPP=CURV(I,J)*2.*UST(I,K,J1_00)+F(I,J)*2.
1130         ADU(I,K,J)=(VAD_TEND_U(I,K)+2.*ADU(I,K,J)+VST(I,K,J1_00)*FPP)   &
1131      &             *VM
1132         ADV(I,K,J)=(VAD_TEND_V(I,K)+2.*ADV(I,K,J)-UST(I,K,J1_00)*FPP)   &
1133      &             *VM
1134       ENDDO
1135       ENDDO
1136 !-----------------------------------------------------------------------
1137 !-----------------------------------------------------------------------
1138 !
1139       ENDDO main_integration
1140 !
1141 !-----------------------------------------------------------------------
1142 !-----------------------------------------------------------------------
1143 !
1144 !-----------------------------------------------------------------------
1145 !***  SAVE THE OLD VALUES FOR TIMESTEPPING
1146 !-----------------------------------------------------------------------
1147 !
1148       DO J=MYJS_P4,MYJE_P4
1149         DO K=KTS,KTE
1150         DO I=MYIS_P4,MYIE_P4
1151           TOLD(I,K,J)=T(I,K,J)
1152           UOLD(I,K,J)=U(I,K,J)
1153           VOLD(I,K,J)=V(I,K,J)
1154         ENDDO
1155         ENDDO
1156       ENDDO
1157 !
1158 !-----------------------------------------------------------------------
1159 !***  FINALLY UPDATE THE PROGNOSTIC VARIABLES
1160 !-----------------------------------------------------------------------
1161 !
1162       DO J=MYJS2,MYJE2
1163         DO K=KTS,KTE
1164         DO I=MYIS1,MYIE1
1165           T(I,K,J)=ADT(I,K,J)+T(I,K,J)
1166           U(I,K,J)=ADU(I,K,J)+U(I,K,J)
1167           V(I,K,J)=ADV(I,K,J)+V(I,K,J)
1168         ENDDO
1169         ENDDO
1170       ENDDO
1171 !-----------------------------------------------------------------------
1172       END SUBROUTINE ADVE
1173 !-----------------------------------------------------------------------