Changeset 3356 for LMDZ6/branches/DYNAMICO-conv/libf/phylmd/newmicro.F90
- Timestamp:
- Jun 29, 2018, 12:31:11 PM (6 years ago)
- Location:
- LMDZ6/branches/DYNAMICO-conv
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/DYNAMICO-conv
- Property svn:mergeinfo changed
-
LMDZ6/branches/DYNAMICO-conv/libf/phylmd/newmicro.F90
r2596 r3356 1 1 ! $Id$ 2 2 3 4 5 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, & 6 4 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, & 7 5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, re, fl, reliq, reice, & … … 10 8 USE dimphy 11 9 USE phys_local_var_mod, ONLY: scdnc, cldncl, reffclwtop, lcc, reffclws, & 12 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra 10 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 11 zfice, dNovrN 13 12 USE phys_state_var_mod, ONLY: rnebcon, clwcon 14 13 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) 14 USE ioipsl_getin_p_mod, ONLY : getin_p 15 USE print_control_mod, ONLY: lunout 16 17 15 18 IMPLICIT NONE 16 19 ! ====================================================================== … … 139 142 ! within the grid cell) 140 143 144 INTEGER flag_aerosol 141 145 LOGICAL ok_cdnc 142 146 REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula … … 152 156 REAL zrho(klon, klev) !--rho pour la couche 153 157 REAL dh(klon, klev) !--dz pour la couche 154 REAL zfice(klon, klev)155 158 REAL rad_chaud(klon, klev) !--rayon pour les nuages chauds 156 159 REAL rad_chaud_pi(klon, klev) !--rayon pour les nuages chauds pre-industriels … … 162 165 REAL reliq_pi(klon, klev), reice_pi(klon, klev) 163 166 167 REAL,SAVE :: cdnc_min=-1. 168 REAL,SAVE :: cdnc_min_m3 169 !$OMP THREADPRIVATE(cdnc_min,cdnc_min_m3) 170 REAL,SAVE :: cdnc_max=-1. 171 REAL,SAVE :: cdnc_max_m3 172 !$OMP THREADPRIVATE(cdnc_max,cdnc_max_m3) 173 164 174 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 165 175 ! FH : 2011/05/24 … … 173 183 ! Pour retrouver les résultats numériques de la version d'origine, 174 184 ! on impose 0.71 quand on est proche de 0.71 185 186 if (first) THEN 187 call getin_p('cdnc_min',cdnc_min) 188 cdnc_min_m3=cdnc_min*1.E6 189 IF (cdnc_min_m3<0.) cdnc_min_m3=20.E6 ! astuce pour retrocompatibilite 190 write(lunout,*)'cdnc_min=', cdnc_min_m3/1.E6 191 call getin_p('cdnc_max',cdnc_max) 192 cdnc_max_m3=cdnc_max*1.E6 193 IF (cdnc_max_m3<0.) cdnc_max_m3=1000.E6 ! astuce pour retrocompatibilite 194 write(lunout,*)'cdnc_max=', cdnc_max_m3/1.E6 195 ENDIF 175 196 176 197 d_rei_dt = (rei_max-rei_min)/81.4 … … 204 225 xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k) 205 226 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k) 206 END 207 END 227 ENDDO 228 ENDDO 208 229 ELSE ! of IF (iflag_t_glace.EQ.0) 209 230 DO k = 1, klev … … 222 243 xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k) 223 244 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k) 224 END 225 END 245 ENDDO 246 ENDDO 226 247 ENDIF 227 248 … … 232 253 DO k = 1, klev 233 254 DO i = 1, klon 234 235 255 ! Formula "D" of Boucher and Lohmann, Tellus, 1995 236 256 ! Cloud droplet number concentration (CDNC) is restricted 237 257 ! to be within [20, 1000 cm^3] 238 258 239 ! --present-day case240 cdnc(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero(i,k), &241 1.E-4))/log(10.))*1.E6 !-m-3242 cdnc(i, k) = min(1000.E6, max(20.E6,cdnc(i,k)))243 244 259 ! --pre-industrial case 245 260 cdnc_pi(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero_pi(i,k), & 246 261 1.E-4))/log(10.))*1.E6 !-m-3 247 cdnc_pi(i, k) = min(1000.E6, max(20.E6,cdnc_pi(i,k))) 262 cdnc_pi(i, k) = min(cdnc_max_m3, max(cdnc_min_m3,cdnc_pi(i,k))) 263 264 ENDDO 265 ENDDO 266 267 !--flag_aerosol=7 => MACv2SP climatology 268 !--in this case there is an enhancement factor 269 IF (flag_aerosol .EQ. 7) THEN 270 271 !--present-day 272 DO k = 1, klev 273 DO i = 1, klon 274 cdnc(i, k) = cdnc_pi(i,k)*dNovrN(i) 275 ENDDO 276 ENDDO 277 278 !--standard case 279 ELSE 280 281 DO k = 1, klev 282 DO i = 1, klon 283 284 ! Formula "D" of Boucher and Lohmann, Tellus, 1995 285 ! Cloud droplet number concentration (CDNC) is restricted 286 ! to be within [20, 1000 cm^3] 287 288 ! --present-day case 289 cdnc(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero(i,k), & 290 1.E-4))/log(10.))*1.E6 !-m-3 291 cdnc(i, k) = min(cdnc_max_m3, max(cdnc_min_m3,cdnc(i,k))) 292 293 ENDDO 294 ENDDO 295 296 ENDIF !--flag_aerosol 297 298 !--computing cloud droplet size 299 DO k = 1, klev 300 DO i = 1, klon 248 301 249 302 ! --present-day case … … 280 333 zfiwp_var*(3.448E-03+2.431/rei) 281 334 282 END 283 284 END 285 END 335 ENDIF 336 337 ENDDO 338 ENDDO 286 339 287 340 ELSE !--not ok_cdnc … … 293 346 rad_chaud(i, k) = rad_chau2 294 347 rad_chaud_pi(i, k) = rad_chau2 295 END 296 END 348 ENDDO 349 ENDDO 297 350 DO k = min(3, klev) + 1, klev 298 351 DO i = 1, klon 299 352 rad_chaud(i, k) = rad_chau1 300 353 rad_chaud_pi(i, k) = rad_chau1 301 END 302 END 303 304 END 354 ENDDO 355 ENDDO 356 357 ENDIF !--ok_cdnc 305 358 306 359 ! --computation of cloud optical depth and emissivity … … 377 430 pclemi(i, k) = 1.0 - exp(-coef_chau*zflwp_var-df*k_ice*zfiwp_var) 378 431 379 END 432 ENDIF 380 433 381 434 reice(i, k) = rei … … 384 437 xfiwp(i) = xfiwp(i) + xfiwc(i, k)*rhodz(i, k) 385 438 386 END 387 END 439 ENDDO 440 ENDDO 388 441 389 442 ! --if cloud droplet radius is fixed, then pcldtaupi=pcltau … … 394 447 pcldtaupi(i, k) = pcltau(i, k) 395 448 reice_pi(i, k) = reice(i, k) 396 END 397 END 398 END 449 ENDDO 450 ENDDO 451 ENDIF 399 452 400 453 DO k = 1, klev … … 403 456 reliq_pi(i, k) = rad_chaud_pi(i, k) 404 457 reice_pi(i, k) = reice(i, k) 405 END 406 END 458 ENDDO 459 ENDDO 407 460 408 461 ! COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS … … 420 473 pcl(i) = 1.0 421 474 pctlwp(i) = 0.0 422 END 475 ENDDO 423 476 424 477 ! --calculation of liquid water path … … 427 480 DO i = 1, klon 428 481 pctlwp(i) = pctlwp(i) + pqlwp(i, k)*rhodz(i, k) 429 END 430 END 482 ENDDO 483 ENDDO 431 484 432 485 ! --calculation of cloud properties with cloud overlap … … 450 503 (i),kind=8),1.-zepsec)) 451 504 zcloudl(i) = pclc(i, k) 452 END 505 ENDIF 453 506 zcloud(i) = pclc(i, k) 454 END 455 END 507 ENDDO 508 ENDDO 456 509 ELSE IF (novlp==2) THEN 457 510 DO k = klev, 1, -1 … … 465 518 ELSE IF (paprs(i,k)>=prlmc) THEN 466 519 pcl(i) = min(pclc(i,k), pcl(i)) 467 END 468 END 469 END 520 ENDIF 521 ENDDO 522 ENDDO 470 523 ELSE IF (novlp==3) THEN 471 524 DO k = klev, 1, -1 … … 479 532 ELSE IF (paprs(i,k)>=prlmc) THEN 480 533 pcl(i) = pcl(i)*(1.0-pclc(i,k)) 481 END 482 END 483 END 484 END 534 ENDIF 535 ENDDO 536 ENDDO 537 ENDIF 485 538 486 539 DO i = 1, klon … … 488 541 pcm(i) = 1. - pcm(i) 489 542 pcl(i) = 1. - pcl(i) 490 END 543 ENDDO 491 544 492 545 ! ======================================================== … … 509 562 ELSE 510 563 lcc3d(i, k) = pclc(i, k)*phase3d(i, k) 511 END 564 ENDIF 512 565 scdnc(i, k) = lcc3d(i, k)*cdnc(i, k) ! m-3 513 END 514 END 566 ENDDO 567 ENDDO 515 568 516 569 DO i = 1, klon … … 520 573 IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. 521 574 IF (novlp.EQ.2) tcc(i) = 0. 522 END 575 ENDDO 523 576 524 577 DO i = 1, klon … … 534 587 WRITE (*, *) 'Hypothese de recouvrement: MAXIMUM' 535 588 first = .FALSE. 536 END 589 ENDIF 537 590 flag_max = -1. 538 591 ftmp(i) = max(tcc(i), pclc(i,k)) 539 END 592 ENDIF 540 593 541 594 IF (novlp.EQ.3) THEN … … 543 596 WRITE (*, *) 'Hypothese de recouvrement: RANDOM' 544 597 first = .FALSE. 545 END 598 ENDIF 546 599 flag_max = 1. 547 600 ftmp(i) = tcc(i)*(1-pclc(i,k)) 548 END 601 ENDIF 549 602 550 603 IF (novlp.EQ.1) THEN … … 554 607 & RANDOM' 555 608 first = .FALSE. 556 END 609 ENDIF 557 610 flag_max = 1. 558 611 ftmp(i) = tcc(i)*(1.-max(pclc(i,k),pclc(i,k+1)))/(1.-min(pclc(i, & 559 612 k+1),1.-thres_neb)) 560 END 613 ENDIF 561 614 ! Effective radius of cloud droplet at top of cloud (m) 562 615 reffclwtop(i) = reffclwtop(i) + rad_chaud(i, k)*1.0E-06*phase3d(i, & … … 570 623 tcc(i) = ftmp(i) 571 624 572 END 573 END 625 ENDIF ! is there a visible, not-too-small cloud? 626 ENDDO ! loop over k 574 627 575 628 IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. - tcc(i) 576 629 577 END 630 ENDDO ! loop over i 578 631 579 632 ! ! Convective and Stratiform Cloud Droplet Effective Radius (REFFCLWC … … 586 639 lcc3dstra(i, k) = lcc3dstra(i, k) - lcc3dcon(i, k) ! eau liquide stratiforme 587 640 lcc3dstra(i, k) = max(lcc3dstra(i,k), 0.0) 641 !FC pour la glace (CAUSES) 642 icc3dcon(i, k) = rnebcon(i, k)*(1-phase3d(i, k))*clwcon(i, k) ! glace convective 643 icc3dstra(i, k)= pclc(i, k)*pqlwp(i, k)*(1-phase3d(i, k)) 644 icc3dstra(i, k) = icc3dstra(i, k) - icc3dcon(i, k) ! glace stratiforme 645 icc3dstra(i, k) = max( icc3dstra(i, k), 0.0) 646 !FC (CAUSES) 647 588 648 ! Compute cloud droplet radius as above in meter 589 649 radius = 1.1*((pqlwp(i,k)*pplay(i,k)/(rd*t(i,k)))/(4./3*rpi*1000.* & … … 596 656 reffclws(i, k) = radius 597 657 reffclws(i, k) = reffclws(i, k)*lcc3dstra(i, k) 598 END 599 END 658 ENDDO !klev 659 ENDDO !klon 600 660 601 661 ! Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D … … 609 669 lcc_integrat(i) = lcc_integrat(i) + lcc3d(i, k)*dh(i, k) 610 670 height(i) = height(i) + dh(i, k) 611 END 671 ENDDO ! klev 612 672 lcc_integrat(i) = lcc_integrat(i)/height(i) 613 673 IF (lcc_integrat(i)<=1.0E-03) THEN … … 615 675 ELSE 616 676 cldnvi(i) = cldnvi(i)*lcc(i)/lcc_integrat(i) 617 END 618 END 677 ENDIF 678 ENDDO ! klon 619 679 620 680 DO i = 1, klon … … 626 686 IF (lcc3dcon(i,k)<=0.0) lcc3dcon(i, k) = 0.0 627 687 IF (lcc3dstra(i,k)<=0.0) lcc3dstra(i, k) = 0.0 628 END DO 688 !FC (CAUSES) 689 IF (icc3dcon(i,k)<=0.0) icc3dcon(i, k) = 0.0 690 IF (icc3dstra(i,k)<=0.0) icc3dstra(i, k) = 0.0 691 !FC (CAUSES) 692 ENDDO 629 693 IF (reffclwtop(i)<=0.0) reffclwtop(i) = 0.0 630 694 IF (cldncl(i)<=0.0) cldncl(i) = 0.0 631 695 IF (cldnvi(i)<=0.0) cldnvi(i) = 0.0 632 696 IF (lcc(i)<=0.0) lcc(i) = 0.0 633 END DO 634 635 END IF !ok_cdnc 697 ENDDO 698 699 ENDIF !ok_cdnc 700 701 first=.false. !to be sure 636 702 637 703 RETURN
Note: See TracChangeset
for help on using the changeset viewer.