Changeset 4094 for LMDZ6/trunk/libf/phylmd/thermcell_plume_6A.F90
- Timestamp:
- Mar 14, 2022, 1:45:50 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/thermcell_plume_6A.F90
r4089 r4094 2 2 ! $Id$ 3 3 ! 4 SUBROUTINE thermcell_plume_6A(itap,ngrid, klev,ptimestep,ztv,zthl,po,zl,rhobarz, &4 SUBROUTINE thermcell_plume_6A(itap,ngrid,nlay,ptimestep,ztv,zthl,po,zl,rhobarz, & 5 5 & zlev,pplev,pphi,zpspsk,alim_star,alim_star_tot, & 6 6 & lalim,f0,detr_star,entr_star,f_star,csc,ztva, & … … 19 19 IMPLICIT NONE 20 20 21 integer,intent(in) :: itap,lev_out,lunout1,igout,ngrid, klev21 integer,intent(in) :: itap,lev_out,lunout1,igout,ngrid,nlay 22 22 real,intent(in) :: ptimestep 23 real,intent(in),dimension(ngrid, klev) :: ztv24 real,intent(in),dimension(ngrid, klev) :: zthl25 real,intent(in),dimension(ngrid, klev) :: po26 real,intent(in),dimension(ngrid, klev) :: zl27 real,intent(in),dimension(ngrid, klev) :: rhobarz28 real,intent(in),dimension(ngrid, klev+1) :: zlev29 real,intent(in),dimension(ngrid, klev+1) :: pplev30 real,intent(in),dimension(ngrid, klev) :: pphi31 real,intent(in),dimension(ngrid, klev) :: zpspsk23 real,intent(in),dimension(ngrid,nlay) :: ztv 24 real,intent(in),dimension(ngrid,nlay) :: zthl 25 real,intent(in),dimension(ngrid,nlay) :: po 26 real,intent(in),dimension(ngrid,nlay) :: zl 27 real,intent(in),dimension(ngrid,nlay) :: rhobarz 28 real,intent(in),dimension(ngrid,nlay+1) :: zlev 29 real,intent(in),dimension(ngrid,nlay+1) :: pplev 30 real,intent(in),dimension(ngrid,nlay) :: pphi 31 real,intent(in),dimension(ngrid,nlay) :: zpspsk 32 32 real,intent(in),dimension(ngrid) :: f0 33 33 34 34 integer,intent(out) :: lalim(ngrid) 35 real,intent(out),dimension(ngrid, klev) :: alim_star35 real,intent(out),dimension(ngrid,nlay) :: alim_star 36 36 real,intent(out),dimension(ngrid) :: alim_star_tot 37 real,intent(out),dimension(ngrid, klev) :: detr_star38 real,intent(out),dimension(ngrid, klev) :: entr_star39 real,intent(out),dimension(ngrid, klev+1) :: f_star40 real,intent(out),dimension(ngrid, klev) :: csc41 real,intent(out),dimension(ngrid, klev) :: ztva42 real,intent(out),dimension(ngrid, klev) :: ztla43 real,intent(out),dimension(ngrid, klev) :: zqla44 real,intent(out),dimension(ngrid, klev) :: zqta45 real,intent(out),dimension(ngrid, klev) :: zha46 real,intent(out),dimension(ngrid, klev+1) :: zw247 real,intent(out),dimension(ngrid, klev+1) :: w_est48 real,intent(out),dimension(ngrid, klev) :: ztva_est49 real,intent(out),dimension(ngrid, klev) :: zqsatth50 integer,intent(out),dimension(ngrid) :: lmix (ngrid)51 integer,intent(out),dimension(ngrid) :: lmix_bis (ngrid)52 real,intent(out),dimension(ngrid) :: linter (ngrid)37 real,intent(out),dimension(ngrid,nlay) :: detr_star 38 real,intent(out),dimension(ngrid,nlay) :: entr_star 39 real,intent(out),dimension(ngrid,nlay+1) :: f_star 40 real,intent(out),dimension(ngrid,nlay) :: csc 41 real,intent(out),dimension(ngrid,nlay) :: ztva 42 real,intent(out),dimension(ngrid,nlay) :: ztla 43 real,intent(out),dimension(ngrid,nlay) :: zqla 44 real,intent(out),dimension(ngrid,nlay) :: zqta 45 real,intent(out),dimension(ngrid,nlay) :: zha 46 real,intent(out),dimension(ngrid,nlay+1) :: zw2 47 real,intent(out),dimension(ngrid,nlay+1) :: w_est 48 real,intent(out),dimension(ngrid,nlay) :: ztva_est 49 real,intent(out),dimension(ngrid,nlay) :: zqsatth 50 integer,intent(out),dimension(ngrid) :: lmix 51 integer,intent(out),dimension(ngrid) :: lmix_bis 52 real,intent(out),dimension(ngrid) :: linter 53 53 54 54 REAL zdw2,zdw2bis 55 55 REAL zw2modif 56 56 REAL zw2fact,zw2factbis 57 REAL zeps(ngrid, klev)57 REAL zeps(ngrid,nlay) 58 58 59 59 REAL wmaxa(ngrid) … … 62 62 integer nbpb 63 63 64 real,dimension(ngrid, klev) :: detr65 real,dimension(ngrid, klev) :: entr66 real,dimension(ngrid, klev+1) :: wa_moy67 real,dimension(ngrid, klev) :: ztv_est64 real,dimension(ngrid,nlay) :: detr 65 real,dimension(ngrid,nlay) :: entr 66 real,dimension(ngrid,nlay+1) :: wa_moy 67 real,dimension(ngrid,nlay) :: ztv_est 68 68 real,dimension(ngrid) :: ztemp,zqsat 69 real,dimension(ngrid, klev) :: zqla_est70 real,dimension(ngrid, klev) :: zta_est71 72 real zdz,zbuoy(ngrid, klev),zalpha,gamma(ngrid,klev),zdqt(ngrid,klev),zw2m73 real zbuoyjam(ngrid, klev),zdqtjam(ngrid,klev)69 real,dimension(ngrid,nlay) :: zqla_est 70 real,dimension(ngrid,nlay) :: zta_est 71 72 real zdz,zbuoy(ngrid,nlay),zalpha,gamma(ngrid,nlay),zdqt(ngrid,nlay),zw2m 73 real zbuoyjam(ngrid,nlay),zdqtjam(ngrid,nlay) 74 74 real zbuoybis,zdz2,zdz3,lmel,entrbis,zdzbis 75 75 real d_temp(ngrid) … … 85 85 REAL fact_gamma,fact_gamma2,fact_epsilon2 86 86 REAL coefc 87 REAL c2(ngrid, klev)87 REAL c2(ngrid,nlay) 88 88 89 89 if (ngrid==1) print*,'THERMCELL PLUME MODIFIE 2014/07/11' … … 148 148 ! du panache 149 149 ! Cet appel pourrait être fait avant thermcell_plume dans thermcell_main 150 CALL thermcell_alim(thermals_flag_alim,ngrid, klev,ztv,d_temp,zlev,alim_star,lalim)150 CALL thermcell_alim(thermals_flag_alim,ngrid,nlay,ztv,d_temp,zlev,alim_star,lalim) 151 151 152 152 !------------------------------------------------------------------------------ … … 177 177 !boucle de calcul de la vitesse verticale dans le thermique 178 178 !============================================================================== 179 do l=2, klev-1179 do l=2,nlay-1 180 180 !============================================================================== 181 181 … … 372 372 ! & (exp(-zw2factbis)*(w_est(ig,l-1)-zdw2bis)+zdw2)) 373 373 374 374 w_est(ig,l+1)=Max(0.0001,exp(-zw2fact)*(w_est(ig,l)-zdw2)+zdw2) 375 375 376 376 ! Nouvelle version Arnaud … … 380 380 ! & (exp(-zw2factbis)*(w_est(ig,l-1)-zdw2bis)+zdw2)) 381 381 382 382 w_est(ig,l+1)=Max(0.0001,exp(-zw2fact)*(w_est(ig,l)-zdw2bis)+zdw2) 383 383 384 384 ! w_est(ig,l+1)=Max(0.0001,(zdz/(zdzbis+zdz))*(exp(-zw2fact)* & … … 413 413 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 414 414 415 415 w_est(ig,l+1)=Max(0.0001,exp(-zw2fact)*(w_est(ig,l)-zdw2bis)+zdw2) 416 416 417 417 … … 478 478 & + detr_q_coef*(zdqt(ig,l)/zw2m)**detr_q_power)) 479 479 480 ! 481 ! & 480 ! detr_star(ig,l)=(zdz/zdzbis)*detr_star(ig,l)+ & 481 ! & ((zdzbis-zdz)/zdzbis)*detr_star(ig,l-1) 482 482 483 483 zbuoy(ig,l)=RG*(ztva_est(ig,l)-ztv(ig,l))/ztv(ig,l) … … 496 496 497 497 498 ! 499 ! & 498 ! entr_star(ig,l)=(zdz/zdzbis)*entr_star(ig,l)+ & 499 ! & ((zdzbis-zdz)/zdzbis)*entr_star(ig,l-1) 500 500 501 501 ! entr_star(ig,l)=Max(0.,f_star(ig,l)*zdz*zbetalpha* & … … 576 576 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 577 577 if (iflag_thermals_ed==8) then 578 578 zw2(ig,l+1)=Max(0.0001,exp(-zw2fact)*(zw2(ig,l)-zdw2)+zdw2) 579 579 else 580 580 zw2(ig,l+1)=Max(0.0001,exp(-zw2fact)*(zw2(ig,l)-zdw2bis)+zdw2) 581 581 endif 582 582 ! zw2(ig,l+1)=Max(0.0001,(zdz/(zdz+zdzbis))*(exp(-zw2fact)* & … … 599 599 ! & (exp(-zw2factbis)*(zw2(ig,l-1)-zdw2bis)+zdw2)) 600 600 ! zw2(ig,l+1)=Max(0.0001,(zw2(ig,l)+zdw2*zw2fact)*exp(-zw2fact)) 601 601 zw2(ig,l+1)=Max(0.0001,exp(-zw2fact)*(zw2(ig,l)-zdw2bis)+zdw2) 602 602 603 603 endif … … 672 672 #undef wrgrads_thermcell 673 673 #ifdef wrgrads_thermcell 674 call wrgradsfi(1, klev,entr_star(igout,1:klev),'esta ','esta ')675 call wrgradsfi(1, klev,detr_star(igout,1:klev),'dsta ','dsta ')676 call wrgradsfi(1, klev,zbuoy(igout,1:klev),'buoy ','buoy ')677 call wrgradsfi(1, klev,zdqt(igout,1:klev),'dqt ','dqt ')678 call wrgradsfi(1, klev,w_est(igout,1:klev),'w_est ','w_est ')679 call wrgradsfi(1, klev,w_est(igout,2:klev+1),'w_es2 ','w_es2 ')680 call wrgradsfi(1, klev,zw2(igout,1:klev),'zw2A ','zw2A ')674 call wrgradsfi(1,nlay,entr_star(igout,1:nlay),'esta ','esta ') 675 call wrgradsfi(1,nlay,detr_star(igout,1:nlay),'dsta ','dsta ') 676 call wrgradsfi(1,nlay,zbuoy(igout,1:nlay),'buoy ','buoy ') 677 call wrgradsfi(1,nlay,zdqt(igout,1:nlay),'dqt ','dqt ') 678 call wrgradsfi(1,nlay,w_est(igout,1:nlay),'w_est ','w_est ') 679 call wrgradsfi(1,nlay,w_est(igout,2:nlay+1),'w_es2 ','w_es2 ') 680 call wrgradsfi(1,nlay,zw2(igout,1:nlay),'zw2A ','zw2A ') 681 681 #endif 682 682 683 683 684 return 684 include "dump_param.h" ! replay automatic include 685 RETURN 685 686 end 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 687 715 688 … … 725 698 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 726 699 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 727 SUBROUTINE thermcell_plume_5B(itap,ngrid, klev,ptimestep,ztv,zthl,po,zl,rhobarz, &700 SUBROUTINE thermcell_plume_5B(itap,ngrid,nlay,ptimestep,ztv,zthl,po,zl,rhobarz, & 728 701 & zlev,pplev,pphi,zpspsk,alim_star,alim_star_tot, & 729 702 & lalim,f0,detr_star,entr_star,f_star,csc,ztva, & … … 743 716 INTEGER itap 744 717 INTEGER lunout1,igout 745 INTEGER ngrid, klev718 INTEGER ngrid,nlay 746 719 REAL ptimestep 747 REAL ztv(ngrid, klev)748 REAL zthl(ngrid, klev)749 REAL po(ngrid, klev)750 REAL zl(ngrid, klev)751 REAL rhobarz(ngrid, klev)752 REAL zlev(ngrid, klev+1)753 REAL pplev(ngrid, klev+1)754 REAL pphi(ngrid, klev)755 REAL zpspsk(ngrid, klev)756 REAL alim_star(ngrid, klev)720 REAL ztv(ngrid,nlay) 721 REAL zthl(ngrid,nlay) 722 REAL po(ngrid,nlay) 723 REAL zl(ngrid,nlay) 724 REAL rhobarz(ngrid,nlay) 725 REAL zlev(ngrid,nlay+1) 726 REAL pplev(ngrid,nlay+1) 727 REAL pphi(ngrid,nlay) 728 REAL zpspsk(ngrid,nlay) 729 REAL alim_star(ngrid,nlay) 757 730 REAL f0(ngrid) 758 731 INTEGER lalim(ngrid) … … 762 735 real alim_star_tot(ngrid) 763 736 764 REAL ztva(ngrid, klev)765 REAL ztla(ngrid, klev)766 REAL zqla(ngrid, klev)767 REAL zqta(ngrid, klev)768 REAL zha(ngrid, klev)769 770 REAL detr_star(ngrid, klev)737 REAL ztva(ngrid,nlay) 738 REAL ztla(ngrid,nlay) 739 REAL zqla(ngrid,nlay) 740 REAL zqta(ngrid,nlay) 741 REAL zha(ngrid,nlay) 742 743 REAL detr_star(ngrid,nlay) 771 744 REAL coefc 772 REAL entr_star(ngrid, klev)773 REAL detr(ngrid, klev)774 REAL entr(ngrid, klev)775 776 REAL csc(ngrid, klev)777 778 REAL zw2(ngrid, klev+1)779 REAL w_est(ngrid, klev+1)780 REAL f_star(ngrid, klev+1)781 REAL wa_moy(ngrid, klev+1)782 783 REAL ztva_est(ngrid, klev)784 REAL zqla_est(ngrid, klev)785 REAL zqsatth(ngrid, klev)786 REAL zta_est(ngrid, klev)787 REAL zbuoyjam(ngrid, klev)745 REAL entr_star(ngrid,nlay) 746 REAL detr(ngrid,nlay) 747 REAL entr(ngrid,nlay) 748 749 REAL csc(ngrid,nlay) 750 751 REAL zw2(ngrid,nlay+1) 752 REAL w_est(ngrid,nlay+1) 753 REAL f_star(ngrid,nlay+1) 754 REAL wa_moy(ngrid,nlay+1) 755 756 REAL ztva_est(ngrid,nlay) 757 REAL zqla_est(ngrid,nlay) 758 REAL zqsatth(ngrid,nlay) 759 REAL zta_est(ngrid,nlay) 760 REAL zbuoyjam(ngrid,nlay) 788 761 REAL ztemp(ngrid),zqsat(ngrid) 789 762 REAL zdw2 790 763 REAL zw2modif 791 764 REAL zw2fact 792 REAL zeps(ngrid, klev)765 REAL zeps(ngrid,nlay) 793 766 794 767 REAL linter(ngrid) … … 799 772 INTEGER ig,l,k 800 773 801 real zdz,zbuoy(ngrid, klev),zalpha,gamma(ngrid,klev),zdqt(ngrid,klev),zw2m774 real zdz,zbuoy(ngrid,nlay),zalpha,gamma(ngrid,nlay),zdqt(ngrid,nlay),zw2m 802 775 real zbuoybis 803 776 real zcor,zdelta,zcvm5,qlbef,zdz2 … … 807 780 LOGICAL active(ngrid),activetmp(ngrid) 808 781 REAL fact_gamma,fact_epsilon,fact_gamma2,fact_epsilon2 809 REAL c2(ngrid, klev)782 REAL c2(ngrid,nlay) 810 783 Zsat=.false. 811 784 ! Initialisation … … 869 842 ! Definition de l'alimentation 870 843 !------------------------------------------------------------------------- 871 do l=1, klev-1844 do l=1,nlay-1 872 845 do ig=1,ngrid 873 846 if (ztv(ig,l)> ztv(ig,l+1) .and. ztv(ig,1)>=ztv(ig,l) ) then … … 879 852 enddo 880 853 enddo 881 do l=1, klev854 do l=1,nlay 882 855 do ig=1,ngrid 883 856 if (alim_star_tot(ig) > 1.e-10 ) then … … 917 890 !boucle de calcul de la vitesse verticale dans le thermique 918 891 !============================================================================== 919 do l=2, klev-1892 do l=2,nlay-1 920 893 !============================================================================== 921 894 … … 1117 1090 #undef wrgrads_thermcell 1118 1091 #ifdef wrgrads_thermcell 1119 call wrgradsfi(1, klev,entr_star(igout,1:klev),'esta ','esta ')1120 call wrgradsfi(1, klev,detr_star(igout,1:klev),'dsta ','dsta ')1121 call wrgradsfi(1, klev,zbuoy(igout,1:klev),'buoy ','buoy ')1122 call wrgradsfi(1, klev,zdqt(igout,1:klev),'dqt ','dqt ')1123 call wrgradsfi(1, klev,w_est(igout,1:klev),'w_est ','w_est ')1124 call wrgradsfi(1, klev,w_est(igout,2:klev+1),'w_es2 ','w_es2 ')1125 call wrgradsfi(1, klev,zw2(igout,1:klev),'zw2A ','zw2A ')1092 call wrgradsfi(1,nlay,entr_star(igout,1:nlay),'esta ','esta ') 1093 call wrgradsfi(1,nlay,detr_star(igout,1:nlay),'dsta ','dsta ') 1094 call wrgradsfi(1,nlay,zbuoy(igout,1:nlay),'buoy ','buoy ') 1095 call wrgradsfi(1,nlay,zdqt(igout,1:nlay),'dqt ','dqt ') 1096 call wrgradsfi(1,nlay,w_est(igout,1:nlay),'w_est ','w_est ') 1097 call wrgradsfi(1,nlay,w_est(igout,2:nlay+1),'w_es2 ','w_es2 ') 1098 call wrgradsfi(1,nlay,zw2(igout,1:nlay),'zw2A ','zw2A ') 1126 1099 #endif 1127 1100
Note: See TracChangeset
for help on using the changeset viewer.