[1] | 1 | !! |
---|
| 2 | MODULE module_cu_sas |
---|
| 3 | |
---|
| 4 | CONTAINS |
---|
| 5 | |
---|
| 6 | !----------------------------------------------------------------- |
---|
| 7 | SUBROUTINE CU_SAS(DT,ITIMESTEP,STEPCU, & |
---|
| 8 | RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, & |
---|
| 9 | RUCUTEN,RVCUTEN, & ! gopal's doing for SAS |
---|
| 10 | RAINCV,PRATEC,HTOP,HBOT, & |
---|
| 11 | U3D,V3D,W,T3D,QV3D,QC3D,QI3D,PI3D,RHO3D, & |
---|
| 12 | DZ8W,PCPS,P8W,XLAND,CU_ACT_FLAG, & |
---|
| 13 | P_QC, & |
---|
| 14 | #if (NMM_CORE == 1) |
---|
| 15 | STORE_RAND,MOMMIX, & ! gopal's doing |
---|
| 16 | #endif |
---|
| 17 | P_QI,P_FIRST_SCALAR, & |
---|
| 18 | CUDT, CURR_SECS, ADAPT_STEP_FLAG, & |
---|
| 19 | ids,ide, jds,jde, kds,kde, & |
---|
| 20 | ims,ime, jms,jme, kms,kme, & |
---|
| 21 | its,ite, jts,jte, kts,kte ) |
---|
| 22 | |
---|
| 23 | !------------------------------------------------------------------- |
---|
| 24 | USE MODULE_GFS_MACHINE , ONLY : kind_phys |
---|
| 25 | USE MODULE_GFS_FUNCPHYS , ONLY : gfuncphys |
---|
| 26 | USE MODULE_GFS_PHYSCONS, grav => con_g, CP => con_CP, HVAP => con_HVAP & |
---|
| 27 | &, RV => con_RV, FV => con_fvirt, T0C => con_T0C & |
---|
| 28 | &, CVAP => con_CVAP, CLIQ => con_CLIQ & |
---|
| 29 | &, EPS => con_eps, EPSM1 => con_epsm1 & |
---|
| 30 | &, ROVCP => con_rocp, RD => con_rd |
---|
| 31 | !------------------------------------------------------------------- |
---|
| 32 | IMPLICIT NONE |
---|
| 33 | !------------------------------------------------------------------- |
---|
| 34 | !-- U3D 3D u-velocity interpolated to theta points (m/s) |
---|
| 35 | !-- V3D 3D v-velocity interpolated to theta points (m/s) |
---|
| 36 | !-- TH3D 3D potential temperature (K) |
---|
| 37 | !-- T3D temperature (K) |
---|
| 38 | !-- QV3D 3D water vapor mixing ratio (Kg/Kg) |
---|
| 39 | !-- QC3D 3D cloud mixing ratio (Kg/Kg) |
---|
| 40 | !-- QI3D 3D ice mixing ratio (Kg/Kg) |
---|
| 41 | !-- P8w 3D pressure at full levels (Pa) |
---|
| 42 | !-- Pcps 3D pressure (Pa) |
---|
| 43 | !-- PI3D 3D exner function (dimensionless) |
---|
| 44 | !-- rr3D 3D dry air density (kg/m^3) |
---|
| 45 | !-- RUBLTEN U tendency due to |
---|
| 46 | ! PBL parameterization (m/s^2) |
---|
| 47 | !-- RVBLTEN V tendency due to |
---|
| 48 | ! PBL parameterization (m/s^2) |
---|
| 49 | !-- RTHBLTEN Theta tendency due to |
---|
| 50 | ! PBL parameterization (K/s) |
---|
| 51 | !-- RQVBLTEN Qv tendency due to |
---|
| 52 | ! PBL parameterization (kg/kg/s) |
---|
| 53 | !-- RQCBLTEN Qc tendency due to |
---|
| 54 | ! PBL parameterization (kg/kg/s) |
---|
| 55 | !-- RQIBLTEN Qi tendency due to |
---|
| 56 | ! PBL parameterization (kg/kg/s) |
---|
| 57 | ! |
---|
| 58 | !-- MOMMIX MOMENTUM MIXING COEFFICIENT (can be set in the namelist) |
---|
| 59 | !-- RUCUTEN U tendency due to Cumulus Momentum Mixing (gopal's doing for SAS) |
---|
| 60 | !-- RVCUTEN V tendency due to Cumulus Momentum Mixing (gopal's doing for SAS) |
---|
| 61 | ! |
---|
| 62 | !-- CP heat capacity at constant pressure for dry air (J/kg/K) |
---|
| 63 | !-- GRAV acceleration due to gravity (m/s^2) |
---|
| 64 | !-- ROVCP R/CP |
---|
| 65 | !-- RD gas constant for dry air (J/kg/K) |
---|
| 66 | !-- ROVG R/G |
---|
| 67 | !-- P_QI species index for cloud ice |
---|
| 68 | !-- dz8w dz between full levels (m) |
---|
| 69 | !-- z height above sea level (m) |
---|
| 70 | !-- PSFC pressure at the surface (Pa) |
---|
| 71 | !-- UST u* in similarity theory (m/s) |
---|
| 72 | !-- PBL PBL height (m) |
---|
| 73 | !-- PSIM similarity stability function for momentum |
---|
| 74 | !-- PSIH similarity stability function for heat |
---|
| 75 | !-- HFX upward heat flux at the surface (W/m^2) |
---|
| 76 | !-- QFX upward moisture flux at the surface (kg/m^2/s) |
---|
| 77 | !-- TSK surface temperature (K) |
---|
| 78 | !-- GZ1OZ0 log(z/z0) where z0 is roughness length |
---|
| 79 | !-- WSPD wind speed at lowest model level (m/s) |
---|
| 80 | !-- BR bulk Richardson number in surface layer |
---|
| 81 | !-- DT time step (s) |
---|
| 82 | !-- rvovrd R_v divided by R_d (dimensionless) |
---|
| 83 | !-- EP1 constant for virtual temperature (R_v/R_d - 1) (dimensionless) |
---|
| 84 | !-- KARMAN Von Karman constant |
---|
| 85 | !-- ids start index for i in domain |
---|
| 86 | !-- ide end index for i in domain |
---|
| 87 | !-- jds start index for j in domain |
---|
| 88 | !-- jde end index for j in domain |
---|
| 89 | !-- kds start index for k in domain |
---|
| 90 | !-- kde end index for k in domain |
---|
| 91 | !-- ims start index for i in memory |
---|
| 92 | !-- ime end index for i in memory |
---|
| 93 | !-- jms start index for j in memory |
---|
| 94 | !-- jme end index for j in memory |
---|
| 95 | !-- kms start index for k in memory |
---|
| 96 | !-- kme end index for k in memory |
---|
| 97 | !-- its start index for i in tile |
---|
| 98 | !-- ite end index for i in tile |
---|
| 99 | !-- jts start index for j in tile |
---|
| 100 | !-- jte end index for j in tile |
---|
| 101 | !-- kts start index for k in tile |
---|
| 102 | !-- kte end index for k in tile |
---|
| 103 | !------------------------------------------------------------------- |
---|
| 104 | |
---|
| 105 | INTEGER :: ICLDCK |
---|
| 106 | |
---|
| 107 | INTEGER, INTENT(IN) :: ids,ide, jds,jde, kds,kde, & |
---|
| 108 | ims,ime, jms,jme, kms,kme, & |
---|
| 109 | its,ite, jts,jte, kts,kte, & |
---|
| 110 | ITIMESTEP, & !NSTD |
---|
| 111 | P_FIRST_SCALAR, & |
---|
| 112 | P_QC, & |
---|
| 113 | P_QI, & |
---|
| 114 | STEPCU |
---|
| 115 | |
---|
| 116 | REAL, INTENT(IN) :: & |
---|
| 117 | DT |
---|
| 118 | |
---|
| 119 | |
---|
| 120 | REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: & |
---|
| 121 | RQCCUTEN, & |
---|
| 122 | RQICUTEN, & |
---|
| 123 | RQVCUTEN, & |
---|
| 124 | RTHCUTEN |
---|
| 125 | REAL, DIMENSION(ims:ime, jms:jme, kms:kme), INTENT(INOUT) :: & |
---|
| 126 | RUCUTEN, & ! gopal's doing for SAS |
---|
| 127 | RVCUTEN ! gopal's doing for SAS |
---|
| 128 | #if (NMM_CORE == 1) |
---|
| 129 | REAL, INTENT(IN) :: MOMMIX |
---|
| 130 | REAL, DIMENSION( ims:ime , jms:jme ), & |
---|
| 131 | INTENT(IN) :: STORE_RAND |
---|
| 132 | |
---|
| 133 | #endif |
---|
| 134 | |
---|
| 135 | REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: & |
---|
| 136 | XLAND |
---|
| 137 | |
---|
| 138 | REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: & |
---|
| 139 | RAINCV, PRATEC |
---|
| 140 | |
---|
| 141 | REAL, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: & |
---|
| 142 | HBOT, & |
---|
| 143 | HTOP |
---|
| 144 | |
---|
| 145 | LOGICAL, DIMENSION(IMS:IME,JMS:JME), INTENT(INOUT) :: & |
---|
| 146 | CU_ACT_FLAG |
---|
| 147 | |
---|
| 148 | |
---|
| 149 | REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN) :: & |
---|
| 150 | DZ8W, & |
---|
| 151 | P8w, & |
---|
| 152 | Pcps, & |
---|
| 153 | PI3D, & |
---|
| 154 | QC3D, & |
---|
| 155 | QI3D, & |
---|
| 156 | QV3D, & |
---|
| 157 | RHO3D, & |
---|
| 158 | T3D, & |
---|
| 159 | U3D, & |
---|
| 160 | V3D, & |
---|
| 161 | W |
---|
| 162 | |
---|
| 163 | ! Adaptive time-step variables |
---|
| 164 | REAL, INTENT(IN ) :: CUDT |
---|
| 165 | REAL, INTENT(IN ) :: CURR_SECS |
---|
| 166 | LOGICAL,INTENT(IN ) :: ADAPT_STEP_FLAG |
---|
| 167 | |
---|
| 168 | !--------------------------- LOCAL VARS ------------------------------ |
---|
| 169 | |
---|
| 170 | REAL, DIMENSION(ims:ime, jms:jme) :: & |
---|
| 171 | PSFC |
---|
| 172 | |
---|
| 173 | |
---|
| 174 | REAL (kind=kind_phys) :: & |
---|
| 175 | DELT, & |
---|
| 176 | DPSHC, & |
---|
| 177 | RDELT, & |
---|
| 178 | RSEED |
---|
| 179 | |
---|
| 180 | REAL (kind=kind_phys), DIMENSION(its:ite) :: & |
---|
| 181 | CLDWRK, & |
---|
| 182 | PS, & |
---|
| 183 | RCS, & |
---|
| 184 | RN, & |
---|
| 185 | SLIMSK, & |
---|
| 186 | XKT2 |
---|
| 187 | |
---|
| 188 | REAL (kind=kind_phys), DIMENSION(its:ite, kts:kte+1) :: & |
---|
| 189 | PRSI |
---|
| 190 | |
---|
| 191 | REAL (kind=kind_phys), DIMENSION(its:ite, kts:kte) :: & |
---|
| 192 | DEL, & |
---|
| 193 | DOT, & |
---|
| 194 | PHIL, & |
---|
| 195 | PRSL, & |
---|
| 196 | PRSLK, & |
---|
| 197 | Q1, & |
---|
| 198 | T1, & |
---|
| 199 | U1, & |
---|
| 200 | V1, & |
---|
| 201 | ZI, & |
---|
| 202 | ZL |
---|
| 203 | |
---|
| 204 | REAL (kind=kind_phys), DIMENSION(its:ite, kts:kte, 2) :: & |
---|
| 205 | QL |
---|
| 206 | |
---|
| 207 | INTEGER, DIMENSION(its:ite) :: & |
---|
| 208 | KBOT, & |
---|
| 209 | KTOP, & |
---|
| 210 | KUO |
---|
| 211 | |
---|
| 212 | INTEGER :: & |
---|
| 213 | I, & |
---|
| 214 | IGPVS, & |
---|
| 215 | IM, & |
---|
| 216 | J, & |
---|
| 217 | JCAP, & |
---|
| 218 | K, & |
---|
| 219 | KM, & |
---|
| 220 | KP, & |
---|
| 221 | KX, & |
---|
| 222 | NCLOUD |
---|
| 223 | |
---|
| 224 | LOGICAL :: run_param |
---|
| 225 | |
---|
| 226 | DATA IGPVS/0/ |
---|
| 227 | |
---|
| 228 | !----------------------------------------------------------------------- |
---|
| 229 | ! |
---|
| 230 | !*** CHECK TO SEE IF THIS IS A CONVECTION TIMESTEP |
---|
| 231 | ! |
---|
| 232 | if (adapt_step_flag) then |
---|
| 233 | if ( (ITIMESTEP .eq. 0) .or. (cudt .eq. 0) .or. & |
---|
| 234 | ( CURR_SECS + dt >= ( int( CURR_SECS / ( cudt * 60 ) ) + 1 ) * cudt * 60 ) ) then |
---|
| 235 | run_param = .TRUE. |
---|
| 236 | else |
---|
| 237 | run_param = .FALSE. |
---|
| 238 | endif |
---|
| 239 | |
---|
| 240 | else |
---|
| 241 | if (MOD(ITIMESTEP,STEPCU) .EQ. 0 .or. ITIMESTEP .eq. 0) then |
---|
| 242 | run_param = .TRUE. |
---|
| 243 | else |
---|
| 244 | run_param = .FALSE. |
---|
| 245 | endif |
---|
| 246 | endif |
---|
| 247 | |
---|
| 248 | !----------------------------------------------------------------------- |
---|
| 249 | |
---|
| 250 | |
---|
| 251 | IF(run_param) THEN |
---|
| 252 | |
---|
| 253 | DO J=JTS,JTE |
---|
| 254 | DO I=ITS,ITE |
---|
| 255 | CU_ACT_FLAG(I,J)=.TRUE. |
---|
| 256 | ENDDO |
---|
| 257 | ENDDO |
---|
| 258 | |
---|
| 259 | IM=ITE-ITS+1 |
---|
| 260 | KX=KTE-KTS+1 |
---|
| 261 | JCAP=126 |
---|
| 262 | DPSHC=30_kind_phys |
---|
| 263 | DELT=DT*STEPCU |
---|
| 264 | RDELT=1./DELT |
---|
| 265 | NCLOUD=1 |
---|
| 266 | |
---|
| 267 | |
---|
| 268 | DO J=jms,jme |
---|
| 269 | DO I=ims,ime |
---|
| 270 | PSFC(i,j)=P8w(i,kms,j) |
---|
| 271 | ENDDO |
---|
| 272 | ENDDO |
---|
| 273 | |
---|
| 274 | if(igpvs.eq.0) CALL GFUNCPHYS |
---|
| 275 | igpvs=1 |
---|
| 276 | |
---|
| 277 | !------------- J LOOP (OUTER) -------------------------------------------------- |
---|
| 278 | |
---|
| 279 | DO J=jts,jte |
---|
| 280 | |
---|
| 281 | ! --------------- compute zi and zl ----------------------------------------- |
---|
| 282 | DO i=its,ite |
---|
| 283 | ZI(I,KTS)=0.0 |
---|
| 284 | ENDDO |
---|
| 285 | |
---|
| 286 | DO k=kts+1,kte |
---|
| 287 | KM=K-1 |
---|
| 288 | DO i=its,ite |
---|
| 289 | ZI(I,K)=ZI(I,KM)+dz8w(i,km,j) |
---|
| 290 | ENDDO |
---|
| 291 | ENDDO |
---|
| 292 | |
---|
| 293 | DO k=kts+1,kte |
---|
| 294 | KM=K-1 |
---|
| 295 | DO i=its,ite |
---|
| 296 | ZL(I,KM)=(ZI(I,K)+ZI(I,KM))*0.5 |
---|
| 297 | ENDDO |
---|
| 298 | ENDDO |
---|
| 299 | |
---|
| 300 | DO i=its,ite |
---|
| 301 | ZL(I,KTE)=2.*ZI(I,KTE)-ZL(I,KTE-1) |
---|
| 302 | ENDDO |
---|
| 303 | |
---|
| 304 | ! --------------- end compute zi and zl ------------------------------------- |
---|
| 305 | |
---|
| 306 | ! Based on some important findings from Morris Bender, XKT2 was defined in |
---|
| 307 | ! terms of random number instead of random number based cloud tops |
---|
| 308 | ! Also, these random numbers are stored and are changed only once in |
---|
| 309 | ! approximately 5 minutes interval now. This is gopal's doing for HWRF. |
---|
| 310 | |
---|
| 311 | ! call random_number(XKT2) |
---|
| 312 | |
---|
| 313 | #if (EM_CORE == 1) |
---|
| 314 | ! XKT2 was defined in terms of random number instead of random number based cloud tops |
---|
| 315 | ! ZCX |
---|
| 316 | call init_random_seed() |
---|
| 317 | call random_number(XKT2) |
---|
| 318 | #ifdef REGTEST |
---|
| 319 | ! for regtest only |
---|
| 320 | xkt2 = 0.1 |
---|
| 321 | #endif |
---|
| 322 | #endif |
---|
| 323 | ! |
---|
| 324 | #if (NMM_CORE == 1) |
---|
| 325 | DO i=its,ite |
---|
| 326 | XKT2(i) = STORE_RAND(i,j) |
---|
| 327 | ENDDO |
---|
| 328 | #endif |
---|
| 329 | |
---|
| 330 | DO i=its,ite |
---|
| 331 | PS(i)=PSFC(i,j)*.001 |
---|
| 332 | RCS(i)=1. |
---|
| 333 | SLIMSK(i)=ABS(XLAND(i,j)-2.) |
---|
| 334 | ENDDO |
---|
| 335 | |
---|
| 336 | DO i=its,ite |
---|
| 337 | PRSI(i,kts)=PS(i) |
---|
| 338 | ENDDO |
---|
| 339 | |
---|
| 340 | DO k=kts,kte |
---|
| 341 | kp=k+1 |
---|
| 342 | DO i=its,ite |
---|
| 343 | PRSL(I,K)=Pcps(i,k,j)*.001 |
---|
| 344 | PHIL(I,K)=ZL(I,K)*GRAV |
---|
| 345 | DOT(i,k)=-5.0E-4*GRAV*rho3d(i,k,j)*(w(i,k,j)+w(i,kp,j)) |
---|
| 346 | ENDDO |
---|
| 347 | ENDDO |
---|
| 348 | |
---|
| 349 | DO k=kts,kte |
---|
| 350 | DO i=its,ite |
---|
| 351 | DEL(i,k)=PRSL(i,k)*GRAV/RD*dz8w(i,k,j)/T3D(i,k,j) |
---|
| 352 | U1(i,k)=U3D(i,k,j) |
---|
| 353 | V1(i,k)=V3D(i,k,j) |
---|
| 354 | Q1(i,k)=QV3D(i,k,j)/(1.+QV3D(i,k,j)) |
---|
| 355 | T1(i,k)=T3D(i,k,j) |
---|
| 356 | QL(i,k,1)=QI3D(i,k,j)/(1.+QI3D(i,k,j)) |
---|
| 357 | QL(i,k,2)=QC3D(i,k,j)/(1.+QC3D(i,k,j)) |
---|
| 358 | PRSLK(I,K)=(PRSL(i,k)*.01)**ROVCP |
---|
| 359 | ENDDO |
---|
| 360 | ENDDO |
---|
| 361 | |
---|
| 362 | DO k=kts+1,kte+1 |
---|
| 363 | km=k-1 |
---|
| 364 | DO i=its,ite |
---|
| 365 | PRSI(i,k)=PRSI(i,km)-del(i,km) |
---|
| 366 | ENDDO |
---|
| 367 | ENDDO |
---|
| 368 | |
---|
| 369 | |
---|
| 370 | CALL SASCNV(IM,IM,KX,JCAP,DELT,DEL,PRSL,PS,PHIL, & |
---|
| 371 | QL,Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT, & |
---|
| 372 | KTOP,KUO,SLIMSK,DOT,XKT2,NCLOUD) |
---|
| 373 | |
---|
| 374 | !!! make more like GFDL ... eliminate shallow convection..... |
---|
| 375 | !!! CALL SHALCV(IM,IM,KX,DELT,DEL,PRSI,PRSL,PRSLK,KUO,Q1,T1,DPSHC) |
---|
| 376 | #if (EM_CORE == 1) |
---|
| 377 | CALL SHALCV(IM,IM,KX,DELT,DEL,PRSI,PRSL,PRSLK,KUO,Q1,T1,DPSHC) |
---|
| 378 | #endif |
---|
| 379 | |
---|
| 380 | DO I=ITS,ITE |
---|
| 381 | RAINCV(I,J)=RN(I)*1000./STEPCU |
---|
| 382 | PRATEC(I,J)=RN(I)*1000./(STEPCU * DT) |
---|
| 383 | HBOT(I,J)=KBOT(I) |
---|
| 384 | HTOP(I,J)=KTOP(I) |
---|
| 385 | ENDDO |
---|
| 386 | |
---|
| 387 | DO K=KTS,KTE |
---|
| 388 | DO I=ITS,ITE |
---|
| 389 | RTHCUTEN(I,K,J)=(T1(I,K)-T3D(I,K,J))/PI3D(I,K,J)*RDELT |
---|
| 390 | RQVCUTEN(I,K,J)=(Q1(I,K)/(1.-q1(i,k))-QV3D(I,K,J))*RDELT |
---|
| 391 | ENDDO |
---|
| 392 | ENDDO |
---|
| 393 | |
---|
| 394 | !=============================================================================== |
---|
| 395 | ! ADD MOMENTUM MIXING TERM AS TENDENCIES. This is gopal's doing for SAS |
---|
| 396 | ! MOMMIX is the reduction factor set to 0.7 by default. Because NMM has |
---|
| 397 | ! divergence damping term, a reducion factor for cumulum mixing may be |
---|
| 398 | ! required otherwise storms were too weak. |
---|
| 399 | !=============================================================================== |
---|
| 400 | ! |
---|
| 401 | #if (NMM_CORE == 1) |
---|
| 402 | DO K=KTS,KTE |
---|
| 403 | DO I=ITS,ITE |
---|
| 404 | RUCUTEN(I,J,K)=MOMMIX*(U1(I,K)-U3D(I,K,J))*RDELT |
---|
| 405 | RVCUTEN(I,J,K)=MOMMIX*(V1(I,K)-V3D(I,K,J))*RDELT |
---|
| 406 | ENDDO |
---|
| 407 | ENDDO |
---|
| 408 | #endif |
---|
| 409 | |
---|
| 410 | |
---|
| 411 | IF(P_QC .ge. P_FIRST_SCALAR)THEN |
---|
| 412 | DO K=KTS,KTE |
---|
| 413 | DO I=ITS,ITE |
---|
| 414 | RQCCUTEN(I,K,J)=(QL(I,K,2)/(1.-ql(i,k,2))-QC3D(I,K,J))*RDELT |
---|
| 415 | ENDDO |
---|
| 416 | ENDDO |
---|
| 417 | ENDIF |
---|
| 418 | |
---|
| 419 | IF(P_QI .ge. P_FIRST_SCALAR)THEN |
---|
| 420 | DO K=KTS,KTE |
---|
| 421 | DO I=ITS,ITE |
---|
| 422 | RQICUTEN(I,K,J)=(QL(I,K,1)/(1.-ql(i,k,1))-QI3D(I,K,J))*RDELT |
---|
| 423 | ENDDO |
---|
| 424 | ENDDO |
---|
| 425 | ENDIF |
---|
| 426 | |
---|
| 427 | ENDDO ! Outer most J loop |
---|
| 428 | |
---|
| 429 | ENDIF |
---|
| 430 | |
---|
| 431 | END SUBROUTINE CU_SAS |
---|
| 432 | |
---|
| 433 | !==================================================================== |
---|
| 434 | SUBROUTINE sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, & |
---|
| 435 | RUCUTEN,RVCUTEN, & ! gopal's doing for SAS |
---|
| 436 | RESTART,P_QC,P_QI,P_FIRST_SCALAR, & |
---|
| 437 | allowed_to_read, & |
---|
| 438 | ids, ide, jds, jde, kds, kde, & |
---|
| 439 | ims, ime, jms, jme, kms, kme, & |
---|
| 440 | its, ite, jts, jte, kts, kte ) |
---|
| 441 | !-------------------------------------------------------------------- |
---|
| 442 | IMPLICIT NONE |
---|
| 443 | !-------------------------------------------------------------------- |
---|
| 444 | LOGICAL , INTENT(IN) :: allowed_to_read,restart |
---|
| 445 | INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, & |
---|
| 446 | ims, ime, jms, jme, kms, kme, & |
---|
| 447 | its, ite, jts, jte, kts, kte |
---|
| 448 | INTEGER , INTENT(IN) :: P_FIRST_SCALAR, P_QI, P_QC |
---|
| 449 | |
---|
| 450 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: & |
---|
| 451 | RTHCUTEN, & |
---|
| 452 | RQVCUTEN, & |
---|
| 453 | RQCCUTEN, & |
---|
| 454 | RQICUTEN |
---|
| 455 | REAL, DIMENSION( ims:ime , jms:jme , kms:kme ) , INTENT(OUT) :: & |
---|
| 456 | RUCUTEN, & ! gopal's doing for SAS |
---|
| 457 | RVCUTEN |
---|
| 458 | |
---|
| 459 | INTEGER :: i, j, k, itf, jtf, ktf |
---|
| 460 | |
---|
| 461 | jtf=min0(jte,jde-1) |
---|
| 462 | ktf=min0(kte,kde-1) |
---|
| 463 | itf=min0(ite,ide-1) |
---|
| 464 | |
---|
| 465 | #ifdef HWRF |
---|
| 466 | !zhang's doing |
---|
| 467 | IF(.not.restart .or. .not.allowed_to_read)THEN |
---|
| 468 | !end of zhang's doing |
---|
| 469 | #else |
---|
| 470 | IF(.not.restart)THEN |
---|
| 471 | #endif |
---|
| 472 | DO j=jts,jtf |
---|
| 473 | DO k=kts,ktf |
---|
| 474 | DO i=its,itf |
---|
| 475 | RTHCUTEN(i,k,j)=0. |
---|
| 476 | RQVCUTEN(i,k,j)=0. |
---|
| 477 | RUCUTEN(i,j,k)=0. ! gopal's doing for SAS |
---|
| 478 | RVCUTEN(i,j,k)=0. ! gopal's doing for SAS |
---|
| 479 | ENDDO |
---|
| 480 | ENDDO |
---|
| 481 | ENDDO |
---|
| 482 | |
---|
| 483 | IF (P_QC .ge. P_FIRST_SCALAR) THEN |
---|
| 484 | DO j=jts,jtf |
---|
| 485 | DO k=kts,ktf |
---|
| 486 | DO i=its,itf |
---|
| 487 | RQCCUTEN(i,k,j)=0. |
---|
| 488 | ENDDO |
---|
| 489 | ENDDO |
---|
| 490 | ENDDO |
---|
| 491 | ENDIF |
---|
| 492 | |
---|
| 493 | IF (P_QI .ge. P_FIRST_SCALAR) THEN |
---|
| 494 | DO j=jts,jtf |
---|
| 495 | DO k=kts,ktf |
---|
| 496 | DO i=its,itf |
---|
| 497 | RQICUTEN(i,k,j)=0. |
---|
| 498 | ENDDO |
---|
| 499 | ENDDO |
---|
| 500 | ENDDO |
---|
| 501 | ENDIF |
---|
| 502 | ENDIF |
---|
| 503 | |
---|
| 504 | END SUBROUTINE sasinit |
---|
| 505 | |
---|
| 506 | ! ------------------------------------------------------------------------ |
---|
| 507 | |
---|
| 508 | SUBROUTINE SASCNV(IM,IX,KM,JCAP,DELT,DEL,PRSL,PS,PHIL,QL, & |
---|
| 509 | ! SUBROUTINE SASCNV(IM,IX,KM,JCAP,DLT,DEL,PRSL,PHIL,QL, & |
---|
| 510 | & Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,KTOP,KUO,SLIMSK, & |
---|
| 511 | & DOT,XKT2,ncloud) |
---|
| 512 | ! for cloud water version |
---|
| 513 | ! parameter(ncloud=0) |
---|
| 514 | ! SUBROUTINE SASCNV(KM,JCAP,DELT,DEL,SL,SLK,PS,QL, |
---|
| 515 | ! & Q1,T1,U1,V1,RCS,CLDWRK,RN,KBOT,KTOP,KUO,SLIMSK, |
---|
| 516 | ! & DOT,xkt2,ncloud) |
---|
| 517 | ! |
---|
| 518 | USE MODULE_GFS_MACHINE , ONLY : kind_phys |
---|
| 519 | USE MODULE_GFS_FUNCPHYS ,ONLY : fpvs |
---|
| 520 | USE MODULE_GFS_PHYSCONS, grav => con_g, CP => con_CP, HVAP => con_HVAP & |
---|
| 521 | &, RV => con_RV, FV => con_fvirt, T0C => con_T0C & |
---|
| 522 | &, CVAP => con_CVAP, CLIQ => con_CLIQ & |
---|
| 523 | &, EPS => con_eps, EPSM1 => con_epsm1 |
---|
| 524 | |
---|
| 525 | implicit none |
---|
| 526 | ! |
---|
| 527 | ! include 'constant.h' |
---|
| 528 | ! |
---|
| 529 | integer IM, IX, KM, JCAP, ncloud, & |
---|
| 530 | & KBOT(IM), KTOP(IM), KUO(IM), J |
---|
| 531 | real(kind=kind_phys) DELT |
---|
| 532 | real(kind=kind_phys) PS(IM), DEL(IX,KM), PRSL(IX,KM), & |
---|
| 533 | ! real(kind=kind_phys) DEL(IX,KM), PRSL(IX,KM), |
---|
| 534 | & QL(IX,KM,2), Q1(IX,KM), T1(IX,KM), & |
---|
| 535 | & U1(IX,KM), V1(IX,KM), RCS(IM), & |
---|
| 536 | & CLDWRK(IM), RN(IM), SLIMSK(IM), & |
---|
| 537 | & DOT(IX,KM), XKT2(IM), PHIL(IX,KM) |
---|
| 538 | ! |
---|
| 539 | integer I, INDX, jmn, k, knumb, latd, lond, km1 |
---|
| 540 | ! |
---|
| 541 | real(kind=kind_phys) adw, alpha, alphal, alphas, & |
---|
| 542 | & aup, beta, betal, betas, & |
---|
| 543 | & c0, cpoel, dellat, delta, & |
---|
| 544 | & desdt, deta, detad, dg, & |
---|
| 545 | & dh, dhh, dlnsig, dp, & |
---|
| 546 | & dq, dqsdp, dqsdt, dt, & |
---|
| 547 | & dt2, dtmax, dtmin, dv1, & |
---|
| 548 | & dv1q, dv2, dv2q, dv1u, & |
---|
| 549 | & dv1v, dv2u, dv2v, dv3u, & |
---|
| 550 | & dv3v, dv3, dv3q, dvq1, & |
---|
| 551 | & dz, dz1, e1, edtmax, & |
---|
| 552 | & edtmaxl, edtmaxs, el2orc, elocp, & |
---|
| 553 | & es, etah, & |
---|
| 554 | & evef, evfact, evfactl, fact1, & |
---|
| 555 | & fact2, factor, fjcap, fkm, & |
---|
| 556 | & fuv, g, gamma, onemf, & |
---|
| 557 | & onemfu, pdetrn, pdpdwn, pprime, & |
---|
| 558 | & qc, qlk, qrch, qs, & |
---|
| 559 | & rain, rfact, shear, tem1, & |
---|
| 560 | & tem2, terr, val, val1, & |
---|
| 561 | & val2, w1, w1l, w1s, & |
---|
| 562 | & w2, w2l, w2s, w3, & |
---|
| 563 | & w3l, w3s, w4, w4l, & |
---|
| 564 | & w4s, xdby, xpw, xpwd, & |
---|
| 565 | & xqc, xqrch, xlambu, mbdt, & |
---|
| 566 | & tem |
---|
| 567 | ! |
---|
| 568 | ! |
---|
| 569 | integer JMIN(IM), KB(IM), KBCON(IM), KBDTR(IM), & |
---|
| 570 | & KT2(IM), KTCON(IM), LMIN(IM), & |
---|
| 571 | & kbm(IM), kbmax(IM), kmax(IM) |
---|
| 572 | ! |
---|
| 573 | real(kind=kind_phys) AA1(IM), ACRT(IM), ACRTFCT(IM), & |
---|
| 574 | & DELHBAR(IM), DELQ(IM), DELQ2(IM), & |
---|
| 575 | & DELQBAR(IM), DELQEV(IM), DELTBAR(IM), & |
---|
| 576 | & DELTV(IM), DTCONV(IM), EDT(IM), & |
---|
| 577 | & EDTO(IM), EDTX(IM), FLD(IM), & |
---|
| 578 | & HCDO(IM), HKBO(IM), HMAX(IM), & |
---|
| 579 | & HMIN(IM), HSBAR(IM), UCDO(IM), & |
---|
| 580 | & UKBO(IM), VCDO(IM), VKBO(IM), & |
---|
| 581 | & PBCDIF(IM), PDOT(IM), PO(IM,KM), & |
---|
| 582 | & PWAVO(IM), PWEVO(IM), & |
---|
| 583 | ! & PSFC(IM), PWAVO(IM), PWEVO(IM), & |
---|
| 584 | & QCDO(IM), QCOND(IM), QEVAP(IM), & |
---|
| 585 | & QKBO(IM), RNTOT(IM), VSHEAR(IM), & |
---|
| 586 | & XAA0(IM), XHCD(IM), XHKB(IM), & |
---|
| 587 | & XK(IM), XLAMB(IM), XLAMD(IM), & |
---|
| 588 | & XMB(IM), XMBMAX(IM), XPWAV(IM), & |
---|
| 589 | & XPWEV(IM), XQCD(IM), XQKB(IM) |
---|
| 590 | ! |
---|
| 591 | ! PHYSICAL PARAMETERS |
---|
| 592 | PARAMETER(G=grav) |
---|
| 593 | PARAMETER(CPOEL=CP/HVAP,ELOCP=HVAP/CP, & |
---|
| 594 | & EL2ORC=HVAP*HVAP/(RV*CP)) |
---|
| 595 | PARAMETER(TERR=0.,C0=.002,DELTA=fv) |
---|
| 596 | PARAMETER(FACT1=(CVAP-CLIQ)/RV,FACT2=HVAP/RV-FACT1*T0C) |
---|
| 597 | ! LOCAL VARIABLES AND ARRAYS |
---|
| 598 | real(kind=kind_phys) PFLD(IM,KM), TO(IM,KM), QO(IM,KM), & |
---|
| 599 | & UO(IM,KM), VO(IM,KM), QESO(IM,KM) |
---|
| 600 | ! cloud water |
---|
| 601 | real(kind=kind_phys) QLKO_KTCON(IM), DELLAL(IM), TVO(IM,KM), & |
---|
| 602 | & DBYO(IM,KM), ZO(IM,KM), SUMZ(IM,KM), & |
---|
| 603 | & SUMH(IM,KM), HEO(IM,KM), HESO(IM,KM), & |
---|
| 604 | & QRCD(IM,KM), DELLAH(IM,KM), DELLAQ(IM,KM),& |
---|
| 605 | & DELLAU(IM,KM), DELLAV(IM,KM), HCKO(IM,KM), & |
---|
| 606 | & UCKO(IM,KM), VCKO(IM,KM), QCKO(IM,KM), & |
---|
| 607 | & ETA(IM,KM), ETAU(IM,KM), ETAD(IM,KM), & |
---|
| 608 | & QRCDO(IM,KM), PWO(IM,KM), PWDO(IM,KM), & |
---|
| 609 | & RHBAR(IM), TX1(IM) |
---|
| 610 | ! |
---|
| 611 | LOGICAL TOTFLG, CNVFLG(IM), DWNFLG(IM), DWNFLG2(IM), FLG(IM) |
---|
| 612 | ! |
---|
| 613 | real(kind=kind_phys) PCRIT(15), ACRITT(15), ACRIT(15) |
---|
| 614 | ! SAVE PCRIT, ACRITT |
---|
| 615 | DATA PCRIT/850.,800.,750.,700.,650.,600.,550.,500.,450.,400., & |
---|
| 616 | & 350.,300.,250.,200.,150./ |
---|
| 617 | DATA ACRITT/.0633,.0445,.0553,.0664,.075,.1082,.1521,.2216, & |
---|
| 618 | & .3151,.3677,.41,.5255,.7663,1.1686,1.6851/ |
---|
| 619 | ! GDAS DERIVED ACRIT |
---|
| 620 | ! DATA ACRITT/.203,.515,.521,.566,.625,.665,.659,.688, & |
---|
| 621 | ! & .743,.813,.886,.947,1.138,1.377,1.896/ |
---|
| 622 | ! |
---|
| 623 | real(kind=kind_phys) TF, TCR, TCRF, RZERO, RONE |
---|
| 624 | parameter (TF=233.16, TCR=263.16, TCRF=1.0/(TCR-TF)) |
---|
| 625 | parameter (RZERO=0.0,RONE=1.0) |
---|
| 626 | !----------------------------------------------------------------------- |
---|
| 627 | ! |
---|
| 628 | km1 = km - 1 |
---|
| 629 | ! INITIALIZE ARRAYS |
---|
| 630 | ! |
---|
| 631 | DO I=1,IM |
---|
| 632 | RN(I)=0. |
---|
| 633 | KBOT(I)=KM+1 |
---|
| 634 | KTOP(I)=0 |
---|
| 635 | KUO(I)=0 |
---|
| 636 | CNVFLG(I) = .TRUE. |
---|
| 637 | DTCONV(I) = 3600. |
---|
| 638 | CLDWRK(I) = 0. |
---|
| 639 | PDOT(I) = 0. |
---|
| 640 | KT2(I) = 0 |
---|
| 641 | QLKO_KTCON(I) = 0. |
---|
| 642 | DELLAL(I) = 0. |
---|
| 643 | ENDDO |
---|
| 644 | !! |
---|
| 645 | DO K = 1, 15 |
---|
| 646 | ACRIT(K) = ACRITT(K) * (975. - PCRIT(K)) |
---|
| 647 | ENDDO |
---|
| 648 | DT2 = DELT |
---|
| 649 | !cmr dtmin = max(dt2,1200.) |
---|
| 650 | val = 1200. |
---|
| 651 | dtmin = max(dt2, val ) |
---|
| 652 | !cmr dtmax = max(dt2,3600.) |
---|
| 653 | val = 3600. |
---|
| 654 | dtmax = max(dt2, val ) |
---|
| 655 | ! MODEL TUNABLE PARAMETERS ARE ALL HERE |
---|
| 656 | MBDT = 10. |
---|
| 657 | EDTMAXl = .3 |
---|
| 658 | EDTMAXs = .3 |
---|
| 659 | ALPHAl = .5 |
---|
| 660 | ALPHAs = .5 |
---|
| 661 | BETAl = .15 |
---|
| 662 | betas = .15 |
---|
| 663 | BETAl = .05 |
---|
| 664 | betas = .05 |
---|
| 665 | ! change for hurricane model |
---|
| 666 | BETAl = .5 |
---|
| 667 | betas = .5 |
---|
| 668 | ! EVEF = 0.07 |
---|
| 669 | evfact = 0.3 |
---|
| 670 | evfactl = 0.3 |
---|
| 671 | ! change for hurricane model |
---|
| 672 | evfact = 0.6 |
---|
| 673 | evfactl = .6 |
---|
| 674 | #if ( EM_CORE == 1 ) |
---|
| 675 | ! HAWAII TEST - ZCX |
---|
| 676 | ALPHAl = .5 |
---|
| 677 | ALPHAs = .75 |
---|
| 678 | BETAl = .05 |
---|
| 679 | betas = .05 |
---|
| 680 | evfact = 0.5 |
---|
| 681 | evfactl = 0.5 |
---|
| 682 | #endif |
---|
| 683 | PDPDWN = 0. |
---|
| 684 | PDETRN = 200. |
---|
| 685 | xlambu = 1.e-4 |
---|
| 686 | fjcap = (float(jcap) / 126.) ** 2 |
---|
| 687 | !cmr fjcap = max(fjcap,1.) |
---|
| 688 | val = 1. |
---|
| 689 | fjcap = max(fjcap,val) |
---|
| 690 | fkm = (float(km) / 28.) ** 2 |
---|
| 691 | !cmr fkm = max(fkm,1.) |
---|
| 692 | fkm = max(fkm,val) |
---|
| 693 | W1l = -8.E-3 |
---|
| 694 | W2l = -4.E-2 |
---|
| 695 | W3l = -5.E-3 |
---|
| 696 | W4l = -5.E-4 |
---|
| 697 | W1s = -2.E-4 |
---|
| 698 | W2s = -2.E-3 |
---|
| 699 | W3s = -1.E-3 |
---|
| 700 | W4s = -2.E-5 |
---|
| 701 | !CCCC IF(IM.EQ.384) THEN |
---|
| 702 | LATD = 92 |
---|
| 703 | lond = 189 |
---|
| 704 | !CCCC ELSEIF(IM.EQ.768) THEN |
---|
| 705 | !CCCC LATD = 80 |
---|
| 706 | !CCCC ELSE |
---|
| 707 | !CCCC LATD = 0 |
---|
| 708 | !CCCC ENDIF |
---|
| 709 | ! |
---|
| 710 | ! DEFINE TOP LAYER FOR SEARCH OF THE DOWNDRAFT ORIGINATING LAYER |
---|
| 711 | ! AND THE MAXIMUM THETAE FOR UPDRAFT |
---|
| 712 | ! |
---|
| 713 | DO I=1,IM |
---|
| 714 | KBMAX(I) = KM |
---|
| 715 | KBM(I) = KM |
---|
| 716 | KMAX(I) = KM |
---|
| 717 | TX1(I) = 1.0 / PS(I) |
---|
| 718 | ENDDO |
---|
| 719 | ! |
---|
| 720 | DO K = 1, KM |
---|
| 721 | DO I=1,IM |
---|
| 722 | IF (prSL(I,K)*tx1(I) .GT. 0.45) KBMAX(I) = K + 1 |
---|
| 723 | IF (prSL(I,K)*tx1(I) .GT. 0.70) KBM(I) = K + 1 |
---|
| 724 | IF (prSL(I,K)*tx1(I) .GT. 0.04) KMAX(I) = MIN(KM,K + 1) |
---|
| 725 | ENDDO |
---|
| 726 | ENDDO |
---|
| 727 | DO I=1,IM |
---|
| 728 | KBMAX(I) = MIN(KBMAX(I),KMAX(I)) |
---|
| 729 | KBM(I) = MIN(KBM(I),KMAX(I)) |
---|
| 730 | ENDDO |
---|
| 731 | ! |
---|
| 732 | ! CONVERT SURFACE PRESSURE TO MB FROM CB |
---|
| 733 | ! |
---|
| 734 | !! |
---|
| 735 | DO K = 1, KM |
---|
| 736 | DO I=1,IM |
---|
| 737 | if (K .le. kmax(i)) then |
---|
| 738 | PFLD(I,k) = PRSL(I,K) * 10.0 |
---|
| 739 | PWO(I,k) = 0. |
---|
| 740 | PWDO(I,k) = 0. |
---|
| 741 | TO(I,k) = T1(I,k) |
---|
| 742 | QO(I,k) = Q1(I,k) |
---|
| 743 | UO(I,k) = U1(I,k) |
---|
| 744 | VO(I,k) = V1(I,k) |
---|
| 745 | DBYO(I,k) = 0. |
---|
| 746 | SUMZ(I,k) = 0. |
---|
| 747 | SUMH(I,k) = 0. |
---|
| 748 | endif |
---|
| 749 | ENDDO |
---|
| 750 | ENDDO |
---|
| 751 | |
---|
| 752 | ! |
---|
| 753 | ! COLUMN VARIABLES |
---|
| 754 | ! P IS PRESSURE OF THE LAYER (MB) |
---|
| 755 | ! T IS TEMPERATURE AT T-DT (K)..TN |
---|
| 756 | ! Q IS MIXING RATIO AT T-DT (KG/KG)..QN |
---|
| 757 | ! TO IS TEMPERATURE AT T+DT (K)... THIS IS AFTER ADVECTION AND TURBULAN |
---|
| 758 | ! QO IS MIXING RATIO AT T+DT (KG/KG)..Q1 |
---|
| 759 | ! |
---|
| 760 | DO K = 1, KM |
---|
| 761 | DO I=1,IM |
---|
| 762 | if (k .le. kmax(i)) then |
---|
| 763 | !jfe QESO(I,k) = 10. * FPVS(T1(I,k)) |
---|
| 764 | ! |
---|
| 765 | QESO(I,k) = 0.01 * fpvs(T1(I,K)) ! fpvs is in Pa |
---|
| 766 | ! |
---|
| 767 | QESO(I,k) = EPS * QESO(I,k) / (PFLD(I,k) + EPSM1*QESO(I,k)) |
---|
| 768 | !cmr QESO(I,k) = MAX(QESO(I,k),1.E-8) |
---|
| 769 | val1 = 1.E-8 |
---|
| 770 | QESO(I,k) = MAX(QESO(I,k), val1) |
---|
| 771 | !cmr QO(I,k) = max(QO(I,k),1.e-10) |
---|
| 772 | val2 = 1.e-10 |
---|
| 773 | QO(I,k) = max(QO(I,k), val2 ) |
---|
| 774 | ! QO(I,k) = MIN(QO(I,k),QESO(I,k)) |
---|
| 775 | TVO(I,k) = TO(I,k) + DELTA * TO(I,k) * QO(I,k) |
---|
| 776 | endif |
---|
| 777 | ENDDO |
---|
| 778 | ENDDO |
---|
| 779 | |
---|
| 780 | ! |
---|
| 781 | ! HYDROSTATIC HEIGHT ASSUME ZERO TERR |
---|
| 782 | ! |
---|
| 783 | DO K = 1, KM |
---|
| 784 | DO I=1,IM |
---|
| 785 | ZO(I,k) = PHIL(I,k) / G |
---|
| 786 | ENDDO |
---|
| 787 | ENDDO |
---|
| 788 | ! COMPUTE MOIST STATIC ENERGY |
---|
| 789 | DO K = 1, KM |
---|
| 790 | DO I=1,IM |
---|
| 791 | if (K .le. kmax(i)) then |
---|
| 792 | ! tem = G * ZO(I,k) + CP * TO(I,k) |
---|
| 793 | tem = PHIL(I,k) + CP * TO(I,k) |
---|
| 794 | HEO(I,k) = tem + HVAP * QO(I,k) |
---|
| 795 | HESO(I,k) = tem + HVAP * QESO(I,k) |
---|
| 796 | ! HEO(I,k) = MIN(HEO(I,k),HESO(I,k)) |
---|
| 797 | endif |
---|
| 798 | ENDDO |
---|
| 799 | ENDDO |
---|
| 800 | ! |
---|
| 801 | ! DETERMINE LEVEL WITH LARGEST MOIST STATIC ENERGY |
---|
| 802 | ! THIS IS THE LEVEL WHERE UPDRAFT STARTS |
---|
| 803 | ! |
---|
| 804 | DO I=1,IM |
---|
| 805 | HMAX(I) = HEO(I,1) |
---|
| 806 | KB(I) = 1 |
---|
| 807 | ENDDO |
---|
| 808 | !! |
---|
| 809 | DO K = 2, KM |
---|
| 810 | DO I=1,IM |
---|
| 811 | if (k .le. kbm(i)) then |
---|
| 812 | IF(HEO(I,k).GT.HMAX(I).AND.CNVFLG(I)) THEN |
---|
| 813 | KB(I) = K |
---|
| 814 | HMAX(I) = HEO(I,k) |
---|
| 815 | ENDIF |
---|
| 816 | endif |
---|
| 817 | ENDDO |
---|
| 818 | ENDDO |
---|
| 819 | ! DO K = 1, KMAX - 1 |
---|
| 820 | ! TOL(k) = .5 * (TO(I,k) + TO(I,k+1)) |
---|
| 821 | ! QOL(k) = .5 * (QO(I,k) + QO(I,k+1)) |
---|
| 822 | ! QESOL(I,k) = .5 * (QESO(I,k) + QESO(I,k+1)) |
---|
| 823 | ! HEOL(I,k) = .5 * (HEO(I,k) + HEO(I,k+1)) |
---|
| 824 | ! HESOL(I,k) = .5 * (HESO(I,k) + HESO(I,k+1)) |
---|
| 825 | ! ENDDO |
---|
| 826 | DO K = 1, KM1 |
---|
| 827 | DO I=1,IM |
---|
| 828 | if (k .le. kmax(i)-1) then |
---|
| 829 | DZ = .5 * (ZO(I,k+1) - ZO(I,k)) |
---|
| 830 | DP = .5 * (PFLD(I,k+1) - PFLD(I,k)) |
---|
| 831 | !jfe ES = 10. * FPVS(TO(I,k+1)) |
---|
| 832 | ! |
---|
| 833 | ES = 0.01 * fpvs(TO(I,K+1)) ! fpvs is in Pa |
---|
| 834 | ! |
---|
| 835 | PPRIME = PFLD(I,k+1) + EPSM1 * ES |
---|
| 836 | QS = EPS * ES / PPRIME |
---|
| 837 | DQSDP = - QS / PPRIME |
---|
| 838 | DESDT = ES * (FACT1 / TO(I,k+1) + FACT2 / (TO(I,k+1)**2)) |
---|
| 839 | DQSDT = QS * PFLD(I,k+1) * DESDT / (ES * PPRIME) |
---|
| 840 | GAMMA = EL2ORC * QESO(I,k+1) / (TO(I,k+1)**2) |
---|
| 841 | DT = (G * DZ + HVAP * DQSDP * DP) / (CP * (1. + GAMMA)) |
---|
| 842 | DQ = DQSDT * DT + DQSDP * DP |
---|
| 843 | TO(I,k) = TO(I,k+1) + DT |
---|
| 844 | QO(I,k) = QO(I,k+1) + DQ |
---|
| 845 | PO(I,k) = .5 * (PFLD(I,k) + PFLD(I,k+1)) |
---|
| 846 | endif |
---|
| 847 | ENDDO |
---|
| 848 | ENDDO |
---|
| 849 | ! |
---|
| 850 | DO K = 1, KM1 |
---|
| 851 | DO I=1,IM |
---|
| 852 | if (k .le. kmax(I)-1) then |
---|
| 853 | !jfe QESO(I,k) = 10. * FPVS(TO(I,k)) |
---|
| 854 | ! |
---|
| 855 | QESO(I,k) = 0.01 * fpvs(TO(I,K)) ! fpvs is in Pa |
---|
| 856 | ! |
---|
| 857 | QESO(I,k) = EPS * QESO(I,k) / (PO(I,k) + EPSM1*QESO(I,k)) |
---|
| 858 | !cmr QESO(I,k) = MAX(QESO(I,k),1.E-8) |
---|
| 859 | val1 = 1.E-8 |
---|
| 860 | QESO(I,k) = MAX(QESO(I,k), val1) |
---|
| 861 | !cmr QO(I,k) = max(QO(I,k),1.e-10) |
---|
| 862 | val2 = 1.e-10 |
---|
| 863 | QO(I,k) = max(QO(I,k), val2 ) |
---|
| 864 | ! QO(I,k) = MIN(QO(I,k),QESO(I,k)) |
---|
| 865 | HEO(I,k) = .5 * G * (ZO(I,k) + ZO(I,k+1)) + & |
---|
| 866 | & CP * TO(I,k) + HVAP * QO(I,k) |
---|
| 867 | HESO(I,k) = .5 * G * (ZO(I,k) + ZO(I,k+1)) + & |
---|
| 868 | & CP * TO(I,k) + HVAP * QESO(I,k) |
---|
| 869 | UO(I,k) = .5 * (UO(I,k) + UO(I,k+1)) |
---|
| 870 | VO(I,k) = .5 * (VO(I,k) + VO(I,k+1)) |
---|
| 871 | endif |
---|
| 872 | ENDDO |
---|
| 873 | ENDDO |
---|
| 874 | ! k = kmax |
---|
| 875 | ! HEO(I,k) = HEO(I,k) |
---|
| 876 | ! hesol(k) = HESO(I,k) |
---|
| 877 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I)) THEN |
---|
| 878 | ! PRINT *, ' HEO =' |
---|
| 879 | ! PRINT 6001, (HEO(I,K),K=1,KMAX) |
---|
| 880 | ! PRINT *, ' HESO =' |
---|
| 881 | ! PRINT 6001, (HESO(I,K),K=1,KMAX) |
---|
| 882 | ! PRINT *, ' TO =' |
---|
| 883 | ! PRINT 6002, (TO(I,K)-273.16,K=1,KMAX) |
---|
| 884 | ! PRINT *, ' QO =' |
---|
| 885 | ! PRINT 6003, (QO(I,K),K=1,KMAX) |
---|
| 886 | ! PRINT *, ' QSO =' |
---|
| 887 | ! PRINT 6003, (QESO(I,K),K=1,KMAX) |
---|
| 888 | ! ENDIF |
---|
| 889 | ! |
---|
| 890 | ! LOOK FOR CONVECTIVE CLOUD BASE AS THE LEVEL OF FREE CONVECTION |
---|
| 891 | ! |
---|
| 892 | DO I=1,IM |
---|
| 893 | IF(CNVFLG(I)) THEN |
---|
| 894 | INDX = KB(I) |
---|
| 895 | HKBO(I) = HEO(I,INDX) |
---|
| 896 | QKBO(I) = QO(I,INDX) |
---|
| 897 | UKBO(I) = UO(I,INDX) |
---|
| 898 | VKBO(I) = VO(I,INDX) |
---|
| 899 | ENDIF |
---|
| 900 | FLG(I) = CNVFLG(I) |
---|
| 901 | KBCON(I) = KMAX(I) |
---|
| 902 | ENDDO |
---|
| 903 | !! |
---|
| 904 | DO K = 1, KM |
---|
| 905 | DO I=1,IM |
---|
| 906 | if (k .le. kbmax(i)) then |
---|
| 907 | IF(FLG(I).AND.K.GT.KB(I)) THEN |
---|
| 908 | HSBAR(I) = HESO(I,k) |
---|
| 909 | IF(HKBO(I).GT.HSBAR(I)) THEN |
---|
| 910 | FLG(I) = .FALSE. |
---|
| 911 | KBCON(I) = K |
---|
| 912 | ENDIF |
---|
| 913 | ENDIF |
---|
| 914 | endif |
---|
| 915 | ENDDO |
---|
| 916 | ENDDO |
---|
| 917 | DO I=1,IM |
---|
| 918 | IF(CNVFLG(I)) THEN |
---|
| 919 | PBCDIF(I) = -PFLD(I,KBCON(I)) + PFLD(I,KB(I)) |
---|
| 920 | PDOT(I) = 10.* DOT(I,KBCON(I)) |
---|
| 921 | IF(PBCDIF(I).GT.150.) CNVFLG(I) = .FALSE. |
---|
| 922 | IF(KBCON(I).EQ.KMAX(I)) CNVFLG(I) = .FALSE. |
---|
| 923 | ENDIF |
---|
| 924 | ENDDO |
---|
| 925 | !! |
---|
| 926 | TOTFLG = .TRUE. |
---|
| 927 | DO I=1,IM |
---|
| 928 | TOTFLG = TOTFLG .AND. (.NOT. CNVFLG(I)) |
---|
| 929 | ENDDO |
---|
| 930 | IF(TOTFLG) RETURN |
---|
| 931 | ! FOUND LFC, CAN DEFINE REST OF VARIABLES |
---|
| 932 | 6001 FORMAT(2X,-2P10F12.2) |
---|
| 933 | 6002 FORMAT(2X,10F12.2) |
---|
| 934 | 6003 FORMAT(2X,3P10F12.2) |
---|
| 935 | |
---|
| 936 | ! |
---|
| 937 | ! DETERMINE ENTRAINMENT RATE BETWEEN KB AND KBCON |
---|
| 938 | ! |
---|
| 939 | DO I = 1, IM |
---|
| 940 | alpha = alphas |
---|
| 941 | if(SLIMSK(I).eq.1.) alpha = alphal |
---|
| 942 | IF(CNVFLG(I)) THEN |
---|
| 943 | IF(KB(I).EQ.1) THEN |
---|
| 944 | DZ = .5 * (ZO(I,KBCON(I)) + ZO(I,KBCON(I)-1)) - ZO(I,1) |
---|
| 945 | ELSE |
---|
| 946 | DZ = .5 * (ZO(I,KBCON(I)) + ZO(I,KBCON(I)-1)) & |
---|
| 947 | & - .5 * (ZO(I,KB(I)) + ZO(I,KB(I)-1)) |
---|
| 948 | ENDIF |
---|
| 949 | IF(KBCON(I).NE.KB(I)) THEN |
---|
| 950 | !cmr XLAMB(I) = -ALOG(ALPHA) / DZ |
---|
| 951 | XLAMB(I) = - LOG(ALPHA) / DZ |
---|
| 952 | ELSE |
---|
| 953 | XLAMB(I) = 0. |
---|
| 954 | ENDIF |
---|
| 955 | ENDIF |
---|
| 956 | ENDDO |
---|
| 957 | ! DETERMINE UPDRAFT MASS FLUX |
---|
| 958 | DO K = 1, KM |
---|
| 959 | DO I = 1, IM |
---|
| 960 | if (k .le. kmax(i) .and. CNVFLG(I)) then |
---|
| 961 | ETA(I,k) = 1. |
---|
| 962 | ETAU(I,k) = 1. |
---|
| 963 | ENDIF |
---|
| 964 | ENDDO |
---|
| 965 | ENDDO |
---|
| 966 | DO K = KM1, 2, -1 |
---|
| 967 | DO I = 1, IM |
---|
| 968 | if (k .le. kbmax(i)) then |
---|
| 969 | IF(CNVFLG(I).AND.K.LT.KBCON(I).AND.K.GE.KB(I)) THEN |
---|
| 970 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 971 | ETA(I,k) = ETA(I,k+1) * EXP(-XLAMB(I) * DZ) |
---|
| 972 | ETAU(I,k) = ETA(I,k) |
---|
| 973 | ENDIF |
---|
| 974 | endif |
---|
| 975 | ENDDO |
---|
| 976 | ENDDO |
---|
| 977 | DO I = 1, IM |
---|
| 978 | IF(CNVFLG(I).AND.KB(I).EQ.1.AND.KBCON(I).GT.1) THEN |
---|
| 979 | DZ = .5 * (ZO(I,2) - ZO(I,1)) |
---|
| 980 | ETA(I,1) = ETA(I,2) * EXP(-XLAMB(I) * DZ) |
---|
| 981 | ETAU(I,1) = ETA(I,1) |
---|
| 982 | ENDIF |
---|
| 983 | ENDDO |
---|
| 984 | ! |
---|
| 985 | ! WORK UP UPDRAFT CLOUD PROPERTIES |
---|
| 986 | ! |
---|
| 987 | DO I = 1, IM |
---|
| 988 | IF(CNVFLG(I)) THEN |
---|
| 989 | INDX = KB(I) |
---|
| 990 | HCKO(I,INDX) = HKBO(I) |
---|
| 991 | QCKO(I,INDX) = QKBO(I) |
---|
| 992 | UCKO(I,INDX) = UKBO(I) |
---|
| 993 | VCKO(I,INDX) = VKBO(I) |
---|
| 994 | PWAVO(I) = 0. |
---|
| 995 | ENDIF |
---|
| 996 | ENDDO |
---|
| 997 | ! |
---|
| 998 | ! CLOUD PROPERTY BELOW CLOUD BASE IS MODIFIED BY THE ENTRAINMENT PROCES |
---|
| 999 | ! |
---|
| 1000 | DO K = 2, KM1 |
---|
| 1001 | DO I = 1, IM |
---|
| 1002 | if (k .le. kmax(i)-1) then |
---|
| 1003 | IF(CNVFLG(I).AND.K.GT.KB(I).AND.K.LE.KBCON(I)) THEN |
---|
| 1004 | FACTOR = ETA(I,k-1) / ETA(I,k) |
---|
| 1005 | ONEMF = 1. - FACTOR |
---|
| 1006 | HCKO(I,k) = FACTOR * HCKO(I,k-1) + ONEMF * & |
---|
| 1007 | & .5 * (HEO(I,k) + HEO(I,k+1)) |
---|
| 1008 | UCKO(I,k) = FACTOR * UCKO(I,k-1) + ONEMF * & |
---|
| 1009 | & .5 * (UO(I,k) + UO(I,k+1)) |
---|
| 1010 | VCKO(I,k) = FACTOR * VCKO(I,k-1) + ONEMF * & |
---|
| 1011 | & .5 * (VO(I,k) + VO(I,k+1)) |
---|
| 1012 | DBYO(I,k) = HCKO(I,k) - HESO(I,k) |
---|
| 1013 | ENDIF |
---|
| 1014 | IF(CNVFLG(I).AND.K.GT.KBCON(I)) THEN |
---|
| 1015 | HCKO(I,k) = HCKO(I,k-1) |
---|
| 1016 | UCKO(I,k) = UCKO(I,k-1) |
---|
| 1017 | VCKO(I,k) = VCKO(I,k-1) |
---|
| 1018 | DBYO(I,k) = HCKO(I,k) - HESO(I,k) |
---|
| 1019 | ENDIF |
---|
| 1020 | endif |
---|
| 1021 | ENDDO |
---|
| 1022 | ENDDO |
---|
| 1023 | ! DETERMINE CLOUD TOP |
---|
| 1024 | DO I = 1, IM |
---|
| 1025 | FLG(I) = CNVFLG(I) |
---|
| 1026 | KTCON(I) = 1 |
---|
| 1027 | ENDDO |
---|
| 1028 | ! DO K = 2, KMAX |
---|
| 1029 | ! KK = KMAX - K + 1 |
---|
| 1030 | ! IF(DBYO(I,kK).GE.0..AND.FLG(I).AND.KK.GT.KBCON(I)) THEN |
---|
| 1031 | ! KTCON(I) = KK + 1 |
---|
| 1032 | ! FLG(I) = .FALSE. |
---|
| 1033 | ! ENDIF |
---|
| 1034 | ! ENDDO |
---|
| 1035 | DO K = 2, KM |
---|
| 1036 | DO I = 1, IM |
---|
| 1037 | if (k .le. kmax(i)) then |
---|
| 1038 | IF(DBYO(I,k).LT.0..AND.FLG(I).AND.K.GT.KBCON(I)) THEN |
---|
| 1039 | KTCON(I) = K |
---|
| 1040 | FLG(I) = .FALSE. |
---|
| 1041 | ENDIF |
---|
| 1042 | endif |
---|
| 1043 | ENDDO |
---|
| 1044 | ENDDO |
---|
| 1045 | DO I = 1, IM |
---|
| 1046 | IF(CNVFLG(I).AND.(PFLD(I,KBCON(I)) - PFLD(I,KTCON(I))).LT.150.) & |
---|
| 1047 | & CNVFLG(I) = .FALSE. |
---|
| 1048 | ENDDO |
---|
| 1049 | TOTFLG = .TRUE. |
---|
| 1050 | DO I = 1, IM |
---|
| 1051 | TOTFLG = TOTFLG .AND. (.NOT. CNVFLG(I)) |
---|
| 1052 | ENDDO |
---|
| 1053 | IF(TOTFLG) RETURN |
---|
| 1054 | ! |
---|
| 1055 | ! SEARCH FOR DOWNDRAFT ORIGINATING LEVEL ABOVE THETA-E MINIMUM |
---|
| 1056 | ! |
---|
| 1057 | DO I = 1, IM |
---|
| 1058 | HMIN(I) = HEO(I,KBCON(I)) |
---|
| 1059 | LMIN(I) = KBMAX(I) |
---|
| 1060 | JMIN(I) = KBMAX(I) |
---|
| 1061 | ENDDO |
---|
| 1062 | DO I = 1, IM |
---|
| 1063 | DO K = KBCON(I), KBMAX(I) |
---|
| 1064 | IF(HEO(I,k).LT.HMIN(I).AND.CNVFLG(I)) THEN |
---|
| 1065 | LMIN(I) = K + 1 |
---|
| 1066 | HMIN(I) = HEO(I,k) |
---|
| 1067 | ENDIF |
---|
| 1068 | ENDDO |
---|
| 1069 | ENDDO |
---|
| 1070 | ! |
---|
| 1071 | ! Make sure that JMIN(I) is within the cloud |
---|
| 1072 | ! |
---|
| 1073 | DO I = 1, IM |
---|
| 1074 | IF(CNVFLG(I)) THEN |
---|
| 1075 | JMIN(I) = MIN(LMIN(I),KTCON(I)-1) |
---|
| 1076 | XMBMAX(I) = .1 |
---|
| 1077 | JMIN(I) = MAX(JMIN(I),KBCON(I)+1) |
---|
| 1078 | ENDIF |
---|
| 1079 | ENDDO |
---|
| 1080 | ! |
---|
| 1081 | ! ENTRAINING CLOUD |
---|
| 1082 | ! |
---|
| 1083 | do k = 2, km1 |
---|
| 1084 | DO I = 1, IM |
---|
| 1085 | if (k .le. kmax(i)-1) then |
---|
| 1086 | if(CNVFLG(I).and.k.gt.JMIN(I).and.k.le.KTCON(I)) THEN |
---|
| 1087 | SUMZ(I,k) = SUMZ(I,k-1) + .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1088 | SUMH(I,k) = SUMH(I,k-1) + .5 * (ZO(I,k+1) - ZO(I,k-1)) & |
---|
| 1089 | & * HEO(I,k) |
---|
| 1090 | ENDIF |
---|
| 1091 | endif |
---|
| 1092 | enddo |
---|
| 1093 | enddo |
---|
| 1094 | !! |
---|
| 1095 | DO I = 1, IM |
---|
| 1096 | IF(CNVFLG(I)) THEN |
---|
| 1097 | ! call random_number(XKT2) |
---|
| 1098 | ! call srand(fhour) |
---|
| 1099 | ! XKT2(I) = rand() |
---|
| 1100 | KT2(I) = nint(XKT2(I)*float(KTCON(I)-JMIN(I))-.5)+JMIN(I)+1 |
---|
| 1101 | ! KT2(I) = nint(sqrt(XKT2(I))*float(KTCON(I)-JMIN(I))-.5) + JMIN(I) + 1 |
---|
| 1102 | ! KT2(I) = nint(ranf() *float(KTCON(I)-JMIN(I))-.5) + JMIN(I) + 1 |
---|
| 1103 | tem1 = (HCKO(I,JMIN(I)) - HESO(I,KT2(I))) |
---|
| 1104 | tem2 = (SUMZ(I,KT2(I)) * HESO(I,KT2(I)) - SUMH(I,KT2(I))) |
---|
| 1105 | if (abs(tem2) .gt. 0.000001) THEN |
---|
| 1106 | XLAMB(I) = tem1 / tem2 |
---|
| 1107 | else |
---|
| 1108 | CNVFLG(I) = .false. |
---|
| 1109 | ENDIF |
---|
| 1110 | ! XLAMB(I) = (HCKO(I,JMIN(I)) - HESO(I,KT2(I))) |
---|
| 1111 | ! & / (SUMZ(I,KT2(I)) * HESO(I,KT2(I)) - SUMH(I,KT2(I))) |
---|
| 1112 | XLAMB(I) = max(XLAMB(I),RZERO) |
---|
| 1113 | XLAMB(I) = min(XLAMB(I),2.3/SUMZ(I,KT2(I))) |
---|
| 1114 | ENDIF |
---|
| 1115 | ENDDO |
---|
| 1116 | !! |
---|
| 1117 | DO I = 1, IM |
---|
| 1118 | DWNFLG(I) = CNVFLG(I) |
---|
| 1119 | DWNFLG2(I) = CNVFLG(I) |
---|
| 1120 | IF(CNVFLG(I)) THEN |
---|
| 1121 | if(KT2(I).ge.KTCON(I)) DWNFLG(I) = .false. |
---|
| 1122 | if(XLAMB(I).le.1.e-30.or.HCKO(I,JMIN(I))-HESO(I,KT2(I)).le.1.e-30)& |
---|
| 1123 | & DWNFLG(I) = .false. |
---|
| 1124 | do k = JMIN(I), KT2(I) |
---|
| 1125 | if(DWNFLG(I).and.HEO(I,k).gt.HESO(I,KT2(I))) DWNFLG(I)=.false. |
---|
| 1126 | enddo |
---|
| 1127 | ! IF(CNVFLG(I).AND.(PFLD(KBCON(I))-PFLD(KTCON(I))).GT.PDETRN) |
---|
| 1128 | ! & DWNFLG(I)=.FALSE. |
---|
| 1129 | IF(CNVFLG(I).AND.(PFLD(I,KBCON(I))-PFLD(I,KTCON(I))).LT.PDPDWN) & |
---|
| 1130 | & DWNFLG2(I)=.FALSE. |
---|
| 1131 | ENDIF |
---|
| 1132 | ENDDO |
---|
| 1133 | !! |
---|
| 1134 | DO K = 2, KM1 |
---|
| 1135 | DO I = 1, IM |
---|
| 1136 | if (k .le. kmax(i)-1) then |
---|
| 1137 | IF(DWNFLG(I).AND.K.GT.JMIN(I).AND.K.LE.KT2(I)) THEN |
---|
| 1138 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1139 | ! ETA(I,k) = ETA(I,k-1) * EXP( XLAMB(I) * DZ) |
---|
| 1140 | ! to simplify matter, we will take the linear approach here |
---|
| 1141 | ! |
---|
| 1142 | ETA(I,k) = ETA(I,k-1) * (1. + XLAMB(I) * dz) |
---|
| 1143 | ETAU(I,k) = ETAU(I,k-1) * (1. + (XLAMB(I)+xlambu) * dz) |
---|
| 1144 | ENDIF |
---|
| 1145 | endif |
---|
| 1146 | ENDDO |
---|
| 1147 | ENDDO |
---|
| 1148 | !! |
---|
| 1149 | DO K = 2, KM1 |
---|
| 1150 | DO I = 1, IM |
---|
| 1151 | if (k .le. kmax(i)-1) then |
---|
| 1152 | ! IF(.NOT.DWNFLG(I).AND.K.GT.JMIN(I).AND.K.LE.KT2(I)) THEN |
---|
| 1153 | IF(.NOT.DWNFLG(I).AND.K.GT.JMIN(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1154 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1155 | ETAU(I,k) = ETAU(I,k-1) * (1. + xlambu * dz) |
---|
| 1156 | ENDIF |
---|
| 1157 | endif |
---|
| 1158 | ENDDO |
---|
| 1159 | ENDDO |
---|
| 1160 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I)) THEN |
---|
| 1161 | ! PRINT *, ' LMIN(I), KT2(I)=', LMIN(I), KT2(I) |
---|
| 1162 | ! PRINT *, ' KBOT, KTOP, JMIN(I) =', KBCON(I), KTCON(I), JMIN(I) |
---|
| 1163 | ! ENDIF |
---|
| 1164 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond) THEN |
---|
| 1165 | ! print *, ' xlamb =', xlamb |
---|
| 1166 | ! print *, ' eta =', (eta(k),k=1,KT2(I)) |
---|
| 1167 | ! print *, ' ETAU =', (ETAU(I,k),k=1,KT2(I)) |
---|
| 1168 | ! print *, ' HCKO =', (HCKO(I,k),k=1,KT2(I)) |
---|
| 1169 | ! print *, ' SUMZ =', (SUMZ(I,k),k=1,KT2(I)) |
---|
| 1170 | ! print *, ' SUMH =', (SUMH(I,k),k=1,KT2(I)) |
---|
| 1171 | ! ENDIF |
---|
| 1172 | DO I = 1, IM |
---|
| 1173 | if(DWNFLG(I)) THEN |
---|
| 1174 | KTCON(I) = KT2(I) |
---|
| 1175 | ENDIF |
---|
| 1176 | ENDDO |
---|
| 1177 | ! |
---|
| 1178 | ! CLOUD PROPERTY ABOVE CLOUD Base IS MODIFIED BY THE DETRAINMENT PROCESS |
---|
| 1179 | ! |
---|
| 1180 | DO K = 2, KM1 |
---|
| 1181 | DO I = 1, IM |
---|
| 1182 | if (k .le. kmax(i)-1) then |
---|
| 1183 | !jfe |
---|
| 1184 | IF(CNVFLG(I).AND.K.GT.KBCON(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1185 | !jfe IF(K.GT.KBCON(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1186 | FACTOR = ETA(I,k-1) / ETA(I,k) |
---|
| 1187 | ONEMF = 1. - FACTOR |
---|
| 1188 | fuv = ETAU(I,k-1) / ETAU(I,k) |
---|
| 1189 | onemfu = 1. - fuv |
---|
| 1190 | HCKO(I,k) = FACTOR * HCKO(I,k-1) + ONEMF * & |
---|
| 1191 | & .5 * (HEO(I,k) + HEO(I,k+1)) |
---|
| 1192 | UCKO(I,k) = fuv * UCKO(I,k-1) + ONEMFu * & |
---|
| 1193 | & .5 * (UO(I,k) + UO(I,k+1)) |
---|
| 1194 | VCKO(I,k) = fuv * VCKO(I,k-1) + ONEMFu * & |
---|
| 1195 | & .5 * (VO(I,k) + VO(I,k+1)) |
---|
| 1196 | DBYO(I,k) = HCKO(I,k) - HESO(I,k) |
---|
| 1197 | ENDIF |
---|
| 1198 | endif |
---|
| 1199 | ENDDO |
---|
| 1200 | ENDDO |
---|
| 1201 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I)) THEN |
---|
| 1202 | ! PRINT *, ' UCKO=', (UCKO(I,k),k=KBCON(I)+1,KTCON(I)) |
---|
| 1203 | ! PRINT *, ' uenv=', (.5*(UO(I,k)+UO(I,k-1)),k=KBCON(I)+1,KTCON(I)) |
---|
| 1204 | ! ENDIF |
---|
| 1205 | DO I = 1, IM |
---|
| 1206 | if(CNVFLG(I).and.DWNFLG2(I).and.JMIN(I).le.KBCON(I)) & |
---|
| 1207 | & THEN |
---|
| 1208 | CNVFLG(I) = .false. |
---|
| 1209 | DWNFLG(I) = .false. |
---|
| 1210 | DWNFLG2(I) = .false. |
---|
| 1211 | ENDIF |
---|
| 1212 | ENDDO |
---|
| 1213 | !! |
---|
| 1214 | TOTFLG = .TRUE. |
---|
| 1215 | DO I = 1, IM |
---|
| 1216 | TOTFLG = TOTFLG .AND. (.NOT. CNVFLG(I)) |
---|
| 1217 | ENDDO |
---|
| 1218 | IF(TOTFLG) RETURN |
---|
| 1219 | !! |
---|
| 1220 | ! |
---|
| 1221 | ! COMPUTE CLOUD MOISTURE PROPERTY AND PRECIPITATION |
---|
| 1222 | ! |
---|
| 1223 | DO I = 1, IM |
---|
| 1224 | AA1(I) = 0. |
---|
| 1225 | RHBAR(I) = 0. |
---|
| 1226 | ENDDO |
---|
| 1227 | DO K = 1, KM |
---|
| 1228 | DO I = 1, IM |
---|
| 1229 | if (k .le. kmax(i)) then |
---|
| 1230 | IF(CNVFLG(I).AND.K.GT.KB(I).AND.K.LT.KTCON(I)) THEN |
---|
| 1231 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1232 | DZ1 = (ZO(I,k) - ZO(I,k-1)) |
---|
| 1233 | GAMMA = EL2ORC * QESO(I,k) / (TO(I,k)**2) |
---|
| 1234 | QRCH = QESO(I,k) & |
---|
| 1235 | & + GAMMA * DBYO(I,k) / (HVAP * (1. + GAMMA)) |
---|
| 1236 | FACTOR = ETA(I,k-1) / ETA(I,k) |
---|
| 1237 | ONEMF = 1. - FACTOR |
---|
| 1238 | QCKO(I,k) = FACTOR * QCKO(I,k-1) + ONEMF * & |
---|
| 1239 | & .5 * (QO(I,k) + QO(I,k+1)) |
---|
| 1240 | DQ = ETA(I,k) * QCKO(I,k) - ETA(I,k) * QRCH |
---|
| 1241 | RHBAR(I) = RHBAR(I) + QO(I,k) / QESO(I,k) |
---|
| 1242 | ! |
---|
| 1243 | ! BELOW LFC CHECK IF THERE IS EXCESS MOISTURE TO RELEASE LATENT HEAT |
---|
| 1244 | ! |
---|
| 1245 | IF(DQ.GT.0.) THEN |
---|
| 1246 | ETAH = .5 * (ETA(I,k) + ETA(I,k-1)) |
---|
| 1247 | QLK = DQ / (ETA(I,k) + ETAH * C0 * DZ) |
---|
| 1248 | AA1(I) = AA1(I) - DZ1 * G * QLK |
---|
| 1249 | QC = QLK + QRCH |
---|
| 1250 | PWO(I,k) = ETAH * C0 * DZ * QLK |
---|
| 1251 | QCKO(I,k) = QC |
---|
| 1252 | PWAVO(I) = PWAVO(I) + PWO(I,k) |
---|
| 1253 | ENDIF |
---|
| 1254 | ENDIF |
---|
| 1255 | endif |
---|
| 1256 | ENDDO |
---|
| 1257 | ENDDO |
---|
| 1258 | DO I = 1, IM |
---|
| 1259 | RHBAR(I) = RHBAR(I) / float(KTCON(I) - KB(I) - 1) |
---|
| 1260 | ENDDO |
---|
| 1261 | ! |
---|
| 1262 | ! this section is ready for cloud water |
---|
| 1263 | ! |
---|
| 1264 | if(ncloud.gt.0) THEN |
---|
| 1265 | ! |
---|
| 1266 | ! compute liquid and vapor separation at cloud top |
---|
| 1267 | ! |
---|
| 1268 | DO I = 1, IM |
---|
| 1269 | k = KTCON(I) |
---|
| 1270 | IF(CNVFLG(I)) THEN |
---|
| 1271 | GAMMA = EL2ORC * QESO(I,K) / (TO(I,K)**2) |
---|
| 1272 | QRCH = QESO(I,K) & |
---|
| 1273 | & + GAMMA * DBYO(I,K) / (HVAP * (1. + GAMMA)) |
---|
| 1274 | DQ = QCKO(I,K-1) - QRCH |
---|
| 1275 | ! |
---|
| 1276 | ! CHECK IF THERE IS EXCESS MOISTURE TO RELEASE LATENT HEAT |
---|
| 1277 | ! |
---|
| 1278 | IF(DQ.GT.0.) THEN |
---|
| 1279 | QLKO_KTCON(I) = dq |
---|
| 1280 | QCKO(I,K-1) = QRCH |
---|
| 1281 | ENDIF |
---|
| 1282 | ENDIF |
---|
| 1283 | ENDDO |
---|
| 1284 | ENDIF |
---|
| 1285 | ! |
---|
| 1286 | ! CALCULATE CLOUD WORK FUNCTION AT T+DT |
---|
| 1287 | ! |
---|
| 1288 | DO K = 1, KM |
---|
| 1289 | DO I = 1, IM |
---|
| 1290 | if (k .le. kmax(i)) then |
---|
| 1291 | IF(CNVFLG(I).AND.K.GT.KBCON(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1292 | DZ1 = ZO(I,k) - ZO(I,k-1) |
---|
| 1293 | GAMMA = EL2ORC * QESO(I,k-1) / (TO(I,k-1)**2) |
---|
| 1294 | RFACT = 1. + DELTA * CP * GAMMA & |
---|
| 1295 | & * TO(I,k-1) / HVAP |
---|
| 1296 | AA1(I) = AA1(I) + & |
---|
| 1297 | & DZ1 * (G / (CP * TO(I,k-1))) & |
---|
| 1298 | & * DBYO(I,k-1) / (1. + GAMMA) & |
---|
| 1299 | & * RFACT |
---|
| 1300 | val = 0. |
---|
| 1301 | AA1(I)=AA1(I)+ & |
---|
| 1302 | & DZ1 * G * DELTA * & |
---|
| 1303 | !cmr & MAX( 0.,(QESO(I,k-1) - QO(I,k-1))) & |
---|
| 1304 | & MAX(val,(QESO(I,k-1) - QO(I,k-1))) |
---|
| 1305 | ENDIF |
---|
| 1306 | endif |
---|
| 1307 | ENDDO |
---|
| 1308 | ENDDO |
---|
| 1309 | DO I = 1, IM |
---|
| 1310 | IF(CNVFLG(I).AND.AA1(I).LE.0.) DWNFLG(I) = .FALSE. |
---|
| 1311 | IF(CNVFLG(I).AND.AA1(I).LE.0.) DWNFLG2(I) = .FALSE. |
---|
| 1312 | IF(CNVFLG(I).AND.AA1(I).LE.0.) CNVFLG(I) = .FALSE. |
---|
| 1313 | ENDDO |
---|
| 1314 | !! |
---|
| 1315 | TOTFLG = .TRUE. |
---|
| 1316 | DO I = 1, IM |
---|
| 1317 | TOTFLG = TOTFLG .AND. (.NOT. CNVFLG(I)) |
---|
| 1318 | ENDDO |
---|
| 1319 | IF(TOTFLG) RETURN |
---|
| 1320 | !! |
---|
| 1321 | !cccc IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I)) THEN |
---|
| 1322 | !cccc PRINT *, ' AA1(I) BEFORE DWNDRFT =', AA1(I) |
---|
| 1323 | !cccc ENDIF |
---|
| 1324 | ! |
---|
| 1325 | !------- DOWNDRAFT CALCULATIONS |
---|
| 1326 | ! |
---|
| 1327 | ! |
---|
| 1328 | !--- DETERMINE DOWNDRAFT STRENGTH IN TERMS OF WINDSHEAR |
---|
| 1329 | ! |
---|
| 1330 | DO I = 1, IM |
---|
| 1331 | IF(CNVFLG(I)) THEN |
---|
| 1332 | VSHEAR(I) = 0. |
---|
| 1333 | ENDIF |
---|
| 1334 | ENDDO |
---|
| 1335 | DO K = 1, KM |
---|
| 1336 | DO I = 1, IM |
---|
| 1337 | if (k .le. kmax(i)) then |
---|
| 1338 | IF(K.GE.KB(I).AND.K.LE.KTCON(I).AND.CNVFLG(I)) THEN |
---|
| 1339 | shear=rcs(I) * sqrt((UO(I,k+1)-UO(I,k)) ** 2 & |
---|
| 1340 | & + (VO(I,k+1)-VO(I,k)) ** 2) |
---|
| 1341 | VSHEAR(I) = VSHEAR(I) + SHEAR |
---|
| 1342 | ENDIF |
---|
| 1343 | endif |
---|
| 1344 | ENDDO |
---|
| 1345 | ENDDO |
---|
| 1346 | DO I = 1, IM |
---|
| 1347 | EDT(I) = 0. |
---|
| 1348 | IF(CNVFLG(I)) THEN |
---|
| 1349 | KNUMB = KTCON(I) - KB(I) + 1 |
---|
| 1350 | KNUMB = MAX(KNUMB,1) |
---|
| 1351 | VSHEAR(I) = 1.E3 * VSHEAR(I) / (ZO(I,KTCON(I))-ZO(I,KB(I))) |
---|
| 1352 | E1=1.591-.639*VSHEAR(I) & |
---|
| 1353 | & +.0953*(VSHEAR(I)**2)-.00496*(VSHEAR(I)**3) |
---|
| 1354 | EDT(I)=1.-E1 |
---|
| 1355 | !cmr EDT(I) = MIN(EDT(I),.9) |
---|
| 1356 | val = .9 |
---|
| 1357 | EDT(I) = MIN(EDT(I),val) |
---|
| 1358 | !cmr EDT(I) = MAX(EDT(I),.0) |
---|
| 1359 | val = .0 |
---|
| 1360 | EDT(I) = MAX(EDT(I),val) |
---|
| 1361 | EDTO(I)=EDT(I) |
---|
| 1362 | EDTX(I)=EDT(I) |
---|
| 1363 | ENDIF |
---|
| 1364 | ENDDO |
---|
| 1365 | ! DETERMINE DETRAINMENT RATE BETWEEN 1 AND KBDTR |
---|
| 1366 | DO I = 1, IM |
---|
| 1367 | KBDTR(I) = KBCON(I) |
---|
| 1368 | beta = betas |
---|
| 1369 | if(SLIMSK(I).eq.1.) beta = betal |
---|
| 1370 | IF(CNVFLG(I)) THEN |
---|
| 1371 | KBDTR(I) = KBCON(I) |
---|
| 1372 | KBDTR(I) = MAX(KBDTR(I),1) |
---|
| 1373 | XLAMD(I) = 0. |
---|
| 1374 | IF(KBDTR(I).GT.1) THEN |
---|
| 1375 | DZ = .5 * ZO(I,KBDTR(I)) + .5 * ZO(I,KBDTR(I)-1) & |
---|
| 1376 | & - ZO(I,1) |
---|
| 1377 | XLAMD(I) = LOG(BETA) / DZ |
---|
| 1378 | ENDIF |
---|
| 1379 | ENDIF |
---|
| 1380 | ENDDO |
---|
| 1381 | ! DETERMINE DOWNDRAFT MASS FLUX |
---|
| 1382 | DO K = 1, KM |
---|
| 1383 | DO I = 1, IM |
---|
| 1384 | IF(k .le. kmax(i)) then |
---|
| 1385 | IF(CNVFLG(I)) THEN |
---|
| 1386 | ETAD(I,k) = 1. |
---|
| 1387 | ENDIF |
---|
| 1388 | QRCDO(I,k) = 0. |
---|
| 1389 | endif |
---|
| 1390 | ENDDO |
---|
| 1391 | ENDDO |
---|
| 1392 | DO K = KM1, 2, -1 |
---|
| 1393 | DO I = 1, IM |
---|
| 1394 | if (k .le. kbmax(i)) then |
---|
| 1395 | IF(CNVFLG(I).AND.K.LT.KBDTR(I)) THEN |
---|
| 1396 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1397 | ETAD(I,k) = ETAD(I,k+1) * EXP(XLAMD(I) * DZ) |
---|
| 1398 | ENDIF |
---|
| 1399 | endif |
---|
| 1400 | ENDDO |
---|
| 1401 | ENDDO |
---|
| 1402 | K = 1 |
---|
| 1403 | DO I = 1, IM |
---|
| 1404 | IF(CNVFLG(I).AND.KBDTR(I).GT.1) THEN |
---|
| 1405 | DZ = .5 * (ZO(I,2) - ZO(I,1)) |
---|
| 1406 | ETAD(I,k) = ETAD(I,k+1) * EXP(XLAMD(I) * DZ) |
---|
| 1407 | ENDIF |
---|
| 1408 | ENDDO |
---|
| 1409 | ! |
---|
| 1410 | !--- DOWNDRAFT MOISTURE PROPERTIES |
---|
| 1411 | ! |
---|
| 1412 | DO I = 1, IM |
---|
| 1413 | PWEVO(I) = 0. |
---|
| 1414 | FLG(I) = CNVFLG(I) |
---|
| 1415 | ENDDO |
---|
| 1416 | DO I = 1, IM |
---|
| 1417 | IF(CNVFLG(I)) THEN |
---|
| 1418 | JMN = JMIN(I) |
---|
| 1419 | HCDO(I) = HEO(I,JMN) |
---|
| 1420 | QCDO(I) = QO(I,JMN) |
---|
| 1421 | QRCDO(I,JMN) = QESO(I,JMN) |
---|
| 1422 | UCDO(I) = UO(I,JMN) |
---|
| 1423 | VCDO(I) = VO(I,JMN) |
---|
| 1424 | ENDIF |
---|
| 1425 | ENDDO |
---|
| 1426 | DO K = KM1, 1, -1 |
---|
| 1427 | DO I = 1, IM |
---|
| 1428 | if (k .le. kmax(i)-1) then |
---|
| 1429 | IF(CNVFLG(I).AND.K.LT.JMIN(I)) THEN |
---|
| 1430 | DQ = QESO(I,k) |
---|
| 1431 | DT = TO(I,k) |
---|
| 1432 | GAMMA = EL2ORC * DQ / DT**2 |
---|
| 1433 | DH = HCDO(I) - HESO(I,k) |
---|
| 1434 | QRCDO(I,k) = DQ+(1./HVAP)*(GAMMA/(1.+GAMMA))*DH |
---|
| 1435 | DETAD = ETAD(I,k+1) - ETAD(I,k) |
---|
| 1436 | PWDO(I,k) = ETAD(I,k+1) * QCDO(I) - & |
---|
| 1437 | & ETAD(I,k) * QRCDO(I,k) |
---|
| 1438 | PWDO(I,k) = PWDO(I,k) - DETAD * & |
---|
| 1439 | & .5 * (QRCDO(I,k) + QRCDO(I,k+1)) |
---|
| 1440 | QCDO(I) = QRCDO(I,k) |
---|
| 1441 | PWEVO(I) = PWEVO(I) + PWDO(I,k) |
---|
| 1442 | ENDIF |
---|
| 1443 | endif |
---|
| 1444 | ENDDO |
---|
| 1445 | ENDDO |
---|
| 1446 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.DWNFLG(I)) THEN |
---|
| 1447 | ! PRINT *, ' PWAVO(I), PWEVO(I) =', PWAVO(I), PWEVO(I) |
---|
| 1448 | ! ENDIF |
---|
| 1449 | ! |
---|
| 1450 | !--- FINAL DOWNDRAFT STRENGTH DEPENDENT ON PRECIP |
---|
| 1451 | !--- EFFICIENCY (EDT), NORMALIZED CONDENSATE (PWAV), AND |
---|
| 1452 | !--- EVAPORATE (PWEV) |
---|
| 1453 | ! |
---|
| 1454 | DO I = 1, IM |
---|
| 1455 | edtmax = edtmaxl |
---|
| 1456 | if(SLIMSK(I).eq.0.) edtmax = edtmaxs |
---|
| 1457 | IF(DWNFLG2(I)) THEN |
---|
| 1458 | IF(PWEVO(I).LT.0.) THEN |
---|
| 1459 | EDTO(I) = -EDTO(I) * PWAVO(I) / PWEVO(I) |
---|
| 1460 | EDTO(I) = MIN(EDTO(I),EDTMAX) |
---|
| 1461 | ELSE |
---|
| 1462 | EDTO(I) = 0. |
---|
| 1463 | ENDIF |
---|
| 1464 | ELSE |
---|
| 1465 | EDTO(I) = 0. |
---|
| 1466 | ENDIF |
---|
| 1467 | ENDDO |
---|
| 1468 | ! |
---|
| 1469 | ! |
---|
| 1470 | !--- DOWNDRAFT CLOUDWORK FUNCTIONS |
---|
| 1471 | ! |
---|
| 1472 | ! |
---|
| 1473 | DO K = KM1, 1, -1 |
---|
| 1474 | DO I = 1, IM |
---|
| 1475 | if (k .le. kmax(i)-1) then |
---|
| 1476 | IF(DWNFLG2(I).AND.K.LT.JMIN(I)) THEN |
---|
| 1477 | GAMMA = EL2ORC * QESO(I,k+1) / TO(I,k+1)**2 |
---|
| 1478 | DHH=HCDO(I) |
---|
| 1479 | DT=TO(I,k+1) |
---|
| 1480 | DG=GAMMA |
---|
| 1481 | DH=HESO(I,k+1) |
---|
| 1482 | DZ=-1.*(ZO(I,k+1)-ZO(I,k)) |
---|
| 1483 | AA1(I)=AA1(I)+EDTO(I)*DZ*(G/(CP*DT))*((DHH-DH)/(1.+DG)) & |
---|
| 1484 | & *(1.+DELTA*CP*DG*DT/HVAP) |
---|
| 1485 | val=0. |
---|
| 1486 | AA1(I)=AA1(I)+EDTO(I)* & |
---|
| 1487 | !cmr & DZ*G*DELTA*MAX( 0.,(QESO(I,k+1)-QO(I,k+1))) & |
---|
| 1488 | & DZ*G*DELTA*MAX(val,(QESO(I,k+1)-QO(I,k+1))) |
---|
| 1489 | ENDIF |
---|
| 1490 | endif |
---|
| 1491 | ENDDO |
---|
| 1492 | ENDDO |
---|
| 1493 | !cccc IF(LAT.EQ.LATD.AND.lon.eq.lond.and.DWNFLG2(I)) THEN |
---|
| 1494 | !cccc PRINT *, ' AA1(I) AFTER DWNDRFT =', AA1(I) |
---|
| 1495 | !cccc ENDIF |
---|
| 1496 | DO I = 1, IM |
---|
| 1497 | IF(AA1(I).LE.0.) CNVFLG(I) = .FALSE. |
---|
| 1498 | IF(AA1(I).LE.0.) DWNFLG(I) = .FALSE. |
---|
| 1499 | IF(AA1(I).LE.0.) DWNFLG2(I) = .FALSE. |
---|
| 1500 | ENDDO |
---|
| 1501 | !! |
---|
| 1502 | TOTFLG = .TRUE. |
---|
| 1503 | DO I = 1, IM |
---|
| 1504 | TOTFLG = TOTFLG .AND. (.NOT. CNVFLG(I)) |
---|
| 1505 | ENDDO |
---|
| 1506 | IF(TOTFLG) RETURN |
---|
| 1507 | !! |
---|
| 1508 | ! |
---|
| 1509 | ! |
---|
| 1510 | !--- WHAT WOULD THE CHANGE BE, THAT A CLOUD WITH UNIT MASS |
---|
| 1511 | !--- WILL DO TO THE ENVIRONMENT? |
---|
| 1512 | ! |
---|
| 1513 | DO K = 1, KM |
---|
| 1514 | DO I = 1, IM |
---|
| 1515 | IF(k .le. kmax(i) .and. CNVFLG(I)) THEN |
---|
| 1516 | DELLAH(I,k) = 0. |
---|
| 1517 | DELLAQ(I,k) = 0. |
---|
| 1518 | DELLAU(I,k) = 0. |
---|
| 1519 | DELLAV(I,k) = 0. |
---|
| 1520 | ENDIF |
---|
| 1521 | ENDDO |
---|
| 1522 | ENDDO |
---|
| 1523 | DO I = 1, IM |
---|
| 1524 | IF(CNVFLG(I)) THEN |
---|
| 1525 | DP = 1000. * DEL(I,1) |
---|
| 1526 | DELLAH(I,1) = EDTO(I) * ETAD(I,1) * (HCDO(I) & |
---|
| 1527 | & - HEO(I,1)) * G / DP |
---|
| 1528 | DELLAQ(I,1) = EDTO(I) * ETAD(I,1) * (QCDO(I) & |
---|
| 1529 | & - QO(I,1)) * G / DP |
---|
| 1530 | DELLAU(I,1) = EDTO(I) * ETAD(I,1) * (UCDO(I) & |
---|
| 1531 | & - UO(I,1)) * G / DP |
---|
| 1532 | DELLAV(I,1) = EDTO(I) * ETAD(I,1) * (VCDO(I) & |
---|
| 1533 | & - VO(I,1)) * G / DP |
---|
| 1534 | ENDIF |
---|
| 1535 | ENDDO |
---|
| 1536 | ! |
---|
| 1537 | !--- CHANGED DUE TO SUBSIDENCE AND ENTRAINMENT |
---|
| 1538 | ! |
---|
| 1539 | DO K = 2, KM1 |
---|
| 1540 | DO I = 1, IM |
---|
| 1541 | if (k .le. kmax(i)-1) then |
---|
| 1542 | IF(CNVFLG(I).AND.K.LT.KTCON(I)) THEN |
---|
| 1543 | AUP = 1. |
---|
| 1544 | IF(K.LE.KB(I)) AUP = 0. |
---|
| 1545 | ADW = 1. |
---|
| 1546 | IF(K.GT.JMIN(I)) ADW = 0. |
---|
| 1547 | DV1= HEO(I,k) |
---|
| 1548 | DV2 = .5 * (HEO(I,k) + HEO(I,k+1)) |
---|
| 1549 | DV3= HEO(I,k-1) |
---|
| 1550 | DV1Q= QO(I,k) |
---|
| 1551 | DV2Q = .5 * (QO(I,k) + QO(I,k+1)) |
---|
| 1552 | DV3Q= QO(I,k-1) |
---|
| 1553 | DV1U= UO(I,k) |
---|
| 1554 | DV2U = .5 * (UO(I,k) + UO(I,k+1)) |
---|
| 1555 | DV3U= UO(I,k-1) |
---|
| 1556 | DV1V= VO(I,k) |
---|
| 1557 | DV2V = .5 * (VO(I,k) + VO(I,k+1)) |
---|
| 1558 | DV3V= VO(I,k-1) |
---|
| 1559 | DP = 1000. * DEL(I,K) |
---|
| 1560 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1561 | DETA = ETA(I,k) - ETA(I,k-1) |
---|
| 1562 | DETAD = ETAD(I,k) - ETAD(I,k-1) |
---|
| 1563 | DELLAH(I,k) = DELLAH(I,k) + & |
---|
| 1564 | & ((AUP * ETA(I,k) - ADW * EDTO(I) * ETAD(I,k)) * DV1 & |
---|
| 1565 | & - (AUP * ETA(I,k-1) - ADW * EDTO(I) * ETAD(I,k-1))* DV3 & |
---|
| 1566 | & - AUP * DETA * DV2 & |
---|
| 1567 | & + ADW * EDTO(I) * DETAD * HCDO(I)) * G / DP |
---|
| 1568 | DELLAQ(I,k) = DELLAQ(I,k) + & |
---|
| 1569 | & ((AUP * ETA(I,k) - ADW * EDTO(I) * ETAD(I,k)) * DV1Q & |
---|
| 1570 | & - (AUP * ETA(I,k-1) - ADW * EDTO(I) * ETAD(I,k-1))* DV3Q & |
---|
| 1571 | & - AUP * DETA * DV2Q & |
---|
| 1572 | & +ADW*EDTO(I)*DETAD*.5*(QRCDO(I,k)+QRCDO(I,k-1))) * G / DP |
---|
| 1573 | DELLAU(I,k) = DELLAU(I,k) + & |
---|
| 1574 | & ((AUP * ETA(I,k) - ADW * EDTO(I) * ETAD(I,k)) * DV1U & |
---|
| 1575 | & - (AUP * ETA(I,k-1) - ADW * EDTO(I) * ETAD(I,k-1))* DV3U & |
---|
| 1576 | & - AUP * DETA * DV2U & |
---|
| 1577 | & + ADW * EDTO(I) * DETAD * UCDO(I) & |
---|
| 1578 | & ) * G / DP |
---|
| 1579 | DELLAV(I,k) = DELLAV(I,k) + & |
---|
| 1580 | & ((AUP * ETA(I,k) - ADW * EDTO(I) * ETAD(I,k)) * DV1V & |
---|
| 1581 | & - (AUP * ETA(I,k-1) - ADW * EDTO(I) * ETAD(I,k-1))* DV3V & |
---|
| 1582 | & - AUP * DETA * DV2V & |
---|
| 1583 | & + ADW * EDTO(I) * DETAD * VCDO(I) & |
---|
| 1584 | & ) * G / DP |
---|
| 1585 | ENDIF |
---|
| 1586 | endif |
---|
| 1587 | ENDDO |
---|
| 1588 | ENDDO |
---|
| 1589 | ! |
---|
| 1590 | !------- CLOUD TOP |
---|
| 1591 | ! |
---|
| 1592 | DO I = 1, IM |
---|
| 1593 | IF(CNVFLG(I)) THEN |
---|
| 1594 | INDX = KTCON(I) |
---|
| 1595 | DP = 1000. * DEL(I,INDX) |
---|
| 1596 | DV1 = HEO(I,INDX-1) |
---|
| 1597 | DELLAH(I,INDX) = ETA(I,INDX-1) * & |
---|
| 1598 | & (HCKO(I,INDX-1) - DV1) * G / DP |
---|
| 1599 | DVQ1 = QO(I,INDX-1) |
---|
| 1600 | DELLAQ(I,INDX) = ETA(I,INDX-1) * & |
---|
| 1601 | & (QCKO(I,INDX-1) - DVQ1) * G / DP |
---|
| 1602 | DV1U = UO(I,INDX-1) |
---|
| 1603 | DELLAU(I,INDX) = ETA(I,INDX-1) * & |
---|
| 1604 | & (UCKO(I,INDX-1) - DV1U) * G / DP |
---|
| 1605 | DV1V = VO(I,INDX-1) |
---|
| 1606 | DELLAV(I,INDX) = ETA(I,INDX-1) * & |
---|
| 1607 | & (VCKO(I,INDX-1) - DV1V) * G / DP |
---|
| 1608 | ! |
---|
| 1609 | ! cloud water |
---|
| 1610 | ! |
---|
| 1611 | DELLAL(I) = ETA(I,INDX-1) * QLKO_KTCON(I) * g / dp |
---|
| 1612 | ENDIF |
---|
| 1613 | ENDDO |
---|
| 1614 | ! |
---|
| 1615 | !------- FINAL CHANGED VARIABLE PER UNIT MASS FLUX |
---|
| 1616 | ! |
---|
| 1617 | DO K = 1, KM |
---|
| 1618 | DO I = 1, IM |
---|
| 1619 | if (k .le. kmax(i)) then |
---|
| 1620 | IF(CNVFLG(I).and.k.gt.KTCON(I)) THEN |
---|
| 1621 | QO(I,k) = Q1(I,k) |
---|
| 1622 | TO(I,k) = T1(I,k) |
---|
| 1623 | UO(I,k) = U1(I,k) |
---|
| 1624 | VO(I,k) = V1(I,k) |
---|
| 1625 | ENDIF |
---|
| 1626 | IF(CNVFLG(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1627 | QO(I,k) = DELLAQ(I,k) * MBDT + Q1(I,k) |
---|
| 1628 | DELLAT = (DELLAH(I,k) - HVAP * DELLAQ(I,k)) / CP |
---|
| 1629 | TO(I,k) = DELLAT * MBDT + T1(I,k) |
---|
| 1630 | !cmr QO(I,k) = max(QO(I,k),1.e-10) |
---|
| 1631 | val = 1.e-10 |
---|
| 1632 | QO(I,k) = max(QO(I,k), val ) |
---|
| 1633 | ENDIF |
---|
| 1634 | endif |
---|
| 1635 | ENDDO |
---|
| 1636 | ENDDO |
---|
| 1637 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
---|
| 1638 | ! |
---|
| 1639 | !--- THE ABOVE CHANGED ENVIRONMENT IS NOW USED TO CALULATE THE |
---|
| 1640 | !--- EFFECT THE ARBITRARY CLOUD (WITH UNIT MASS FLUX) |
---|
| 1641 | !--- WOULD HAVE ON THE STABILITY, |
---|
| 1642 | !--- WHICH THEN IS USED TO CALCULATE THE REAL MASS FLUX, |
---|
| 1643 | !--- NECESSARY TO KEEP THIS CHANGE IN BALANCE WITH THE LARGE-SCALE |
---|
| 1644 | !--- DESTABILIZATION. |
---|
| 1645 | ! |
---|
| 1646 | !--- ENVIRONMENTAL CONDITIONS AGAIN, FIRST HEIGHTS |
---|
| 1647 | ! |
---|
| 1648 | DO K = 1, KM |
---|
| 1649 | DO I = 1, IM |
---|
| 1650 | IF(k .le. kmax(i) .and. CNVFLG(I)) THEN |
---|
| 1651 | !jfe QESO(I,k) = 10. * FPVS(TO(I,k)) |
---|
| 1652 | ! |
---|
| 1653 | QESO(I,k) = 0.01 * fpvs(TO(I,K)) ! fpvs is in Pa |
---|
| 1654 | ! |
---|
| 1655 | QESO(I,k) = EPS * QESO(I,k) / (PFLD(I,k)+EPSM1*QESO(I,k)) |
---|
| 1656 | !cmr QESO(I,k) = MAX(QESO(I,k),1.E-8) |
---|
| 1657 | val = 1.E-8 |
---|
| 1658 | QESO(I,k) = MAX(QESO(I,k), val ) |
---|
| 1659 | TVO(I,k) = TO(I,k) + DELTA * TO(I,k) * QO(I,k) |
---|
| 1660 | ENDIF |
---|
| 1661 | ENDDO |
---|
| 1662 | ENDDO |
---|
| 1663 | DO I = 1, IM |
---|
| 1664 | IF(CNVFLG(I)) THEN |
---|
| 1665 | XAA0(I) = 0. |
---|
| 1666 | XPWAV(I) = 0. |
---|
| 1667 | ENDIF |
---|
| 1668 | ENDDO |
---|
| 1669 | ! |
---|
| 1670 | ! HYDROSTATIC HEIGHT ASSUME ZERO TERR |
---|
| 1671 | ! |
---|
| 1672 | ! DO I = 1, IM |
---|
| 1673 | ! IF(CNVFLG(I)) THEN |
---|
| 1674 | ! DLNSIG = LOG(PRSL(I,1)/PS(I)) |
---|
| 1675 | ! ZO(I,1) = TERR - DLNSIG * RD / G * TVO(I,1) |
---|
| 1676 | ! ENDIF |
---|
| 1677 | ! ENDDO |
---|
| 1678 | ! DO K = 2, KM |
---|
| 1679 | ! DO I = 1, IM |
---|
| 1680 | ! IF(k .le. kmax(i) .and. CNVFLG(I)) THEN |
---|
| 1681 | ! DLNSIG = LOG(PRSL(I,K) / PRSL(I,K-1)) |
---|
| 1682 | ! ZO(I,k) = ZO(I,k-1) - DLNSIG * RD / G |
---|
| 1683 | ! & * .5 * (TVO(I,k) + TVO(I,k-1)) |
---|
| 1684 | ! ENDIF |
---|
| 1685 | ! ENDDO |
---|
| 1686 | ! ENDDO |
---|
| 1687 | ! |
---|
| 1688 | !--- MOIST STATIC ENERGY |
---|
| 1689 | ! |
---|
| 1690 | DO K = 1, KM1 |
---|
| 1691 | DO I = 1, IM |
---|
| 1692 | IF(k .le. kmax(i)-1 .and. CNVFLG(I)) THEN |
---|
| 1693 | DZ = .5 * (ZO(I,k+1) - ZO(I,k)) |
---|
| 1694 | DP = .5 * (PFLD(I,k+1) - PFLD(I,k)) |
---|
| 1695 | !jfe ES = 10. * FPVS(TO(I,k+1)) |
---|
| 1696 | ! |
---|
| 1697 | ES = 0.01 * fpvs(TO(I,K+1)) ! fpvs is in Pa |
---|
| 1698 | ! |
---|
| 1699 | PPRIME = PFLD(I,k+1) + EPSM1 * ES |
---|
| 1700 | QS = EPS * ES / PPRIME |
---|
| 1701 | DQSDP = - QS / PPRIME |
---|
| 1702 | DESDT = ES * (FACT1 / TO(I,k+1) + FACT2 / (TO(I,k+1)**2)) |
---|
| 1703 | DQSDT = QS * PFLD(I,k+1) * DESDT / (ES * PPRIME) |
---|
| 1704 | GAMMA = EL2ORC * QESO(I,k+1) / (TO(I,k+1)**2) |
---|
| 1705 | DT = (G * DZ + HVAP * DQSDP * DP) / (CP * (1. + GAMMA)) |
---|
| 1706 | DQ = DQSDT * DT + DQSDP * DP |
---|
| 1707 | TO(I,k) = TO(I,k+1) + DT |
---|
| 1708 | QO(I,k) = QO(I,k+1) + DQ |
---|
| 1709 | PO(I,k) = .5 * (PFLD(I,k) + PFLD(I,k+1)) |
---|
| 1710 | ENDIF |
---|
| 1711 | ENDDO |
---|
| 1712 | ENDDO |
---|
| 1713 | DO K = 1, KM1 |
---|
| 1714 | DO I = 1, IM |
---|
| 1715 | IF(k .le. kmax(i)-1 .and. CNVFLG(I)) THEN |
---|
| 1716 | !jfe QESO(I,k) = 10. * FPVS(TO(I,k)) |
---|
| 1717 | ! |
---|
| 1718 | QESO(I,k) = 0.01 * fpvs(TO(I,K)) ! fpvs is in Pa |
---|
| 1719 | ! |
---|
| 1720 | QESO(I,k) = EPS * QESO(I,k) / (PO(I,k) + EPSM1 * QESO(I,k)) |
---|
| 1721 | !cmr QESO(I,k) = MAX(QESO(I,k),1.E-8) |
---|
| 1722 | val1 = 1.E-8 |
---|
| 1723 | QESO(I,k) = MAX(QESO(I,k), val1) |
---|
| 1724 | !cmr QO(I,k) = max(QO(I,k),1.e-10) |
---|
| 1725 | val2 = 1.e-10 |
---|
| 1726 | QO(I,k) = max(QO(I,k), val2 ) |
---|
| 1727 | ! QO(I,k) = MIN(QO(I,k),QESO(I,k)) |
---|
| 1728 | HEO(I,k) = .5 * G * (ZO(I,k) + ZO(I,k+1)) + & |
---|
| 1729 | & CP * TO(I,k) + HVAP * QO(I,k) |
---|
| 1730 | HESO(I,k) = .5 * G * (ZO(I,k) + ZO(I,k+1)) + & |
---|
| 1731 | & CP * TO(I,k) + HVAP * QESO(I,k) |
---|
| 1732 | ENDIF |
---|
| 1733 | ENDDO |
---|
| 1734 | ENDDO |
---|
| 1735 | DO I = 1, IM |
---|
| 1736 | k = kmax(i) |
---|
| 1737 | IF(CNVFLG(I)) THEN |
---|
| 1738 | HEO(I,k) = G * ZO(I,k) + CP * TO(I,k) + HVAP * QO(I,k) |
---|
| 1739 | HESO(I,k) = G * ZO(I,k) + CP * TO(I,k) + HVAP * QESO(I,k) |
---|
| 1740 | ! HEO(I,k) = MIN(HEO(I,k),HESO(I,k)) |
---|
| 1741 | ENDIF |
---|
| 1742 | ENDDO |
---|
| 1743 | DO I = 1, IM |
---|
| 1744 | IF(CNVFLG(I)) THEN |
---|
| 1745 | INDX = KB(I) |
---|
| 1746 | XHKB(I) = HEO(I,INDX) |
---|
| 1747 | XQKB(I) = QO(I,INDX) |
---|
| 1748 | HCKO(I,INDX) = XHKB(I) |
---|
| 1749 | QCKO(I,INDX) = XQKB(I) |
---|
| 1750 | ENDIF |
---|
| 1751 | ENDDO |
---|
| 1752 | ! |
---|
| 1753 | ! |
---|
| 1754 | !**************************** STATIC CONTROL |
---|
| 1755 | ! |
---|
| 1756 | ! |
---|
| 1757 | !------- MOISTURE AND CLOUD WORK FUNCTIONS |
---|
| 1758 | ! |
---|
| 1759 | DO K = 2, KM1 |
---|
| 1760 | DO I = 1, IM |
---|
| 1761 | if (k .le. kmax(i)-1) then |
---|
| 1762 | ! IF(CNVFLG(I).AND.K.GT.KB(I).AND.K.LE.KBCON(I)) THEN |
---|
| 1763 | IF(CNVFLG(I).AND.K.GT.KB(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1764 | FACTOR = ETA(I,k-1) / ETA(I,k) |
---|
| 1765 | ONEMF = 1. - FACTOR |
---|
| 1766 | HCKO(I,k) = FACTOR * HCKO(I,k-1) + ONEMF * & |
---|
| 1767 | & .5 * (HEO(I,k) + HEO(I,k+1)) |
---|
| 1768 | ENDIF |
---|
| 1769 | ! IF(CNVFLG(I).AND.K.GT.KBCON(I)) THEN |
---|
| 1770 | ! HEO(I,k) = HEO(I,k-1) |
---|
| 1771 | ! ENDIF |
---|
| 1772 | endif |
---|
| 1773 | ENDDO |
---|
| 1774 | ENDDO |
---|
| 1775 | DO K = 2, KM1 |
---|
| 1776 | DO I = 1, IM |
---|
| 1777 | if (k .le. kmax(i)-1) then |
---|
| 1778 | IF(CNVFLG(I).AND.K.GT.KB(I).AND.K.LT.KTCON(I)) THEN |
---|
| 1779 | DZ = .5 * (ZO(I,k+1) - ZO(I,k-1)) |
---|
| 1780 | GAMMA = EL2ORC * QESO(I,k) / (TO(I,k)**2) |
---|
| 1781 | XDBY = HCKO(I,k) - HESO(I,k) |
---|
| 1782 | !cmr XDBY = MAX(XDBY,0.) |
---|
| 1783 | val = 0. |
---|
| 1784 | XDBY = MAX(XDBY,val) |
---|
| 1785 | XQRCH = QESO(I,k) & |
---|
| 1786 | & + GAMMA * XDBY / (HVAP * (1. + GAMMA)) |
---|
| 1787 | FACTOR = ETA(I,k-1) / ETA(I,k) |
---|
| 1788 | ONEMF = 1. - FACTOR |
---|
| 1789 | QCKO(I,k) = FACTOR * QCKO(I,k-1) + ONEMF * & |
---|
| 1790 | & .5 * (QO(I,k) + QO(I,k+1)) |
---|
| 1791 | DQ = ETA(I,k) * QCKO(I,k) - ETA(I,k) * XQRCH |
---|
| 1792 | IF(DQ.GT.0.) THEN |
---|
| 1793 | ETAH = .5 * (ETA(I,k) + ETA(I,k-1)) |
---|
| 1794 | QLK = DQ / (ETA(I,k) + ETAH * C0 * DZ) |
---|
| 1795 | XAA0(I) = XAA0(I) - (ZO(I,k) - ZO(I,k-1)) * G * QLK |
---|
| 1796 | XQC = QLK + XQRCH |
---|
| 1797 | XPW = ETAH * C0 * DZ * QLK |
---|
| 1798 | QCKO(I,k) = XQC |
---|
| 1799 | XPWAV(I) = XPWAV(I) + XPW |
---|
| 1800 | ENDIF |
---|
| 1801 | ENDIF |
---|
| 1802 | ! IF(CNVFLG(I).AND.K.GT.KBCON(I).AND.K.LT.KTCON(I)) THEN |
---|
| 1803 | IF(CNVFLG(I).AND.K.GT.KBCON(I).AND.K.LE.KTCON(I)) THEN |
---|
| 1804 | DZ1 = ZO(I,k) - ZO(I,k-1) |
---|
| 1805 | GAMMA = EL2ORC * QESO(I,k-1) / (TO(I,k-1)**2) |
---|
| 1806 | RFACT = 1. + DELTA * CP * GAMMA & |
---|
| 1807 | & * TO(I,k-1) / HVAP |
---|
| 1808 | XDBY = HCKO(I,k-1) - HESO(I,k-1) |
---|
| 1809 | XAA0(I) = XAA0(I) & |
---|
| 1810 | & + DZ1 * (G / (CP * TO(I,k-1))) & |
---|
| 1811 | & * XDBY / (1. + GAMMA) & |
---|
| 1812 | & * RFACT |
---|
| 1813 | val=0. |
---|
| 1814 | XAA0(I)=XAA0(I)+ & |
---|
| 1815 | & DZ1 * G * DELTA * & |
---|
| 1816 | !cmr & MAX( 0.,(QESO(I,k-1) - QO(I,k-1))) & |
---|
| 1817 | & MAX(val,(QESO(I,k-1) - QO(I,k-1))) |
---|
| 1818 | ENDIF |
---|
| 1819 | endif |
---|
| 1820 | ENDDO |
---|
| 1821 | ENDDO |
---|
| 1822 | !cccc IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I)) THEN |
---|
| 1823 | !cccc PRINT *, ' XAA BEFORE DWNDRFT =', XAA0(I) |
---|
| 1824 | !cccc ENDIF |
---|
| 1825 | ! |
---|
| 1826 | !------- DOWNDRAFT CALCULATIONS |
---|
| 1827 | ! |
---|
| 1828 | ! |
---|
| 1829 | !--- DOWNDRAFT MOISTURE PROPERTIES |
---|
| 1830 | ! |
---|
| 1831 | DO I = 1, IM |
---|
| 1832 | XPWEV(I) = 0. |
---|
| 1833 | ENDDO |
---|
| 1834 | DO I = 1, IM |
---|
| 1835 | IF(DWNFLG2(I)) THEN |
---|
| 1836 | JMN = JMIN(I) |
---|
| 1837 | XHCD(I) = HEO(I,JMN) |
---|
| 1838 | XQCD(I) = QO(I,JMN) |
---|
| 1839 | QRCD(I,JMN) = QESO(I,JMN) |
---|
| 1840 | ENDIF |
---|
| 1841 | ENDDO |
---|
| 1842 | DO K = KM1, 1, -1 |
---|
| 1843 | DO I = 1, IM |
---|
| 1844 | if (k .le. kmax(i)-1) then |
---|
| 1845 | IF(DWNFLG2(I).AND.K.LT.JMIN(I)) THEN |
---|
| 1846 | DQ = QESO(I,k) |
---|
| 1847 | DT = TO(I,k) |
---|
| 1848 | GAMMA = EL2ORC * DQ / DT**2 |
---|
| 1849 | DH = XHCD(I) - HESO(I,k) |
---|
| 1850 | QRCD(I,k)=DQ+(1./HVAP)*(GAMMA/(1.+GAMMA))*DH |
---|
| 1851 | DETAD = ETAD(I,k+1) - ETAD(I,k) |
---|
| 1852 | XPWD = ETAD(I,k+1) * QRCD(I,k+1) - & |
---|
| 1853 | & ETAD(I,k) * QRCD(I,k) |
---|
| 1854 | XPWD = XPWD - DETAD * & |
---|
| 1855 | & .5 * (QRCD(I,k) + QRCD(I,k+1)) |
---|
| 1856 | XPWEV(I) = XPWEV(I) + XPWD |
---|
| 1857 | ENDIF |
---|
| 1858 | endif |
---|
| 1859 | ENDDO |
---|
| 1860 | ENDDO |
---|
| 1861 | ! |
---|
| 1862 | DO I = 1, IM |
---|
| 1863 | edtmax = edtmaxl |
---|
| 1864 | if(SLIMSK(I).eq.0.) edtmax = edtmaxs |
---|
| 1865 | IF(DWNFLG2(I)) THEN |
---|
| 1866 | IF(XPWEV(I).GE.0.) THEN |
---|
| 1867 | EDTX(I) = 0. |
---|
| 1868 | ELSE |
---|
| 1869 | EDTX(I) = -EDTX(I) * XPWAV(I) / XPWEV(I) |
---|
| 1870 | EDTX(I) = MIN(EDTX(I),EDTMAX) |
---|
| 1871 | ENDIF |
---|
| 1872 | ELSE |
---|
| 1873 | EDTX(I) = 0. |
---|
| 1874 | ENDIF |
---|
| 1875 | ENDDO |
---|
| 1876 | ! |
---|
| 1877 | ! |
---|
| 1878 | ! |
---|
| 1879 | !--- DOWNDRAFT CLOUDWORK FUNCTIONS |
---|
| 1880 | ! |
---|
| 1881 | ! |
---|
| 1882 | DO K = KM1, 1, -1 |
---|
| 1883 | DO I = 1, IM |
---|
| 1884 | if (k .le. kmax(i)-1) then |
---|
| 1885 | IF(DWNFLG2(I).AND.K.LT.JMIN(I)) THEN |
---|
| 1886 | GAMMA = EL2ORC * QESO(I,k+1) / TO(I,k+1)**2 |
---|
| 1887 | DHH=XHCD(I) |
---|
| 1888 | DT= TO(I,k+1) |
---|
| 1889 | DG= GAMMA |
---|
| 1890 | DH= HESO(I,k+1) |
---|
| 1891 | DZ=-1.*(ZO(I,k+1)-ZO(I,k)) |
---|
| 1892 | XAA0(I)=XAA0(I)+EDTX(I)*DZ*(G/(CP*DT))*((DHH-DH)/(1.+DG)) & |
---|
| 1893 | & *(1.+DELTA*CP*DG*DT/HVAP) |
---|
| 1894 | val=0. |
---|
| 1895 | XAA0(I)=XAA0(I)+EDTX(I)* & |
---|
| 1896 | !cmr & DZ*G*DELTA*MAX( 0.,(QESO(I,k+1)-QO(I,k+1))) & |
---|
| 1897 | & DZ*G*DELTA*MAX(val,(QESO(I,k+1)-QO(I,k+1))) |
---|
| 1898 | ENDIF |
---|
| 1899 | endif |
---|
| 1900 | ENDDO |
---|
| 1901 | ENDDO |
---|
| 1902 | !cccc IF(LAT.EQ.LATD.AND.lon.eq.lond.and.DWNFLG2(I)) THEN |
---|
| 1903 | !cccc PRINT *, ' XAA AFTER DWNDRFT =', XAA0(I) |
---|
| 1904 | !cccc ENDIF |
---|
| 1905 | ! |
---|
| 1906 | ! CALCULATE CRITICAL CLOUD WORK FUNCTION |
---|
| 1907 | ! |
---|
| 1908 | DO I = 1, IM |
---|
| 1909 | ACRT(I) = 0. |
---|
| 1910 | IF(CNVFLG(I)) THEN |
---|
| 1911 | ! IF(CNVFLG(I).AND.SLIMSK(I).NE.1.) THEN |
---|
| 1912 | IF(PFLD(I,KTCON(I)).LT.PCRIT(15))THEN |
---|
| 1913 | ACRT(I)=ACRIT(15)*(975.-PFLD(I,KTCON(I))) & |
---|
| 1914 | & /(975.-PCRIT(15)) |
---|
| 1915 | ELSE IF(PFLD(I,KTCON(I)).GT.PCRIT(1))THEN |
---|
| 1916 | ACRT(I)=ACRIT(1) |
---|
| 1917 | ELSE |
---|
| 1918 | !cmr K = IFIX((850. - PFLD(I,KTCON(I)))/50.) + 2 |
---|
| 1919 | K = int((850. - PFLD(I,KTCON(I)))/50.) + 2 |
---|
| 1920 | K = MIN(K,15) |
---|
| 1921 | K = MAX(K,2) |
---|
| 1922 | ACRT(I)=ACRIT(K)+(ACRIT(K-1)-ACRIT(K))* & |
---|
| 1923 | & (PFLD(I,KTCON(I))-PCRIT(K))/(PCRIT(K-1)-PCRIT(K)) |
---|
| 1924 | ENDIF |
---|
| 1925 | ! ELSE |
---|
| 1926 | ! ACRT(I) = .5 * (PFLD(I,KBCON(I)) - PFLD(I,KTCON(I))) |
---|
| 1927 | ENDIF |
---|
| 1928 | ENDDO |
---|
| 1929 | DO I = 1, IM |
---|
| 1930 | ACRTFCT(I) = 1. |
---|
| 1931 | IF(CNVFLG(I)) THEN |
---|
| 1932 | if(SLIMSK(I).eq.1.) THEN |
---|
| 1933 | w1 = w1l |
---|
| 1934 | w2 = w2l |
---|
| 1935 | w3 = w3l |
---|
| 1936 | w4 = w4l |
---|
| 1937 | else |
---|
| 1938 | w1 = w1s |
---|
| 1939 | w2 = w2s |
---|
| 1940 | w3 = w3s |
---|
| 1941 | w4 = w4s |
---|
| 1942 | ENDIF |
---|
| 1943 | !C IF(CNVFLG(I).AND.SLIMSK(I).EQ.1.) THEN |
---|
| 1944 | ! ACRTFCT(I) = PDOT(I) / W3 |
---|
| 1945 | ! |
---|
| 1946 | ! modify critical cloud workfunction by cloud base vertical velocity |
---|
| 1947 | ! |
---|
| 1948 | IF(PDOT(I).LE.W4) THEN |
---|
| 1949 | ACRTFCT(I) = (PDOT(I) - W4) / (W3 - W4) |
---|
| 1950 | ELSEIF(PDOT(I).GE.-W4) THEN |
---|
| 1951 | ACRTFCT(I) = - (PDOT(I) + W4) / (W4 - W3) |
---|
| 1952 | ELSE |
---|
| 1953 | ACRTFCT(I) = 0. |
---|
| 1954 | ENDIF |
---|
| 1955 | !cmr ACRTFCT(I) = MAX(ACRTFCT(I),-1.) |
---|
| 1956 | val1 = -1. |
---|
| 1957 | ACRTFCT(I) = MAX(ACRTFCT(I),val1) |
---|
| 1958 | !cmr ACRTFCT(I) = MIN(ACRTFCT(I),1.) |
---|
| 1959 | val2 = 1. |
---|
| 1960 | ACRTFCT(I) = MIN(ACRTFCT(I),val2) |
---|
| 1961 | ACRTFCT(I) = 1. - ACRTFCT(I) |
---|
| 1962 | ! |
---|
| 1963 | ! modify ACRTFCT(I) by colume mean rh if RHBAR(I) is greater than 80 percent |
---|
| 1964 | ! |
---|
| 1965 | ! if(RHBAR(I).ge..8) THEN |
---|
| 1966 | ! ACRTFCT(I) = ACRTFCT(I) * (.9 - min(RHBAR(I),.9)) * 10. |
---|
| 1967 | ! ENDIF |
---|
| 1968 | ! |
---|
| 1969 | ! modify adjustment time scale by cloud base vertical velocity |
---|
| 1970 | ! |
---|
| 1971 | DTCONV(I) = DT2 + max((1800. - DT2),RZERO) * & |
---|
| 1972 | & (PDOT(I) - W2) / (W1 - W2) |
---|
| 1973 | ! DTCONV(I) = MAX(DTCONV(I), DT2) |
---|
| 1974 | ! DTCONV(I) = 1800. * (PDOT(I) - w2) / (w1 - w2) |
---|
| 1975 | DTCONV(I) = max(DTCONV(I),dtmin) |
---|
| 1976 | DTCONV(I) = min(DTCONV(I),dtmax) |
---|
| 1977 | |
---|
| 1978 | ENDIF |
---|
| 1979 | ENDDO |
---|
| 1980 | ! |
---|
| 1981 | !--- LARGE SCALE FORCING |
---|
| 1982 | ! |
---|
| 1983 | DO I= 1, IM |
---|
| 1984 | FLG(I) = CNVFLG(I) |
---|
| 1985 | IF(CNVFLG(I)) THEN |
---|
| 1986 | ! F = AA1(I) / DTCONV(I) |
---|
| 1987 | FLD(I) = (AA1(I) - ACRT(I) * ACRTFCT(I)) / DTCONV(I) |
---|
| 1988 | IF(FLD(I).LE.0.) FLG(I) = .FALSE. |
---|
| 1989 | ENDIF |
---|
| 1990 | CNVFLG(I) = FLG(I) |
---|
| 1991 | IF(CNVFLG(I)) THEN |
---|
| 1992 | ! XAA0(I) = MAX(XAA0(I),0.) |
---|
| 1993 | XK(I) = (XAA0(I) - AA1(I)) / MBDT |
---|
| 1994 | IF(XK(I).GE.0.) FLG(I) = .FALSE. |
---|
| 1995 | ENDIF |
---|
| 1996 | ! |
---|
| 1997 | !--- KERNEL, CLOUD BASE MASS FLUX |
---|
| 1998 | ! |
---|
| 1999 | CNVFLG(I) = FLG(I) |
---|
| 2000 | IF(CNVFLG(I)) THEN |
---|
| 2001 | XMB(I) = -FLD(I) / XK(I) |
---|
| 2002 | XMB(I) = MIN(XMB(I),XMBMAX(I)) |
---|
| 2003 | ENDIF |
---|
| 2004 | ENDDO |
---|
| 2005 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I)) THEN |
---|
| 2006 | ! print *, ' RHBAR(I), ACRTFCT(I) =', RHBAR(I), ACRTFCT(I) |
---|
| 2007 | ! PRINT *, ' A1, XA =', AA1(I), XAA0(I) |
---|
| 2008 | ! PRINT *, ' XMB(I), ACRT =', XMB(I), ACRT |
---|
| 2009 | ! ENDIF |
---|
| 2010 | TOTFLG = .TRUE. |
---|
| 2011 | DO I = 1, IM |
---|
| 2012 | TOTFLG = TOTFLG .AND. (.NOT. CNVFLG(I)) |
---|
| 2013 | ENDDO |
---|
| 2014 | IF(TOTFLG) RETURN |
---|
| 2015 | ! |
---|
| 2016 | ! restore t0 and QO to t1 and q1 in case convection stops |
---|
| 2017 | ! |
---|
| 2018 | do k = 1, km |
---|
| 2019 | DO I = 1, IM |
---|
| 2020 | if (k .le. kmax(i)) then |
---|
| 2021 | TO(I,k) = T1(I,k) |
---|
| 2022 | QO(I,k) = Q1(I,k) |
---|
| 2023 | !jfe QESO(I,k) = 10. * FPVS(T1(I,k)) |
---|
| 2024 | ! |
---|
| 2025 | QESO(I,k) = 0.01 * fpvs(T1(I,K)) ! fpvs is in Pa |
---|
| 2026 | ! |
---|
| 2027 | QESO(I,k) = EPS * QESO(I,k) / (PFLD(I,k) + EPSM1*QESO(I,k)) |
---|
| 2028 | !cmr QESO(I,k) = MAX(QESO(I,k),1.E-8) |
---|
| 2029 | val = 1.E-8 |
---|
| 2030 | QESO(I,k) = MAX(QESO(I,k), val ) |
---|
| 2031 | endif |
---|
| 2032 | enddo |
---|
| 2033 | enddo |
---|
| 2034 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
---|
| 2035 | ! |
---|
| 2036 | !--- FEEDBACK: SIMPLY THE CHANGES FROM THE CLOUD WITH UNIT MASS FLUX |
---|
| 2037 | !--- MULTIPLIED BY THE MASS FLUX NECESSARY TO KEEP THE |
---|
| 2038 | !--- EQUILIBRIUM WITH THE LARGER-SCALE. |
---|
| 2039 | ! |
---|
| 2040 | DO I = 1, IM |
---|
| 2041 | DELHBAR(I) = 0. |
---|
| 2042 | DELQBAR(I) = 0. |
---|
| 2043 | DELTBAR(I) = 0. |
---|
| 2044 | QCOND(I) = 0. |
---|
| 2045 | ENDDO |
---|
| 2046 | DO K = 1, KM |
---|
| 2047 | DO I = 1, IM |
---|
| 2048 | if (k .le. kmax(i)) then |
---|
| 2049 | IF(CNVFLG(I).AND.K.LE.KTCON(I)) THEN |
---|
| 2050 | AUP = 1. |
---|
| 2051 | IF(K.Le.KB(I)) AUP = 0. |
---|
| 2052 | ADW = 1. |
---|
| 2053 | IF(K.GT.JMIN(I)) ADW = 0. |
---|
| 2054 | DELLAT = (DELLAH(I,k) - HVAP * DELLAQ(I,k)) / CP |
---|
| 2055 | T1(I,k) = T1(I,k) + DELLAT * XMB(I) * DT2 |
---|
| 2056 | Q1(I,k) = Q1(I,k) + DELLAQ(I,k) * XMB(I) * DT2 |
---|
| 2057 | U1(I,k) = U1(I,k) + DELLAU(I,k) * XMB(I) * DT2 |
---|
| 2058 | V1(I,k) = V1(I,k) + DELLAV(I,k) * XMB(I) * DT2 |
---|
| 2059 | DP = 1000. * DEL(I,K) |
---|
| 2060 | DELHBAR(I) = DELHBAR(I) + DELLAH(I,k)*XMB(I)*DP/G |
---|
| 2061 | DELQBAR(I) = DELQBAR(I) + DELLAQ(I,k)*XMB(I)*DP/G |
---|
| 2062 | DELTBAR(I) = DELTBAR(I) + DELLAT*XMB(I)*DP/G |
---|
| 2063 | ENDIF |
---|
| 2064 | endif |
---|
| 2065 | ENDDO |
---|
| 2066 | ENDDO |
---|
| 2067 | DO K = 1, KM |
---|
| 2068 | DO I = 1, IM |
---|
| 2069 | if (k .le. kmax(i)) then |
---|
| 2070 | IF(CNVFLG(I).AND.K.LE.KTCON(I)) THEN |
---|
| 2071 | !jfe QESO(I,k) = 10. * FPVS(T1(I,k)) |
---|
| 2072 | ! |
---|
| 2073 | QESO(I,k) = 0.01 * fpvs(T1(I,K)) ! fpvs is in Pa |
---|
| 2074 | ! |
---|
| 2075 | QESO(I,k) = EPS * QESO(I,k)/(PFLD(I,k) + EPSM1*QESO(I,k)) |
---|
| 2076 | !cmr QESO(I,k) = MAX(QESO(I,k),1.E-8) |
---|
| 2077 | val = 1.E-8 |
---|
| 2078 | QESO(I,k) = MAX(QESO(I,k), val ) |
---|
| 2079 | ! |
---|
| 2080 | ! cloud water |
---|
| 2081 | ! |
---|
| 2082 | if(ncloud.gt.0.and.CNVFLG(I).and.k.eq.KTCON(I)) THEN |
---|
| 2083 | tem = DELLAL(I) * XMB(I) * dt2 |
---|
| 2084 | tem1 = MAX(RZERO, MIN(RONE, (TCR-t1(I,K))*TCRF)) |
---|
| 2085 | if (QL(I,k,2) .gt. -999.0) then |
---|
| 2086 | QL(I,k,1) = QL(I,k,1) + tem * tem1 ! Ice |
---|
| 2087 | QL(I,k,2) = QL(I,k,2) + tem *(1.0-tem1) ! Water |
---|
| 2088 | else |
---|
| 2089 | tem2 = QL(I,k,1) + tem |
---|
| 2090 | QL(I,k,1) = tem2 * tem1 ! Ice |
---|
| 2091 | QL(I,k,2) = tem2 - QL(I,k,1) ! Water |
---|
| 2092 | endif |
---|
| 2093 | ! QL(I,k) = QL(I,k) + DELLAL(I) * XMB(I) * dt2 |
---|
| 2094 | dp = 1000. * del(i,k) |
---|
| 2095 | DELLAL(I) = DELLAL(I) * XMB(I) * dp / g |
---|
| 2096 | ENDIF |
---|
| 2097 | ENDIF |
---|
| 2098 | endif |
---|
| 2099 | ENDDO |
---|
| 2100 | ENDDO |
---|
| 2101 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I) ) THEN |
---|
| 2102 | ! PRINT *, ' DELHBAR, DELQBAR, DELTBAR =' |
---|
| 2103 | ! PRINT *, DELHBAR, HVAP*DELQBAR, CP*DELTBAR |
---|
| 2104 | ! PRINT *, ' DELLBAR =' |
---|
| 2105 | ! PRINT 6003, HVAP*DELLbar |
---|
| 2106 | ! PRINT *, ' DELLAQ =' |
---|
| 2107 | ! PRINT 6003, (HVAP*DELLAQ(I,k)*XMB(I),K=1,KMAX) |
---|
| 2108 | ! PRINT *, ' DELLAT =' |
---|
| 2109 | ! PRINT 6003, (DELLAH(i,k)*XMB(I)-HVAP*DELLAQ(I,k)*XMB(I), & |
---|
| 2110 | ! & K=1,KMAX) |
---|
| 2111 | ! ENDIF |
---|
| 2112 | DO I = 1, IM |
---|
| 2113 | RNTOT(I) = 0. |
---|
| 2114 | DELQEV(I) = 0. |
---|
| 2115 | DELQ2(I) = 0. |
---|
| 2116 | FLG(I) = CNVFLG(I) |
---|
| 2117 | ENDDO |
---|
| 2118 | DO K = KM, 1, -1 |
---|
| 2119 | DO I = 1, IM |
---|
| 2120 | if (k .le. kmax(i)) then |
---|
| 2121 | IF(CNVFLG(I).AND.K.LE.KTCON(I)) THEN |
---|
| 2122 | AUP = 1. |
---|
| 2123 | IF(K.Le.KB(I)) AUP = 0. |
---|
| 2124 | ADW = 1. |
---|
| 2125 | IF(K.GT.JMIN(I)) ADW = 0. |
---|
| 2126 | rain = AUP * PWO(I,k) + ADW * EDTO(I) * PWDO(I,k) |
---|
| 2127 | RNTOT(I) = RNTOT(I) + rain * XMB(I) * .001 * dt2 |
---|
| 2128 | ENDIF |
---|
| 2129 | endif |
---|
| 2130 | ENDDO |
---|
| 2131 | ENDDO |
---|
| 2132 | DO K = KM, 1, -1 |
---|
| 2133 | DO I = 1, IM |
---|
| 2134 | if (k .le. kmax(i)) then |
---|
| 2135 | DELTV(I) = 0. |
---|
| 2136 | DELQ(I) = 0. |
---|
| 2137 | QEVAP(I) = 0. |
---|
| 2138 | IF(CNVFLG(I).AND.K.LE.KTCON(I)) THEN |
---|
| 2139 | AUP = 1. |
---|
| 2140 | IF(K.Le.KB(I)) AUP = 0. |
---|
| 2141 | ADW = 1. |
---|
| 2142 | IF(K.GT.JMIN(I)) ADW = 0. |
---|
| 2143 | rain = AUP * PWO(I,k) + ADW * EDTO(I) * PWDO(I,k) |
---|
| 2144 | RN(I) = RN(I) + rain * XMB(I) * .001 * dt2 |
---|
| 2145 | ENDIF |
---|
| 2146 | IF(FLG(I).AND.K.LE.KTCON(I)) THEN |
---|
| 2147 | evef = EDT(I) * evfact |
---|
| 2148 | if(SLIMSK(I).eq.1.) evef=EDT(I) * evfactl |
---|
| 2149 | ! if(SLIMSK(I).eq.1.) evef=.07 |
---|
| 2150 | ! if(SLIMSK(I).ne.1.) evef = 0. |
---|
| 2151 | QCOND(I) = EVEF * (Q1(I,k) - QESO(I,k)) & |
---|
| 2152 | & / (1. + EL2ORC * QESO(I,k) / T1(I,k)**2) |
---|
| 2153 | DP = 1000. * DEL(I,K) |
---|
| 2154 | IF(RN(I).GT.0..AND.QCOND(I).LT.0.) THEN |
---|
| 2155 | QEVAP(I) = -QCOND(I) * (1.-EXP(-.32*SQRT(DT2*RN(I)))) |
---|
| 2156 | QEVAP(I) = MIN(QEVAP(I), RN(I)*1000.*G/DP) |
---|
| 2157 | DELQ2(I) = DELQEV(I) + .001 * QEVAP(I) * dp / g |
---|
| 2158 | ENDIF |
---|
| 2159 | if(RN(I).gt.0..and.QCOND(I).LT.0..and. & |
---|
| 2160 | & DELQ2(I).gt.RNTOT(I)) THEN |
---|
| 2161 | QEVAP(I) = 1000.* g * (RNTOT(I) - DELQEV(I)) / dp |
---|
| 2162 | FLG(I) = .false. |
---|
| 2163 | ENDIF |
---|
| 2164 | IF(RN(I).GT.0..AND.QEVAP(I).gt.0.) THEN |
---|
| 2165 | Q1(I,k) = Q1(I,k) + QEVAP(I) |
---|
| 2166 | T1(I,k) = T1(I,k) - ELOCP * QEVAP(I) |
---|
| 2167 | RN(I) = RN(I) - .001 * QEVAP(I) * DP / G |
---|
| 2168 | DELTV(I) = - ELOCP*QEVAP(I)/DT2 |
---|
| 2169 | DELQ(I) = + QEVAP(I)/DT2 |
---|
| 2170 | DELQEV(I) = DELQEV(I) + .001*dp*QEVAP(I)/g |
---|
| 2171 | ENDIF |
---|
| 2172 | DELLAQ(I,k) = DELLAQ(I,k) + DELQ(I) / XMB(I) |
---|
| 2173 | DELQBAR(I) = DELQBAR(I) + DELQ(I)*DP/G |
---|
| 2174 | DELTBAR(I) = DELTBAR(I) + DELTV(I)*DP/G |
---|
| 2175 | ENDIF |
---|
| 2176 | endif |
---|
| 2177 | ENDDO |
---|
| 2178 | ENDDO |
---|
| 2179 | ! IF(LAT.EQ.LATD.AND.lon.eq.lond.and.CNVFLG(I) ) THEN |
---|
| 2180 | ! PRINT *, ' DELLAH =' |
---|
| 2181 | ! PRINT 6003, (DELLAH(k)*XMB(I),K=1,KMAX) |
---|
| 2182 | ! PRINT *, ' DELLAQ =' |
---|
| 2183 | ! PRINT 6003, (HVAP*DELLAQ(I,k)*XMB(I),K=1,KMAX) |
---|
| 2184 | ! PRINT *, ' DELHBAR, DELQBAR, DELTBAR =' |
---|
| 2185 | ! PRINT *, DELHBAR, HVAP*DELQBAR, CP*DELTBAR |
---|
| 2186 | ! PRINT *, ' PRECIP =', HVAP*RN(I)*1000./DT2 |
---|
| 2187 | !CCCC PRINT *, ' DELLBAR =' |
---|
| 2188 | !CCCC PRINT *, HVAP*DELLbar |
---|
| 2189 | ! ENDIF |
---|
| 2190 | ! |
---|
| 2191 | ! PRECIPITATION RATE CONVERTED TO ACTUAL PRECIP |
---|
| 2192 | ! IN UNIT OF M INSTEAD OF KG |
---|
| 2193 | ! |
---|
| 2194 | DO I = 1, IM |
---|
| 2195 | IF(CNVFLG(I)) THEN |
---|
| 2196 | ! |
---|
| 2197 | ! IN THE EVENT OF UPPER LEVEL RAIN EVAPORATION AND LOWER LEVEL DOWNDRAF |
---|
| 2198 | ! MOISTENING, RN CAN BECOME NEGATIVE, IN THIS CASE, WE BACK OUT OF TH |
---|
| 2199 | ! HEATING AND THE MOISTENING |
---|
| 2200 | ! |
---|
| 2201 | if(RN(I).lt.0..and..not.FLG(I)) RN(I) = 0. |
---|
| 2202 | IF(RN(I).LE.0.) THEN |
---|
| 2203 | RN(I) = 0. |
---|
| 2204 | ELSE |
---|
| 2205 | KTOP(I) = KTCON(I) |
---|
| 2206 | KBOT(I) = KBCON(I) |
---|
| 2207 | KUO(I) = 1 |
---|
| 2208 | CLDWRK(I) = AA1(I) |
---|
| 2209 | ENDIF |
---|
| 2210 | ENDIF |
---|
| 2211 | ENDDO |
---|
| 2212 | DO K = 1, KM |
---|
| 2213 | DO I = 1, IM |
---|
| 2214 | if (k .le. kmax(i)) then |
---|
| 2215 | IF(CNVFLG(I).AND.RN(I).LE.0.) THEN |
---|
| 2216 | T1(I,k) = TO(I,k) |
---|
| 2217 | Q1(I,k) = QO(I,k) |
---|
| 2218 | ENDIF |
---|
| 2219 | endif |
---|
| 2220 | ENDDO |
---|
| 2221 | ENDDO |
---|
| 2222 | !! |
---|
| 2223 | RETURN |
---|
| 2224 | END SUBROUTINE SASCNV |
---|
| 2225 | |
---|
| 2226 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
---|
| 2227 | |
---|
| 2228 | SUBROUTINE SHALCV(IM,IX,KM,DT,DEL,PRSI,PRSL,PRSLK,KUO,Q,T,DPSHC) |
---|
| 2229 | ! |
---|
| 2230 | USE MODULE_GFS_MACHINE , ONLY : kind_phys |
---|
| 2231 | USE MODULE_GFS_PHYSCONS, grav => con_g, CP => con_CP, HVAP => con_HVAP & |
---|
| 2232 | &, RD => con_RD |
---|
| 2233 | |
---|
| 2234 | implicit none |
---|
| 2235 | ! |
---|
| 2236 | ! include 'constant.h' |
---|
| 2237 | ! |
---|
| 2238 | integer IM, IX, KM, KUO(IM) |
---|
| 2239 | real(kind=kind_phys) DEL(IX,KM), PRSI(IX,KM+1), PRSL(IX,KM), & |
---|
| 2240 | & PRSLK(IX,KM), & |
---|
| 2241 | & Q(IX,KM), T(IX,KM), DT, DPSHC |
---|
| 2242 | ! |
---|
| 2243 | ! Locals |
---|
| 2244 | ! |
---|
| 2245 | real(kind=kind_phys) ck, cpdt, dmse, dsdz1, dsdz2, & |
---|
| 2246 | & dsig, dtodsl, dtodsu, eldq, g, & |
---|
| 2247 | & gocp, rtdls |
---|
| 2248 | ! |
---|
| 2249 | integer k,k1,k2,kliftl,kliftu,kt,N2,I,iku,ik1,ik,ii |
---|
| 2250 | integer INDEX2(IM), KLCL(IM), KBOT(IM), KTOP(IM),kk & |
---|
| 2251 | &, KTOPM(IM) |
---|
| 2252 | !! |
---|
| 2253 | ! PHYSICAL PARAMETERS |
---|
| 2254 | PARAMETER(G=GRAV, GOCP=G/CP) |
---|
| 2255 | ! BOUNDS OF PARCEL ORIGIN |
---|
| 2256 | PARAMETER(KLIFTL=2,KLIFTU=2) |
---|
| 2257 | LOGICAL LSHC(IM) |
---|
| 2258 | real(kind=kind_phys) Q2(IM*KM), T2(IM*KM), & |
---|
| 2259 | & PRSL2(IM*KM), PRSLK2(IM*KM), & |
---|
| 2260 | & AL(IM*(KM-1)), AD(IM*KM), AU(IM*(KM-1)) |
---|
| 2261 | !----------------------------------------------------------------------- |
---|
| 2262 | ! COMPRESS FIELDS TO POINTS WITH NO DEEP CONVECTION |
---|
| 2263 | ! AND MOIST STATIC INSTABILITY. |
---|
| 2264 | DO I=1,IM |
---|
| 2265 | LSHC(I)=.FALSE. |
---|
| 2266 | ENDDO |
---|
| 2267 | DO K=1,KM-1 |
---|
| 2268 | DO I=1,IM |
---|
| 2269 | IF(KUO(I).EQ.0) THEN |
---|
| 2270 | ELDQ = HVAP*(Q(I,K)-Q(I,K+1)) |
---|
| 2271 | CPDT = CP*(T(I,K)-T(I,K+1)) |
---|
| 2272 | RTDLS = (PRSL(I,K)-PRSL(I,K+1)) / & |
---|
| 2273 | & PRSI(I,K+1)*RD*0.5*(T(I,K)+T(I,K+1)) |
---|
| 2274 | DMSE = ELDQ+CPDT-RTDLS |
---|
| 2275 | LSHC(I) = LSHC(I).OR.DMSE.GT.0. |
---|
| 2276 | ENDIF |
---|
| 2277 | ENDDO |
---|
| 2278 | ENDDO |
---|
| 2279 | N2 = 0 |
---|
| 2280 | DO I=1,IM |
---|
| 2281 | IF(LSHC(I)) THEN |
---|
| 2282 | N2 = N2 + 1 |
---|
| 2283 | INDEX2(N2) = I |
---|
| 2284 | ENDIF |
---|
| 2285 | ENDDO |
---|
| 2286 | IF(N2.EQ.0) RETURN |
---|
| 2287 | DO K=1,KM |
---|
| 2288 | KK = (K-1)*N2 |
---|
| 2289 | DO I=1,N2 |
---|
| 2290 | IK = KK + I |
---|
| 2291 | ii = index2(i) |
---|
| 2292 | Q2(IK) = Q(II,K) |
---|
| 2293 | T2(IK) = T(II,K) |
---|
| 2294 | PRSL2(IK) = PRSL(II,K) |
---|
| 2295 | PRSLK2(IK) = PRSLK(II,K) |
---|
| 2296 | ENDDO |
---|
| 2297 | ENDDO |
---|
| 2298 | do i=1,N2 |
---|
| 2299 | ktopm(i) = KM |
---|
| 2300 | enddo |
---|
| 2301 | do k=2,KM |
---|
| 2302 | do i=1,N2 |
---|
| 2303 | ii = index2(i) |
---|
| 2304 | if (prsi(ii,1)-prsi(ii,k) .le. dpshc) ktopm(i) = k |
---|
| 2305 | enddo |
---|
| 2306 | enddo |
---|
| 2307 | |
---|
| 2308 | !----------------------------------------------------------------------- |
---|
| 2309 | ! COMPUTE MOIST ADIABAT AND DETERMINE LIMITS OF SHALLOW CONVECTION. |
---|
| 2310 | ! CHECK FOR MOIST STATIC INSTABILITY AGAIN WITHIN CLOUD. |
---|
| 2311 | CALL MSTADBT3(N2,KM-1,KLIFTL,KLIFTU,PRSL2,PRSLK2,T2,Q2, & |
---|
| 2312 | & KLCL,KBOT,KTOP,AL,AU) |
---|
| 2313 | DO I=1,N2 |
---|
| 2314 | KBOT(I) = min(KLCL(I)-1, ktopm(i)-1) |
---|
| 2315 | KTOP(I) = min(KTOP(I)+1, ktopm(i)) |
---|
| 2316 | LSHC(I) = .FALSE. |
---|
| 2317 | ENDDO |
---|
| 2318 | DO K=1,KM-1 |
---|
| 2319 | KK = (K-1)*N2 |
---|
| 2320 | DO I=1,N2 |
---|
| 2321 | IF(K.GE.KBOT(I).AND.K.LT.KTOP(I)) THEN |
---|
| 2322 | IK = KK + I |
---|
| 2323 | IKU = IK + N2 |
---|
| 2324 | ELDQ = HVAP * (Q2(IK)-Q2(IKU)) |
---|
| 2325 | CPDT = CP * (T2(IK)-T2(IKU)) |
---|
| 2326 | RTDLS = (PRSL2(IK)-PRSL2(IKU)) / & |
---|
| 2327 | & PRSI(index2(i),K+1)*RD*0.5*(T2(IK)+T2(IKU)) |
---|
| 2328 | DMSE = ELDQ + CPDT - RTDLS |
---|
| 2329 | LSHC(I) = LSHC(I).OR.DMSE.GT.0. |
---|
| 2330 | AU(IK) = G/RTDLS |
---|
| 2331 | ENDIF |
---|
| 2332 | ENDDO |
---|
| 2333 | ENDDO |
---|
| 2334 | K1=KM+1 |
---|
| 2335 | K2=0 |
---|
| 2336 | DO I=1,N2 |
---|
| 2337 | IF(.NOT.LSHC(I)) THEN |
---|
| 2338 | KBOT(I) = KM+1 |
---|
| 2339 | KTOP(I) = 0 |
---|
| 2340 | ENDIF |
---|
| 2341 | K1 = MIN(K1,KBOT(I)) |
---|
| 2342 | K2 = MAX(K2,KTOP(I)) |
---|
| 2343 | ENDDO |
---|
| 2344 | KT = K2-K1+1 |
---|
| 2345 | IF(KT.LT.2) RETURN |
---|
| 2346 | !----------------------------------------------------------------------- |
---|
| 2347 | ! SET EDDY VISCOSITY COEFFICIENT CKU AT SIGMA INTERFACES. |
---|
| 2348 | ! COMPUTE DIAGONALS AND RHS FOR TRIDIAGONAL MATRIX SOLVER. |
---|
| 2349 | ! EXPAND FINAL FIELDS. |
---|
| 2350 | KK = (K1-1) * N2 |
---|
| 2351 | DO I=1,N2 |
---|
| 2352 | IK = KK + I |
---|
| 2353 | AD(IK) = 1. |
---|
| 2354 | ENDDO |
---|
| 2355 | ! |
---|
| 2356 | ! DTODSU=DT/DEL(K1) |
---|
| 2357 | DO K=K1,K2-1 |
---|
| 2358 | ! DTODSL=DTODSU |
---|
| 2359 | ! DTODSU= DT/DEL(K+1) |
---|
| 2360 | ! DSIG=SL(K)-SL(K+1) |
---|
| 2361 | KK = (K-1) * N2 |
---|
| 2362 | DO I=1,N2 |
---|
| 2363 | ii = index2(i) |
---|
| 2364 | DTODSL = DT/DEL(II,K) |
---|
| 2365 | DTODSU = DT/DEL(II,K+1) |
---|
| 2366 | DSIG = PRSL(II,K) - PRSL(II,K+1) |
---|
| 2367 | IK = KK + I |
---|
| 2368 | IKU = IK + N2 |
---|
| 2369 | IF(K.EQ.KBOT(I)) THEN |
---|
| 2370 | CK=1.5 |
---|
| 2371 | ELSEIF(K.EQ.KTOP(I)-1) THEN |
---|
| 2372 | CK=1. |
---|
| 2373 | ELSEIF(K.EQ.KTOP(I)-2) THEN |
---|
| 2374 | CK=3. |
---|
| 2375 | ELSEIF(K.GT.KBOT(I).AND.K.LT.KTOP(I)-2) THEN |
---|
| 2376 | CK=5. |
---|
| 2377 | ELSE |
---|
| 2378 | CK=0. |
---|
| 2379 | ENDIF |
---|
| 2380 | DSDZ1 = CK*DSIG*AU(IK)*GOCP |
---|
| 2381 | DSDZ2 = CK*DSIG*AU(IK)*AU(IK) |
---|
| 2382 | AU(IK) = -DTODSL*DSDZ2 |
---|
| 2383 | AL(IK) = -DTODSU*DSDZ2 |
---|
| 2384 | AD(IK) = AD(IK)-AU(IK) |
---|
| 2385 | AD(IKU) = 1.-AL(IK) |
---|
| 2386 | T2(IK) = T2(IK)+DTODSL*DSDZ1 |
---|
| 2387 | T2(IKU) = T2(IKU)-DTODSU*DSDZ1 |
---|
| 2388 | ENDDO |
---|
| 2389 | ENDDO |
---|
| 2390 | IK1=(K1-1)*N2+1 |
---|
| 2391 | CALL TRIDI2T3(N2,KT,AL(IK1),AD(IK1),AU(IK1),Q2(IK1),T2(IK1), & |
---|
| 2392 | & AU(IK1),Q2(IK1),T2(IK1)) |
---|
| 2393 | DO K=K1,K2 |
---|
| 2394 | KK = (K-1)*N2 |
---|
| 2395 | DO I=1,N2 |
---|
| 2396 | IK = KK + I |
---|
| 2397 | Q(INDEX2(I),K) = Q2(IK) |
---|
| 2398 | T(INDEX2(I),K) = T2(IK) |
---|
| 2399 | ENDDO |
---|
| 2400 | ENDDO |
---|
| 2401 | !----------------------------------------------------------------------- |
---|
| 2402 | RETURN |
---|
| 2403 | END SUBROUTINE SHALCV |
---|
| 2404 | !----------------------------------------------------------------------- |
---|
| 2405 | SUBROUTINE TRIDI2T3(L,N,CL,CM,CU,R1,R2,AU,A1,A2) |
---|
| 2406 | !yt INCLUDE DBTRIDI2; |
---|
| 2407 | !! |
---|
| 2408 | USE MODULE_GFS_MACHINE , ONLY : kind_phys |
---|
| 2409 | implicit none |
---|
| 2410 | integer k,n,l,i |
---|
| 2411 | real(kind=kind_phys) fk |
---|
| 2412 | !! |
---|
| 2413 | real(kind=kind_phys) & |
---|
| 2414 | & CL(L,2:N),CM(L,N),CU(L,N-1),R1(L,N),R2(L,N), & |
---|
| 2415 | & AU(L,N-1),A1(L,N),A2(L,N) |
---|
| 2416 | !----------------------------------------------------------------------- |
---|
| 2417 | DO I=1,L |
---|
| 2418 | FK=1./CM(I,1) |
---|
| 2419 | AU(I,1)=FK*CU(I,1) |
---|
| 2420 | A1(I,1)=FK*R1(I,1) |
---|
| 2421 | A2(I,1)=FK*R2(I,1) |
---|
| 2422 | ENDDO |
---|
| 2423 | DO K=2,N-1 |
---|
| 2424 | DO I=1,L |
---|
| 2425 | FK=1./(CM(I,K)-CL(I,K)*AU(I,K-1)) |
---|
| 2426 | AU(I,K)=FK*CU(I,K) |
---|
| 2427 | A1(I,K)=FK*(R1(I,K)-CL(I,K)*A1(I,K-1)) |
---|
| 2428 | A2(I,K)=FK*(R2(I,K)-CL(I,K)*A2(I,K-1)) |
---|
| 2429 | ENDDO |
---|
| 2430 | ENDDO |
---|
| 2431 | DO I=1,L |
---|
| 2432 | FK=1./(CM(I,N)-CL(I,N)*AU(I,N-1)) |
---|
| 2433 | A1(I,N)=FK*(R1(I,N)-CL(I,N)*A1(I,N-1)) |
---|
| 2434 | A2(I,N)=FK*(R2(I,N)-CL(I,N)*A2(I,N-1)) |
---|
| 2435 | ENDDO |
---|
| 2436 | DO K=N-1,1,-1 |
---|
| 2437 | DO I=1,L |
---|
| 2438 | A1(I,K)=A1(I,K)-AU(I,K)*A1(I,K+1) |
---|
| 2439 | A2(I,K)=A2(I,K)-AU(I,K)*A2(I,K+1) |
---|
| 2440 | ENDDO |
---|
| 2441 | ENDDO |
---|
| 2442 | !----------------------------------------------------------------------- |
---|
| 2443 | RETURN |
---|
| 2444 | END SUBROUTINE TRIDI2T3 |
---|
| 2445 | !----------------------------------------------------------------------- |
---|
| 2446 | |
---|
| 2447 | SUBROUTINE MSTADBT3(IM,KM,K1,K2,PRSL,PRSLK,TENV,QENV, & |
---|
| 2448 | & KLCL,KBOT,KTOP,TCLD,QCLD) |
---|
| 2449 | !yt INCLUDE DBMSTADB; |
---|
| 2450 | !! |
---|
| 2451 | USE MODULE_GFS_MACHINE, ONLY : kind_phys |
---|
| 2452 | USE MODULE_GFS_FUNCPHYS, ONLY : FTDP, FTHE, FTLCL, STMA |
---|
| 2453 | USE MODULE_GFS_PHYSCONS, EPS => con_eps, EPSM1 => con_epsm1, FV => con_FVirt |
---|
| 2454 | |
---|
| 2455 | implicit none |
---|
| 2456 | !! |
---|
| 2457 | ! include 'constant.h' |
---|
| 2458 | !! |
---|
| 2459 | integer k,k1,k2,km,i,im |
---|
| 2460 | real(kind=kind_phys) pv,qma,slklcl,tdpd,thelcl,tlcl |
---|
| 2461 | real(kind=kind_phys) tma,tvcld,tvenv |
---|
| 2462 | !! |
---|
| 2463 | real(kind=kind_phys) PRSL(IM,KM), PRSLK(IM,KM), TENV(IM,KM), & |
---|
| 2464 | & QENV(IM,KM), TCLD(IM,KM), QCLD(IM,KM) |
---|
| 2465 | INTEGER KLCL(IM), KBOT(IM), KTOP(IM) |
---|
| 2466 | ! LOCAL ARRAYS |
---|
| 2467 | real(kind=kind_phys) SLKMA(IM), THEMA(IM) |
---|
| 2468 | !----------------------------------------------------------------------- |
---|
| 2469 | ! DETERMINE WARMEST POTENTIAL WET-BULB TEMPERATURE BETWEEN K1 AND K2. |
---|
| 2470 | ! COMPUTE ITS LIFTING CONDENSATION LEVEL. |
---|
| 2471 | ! |
---|
| 2472 | DO I=1,IM |
---|
| 2473 | SLKMA(I) = 0. |
---|
| 2474 | THEMA(I) = 0. |
---|
| 2475 | ENDDO |
---|
| 2476 | DO K=K1,K2 |
---|
| 2477 | DO I=1,IM |
---|
| 2478 | PV = 1000.0 * PRSL(I,K)*QENV(I,K)/(EPS-EPSM1*QENV(I,K)) |
---|
| 2479 | TDPD = TENV(I,K)-FTDP(PV) |
---|
| 2480 | IF(TDPD.GT.0.) THEN |
---|
| 2481 | TLCL = FTLCL(TENV(I,K),TDPD) |
---|
| 2482 | SLKLCL = PRSLK(I,K)*TLCL/TENV(I,K) |
---|
| 2483 | ELSE |
---|
| 2484 | TLCL = TENV(I,K) |
---|
| 2485 | SLKLCL = PRSLK(I,K) |
---|
| 2486 | ENDIF |
---|
| 2487 | THELCL=FTHE(TLCL,SLKLCL) |
---|
| 2488 | IF(THELCL.GT.THEMA(I)) THEN |
---|
| 2489 | SLKMA(I) = SLKLCL |
---|
| 2490 | THEMA(I) = THELCL |
---|
| 2491 | ENDIF |
---|
| 2492 | ENDDO |
---|
| 2493 | ENDDO |
---|
| 2494 | !----------------------------------------------------------------------- |
---|
| 2495 | ! SET CLOUD TEMPERATURES AND HUMIDITIES WHEREVER THE PARCEL LIFTED UP |
---|
| 2496 | ! THE MOIST ADIABAT IS BUOYANT WITH RESPECT TO THE ENVIRONMENT. |
---|
| 2497 | DO I=1,IM |
---|
| 2498 | KLCL(I)=KM+1 |
---|
| 2499 | KBOT(I)=KM+1 |
---|
| 2500 | KTOP(I)=0 |
---|
| 2501 | ENDDO |
---|
| 2502 | DO K=1,KM |
---|
| 2503 | DO I=1,IM |
---|
| 2504 | TCLD(I,K)=0. |
---|
| 2505 | QCLD(I,K)=0. |
---|
| 2506 | ENDDO |
---|
| 2507 | ENDDO |
---|
| 2508 | DO K=K1,KM |
---|
| 2509 | DO I=1,IM |
---|
| 2510 | IF(PRSLK(I,K).LE.SLKMA(I)) THEN |
---|
| 2511 | KLCL(I)=MIN(KLCL(I),K) |
---|
| 2512 | CALL STMA(THEMA(I),PRSLK(I,K),TMA,QMA) |
---|
| 2513 | ! TMA=FTMA(THEMA(I),PRSLK(I,K),QMA) |
---|
| 2514 | TVCLD=TMA*(1.+FV*QMA) |
---|
| 2515 | TVENV=TENV(I,K)*(1.+FV*QENV(I,K)) |
---|
| 2516 | IF(TVCLD.GT.TVENV) THEN |
---|
| 2517 | KBOT(I)=MIN(KBOT(I),K) |
---|
| 2518 | KTOP(I)=MAX(KTOP(I),K) |
---|
| 2519 | TCLD(I,K)=TMA-TENV(I,K) |
---|
| 2520 | QCLD(I,K)=QMA-QENV(I,K) |
---|
| 2521 | ENDIF |
---|
| 2522 | ENDIF |
---|
| 2523 | ENDDO |
---|
| 2524 | ENDDO |
---|
| 2525 | !----------------------------------------------------------------------- |
---|
| 2526 | RETURN |
---|
| 2527 | END SUBROUTINE MSTADBT3 |
---|
| 2528 | |
---|
| 2529 | #if (EM_CORE == 1) |
---|
| 2530 | ! random seeds - ZCX |
---|
| 2531 | SUBROUTINE init_random_seed() |
---|
| 2532 | INTEGER :: i, n, clock |
---|
| 2533 | INTEGER, DIMENSION(:), ALLOCATABLE :: seed |
---|
| 2534 | |
---|
| 2535 | CALL RANDOM_SEED(size = n) |
---|
| 2536 | ALLOCATE(seed(n)) |
---|
| 2537 | |
---|
| 2538 | CALL SYSTEM_CLOCK(COUNT=clock) |
---|
| 2539 | |
---|
| 2540 | seed = clock + 37 * (/ (i - 1, i = 1, n) /) |
---|
| 2541 | CALL RANDOM_SEED(PUT = seed) |
---|
| 2542 | |
---|
| 2543 | DEALLOCATE(seed) |
---|
| 2544 | END SUBROUTINE |
---|
| 2545 | #endif |
---|
| 2546 | END MODULE module_cu_sas |
---|