| 1 | !---------------------------------------------------------------------- |
|---|
| 2 | ! |
|---|
| 3 | !NCEP_MESO:MODEL_LAYER: NONHYDROSTATIC DYNAMICS ROUTINES |
|---|
| 4 | ! |
|---|
| 5 | !---------------------------------------------------------------------- |
|---|
| 6 | ! |
|---|
| 7 | #include "nmm_loop_basemacros.h" |
|---|
| 8 | #include "nmm_loop_macros.h" |
|---|
| 9 | ! |
|---|
| 10 | !---------------------------------------------------------------------- |
|---|
| 11 | ! |
|---|
| 12 | MODULE MODULE_NONHY_DYNAM |
|---|
| 13 | ! |
|---|
| 14 | !---------------------------------------------------------------------- |
|---|
| 15 | USE MODULE_MODEL_CONSTANTS |
|---|
| 16 | ! USE MODULE_INDX |
|---|
| 17 | !---------------------------------------------------------------------- |
|---|
| 18 | ! |
|---|
| 19 | REAL :: CAPA=R_D/CP,RG=1./G,TRG=2.*R_D/G |
|---|
| 20 | ! |
|---|
| 21 | CONTAINS |
|---|
| 22 | ! |
|---|
| 23 | !*********************************************************************** |
|---|
| 24 | SUBROUTINE EPS(NTSD,DT,HYDRO,DX,DY,FAD & |
|---|
| 25 | ,DETA1,DETA2,PDTOP,PT & |
|---|
| 26 | ,HBM2,HBM3 & |
|---|
| 27 | ,PDSL,PDSLO,PINT,RTOP,PETDT,PDWDT & |
|---|
| 28 | ,DWDT,DWDTMN,DWDTMX & |
|---|
| 29 | ,FNS,FEW,FNE,FSE & |
|---|
| 30 | ,T,U,V,W,Q,CWM & |
|---|
| 31 | ,DEF3D,HDAC & |
|---|
| 32 | ,WP & |
|---|
| 33 | ,IHE,IHW,IVE,IVW & |
|---|
| 34 | ,IDS,IDE,JDS,JDE,KDS,KDE & |
|---|
| 35 | ,IMS,IME,JMS,JME,KMS,KME & |
|---|
| 36 | ,ITS,ITE,JTS,JTE,KTS,KTE) |
|---|
| 37 | !*********************************************************************** |
|---|
| 38 | !$$$ SUBPROGRAM DOCUMENTATION BLOCK |
|---|
| 39 | ! . . . |
|---|
| 40 | ! SUBPROGRAM: EPS |
|---|
| 41 | ! PRGRMMR: JANJIC ORG: W/NP22 DATE: 9?-??-?? |
|---|
| 42 | ! |
|---|
| 43 | ! ABSTRACT: |
|---|
| 44 | ! EPS COMPUTES THE VERTICAL AND HORIZONTAL ADVECTION OF DZ/DT |
|---|
| 45 | ! |
|---|
| 46 | ! PROGRAM HISTORY LOG: |
|---|
| 47 | ! 9?-??-?? JANJIC - ORIGINATOR |
|---|
| 48 | ! 00-01-05 BLACK - DISTRIBUTED MEMORY AND THREADS |
|---|
| 49 | ! 02-02-07 BLACK - CONVERTED TO WRF STRUCTURE |
|---|
| 50 | ! 04-11-22 BLACK - THREADED |
|---|
| 51 | ! 05-12-12 BLACK - CONVERTED FROM IKJ TO IJK |
|---|
| 52 | ! |
|---|
| 53 | ! USAGE: CALL EPS FROM SUBROUTINE SOLVE_RUNSTREAM |
|---|
| 54 | ! INPUT ARGUMENT LIST: |
|---|
| 55 | ! |
|---|
| 56 | ! OUTPUT ARGUMENT LIST: |
|---|
| 57 | ! |
|---|
| 58 | ! OUTPUT FILES: |
|---|
| 59 | ! NONE |
|---|
| 60 | ! |
|---|
| 61 | ! SUBPROGRAMS CALLED: |
|---|
| 62 | ! |
|---|
| 63 | ! UNIQUE: NONE |
|---|
| 64 | ! |
|---|
| 65 | ! LIBRARY: NONE |
|---|
| 66 | ! |
|---|
| 67 | ! ATTRIBUTES: |
|---|
| 68 | ! LANGUAGE: FORTRAN 90 |
|---|
| 69 | ! MACHINE : IBM SP |
|---|
| 70 | !$$$ |
|---|
| 71 | !----------------------------------------------------------------------- |
|---|
| 72 | ! |
|---|
| 73 | IMPLICIT NONE |
|---|
| 74 | !----------------------------------------------------------------------- |
|---|
| 75 | INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE & |
|---|
| 76 | ,IMS,IME,JMS,JME,KMS,KME & |
|---|
| 77 | ,ITS,ITE,JTS,JTE,KTS,KTE |
|---|
| 78 | ! |
|---|
| 79 | INTEGER,DIMENSION(JMS:JME),INTENT(IN) :: IHE,IHW,IVE,IVW |
|---|
| 80 | ! |
|---|
| 81 | !----------------------------------------------------------------------- |
|---|
| 82 | ! |
|---|
| 83 | INTEGER,INTENT(IN) :: NTSD |
|---|
| 84 | ! |
|---|
| 85 | REAL,INTENT(IN) :: DT,DY,PDTOP,PT,WP |
|---|
| 86 | ! |
|---|
| 87 | REAL,DIMENSION(KMS:KME-1),INTENT(IN) :: DETA1,DETA2 |
|---|
| 88 | ! |
|---|
| 89 | REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: DWDTMN,DWDTMX,DX & |
|---|
| 90 | ,FAD,HBM2,HBM3 & |
|---|
| 91 | ,PDSL,PDSLO & |
|---|
| 92 | ,HDAC |
|---|
| 93 | ! |
|---|
| 94 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: PETDT,DEF3D |
|---|
| 95 | ! |
|---|
| 96 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: CWM & |
|---|
| 97 | ,FEW,FNE & |
|---|
| 98 | ,FNS,FSE & |
|---|
| 99 | ,Q,RTOP & |
|---|
| 100 | ,U,V |
|---|
| 101 | ! |
|---|
| 102 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(INOUT) :: DWDT & |
|---|
| 103 | ,PDWDT & |
|---|
| 104 | ,T |
|---|
| 105 | ! |
|---|
| 106 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(INOUT) :: PINT,W |
|---|
| 107 | ! |
|---|
| 108 | LOGICAL,INTENT(IN) :: HYDRO |
|---|
| 109 | ! |
|---|
| 110 | !----------------------------------------------------------------------- |
|---|
| 111 | ! |
|---|
| 112 | !*** LOCAL VARIABLES |
|---|
| 113 | ! |
|---|
| 114 | !----------------------------------------------------------------------- |
|---|
| 115 | ! |
|---|
| 116 | INTEGER,PARAMETER :: NTSHY=2 |
|---|
| 117 | ! |
|---|
| 118 | REAL,PARAMETER :: WGHT=0.35 |
|---|
| 119 | ! |
|---|
| 120 | INTEGER,DIMENSION(KTS:KTE) :: LA |
|---|
| 121 | ! |
|---|
| 122 | INTEGER :: I,J,K,LMP |
|---|
| 123 | ! |
|---|
| 124 | REAL,DIMENSION(KTS:KTE) :: B1,B2,B3,C0,CWM_K,DWDT_K,Q_K,RDPP & |
|---|
| 125 | ,RTOP_K,T_K |
|---|
| 126 | ! |
|---|
| 127 | REAL,DIMENSION(ITS:ITE) :: DPTU_I,PNP1_I,PSTRUP_I |
|---|
| 128 | ! |
|---|
| 129 | REAL,DIMENSION(ITS-5:ITE+5,JTS-5:JTE+5) :: TTB,WEW,WNE,WNS,WSE |
|---|
| 130 | ! |
|---|
| 131 | REAL,DIMENSION(ITS:ITE,KTS:KTE) :: B1_IK,B2_IK,B3_IK,C0_IK & |
|---|
| 132 | ,CWM_IK,DWDT_IK,Q_IK & |
|---|
| 133 | ,RDPP_IK,RTOP_IK,T_IK |
|---|
| 134 | ! |
|---|
| 135 | REAL,DIMENSION(ITS:ITE,KTS:KTE+1) :: CHI_IK,COFF_IK & |
|---|
| 136 | ,PINT_IK,PSTR_IK,W_IK |
|---|
| 137 | ! |
|---|
| 138 | REAL :: ADDT,DELP,DETAL,DP,DPDE,DPPL,DPSTR,DPTL,DPTU & |
|---|
| 139 | ,DWDTT,EPSN,FCT,FFC,GDT,GDT2 & |
|---|
| 140 | ,PNP,PP1,PSTRDN,PSTRUP,RDP,RDPDN,RDPUP,RDT & |
|---|
| 141 | ,TFC,TMP,TTAL,TTFC,HKNE_IJ,HKSE_IJ,ADVEC |
|---|
| 142 | ! |
|---|
| 143 | LOGICAL :: BOT,TOP,DIFFW |
|---|
| 144 | ! |
|---|
| 145 | CHARACTER(LEN=255) :: message |
|---|
| 146 | |
|---|
| 147 | !----------------------------------------------------------------------- |
|---|
| 148 | !*********************************************************************** |
|---|
| 149 | !----------------------------------------------------------------------- |
|---|
| 150 | IF(NTSD<=NTSHY.OR.HYDRO)THEN |
|---|
| 151 | !*** |
|---|
| 152 | DO J=MYJS_P2,MYJE_P2 |
|---|
| 153 | DO I=MYIS_P1,MYIE_P1 |
|---|
| 154 | PINT(I,J,KTE+1)=PT |
|---|
| 155 | ENDDO |
|---|
| 156 | ENDDO |
|---|
| 157 | ! |
|---|
| 158 | !$omp parallel do & |
|---|
| 159 | !$omp& private(i,j,k) |
|---|
| 160 | DO K=KTS,KTE |
|---|
| 161 | DO J=MYJS_P2,MYJE_P2 |
|---|
| 162 | DO I=MYIS_P1,MYIE_P1 |
|---|
| 163 | DWDT(I,J,K)=1. |
|---|
| 164 | PDWDT(I,J,K)=1. |
|---|
| 165 | ENDDO |
|---|
| 166 | ENDDO |
|---|
| 167 | ENDDO |
|---|
| 168 | ! |
|---|
| 169 | !$omp parallel do & |
|---|
| 170 | !$omp& private(i,j,k) |
|---|
| 171 | DO K=KTE,KTS,-1 |
|---|
| 172 | DO J=MYJS_P2,MYJE_P2 |
|---|
| 173 | DO I=MYIS_P1,MYIE_P1 |
|---|
| 174 | PINT(I,J,K)=DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J)+PINT(I,J,K+1) |
|---|
| 175 | ENDDO |
|---|
| 176 | ENDDO |
|---|
| 177 | ENDDO |
|---|
| 178 | !*** |
|---|
| 179 | RETURN |
|---|
| 180 | !*** |
|---|
| 181 | ENDIF |
|---|
| 182 | !----------------------------------------------------------------------- |
|---|
| 183 | ADDT=DT |
|---|
| 184 | RDT=1./ADDT |
|---|
| 185 | !----------------------------------------------------------------------- |
|---|
| 186 | ! |
|---|
| 187 | !*** TIME TENDENCY |
|---|
| 188 | ! |
|---|
| 189 | !$omp parallel do & |
|---|
| 190 | !$omp& private(i,j,k) |
|---|
| 191 | DO K=KTS,KTE |
|---|
| 192 | DO J=MYJS_P1,MYJE_P1 |
|---|
| 193 | DO I=MYIS_P1,MYIE_P1 |
|---|
| 194 | DWDT(I,J,K)=(W(I,J,K)-DWDT(I,J,K))*HBM2(I,J)*RDT |
|---|
| 195 | ENDDO |
|---|
| 196 | ENDDO |
|---|
| 197 | ENDDO |
|---|
| 198 | |
|---|
| 199 | |
|---|
| 200 | IF (DT > 0 .and. WP .ge. 0.001) THEN |
|---|
| 201 | DIFFW=.TRUE. |
|---|
| 202 | ELSE |
|---|
| 203 | DIFFW=.FALSE. |
|---|
| 204 | ENDIF |
|---|
| 205 | |
|---|
| 206 | IF(DIFFW) THEN |
|---|
| 207 | |
|---|
| 208 | DO K=KTS,KTE |
|---|
| 209 | DO J=MYJS_P1,MYJE1_P1 |
|---|
| 210 | DO I=MYIS_P1,MYIE1_P1 |
|---|
| 211 | HKNE_IJ=(DEF3D(I,J,K)+DEF3D(I+IHE(J),J+1,K)) |
|---|
| 212 | HKSE_IJ=(DEF3D(I+IHE(J),J-1,K)+DEF3D(I,J,K)) |
|---|
| 213 | WNE(I,J)=(W (I+IHE(J),J+1,K)-W (I,J,K))*HKNE_IJ |
|---|
| 214 | WSE(I,J)=(W (I+IHE(J),J-1,K)-W (I,J,K))*HKSE_IJ |
|---|
| 215 | ENDDO |
|---|
| 216 | ENDDO |
|---|
| 217 | |
|---|
| 218 | DO J=MYJS2,MYJE2 |
|---|
| 219 | DO I=MYIS,MYIE |
|---|
| 220 | DWDT(I,J,K)= DWDT(I,J,K) - ( WNE (I,J)-WNE (I+IHW(J),J-1) + & |
|---|
| 221 | WSE (I,J)-WSE (I+IHW(J),J+1) ) * & |
|---|
| 222 | HDAC(I,J)*HBM2(I,J)*RDT |
|---|
| 223 | ENDDO |
|---|
| 224 | ENDDO |
|---|
| 225 | ENDDO |
|---|
| 226 | |
|---|
| 227 | ENDIF |
|---|
| 228 | ! |
|---|
| 229 | !----------------------------------------------------------------------- |
|---|
| 230 | !*** |
|---|
| 231 | !*** VERTICAL ADVECTION |
|---|
| 232 | !*** |
|---|
| 233 | !----------------------------------------------------------------------- |
|---|
| 234 | ! |
|---|
| 235 | DO J=MYJS2,MYJE2 |
|---|
| 236 | DO I=MYIS,MYIE |
|---|
| 237 | TTB(I,J)=0. |
|---|
| 238 | ENDDO |
|---|
| 239 | ENDDO |
|---|
| 240 | ! |
|---|
| 241 | DO K=KTE,KTS+1,-1 |
|---|
| 242 | ! |
|---|
| 243 | !$omp parallel do & |
|---|
| 244 | !$omp& private(i,j,ttal) |
|---|
| 245 | DO J=MYJS2,MYJE2 |
|---|
| 246 | DO I=MYIS,MYIE |
|---|
| 247 | TTAL=(W(I,J,K-1)-W(I,J,K))*PETDT(I,J,K-1)*0.5 |
|---|
| 248 | DWDT(I,J,K)=(TTAL+TTB(I,J)) & |
|---|
| 249 | /(DETA1(K)*PDTOP+DETA2(K)*PDSLO(I,J)) & |
|---|
| 250 | +DWDT(I,J,K) |
|---|
| 251 | TTB(I,J)=TTAL |
|---|
| 252 | ENDDO |
|---|
| 253 | ENDDO |
|---|
| 254 | ENDDO |
|---|
| 255 | ! |
|---|
| 256 | !$omp parallel do & |
|---|
| 257 | !$omp& private(i,j) |
|---|
| 258 | DO J=MYJS2,MYJE2 |
|---|
| 259 | DO I=MYIS1,MYIE1 |
|---|
| 260 | TTB(I,J)=(W(I,J,KTS)-W(I,J,KTS+1))*PETDT(I,J,KTS)*0.5 |
|---|
| 261 | DWDT(I,J,KTS)=TTB(I,J)/(DETA1(KTS)*PDTOP+DETA2(KTS)*PDSLO(I,J)) & |
|---|
| 262 | +DWDT(I,J,KTS) |
|---|
| 263 | ENDDO |
|---|
| 264 | ENDDO |
|---|
| 265 | !----------------------------------------------------------------------- |
|---|
| 266 | !*** |
|---|
| 267 | !*** END OF VERTICAL ADVECTION |
|---|
| 268 | !*** |
|---|
| 269 | !----------------------------------------------------------------------- |
|---|
| 270 | ! |
|---|
| 271 | !----------------------------------------------------------------------- |
|---|
| 272 | !*** |
|---|
| 273 | !*** HORIZONTAL ADVECTION |
|---|
| 274 | !*** |
|---|
| 275 | !----------------------------------------------------------------------- |
|---|
| 276 | ! |
|---|
| 277 | !$omp parallel do & |
|---|
| 278 | !$omp& private(dpde,i,j,k) |
|---|
| 279 | ! |
|---|
| 280 | main_horizontal: DO K=KTS,KTE |
|---|
| 281 | ! |
|---|
| 282 | !----------------------------------------------------------------------- |
|---|
| 283 | !*** THE WORKING ARRAYS FOR THE PRIMARY VARIABLES |
|---|
| 284 | !----------------------------------------------------------------------- |
|---|
| 285 | ! |
|---|
| 286 | DO J=MYJS1_P3,MYJE1_P3 |
|---|
| 287 | DO I=MYIS_P3,MYIE_P3 |
|---|
| 288 | WEW(I,J)=FEW(I,J,K)*(W(I+IVE(J),J,K)-W(I+IVW(J),J,K)) |
|---|
| 289 | WNS(I,J)=FNS(I,J,K)*(W(I,J+1,K)-W(I,J-1,K)) |
|---|
| 290 | ENDDO |
|---|
| 291 | ENDDO |
|---|
| 292 | ! |
|---|
| 293 | !*** DIAGONAL FLUXES AND DIAGONALLY AVERAGED WIND |
|---|
| 294 | ! |
|---|
| 295 | DO J=MYJS1_P2,MYJE2_P2 |
|---|
| 296 | DO I=MYIS_P2,MYIE1_P2 |
|---|
| 297 | WNE(I,J)=FNE(I,J,K)*(W(I+IHE(J),J+1,K)-W(I,J,K)) |
|---|
| 298 | ENDDO |
|---|
| 299 | ENDDO |
|---|
| 300 | ! |
|---|
| 301 | DO J=MYJS2_P2,MYJE1_P2 |
|---|
| 302 | DO I=MYIS_P2,MYIE1_P2 |
|---|
| 303 | WSE(I,J)=FSE(I,J,K)*(W(I+IHE(J),J-1,K)-W(I,J,K)) |
|---|
| 304 | ENDDO |
|---|
| 305 | ENDDO |
|---|
| 306 | ! |
|---|
| 307 | !----------------------------------------------------------------------- |
|---|
| 308 | !*** ADVECTION OF W |
|---|
| 309 | !----------------------------------------------------------------------- |
|---|
| 310 | ! |
|---|
| 311 | DO J=MYJS3,MYJE3 |
|---|
| 312 | DO I=MYIS2,MYIE2 |
|---|
| 313 | DPDE=DETA1(K)*PDTOP+DETA2(K)*PDSLO(I,J) |
|---|
| 314 | ADVEC=-(WEW(I+IHW(J),J) +WEW(I+IHE(J),J) & |
|---|
| 315 | +WNS(I,J-1) +WNS(I,J+1) & |
|---|
| 316 | +WNE(I+IHW(J),J-1) +WNE(I,J) & |
|---|
| 317 | +WSE(I,J) +WSE(I+IHW(J),J+1)) & |
|---|
| 318 | *FAD(I,J)*2.0*HBM3(I,J)/(DPDE*DT) |
|---|
| 319 | DWDT(I,J,K)= ADVEC + DWDT(I,J,K) |
|---|
| 320 | ENDDO |
|---|
| 321 | ENDDO |
|---|
| 322 | |
|---|
| 323 | ENDDO main_horizontal |
|---|
| 324 | |
|---|
| 325 | !----------------------------------------------------------------------- |
|---|
| 326 | !*** |
|---|
| 327 | !*** END OF HORIZONTAL ADVECTION |
|---|
| 328 | !*** |
|---|
| 329 | !----------------------------------------------------------------------- |
|---|
| 330 | |
|---|
| 331 | IF (WP .ge. 0.001) then |
|---|
| 332 | !----------------------------------------------------------------------- |
|---|
| 333 | !---taking external mode out-------------------------------------------- |
|---|
| 334 | !----------------------------------------------------------------------- |
|---|
| 335 | |
|---|
| 336 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 337 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 338 | TTB(I,J)=0. |
|---|
| 339 | ENDDO |
|---|
| 340 | ENDDO |
|---|
| 341 | ! |
|---|
| 342 | DO K=KTS,KTE |
|---|
| 343 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 344 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 345 | DPDE=DETA1(K)*PDTOP+DETA2(K)*PDSLO(I,J) |
|---|
| 346 | TTB(I,J)=DPDE*DWDT(I,J,K)+TTB(I,J) |
|---|
| 347 | ENDDO |
|---|
| 348 | ENDDO |
|---|
| 349 | ENDDO |
|---|
| 350 | ! |
|---|
| 351 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 352 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 353 | TTB(I,J)=TTB(I,J)/(PDSLO(I,J)+PDTOP) |
|---|
| 354 | ENDDO |
|---|
| 355 | ENDDO |
|---|
| 356 | ! |
|---|
| 357 | DO K=KTS,KTE |
|---|
| 358 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 359 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 360 | DWDT(I,J,K)=DWDT(I,J,K)-TTB(I,J) |
|---|
| 361 | ENDDO |
|---|
| 362 | ENDDO |
|---|
| 363 | ENDDO |
|---|
| 364 | endif |
|---|
| 365 | |
|---|
| 366 | !$omp parallel do & |
|---|
| 367 | !$omp& private(dwdtt,i,j,k) |
|---|
| 368 | DO K=KTS,KTE |
|---|
| 369 | DO J=MYJS,MYJE |
|---|
| 370 | DO I=MYIS,MYIE |
|---|
| 371 | DWDTT=DWDT(I,J,K) |
|---|
| 372 | DWDTT=MAX(DWDTT,DWDTMN(I,J)) |
|---|
| 373 | DWDTT=MIN(DWDTT,DWDTMX(I,J)) |
|---|
| 374 | ! |
|---|
| 375 | DWDT(I,J,K)=(DWDTT*RG+1.)*(1.-WP)+PDWDT(I,J,K)*WP |
|---|
| 376 | ENDDO |
|---|
| 377 | ENDDO |
|---|
| 378 | ENDDO |
|---|
| 379 | !----------------------------------------------------------------------- |
|---|
| 380 | !---setting dwdt (epsilon at this point) on h points to 1. along bdy --- |
|---|
| 381 | !----------------------------------------------------------------------- |
|---|
| 382 | IF (WP .ge. 0.001) THEN |
|---|
| 383 | |
|---|
| 384 | do K=KTS,KTE |
|---|
| 385 | if (JDS .eq. JTS) then |
|---|
| 386 | do J=jts,jts+1 |
|---|
| 387 | do I=its,ite |
|---|
| 388 | DWDT(I,J,K)=1. |
|---|
| 389 | enddo |
|---|
| 390 | enddo |
|---|
| 391 | endif |
|---|
| 392 | ! |
|---|
| 393 | if (JTE .ge. JDE-2) then |
|---|
| 394 | do j=jte-1,jte |
|---|
| 395 | do i=its,ite |
|---|
| 396 | DWDT(I,J,K)=1. |
|---|
| 397 | enddo |
|---|
| 398 | enddo |
|---|
| 399 | endif |
|---|
| 400 | ! |
|---|
| 401 | if(ITS .eq. IDS)then |
|---|
| 402 | do j=jts,jte |
|---|
| 403 | do i=its,its+1 |
|---|
| 404 | DWDT(I,J,K)=1. |
|---|
| 405 | enddo |
|---|
| 406 | enddo |
|---|
| 407 | endif |
|---|
| 408 | ! |
|---|
| 409 | if(ITE .ge. IDE-2)then |
|---|
| 410 | do j=jts,jte |
|---|
| 411 | do i=ite-1,ite |
|---|
| 412 | DWDT(I,J,K)=1. |
|---|
| 413 | enddo |
|---|
| 414 | enddo |
|---|
| 415 | endif |
|---|
| 416 | enddo |
|---|
| 417 | |
|---|
| 418 | ENDIF |
|---|
| 419 | |
|---|
| 420 | GDT=G*DT |
|---|
| 421 | GDT2=GDT*GDT |
|---|
| 422 | FFC=-R_D/GDT2 |
|---|
| 423 | ! |
|---|
| 424 | !----------------------------------------------------------------------- |
|---|
| 425 | ! |
|---|
| 426 | !$omp parallel do & |
|---|
| 427 | !$omp& private(b1_ik,b2_ik,b3_ik,c0_ik,chi_ik,coff_ik,cwm_ik, & |
|---|
| 428 | !$omp& delp,dppl,dpstr,dptl,dptu_i,dwdt_ik,fct,i,j,k, & |
|---|
| 429 | !$omp& pint_ik,pnp1_i,pp1,pstr_ik,pstrdn,pstrup_i,q_ik, & |
|---|
| 430 | !$omp& rdpdn,rdpup,rtop_ik,t_ik,tfc,tmp,ttfc,w_ik) |
|---|
| 431 | ! |
|---|
| 432 | final_update: DO J=MYJS3,MYJE3 |
|---|
| 433 | ! |
|---|
| 434 | !----------------------------------------------------------------------- |
|---|
| 435 | !*** EXTRACT COLUMNS FROM 3-D ARRAYS |
|---|
| 436 | !----------------------------------------------------------------------- |
|---|
| 437 | ! |
|---|
| 438 | DO K=KTS,KTE |
|---|
| 439 | DO I=MYIS2,MYIE2 |
|---|
| 440 | CWM_IK(I,K)=CWM(I,J,K) |
|---|
| 441 | DWDT_IK(I,K)=DWDT(I,J,K) |
|---|
| 442 | Q_IK(I,K)=Q(I,J,K) |
|---|
| 443 | RTOP_IK(I,K)=RTOP(I,J,K) |
|---|
| 444 | T_IK(I,K)=T(I,J,K) |
|---|
| 445 | ENDDO |
|---|
| 446 | ENDDO |
|---|
| 447 | ! |
|---|
| 448 | DO K=KTS,KTE+1 |
|---|
| 449 | DO I=MYIS2,MYIE2 |
|---|
| 450 | PINT_IK(I,K)=PINT(I,J,K) |
|---|
| 451 | W_IK(I,K)=W(I,J,K) |
|---|
| 452 | ENDDO |
|---|
| 453 | ENDDO |
|---|
| 454 | ! |
|---|
| 455 | DO I=MYIS2,MYIE2 |
|---|
| 456 | PSTR_IK(I,KTE+1)=PT |
|---|
| 457 | ENDDO |
|---|
| 458 | ! |
|---|
| 459 | !----------------------------------------------------------------------- |
|---|
| 460 | ! |
|---|
| 461 | DO K=KTE,KTS,-1 |
|---|
| 462 | ! |
|---|
| 463 | IF(K==KTE)THEN |
|---|
| 464 | DO I=MYIS2,MYIE2 |
|---|
| 465 | DPPL=DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J) |
|---|
| 466 | RDPP_IK(I,K)=1./DPPL |
|---|
| 467 | DPSTR=DWDT_IK(I,K)*DPPL |
|---|
| 468 | PSTR_IK(I,K)=PT+DPSTR |
|---|
| 469 | PP1=PT+DPSTR |
|---|
| 470 | PNP1_I(I)=(PP1-PINT_IK(I,K))*WGHT+PINT_IK(I,K) |
|---|
| 471 | TFC=Q_IK(I,K)*P608+(1.-CWM_IK(I,K)) |
|---|
| 472 | TTFC=-CAPA*TFC+1. |
|---|
| 473 | COFF_IK(I,K)=T_IK(I,K)*TTFC*TFC*DPPL*FFC & |
|---|
| 474 | /((PT+PNP1_I(I))*(PT+PNP1_I(I))) |
|---|
| 475 | ENDDO |
|---|
| 476 | ELSE |
|---|
| 477 | DO I=MYIS2,MYIE2 |
|---|
| 478 | DPPL=DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J) |
|---|
| 479 | RDPP_ik(I,K)=1./DPPL |
|---|
| 480 | DPSTR=DWDT_IK(I,K)*DPPL |
|---|
| 481 | PSTR_IK(I,K)=PSTR_IK(I,K+1)+DPSTR |
|---|
| 482 | PP1=PNP1_I(I)+DPSTR |
|---|
| 483 | PNP=(PP1-PINT_IK(I,K))*WGHT+PINT_IK(I,K) |
|---|
| 484 | TFC=Q_IK(I,K)*P608+(1.-CWM_IK(I,K)) |
|---|
| 485 | TTFC=-CAPA*TFC+1. |
|---|
| 486 | COFF_IK(I,K)=T_IK(I,K)*TTFC*TFC*DPPL*FFC & |
|---|
| 487 | /((PNP1_I(I)+PNP)*(PNP+PNP1_I(I))) |
|---|
| 488 | PNP1_I(I)=PNP |
|---|
| 489 | ENDDO |
|---|
| 490 | ENDIF |
|---|
| 491 | ! |
|---|
| 492 | ENDDO |
|---|
| 493 | ! |
|---|
| 494 | !----------------------------------------------------------------------- |
|---|
| 495 | ! |
|---|
| 496 | DO I=MYIS2,MYIE2 |
|---|
| 497 | !!BUG!! PSTRUP_I(I)=-(PSTR_IK(I,KTE)-PINT_IK(I,KTE))*COFF_IK(I,KTE) |
|---|
| 498 | PSTRUP_I(I)=-(PSTR_IK(I,KTE+1)+PSTR_IK(I,KTE) & |
|---|
| 499 | -PINT_IK(I,KTE+1)-PINT_IK(I,KTE))*COFF_IK(I,KTE) |
|---|
| 500 | ENDDO |
|---|
| 501 | ! |
|---|
| 502 | !----------------------------------------------------------------------- |
|---|
| 503 | DO K=KTE-1,KTS,-1 |
|---|
| 504 | ! |
|---|
| 505 | IF(K==KTE-1)THEN |
|---|
| 506 | DO I=MYIS2,MYIE2 |
|---|
| 507 | RDPDN=RDPP_IK(I,K) |
|---|
| 508 | RDPUP=RDPP_IK(I,K+1) |
|---|
| 509 | ! |
|---|
| 510 | PSTRDN=-(PSTR_IK(I,K+1)+PSTR_IK(I,K) & |
|---|
| 511 | -PINT_IK(I,K+1)-PINT_IK(I,K)) & |
|---|
| 512 | *COFF_IK(I,K) |
|---|
| 513 | ! |
|---|
| 514 | B1_IK(I,K)=COFF_IK(I,K+1)+RDPUP |
|---|
| 515 | B2_IK(I,K)=(COFF_IK(I,K+1)+COFF_IK(I,K))-(RDPUP+RDPDN) |
|---|
| 516 | B3_IK(I,K)=COFF_IK(I,K)+RDPDN |
|---|
| 517 | C0_IK(I,K)=PSTRUP_I(I)+PSTRDN |
|---|
| 518 | PSTRUP_I(I)=PSTRDN |
|---|
| 519 | ENDDO |
|---|
| 520 | ELSE |
|---|
| 521 | DO I=MYIS2,MYIE2 |
|---|
| 522 | RDPDN=RDPP_IK(I,K) |
|---|
| 523 | RDPUP=RDPP_IK(I,K+1) |
|---|
| 524 | ! |
|---|
| 525 | PSTRDN=-(PSTR_IK(I,K+1)+PSTR_IK(I,K) & |
|---|
| 526 | -PINT_IK(I,K+1)-PINT_IK(I,K)) & |
|---|
| 527 | *COFF_IK(I,K) |
|---|
| 528 | ! |
|---|
| 529 | B1_IK(I,K)=COFF_IK(I,K+1)+RDPUP |
|---|
| 530 | B2_IK(I,K)=(COFF_IK(I,K+1)+COFF_IK(I,K))-(RDPUP+RDPDN) |
|---|
| 531 | B3_IK(I,K)=COFF_IK(I,K)+RDPDN |
|---|
| 532 | C0_IK(I,K)=PSTRUP_I(I)+PSTRDN |
|---|
| 533 | PSTRUP_I(I)=PSTRDN |
|---|
| 534 | ENDDO |
|---|
| 535 | ENDIF |
|---|
| 536 | ! |
|---|
| 537 | ENDDO |
|---|
| 538 | ! |
|---|
| 539 | !----------------------------------------------------------------------- |
|---|
| 540 | !*** ELIMINATION |
|---|
| 541 | !----------------------------------------------------------------------- |
|---|
| 542 | ! |
|---|
| 543 | DO K=KTE-2,KTS,-1 |
|---|
| 544 | ! |
|---|
| 545 | IF(K>KTS)THEN |
|---|
| 546 | DO I=MYIS2,MYIE2 |
|---|
| 547 | TMP=-B1_IK(I,K)/B2_IK(I,K+1) |
|---|
| 548 | B2_IK(I,K)=B3_IK(I,K+1)*TMP+B2_IK(I,K) |
|---|
| 549 | C0_IK(I,K)=C0_IK(I,K+1)*TMP+C0_IK(I,K) |
|---|
| 550 | ENDDO |
|---|
| 551 | ELSE |
|---|
| 552 | DO I=MYIS2,MYIE2 |
|---|
| 553 | TMP=-B1_IK(I,K)/B2_IK(I,K+1) |
|---|
| 554 | B2_IK(I,K)=B3_IK(I,K+1)*TMP & |
|---|
| 555 | +(B2_IK(I,KTS)+B3_IK(I,KTS)) |
|---|
| 556 | C0_IK(I,K)=C0_IK(I,K+1)*TMP+C0_IK(I,K) |
|---|
| 557 | ENDDO |
|---|
| 558 | ENDIF |
|---|
| 559 | ! |
|---|
| 560 | ENDDO |
|---|
| 561 | ! |
|---|
| 562 | !----------------------------------------------------------------------- |
|---|
| 563 | !*** BACK SUBSTITUTION |
|---|
| 564 | !----------------------------------------------------------------------- |
|---|
| 565 | ! |
|---|
| 566 | DO K=KTS+1,KTE |
|---|
| 567 | ! |
|---|
| 568 | IF(K==KTS+1)THEN |
|---|
| 569 | DO I=MYIS2,MYIE2 |
|---|
| 570 | CHI_IK(I,K)=C0_IK(I,KTS)/B2_IK(I,KTS) |
|---|
| 571 | CHI_IK(I,KTS)=CHI_IK(I,K) |
|---|
| 572 | ENDDO |
|---|
| 573 | ELSE |
|---|
| 574 | DO I=MYIS2,MYIE2 |
|---|
| 575 | CHI_IK(I,K)=(-B3_IK(I,K-1)*CHI_IK(I,K-1)+C0_IK(I,K-1)) & |
|---|
| 576 | /B2_IK(I,K-1) |
|---|
| 577 | ENDDO |
|---|
| 578 | ENDIF |
|---|
| 579 | ! |
|---|
| 580 | ENDDO |
|---|
| 581 | !----------------------------------------------------------------------- |
|---|
| 582 | ! |
|---|
| 583 | FCT=0.5/CP |
|---|
| 584 | ! |
|---|
| 585 | DO K=KTE,KTS,-1 |
|---|
| 586 | ! |
|---|
| 587 | IF(K==KTE)THEN |
|---|
| 588 | DO I=MYIS2,MYIE2 |
|---|
| 589 | DPTL=(CHI_IK(I,K)+PSTR_IK(I,K)-PINT_IK(I,K))*HBM3(I,J) |
|---|
| 590 | PINT_IK(I,K)=PINT_IK(I,K)+DPTL |
|---|
| 591 | T_IK(I,K)=DPTL*RTOP_IK(I,K)*FCT+T_IK(I,K) |
|---|
| 592 | DELP=(PINT_IK(I,K)-PINT_IK(I,K+1))*RDPP_IK(I,K) |
|---|
| 593 | W_IK(I,K)=((DELP-DWDT_IK(I,K))*GDT+W_IK(I,K))*HBM3(I,J) |
|---|
| 594 | DWDT_IK(I,K)=(DELP-1.)*HBM3(I,J)+1. |
|---|
| 595 | DPTU_I(I)=DPTL |
|---|
| 596 | ENDDO |
|---|
| 597 | ELSE |
|---|
| 598 | DO I=MYIS2,MYIE2 |
|---|
| 599 | DPTL=(CHI_IK(I,K)+PSTR_IK(I,K)-PINT_IK(I,K))*HBM3(I,J) |
|---|
| 600 | PINT_IK(I,K)=PINT_IK(I,K)+DPTL |
|---|
| 601 | T_IK(I,K)=(DPTU_I(I)+DPTL)*RTOP_IK(I,K)*FCT+T_IK(I,K) |
|---|
| 602 | DELP=(PINT_IK(I,K)-PINT_IK(I,K+1))*RDPP_IK(I,K) |
|---|
| 603 | W_IK(I,K)=((DELP-DWDT_IK(I,K))*GDT+W_IK(I,K))*HBM3(I,J) |
|---|
| 604 | DWDT_IK(I,K)=(DELP-1.)*HBM3(I,J)+1. |
|---|
| 605 | DPTU_I(I)=DPTL |
|---|
| 606 | ENDDO |
|---|
| 607 | ENDIF |
|---|
| 608 | ! |
|---|
| 609 | ENDDO |
|---|
| 610 | ! |
|---|
| 611 | !----------------------------------------------------------------------- |
|---|
| 612 | DO K=KTS,KTE |
|---|
| 613 | DO I=MYIS2,MYIE2 |
|---|
| 614 | PINT(I,J,K)=PINT_IK(I,K) |
|---|
| 615 | T(I,J,K)=T_IK(I,K) |
|---|
| 616 | W(I,J,K)=W_IK(I,K) |
|---|
| 617 | DWDT(I,J,K)=DWDT_IK(I,K) |
|---|
| 618 | |
|---|
| 619 | #if !defined ( HWRF ) |
|---|
| 620 | if (DWDT(I,J,K) .lt. 0.80 .or. DWDT(I,J,K) .gt. 1.2) then |
|---|
| 621 | write(message,*) 'very nonhydro...: ', I,J,K,DWDT(I,J,K) |
|---|
| 622 | call wrf_message(message) |
|---|
| 623 | endif |
|---|
| 624 | |
|---|
| 625 | #endif |
|---|
| 626 | ENDDO |
|---|
| 627 | ENDDO |
|---|
| 628 | !----------------------------------------------------------------------- |
|---|
| 629 | ! |
|---|
| 630 | ENDDO final_update |
|---|
| 631 | ! |
|---|
| 632 | !----------------------------------------------------------------------- |
|---|
| 633 | ! |
|---|
| 634 | END SUBROUTINE EPS |
|---|
| 635 | ! |
|---|
| 636 | !----------------------------------------------------------------------- |
|---|
| 637 | ! |
|---|
| 638 | !----------------------------------------------------------------------- |
|---|
| 639 | !*********************************************************************** |
|---|
| 640 | SUBROUTINE VADZ(NTSD,DT,FIS,SIGMA,DFL,HBM2 & |
|---|
| 641 | ,DETA1,DETA2,PDTOP & |
|---|
| 642 | ,PINT,PDSL,PDSLO,PETDT & |
|---|
| 643 | ,RTOP,T,Q,CWM,Z,W,DWDT,PDWDT & |
|---|
| 644 | ,IHE,IHW,IVE,IVW & |
|---|
| 645 | ,IDS,IDE,JDS,JDE,KDS,KDE & |
|---|
| 646 | ,IMS,IME,JMS,JME,KMS,KME & |
|---|
| 647 | ,ITS,ITE,JTS,JTE,KTS,KTE) |
|---|
| 648 | !*********************************************************************** |
|---|
| 649 | !$$$ SUBPROGRAM DOCUMENTATION BLOCK |
|---|
| 650 | ! . . . |
|---|
| 651 | ! SUBPROGRAM: VADZ VERTICAL ADVECTION OF HEIGHT |
|---|
| 652 | ! PRGRMMR: JANJIC ORG: W/NP22 DATE: 93-11-17 |
|---|
| 653 | ! |
|---|
| 654 | ! ABSTRACT: |
|---|
| 655 | ! VADV CALCULATES THE CONTRIBUTION OF THE VERTICAL ADVECTION |
|---|
| 656 | ! OF HEIGHT IN ORDER TO COMPUTE W=DZ/DT DIAGNOSTICALLY |
|---|
| 657 | ! |
|---|
| 658 | ! PROGRAM HISTORY LOG: |
|---|
| 659 | ! 96-05-?? JANJIC - ORIGINATOR |
|---|
| 660 | ! 00-01-04 BLACK - DISTRIBUTED MEMORY AND THREADS |
|---|
| 661 | ! 01-03-26 BLACK - CONVERTED TO WRF STRUCTURE |
|---|
| 662 | ! 02-02-19 BLACK - CONVERSION UPDATED |
|---|
| 663 | ! 04-11-22 BLACK - THREADED |
|---|
| 664 | ! 05-12-12 BLACK - CONVERTED FROM IKJ TO IJK |
|---|
| 665 | ! |
|---|
| 666 | ! USAGE: CALL VADZ FROM MAIN PROGRAM |
|---|
| 667 | ! INPUT ARGUMENT LIST: |
|---|
| 668 | ! |
|---|
| 669 | ! OUTPUT ARGUMENT LIST: |
|---|
| 670 | ! |
|---|
| 671 | ! OUTPUT FILES: |
|---|
| 672 | ! NONE |
|---|
| 673 | ! |
|---|
| 674 | ! SUBPROGRAMS CALLED: |
|---|
| 675 | ! |
|---|
| 676 | ! UNIQUE: NONE |
|---|
| 677 | ! |
|---|
| 678 | ! LIBRARY: NONE |
|---|
| 679 | ! |
|---|
| 680 | ! ATTRIBUTES: |
|---|
| 681 | ! LANGUAGE: FORTRAN 90 |
|---|
| 682 | ! MACHINE : IBM SP |
|---|
| 683 | !$$$ |
|---|
| 684 | !*********************************************************************** |
|---|
| 685 | !----------------------------------------------------------------------- |
|---|
| 686 | ! |
|---|
| 687 | IMPLICIT NONE |
|---|
| 688 | ! |
|---|
| 689 | !----------------------------------------------------------------------- |
|---|
| 690 | #ifdef AS_RECEIVED |
|---|
| 691 | LOGICAL,INTENT(IN) :: SIGMA |
|---|
| 692 | #else |
|---|
| 693 | INTEGER,INTENT(IN) :: SIGMA |
|---|
| 694 | #endif |
|---|
| 695 | ! |
|---|
| 696 | INTEGER,INTENT(IN) :: NTSD |
|---|
| 697 | ! |
|---|
| 698 | INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE & |
|---|
| 699 | ,IMS,IME,JMS,JME,KMS,KME & |
|---|
| 700 | ,ITS,ITE,JTS,JTE,KTS,KTE |
|---|
| 701 | ! |
|---|
| 702 | INTEGER,DIMENSION(JMS:JME),INTENT(IN) :: IHE,IHW,IVE,IVW |
|---|
| 703 | ! |
|---|
| 704 | !----------------------------------------------------------------------- |
|---|
| 705 | ! |
|---|
| 706 | REAL,INTENT(IN) :: DT,PDTOP |
|---|
| 707 | ! |
|---|
| 708 | REAL,DIMENSION(KTS:KTE),INTENT(IN) :: DETA1,DETA2 |
|---|
| 709 | ! |
|---|
| 710 | REAL,DIMENSION(KTS:KTE+1),INTENT(IN) :: DFL |
|---|
| 711 | ! |
|---|
| 712 | REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: FIS,HBM2,PDSL,PDSLO |
|---|
| 713 | ! |
|---|
| 714 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: PETDT |
|---|
| 715 | ! |
|---|
| 716 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: CWM,Q & |
|---|
| 717 | ,RTOP,T |
|---|
| 718 | ! |
|---|
| 719 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(OUT) :: PDWDT |
|---|
| 720 | ! |
|---|
| 721 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(INOUT) :: DWDT |
|---|
| 722 | ! |
|---|
| 723 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: PINT |
|---|
| 724 | ! |
|---|
| 725 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(OUT) :: W,Z |
|---|
| 726 | !----------------------------------------------------------------------- |
|---|
| 727 | ! |
|---|
| 728 | !*** LOCAL VARIABLES |
|---|
| 729 | ! |
|---|
| 730 | !----------------------------------------------------------------------- |
|---|
| 731 | INTEGER :: I,J,K |
|---|
| 732 | ! |
|---|
| 733 | REAL,DIMENSION(IMS:IME,JMS:JME) :: FNE,FSE,TTB |
|---|
| 734 | ! |
|---|
| 735 | REAL :: DZ,RDT,TTAL,ZETA |
|---|
| 736 | !----------------------------------------------------------------------- |
|---|
| 737 | !*********************************************************************** |
|---|
| 738 | !----------------------------------------------------------------------- |
|---|
| 739 | RDT=1./DT |
|---|
| 740 | ! |
|---|
| 741 | DO K=KTS,KTE |
|---|
| 742 | DO J=MYJS,MYJE |
|---|
| 743 | DO I=MYIS,MYIE |
|---|
| 744 | PDWDT(I,J,K)=DWDT(I,J,K) |
|---|
| 745 | DWDT(I,J,K)=W(I,J,K) |
|---|
| 746 | ENDDO |
|---|
| 747 | ENDDO |
|---|
| 748 | ENDDO |
|---|
| 749 | ! |
|---|
| 750 | DO J=MYJS,MYJE |
|---|
| 751 | DO I=MYIS,MYIE |
|---|
| 752 | W(I,J,KTS)=0. |
|---|
| 753 | ! |
|---|
| 754 | #ifdef AS_RECEIVED |
|---|
| 755 | IF(SIGMA)THEN |
|---|
| 756 | #else |
|---|
| 757 | IF(SIGMA==1)THEN |
|---|
| 758 | #endif |
|---|
| 759 | Z(I,J,KTS)=FIS(I,J)*RG |
|---|
| 760 | ELSE |
|---|
| 761 | Z(I,J,KTS)=0. |
|---|
| 762 | ENDIF |
|---|
| 763 | ENDDO |
|---|
| 764 | ENDDO |
|---|
| 765 | ! |
|---|
| 766 | !----------------------------------------------------------------------- |
|---|
| 767 | !$omp parallel do & |
|---|
| 768 | !$omp& private(dz,i,j,k,zeta) |
|---|
| 769 | !----------------------------------------------------------------------- |
|---|
| 770 | ! |
|---|
| 771 | kloop1 : DO K=KTS,KTE |
|---|
| 772 | ! |
|---|
| 773 | !----------------------------------------------------------------------- |
|---|
| 774 | ! |
|---|
| 775 | DO J=MYJS,MYJE |
|---|
| 776 | DO I=MYIS,MYIE |
|---|
| 777 | ! |
|---|
| 778 | ZETA=DFL(K+1)*RG |
|---|
| 779 | DZ=(Q(I,J,K)*P608-CWM(I,J,K)+1.)*T(I,J,K) & |
|---|
| 780 | /(PINT(I,J,K+1)+PINT(I,J,K)) & |
|---|
| 781 | *(DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J))*TRG |
|---|
| 782 | Z(I,J,K+1)=Z(I,J,K)+DZ |
|---|
| 783 | W(I,J,K+1)=(DZ-RTOP(I,J,K) & |
|---|
| 784 | *(DETA1(K)*PDTOP+DETA2(K)*PDSLO(I,J))*RG) & |
|---|
| 785 | *HBM2(I,J) & |
|---|
| 786 | +W(I,J,K) |
|---|
| 787 | ! |
|---|
| 788 | ENDDO |
|---|
| 789 | ENDDO |
|---|
| 790 | ! |
|---|
| 791 | !----------------------------------------------------------------------- |
|---|
| 792 | ! |
|---|
| 793 | ENDDO kloop1 |
|---|
| 794 | ! |
|---|
| 795 | !----------------------------------------------------------------------- |
|---|
| 796 | !$omp parallel do & |
|---|
| 797 | !$omp& private(i,j,k) |
|---|
| 798 | !----------------------------------------------------------------------- |
|---|
| 799 | DO K=KTS,KTE |
|---|
| 800 | ! |
|---|
| 801 | DO J=MYJS,MYJE |
|---|
| 802 | DO I=MYIS,MYIE |
|---|
| 803 | Z(I,J,K)=(Z(I,J,K+1)+Z(I,J,K))*0.5 |
|---|
| 804 | W(I,J,K)=(W(I,J,K+1)+W(I,J,K))*HBM2(I,J)*0.5*RDT |
|---|
| 805 | ENDDO |
|---|
| 806 | ENDDO |
|---|
| 807 | ! |
|---|
| 808 | ENDDO |
|---|
| 809 | !----------------------------------------------------------------------- |
|---|
| 810 | ! |
|---|
| 811 | DO J=MYJS,MYJE |
|---|
| 812 | DO I=MYIS,MYIE |
|---|
| 813 | TTB(I,J)=0. |
|---|
| 814 | ENDDO |
|---|
| 815 | ENDDO |
|---|
| 816 | ! |
|---|
| 817 | !----------------------------------------------------------------------- |
|---|
| 818 | !$omp parallel do & |
|---|
| 819 | !$omp& private(i,j,k,ttal) |
|---|
| 820 | !----------------------------------------------------------------------- |
|---|
| 821 | DO K=KTE,KTS+1,-1 |
|---|
| 822 | DO J=MYJS2,MYJE2 |
|---|
| 823 | DO I=MYIS1,MYIE1 |
|---|
| 824 | TTAL=(Z(I,J,K-1)-Z(I,J,K))*PETDT(I,J,K-1)*0.5 |
|---|
| 825 | W(I,J,K)=(TTAL+TTB(I,J))/(DETA1(K)*PDTOP+DETA2(K)*PDSLO(I,J)) & |
|---|
| 826 | +W(I,J,K) |
|---|
| 827 | TTB(I,J)=TTAL |
|---|
| 828 | ENDDO |
|---|
| 829 | ENDDO |
|---|
| 830 | ENDDO |
|---|
| 831 | ! |
|---|
| 832 | !----------------------------------------------------------------------- |
|---|
| 833 | !$omp parallel do & |
|---|
| 834 | !$omp& private(i,j) |
|---|
| 835 | !----------------------------------------------------------------------- |
|---|
| 836 | DO J=MYJS2,MYJE2 |
|---|
| 837 | DO I=MYIS1,MYIE1 |
|---|
| 838 | W(I,J,KTS)=TTB(I,J)/(DETA1(KTS)*PDTOP+DETA2(KTS)*PDSLO(I,J)) & |
|---|
| 839 | +W(I,J,KTS) |
|---|
| 840 | ENDDO |
|---|
| 841 | ENDDO |
|---|
| 842 | !----------------------------------------------------------------------- |
|---|
| 843 | END SUBROUTINE VADZ |
|---|
| 844 | !----------------------------------------------------------------------- |
|---|
| 845 | ! |
|---|
| 846 | !----------------------------------------------------------------------- |
|---|
| 847 | !*********************************************************************** |
|---|
| 848 | SUBROUTINE HADZ(NTSD,DT,HYDRO,HBM2,DETA1,DETA2,PDTOP & |
|---|
| 849 | ,DX,DY,FAD & |
|---|
| 850 | ,FEW,FNS,FNE,FSE & |
|---|
| 851 | ,PDSL,U,V,W,Z,WP & |
|---|
| 852 | ,IHE,IHW,IVE,IVW & |
|---|
| 853 | ,IDS,IDE,JDS,JDE,KDS,KDE & |
|---|
| 854 | ,IMS,IME,JMS,JME,KMS,KME & |
|---|
| 855 | ,ITS,ITE,JTS,JTE,KTS,KTE) |
|---|
| 856 | !*********************************************************************** |
|---|
| 857 | !$$$ SUBPROGRAM DOCUMENTATION BLOCK |
|---|
| 858 | ! . . . |
|---|
| 859 | ! SUBPROGRAM: HADZ HORIZONTAL ADVECTION OF HEIGHT |
|---|
| 860 | ! PRGRMMR: JANJIC ORG: W/NP22 DATE: 96-05-?? |
|---|
| 861 | ! |
|---|
| 862 | ! ABSTRACT: |
|---|
| 863 | ! HADZ CALCULATES DIAGNOSTICALLY THE CONTRIBUTION OF |
|---|
| 864 | ! THE HORIZONTAL ADVECTION OF HEIGHT |
|---|
| 865 | ! |
|---|
| 866 | ! PROGRAM HISTORY LOG: |
|---|
| 867 | ! 96-05-?? JANJIC - ORIGINATOR |
|---|
| 868 | ! 00-01-04 BLACK - DISTRIBUTED MEMORY AND THREADS |
|---|
| 869 | ! 01-03-26 BLACK - CONVERTED TO WRF STRUCTURE |
|---|
| 870 | ! 04-11-22 BLACK - THREADED |
|---|
| 871 | ! 05-12-12 BLACK - CONVERTED FROM IKJ TO IJK |
|---|
| 872 | ! |
|---|
| 873 | ! USAGE: CALL HADZ FROM MAIN PROGRAM |
|---|
| 874 | ! INPUT ARGUMENT LIST: |
|---|
| 875 | ! |
|---|
| 876 | ! OUTPUT ARGUMENT LIST: |
|---|
| 877 | ! NONE |
|---|
| 878 | ! |
|---|
| 879 | ! OUTPUT FILES: |
|---|
| 880 | ! |
|---|
| 881 | ! SUBPROGRAMS CALLED: |
|---|
| 882 | ! |
|---|
| 883 | ! UNIQUE: NONE |
|---|
| 884 | ! |
|---|
| 885 | ! LIBRARY: NONE |
|---|
| 886 | ! |
|---|
| 887 | ! ATTRIBUTES: |
|---|
| 888 | ! LANGUAGE: FORTRAN 90 |
|---|
| 889 | ! MACHINE : IBM SP |
|---|
| 890 | !$$$ |
|---|
| 891 | !*********************************************************************** |
|---|
| 892 | !----------------------------------------------------------------------- |
|---|
| 893 | ! |
|---|
| 894 | IMPLICIT NONE |
|---|
| 895 | ! |
|---|
| 896 | !----------------------------------------------------------------------- |
|---|
| 897 | LOGICAL,INTENT(IN) :: HYDRO |
|---|
| 898 | ! |
|---|
| 899 | INTEGER,INTENT(IN) :: NTSD |
|---|
| 900 | ! |
|---|
| 901 | INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE & |
|---|
| 902 | ,IMS,IME,JMS,JME,KMS,KME & |
|---|
| 903 | ,ITS,ITE,JTS,JTE,KTS,KTE |
|---|
| 904 | ! |
|---|
| 905 | INTEGER,DIMENSION(JMS:JME),INTENT(IN) :: IHE,IHW,IVE,IVW |
|---|
| 906 | ! |
|---|
| 907 | !----------------------------------------------------------------------- |
|---|
| 908 | ! |
|---|
| 909 | REAL,INTENT(IN) :: DT,DY,PDTOP,WP |
|---|
| 910 | ! |
|---|
| 911 | REAL,DIMENSION(KMS:KME-1),INTENT(IN) :: DETA1,DETA2 |
|---|
| 912 | ! |
|---|
| 913 | REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(IN) :: DX,FAD,HBM2,PDSL |
|---|
| 914 | ! |
|---|
| 915 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: U,V |
|---|
| 916 | ! |
|---|
| 917 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(OUT) :: FEW,FNE & |
|---|
| 918 | ,FNS,FSE |
|---|
| 919 | ! |
|---|
| 920 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(IN) :: Z |
|---|
| 921 | ! |
|---|
| 922 | REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME),INTENT(INOUT) :: W |
|---|
| 923 | !----------------------------------------------------------------------- |
|---|
| 924 | ! |
|---|
| 925 | !*** LOCAL VARIABLES |
|---|
| 926 | ! |
|---|
| 927 | !----------------------------------------------------------------------- |
|---|
| 928 | INTEGER,PARAMETER :: NTSHY=2 |
|---|
| 929 | ! |
|---|
| 930 | INTEGER :: I,J,K |
|---|
| 931 | ! |
|---|
| 932 | REAL :: FEWP,FNEP,FNSP,FSEP,UDY,VDX |
|---|
| 933 | ! |
|---|
| 934 | REAL,DIMENSION(ITS-5:ITE+5,JTS-5:JTE+5) :: DPDE,UNED,USED & |
|---|
| 935 | & ,ZEW,ZNE,ZNS,ZSE,TTB |
|---|
| 936 | ! |
|---|
| 937 | !----------------------------------------------------------------------- |
|---|
| 938 | !*********************************************************************** |
|---|
| 939 | !----------------------------------------------------------------------- |
|---|
| 940 | IF(NTSD+1<=NTSHY.OR.HYDRO)THEN |
|---|
| 941 | !$omp parallel do & |
|---|
| 942 | !$omp& private(i,j,k) |
|---|
| 943 | DO K=KTS,KTE |
|---|
| 944 | DO J=MYJS,MYJE |
|---|
| 945 | DO I=MYIS,MYIE |
|---|
| 946 | W(I,J,K)=0. |
|---|
| 947 | ENDDO |
|---|
| 948 | ENDDO |
|---|
| 949 | ENDDO |
|---|
| 950 | !*** |
|---|
| 951 | RETURN |
|---|
| 952 | !*** |
|---|
| 953 | ENDIF |
|---|
| 954 | !----------------------------------------------------------------------- |
|---|
| 955 | !*********************************************************************** |
|---|
| 956 | !----------------------------------------------------------------------- |
|---|
| 957 | ! |
|---|
| 958 | !*** FIRST ZERO OUT SOME WORKING ARRAYS |
|---|
| 959 | ! |
|---|
| 960 | !$omp parallel do & |
|---|
| 961 | !$omp& private(i,j) |
|---|
| 962 | DO J=JTS-5,JTE+5 |
|---|
| 963 | DO I=ITS-5,ITE+5 |
|---|
| 964 | DPDE(I,J)=0. |
|---|
| 965 | UNED(I,J)=0. |
|---|
| 966 | USED(I,J)=0. |
|---|
| 967 | ENDDO |
|---|
| 968 | ENDDO |
|---|
| 969 | ! |
|---|
| 970 | !----------------------------------------------------------------------- |
|---|
| 971 | !$omp parallel do & |
|---|
| 972 | !$omp& private(dpde,fewp,fnep,fnsp,fsep,i,j,udy,uned,used,vdx & |
|---|
| 973 | !$omp& ,zew,zne,zns,zse) |
|---|
| 974 | !----------------------------------------------------------------------- |
|---|
| 975 | ! |
|---|
| 976 | main_integration: DO K=KTS,KTE |
|---|
| 977 | ! |
|---|
| 978 | !----------------------------------------------------------------------- |
|---|
| 979 | ! |
|---|
| 980 | !*** MASS FLUXES AND MASS POINT ADVECTION COMPONENTS |
|---|
| 981 | ! |
|---|
| 982 | !----------------------------------------------------------------------- |
|---|
| 983 | ! |
|---|
| 984 | DO J=MYJS_P3,MYJE_P3 |
|---|
| 985 | DO I=MYIS_P4,MYIE_P4 |
|---|
| 986 | DPDE(I,J)=DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J) |
|---|
| 987 | ENDDO |
|---|
| 988 | ENDDO |
|---|
| 989 | ! |
|---|
| 990 | DO J=MYJS1_P3,MYJE1_P3 |
|---|
| 991 | DO I=MYIS_P3,MYIE_P3 |
|---|
| 992 | UDY=U(I,J,K)*DY |
|---|
| 993 | VDX=V(I,J,K)*DX(I,J) |
|---|
| 994 | ! |
|---|
| 995 | FEWP=UDY*(DPDE(I+IVW(J),J)+DPDE(I+IVE(J),J)) |
|---|
| 996 | FNSP=VDX*(DPDE(I,J-1)+DPDE(I,J+1)) |
|---|
| 997 | ! |
|---|
| 998 | FEW(I,J,K)=FEWP |
|---|
| 999 | FNS(I,J,K)=FNSP |
|---|
| 1000 | ! |
|---|
| 1001 | ZEW(I,J)=FEWP*(Z(I+IVE(J),J,K)-Z(I+IVW(J),J,K)) |
|---|
| 1002 | ZNS(I,J)=FNSP*(Z(I,J+1,K)-Z(I,J-1,K)) |
|---|
| 1003 | ! |
|---|
| 1004 | UNED(I,J)=UDY+VDX |
|---|
| 1005 | USED(I,J)=UDY-VDX |
|---|
| 1006 | ! |
|---|
| 1007 | ENDDO |
|---|
| 1008 | ENDDO |
|---|
| 1009 | ! |
|---|
| 1010 | !----------------------------------------------------------------------- |
|---|
| 1011 | ! |
|---|
| 1012 | !*** DIAGONAL FLUXES AND DIAGONALLY AVERAGED WIND |
|---|
| 1013 | ! |
|---|
| 1014 | !----------------------------------------------------------------------- |
|---|
| 1015 | DO J=MYJS1_P2,MYJE2_P2 |
|---|
| 1016 | DO I=MYIS_P2,MYIE1_P2 |
|---|
| 1017 | FNEP=(UNED(I+IHE(J),J)+UNED(I,J+1)) & |
|---|
| 1018 | & *(DPDE(I,J)+DPDE(I+IHE(J),J+1)) |
|---|
| 1019 | FNE(I,J,K)=FNEP |
|---|
| 1020 | ZNE(I,J)=FNEP*(Z(I+IHE(J),J+1,K)-Z(I,J,K)) |
|---|
| 1021 | ENDDO |
|---|
| 1022 | ENDDO |
|---|
| 1023 | ! |
|---|
| 1024 | DO J=MYJS2_P2,MYJE1_P2 |
|---|
| 1025 | DO I=MYIS_P2,MYIE1_P2 |
|---|
| 1026 | FSEP=(USED(I+IHE(J),J)+USED(I,J-1)) & |
|---|
| 1027 | & *(DPDE(I,J)+DPDE(I+IHE(J),J-1)) |
|---|
| 1028 | FSE(I,J,K)=FSEP |
|---|
| 1029 | ZSE(I,J)=FSEP*(Z(I+IHE(J),J-1,K)-Z(I,J,K)) |
|---|
| 1030 | ENDDO |
|---|
| 1031 | ENDDO |
|---|
| 1032 | ! |
|---|
| 1033 | !----------------------------------------------------------------------- |
|---|
| 1034 | ! |
|---|
| 1035 | !*** ADVECTION OF Z |
|---|
| 1036 | ! |
|---|
| 1037 | !----------------------------------------------------------------------- |
|---|
| 1038 | ! |
|---|
| 1039 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 1040 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 1041 | W(I,J,K)=-(ZEW(I+IHW(J),J) +ZEW(I+IHE(J),J) & |
|---|
| 1042 | +ZNS(I,J-1) +ZNS(I,J+1) & |
|---|
| 1043 | +ZNE(I+IHW(J),J-1)+ZNE(I,J) & |
|---|
| 1044 | +ZSE(I,J) +ZSE(I+IHW(J),J+1)) & |
|---|
| 1045 | *FAD(I,J)*2.0*HBM2(I,J)/(DPDE(I,J)*DT) & |
|---|
| 1046 | +W(I,J,K) |
|---|
| 1047 | ENDDO |
|---|
| 1048 | ENDDO |
|---|
| 1049 | |
|---|
| 1050 | ENDDO main_integration |
|---|
| 1051 | |
|---|
| 1052 | IF (WP .ge. 0.001) then |
|---|
| 1053 | !----------------------------------------------------------------------- |
|---|
| 1054 | !---taking external mode out-------------------------------------------- |
|---|
| 1055 | !----------------------------------------------------------------------- |
|---|
| 1056 | |
|---|
| 1057 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 1058 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 1059 | TTB(I,J)=0. |
|---|
| 1060 | ENDDO |
|---|
| 1061 | ENDDO |
|---|
| 1062 | ! |
|---|
| 1063 | DO K=KTS,KTE |
|---|
| 1064 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 1065 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 1066 | DPDE(I,J)=DETA1(K)*PDTOP+DETA2(K)*PDSL(I,J) |
|---|
| 1067 | TTB(I,J)=(DPDE(I,J))*W(I,J,K)+TTB(I,J) |
|---|
| 1068 | ENDDO |
|---|
| 1069 | ENDDO |
|---|
| 1070 | ENDDO |
|---|
| 1071 | ! |
|---|
| 1072 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 1073 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 1074 | TTB(I,J)=TTB(I,J)/(PDSL(I,J)+PDTOP) |
|---|
| 1075 | ENDDO |
|---|
| 1076 | ENDDO |
|---|
| 1077 | ! |
|---|
| 1078 | DO K=KTS,KTE |
|---|
| 1079 | DO J=MYJS2_P1,MYJE2_P1 |
|---|
| 1080 | DO I=MYIS1_P1,MYIE1_P1 |
|---|
| 1081 | W(I,J,K)=W(I,J,K)-TTB(I,J) |
|---|
| 1082 | ENDDO |
|---|
| 1083 | ENDDO |
|---|
| 1084 | ENDDO |
|---|
| 1085 | ENDIF |
|---|
| 1086 | ! |
|---|
| 1087 | !----------------------------------------------------------------------- |
|---|
| 1088 | ! |
|---|
| 1089 | END SUBROUTINE HADZ |
|---|
| 1090 | ! |
|---|
| 1091 | !----------------------------------------------------------------------- |
|---|
| 1092 | ! |
|---|
| 1093 | END MODULE MODULE_NONHY_DYNAM |
|---|
| 1094 | ! |
|---|
| 1095 | !----------------------------------------------------------------------- |
|---|