--- trunk/phylmd/Thermcell/thermcell.f90 2013/11/15 18:45:49 76 +++ trunk/Sources/phylmd/Thermcell/thermcell.f 2016/03/11 18:47:26 178 @@ -8,17 +8,17 @@ po, pduadj, pdvadj, pdtadj, pdoadj, fm0, entr0, r_aspect, l_mix, w2di, & tho) - ! Calcul du transport vertical dans la couche limite en présence - ! de "thermiques" explicitement représentés. Récriture à partir - ! d'un listing papier à Habas, le 14/02/00. Le thermique est - ! supposé homogène et dissipé par mélange avec son - ! environnement. La longueur "l_mix" contrôle l'efficacité du - ! mélange. Le calcul du transport des différentes espèces se fait + ! Calcul du transport vertical dans la couche limite en pr\'esence + ! de "thermiques" explicitement repr\'esent\'es. R\'ecriture \`a partir + ! d'un listing papier \`a Habas, le 14/02/00. Le thermique est + ! suppos\'e homog\`ene et dissip\'e par m\'elange avec son + ! environnement. La longueur "l_mix" contr\^ole l'efficacit\'e du + ! m\'elange. Le calcul du transport des diff\'erentes esp\`eces se fait ! en prenant en compte : ! 1. un flux de masse montant ! 2. un flux de masse descendant - ! 3. un entraînement - ! 4. un détraînement + ! 3. un entra\^inement + ! 4. un d\'etra\^inement USE dimphy, ONLY : klev, klon USE suphec_m, ONLY : rd, rg, rkappa @@ -30,8 +30,10 @@ real ptimestep, l_mix, r_aspect REAL, intent(in):: pt(ngrid, nlay) real pdtadj(ngrid, nlay) - REAL pu(ngrid, nlay), pduadj(ngrid, nlay) - REAL pv(ngrid, nlay), pdvadj(ngrid, nlay) + REAL, intent(in):: pu(ngrid, nlay) + real pduadj(ngrid, nlay) + REAL, intent(in):: pv(ngrid, nlay) + real pdvadj(ngrid, nlay) REAL po(ngrid, nlay), pdoadj(ngrid, nlay) REAL, intent(in):: pplay(ngrid, nlay) real, intent(in):: pplev(ngrid, nlay+1) @@ -44,25 +46,17 @@ ! local: INTEGER ig, k, l, lmaxa(klon), lmix(klon) - real zsortie1d(klon) ! CR: on remplace lmax(klon, klev+1) INTEGER lmax(klon), lmin(klon), lentr(klon) real linter(klon) real zmix(klon), fracazmix(klon) - real zmax(klon), zw, zz, zw2(klon, klev+1), ztva(klon, klev), zzz + real zmax(klon), zw, zw2(klon, klev+1), ztva(klon, klev) - real zlev(klon, klev+1), zlay(klon, klev) + real zlev(klon, klev+1) REAL zh(klon, klev), zdhadj(klon, klev) REAL ztv(klon, klev) real zu(klon, klev), zv(klon, klev), zo(klon, klev) - REAL wh(klon, klev+1) - real wu(klon, klev+1), wv(klon, klev+1), wo(klon, klev+1) - real zla(klon, klev+1) - real zwa(klon, klev+1) - real zld(klon, klev+1) - real zwd(klon, klev+1) - real zsortie(klon, klev) real zva(klon, klev) real zua(klon, klev) real zoa(klon, klev) @@ -75,54 +69,33 @@ real thetath2(klon, klev), wth2(klon, klev) common/comtherm/thetath2, wth2 - real count_time - integer isplit, nsplit, ialt + integer nsplit parameter (nsplit=10) - data isplit/0/ - save isplit - logical sorties real rho(klon, klev), rhobarz(klon, klev+1), masse(klon, klev) real zpspsk(klon, klev) real wmax(klon), wmaxa(klon) - real wa(klon, klev, klev+1) - real wd(klon, klev+1) - real larg_part(klon, klev, klev+1) real fracd(klon, klev+1) real xxx(klon, klev+1) real larg_cons(klon, klev+1) real larg_detr(klon, klev+1) real fm0(klon, klev+1), entr0(klon, klev), detr(klon, klev) - real pu_therm(klon, klev), pv_therm(klon, klev) real fm(klon, klev+1), entr(klon, klev) real fmc(klon, klev+1) !CR:nouvelles variables real f_star(klon, klev+1), entr_star(klon, klev) real entr_star_tot(klon), entr_star2(klon) - real f(klon), f0(klon) + real f(klon) real zlevinter(klon) - logical first - data first /.false./ - save first - - character*2 str2 - character*10 str10 - - LOGICAL vtest(klon), down EXTERNAL SCOPY - integer ncorrec, ll - save ncorrec - data ncorrec/0/ - !----------------------------------------------------------------------- ! initialisation: - sorties=.true. IF(ngrid.NE.klon) THEN PRINT * PRINT *, 'STOP dans convadj' @@ -159,11 +132,6 @@ zlev(ig, 1)=0. zlev(ig, nlay+1)=(2.*pphi(ig, klev)-pphi(ig, klev-1))/RG enddo - do l=1, nlay - do ig=1, ngrid - zlay(ig, l)=pphi(ig, l)/RG - enddo - enddo ! Calcul des densites @@ -179,14 +147,6 @@ enddo enddo - do k=1, nlay - do l=1, nlay+1 - do ig=1, ngrid - wa(ig, k, l)=0. - enddo - enddo - enddo - ! Calcul de w2, quarre de w a partir de la cape ! a partir de w2, on calcule wa, vitesse de l'ascendance @@ -423,7 +383,7 @@ ! calcul de la largeur de chaque ascendance dans le cas conservatif. ! dans ce cas simple, on suppose que la largeur de l'ascendance provenant - ! d'une couche est égale à la hauteur de la couche alimentante. + ! d'une couche est \'egale \`a la hauteur de la couche alimentante. ! La vitesse maximale dans l'ascendance est aussi prise comme estimation ! de la vitesse d'entrainement horizontal dans la couche alimentante. @@ -448,7 +408,7 @@ enddo enddo - ! calcul de la fraction de la maille concernée par l'ascendance en tenant + ! calcul de la fraction de la maille concern\'ee par l'ascendance en tenant ! compte de l'epluchage du thermique. !CR def de zmix continu (profil parabolique des vitesses) @@ -563,9 +523,6 @@ do ig=1, ngrid if(fracd(ig, l).lt.0.1) then stop'fracd trop petit' - else - ! vitesse descendante "diagnostique" - wd(ig, l)=fm(ig, l)/(fracd(ig, l)*rhobarz(ig, l)) endif enddo enddo @@ -637,25 +594,6 @@ enddo enddo - print *, '14 OK convect8' - - ! Calculs pour les sorties - - if(sorties) then - do l=1, nlay - do ig=1, ngrid - zla(ig, l)=(1.-fracd(ig, l))*zmax(ig) - zld(ig, l)=fracd(ig, l)*zmax(ig) - if(1.-fracd(ig, l).gt.1.e-10) & - zwa(ig, l)=wd(ig, l)*fracd(ig, l)/(1.-fracd(ig, l)) - enddo - enddo - - isplit=isplit+1 - endif - - print *, '19 OK convect8' - end SUBROUTINE thermcell end module thermcell_m