Changeset 3274
- Timestamp:
- Mar 15, 2018, 8:07:03 PM (7 years ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/conf_phys_m.F90
r3137 r3274 414 414 ! - flag_aerosol=5 => dust only 415 415 ! - flag_aerosol=6 => all aerosol 416 ! - flag_aerosol=7 => natural aerosol + MACv2SP 416 417 417 418 flag_aerosol_omp = 0 … … 2448 2449 2449 2450 ! Flag_aerosol cannot be to zero if we are in coupled mode for aerosol 2450 IF (aerosol_couple .AND. flag_aerosol . eq. 0 ) THEN2451 IF (aerosol_couple .AND. flag_aerosol .EQ. 0 ) THEN 2451 2452 CALL abort_physic('conf_phys', 'flag_aerosol cannot be to zero if aerosol_couple=y ', 1) 2452 2453 ENDIF 2453 2454 2454 2455 ! flag_aerosol need to be different to zero if ok_cdnc is activated 2455 IF (ok_cdnc .AND. flag_aerosol . eq. 0) THEN2456 IF (ok_cdnc .AND. flag_aerosol .EQ. 0) THEN 2456 2457 CALL abort_physic('conf_phys', 'flag_aerosol cannot be to zero if ok_cdnc is activated ', 1) 2457 2458 ENDIF … … 2460 2461 IF (ok_aie .AND. .NOT. ok_cdnc) THEN 2461 2462 CALL abort_physic('conf_phys', 'ok_cdnc must be set to y if ok_aie is activated',1) 2463 ENDIF 2464 2465 ! flag_aerosol=7 => MACv2SP climatology 2466 IF (flag_aerosol.EQ.7.AND. iflag_rrtm.NE.1) THEN 2467 CALL abort_physic('conf_phys', 'flag_aerosol=7 (MACv2SP) can only be activated with RRTM',1) 2468 ENDIF 2469 IF (flag_aerosol.EQ.7.AND. NSW.NE.6) THEN 2470 CALL abort_physic('conf_phys', 'flag_aerosol=7 (MACv2SP) can only be activated with NSW=6',1) 2462 2471 ENDIF 2463 2472 -
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 -
LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
r3257 r3274 151 151 REAL, SAVE, ALLOCATABLE :: scdnc(:,:) 152 152 !$OMP THREADPRIVATE(scdnc) 153 REAL, SAVE, ALLOCATABLE :: dNovrN(:) 154 !$OMP THREADPRIVATE(dNovrN) 153 155 REAL, SAVE, ALLOCATABLE :: cldncl(:) 154 156 !$OMP THREADPRIVATE(cldncl) … … 608 610 ALLOCATE(tau3d_aero(klon,klev,nwave,naero_tot)) 609 611 ALLOCATE(scdnc(klon, klev)) 612 ALLOCATE(dNovrN(klon)) 610 613 ALLOCATE(cldncl(klon)) 611 614 ALLOCATE(reffclwtop(klon)) … … 899 902 DEALLOCATE(tau3d_aero) 900 903 DEALLOCATE(scdnc) 904 DEALLOCATE(dNovrN) 901 905 DEALLOCATE(cldncl) 902 906 DEALLOCATE(reffclwtop) -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r3258 r3274 3582 3582 tausum_aero, drytausum_aero, tau3d_aero) 3583 3583 #endif 3584 3585 IF (flag_aerosol .EQ. 7) THEN 3586 CALL MACv2SP(pphis,pplay,paprs,longitude_deg,latitude_deg, & 3587 tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm) 3588 ENDIF 3589 3584 3590 ! 3585 3591 ELSE IF (NSW.EQ.2) THEN … … 3706 3712 #endif 3707 3713 ENDIF 3708 CALL newmicro ( ok_cdnc, bl95_b0, bl95_b1, &3714 CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, & 3709 3715 paprs, pplay, t_seri, cldliq, cldfra, & 3710 3716 cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
Note: See TracChangeset
for help on using the changeset viewer.