Changeset 5142 for LMDZ6/branches/Amaury_dev/libf/phylmd/conflx.F90
- Timestamp:
- Jul 29, 2024, 3:07:34 PM (8 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/conflx.F90
r5112 r5142 1 2 1 ! $Header$ 3 2 4 3 SUBROUTINE conflx(dtime, pres_h, pres_f, t, q, con_t, con_q, pqhfl, w, d_t, & 5 d_q, rain, snow, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, kcbot, kctop, &6 kdtop, pmflxr, pmflxs)4 d_q, rain, snow, pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, kcbot, kctop, & 5 kdtop, pmflxr, pmflxs) 7 6 8 7 USE dimphy … … 20 19 ! Entree: 21 20 REAL dtime ! pas d'integration (s) 22 REAL pres_h(klon, klev +1) ! pression half-level (Pa)21 REAL pres_h(klon, klev + 1) ! pression half-level (Pa) 23 22 REAL pres_f(klon, klev) ! pression full-level (Pa) 24 23 REAL t(klon, klev) ! temperature (K) … … 39 38 REAL rain(klon) ! pluie (mm/s) 40 39 REAL snow(klon) ! neige (mm/s) 41 REAL pmflxr(klon, klev +1)42 REAL pmflxs(klon, klev +1)40 REAL pmflxr(klon, klev + 1) 41 REAL pmflxs(klon, klev + 1) 43 42 INTEGER kcbot(klon) ! niveau du bas de la convection 44 43 INTEGER kctop(klon) ! niveau du haut de la convection … … 53 52 REAL d_t_bis(klon, klev) 54 53 REAL d_q_bis(klon, klev) 55 REAL paprs(klon, klev +1)54 REAL paprs(klon, klev + 1) 56 55 REAL paprsf(klon, klev) 57 56 REAL zgeom(klon, klev) … … 65 64 REAL zde_u(klon, klev) 66 65 REAL zde_d(klon, klev) 67 REAL zmflxr(klon, klev +1)68 REAL zmflxs(klon, klev +1)66 REAL zmflxr(klon, klev + 1) 67 REAL zmflxs(klon, klev + 1) 69 68 ! AA 70 71 69 72 70 INTEGER i, k … … 117 115 DO k = 1, klev 118 116 DO i = 1, klon 119 pt(i, k) = t(i, klev -k+1)120 pq(i, k) = q(i, klev -k+1)121 paprsf(i, k) = pres_f(i, klev -k+1)122 paprs(i, k) = pres_h(i, klev +1-k+1)123 pvervel(i, k) = w(i, klev +1-k)124 zcvgt(i, k) = con_t(i, klev -k+1)125 zcvgq(i, k) = con_q(i, klev -k+1)126 127 zdelta = max(0., sign(1., rtt-pt(i,k)))128 zqsat = r2es *foeew(pt(i,k), zdelta)/paprsf(i, k)117 pt(i, k) = t(i, klev - k + 1) 118 pq(i, k) = q(i, klev - k + 1) 119 paprsf(i, k) = pres_f(i, klev - k + 1) 120 paprs(i, k) = pres_h(i, klev + 1 - k + 1) 121 pvervel(i, k) = w(i, klev + 1 - k) 122 zcvgt(i, k) = con_t(i, klev - k + 1) 123 zcvgq(i, k) = con_q(i, klev - k + 1) 124 125 zdelta = max(0., sign(1., rtt - pt(i, k))) 126 zqsat = r2es * foeew(pt(i, k), zdelta) / paprsf(i, k) 129 127 zqsat = min(0.5, zqsat) 130 zqsat = zqsat /(1.-retv*zqsat)128 zqsat = zqsat / (1. - retv * zqsat) 131 129 pqs(i, k) = zqsat 132 130 END DO 133 131 END DO 134 132 DO i = 1, klon 135 paprs(i, klev +1) = pres_h(i, 1)136 zgeom(i, klev) = rd *pt(i, klev)/(0.5*(paprs(i,klev+1)+paprsf(i, &137 klev)))*(paprs(i,klev+1)-paprsf(i,klev))133 paprs(i, klev + 1) = pres_h(i, 1) 134 zgeom(i, klev) = rd * pt(i, klev) / (0.5 * (paprs(i, klev + 1) + paprsf(i, & 135 klev))) * (paprs(i, klev + 1) - paprsf(i, klev)) 138 136 END DO 139 137 DO k = klev - 1, 1, -1 140 138 DO i = 1, klon 141 zgeom(i, k) = zgeom(i, k +1) + rd*0.5*(pt(i,k+1)+pt(i,k))/paprs(i, k+1)* &142 (paprsf(i,k+1)-paprsf(i,k))139 zgeom(i, k) = zgeom(i, k + 1) + rd * 0.5 * (pt(i, k + 1) + pt(i, k)) / paprs(i, k + 1) * & 140 (paprsf(i, k + 1) - paprsf(i, k)) 143 141 END DO 144 142 END DO … … 147 145 148 146 CALL flxmain(dtime, pt, pq, pqs, pqhfl, paprsf, paprs, zgeom, land, zcvgt, & 149 zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, zmfu, zmfd, zen_u, &150 zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs)147 zcvgq, pvervel, rain, snow, kcbot, kctop, kdtop, zmfu, zmfd, zen_u, & 148 zde_u, zen_d, zde_d, d_t_bis, d_q_bis, zmflxr, zmflxs) 151 149 152 150 ! AA-------------------------------------------------------- … … 158 156 DO k = 1, klev 159 157 DO i = 1, klon 160 d_q(i, klev +1-k) = dtime*d_q_bis(i, k)161 d_t(i, klev +1-k) = dtime*d_t_bis(i, k)158 d_q(i, klev + 1 - k) = dtime * d_q_bis(i, k) 159 d_t(i, klev + 1 - k) = dtime * d_t_bis(i, k) 162 160 END DO 163 161 END DO … … 172 170 DO k = 2, klev 173 171 DO i = 1, klon 174 pmfu(i, klev +2-k) = zmfu(i, k)175 pmfd(i, klev +2-k) = zmfd(i, k)172 pmfu(i, klev + 2 - k) = zmfu(i, k) 173 pmfd(i, klev + 2 - k) = zmfd(i, k) 176 174 END DO 177 175 END DO … … 179 177 DO k = 1, klev 180 178 DO i = 1, klon 181 pen_u(i, klev +1-k) = zen_u(i, k)182 pde_u(i, klev +1-k) = zde_u(i, k)179 pen_u(i, klev + 1 - k) = zen_u(i, k) 180 pde_u(i, klev + 1 - k) = zde_u(i, k) 183 181 END DO 184 182 END DO … … 186 184 DO k = 1, klev - 1 187 185 DO i = 1, klon 188 pen_d(i, klev +1-k) = -zen_d(i, k+1)189 pde_d(i, klev +1-k) = -zde_d(i, k+1)186 pen_d(i, klev + 1 - k) = -zen_d(i, k + 1) 187 pde_d(i, klev + 1 - k) = -zde_d(i, k + 1) 190 188 END DO 191 189 END DO … … 193 191 DO k = 1, klev + 1 194 192 DO i = 1, klon 195 pmflxr(i, klev+2-k) = zmflxr(i, k) 196 pmflxs(i, klev+2-k) = zmflxs(i, k) 197 END DO 198 END DO 199 193 pmflxr(i, klev + 2 - k) = zmflxr(i, k) 194 pmflxs(i, klev + 2 - k) = zmflxs(i, k) 195 END DO 196 END DO 200 197 201 198 END SUBROUTINE conflx 202 199 ! -------------------------------------------------------------------- 203 200 SUBROUTINE flxmain(pdtime, pten, pqen, pqsen, pqhfl, pap, paph, pgeo, ldland, & 204 ptte, pqte, pvervel, prsfc, pssfc, kcbot, kctop, kdtop, & ! *205 206 pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, dt_con, dq_con, pmflxr, pmflxs)201 ptte, pqte, pvervel, prsfc, pssfc, kcbot, kctop, kdtop, & ! * 202 ! ldcum, ktype, 203 pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, dt_con, dq_con, pmflxr, pmflxs) 207 204 USE dimphy 205 USE lmdz_YOECUMF 206 208 207 IMPLICIT NONE 209 208 ! ------------------------------------------------------------------ 210 209 include "YOMCST.h" 211 210 include "YOETHF.h" 212 include "YOECUMF.h"213 211 ! ---------------------------------------------------------------- 214 212 REAL pten(klon, klev), pqen(klon, klev), pqsen(klon, klev) … … 216 214 REAL pqte(klon, klev) 217 215 REAL pvervel(klon, klev) 218 REAL pgeo(klon, klev), pap(klon, klev), paph(klon, klev +1)216 REAL pgeo(klon, klev), pap(klon, klev), paph(klon, klev + 1) 219 217 REAL pqhfl(klon) 220 218 … … 234 232 REAL zdqpbl(klon), zdqcv(klon), zdhpbl(klon) 235 233 REAL zrfl(klon) 236 REAL pmflxr(klon, klev +1)237 REAL pmflxs(klon, klev +1)234 REAL pmflxr(klon, klev + 1) 235 REAL pmflxs(klon, klev + 1) 238 236 INTEGER ilab(klon, klev), ictop0(klon) 239 237 LOGICAL llo1 … … 275 273 ! ---------------------------------------------------------------------- 276 274 CALL flxini(pten, pqen, pqsen, pgeo, paph, zgeoh, ztenh, zqenh, zqsenh, & 277 ptu, pqu, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, pmfu, zmfus, zmfuq, &278 zdmfup, zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d)275 ptu, pqu, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, pmfu, zmfus, zmfuq, & 276 zdmfup, zdpmel, plu, plude, ilab, pen_u, pde_u, pen_d, pde_d) 279 277 ! --------------------------------------------------------------------- 280 278 ! determiner les valeurs au niveau de base de la tour convective … … 290 288 k = 1 291 289 DO i = 1, klon 292 zdqcv(i) = pqte(i, k) *(paph(i,k+1)-paph(i,k))290 zdqcv(i) = pqte(i, k) * (paph(i, k + 1) - paph(i, k)) 293 291 zdhpbl(i) = 0.0 294 292 zdqpbl(i) = 0.0 … … 297 295 DO k = 2, klev 298 296 DO i = 1, klon 299 zdqcv(i) = zdqcv(i) + pqte(i, k) *(paph(i,k+1)-paph(i,k))297 zdqcv(i) = zdqcv(i) + pqte(i, k) * (paph(i, k + 1) - paph(i, k)) 300 298 IF (k>=kcbot(i)) THEN 301 zdqpbl(i) = zdqpbl(i) + pqte(i, k) *(paph(i,k+1)-paph(i,k))302 zdhpbl(i) = zdhpbl(i) + (rcpd *ptte(i,k)+rlvtt*pqte(i,k))*(paph(i,k+1) &303 -paph(i,k))299 zdqpbl(i) = zdqpbl(i) + pqte(i, k) * (paph(i, k + 1) - paph(i, k)) 300 zdhpbl(i) = zdhpbl(i) + (rcpd * ptte(i, k) + rlvtt * pqte(i, k)) * (paph(i, k + 1) & 301 - paph(i, k)) 304 302 END IF 305 303 END DO … … 308 306 DO i = 1, klon 309 307 ktype(i) = 2 310 IF (zdqcv(i)>max(0., -1.5*pqhfl(i)*rg)) ktype(i) = 1308 IF (zdqcv(i)>max(0., -1.5 * pqhfl(i) * rg)) ktype(i) = 1 311 309 ! cc if (zdqcv(i).GT.MAX(0.,-1.1*pqhfl(i)*RG)) ktype(i) = 1 312 310 END DO … … 319 317 ikb = kcbot(i) 320 318 zqumqe = pqu(i, ikb) + plu(i, ikb) - zqenh(i, ikb) 321 zdqmin = max(0.01 *zqenh(i,ikb), 1.E-10)319 zdqmin = max(0.01 * zqenh(i, ikb), 1.E-10) 322 320 IF (zdqpbl(i)>0. .AND. zqumqe>zdqmin .AND. ldcum(i)) THEN 323 zmfub(i) = zdqpbl(i) /(rg*max(zqumqe,zdqmin))321 zmfub(i) = zdqpbl(i) / (rg * max(zqumqe, zdqmin)) 324 322 ELSE 325 323 zmfub(i) = 0.01 … … 327 325 END IF 328 326 IF (ktype(i)==2) THEN 329 zdh = rcpd *(ptu(i,ikb)-ztenh(i,ikb)) + rlvtt*zqumqe330 zdh = rg *max(zdh, 1.0E5*zdqmin)331 IF (zdhpbl(i)>0. .AND. ldcum(i)) zmfub(i) = zdhpbl(i) /zdh327 zdh = rcpd * (ptu(i, ikb) - ztenh(i, ikb)) + rlvtt * zqumqe 328 zdh = rg * max(zdh, 1.0E5 * zdqmin) 329 IF (zdhpbl(i)>0. .AND. ldcum(i)) zmfub(i) = zdhpbl(i) / zdh 332 330 END IF 333 zmfmax = (paph(i, ikb)-paph(i,ikb-1))/(rg*pdtime)331 zmfmax = (paph(i, ikb) - paph(i, ikb - 1)) / (rg * pdtime) 334 332 zmfub(i) = min(zmfub(i), zmfmax) 335 333 zentr(i) = entrscv … … 345 343 DO i = 1, klon 346 344 ikb = kcbot(i) 347 zhcbase(i) = rcpd *ptu(i, ikb) + zgeoh(i, ikb) + rlvtt*pqu(i, ikb)345 zhcbase(i) = rcpd * ptu(i, ikb) + zgeoh(i, ikb) + rlvtt * pqu(i, ikb) 348 346 ictop0(i) = kcbot(i) - 1 349 347 END DO 350 348 351 zalvdcp = rlvtt /rcpd349 zalvdcp = rlvtt / rcpd 352 350 DO k = klev - 1, 3, -1 353 351 DO i = 1, klon 354 zhsat = rcpd *ztenh(i, k) + zgeoh(i, k) + rlvtt*zqsenh(i, k)355 zgam = r5les *zalvdcp*zqsenh(i, k)/((1.-retv*zqsenh(i,k))*(ztenh(i, &356 k)-r4les)**2)357 zzz = rcpd *ztenh(i, k)*0.608358 zhhat = zhsat - (zzz +zgam*zzz)/(1.+zgam*zzz/rlvtt)*max(zqsenh(i,k)- &359 zqenh(i,k), 0.)352 zhsat = rcpd * ztenh(i, k) + zgeoh(i, k) + rlvtt * zqsenh(i, k) 353 zgam = r5les * zalvdcp * zqsenh(i, k) / ((1. - retv * zqsenh(i, k)) * (ztenh(i, & 354 k) - r4les)**2) 355 zzz = rcpd * ztenh(i, k) * 0.608 356 zhhat = zhsat - (zzz + zgam * zzz) / (1. + zgam * zzz / rlvtt) * max(zqsenh(i, k) - & 357 zqenh(i, k), 0.) 360 358 IF (k<ictop0(i) .AND. zhcbase(i)>zhhat) ictop0(i) = k 361 359 END DO … … 365 363 366 364 CALL flxasc(pdtime, ztenh, zqenh, pten, pqen, pqsen, pgeo, zgeoh, pap, & 367 paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, pmfu, &368 zmfub, zentr, zmfus, zmfuq, zmful, plude, zdmfup, kcbot, kctop, ictop0, &369 kcum, pen_u, pde_u)365 paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, pmfu, & 366 zmfub, zentr, zmfus, zmfuq, zmful, plude, zdmfup, kcbot, kctop, ictop0, & 367 kcum, pen_u, pde_u) 370 368 IF (kcum==0) GO TO 1000 371 369 … … 395 393 ! determiner le LFS (level of free sinking: niveau de plonge libre) 396 394 CALL flxdlfs(ztenh, zqenh, zgeoh, paph, ptu, pqu, ldcum, kcbot, kctop, & 397 zmfub, zrfl, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, kdtop, lddraf)395 zmfub, zrfl, ptd, pqd, pmfd, zmfds, zmfdq, zdmfdp, kdtop, lddraf) 398 396 399 397 ! calculer le panache descendant 400 398 CALL flxddraf(ztenh, zqenh, zgeoh, paph, zrfl, ptd, pqd, pmfd, zmfds, & 401 zmfdq, zdmfdp, lddraf, pen_d, pde_d)399 zmfdq, zdmfdp, lddraf, pen_d, pde_d) 402 400 403 401 ! calculer de nouveau le flux de masse entrant a travers la base … … 410 408 zeps = 0. 411 409 IF (llo1) zeps = cmfdeps 412 zqumqe = pqu(i, ikb) + plu(i, ikb) - zeps *pqd(i, ikb) - &413 (1.-zeps)*zqenh(i, ikb)414 zdqmin = max(0.01 *zqenh(i,ikb), 1.E-10)415 zmfmax = (paph(i, ikb)-paph(i,ikb-1))/(rg*pdtime)410 zqumqe = pqu(i, ikb) + plu(i, ikb) - zeps * pqd(i, ikb) - & 411 (1. - zeps) * zqenh(i, ikb) 412 zdqmin = max(0.01 * zqenh(i, ikb), 1.E-10) 413 zmfmax = (paph(i, ikb) - paph(i, ikb - 1)) / (rg * pdtime) 416 414 IF (zdqpbl(i)>0. .AND. zqumqe>zdqmin .AND. ldcum(i) .AND. & 417 zmfub(i)<zmfmax) THEN418 zmfub1(i) = zdqpbl(i) /(rg*max(zqumqe,zdqmin))415 zmfub(i)<zmfmax) THEN 416 zmfub1(i) = zdqpbl(i) / (rg * max(zqumqe, zdqmin)) 419 417 ELSE 420 418 zmfub1(i) = zmfub(i) 421 419 END IF 422 420 IF (ktype(i)==2) THEN 423 zdh = rcpd *(ptu(i,ikb)-zeps*ptd(i,ikb)-(1.-zeps)*ztenh(i,ikb)) + &424 rlvtt*zqumqe425 zdh = rg *max(zdh, 1.0E5*zdqmin)426 IF (zdhpbl(i)>0. .AND. ldcum(i)) zmfub1(i) = zdhpbl(i) /zdh421 zdh = rcpd * (ptu(i, ikb) - zeps * ptd(i, ikb) - (1. - zeps) * ztenh(i, ikb)) + & 422 rlvtt * zqumqe 423 zdh = rg * max(zdh, 1.0E5 * zdqmin) 424 IF (zdhpbl(i)>0. .AND. ldcum(i)) zmfub1(i) = zdhpbl(i) / zdh 427 425 END IF 428 IF (.NOT. ((ktype(i)==1 .OR. ktype(i)==2) .AND. abs(zmfub1(i) -zmfub(i &429 ))<0.2*zmfub(i))) zmfub1(i) = zmfub(i)426 IF (.NOT. ((ktype(i)==1 .OR. ktype(i)==2) .AND. abs(zmfub1(i) - zmfub(i & 427 ))<0.2 * zmfub(i))) zmfub1(i) = zmfub(i) 430 428 END IF 431 429 END DO … … 433 431 DO i = 1, klon 434 432 IF (lddraf(i)) THEN 435 zfac = zmfub1(i) /max(zmfub(i), 1.E-10)436 pmfd(i, k) = pmfd(i, k) *zfac437 zmfds(i, k) = zmfds(i, k) *zfac438 zmfdq(i, k) = zmfdq(i, k) *zfac439 zdmfdp(i, k) = zdmfdp(i, k) *zfac440 pen_d(i, k) = pen_d(i, k) *zfac441 pde_d(i, k) = pde_d(i, k) *zfac433 zfac = zmfub1(i) / max(zmfub(i), 1.E-10) 434 pmfd(i, k) = pmfd(i, k) * zfac 435 zmfds(i, k) = zmfds(i, k) * zfac 436 zmfdq(i, k) = zmfdq(i, k) * zfac 437 zdmfdp(i, k) = zdmfdp(i, k) * zfac 438 pen_d(i, k) = pen_d(i, k) * zfac 439 pde_d(i, k) = pde_d(i, k) * zfac 442 440 END IF 443 441 END DO … … 453 451 ! ----------------------------------------------------------------------- 454 452 CALL flxasc(pdtime, ztenh, zqenh, pten, pqen, pqsen, pgeo, zgeoh, pap, & 455 paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, pmfu, &456 zmfub, zentr, zmfus, zmfuq, zmful, plude, zdmfup, kcbot, kctop, ictop0, &457 kcum, pen_u, pde_u)453 paph, pqte, pvervel, ldland, ldcum, ktype, ilab, ptu, pqu, plu, pmfu, & 454 zmfub, zentr, zmfus, zmfuq, zmful, plude, zdmfup, kcbot, kctop, ictop0, & 455 kcum, pen_u, pde_u) 458 456 459 457 ! ----------------------------------------------------------------------- … … 462 460 ! ----------------------------------------------------------------------- 463 461 CALL flxflux(pdtime, pqen, pqsen, ztenh, zqenh, pap, paph, ldland, zgeoh, & 464 kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, zmfus, zmfds, &465 zmfuq, zmfdq, zmful, plude, zdmfup, zdmfdp, pten, prsfc, pssfc, zdpmel, &466 itopm2, pmflxr, pmflxs)462 kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, zmfus, zmfds, & 463 zmfuq, zmfdq, zmful, plude, zdmfup, zdmfdp, pten, prsfc, pssfc, zdpmel, & 464 itopm2, pmflxr, pmflxs) 467 465 468 466 ! ---------------------------------------------------------------------- … … 470 468 ! ---------------------------------------------------------------------- 471 469 CALL flxdtdq(pdtime, itopm2, paph, ldcum, pten, zmfus, zmfds, zmfuq, zmfdq, & 472 zmful, zdmfup, zdmfdp, zdpmel, dt_con, dq_con)473 474 1000 CONTINUE470 zmful, zdmfup, zdmfdp, zdpmel, dt_con, dq_con) 471 472 1000 CONTINUE 475 473 476 474 END SUBROUTINE flxmain 477 475 SUBROUTINE flxini(pten, pqen, pqsen, pgeo, paph, pgeoh, ptenh, pqenh, pqsenh, & 478 ptu, pqu, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, pmfu, pmfus, pmfuq, &479 pdmfup, pdpmel, plu, plude, klab, pen_u, pde_u, pen_d, pde_d)476 ptu, pqu, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, pmfu, pmfus, pmfuq, & 477 pdmfup, pdpmel, plu, plude, klab, pen_u, pde_u, pen_d, pde_d) 480 478 USE dimphy 481 479 IMPLICIT NONE … … 493 491 REAL pgeo(klon, klev) ! geopotentiel (g * metre) 494 492 REAL pgeoh(klon, klev) ! geopotentiel aux demi-niveaux 495 REAL paph(klon, klev +1) ! pression aux demi-niveaux493 REAL paph(klon, klev + 1) ! pression aux demi-niveaux 496 494 REAL ptenh(klon, klev) ! temperature aux demi-niveaux 497 495 REAL pqenh(klon, klev) ! humidite aux demi-niveaux … … 532 530 533 531 DO i = 1, klon 534 pgeoh(i, k) = pgeo(i, k) + (pgeo(i, k-1)-pgeo(i,k))*0.5535 ptenh(i, k) = (max(rcpd *pten(i,k-1)+pgeo(i,k-1),rcpd*pten(i,k)+pgeo(i, &536 k))-pgeoh(i,k))/rcpd537 pqsenh(i, k) = pqsen(i, k -1)532 pgeoh(i, k) = pgeo(i, k) + (pgeo(i, k - 1) - pgeo(i, k)) * 0.5 533 ptenh(i, k) = (max(rcpd * pten(i, k - 1) + pgeo(i, k - 1), rcpd * pten(i, k) + pgeo(i, & 534 k)) - pgeoh(i, k)) / rcpd 535 pqsenh(i, k) = pqsen(i, k - 1) 538 536 llflag(i) = .TRUE. 539 537 END DO 540 538 541 539 iCALL = 0 542 CALL flxadjtq(paph(1, k), ptenh(1,k), pqsenh(1,k), llflag, icall)543 544 DO i = 1, klon 545 pqenh(i, k) = min(pqen(i, k-1), pqsen(i,k-1)) + &546 (pqsenh(i,k)-pqsen(i,k-1))547 pqenh(i, k) = max(pqenh(i, k), 0.)548 END DO 549 550 END DO 551 552 DO i = 1, klon 553 ptenh(i, klev) = (rcpd *pten(i,klev)+pgeo(i,klev)-pgeoh(i,klev))/rcpd540 CALL flxadjtq(paph(1, k), ptenh(1, k), pqsenh(1, k), llflag, icall) 541 542 DO i = 1, klon 543 pqenh(i, k) = min(pqen(i, k - 1), pqsen(i, k - 1)) + & 544 (pqsenh(i, k) - pqsen(i, k - 1)) 545 pqenh(i, k) = max(pqenh(i, k), 0.) 546 END DO 547 548 END DO 549 550 DO i = 1, klon 551 ptenh(i, klev) = (rcpd * pten(i, klev) + pgeo(i, klev) - pgeoh(i, klev)) / rcpd 554 552 pqenh(i, klev) = pqen(i, klev) 555 553 ptenh(i, 1) = pten(i, 1) … … 560 558 DO k = klev - 1, 2, -1 561 559 DO i = 1, klon 562 zzs = max(rcpd *ptenh(i,k)+pgeoh(i,k), rcpd*ptenh(i,k+1)+pgeoh(i,k+1))563 ptenh(i, k) = (zzs -pgeoh(i,k))/rcpd560 zzs = max(rcpd * ptenh(i, k) + pgeoh(i, k), rcpd * ptenh(i, k + 1) + pgeoh(i, k + 1)) 561 ptenh(i, k) = (zzs - pgeoh(i, k)) / rcpd 564 562 END DO 565 563 END DO … … 596 594 END DO 597 595 598 599 596 END SUBROUTINE flxini 600 597 SUBROUTINE flxbase(ptenh, pqenh, pgeoh, paph, ptu, pqu, plu, ldcum, kcbot, & 601 klab)598 klab) 602 599 USE dimphy 603 600 IMPLICIT NONE … … 617 614 ! ---------------------------------------------------------------- 618 615 REAL ptenh(klon, klev), pqenh(klon, klev) 619 REAL pgeoh(klon, klev), paph(klon, klev +1)616 REAL pgeoh(klon, klev), paph(klon, klev + 1) 620 617 621 618 REAL ptu(klon, klev), pqu(klon, klev), plu(klon, klev) … … 643 640 is = 0 644 641 DO i = 1, klon 645 IF (klab(i, k+1)==1) is = is + 1642 IF (klab(i, k + 1)==1) is = is + 1 646 643 llflag(i) = .FALSE. 647 IF (klab(i, k+1)==1) llflag(i) = .TRUE.644 IF (klab(i, k + 1)==1) llflag(i) = .TRUE. 648 645 END DO 649 646 IF (is==0) GO TO 290 … … 651 648 DO i = 1, klon 652 649 IF (llflag(i)) THEN 653 pqu(i, k) = pqu(i, k +1)654 ptu(i, k) = ptu(i, k +1) + (pgeoh(i,k+1)-pgeoh(i,k))/rcpd655 zbuo = ptu(i, k) *(1.+retv*pqu(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &656 ) + 0.5650 pqu(i, k) = pqu(i, k + 1) 651 ptu(i, k) = ptu(i, k + 1) + (pgeoh(i, k + 1) - pgeoh(i, k)) / rcpd 652 zbuo = ptu(i, k) * (1. + retv * pqu(i, k)) - ptenh(i, k) * (1. + retv * pqenh(i, k) & 653 ) + 0.5 657 654 IF (zbuo>0.) klab(i, k) = 1 658 655 zqold(i) = pqu(i, k) … … 661 658 662 659 iCALL = 1 663 CALL flxadjtq(paph(1, k), ptu(1,k), pqu(1,k), llflag, icall)664 665 DO i = 1, klon 666 IF (llflag(i) .AND. pqu(i, k)/=zqold(i)) THEN660 CALL flxadjtq(paph(1, k), ptu(1, k), pqu(1, k), llflag, icall) 661 662 DO i = 1, klon 663 IF (llflag(i) .AND. pqu(i, k)/=zqold(i)) THEN 667 664 klab(i, k) = 2 668 665 plu(i, k) = plu(i, k) + zqold(i) - pqu(i, k) 669 zbuo = ptu(i, k) *(1.+retv*pqu(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &670 ) + 0.5666 zbuo = ptu(i, k) * (1. + retv * pqu(i, k)) - ptenh(i, k) * (1. + retv * pqenh(i, k) & 667 ) + 0.5 671 668 IF (zbuo>0.) kcbot(i) = k 672 669 IF (zbuo>0.) ldcum(i) = .TRUE. … … 674 671 END DO 675 672 676 290 END DO 677 673 290 END DO 678 674 679 675 END SUBROUTINE flxbase 680 676 SUBROUTINE flxasc(pdtime, ptenh, pqenh, pten, pqen, pqsen, pgeo, pgeoh, pap, & 681 paph, pqte, pvervel, ldland, ldcum, ktype, klab, ptu, pqu, plu, pmfu, &682 pmfub, pentr, pmfus, pmfuq, pmful, plude, pdmfup, kcbot, kctop, kctop0, &683 kcum, pen_u, pde_u)677 paph, pqte, pvervel, ldland, ldcum, ktype, klab, ptu, pqu, plu, pmfu, & 678 pmfub, pentr, pmfus, pmfuq, pmful, plude, pdmfup, kcbot, kctop, kctop0, & 679 kcum, pen_u, pde_u) 684 680 USE dimphy 681 USE lmdz_YOECUMF 682 685 683 IMPLICIT NONE 686 684 ! ---------------------------------------------------------------------- … … 690 688 include "YOMCST.h" 691 689 include "YOETHF.h" 692 include "YOECUMF.h"693 690 694 691 REAL pdtime … … 696 693 REAL pqen(klon, klev), pqenh(klon, klev), pqsen(klon, klev) 697 694 REAL pgeo(klon, klev), pgeoh(klon, klev) 698 REAL pap(klon, klev), paph(klon, klev +1)695 REAL pap(klon, klev), paph(klon, klev + 1) 699 696 REAL pqte(klon, klev) 700 697 REAL pvervel(klon, klev) ! vitesse verticale en Pa/s … … 735 732 DO k = klev, 3, -1 736 733 DO i = 1, klon 737 IF (pvervel(i, k)<zwmax(i)) THEN734 IF (pvervel(i, k)<zwmax(i)) THEN 738 735 zwmax(i) = pvervel(i, k) 739 736 klwmin(i) = k … … 758 755 pdmfup(i, k) = 0. 759 756 IF (.NOT. ldcum(i) .OR. ktype(i)==3) klab(i, k) = 0 760 IF (.NOT. ldcum(i) .AND. paph(i, k)<4.E4) kctop0(i) = k757 IF (.NOT. ldcum(i) .AND. paph(i, k)<4.E4) kctop0(i) = k 761 758 END DO 762 759 END DO … … 766 763 zdland(i) = 3.0E4 767 764 zdphi = pgeoh(i, kctop0(i)) - pgeoh(i, kcbot(i)) 768 IF (ptu(i, kctop0(i))>=ztglace) zdland(i) = zdphi765 IF (ptu(i, kctop0(i))>=ztglace) zdland(i) = zdphi 769 766 zdland(i) = max(3.0E4, zdland(i)) 770 767 zdland(i) = min(5.0E4, zdland(i)) … … 782 779 END IF 783 780 pmfu(i, klev) = pmfub(i) 784 pmfus(i, klev) = pmfub(i) *(rcpd*ptu(i,klev)+pgeoh(i,klev))785 pmfuq(i, klev) = pmfub(i) *pqu(i, klev)781 pmfus(i, klev) = pmfub(i) * (rcpd * ptu(i, klev) + pgeoh(i, klev)) 782 pmfuq(i, klev) = pmfub(i) * pqu(i, klev) 786 783 END DO 787 784 … … 797 794 DO k = klev - 1, 3, -1 798 795 799 IF (lmfmid .AND. k<klev -1) THEN796 IF (lmfmid .AND. k<klev - 1) THEN 800 797 DO i = 1, klon 801 IF (.NOT. ldcum(i) .AND. klab(i, k+1)==0 .AND. &802 pqen(i,k)>0.9*pqsen(i,k) .AND. pap(i,k)/paph(i,klev+1)>0.4) THEN803 ptu(i, k +1) = pten(i, k) + (pgeo(i,k)-pgeoh(i,k+1))/rcpd804 pqu(i, k +1) = pqen(i, k)805 plu(i, k +1) = 0.0806 zzzmb = max(cmfcmin, -pvervel(i, k)/rg)807 zmfmax = (paph(i, k)-paph(i,k-1))/(rg*pdtime)798 IF (.NOT. ldcum(i) .AND. klab(i, k + 1)==0 .AND. & 799 pqen(i, k)>0.9 * pqsen(i, k) .AND. pap(i, k) / paph(i, klev + 1)>0.4) THEN 800 ptu(i, k + 1) = pten(i, k) + (pgeo(i, k) - pgeoh(i, k + 1)) / rcpd 801 pqu(i, k + 1) = pqen(i, k) 802 plu(i, k + 1) = 0.0 803 zzzmb = max(cmfcmin, -pvervel(i, k) / rg) 804 zmfmax = (paph(i, k) - paph(i, k - 1)) / (rg * pdtime) 808 805 pmfub(i) = min(zzzmb, zmfmax) 809 pmfu(i, k +1) = pmfub(i)810 pmfus(i, k +1) = pmfub(i)*(rcpd*ptu(i,k+1)+pgeoh(i,k+1))811 pmfuq(i, k +1) = pmfub(i)*pqu(i, k+1)812 pmful(i, k +1) = 0.0813 pdmfup(i, k +1) = 0.0806 pmfu(i, k + 1) = pmfub(i) 807 pmfus(i, k + 1) = pmfub(i) * (rcpd * ptu(i, k + 1) + pgeoh(i, k + 1)) 808 pmfuq(i, k + 1) = pmfub(i) * pqu(i, k + 1) 809 pmful(i, k + 1) = 0.0 810 pdmfup(i, k + 1) = 0.0 814 811 kcbot(i) = k 815 klab(i, k +1) = 1812 klab(i, k + 1) = 1 816 813 ktype(i) = 3 817 814 pentr(i) = entrmid … … 822 819 is = 0 823 820 DO i = 1, klon 824 is = is + klab(i, k +1)825 IF (klab(i, k+1)==0) klab(i, k) = 0821 is = is + klab(i, k + 1) 822 IF (klab(i, k + 1)==0) klab(i, k) = 0 826 823 llflag(i) = .FALSE. 827 IF (klab(i, k+1)>0) llflag(i) = .TRUE.824 IF (klab(i, k + 1)>0) llflag(i) = .TRUE. 828 825 END DO 829 826 IF (is==0) GO TO 480 … … 834 831 pen_u(i, k) = 0.0 835 832 pde_u(i, k) = 0.0 836 zrho(i) = paph(i, k +1)/(rd*ptenh(i,k+1))833 zrho(i) = paph(i, k + 1) / (rd * ptenh(i, k + 1)) 837 834 zpbot(i) = paph(i, kcbot(i)) 838 835 zptop(i) = paph(i, kctop0(i)) … … 841 838 DO i = 1, klon 842 839 IF (ldcum(i)) THEN 843 zdprho = (paph(i, k+1)-paph(i,k))/(rg*zrho(i))844 zentr = pentr(i) *pmfu(i, k+1)*zdprho840 zdprho = (paph(i, k + 1) - paph(i, k)) / (rg * zrho(i)) 841 zentr = pentr(i) * pmfu(i, k + 1) * zdprho 845 842 llo1 = k < kcbot(i) 846 843 IF (llo1) pde_u(i, k) = zentr 847 zpmid = 0.5 *(zpbot(i)+zptop(i))848 llo2 = llo1 .AND. ktype(i) == 2 .AND. (zpbot(i) -paph(i,k)<0.2E5 .OR. &849 paph(i,k)>zpmid)844 zpmid = 0.5 * (zpbot(i) + zptop(i)) 845 llo2 = llo1 .AND. ktype(i) == 2 .AND. (zpbot(i) - paph(i, k)<0.2E5 .OR. & 846 paph(i, k)>zpmid) 850 847 IF (llo2) pen_u(i, k) = zentr 851 848 llo2 = llo1 .AND. (ktype(i)==1 .OR. ktype(i)==3) .AND. & 852 (k>=max(klwmin(i),kctop0(i)+2) .OR. pap(i,k)>zpmid)849 (k>=max(klwmin(i), kctop0(i) + 2) .OR. pap(i, k)>zpmid) 853 850 IF (llo2) pen_u(i, k) = zentr 854 851 llo1 = pen_u(i, k) > 0. .AND. (ktype(i)==1 .OR. ktype(i)==2) 855 852 IF (llo1) THEN 856 fact = 1. + 3. *(1.-min(1.,(zpbot(i)-pap(i,k))/1.5E4))857 zentr = zentr *fact858 pen_u(i, k) = pen_u(i, k) *fact859 pde_u(i, k) = pde_u(i, k) *fact853 fact = 1. + 3. * (1. - min(1., (zpbot(i) - pap(i, k)) / 1.5E4)) 854 zentr = zentr * fact 855 pen_u(i, k) = pen_u(i, k) * fact 856 pde_u(i, k) = pde_u(i, k) * fact 860 857 END IF 861 IF (llo2 .AND. pqenh(i, k+1)>1.E-5) pen_u(i, k) = zentr + &862 max(pqte(i,k), 0.)/pqenh(i, k+1)*zrho(i)*zdprho858 IF (llo2 .AND. pqenh(i, k + 1)>1.E-5) pen_u(i, k) = zentr + & 859 max(pqte(i, k), 0.) / pqenh(i, k + 1) * zrho(i) * zdprho 863 860 END IF 864 861 END DO … … 871 868 IF (llflag(i)) THEN 872 869 IF (k<kcbot(i)) THEN 873 zmftest = pmfu(i, k +1) + pen_u(i, k) - pde_u(i, k)874 zmfmax = min(zmftest, (paph(i, k)-paph(i,k-1))/(rg*pdtime))875 pen_u(i, k) = max(pen_u(i, k)-max(0.0,zmftest-zmfmax), 0.0)870 zmftest = pmfu(i, k + 1) + pen_u(i, k) - pde_u(i, k) 871 zmfmax = min(zmftest, (paph(i, k) - paph(i, k - 1)) / (rg * pdtime)) 872 pen_u(i, k) = max(pen_u(i, k) - max(0.0, zmftest - zmfmax), 0.0) 876 873 END IF 877 pde_u(i, k) = min(pde_u(i, k), 0.75*pmfu(i,k+1))874 pde_u(i, k) = min(pde_u(i, k), 0.75 * pmfu(i, k + 1)) 878 875 ! calculer le flux de masse du niveau k a partir de celui du k+1 879 pmfu(i, k) = pmfu(i, k +1) + pen_u(i, k) - pde_u(i, k)876 pmfu(i, k) = pmfu(i, k + 1) + pen_u(i, k) - pde_u(i, k) 880 877 ! calculer les valeurs Su, Qu et l du niveau k dans le panache 881 878 ! montant 882 zqeen = pqenh(i, k +1)*pen_u(i, k)883 zseen = (rcpd *ptenh(i,k+1)+pgeoh(i,k+1))*pen_u(i, k)884 zscde = (rcpd *ptu(i,k+1)+pgeoh(i,k+1))*pde_u(i, k)885 zqude = pqu(i, k +1)*pde_u(i, k)886 plude(i, k) = plu(i, k +1)*pde_u(i, k)887 zmfusk = pmfus(i, k +1) + zseen - zscde888 zmfuqk = pmfuq(i, k +1) + zqeen - zqude889 zmfulk = pmful(i, k +1) - plude(i, k)890 plu(i, k) = zmfulk *(1./max(cmfcmin,pmfu(i,k)))891 pqu(i, k) = zmfuqk *(1./max(cmfcmin,pmfu(i,k)))892 ptu(i, k) = (zmfusk *(1./max(cmfcmin,pmfu(i,k)))-pgeoh(i,k))/rcpd893 ptu(i, k) = max(100., ptu(i, k))894 ptu(i, k) = min(400., ptu(i, k))879 zqeen = pqenh(i, k + 1) * pen_u(i, k) 880 zseen = (rcpd * ptenh(i, k + 1) + pgeoh(i, k + 1)) * pen_u(i, k) 881 zscde = (rcpd * ptu(i, k + 1) + pgeoh(i, k + 1)) * pde_u(i, k) 882 zqude = pqu(i, k + 1) * pde_u(i, k) 883 plude(i, k) = plu(i, k + 1) * pde_u(i, k) 884 zmfusk = pmfus(i, k + 1) + zseen - zscde 885 zmfuqk = pmfuq(i, k + 1) + zqeen - zqude 886 zmfulk = pmful(i, k + 1) - plude(i, k) 887 plu(i, k) = zmfulk * (1. / max(cmfcmin, pmfu(i, k))) 888 pqu(i, k) = zmfuqk * (1. / max(cmfcmin, pmfu(i, k))) 889 ptu(i, k) = (zmfusk * (1. / max(cmfcmin, pmfu(i, k))) - pgeoh(i, k)) / rcpd 890 ptu(i, k) = max(100., ptu(i, k)) 891 ptu(i, k) = min(400., ptu(i, k)) 895 892 zqold(i) = pqu(i, k) 896 893 ELSE … … 904 901 905 902 iCALL = 1 906 CALL flxadjtq(paph(1, k), ptu(1,k), pqu(1,k), llflag, icall)907 908 DO i = 1, klon 909 IF (llflag(i) .AND. pqu(i, k)/=zqold(i)) THEN903 CALL flxadjtq(paph(1, k), ptu(1, k), pqu(1, k), llflag, icall) 904 905 DO i = 1, klon 906 IF (llflag(i) .AND. pqu(i, k)/=zqold(i)) THEN 910 907 klab(i, k) = 2 911 908 plu(i, k) = plu(i, k) + zqold(i) - pqu(i, k) 912 zbuo = ptu(i, k) *(1.+retv*pqu(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &913 )914 IF (klab(i, k+1)==1) zbuo = zbuo + 0.5915 IF (zbuo>0. .AND. pmfu(i, k)>=0.1*pmfub(i)) THEN909 zbuo = ptu(i, k) * (1. + retv * pqu(i, k)) - ptenh(i, k) * (1. + retv * pqenh(i, k) & 910 ) 911 IF (klab(i, k + 1)==1) zbuo = zbuo + 0.5 912 IF (zbuo>0. .AND. pmfu(i, k)>=0.1 * pmfub(i)) THEN 916 913 kctop(i) = k 917 914 ldcum(i) = .TRUE. … … 919 916 IF (ldland(i)) zdnoprc = zdland(i) 920 917 zprcon = cprcon 921 IF ((zpbot(i) -paph(i,k))<zdnoprc) zprcon = 0.0922 zlnew = plu(i, k) /(1.+zprcon*(pgeoh(i,k)-pgeoh(i,k+1)))923 pdmfup(i, k) = max(0., (plu(i, k)-zlnew)*pmfu(i,k))918 IF ((zpbot(i) - paph(i, k))<zdnoprc) zprcon = 0.0 919 zlnew = plu(i, k) / (1. + zprcon * (pgeoh(i, k) - pgeoh(i, k + 1))) 920 pdmfup(i, k) = max(0., (plu(i, k) - zlnew) * pmfu(i, k)) 924 921 plu(i, k) = zlnew 925 922 ELSE … … 931 928 DO i = 1, klon 932 929 IF (llflag(i)) THEN 933 pmful(i, k) = plu(i, k) *pmfu(i, k)934 pmfus(i, k) = (rcpd *ptu(i,k)+pgeoh(i,k))*pmfu(i, k)935 pmfuq(i, k) = pqu(i, k) *pmfu(i, k)936 END IF 937 END DO 938 939 480 END DO930 pmful(i, k) = plu(i, k) * pmfu(i, k) 931 pmfus(i, k) = (rcpd * ptu(i, k) + pgeoh(i, k)) * pmfu(i, k) 932 pmfuq(i, k) = pqu(i, k) * pmfu(i, k) 933 END IF 934 END DO 935 936 480 END DO 940 937 ! ---------------------------------------------------------------------- 941 938 ! DETERMINE CONVECTIVE FLUXES ABOVE NON-BUOYANCY LEVEL … … 945 942 ! ---------------------------------------------------------------------- 946 943 DO i = 1, klon 947 IF (kctop(i)==klev -1) ldcum(i) = .FALSE.944 IF (kctop(i)==klev - 1) ldcum(i) = .FALSE. 948 945 kcbot(i) = max(kcbot(i), kctop(i)) 949 946 END DO … … 961 958 IF (ldcum(i)) THEN 962 959 k = kctop(i) - 1 963 pde_u(i, k) = (1. -cmfctop)*pmfu(i, k+1)964 plude(i, k) = pde_u(i, k) *plu(i, k+1)965 pmfu(i, k) = pmfu(i, k +1) - pde_u(i, k)960 pde_u(i, k) = (1. - cmfctop) * pmfu(i, k + 1) 961 plude(i, k) = pde_u(i, k) * plu(i, k + 1) 962 pmfu(i, k) = pmfu(i, k + 1) - pde_u(i, k) 966 963 zlnew = plu(i, k) 967 pdmfup(i, k) = max(0., (plu(i, k)-zlnew)*pmfu(i,k))964 pdmfup(i, k) = max(0., (plu(i, k) - zlnew) * pmfu(i, k)) 968 965 plu(i, k) = zlnew 969 pmfus(i, k) = (rcpd *ptu(i,k)+pgeoh(i,k))*pmfu(i, k)970 pmfuq(i, k) = pqu(i, k) *pmfu(i, k)971 pmful(i, k) = plu(i, k) *pmfu(i, k)972 plude(i, k -1) = pmful(i, k)966 pmfus(i, k) = (rcpd * ptu(i, k) + pgeoh(i, k)) * pmfu(i, k) 967 pmfuq(i, k) = pqu(i, k) * pmfu(i, k) 968 pmful(i, k) = plu(i, k) * pmfu(i, k) 969 plude(i, k - 1) = pmful(i, k) 973 970 END IF 974 971 END DO 975 972 976 800 CONTINUE973 800 CONTINUE 977 974 978 975 END SUBROUTINE flxasc 979 976 SUBROUTINE flxflux(pdtime, pqen, pqsen, ptenh, pqenh, pap, paph, ldland, & 980 pgeoh, kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, pmfus, &981 pmfds, pmfuq, pmfdq, pmful, plude, pdmfup, pdmfdp, pten, prfl, psfl, &982 pdpmel, ktopm2, pmflxr, pmflxs)977 pgeoh, kcbot, kctop, lddraf, kdtop, ktype, ldcum, pmfu, pmfd, pmfus, & 978 pmfds, pmfuq, pmfdq, pmful, plude, pdmfup, pdmfdp, pten, prfl, psfl, & 979 pdpmel, ktopm2, pmflxr, pmflxs) 983 980 USE dimphy 984 981 USE lmdz_print_control, ONLY: prt_level 982 USE lmdz_YOECUMF 983 985 984 IMPLICIT NONE 986 985 ! ---------------------------------------------------------------------- … … 990 989 include "YOMCST.h" 991 990 include "YOETHF.h" 992 include "YOECUMF.h"993 991 994 992 REAL cevapcu(klon, klev) … … 996 994 REAL pqen(klon, klev), pqenh(klon, klev), pqsen(klon, klev) 997 995 REAL pten(klon, klev), ptenh(klon, klev) 998 REAL paph(klon, klev +1), pgeoh(klon, klev)996 REAL paph(klon, klev + 1), pgeoh(klon, klev) 999 997 1000 998 REAL pap(klon, klev) … … 1011 1009 REAL pdmfdp(klon, klev), maxpdmfdp(klon, klev) 1012 1010 REAL prfl(klon), psfl(klon) 1013 REAL pmflxr(klon, klev +1), pmflxs(klon, klev+1)1011 REAL pmflxr(klon, klev + 1), pmflxs(klon, klev + 1) 1014 1012 INTEGER kcbot(klon), kctop(klon), ktype(klon) 1015 1013 LOGICAL ldland(klon), ldcum(klon) … … 1028 1026 DO k = 1, klev 1029 1027 DO i = 1, klon 1030 cevapcu(i, k) = 1.93E-6 *261.*sqrt(1.E3/(38.3*0.293)*sqrt(0.5*(paph(i,k) &1031 +paph(i,k+1))/paph(i,klev+1)))*0.5/rg1028 cevapcu(i, k) = 1.93E-6 * 261. * sqrt(1.E3 / (38.3 * 0.293) * sqrt(0.5 * (paph(i, k) & 1029 + paph(i, k + 1)) / paph(i, klev + 1))) * 0.5 / rg 1032 1030 END DO 1033 1031 END DO … … 1035 1033 ! SPECIFY CONSTANTS 1036 1034 1037 zcons1 = rcpd /(rlmlt*rg*pdtime)1038 zcons2 = 1. /(rg*pdtime)1035 zcons1 = rcpd / (rlmlt * rg * pdtime) 1036 zcons2 = 1. / (rg * pdtime) 1039 1037 zcucov = 0.05 1040 1038 ztmelp2 = rtt + 2. … … 1052 1050 DO k = ktopm2, klev 1053 1051 DO i = 1, klon 1054 IF (ldcum(i) .AND. k>=kctop(i) -1) THEN1055 pmfus(i, k) = pmfus(i, k) - pmfu(i, k) *(rcpd*ptenh(i,k)+pgeoh(i,k))1056 pmfuq(i, k) = pmfuq(i, k) - pmfu(i, k) *pqenh(i, k)1052 IF (ldcum(i) .AND. k>=kctop(i) - 1) THEN 1053 pmfus(i, k) = pmfus(i, k) - pmfu(i, k) * (rcpd * ptenh(i, k) + pgeoh(i, k)) 1054 pmfuq(i, k) = pmfuq(i, k) - pmfu(i, k) * pqenh(i, k) 1057 1055 zdp = 1.5E4 1058 1056 IF (ldland(i)) zdp = 3.E4 … … 1062 1060 ! evaporee dans l'environnement) 1063 1061 1064 IF (paph(i, kcbot(i))-paph(i,kctop(i))>=zdp .AND. pqen(i,k-1)>0.8* &1065 pqsen(i,k-1)) pdmfup(i, k-1) = pdmfup(i, k-1) + plude(i, k-1)1062 IF (paph(i, kcbot(i)) - paph(i, kctop(i))>=zdp .AND. pqen(i, k - 1)>0.8 * & 1063 pqsen(i, k - 1)) pdmfup(i, k - 1) = pdmfup(i, k - 1) + plude(i, k - 1) 1066 1064 1067 1065 IF (lddraf(i) .AND. k>=kdtop(i)) THEN 1068 pmfds(i, k) = pmfds(i, k) - pmfd(i, k) *(rcpd*ptenh(i,k)+pgeoh(i,k))1069 pmfdq(i, k) = pmfdq(i, k) - pmfd(i, k) *pqenh(i, k)1066 pmfds(i, k) = pmfds(i, k) - pmfd(i, k) * (rcpd * ptenh(i, k) + pgeoh(i, k)) 1067 pmfdq(i, k) = pmfdq(i, k) - pmfd(i, k) * pqenh(i, k) 1070 1068 ELSE 1071 1069 pmfd(i, k) = 0. 1072 1070 pmfds(i, k) = 0. 1073 1071 pmfdq(i, k) = 0. 1074 pdmfdp(i, k -1) = 0.1072 pdmfdp(i, k - 1) = 0. 1075 1073 END IF 1076 1074 ELSE … … 1079 1077 pmfuq(i, k) = 0. 1080 1078 pmful(i, k) = 0. 1081 pdmfup(i, k -1) = 0.1082 plude(i, k -1) = 0.1079 pdmfup(i, k - 1) = 0. 1080 plude(i, k - 1) = 0. 1083 1081 pmfd(i, k) = 0. 1084 1082 pmfds(i, k) = 0. 1085 1083 pmfdq(i, k) = 0. 1086 pdmfdp(i, k -1) = 0.1084 pdmfdp(i, k - 1) = 0. 1087 1085 END IF 1088 1086 END DO … … 1093 1091 IF (ldcum(i) .AND. k>kcbot(i)) THEN 1094 1092 ikb = kcbot(i) 1095 zzp = ((paph(i, klev+1)-paph(i,k))/(paph(i,klev+1)-paph(i,ikb)))1093 zzp = ((paph(i, klev + 1) - paph(i, k)) / (paph(i, klev + 1) - paph(i, ikb))) 1096 1094 IF (ktype(i)==3) zzp = zzp**2 1097 pmfu(i, k) = pmfu(i, ikb) *zzp1098 pmfus(i, k) = pmfus(i, ikb) *zzp1099 pmfuq(i, k) = pmfuq(i, ikb) *zzp1100 pmful(i, k) = pmful(i, ikb) *zzp1095 pmfu(i, k) = pmfu(i, ikb) * zzp 1096 pmfus(i, k) = pmfus(i, ikb) * zzp 1097 pmfuq(i, k) = pmfuq(i, ikb) * zzp 1098 pmful(i, k) = pmful(i, ikb) * zzp 1101 1099 END IF 1102 1100 END DO … … 1116 1114 DO i = 1, klon 1117 1115 IF (ldcum(i)) THEN 1118 IF (pmflxs(i, k)>0.0 .AND. pten(i,k)>ztmelp2) THEN1119 zfac = zcons1 *(paph(i,k+1)-paph(i,k))1120 zsnmlt = min(pmflxs(i, k), zfac*(pten(i,k)-ztmelp2))1116 IF (pmflxs(i, k)>0.0 .AND. pten(i, k)>ztmelp2) THEN 1117 zfac = zcons1 * (paph(i, k + 1) - paph(i, k)) 1118 zsnmlt = min(pmflxs(i, k), zfac * (pten(i, k) - ztmelp2)) 1121 1119 pdpmel(i, k) = zsnmlt 1122 ztmsmlt = pten(i, k) - zsnmlt /zfac1123 zdelta = max(0., sign(1., rtt-ztmsmlt))1124 zqsat = r2es *foeew(ztmsmlt, zdelta)/pap(i, k)1120 ztmsmlt = pten(i, k) - zsnmlt / zfac 1121 zdelta = max(0., sign(1., rtt - ztmsmlt)) 1122 zqsat = r2es * foeew(ztmsmlt, zdelta) / pap(i, k) 1125 1123 zqsat = min(0.5, zqsat) 1126 zqsat = zqsat /(1.-retv*zqsat)1124 zqsat = zqsat / (1. - retv * zqsat) 1127 1125 pqsen(i, k) = zqsat 1128 1126 END IF 1129 IF (pten(i, k)>rtt) THEN1130 pmflxr(i, k +1) = pmflxr(i, k) + pdmfup(i, k) + pdmfdp(i, k) + &1131 pdpmel(i, k)1132 pmflxs(i, k +1) = pmflxs(i, k) - pdpmel(i, k)1127 IF (pten(i, k)>rtt) THEN 1128 pmflxr(i, k + 1) = pmflxr(i, k) + pdmfup(i, k) + pdmfdp(i, k) + & 1129 pdpmel(i, k) 1130 pmflxs(i, k + 1) = pmflxs(i, k) - pdpmel(i, k) 1133 1131 ELSE 1134 pmflxs(i, k +1) = pmflxs(i, k) + pdmfup(i, k) + pdmfdp(i, k)1135 pmflxr(i, k +1) = pmflxr(i, k)1132 pmflxs(i, k + 1) = pmflxs(i, k) + pdmfup(i, k) + pdmfdp(i, k) 1133 pmflxr(i, k + 1) = pmflxr(i, k) 1136 1134 END IF 1137 1135 ! si la precipitation est negative, on ajuste le plux du 1138 1136 ! panache descendant pour eliminer la negativite 1139 IF ((pmflxr(i, k+1)+pmflxs(i,k+1))<0.0) THEN1137 IF ((pmflxr(i, k + 1) + pmflxs(i, k + 1))<0.0) THEN 1140 1138 pdmfdp(i, k) = -pmflxr(i, k) - pmflxs(i, k) - pdmfup(i, k) 1141 pmflxr(i, k +1) = 0.01142 pmflxs(i, k +1) = 0.01139 pmflxr(i, k + 1) = 0.0 1140 pmflxs(i, k + 1) = 0.0 1143 1141 pdpmel(i, k) = 0.0 1144 1142 END IF … … 1174 1172 zrfl = pmflxr(i, k) + pmflxs(i, k) 1175 1173 IF (zrfl>1.0E-20) THEN 1176 zrnew = (max(0., sqrt(zrfl/zcucov)-cevapcu(i, &1177 k)*(paph(i,k+1)-paph(i,k))*max(0.,pqsen(i,k)-pqen(i,k))))**2* &1178 zcucov1179 zrmin = zrfl - zcucov *max(0., 0.8*pqsen(i,k)-pqen(i,k))*zcons2*(&1180 paph(i,k+1)-paph(i,k))1174 zrnew = (max(0., sqrt(zrfl / zcucov) - cevapcu(i, & 1175 k) * (paph(i, k + 1) - paph(i, k)) * max(0., pqsen(i, k) - pqen(i, k))))**2 * & 1176 zcucov 1177 zrmin = zrfl - zcucov * max(0., 0.8 * pqsen(i, k) - pqen(i, k)) * zcons2 * (& 1178 paph(i, k + 1) - paph(i, k)) 1181 1179 zrnew = max(zrnew, zrmin) 1182 1180 zrfln = max(zrnew, 0.) 1183 zdrfl = min(0., zrfln -zrfl)1181 zdrfl = min(0., zrfln - zrfl) 1184 1182 ! jq At least the amount of precipiation needed to feed the 1185 1183 ! downdraft … … 1187 1185 ! can't 1188 1186 ! jq be evaporated (surely the evaporation can't be positive): 1189 zdrfl = max(zdrfl, min(-pmflxr(i, k)-pmflxs(i,k)-maxpdmfdp(i, &1190 k),0.0))1187 zdrfl = max(zdrfl, min(-pmflxr(i, k) - pmflxs(i, k) - maxpdmfdp(i, & 1188 k), 0.0)) 1191 1189 ! jq End of insertion 1192 1190 1193 zdenom = 1.0 /max(1.0E-20, pmflxr(i,k)+pmflxs(i,k))1194 IF (pten(i, k)>rtt) THEN1191 zdenom = 1.0 / max(1.0E-20, pmflxr(i, k) + pmflxs(i, k)) 1192 IF (pten(i, k)>rtt) THEN 1195 1193 zpdr = pdmfdp(i, k) 1196 1194 zpds = 0.0 … … 1199 1197 zpds = pdmfdp(i, k) 1200 1198 END IF 1201 pmflxr(i, k +1) = pmflxr(i, k) + zpdr + pdpmel(i, k) + &1202 zdrfl*pmflxr(i, k)*zdenom1203 pmflxs(i, k +1) = pmflxs(i, k) + zpds - pdpmel(i, k) + &1204 zdrfl*pmflxs(i, k)*zdenom1199 pmflxr(i, k + 1) = pmflxr(i, k) + zpdr + pdpmel(i, k) + & 1200 zdrfl * pmflxr(i, k) * zdenom 1201 pmflxs(i, k + 1) = pmflxs(i, k) + zpds - pdpmel(i, k) + & 1202 zdrfl * pmflxs(i, k) * zdenom 1205 1203 pdmfup(i, k) = pdmfup(i, k) + zdrfl 1206 1204 ELSE 1207 pmflxr(i, k +1) = 0.01208 pmflxs(i, k +1) = 0.01205 pmflxr(i, k + 1) = 0.0 1206 pmflxs(i, k + 1) = 0.0 1209 1207 pdmfdp(i, k) = 0.0 1210 1208 pdpmel(i, k) = 0.0 1211 1209 END IF 1212 IF (pmflxr(i,k)+pmflxs(i,k)<-1.E-26 .AND. prt_level>=1) WRITE (*, *) & 1213 'precip. < 1e-16 ', pmflxr(i, k) + pmflxs(i, k) 1214 END IF 1215 END DO 1216 END DO 1217 1218 DO i = 1, klon 1219 prfl(i) = pmflxr(i, klev+1) 1220 psfl(i) = pmflxs(i, klev+1) 1221 END DO 1222 1210 IF (pmflxr(i, k) + pmflxs(i, k)<-1.E-26 .AND. prt_level>=1) WRITE (*, *) & 1211 'precip. < 1e-16 ', pmflxr(i, k) + pmflxs(i, k) 1212 END IF 1213 END DO 1214 END DO 1215 1216 DO i = 1, klon 1217 prfl(i) = pmflxr(i, klev + 1) 1218 psfl(i) = pmflxs(i, klev + 1) 1219 END DO 1223 1220 1224 1221 END SUBROUTINE flxflux 1225 1222 SUBROUTINE flxdtdq(pdtime, ktopm2, paph, ldcum, pten, pmfus, pmfds, pmfuq, & 1226 pmfdq, pmful, pdmfup, pdmfdp, pdpmel, dt_con, dq_con)1223 pmfdq, pmful, pdmfup, pdmfdp, pdpmel, dt_con, dq_con) 1227 1224 USE dimphy 1225 USE lmdz_YOECUMF 1226 1228 1227 IMPLICIT NONE 1229 1228 ! ---------------------------------------------------------------------- … … 1232 1231 include "YOMCST.h" 1233 1232 include "YOETHF.h" 1234 include "YOECUMF.h"1235 1233 ! ----------------------------------------------------------------- 1236 1234 LOGICAL llo1 1237 1235 1238 REAL pten(klon, klev), paph(klon, klev +1)1236 REAL pten(klon, klev), paph(klon, klev + 1) 1239 1237 REAL pmfus(klon, klev), pmfuq(klon, klev), pmful(klon, klev) 1240 1238 REAL pmfds(klon, klev), pmfdq(klon, klev) … … 1254 1252 DO i = 1, klon 1255 1253 IF (ldcum(i)) THEN 1256 llo1 = (pten(i, k)-rtt) > 0.1254 llo1 = (pten(i, k) - rtt) > 0. 1257 1255 zalv = rlstt 1258 1256 IF (llo1) zalv = rlvtt 1259 zdtdt = rg /(paph(i,k+1)-paph(i,k))/rcpd*(pmfus(i,k+1)-pmfus(i,k)+ &1260 pmfds(i,k+1)-pmfds(i,k)-rlmlt*pdpmel(i,k)-zalv*(pmful(i, &1261 k+1)-pmful(i,k)-pdmfup(i,k)-pdmfdp(i,k)))1257 zdtdt = rg / (paph(i, k + 1) - paph(i, k)) / rcpd * (pmfus(i, k + 1) - pmfus(i, k) + & 1258 pmfds(i, k + 1) - pmfds(i, k) - rlmlt * pdpmel(i, k) - zalv * (pmful(i, & 1259 k + 1) - pmful(i, k) - pdmfup(i, k) - pdmfdp(i, k))) 1262 1260 dt_con(i, k) = zdtdt 1263 zdqdt = rg /(paph(i,k+1)-paph(i,k))*(pmfuq(i,k+1)-pmfuq(i,k)+pmfdq(i,k &1264 +1)-pmfdq(i,k)+pmful(i,k+1)-pmful(i,k)-pdmfup(i,k)-pdmfdp(i,k))1261 zdqdt = rg / (paph(i, k + 1) - paph(i, k)) * (pmfuq(i, k + 1) - pmfuq(i, k) + pmfdq(i, k & 1262 + 1) - pmfdq(i, k) + pmful(i, k + 1) - pmful(i, k) - pdmfup(i, k) - pdmfdp(i, k)) 1265 1263 dq_con(i, k) = zdqdt 1266 1264 END IF … … 1271 1269 DO i = 1, klon 1272 1270 IF (ldcum(i)) THEN 1273 llo1 = (pten(i, k)-rtt) > 0.1271 llo1 = (pten(i, k) - rtt) > 0. 1274 1272 zalv = rlstt 1275 1273 IF (llo1) zalv = rlvtt 1276 zdtdt = -rg /(paph(i,k+1)-paph(i,k))/rcpd*(pmfus(i,k)+pmfds(i,k)+rlmlt* &1277 pdpmel(i,k)-zalv*(pmful(i,k)+pdmfup(i,k)+pdmfdp(i,k)))1274 zdtdt = -rg / (paph(i, k + 1) - paph(i, k)) / rcpd * (pmfus(i, k) + pmfds(i, k) + rlmlt * & 1275 pdpmel(i, k) - zalv * (pmful(i, k) + pdmfup(i, k) + pdmfdp(i, k))) 1278 1276 dt_con(i, k) = zdtdt 1279 zdqdt = -rg /(paph(i,k+1)-paph(i,k))*(pmfuq(i,k)+pmfdq(i,k)+pmful(i,k)+ &1280 pdmfup(i,k)+pdmfdp(i,k))1277 zdqdt = -rg / (paph(i, k + 1) - paph(i, k)) * (pmfuq(i, k) + pmfdq(i, k) + pmful(i, k) + & 1278 pdmfup(i, k) + pdmfdp(i, k)) 1281 1279 dq_con(i, k) = zdqdt 1282 1280 END IF 1283 1281 END DO 1284 1282 1285 1286 1283 END SUBROUTINE flxdtdq 1287 1284 SUBROUTINE flxdlfs(ptenh, pqenh, pgeoh, paph, ptu, pqu, ldcum, kcbot, kctop, & 1288 pmfub, prfl, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, kdtop, lddraf)1285 pmfub, prfl, ptd, pqd, pmfd, pmfds, pmfdq, pdmfdp, kdtop, lddraf) 1289 1286 USE dimphy 1287 USE lmdz_YOECUMF 1288 1290 1289 IMPLICIT NONE 1291 1290 … … 1307 1306 include "YOMCST.h" 1308 1307 include "YOETHF.h" 1309 include "YOECUMF.h"1310 1308 1311 1309 REAL ptenh(klon, klev) 1312 1310 REAL pqenh(klon, klev) 1313 REAL pgeoh(klon, klev), paph(klon, klev +1)1311 REAL pgeoh(klon, klev), paph(klon, klev + 1) 1314 1312 REAL ptu(klon, klev), pqu(klon, klev) 1315 1313 REAL pmfub(klon) … … 1354 1352 zqenwb(i, k) = pqenh(i, k) 1355 1353 llo2(i) = ldcum(i) .AND. prfl(i) > 0. .AND. .NOT. lddraf(i) .AND. & 1356 (k<kcbot(i) .AND. k>kctop(i))1354 (k<kcbot(i) .AND. k>kctop(i)) 1357 1355 IF (llo2(i)) is = is + 1 1358 1356 END DO … … 1360 1358 1361 1359 iCALL = 2 1362 CALL flxadjtq(paph(1, k), ztenwb(1,k), zqenwb(1,k), llo2, icall)1360 CALL flxadjtq(paph(1, k), ztenwb(1, k), zqenwb(1, k), llo2, icall) 1363 1361 1364 1362 ! ---------------------------------------------------------------------- … … 1369 1367 DO i = 1, klon 1370 1368 IF (llo2(i)) THEN 1371 zttest = 0.5 *(ptu(i,k)+ztenwb(i,k))1372 zqtest = 0.5 *(pqu(i,k)+zqenwb(i,k))1373 zbuo = zttest *(1.+retv*zqtest) - ptenh(i, k)*(1.+retv*pqenh(i,k))1369 zttest = 0.5 * (ptu(i, k) + ztenwb(i, k)) 1370 zqtest = 0.5 * (pqu(i, k) + zqenwb(i, k)) 1371 zbuo = zttest * (1. + retv * zqtest) - ptenh(i, k) * (1. + retv * pqenh(i, k)) 1374 1372 zcond(i) = pqenh(i, k) - zqenwb(i, k) 1375 zmftop = -cmfdeps *pmfub(i)1376 IF (zbuo<0. .AND. prfl(i)>10. *zmftop*zcond(i)) THEN1373 zmftop = -cmfdeps * pmfub(i) 1374 IF (zbuo<0. .AND. prfl(i)>10. * zmftop * zcond(i)) THEN 1377 1375 kdtop(i) = k 1378 1376 lddraf(i) = .TRUE. … … 1380 1378 pqd(i, k) = zqtest 1381 1379 pmfd(i, k) = zmftop 1382 pmfds(i, k) = pmfd(i, k) *(rcpd*ptd(i,k)+pgeoh(i,k))1383 pmfdq(i, k) = pmfd(i, k) *pqd(i, k)1384 pdmfdp(i, k -1) = -0.5*pmfd(i, k)*zcond(i)1385 prfl(i) = prfl(i) + pdmfdp(i, k -1)1380 pmfds(i, k) = pmfd(i, k) * (rcpd * ptd(i, k) + pgeoh(i, k)) 1381 pmfdq(i, k) = pmfd(i, k) * pqd(i, k) 1382 pdmfdp(i, k - 1) = -0.5 * pmfd(i, k) * zcond(i) 1383 prfl(i) = prfl(i) + pdmfdp(i, k - 1) 1386 1384 END IF 1387 1385 END IF 1388 1386 END DO 1389 1387 1390 290 END DO 1391 1388 290 END DO 1392 1389 1393 1390 END SUBROUTINE flxdlfs 1394 1391 SUBROUTINE flxddraf(ptenh, pqenh, pgeoh, paph, prfl, ptd, pqd, pmfd, pmfds, & 1395 pmfdq, pdmfdp, lddraf, pen_d, pde_d)1392 pmfdq, pdmfdp, lddraf, pen_d, pde_d) 1396 1393 USE dimphy 1394 USE lmdz_YOECUMF 1395 1397 1396 IMPLICIT NONE 1398 1397 … … 1414 1413 include "YOMCST.h" 1415 1414 include "YOETHF.h" 1416 include "YOECUMF.h"1417 1415 1418 1416 REAL ptenh(klon, klev), pqenh(klon, klev) 1419 REAL pgeoh(klon, klev), paph(klon, klev +1)1417 REAL pgeoh(klon, klev), paph(klon, klev + 1) 1420 1418 1421 1419 REAL ptd(klon, klev), pqd(klon, klev) … … 1443 1441 is = 0 1444 1442 DO i = 1, klon 1445 llo2(i) = lddraf(i) .AND. pmfd(i, k -1) < 0.1443 llo2(i) = lddraf(i) .AND. pmfd(i, k - 1) < 0. 1446 1444 IF (llo2(i)) is = is + 1 1447 1445 END DO … … 1450 1448 DO i = 1, klon 1451 1449 IF (llo2(i)) THEN 1452 zentr = entrdd *pmfd(i, k-1)*rd*ptenh(i, k-1)/(rg*paph(i,k-1))* &1453 (paph(i,k)-paph(i,k-1))1450 zentr = entrdd * pmfd(i, k - 1) * rd * ptenh(i, k - 1) / (rg * paph(i, k - 1)) * & 1451 (paph(i, k) - paph(i, k - 1)) 1454 1452 pen_d(i, k) = zentr 1455 1453 pde_d(i, k) = zentr … … 1462 1460 IF (llo2(i)) THEN 1463 1461 pen_d(i, k) = 0. 1464 pde_d(i, k) = pmfd(i, itopde) *(paph(i,k)-paph(i,k-1))/ &1465 (paph(i,klev+1)-paph(i,itopde))1462 pde_d(i, k) = pmfd(i, itopde) * (paph(i, k) - paph(i, k - 1)) / & 1463 (paph(i, klev + 1) - paph(i, itopde)) 1466 1464 END IF 1467 1465 END DO … … 1470 1468 DO i = 1, klon 1471 1469 IF (llo2(i)) THEN 1472 pmfd(i, k) = pmfd(i, k -1) + pen_d(i, k) - pde_d(i, k)1473 zseen = (rcpd *ptenh(i,k-1)+pgeoh(i,k-1))*pen_d(i, k)1474 zqeen = pqenh(i, k -1)*pen_d(i, k)1475 zsdde = (rcpd *ptd(i,k-1)+pgeoh(i,k-1))*pde_d(i, k)1476 zqdde = pqd(i, k -1)*pde_d(i, k)1477 zmfdsk = pmfds(i, k -1) + zseen - zsdde1478 zmfdqk = pmfdq(i, k -1) + zqeen - zqdde1479 pqd(i, k) = zmfdqk *(1./min(-cmfcmin,pmfd(i,k)))1480 ptd(i, k) = (zmfdsk *(1./min(-cmfcmin,pmfd(i,k)))-pgeoh(i,k))/rcpd1481 ptd(i, k) = min(400., ptd(i, k))1482 ptd(i, k) = max(100., ptd(i, k))1470 pmfd(i, k) = pmfd(i, k - 1) + pen_d(i, k) - pde_d(i, k) 1471 zseen = (rcpd * ptenh(i, k - 1) + pgeoh(i, k - 1)) * pen_d(i, k) 1472 zqeen = pqenh(i, k - 1) * pen_d(i, k) 1473 zsdde = (rcpd * ptd(i, k - 1) + pgeoh(i, k - 1)) * pde_d(i, k) 1474 zqdde = pqd(i, k - 1) * pde_d(i, k) 1475 zmfdsk = pmfds(i, k - 1) + zseen - zsdde 1476 zmfdqk = pmfdq(i, k - 1) + zqeen - zqdde 1477 pqd(i, k) = zmfdqk * (1. / min(-cmfcmin, pmfd(i, k))) 1478 ptd(i, k) = (zmfdsk * (1. / min(-cmfcmin, pmfd(i, k))) - pgeoh(i, k)) / rcpd 1479 ptd(i, k) = min(400., ptd(i, k)) 1480 ptd(i, k) = max(100., ptd(i, k)) 1483 1481 zcond(i) = pqd(i, k) 1484 1482 END IF … … 1486 1484 1487 1485 iCALL = 2 1488 CALL flxadjtq(paph(1, k), ptd(1,k), pqd(1,k), llo2, icall)1486 CALL flxadjtq(paph(1, k), ptd(1, k), pqd(1, k), llo2, icall) 1489 1487 1490 1488 DO i = 1, klon 1491 1489 IF (llo2(i)) THEN 1492 1490 zcond(i) = zcond(i) - pqd(i, k) 1493 zbuo = ptd(i, k) *(1.+retv*pqd(i,k)) - ptenh(i, k)*(1.+retv*pqenh(i,k) &1494 )1495 llo1 = zbuo < 0. .AND. (prfl(i) -pmfd(i,k)*zcond(i)>0.)1491 zbuo = ptd(i, k) * (1. + retv * pqd(i, k)) - ptenh(i, k) * (1. + retv * pqenh(i, k) & 1492 ) 1493 llo1 = zbuo < 0. .AND. (prfl(i) - pmfd(i, k) * zcond(i)>0.) 1496 1494 IF (.NOT. llo1) pmfd(i, k) = 0.0 1497 pmfds(i, k) = (rcpd *ptd(i,k)+pgeoh(i,k))*pmfd(i, k)1498 pmfdq(i, k) = pqd(i, k) *pmfd(i, k)1499 zdmfdp = -pmfd(i, k) *zcond(i)1500 pdmfdp(i, k -1) = zdmfdp1495 pmfds(i, k) = (rcpd * ptd(i, k) + pgeoh(i, k)) * pmfd(i, k) 1496 pmfdq(i, k) = pqd(i, k) * pmfd(i, k) 1497 zdmfdp = -pmfd(i, k) * zcond(i) 1498 pdmfdp(i, k - 1) = zdmfdp 1501 1499 prfl(i) = prfl(i) + zdmfdp 1502 1500 END IF 1503 1501 END DO 1504 1502 1505 180 END DO1503 180 END DO 1506 1504 1507 1505 END SUBROUTINE flxddraf … … 1530 1528 include "FCTTRE.h" 1531 1529 1532 z5alvcp = r5les*rlvtt/rcpd 1533 z5alscp = r5ies*rlstt/rcpd 1534 zalvdcp = rlvtt/rcpd 1535 zalsdcp = rlstt/rcpd 1536 1530 z5alvcp = r5les * rlvtt / rcpd 1531 z5alscp = r5ies * rlstt / rcpd 1532 zalvdcp = rlvtt / rcpd 1533 zalsdcp = rlstt / rcpd 1537 1534 1538 1535 DO i = 1, klon … … 1542 1539 DO i = 1, klon 1543 1540 IF (ldflag(i)) THEN 1544 zdelta = max(0., sign(1., rtt-pt(i)))1545 zcvm5 = z5alvcp *(1.-zdelta) + zdelta*z5alscp1546 zldcp = zalvdcp *(1.-zdelta) + zdelta*zalsdcp1547 zqsat = r2es *foeew(pt(i), zdelta)/pp(i)1541 zdelta = max(0., sign(1., rtt - pt(i))) 1542 zcvm5 = z5alvcp * (1. - zdelta) + zdelta * z5alscp 1543 zldcp = zalvdcp * (1. - zdelta) + zdelta * zalsdcp 1544 zqsat = r2es * foeew(pt(i), zdelta) / pp(i) 1548 1545 zqsat = min(0.5, zqsat) 1549 zcor = 1. /(1.-retv*zqsat)1550 zqsat = zqsat *zcor1551 zcond(i) = (pq(i) -zqsat)/(1.+foede(pt(i),zdelta,zcvm5,zqsat,zcor))1546 zcor = 1. / (1. - retv * zqsat) 1547 zqsat = zqsat * zcor 1548 zcond(i) = (pq(i) - zqsat) / (1. + foede(pt(i), zdelta, zcvm5, zqsat, zcor)) 1552 1549 IF (kcall==1) zcond(i) = max(zcond(i), 0.) 1553 1550 IF (kcall==2) zcond(i) = min(zcond(i), 0.) 1554 pt(i) = pt(i) + zldcp *zcond(i)1551 pt(i) = pt(i) + zldcp * zcond(i) 1555 1552 pq(i) = pq(i) - zcond(i) 1556 1553 END IF … … 1565 1562 DO i = 1, klon 1566 1563 IF (ldflag(i) .AND. zcond(i)/=0.) THEN 1567 zdelta = max(0., sign(1., rtt-pt(i)))1568 zcvm5 = z5alvcp *(1.-zdelta) + zdelta*z5alscp1569 zldcp = zalvdcp *(1.-zdelta) + zdelta*zalsdcp1570 zqsat = r2es *foeew(pt(i), zdelta)/pp(i)1564 zdelta = max(0., sign(1., rtt - pt(i))) 1565 zcvm5 = z5alvcp * (1. - zdelta) + zdelta * z5alscp 1566 zldcp = zalvdcp * (1. - zdelta) + zdelta * zalsdcp 1567 zqsat = r2es * foeew(pt(i), zdelta) / pp(i) 1571 1568 zqsat = min(0.5, zqsat) 1572 zcor = 1. /(1.-retv*zqsat)1573 zqsat = zqsat *zcor1574 zcond1 = (pq(i) -zqsat)/(1.+foede(pt(i),zdelta,zcvm5,zqsat,zcor))1575 pt(i) = pt(i) + zldcp *zcond11569 zcor = 1. / (1. - retv * zqsat) 1570 zqsat = zqsat * zcor 1571 zcond1 = (pq(i) - zqsat) / (1. + foede(pt(i), zdelta, zcvm5, zqsat, zcor)) 1572 pt(i) = pt(i) + zldcp * zcond1 1576 1573 pq(i) = pq(i) - zcond1 1577 1574 END IF 1578 1575 END DO 1579 1576 1580 230 CONTINUE1577 230 CONTINUE 1581 1578 1582 1579 END SUBROUTINE flxadjtq 1583 1580 SUBROUTINE flxsetup 1581 USE lmdz_YOECUMF 1582 1584 1583 IMPLICIT NONE 1585 1584 1586 1585 ! THIS ROUTINE DEFINES DISPOSABLE PARAMETERS FOR MASSFLUX SCHEME 1587 1588 include "YOECUMF.h"1589 1586 1590 1587 entrpen = 1.0E-4 ! ENTRAINMENT RATE FOR PENETRATIVE CONVECTION … … 1605 1602 lmfdudv = .TRUE. 1606 1603 1607 1608 1604 END SUBROUTINE flxsetup
Note: See TracChangeset
for help on using the changeset viewer.