--- trunk/phylmd/Thermcell/thermcell.f 2014/09/04 10:40:24 105 +++ 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 @@ -46,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) @@ -77,18 +69,13 @@ real thetath2(klon, klev), wth2(klon, klev) common/comtherm/thetath2, wth2 - integer isplit, nsplit + 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 fracd(klon, klev+1) real xxx(klon, klev+1) real larg_cons(klon, klev+1) @@ -102,26 +89,13 @@ real entr_star_tot(klon), entr_star2(klon) real f(klon) real zlevinter(klon) - logical first - data first /.false./ - save first - - character(len=2) str2 - character(len=10) str10 - - LOGICAL vtest(klon) EXTERNAL SCOPY - integer ncorrec - save ncorrec - data ncorrec/0/ - !----------------------------------------------------------------------- ! initialisation: - sorties=.true. IF(ngrid.NE.klon) THEN PRINT * PRINT *, 'STOP dans convadj' @@ -158,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 @@ -178,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 @@ -422,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. @@ -447,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) @@ -562,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 @@ -636,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