Changeset 6041
- Timestamp:
- Jan 21, 2026, 3:48:50 AM (16 hours ago)
- File:
-
- 1 edited
-
LMDZ6/trunk/libf/phylmd/cv3p1_closure.f90 (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/cv3p1_closure.f90
r5708 r6041 165 165 !ym column independance 166 166 !ym DO k = 1, icbmax 167 168 ! JYCF2026/01/20 m(k)=rho(k)*sig(k)*w(k) 169 ! sig(k) est la fraction surfacique de l'ascendance arrivant au niveau k (en m^2/m^2) 170 167 171 DO k = 1, nd 168 172 DO il = 1, ncum … … 363 367 364 368 IF (ok_inhib) THEN 369 370 ! JYCF2026/01/20 m(k)=rho(k)*sig(k)*w(k) 371 ! Possible que toutes les lignes au dessus ne servent que pour ok_inhib=T 372 ! Ce n'est pas le cas. 373 ! ok_inhib est mis à iflag_mix==2 dans cva_driver. 374 ! Il est donc faux par défaut, pour iflag_mix=1 365 375 366 376 DO i = 1, nl … … 413 423 cinb, plfc) 414 424 425 ! JYCF2026/01/20 somme de la partie en dessous et au dessus du LCL 426 415 427 DO il = 1, ncum 416 428 cin(il) = cina(il) + cinb(il) 417 429 END DO 418 430 IF (prt_level>=20) PRINT *, 'cv3p1_param apres cv3_cine' 431 419 432 ! ------------------------------------------------------------- 420 433 ! --Update buoyancies to account for Ale 421 434 ! ------------------------------------------------------------- 435 436 ! JYCF2026/01/20 Ajout de Ale dans le caclul de ALE pour le déclenchement 437 ! Est-ce que le calcul du déclenchement est fait dedans. 438 ! A verifier et documenter. 439 ! Notamment mettre les inten(in/out) dans cv3_buoy.f90 440 ! On ne sort buoy que si ALE+CIN>0 ? 441 ! Le "buoy" qui sort est un delta de température ? 422 442 423 443 CALL cv3_buoy(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, ale, cin, tv, & … … 436 456 437 457 ! compute dtmin (minimum buoyancy between ICB and given level k): 438 458 ! in fact a delta of temperature 439 459 DO k = 1, nl 440 460 DO il = 1, ncum … … 454 474 END DO 455 475 456 ! the interval on which cape is computed starts at pbase : 476 ! the vertical interval on which cape is computed starts at pbase : 477 478 ! JYCF2026/01/20 computing siglim(k), the target value for sig(k) 479 ! for the time relaxation 480 ! mlim=rho*dp*siglim*wlim avec wlim=sqrt(cape) 481 457 482 458 483 DO k = 1, nl … … 498 523 END IF 499 524 525 ! JYCF2026/01/20 computing mlim at CB 526 ! Boucle à vérifier 527 ! inb est le sommet 528 500 529 IF (icb(il)+1<=inb(il)) THEN 501 530 ! IM end … … 514 543 ! ------------------------------------------------------------------------ 515 544 545 546 ! JYCF2026/01/20 cbmflim=sum(mlim) 516 547 DO il = 1, ncum 517 548 cbmflim(il) = 0. … … 541 572 wb2(il) = sqrt(2.*max(ale(il)+cin(il),0.)) 542 573 END DO 574 575 ! JYCF2026/01/20 Various options to compute the vertical velocity 576 ! in the adiabatic ascent at cloud base 543 577 544 578 DO il = 1, ncum … … 572 606 ENDDO 573 607 !RC 608 609 ! JYCF2026/01/20 computing cbmf1, mass flux at cloud base coming 610 ! from the ALP closure 574 611 575 612 DO il = 1, ncum … … 592 629 END DO 593 630 631 ! JYCF2026/01/20 cbmf=cbmf1, coming from ALP closure 594 632 DO il = 1, ncum 595 633 IF (cbmflim(il)>1.E-6) THEN … … 607 645 ! c 2. Compute coefficient and apply correction 608 646 647 ! JYCF2026/01/20 coef : ratio of the ALP to the CAPE closure 648 ! keeping the original ratio in coeftrue 649 609 650 DO il = 1, ncum 610 651 coef(il) = (cbmf(il)+1.E-10)/(cbmflim(il)+1.E-10) … … 612 653 END DO 613 654 IF (prt_level>=20) PRINT *, 'cv3p1_param apres coef_plantePLUS' 655 656 ! JYCF2026/01/20 : resumé 657 ! computing siglim(k), the target value for sig(k) 658 ! for the time relaxation 659 ! mlim=rho*dp*siglim*wlim avec wlim=sqrt(cape) 660 ! cbmflim=sum(mlim) 661 ! computing cbmf, mass flux at cloud base from the ALP closure 662 ! time relaxation on sig*w (in fact on "m") 663 ! w is kept unchanged and sig is computed as sig*w/w 664 ! 665 ! coef=cbmf(ALP)/cbmflim(CAPE) sans relaxation 666 ! 667 668 669 ! JYCF2026/01/20 time relaxation on sig*w (in fact on "m") 670 ! beta = 1.0 - delt / tau, in cv3_param 671 ! w is kept unchanged and sig is computed as sig*w/w 614 672 615 673 DO k = 1, nl … … 623 681 sig(il, k) = min(sig(il,k), 1.) 624 682 ! c amu = 0.5*(SIG(il,k)+sigold(il,k))*W0(il,k) 683 ! JYCF2026/01/20 0.007=2/R ? 684 ! m=sig w rho delta(p) 625 685 m(il, k) = amu*0.007*p(il, k)*(ph(il,k)-ph(il,k+1))/tv(il, k) 626 686 END IF … … 640 700 !computation of the sum of ascending fluxes 641 701 IF (iflag_mix_adiab.eq.1) THEN 642 643 !Verification sum(me)=sum(m)644 DO k = 1,nd !jyg: initialization up to nd645 DO il = 1, ncum646 md(il,k)=0.647 med(il,k)=0.648 ENDDO649 ENDDO650 651 DO k = nl,1,-1652 DO il = 1, ncum653 md(il,k)=md(il,k+1)+m(il,k+1)654 ENDDO655 ENDDO656 657 DO k = nl,1,-1658 DO il = 1, ncum659 IF ((k>=(icb(il))) .AND. (k<=inb(il))) THEN660 mad(il,k)=mad(il,k+1)+m(il,k+1)661 ENDIF662 ! print*,"mad",il,k,mad(il,k)663 ENDDO664 ENDDO665 666 !CR: erosion of each adiabatic ascent during its ascent667 668 !Computation of erosion coefficient beta_coef669 DO k = 1, nl670 DO il = 1, ncum671 IF ((k>=(icb(il)+1)) .AND. (k<=inb(il)) .AND. (mlim(il,k).gt.0.)) THEN672 ! print*,"beta_coef",il,k,icb(il),inb(il),buoy(il,k),tv(il,k),wlim(il,k),wlim(il,k+1)673 beta_coef(il,k)=RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2674 ELSE675 beta_coef(il,k)=0.676 ENDIF677 ENDDO678 ENDDO679 680 ! print*,"apres beta_coef"681 682 DO k = 1, nl683 DO il = 1, ncum684 685 IF ((k>=(icb(il)+1)) .AND. (k<=inb(il))) THEN686 687 ! print*,"dz",il,k,tv(il, k-1)688 dz = (ph(il,k-1)-ph(il,k))/(p(il, k-1)/(rrd*tv(il, k-1))*RG)689 betalim(il,k)=betalim(il,k-1)*exp(-1.*beta_coef(il,k-1)*dz)690 ! betalim(il,k)=betalim(il,k-1)*exp(-RG*coef_peel*buoy(il,k-1)/tv(il,k-1)/5.**2*dz)691 ! print*,"me",il,k,mlim(il,k),buoy(il,k),wlim(il,k),mad(il,k)692 dz = (ph(il,k)-ph(il,k+1))/(p(il, k)/(rrd*tv(il, k))*RG)693 ! me(il,k)=betalim(il,k)*(m(il,k)+RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2*dz*mad(il,k))694 me(il,k)=betalim(il,k)*(m(il,k)+beta_coef(il,k)*dz*mad(il,k))695 ! print*,"B/w2",il,k,RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2*dz696 697 END IF698 699 !Modification of m700 m(il,k)=me(il,k)701 END DO702 END DO703 704 ! DO il = 1, ncum705 ! dz = (ph(il,icb(il))-ph(il,icb(il)+1))/(p(il, icb(il))/(rrd*tv(il, icb(il)))*RG)706 ! m(il,icb(il))=m(il,icb(il))+RG*coef_peel*buoy(il,icb(il))/tv(il,icb(il)) &707 ! /((wlim(il,icb(il))+wlim(il,icb(il)+1))/2.)**2*dz*mad(il,icb(il))708 ! print*,"wlim(icb)",icb(il),wlim(il,icb(il)),m(il,icb(il))709 ! ENDDO710 711 !Verification sum(me)=sum(m)712 DO k = nl,1,-1713 DO il = 1, ncum714 med(il,k)=med(il,k+1)+m(il,k+1)715 ! print*,"somme(me),somme(m)",il,k,icb(il),med(il,k),md(il,k),me(il,k),m(il,k),wlim(il,k)716 ENDDO717 ENDDO718 719 702 ! 703 !Verification sum(me)=sum(m) 704 DO k = 1,nd !jyg: initialization up to nd 705 DO il = 1, ncum 706 md(il,k)=0. 707 med(il,k)=0. 708 ENDDO 709 ENDDO 710 ! 711 DO k = nl,1,-1 712 DO il = 1, ncum 713 md(il,k)=md(il,k+1)+m(il,k+1) 714 ENDDO 715 ENDDO 716 ! 717 DO k = nl,1,-1 718 DO il = 1, ncum 719 IF ((k>=(icb(il))) .AND. (k<=inb(il))) THEN 720 mad(il,k)=mad(il,k+1)+m(il,k+1) 721 ENDIF 722 ! print*,"mad",il,k,mad(il,k) 723 ENDDO 724 ENDDO 725 ! 726 !CR: erosion of each adiabatic ascent during its ascent 727 ! 728 !Computation of erosion coefficient beta_coef 729 DO k = 1, nl 730 DO il = 1, ncum 731 IF ((k>=(icb(il)+1)) .AND. (k<=inb(il)) .AND. (mlim(il,k).gt.0.)) THEN 732 ! print*,"beta_coef",il,k,icb(il),inb(il),buoy(il,k),tv(il,k),wlim(il,k),wlim(il,k+1) 733 beta_coef(il,k)=RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2 734 ELSE 735 beta_coef(il,k)=0. 736 ENDIF 737 ENDDO 738 ENDDO 739 ! 740 ! print*,"apres beta_coef" 741 ! 742 DO k = 1, nl 743 DO il = 1, ncum 744 ! 745 IF ((k>=(icb(il)+1)) .AND. (k<=inb(il))) THEN 746 ! 747 ! print*,"dz",il,k,tv(il, k-1) 748 dz = (ph(il,k-1)-ph(il,k))/(p(il, k-1)/(rrd*tv(il, k-1))*RG) 749 betalim(il,k)=betalim(il,k-1)*exp(-1.*beta_coef(il,k-1)*dz) 750 ! betalim(il,k)=betalim(il,k-1)*exp(-RG*coef_peel*buoy(il,k-1)/tv(il,k-1)/5.**2*dz) 751 ! print*,"me",il,k,mlim(il,k),buoy(il,k),wlim(il,k),mad(il,k) 752 dz = (ph(il,k)-ph(il,k+1))/(p(il, k)/(rrd*tv(il, k))*RG) 753 ! me(il,k)=betalim(il,k)*(m(il,k)+RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2*dz*mad(il,k)) 754 me(il,k)=betalim(il,k)*(m(il,k)+beta_coef(il,k)*dz*mad(il,k)) 755 ! print*,"B/w2",il,k,RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2*dz 756 ! 757 END IF 758 ! 759 !Modification of m 760 m(il,k)=me(il,k) 761 END DO 762 END DO 763 ! 764 ! DO il = 1, ncum 765 ! dz = (ph(il,icb(il))-ph(il,icb(il)+1))/(p(il, icb(il))/(rrd*tv(il, icb(il)))*RG) 766 ! m(il,icb(il))=m(il,icb(il))+RG*coef_peel*buoy(il,icb(il))/tv(il,icb(il)) & 767 ! /((wlim(il,icb(il))+wlim(il,icb(il)+1))/2.)**2*dz*mad(il,icb(il)) 768 ! print*,"wlim(icb)",icb(il),wlim(il,icb(il)),m(il,icb(il)) 769 ! ENDDO 770 ! 771 !Verification sum(me)=sum(m) 772 DO k = nl,1,-1 773 DO il = 1, ncum 774 med(il,k)=med(il,k+1)+m(il,k+1) 775 ! print*,"somme(me),somme(m)",il,k,icb(il),med(il,k),md(il,k),me(il,k),m(il,k),wlim(il,k) 776 ENDDO 777 ENDDO 778 ! 779 ! 720 780 ENDIF !(iflag_mix_adiab) 721 781 !RC … … 759 819 760 820 ! c 4. Introduce a correcting factor for coef, in order to obtain an 761 ! effective 762 ! c sigdz larger in the present case (using cv3p1_closure) than in the 763 ! old 821 ! effective sigdz larger in the present case (using cv3p1_closure) 822 ! than in the old 764 823 ! c closure (using cv3_closure). 765 824 IF (1==0) THEN
Note: See TracChangeset
for help on using the changeset viewer.
