Changeset 3411 for LMDZ6/branches/DYNAMICO-conv/libf/phylmd/newmicro.F90
- Timestamp:
- Nov 5, 2018, 3:24:59 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/trunk removed
- Property svn:mergeinfo changed
-
LMDZ6/branches/DYNAMICO-conv/libf/phylmd/newmicro.F90
r3356 r3411 1 1 ! $Id$ 2 2 3 SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, pclc, & 3 4 5 SUBROUTINE newmicro(ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, pclc, & 4 6 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, & 5 7 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, re, fl, reliq, reice, & … … 8 10 USE dimphy 9 11 USE phys_local_var_mod, ONLY: scdnc, cldncl, reffclwtop, lcc, reffclws, & 10 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 11 zfice, dNovrN 12 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra 12 13 USE phys_state_var_mod, ONLY: rnebcon, clwcon 13 14 USE icefrac_lsc_mod ! computes ice fraction (JBM 3/14) 14 USE ioipsl_getin_p_mod, ONLY : getin_p15 USE print_control_mod, ONLY: lunout16 17 18 15 IMPLICIT NONE 19 16 ! ====================================================================== … … 142 139 ! within the grid cell) 143 140 144 INTEGER flag_aerosol145 141 LOGICAL ok_cdnc 146 142 REAL bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula … … 156 152 REAL zrho(klon, klev) !--rho pour la couche 157 153 REAL dh(klon, klev) !--dz pour la couche 154 REAL zfice(klon, klev) 158 155 REAL rad_chaud(klon, klev) !--rayon pour les nuages chauds 159 156 REAL rad_chaud_pi(klon, klev) !--rayon pour les nuages chauds pre-industriels … … 165 162 REAL reliq_pi(klon, klev), reice_pi(klon, klev) 166 163 167 REAL,SAVE :: cdnc_min=-1.168 REAL,SAVE :: cdnc_min_m3169 !$OMP THREADPRIVATE(cdnc_min,cdnc_min_m3)170 REAL,SAVE :: cdnc_max=-1.171 REAL,SAVE :: cdnc_max_m3172 !$OMP THREADPRIVATE(cdnc_max,cdnc_max_m3)173 174 164 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 175 165 ! FH : 2011/05/24 … … 183 173 ! Pour retrouver les résultats numériques de la version d'origine, 184 174 ! on impose 0.71 quand on est proche de 0.71 185 186 if (first) THEN187 call getin_p('cdnc_min',cdnc_min)188 cdnc_min_m3=cdnc_min*1.E6189 IF (cdnc_min_m3<0.) cdnc_min_m3=20.E6 ! astuce pour retrocompatibilite190 write(lunout,*)'cdnc_min=', cdnc_min_m3/1.E6191 call getin_p('cdnc_max',cdnc_max)192 cdnc_max_m3=cdnc_max*1.E6193 IF (cdnc_max_m3<0.) cdnc_max_m3=1000.E6 ! astuce pour retrocompatibilite194 write(lunout,*)'cdnc_max=', cdnc_max_m3/1.E6195 ENDIF196 175 197 176 d_rei_dt = (rei_max-rei_min)/81.4 … … 225 204 xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k) 226 205 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k) 227 END DO228 END DO206 END DO 207 END DO 229 208 ELSE ! of IF (iflag_t_glace.EQ.0) 230 209 DO k = 1, klev … … 243 222 xflwc(i, k) = (1.-zfice(i,k))*pqlwp(i, k) 244 223 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k) 245 END DO246 END DO224 END DO 225 END DO 247 226 ENDIF 248 227 … … 253 232 DO k = 1, klev 254 233 DO i = 1, klon 234 255 235 ! Formula "D" of Boucher and Lohmann, Tellus, 1995 256 236 ! Cloud droplet number concentration (CDNC) is restricted 257 237 ! to be within [20, 1000 cm^3] 258 238 239 ! --present-day case 240 cdnc(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero(i,k), & 241 1.E-4))/log(10.))*1.E6 !-m-3 242 cdnc(i, k) = min(1000.E6, max(20.E6,cdnc(i,k))) 243 259 244 ! --pre-industrial case 260 245 cdnc_pi(i, k) = 10.**(bl95_b0+bl95_b1*log(max(mass_solu_aero_pi(i,k), & 261 246 1.E-4))/log(10.))*1.E6 !-m-3 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 247 cdnc_pi(i, k) = min(1000.E6, max(20.E6,cdnc_pi(i,k))) 301 248 302 249 ! --present-day case … … 333 280 zfiwp_var*(3.448E-03+2.431/rei) 334 281 335 END IF336 337 END DO338 END DO282 END IF 283 284 END DO 285 END DO 339 286 340 287 ELSE !--not ok_cdnc … … 346 293 rad_chaud(i, k) = rad_chau2 347 294 rad_chaud_pi(i, k) = rad_chau2 348 END DO349 END DO295 END DO 296 END DO 350 297 DO k = min(3, klev) + 1, klev 351 298 DO i = 1, klon 352 299 rad_chaud(i, k) = rad_chau1 353 300 rad_chaud_pi(i, k) = rad_chau1 354 END DO355 END DO356 357 END IF !--ok_cdnc301 END DO 302 END DO 303 304 END IF !--ok_cdnc 358 305 359 306 ! --computation of cloud optical depth and emissivity … … 430 377 pclemi(i, k) = 1.0 - exp(-coef_chau*zflwp_var-df*k_ice*zfiwp_var) 431 378 432 END IF379 END IF 433 380 434 381 reice(i, k) = rei … … 437 384 xfiwp(i) = xfiwp(i) + xfiwc(i, k)*rhodz(i, k) 438 385 439 END DO440 END DO386 END DO 387 END DO 441 388 442 389 ! --if cloud droplet radius is fixed, then pcldtaupi=pcltau … … 447 394 pcldtaupi(i, k) = pcltau(i, k) 448 395 reice_pi(i, k) = reice(i, k) 449 END DO450 END DO451 END IF396 END DO 397 END DO 398 END IF 452 399 453 400 DO k = 1, klev … … 456 403 reliq_pi(i, k) = rad_chaud_pi(i, k) 457 404 reice_pi(i, k) = reice(i, k) 458 END DO459 END DO405 END DO 406 END DO 460 407 461 408 ! COMPUTE CLOUD LIQUID PATH AND TOTAL CLOUDINESS … … 473 420 pcl(i) = 1.0 474 421 pctlwp(i) = 0.0 475 END DO422 END DO 476 423 477 424 ! --calculation of liquid water path … … 480 427 DO i = 1, klon 481 428 pctlwp(i) = pctlwp(i) + pqlwp(i, k)*rhodz(i, k) 482 END DO483 END DO429 END DO 430 END DO 484 431 485 432 ! --calculation of cloud properties with cloud overlap … … 503 450 (i),kind=8),1.-zepsec)) 504 451 zcloudl(i) = pclc(i, k) 505 END IF452 END IF 506 453 zcloud(i) = pclc(i, k) 507 END DO508 END DO454 END DO 455 END DO 509 456 ELSE IF (novlp==2) THEN 510 457 DO k = klev, 1, -1 … … 518 465 ELSE IF (paprs(i,k)>=prlmc) THEN 519 466 pcl(i) = min(pclc(i,k), pcl(i)) 520 END IF521 END DO522 END DO467 END IF 468 END DO 469 END DO 523 470 ELSE IF (novlp==3) THEN 524 471 DO k = klev, 1, -1 … … 532 479 ELSE IF (paprs(i,k)>=prlmc) THEN 533 480 pcl(i) = pcl(i)*(1.0-pclc(i,k)) 534 END IF535 END DO536 END DO537 END IF481 END IF 482 END DO 483 END DO 484 END IF 538 485 539 486 DO i = 1, klon … … 541 488 pcm(i) = 1. - pcm(i) 542 489 pcl(i) = 1. - pcl(i) 543 END DO490 END DO 544 491 545 492 ! ======================================================== … … 562 509 ELSE 563 510 lcc3d(i, k) = pclc(i, k)*phase3d(i, k) 564 END IF511 END IF 565 512 scdnc(i, k) = lcc3d(i, k)*cdnc(i, k) ! m-3 566 END DO567 END DO513 END DO 514 END DO 568 515 569 516 DO i = 1, klon … … 573 520 IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. 574 521 IF (novlp.EQ.2) tcc(i) = 0. 575 END DO522 END DO 576 523 577 524 DO i = 1, klon … … 587 534 WRITE (*, *) 'Hypothese de recouvrement: MAXIMUM' 588 535 first = .FALSE. 589 END IF536 END IF 590 537 flag_max = -1. 591 538 ftmp(i) = max(tcc(i), pclc(i,k)) 592 END IF539 END IF 593 540 594 541 IF (novlp.EQ.3) THEN … … 596 543 WRITE (*, *) 'Hypothese de recouvrement: RANDOM' 597 544 first = .FALSE. 598 END IF545 END IF 599 546 flag_max = 1. 600 547 ftmp(i) = tcc(i)*(1-pclc(i,k)) 601 END IF548 END IF 602 549 603 550 IF (novlp.EQ.1) THEN … … 607 554 & RANDOM' 608 555 first = .FALSE. 609 END IF556 END IF 610 557 flag_max = 1. 611 558 ftmp(i) = tcc(i)*(1.-max(pclc(i,k),pclc(i,k+1)))/(1.-min(pclc(i, & 612 559 k+1),1.-thres_neb)) 613 END IF560 END IF 614 561 ! Effective radius of cloud droplet at top of cloud (m) 615 562 reffclwtop(i) = reffclwtop(i) + rad_chaud(i, k)*1.0E-06*phase3d(i, & … … 623 570 tcc(i) = ftmp(i) 624 571 625 END IF ! is there a visible, not-too-small cloud?626 END DO ! loop over k572 END IF ! is there a visible, not-too-small cloud? 573 END DO ! loop over k 627 574 628 575 IF (novlp.EQ.3 .OR. novlp.EQ.1) tcc(i) = 1. - tcc(i) 629 576 630 END DO ! loop over i577 END DO ! loop over i 631 578 632 579 ! ! Convective and Stratiform Cloud Droplet Effective Radius (REFFCLWC … … 639 586 lcc3dstra(i, k) = lcc3dstra(i, k) - lcc3dcon(i, k) ! eau liquide stratiforme 640 587 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 convective643 icc3dstra(i, k)= pclc(i, k)*pqlwp(i, k)*(1-phase3d(i, k))644 icc3dstra(i, k) = icc3dstra(i, k) - icc3dcon(i, k) ! glace stratiforme645 icc3dstra(i, k) = max( icc3dstra(i, k), 0.0)646 !FC (CAUSES)647 648 588 ! Compute cloud droplet radius as above in meter 649 589 radius = 1.1*((pqlwp(i,k)*pplay(i,k)/(rd*t(i,k)))/(4./3*rpi*1000.* & … … 656 596 reffclws(i, k) = radius 657 597 reffclws(i, k) = reffclws(i, k)*lcc3dstra(i, k) 658 END DO !klev659 END DO !klon598 END DO !klev 599 END DO !klon 660 600 661 601 ! Column Integrated Cloud Droplet Number (CLDNVI) : variable 2D … … 669 609 lcc_integrat(i) = lcc_integrat(i) + lcc3d(i, k)*dh(i, k) 670 610 height(i) = height(i) + dh(i, k) 671 END DO ! klev611 END DO ! klev 672 612 lcc_integrat(i) = lcc_integrat(i)/height(i) 673 613 IF (lcc_integrat(i)<=1.0E-03) THEN … … 675 615 ELSE 676 616 cldnvi(i) = cldnvi(i)*lcc(i)/lcc_integrat(i) 677 END IF678 END DO ! klon617 END IF 618 END DO ! klon 679 619 680 620 DO i = 1, klon … … 686 626 IF (lcc3dcon(i,k)<=0.0) lcc3dcon(i, k) = 0.0 687 627 IF (lcc3dstra(i,k)<=0.0) lcc3dstra(i, k) = 0.0 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 628 END DO 693 629 IF (reffclwtop(i)<=0.0) reffclwtop(i) = 0.0 694 630 IF (cldncl(i)<=0.0) cldncl(i) = 0.0 695 631 IF (cldnvi(i)<=0.0) cldnvi(i) = 0.0 696 632 IF (lcc(i)<=0.0) lcc(i) = 0.0 697 ENDDO 698 699 ENDIF !ok_cdnc 700 701 first=.false. !to be sure 633 END DO 634 635 END IF !ok_cdnc 702 636 703 637 RETURN
Note: See TracChangeset
for help on using the changeset viewer.