source: trunk/WRF.COMMON/WRFV2/dyn_nmm/adve_optim.h @ 3553

Last change on this file since 3553 was 11, checked in by aslmd, 14 years ago

spiga@svn-planeto:ajoute le modele meso-echelle martien

File size: 42.5 KB
Line 
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!-----------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.