Changeset 3274 for LMDZ6/trunk/libf/phylmd/newmicro.F90
- Timestamp:
- Mar 15, 2018, 8:07:03 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/newmicro.F90
r3265 r3274 1 1 ! $Id$ 2 2 3 SUBROUTINE newmicro( ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, pclc, &3 SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, pclc, & 4 4 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, & 5 5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, re, fl, reliq, reice, & … … 8 8 USE dimphy 9 9 USE phys_local_var_mod, ONLY: scdnc, cldncl, reffclwtop, lcc, reffclws, & 10 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, zfice 10 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 11 zfice, dNovrN 11 12 USE phys_state_var_mod, ONLY: rnebcon, clwcon 12 13 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) … … 141 142 ! within the grid cell) 142 143 144 INTEGER flag_aerosol 143 145 LOGICAL ok_cdnc 144 146 REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula … … 216 218 xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k) 217 219 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k) 218 END 219 END 220 ENDDO 221 ENDDO 220 222 ELSE ! of IF (iflag_t_glace.EQ.0) 221 223 DO k = 1, klev … … 234 236 xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k) 235 237 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k) 236 END 237 END 238 ENDDO 239 ENDDO 238 240 ENDIF 239 241 … … 244 246 DO k = 1, klev 245 247 DO i = 1, klon 246 247 248 ! Formula "D" of Boucher and Lohmann, Tellus, 1995 248 249 ! Cloud droplet number concentration (CDNC) is restricted 249 250 ! to be within [20, 1000 cm^3] 250 251 ! --present-day case252 cdnc(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero(i,k), &253 1.E-4))/log(10.))*1.E6 !-m-3254 cdnc(i, k) = min(1000.E6, max(cdnc_min_m3,cdnc(i,k)))255 251 256 252 ! --pre-industrial case … … 258 254 1.E-4))/log(10.))*1.E6 !-m-3 259 255 cdnc_pi(i, k) = min(1000.E6, max(cdnc_min_m3,cdnc_pi(i,k))) 256 257 ENDDO 258 ENDDO 259 260 !--flag_aerosol=7 => MACv2SP climatology 261 !--in this case there is an enhancement factor 262 IF (flag_aerosol .EQ. 7) THEN 263 264 !--present-day 265 DO k = 1, klev 266 DO i = 1, klon 267 cdnc(i, k) = cdnc_pi(i,k)*dNovrN(i) 268 ENDDO 269 ENDDO 270 271 !--standard case 272 ELSE 273 274 DO k = 1, klev 275 DO i = 1, klon 276 277 ! Formula "D" of Boucher and Lohmann, Tellus, 1995 278 ! Cloud droplet number concentration (CDNC) is restricted 279 ! to be within [20, 1000 cm^3] 280 281 ! --present-day case 282 cdnc(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero(i,k), & 283 1.E-4))/log(10.))*1.E6 !-m-3 284 cdnc(i, k) = min(1000.E6, max(cdnc_min_m3,cdnc(i,k))) 285 286 ENDDO 287 ENDDO 288 289 ENDIF !--flag_aerosol 290 291 !--computing cloud droplet size 292 DO k = 1, klev 293 DO i = 1, klon 260 294 261 295 ! --present-day case … … 292 326 zfiwp_var*(3.448E-03+2.431/rei) 293 327 294 END 295 296 END 297 END 328 ENDIF 329 330 ENDDO 331 ENDDO 298 332 299 333 ELSE !--not ok_cdnc … … 305 339 rad_chaud(i, k) = rad_chau2 306 340 rad_chaud_pi(i, k) = rad_chau2 307 END 308 END 341 ENDDO 342 ENDDO 309 343 DO k = min(3, klev) + 1, klev 310 344 DO i = 1, klon 311 345 rad_chaud(i, k) = rad_chau1 312 346 rad_chaud_pi(i, k) = rad_chau1 313 END 314 END 315 316 END 347 ENDDO 348 ENDDO 349 350 ENDIF !--ok_cdnc 317 351 318 352 ! --computation of cloud optical depth and emissivity … … 389 423 pclemi(i, k) = 1.0 - exp(-coef_chau*zflwp_var-df*k_ice*zfiwp_var) 390 424 391 END 425 ENDIF 392 426 393 427 reice(i, k) = rei … … 396 430 xfiwp(i) = xfiwp(i) + xfiwc(i, k)*rhodz(i, k) 397 431 398 END 399 END 432 ENDDO 433 ENDDO 400 434 401 435 ! --if cloud droplet radius is fixed, then pcldtaupi=pcltau … … 406 440 pcldtaupi(i, k) = pcltau(i, k) 407 441 reice_pi(i, k) = reice(i, k) 408 END 409 END 410 END 442 ENDDO 443 ENDDO 444 ENDIF 411 445 412 446 DO k = 1, klev … … 415 449 reliq_pi(i, k) = rad_chaud_pi(i, k) 416 450 reice_pi(i, k) = reice(i, k) 417 END 418 END 451 ENDDO 452 ENDDO 419 453 420 454 ! COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS … … 432 466 pcl(i) = 1.0 433 467 pctlwp(i) = 0.0 434 END 468 ENDDO 435 469 436 470 ! --calculation of liquid water path … … 439 473 DO i = 1, klon 440 474 pctlwp(i) = pctlwp(i) + pqlwp(i, k)*rhodz(i, k) 441 END 442 END 475 ENDDO 476 ENDDO 443 477 444 478 ! --calculation of cloud properties with cloud overlap … … 462 496 (i),kind=8),1.-zepsec)) 463 497 zcloudl(i) = pclc(i, k) 464 END 498 ENDIF 465 499 zcloud(i) = pclc(i, k) 466 END 467 END 500 ENDDO 501 ENDDO 468 502 ELSE IF (novlp==2) THEN 469 503 DO k = klev, 1, -1 … … 477 511 ELSE IF (paprs(i,k)>=prlmc) THEN 478 512 pcl(i) = min(pclc(i,k), pcl(i)) 479 END 480 END 481 END 513 ENDIF 514 ENDDO 515 ENDDO 482 516 ELSE IF (novlp==3) THEN 483 517 DO k = klev, 1, -1 … … 491 525 ELSE IF (paprs(i,k)>=prlmc) THEN 492 526 pcl(i) = pcl(i)*(1.0-pclc(i,k)) 493 END 494 END 495 END 496 END 527 ENDIF 528 ENDDO 529 ENDDO 530 ENDIF 497 531 498 532 DO i = 1, klon … … 500 534 pcm(i) = 1. - pcm(i) 501 535 pcl(i) = 1. - pcl(i) 502 END 536 ENDDO 503 537 504 538 ! ======================================================== … … 521 555 ELSE 522 556 lcc3d(i, k) = pclc(i, k)*phase3d(i, k) 523 END 557 ENDIF 524 558 scdnc(i, k) = lcc3d(i, k)*cdnc(i, k) ! m-3 525 END 526 END 559 ENDDO 560 ENDDO 527 561 528 562 DO i = 1, klon … … 532 566 IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. 533 567 IF (novlp.EQ.2) tcc(i) = 0. 534 END 568 ENDDO 535 569 536 570 DO i = 1, klon … … 546 580 WRITE (*, *) 'Hypothese de recouvrement: MAXIMUM' 547 581 first = .FALSE. 548 END 582 ENDIF 549 583 flag_max = -1. 550 584 ftmp(i) = max(tcc(i), pclc(i,k)) 551 END 585 ENDIF 552 586 553 587 IF (novlp.EQ.3) THEN … … 555 589 WRITE (*, *) 'Hypothese de recouvrement: RANDOM' 556 590 first = .FALSE. 557 END 591 ENDIF 558 592 flag_max = 1. 559 593 ftmp(i) = tcc(i)*(1-pclc(i,k)) 560 END 594 ENDIF 561 595 562 596 IF (novlp.EQ.1) THEN … … 566 600 & RANDOM' 567 601 first = .FALSE. 568 END 602 ENDIF 569 603 flag_max = 1. 570 604 ftmp(i) = tcc(i)*(1.-max(pclc(i,k),pclc(i,k+1)))/(1.-min(pclc(i, & 571 605 k+1),1.-thres_neb)) 572 END 606 ENDIF 573 607 ! Effective radius of cloud droplet at top of cloud (m) 574 608 reffclwtop(i) = reffclwtop(i) + rad_chaud(i, k)*1.0E-06*phase3d(i, & … … 582 616 tcc(i) = ftmp(i) 583 617 584 END 585 END 618 ENDIF ! is there a visible, not-too-small cloud? 619 ENDDO ! loop over k 586 620 587 621 IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. - tcc(i) 588 622 589 END 623 ENDDO ! loop over i 590 624 591 625 ! ! Convective and Stratiform Cloud Droplet Effective Radius (REFFCLWC … … 615 649 reffclws(i, k) = radius 616 650 reffclws(i, k) = reffclws(i, k)*lcc3dstra(i, k) 617 END 618 END 651 ENDDO !klev 652 ENDDO !klon 619 653 620 654 ! Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D … … 628 662 lcc_integrat(i) = lcc_integrat(i) + lcc3d(i, k)*dh(i, k) 629 663 height(i) = height(i) + dh(i, k) 630 END 664 ENDDO ! klev 631 665 lcc_integrat(i) = lcc_integrat(i)/height(i) 632 666 IF (lcc_integrat(i)<=1.0E-03) THEN … … 634 668 ELSE 635 669 cldnvi(i) = cldnvi(i)*lcc(i)/lcc_integrat(i) 636 END 637 END 670 ENDIF 671 ENDDO ! klon 638 672 639 673 DO i = 1, klon … … 649 683 IF (icc3dstra(i,k)<=0.0) icc3dstra(i, k) = 0.0 650 684 !FC (CAUSES) 651 END 685 ENDDO 652 686 IF (reffclwtop(i)<=0.0) reffclwtop(i) = 0.0 653 687 IF (cldncl(i)<=0.0) cldncl(i) = 0.0 654 688 IF (cldnvi(i)<=0.0) cldnvi(i) = 0.0 655 689 IF (lcc(i)<=0.0) lcc(i) = 0.0 656 END 657 658 END 690 ENDDO 691 692 ENDIF !ok_cdnc 659 693 660 694 first=.false. !to be sure
Note: See TracChangeset
for help on using the changeset viewer.