Changeset 3875
- Timestamp:
- Apr 20, 2021, 8:25:26 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/fisrtilp.F90
r3845 r3875 1 !2 1 ! $Id$ 3 2 ! … … 105 104 ! 106 105 REAL, SAVE :: seuil_neb=0.001 ! un nuage existe vraiment au-dela 106 !<LTP 107 REAL smallestreal 108 REAL, SAVE :: rain_int_min=0.001 !intensité locale minimum pour la pluie avant diminution de la fraction précipitante associée = 0.001 mm/s 109 !>LTP 110 111 107 112 !$OMP THREADPRIVATE(seuil_neb) 108 113 … … 149 154 REAL qcloud(klon) 150 155 151 REAL zrfl(klon), zrfln(klon), zqev, zqevt 156 REAL zrfl(klon), zrfln(klon), zqev, zqevt 157 !<LTP 158 REAL zrflclr(klon), zrflcld(klon) 159 REAL d_zrfl_clr_cld(klon), d_zifl_clr_cld(klon) 160 REAL d_zrfl_cld_clr(klon), d_zifl_cld_clr(klon) 161 !>LTP 162 152 163 REAL zifl(klon), zifln(klon), zqev0,zqevi, zqevti 164 !<LTP 165 REAL ziflclr(klon), ziflcld(klon) 166 !>LTP 153 167 REAL zoliq(klon), zcond(klon), zq(klon), zqn(klon), zdelq 154 168 REAL zoliqp(klon), zoliqi(klon) … … 161 175 REAL zdz(klon),zrho(klon),ztot , zrhol(klon) 162 176 REAL zchau ,zfroi ,zfice(klon),zneb(klon),znebprecip(klon) 177 !<LTP 178 REAL znebprecipclr(klon), znebprecipcld(klon) 179 REAL tot_zneb(klon), tot_znebn(klon), d_tot_zneb(klon) 180 REAL d_znebprecip_clr_cld(klon), d_znebprecip_cld_clr(klon) 181 !>LTP 182 163 183 REAL zmelt, zpluie, zice 164 184 REAL dzfice(klon) … … 219 239 ! ice_thermo = iflag_ice_thermo .GE. 1 220 240 241 221 242 itap=itap+1 222 243 znebprecip(:)=0. 244 245 !<LTP 246 smallestreal=1.e-9 247 znebprecipclr(:)=0. 248 znebprecipcld(:)=0. 249 !>LTP 223 250 224 251 ice_thermo = (iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3) … … 232 259 CALL getin_p('iflag_evap_prec',iflag_evap_prec) 233 260 CALL getin_p('seuil_neb',seuil_neb) 261 !<LTP 262 CALL getin_p('rain_int_min',rain_int_min) 263 !>LTP 234 264 write(lunout,*)' iflag_oldbug_fisrtilp =',iflag_oldbug_fisrtilp 235 265 ! 236 266 WRITE(lunout,*) 'fisrtilp, ninter:', ninter 237 267 WRITE(lunout,*) 'fisrtilp, iflag_evap_prec:', iflag_evap_prec 268 !<LTP 269 WRITE(lunout,*) 'fisrtilp, rain_int_min:', rain_int_min 270 !>LTP 238 271 WRITE(lunout,*) 'fisrtilp, cpartiel:', cpartiel 272 WRITE(lunout,*) 'FISRTILP VERSION LUDO' 239 273 240 274 IF (ABS(dtime/REAL(ninter)-360.0).GT.0.001) THEN … … 303 337 304 338 !cdir collapse 339 305 340 DO k = 1, klev 306 341 DO i = 1, klon … … 326 361 zrfl(i) = 0.0 327 362 zifl(i) = 0.0 363 !<LTP 364 zrflclr(i) = 0.0 365 ziflclr(i) = 0.0 366 zrflcld(i) = 0.0 367 ziflcld(i) = 0.0 368 tot_zneb(i) = 0.0 369 tot_znebn(i) = 0.0 370 d_tot_zneb(i) = 0.0 371 !>LTP 372 328 373 zneb(i) = seuil_neb 329 374 ENDDO … … 492 537 ! ================================ 493 538 DO i = 1, klon 539 540 494 541 !AJ< 495 542 ! S'il y a des precipitations 496 543 IF (zrfl(i)+zifl(i).GT.0.) THEN 544 545 !LTP< 546 !On ne tient compte que du flux de précipitation en ciel clair dans le calcul de l'évaporation. 547 IF (iflag_evap_prec==4) THEN 548 zrfl(i) = zrflclr(i) 549 zifl(i) = ziflclr(i) 550 ENDIF 551 552 !>LTP 497 553 498 554 IF (iflag_evap_prec==1) THEN … … 501 557 znebprecip(i)=MAX(zneb(i),znebprecip(i)) 502 558 ENDIF 503 559 560 IF (iflag_evap_prec==4) THEN 561 ! Evap max pour ne pas saturer toute la maille 562 zqev0 = MAX (0.0, zqs(i)-zq(i)) 563 ELSE 504 564 ! Evap max pour ne pas saturer la fraction sous le nuage 505 565 zqev0 = MAX (0.0, (zqs(i)-zq(i))*znebprecip(i) ) 566 ENDIF 506 567 507 568 !JAM … … 523 584 *SQRT(zrfl(i)/max(1.e-4,znebprecip(i))) & 524 585 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 525 ELSE 586 !<LTP 587 ELSE IF (iflag_evap_prec==4) THEN 588 zqevt = znebprecipclr(i)*coef_eva*(1.0-zq(i)/qsl) & 589 *SQRT(zrfl(i)/max(1.e-8,znebprecipclr(i))) & 590 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 591 !>LTP 592 ELSE 526 593 zqevt = 1.*coef_eva*(1.0-zq(i)/qsl)*SQRT(zrfl(i)) & 527 594 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG … … 544 611 *SQRT(zifl(i)/max(1.e-4,znebprecip(i))) & 545 612 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 613 !<LTP 614 ELSE IF (iflag_evap_prec==4) THEN 615 zqevti = znebprecipclr(i)*coef_eva*(1.0-zq(i)/qsi) & 616 *SQRT(zifl(i)/max(1.e-8,znebprecipclr(i))) & 617 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 618 !>LTP 546 619 ELSE 547 620 zqevti = 1.*coef_eva*(1.0-zq(i)/qsi)*SQRT(zifl(i)) & … … 551 624 *RG*dtime/(paprs(i,k)-paprs(i,k+1)) 552 625 626 553 627 !JAM 554 628 ! Limitation de l'evaporation. On s'assure qu'on ne sature pas … … 573 647 ENDIF 574 648 ENDIF 649 575 650 ! Nouveaux flux de precip liquide et solide 576 651 zrfln(i) = Max(0.,zrfl(i) - zqev*(paprs(i,k)-paprs(i,k+1)) & … … 602 677 zrfl(i) = zrfln(i) 603 678 zifl(i) = zifln(i) 679 680 !<LTP 681 IF (iflag_evap_prec==4) THEN 682 zrflclr(i) = zrfl(i) 683 ziflclr(i) = zifl(i) 684 IF(zrflclr(i) + ziflclr(i) .LE. 0) THEN 685 znebprecipclr(i) = 0. 686 ENDIF 687 zrfl(i) = zrflclr(i) + zrflcld(i) 688 zifl(i) = ziflclr(i) + ziflcld(i) 689 ENDIF 690 !>LTP 691 692 604 693 ! print*,'REEVAP ',itap,k,znebprecip(1),zqev0,zqev,zqevi,zrfl(1) 605 694 … … 612 701 zmelt = MIN(MAX(zmelt,0.),1.) 613 702 ! Fusion de la glace 614 zrfl(i)=zrfl(i)+zmelt*zifl(i) 703 !<LTP 704 IF (iflag_evap_prec==4) THEN 705 zrflclr(i)=zrflclr(i)+zmelt*ziflclr(i) 706 zrflcld(i)=zrflcld(i)+zmelt*ziflcld(i) 707 zrfl(i)=zrflclr(i)+zrflcld(i) 708 !>LTP 709 ELSE 710 zrfl(i)=zrfl(i)+zmelt*zifl(i) 711 ENDIF 615 712 if (fl_cor_ebil .LE. 0) then 616 713 ! the following line should not be here. Indeed, if zifl is modified … … 628 725 end if 629 726 if (fl_cor_ebil .GT. 0) then ! correction bug, deplacement ligne precedente 630 zifl(i)=zifl(i)*(1.-zmelt) 727 !<LTP 728 IF (iflag_evap_prec==4) THEN 729 ziflclr(i)=ziflclr(i)*(1.-zmelt) 730 ziflcld(i)=ziflcld(i)*(1.-zmelt) 731 zifl(i)=ziflclr(i)+ziflcld(i) 732 !>LTP 733 ELSE 734 zifl(i)=zifl(i)*(1.-zmelt) 735 ENDIF 631 736 end if 632 737 … … 817 922 ! Variables calculees: 818 923 ! rneb : nebulosite 819 ! zqn : eau totale dans le nuage (in cloud totalwater content)924 ! zqn : eau condensee, dans le nuage (in cloud water content) 820 925 ! zcond: eau condensee en moyenne dans la maille 821 926 ! rhcl: humidite relative ciel-clair … … 1019 1124 ENDIF 1020 1125 ENDDO 1126 1127 1021 1128 ! If vertical heterogeneity, change fraction by volume as well 1022 1129 if (iflag_cloudth_vert>=3) then … … 1116 1223 ! Partager l'eau condensee en precipitation et eau liquide nuageuse 1117 1224 ! 1225 1226 !<LTP 1227 1228 IF (iflag_evap_prec==4) THEN 1229 !Partitionnement des precipitations venant du dessus en précipitations nuageuses 1230 !et précipitations ciel clair 1231 1232 !0) Calculate tot_zneb, la fraction nuageuse totale au-dessus du nuage 1233 !en supposant un recouvrement maximum aléatoire (voir Jakob and Klein, 2000) 1234 1235 DO i=1, klon 1236 tot_znebn(i) = 1 - (1-tot_zneb(i))*(1 - max(rneb(i,k),zneb(i))) & 1237 /(1-min(zneb(i),1-smallestreal)) 1238 d_tot_zneb(i) = tot_znebn(i) - tot_zneb(i) 1239 tot_zneb(i) = tot_znebn(i) 1240 1241 1242 !1) Cloudy to clear air 1243 d_znebprecip_cld_clr(i) = znebprecipcld(i) - min(rneb(i,k),znebprecipcld(i)) 1244 IF (znebprecipcld(i) .GT. 0) THEN 1245 d_zrfl_cld_clr(i) = d_znebprecip_cld_clr(i)/znebprecipcld(i)*zrflcld(i) 1246 d_zifl_cld_clr(i) = d_znebprecip_cld_clr(i)/znebprecipcld(i)*ziflcld(i) 1247 ELSE 1248 d_zrfl_cld_clr(i) = 0. 1249 d_zifl_cld_clr(i) = 0. 1250 ENDIF 1251 1252 !2) Clear to cloudy air 1253 d_znebprecip_clr_cld(i) = max(0., min(znebprecipclr(i), rneb(i,k) & 1254 - d_tot_zneb(i) - zneb(i))) 1255 IF (znebprecipclr(i) .GT. 0) THEN 1256 d_zrfl_clr_cld(i) = d_znebprecip_clr_cld(i)/znebprecipclr(i)*zrflclr(i) 1257 d_zifl_clr_cld(i) = d_znebprecip_clr_cld(i)/znebprecipclr(i)*ziflclr(i) 1258 ELSE 1259 d_zrfl_clr_cld(i) = 0. 1260 d_zifl_clr_cld(i) = 0. 1261 ENDIF 1262 1263 !Update variables 1264 znebprecipcld(i) = znebprecipcld(i) + d_znebprecip_clr_cld(i) - d_znebprecip_cld_clr(i) 1265 znebprecipclr(i) = znebprecipclr(i) + d_znebprecip_cld_clr(i) - d_znebprecip_clr_cld(i) 1266 zrflcld(i) = zrflcld(i) + d_zrfl_clr_cld(i) - d_zrfl_cld_clr(i) 1267 ziflcld(i) = ziflcld(i) + d_zifl_clr_cld(i) - d_zifl_cld_clr(i) 1268 zrflclr(i) = zrflclr(i) + d_zrfl_cld_clr(i) - d_zrfl_clr_cld(i) 1269 ziflclr(i) = ziflclr(i) + d_zifl_cld_clr(i) - d_zifl_clr_cld(i) 1270 1271 ENDDO 1272 ENDIF 1273 1274 !>LTP 1275 1276 1118 1277 1119 1278 ! Initialisation de zoliq (eau condensee moyenne dans la maille) … … 1293 1452 d_ql(i,k) = (1-zfice(i))*zoliq(i) 1294 1453 d_qi(i,k) = zfice(i)*zoliq(i) 1295 zrfl(i) = zrfl(i)+ zqprecl(i) & 1454 !<LTP 1455 IF (iflag_evap_prec == 4) THEN 1456 zrflcld(i) = zrflcld(i)+zqprecl(i) & 1457 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1458 ziflcld(i) = ziflcld(i)+ zqpreci(i) & 1459 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1460 znebprecipcld(i) = rneb(i,k) 1461 zrfl(i) = zrflcld(i) + zrflclr(i) 1462 zifl(i) = ziflcld(i) + ziflclr(i) 1463 !>LTP 1464 ELSE 1465 zrfl(i) = zrfl(i)+ zqprecl(i) & 1296 1466 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1297 zifl(i) = zifl(i)+ zqpreci(i) &1467 zifl(i) = zifl(i)+ zqpreci(i) & 1298 1468 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1469 1470 ENDIF !iflag_evap_prec==4 1471 1299 1472 ENDIF 1300 1473 ENDDO … … 1314 1487 d_qi(i,k) = zfice(i)*zoliq(i) 1315 1488 ! endif 1489 !<LTP 1490 IF (iflag_evap_prec == 4) THEN 1491 zrflcld(i) = zrflcld(i)+ MAX(zcond(i)*(1.-zfice(i))-zoliqp(i),0.0) & 1492 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1493 ziflcld(i) = ziflcld(i)+ MAX(zcond(i)*zfice(i)-zoliqi(i),0.0) & 1494 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1495 znebprecipcld(i) = rneb(i,k) 1496 zrfl(i) = zrflcld(i) + zrflclr(i) 1497 zifl(i) = ziflcld(i) + ziflclr(i) 1498 !>LTP 1499 ELSE 1316 1500 !AJ< 1317 zrfl(i) = zrfl(i)+ MAX(zcond(i)*(1.-zfice(i))-zoliqp(i),0.0) &1318 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)1319 zifl(i) = zifl(i)+ MAX(zcond(i)*zfice(i)-zoliqi(i),0.0) &1320 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime)1501 zrfl(i) = zrfl(i)+ MAX(zcond(i)*(1.-zfice(i))-zoliqp(i),0.0) & 1502 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1503 zifl(i) = zifl(i)+ MAX(zcond(i)*zfice(i)-zoliqi(i),0.0) & 1504 *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1321 1505 ! zrfl(i) = zrfl(i)+ zpluie & 1322 1506 ! *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1323 1507 ! zifl(i) = zifl(i)+ zice & 1324 1508 ! *(paprs(i,k)-paprs(i,k+1))/(RG*dtime) 1509 ENDIF !iflag_evap_prec == 4 1325 1510 1326 1511 !CR : on prend en compte l'effet Bergeron dans les flux de precipitation 1327 1512 IF ((iflag_bergeron .EQ. 1) .AND. (zt(i) .LT. 273.15)) THEN 1328 zsolid = zrfl(i) 1329 zifl(i) = zifl(i)+zrfl(i) 1330 zrfl(i) = 0. 1513 !<LTP 1514 IF (iflag_evap_prec == 4) THEN 1515 zsolid = zrfl(i) 1516 ziflclr(i) = ziflclr(i) +zrflclr(i) 1517 ziflcld(i) = ziflcld(i) +zrflcld(i) 1518 zifl(i) = ziflclr(i)+ziflcld(i) 1519 zrflcld(i)=0. 1520 zrflclr(i)=0. 1521 zrfl(i) = zrflclr(i)+zrflcld(i) 1522 !>LTP 1523 ELSE 1524 zsolid = zrfl(i) 1525 zifl(i) = zifl(i)+zrfl(i) 1526 zrfl(i) = 0. 1527 ENDIF!iflag_evap_prec==4 1528 1331 1529 if (fl_cor_ebil .GT. 0) then 1332 1530 zt(i)=zt(i)+zsolid*(RG*dtime)/(paprs(i,k)-paprs(i,k+1)) & … … 1358 1556 ! ENDDO 1359 1557 ! ENDIF 1558 1559 1560 !<LTP 1561 1562 !Limitation de la fraction surfacique couverte par les précipitations lorsque l'intensité locale du flux de précipitation descend en 1563 !dessous de rain_int_min 1564 IF (iflag_evap_prec==4) THEN 1565 DO i=1, klon 1566 IF (zrflclr(i) + ziflclr(i) .GT. 0 ) THEN 1567 znebprecipclr(i) = min(znebprecipclr(i), max(zrflclr(i)/(znebprecipclr(i)*rain_int_min), ziflclr(i)/(znebprecipclr(i)*rain_int_min))) 1568 ELSE 1569 znebprecipclr(i)=0. 1570 ENDIF 1571 1572 IF (zrflcld(i) + ziflcld(i) .GT. 0 ) THEN 1573 znebprecipcld(i) = min(znebprecipcld(i), max(zrflcld(i)/(znebprecipcld(i)*rain_int_min), ziflcld(i)/(znebprecipcld(i)*rain_int_min))) 1574 ELSE 1575 znebprecipcld(i)=0. 1576 ENDIF 1577 ENDDO 1578 ENDIf 1579 1580 !>LTP 1581 1582 1583 1360 1584 1361 1585
Note: See TracChangeset
for help on using the changeset viewer.