Changeset 2500 for LMDZ5/trunk
- Timestamp:
- Apr 28, 2016, 4:58:11 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/fisrtilp.F90
r2466 r2500 21 21 ! Objet: condensation et precipitation stratiforme. 22 22 ! schema de nuage 23 ! Fusion de fisrt (physique sursaturation, P. LeVan K. Laval) 24 ! et ilp (il pleut, L. Li) 25 ! Principales parties: 26 ! P1> Evaporation de la precipitation (qui vient du niveau k+1) 27 ! P2> Formation du nuage (en k) 28 ! P3> Formation de la precipitation (en k) 23 29 !====================================================================== 24 30 !====================================================================== … … 28 34 29 35 ! 30 ! Arguments:36 ! Principaux inputs: 31 37 ! 32 38 REAL dtime ! intervalle du temps (s) … … 35 41 REAL t(klon,klev) ! temperature (K) 36 42 REAL q(klon,klev) ! humidite specifique (kg/kg) 43 ! 44 ! Principaux outputs: 45 ! 37 46 REAL d_t(klon,klev) ! incrementation de la temperature (K) 38 47 REAL d_q(klon,klev) ! incrementation de la vapeur d'eau … … 46 55 REAL prfl(klon,klev+1) ! flux d'eau precipitante aux interfaces (kg/m2/s) 47 56 REAL psfl(klon,klev+1) ! flux d'eau precipitante aux interfaces (kg/m2/s) 57 ! 58 ! Autres arguments 59 ! 48 60 REAL ztv(klon,klev) 49 61 REAL zqta(klon,klev),fraca(klon,klev) … … 155 167 ! Pour la conversion eau-neige 156 168 REAL zlh_solid(klon), zm_solid 157 !IM158 !ym INTEGER klevm1159 169 !--------------------------------------------------------------- 160 170 ! 161 171 ! Fonctions en ligne: 162 172 ! 163 REAL fallvs,fallvc ! vitesse de chute pour crystaux de glace 173 REAL fallvs,fallvc ! Vitesse de chute pour cristaux de glace 174 ! (Heymsfield & Donner, 1990) 164 175 REAL zzz 165 176 include "YOETHF.h" … … 278 289 zfrac_lessi = 0. 279 290 280 !AA ----------------------------------------------------------291 !AA================================================================== 281 292 ! 282 293 ncoreczq=0 283 ! Boucle verticale (du haut vers le bas) 284 ! 285 !IM : klevm1 286 !ym klevm1=klev-1 294 ! BOUCLE VERTICALE (DU HAUT VERS LE BAS) 295 ! 287 296 DO k = klev, 1, -1 288 297 ! 289 !AA---------------------------------------------------------- 290 ! 298 !AA=============================================================== 299 ! 300 ! Initialisation temperature et vapeur 291 301 DO i = 1, klon 292 302 zt(i)=t(i,k) … … 312 322 ENDDO 313 323 ENDIF 314 ! 315 ! 316 ! Calculer l'evaporation de la precipitation 317 ! 318 319 320 ! Calculer l'evaporation de la precipitation 321 ! 322 323 324 ! ---------------------------------------------------------------- 325 ! P1> Debut evaporation de la precipitation 326 ! ---------------------------------------------------------------- 324 327 IF (evap_prec) THEN 325 328 DO i = 1, klon … … 328 331 IF (zrfl(i)+zifl(i).GT.0.) THEN 329 332 !>AJ 333 ! Calcul du qsat 330 334 IF (thermcep) THEN 331 335 zdelta=MAX(0.,SIGN(1.,RTT-zt(i))) … … 350 354 IF (zrfl(i)+zifl(i).GT.0.) THEN 351 355 !>AJ 356 ! Evap max pour ne pas saturer la fraction sous le nuage 352 357 zqev = MAX (0.0, (zqs(i)-zq(i))*zneb(i) ) 358 ! Calcul de l'evaporation du flux de precip herite 359 ! d'au-dessus 353 360 zqevt = coef_eva * (1.0-zq(i)/zqs(i)) * SQRT(zrfl(i)) & 354 361 * (paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 355 362 zqevt = MAX(0.0,MIN(zqevt,zrfl(i))) & 356 363 * RG*dtime/(paprs(i,k)-paprs(i,k+1)) 364 ! Seuil pour ne pas saturer la fraction sous le nuage 357 365 zqev = MIN (zqev, zqevt) 366 ! Nouveau flux de precip 358 367 zrfln(i) = zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1)) & 359 368 /RG/dtime 360 361 ! pour la glace, on ré-évapore toute la précip dans la 362 ! couche du dessous 363 ! la glace venant de la couche du dessus est simplement 364 ! dans la couche du dessous. 365 369 ! Aucun flux liquide pour T < t_coup 366 370 IF (zt(i) .LT. t_coup.and.reevap_ice) zrfln(i)=0. 367 371 ! Nouvelle vapeur 368 372 zq(i) = zq(i) - (zrfln(i)-zrfl(i)) & 369 373 * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime 374 ! Nouvelle temperature (chaleur latente) 370 375 zt(i) = zt(i) + (zrfln(i)-zrfl(i)) & 371 376 * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime & … … 384 389 !>AJ 385 390 !JAM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 386 ! Modification de l'évaporation avec la glace 387 ! Différentiation entre précipitation liquide et solide 388 ! On suppose que coef_evai=2*coef_eva 391 ! Modification de l'evaporation avec la glace 392 ! Differentiation entre precipitation liquide et solide 389 393 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 390 394 395 ! Evap max pour ne pas saturer la fraction sous le nuage 391 396 zqev0 = MAX (0.0, (zqs(i)-zq(i))*zneb(i) ) 392 397 ! zqev0 = MAX (0.0, zqs(i)-zq(i) ) 393 398 394 399 !JAM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 395 ! On diff érencie qsat pour l'eau et la glace400 ! On differencie qsat pour l'eau et la glace 396 401 ! Si zdelta=1. --> glace 397 402 ! Si zdelta=0. --> eau liquide 398 403 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 399 404 405 ! Calcul du qsat par rapport a l'eau liquide 400 406 qsl= R2ES*FOEEW(zt(i),0.)/pplay(i,k) 401 407 qsl= MIN(0.5,qsl) … … 403 409 qsl= qsl*zcor 404 410 411 ! Calcul de l'evaporation du flux de precip herite 412 ! d'au-dessus 413 ! Formulation en racine du flux de precip 414 ! (Klemp & Wilhelmson, 1978; Sundqvist, 1988) 405 415 zqevt = 1.*coef_eva*(1.0-zq(i)/qsl)*SQRT(zrfl(i)) & 406 416 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG … … 408 418 *RG*dtime/(paprs(i,k)-paprs(i,k+1)) 409 419 420 421 ! Calcul du qsat par rapport a la glace 410 422 qsi= R2ES*FOEEW(zt(i),1.)/pplay(i,k) 411 423 qsi= MIN(0.5,qsi) … … 413 425 qsi= qsi*zcor 414 426 427 ! Calcul de la sublimation du flux de precip solide herite 428 ! d'au-dessus 415 429 zqevti = 1.*coef_eva*(1.0-zq(i)/qsi)*SQRT(zifl(i)) & 416 430 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG … … 420 434 421 435 !JAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 422 ! Vérification sur l'évaporation 436 ! Verification sur l'evaporation 437 ! On s'assure qu'on ne sature pas 438 ! la fraction sous le nuage sinon on 439 ! repartit zqev0 en gardant la proportion 440 ! liquide / glace 423 441 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 424 442 … … 436 454 ENDIF 437 455 ENDIF 438 456 ! Nouveaux flux de precip liquide et solide 439 457 zrfln(i) = Max(0.,zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1)) & 440 458 /RG/dtime) 441 459 zifln(i) = Max(0.,zifl(i) - zqevi*(paprs(i,k)-paprs(i,k+1)) & 442 460 /RG/dtime) 443 444 ! Pour la glace, on révapore toute la précip dans la couche du dessous 445 ! la glace venant de la couche du dessus est simplement dans la couche 446 ! du dessous. 447 448 ! IF (zt(i) .LT. t_coup.and.reevap_ice) zrfln(i)=0. 449 ! print*,zrfl(i),zrfln(i),zqevt,zqevti,RLMLT,'fluxdeprecip' 461 462 ! Mise a jour de la vapeur, temperature et flux de precip 450 463 zq(i) = zq(i) - (zrfln(i)+zifln(i)-zrfl(i)-zifl(i)) & 451 464 * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime … … 466 479 zmelt = ((zt(i)-273.15)/(ztfondue-273.15)) ! jyg 467 480 zmelt = MIN(MAX(zmelt,0.),1.) 481 ! Fusion de la glace 468 482 zrfl(i)=zrfl(i)+zmelt*zifl(i) 469 483 zifl(i)=zifl(i)*(1.-zmelt) 470 484 ! print*,zt(i),'octavio1' 485 ! Chaleur latente de fusion 471 486 zt(i)=zt(i)-zifl(i)*zmelt*(RG*dtime)/(paprs(i,k)-paprs(i,k+1)) & 472 487 *RLMLT/RCPD/(1.0+RVTMP2*zq(i)) … … 481 496 ENDIF ! (.NOT. ice_thermo) 482 497 498 ! ---------------------------------------------------------------- 499 ! Fin evaporation de la precipitation 500 ! ---------------------------------------------------------------- 483 501 ENDIF ! (evap_prec) 484 502 ! … … 518 536 ! endif 519 537 538 ! ---------------------------------------------------------------- 539 ! P2> Formation du nuage 540 ! ---------------------------------------------------------------- 520 541 IF (cpartiel) THEN 521 542 … … 534 555 if (iflag_pdf.eq.0) then 535 556 557 ! version creneau de (Li, 1998) 536 558 do i=1,klon 537 559 zdelq = min(ratqs(i,k),0.99) * zq(i) … … 575 597 end if 576 598 577 !CR: variation de qsat avec T en pr ésence de glace ou non599 !CR: variation de qsat avec T en presence de glace ou non 578 600 !initialisations 579 601 do i=1,klon … … 587 609 !Boucle iterative: ATTENTION, l'option -1 n'est plus activable ici 588 610 if (iflag_fisrtilp_qsat.ge.0) then 611 ! Iteration pour condensation avec variation de qsat(T) 612 ! ----------------------------------------------------- 589 613 do iter=1,iflag_fisrtilp_qsat+1 590 614 … … 603 627 endif 604 628 endif 629 ! Calcul des PDF lognormales 605 630 zcvm5 = R5LES*RLVTT*(1.-zdelta) + R5IES*RLSTT*zdelta 606 631 zcvm5 = zcvm5 /RCPD/(1.0+RVTMP2*zq(i)) … … 647 672 648 673 else 649 650 !calcul de la fraction de glace 651 !CR: on utilise la nouvelle fonction de JBM pour l ancien calcul 652 ! zfice(i) = icefrac_lsc(Tbef(i), t_glace_min, & 653 ! t_glace_max, exposant_glace) 654 ! zfice(i) = 1.0 - (Tbef(i)-ztglace) / (RTT-ztglace) 655 ! zfice(i) = MIN(MAX(zfice(i),0.0),1.0) 656 ! zfice(i) = zfice(i)**nexpo 674 ! Iteration pour convergence avec qsat(T) 657 675 if (iflag_t_glace.eq.1) then 658 676 CALL icefrac_lsc(klon,zt(:),pplay(:,k)/paprs(:,1),zfice(:)) … … 699 717 700 718 701 enddo 719 enddo ! iter=1,iflag_fisrtilp_qsat+1 720 ! Fin d'iteration pour condensation avec variation de qsat(T) 721 ! ----------------------------------------------------------- 702 722 endif 703 723 … … 707 727 708 728 ! if (iflag_fisrtilp_qsat.eq.-1) then 709 !CR: ATTENTION option fausse mais a existe: pour la re-activer, prendre iflag_fisrtilp_qsat=0 et activer les lignes suivantes: 729 !------------------------------------------ 730 !CR: ATTENTION option fausse mais a existe: 731 ! pour la re-activer, prendre iflag_fisrtilp_qsat=0 et 732 ! activer les lignes suivantes: 710 733 IF (1.eq.0) THEN 711 734 DO i=1,klon … … 724 747 rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i) 725 748 ENDIF 726 ENDDO 727 ENDIF 749 ENDDO 750 ENDIF 751 !------------------------------------------ 728 752 729 753 ! ELSE 730 754 755 ! Calcul de l'eau in-cloud (zqn), 756 ! moyenne dans la maille (zcond), 757 ! fraction nuageuse (rneb) et 758 ! humidite relative ciel-clair (rhcl) 731 759 DO i=1,klon 732 760 IF (rneb(i,k) .LE. 0.0) THEN … … 749 777 ! ENDIF 750 778 751 ! do i=1,klon 752 ! IF (rneb(i,k) .LE. 0.0) zqn(i) = 0.0 753 ! IF (rneb(i,k) .GE. 1.0) zqn(i) = zq(i) 754 ! rneb(i,k) = MAX(0.0,MIN(1.0,rneb(i,k))) 755 !c zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k)/(1.+zdqs(i)) 756 !c On ne divise pas par 1+zdqs pour forcer a avoir l'eau predite par 757 !c la convection. 758 !c ATTENTION !!! Il va falloir verifier tout ca. 759 ! zcond(i) = MAX(0.0,zqn(i)-zqs(i))*rneb(i,k) 760 !c print*,'ZDQS ',zdqs(i) 761 !c--Olivier 762 ! rhcl(i,k)=(zqs(i)+zq(i)-zdelq)/2./zqs(i) 763 ! IF (rneb(i,k) .LE. 0.0) rhcl(i,k)=zq(i)/zqs(i) 764 ! IF (rneb(i,k) .GE. 1.0) rhcl(i,k)=1.0 765 !c--fin 766 ! ENDDO 767 ELSE 779 ELSE ! de IF (cpartiel) 780 ! Cas "tout ou rien" 768 781 DO i = 1, klon 769 782 IF (zq(i).GT.zqs(i)) THEN … … 775 788 ENDDO 776 789 ENDIF 777 ! 790 ! ---------------------------------------------------------------- 791 ! Fin de formation du nuage 792 ! ---------------------------------------------------------------- 793 ! 794 ! Mise a jour vapeur d'eau 778 795 DO i = 1, klon 779 796 zq(i) = zq(i) - zcond(i) … … 781 798 ENDDO 782 799 !AJ< 800 ! Chaleur latente apres formation nuage 801 ! ------------------------------------- 783 802 IF (.NOT. ice_thermo) THEN 784 803 if (iflag_fisrtilp_qsat.lt.1) then … … 825 844 ENDIF 826 845 !>AJ 846 ! ---------------------------------------------------------------- 847 ! P3> Formation des precipitations 848 ! ---------------------------------------------------------------- 827 849 ! 828 850 ! Partager l'eau condensee en precipitation et eau liquide nuageuse 829 851 ! 852 853 ! Initialisation de zoliq (eau condensee moyenne dans la maille) 830 854 DO i = 1, klon 831 855 IF (rneb(i,k).GT.0.0) THEN … … 858 882 ENDIF 859 883 ENDIF 884 885 ! Calcul de radliq (eau condensee pour le rayonnement) 886 ! Iteration pour realiser une moyenne de l'eau nuageuse lors de la precip 887 ! Remarque: ce n'est donc pas l'eau restante en fin de precip mais une 888 ! eau moyenne restante dans le nuage sur la duree du pas de temps qui est 889 ! transmise au rayonnement; 890 ! ---------------------------------------------------------------- 860 891 DO i = 1, klon 861 892 IF (rneb(i,k).GT.0.0) THEN … … 878 909 ztot = 0.0 879 910 ELSE 880 ! quantite d'eau a eliminer: zchau 881 ! meme chose pour la glace: zfroi 911 ! quantite d'eau a eliminer: zchau (Sundqvist, 1978) 912 ! meme chose pour la glace: zfroi (Zender & Kiehl, 1997) 882 913 if (ptconv(i,k)) then 883 914 zcl =cld_lc_con … … 916 947 ENDDO ! i = 1,klon 917 948 ENDDO ! n = 1,ninter 949 ! ---------------------------------------------------------------- 918 950 ! 919 951 IF (.NOT. ice_thermo) THEN … … 1028 1060 ELSE 1029 1061 ! JAM************************************************* 1030 ! Revoir partie ci-dessous: àquoi servent psfl et prfl?1062 ! Revoir partie ci-dessous: a quoi servent psfl et prfl? 1031 1063 ! ***************************************************** 1032 1064 … … 1040 1072 ENDDO 1041 1073 ENDIF 1074 ! ---------------------------------------------------------------- 1075 ! Fin de formation des precipitations 1076 ! ---------------------------------------------------------------- 1042 1077 ! 1043 1078 ! … … 1110 1145 ENDDO 1111 1146 ! 1112 !AA ----------------------------------------------------------1113 ! FIN DE BOUCLE SUR K1147 !AA=============================================================== 1148 ! FIN DE LA BOUCLE VERTICALE 1114 1149 end DO 1115 1150 ! 1116 !AA -----------------------------------------------------------1151 !AA================================================================== 1117 1152 ! 1118 1153 ! Pluie ou neige au sol selon la temperature de la 1ere couche
Note: See TracChangeset
for help on using the changeset viewer.