- Timestamp:
- Jan 14, 2010, 3:35:30 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmd/thermcell_closure.F90
r1146 r1294 1 ! 2 ! $Header$ 3 ! 1 4 SUBROUTINE thermcell_closure(ngrid,nlay,r_aspect,ptimestep,rho, & 2 & zlev,lalim,alim_star, alim_star_tot,zmax_sec,wmax_sec,zmax,wmax,f,lev_out)5 & zlev,lalim,alim_star,f_star,zmax,wmax,f,lev_out) 3 6 4 7 !------------------------------------------------------------------------- 5 8 !thermcell_closure: fermeture, determination de f 9 ! 10 ! Modification 7 septembre 2009 11 ! 1. On enleve alim_star_tot des arguments pour le recalculer et etre ainis 12 ! coherent avec l'integrale au numerateur. 13 ! 2. On ne garde qu'une version des couples wmax,zmax et wmax_sec,zmax_sec 14 ! l'idee etant que le choix se fasse a l'appel de thermcell_closure 15 ! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if 6 16 !------------------------------------------------------------------------- 7 17 IMPLICIT NONE … … 9 19 #include "iniprint.h" 10 20 #include "thermcell.h" 11 12 13 14 21 INTEGER ngrid,nlay 22 INTEGER ig,k 23 REAL r_aspect,ptimestep 24 integer lev_out ! niveau pour les print 15 25 16 INTEGER lalim(ngrid) 17 REAL alim_star(ngrid,nlay) 18 REAL alim_star_tot(ngrid) 19 REAL rho(ngrid,nlay) 20 REAL zlev(ngrid,nlay) 21 REAL zmax(ngrid),zmax_sec(ngrid) 22 REAL wmax(ngrid),wmax_sec(ngrid) 23 real zdenom 26 INTEGER lalim(ngrid) 27 REAL alim_star(ngrid,nlay) 28 REAL f_star(ngrid,nlay+1) 29 REAL rho(ngrid,nlay) 30 REAL zlev(ngrid,nlay) 31 REAL zmax(ngrid) 32 REAL wmax(ngrid) 33 REAL zdenom(ngrid) 34 REAL alim_star2(ngrid) 35 REAL f(ngrid) 24 36 25 REAL alim_star2(ngrid) 37 REAL alim_star_tot(ngrid) 38 INTEGER llmax 26 39 27 REAL f(ngrid) 40 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 41 print*,'THERMCELL CLOSURE 26E' 28 42 29 do ig=1,ngrid 30 alim_star2(ig)=0. 31 enddo 32 do ig=1,ngrid 33 if (alim_star(ig,1).LT.1.e-10) then 34 f(ig)=0. 35 else 36 do k=1,lalim(ig) 37 alim_star2(ig)=alim_star2(ig)+alim_star(ig,k)**2 & 38 & /(rho(ig,k)*(zlev(ig,k+1)-zlev(ig,k))) 39 enddo 40 zdenom=max(500.,zmax(ig))*r_aspect*alim_star2(ig) 41 if (zdenom<1.e-14) then 42 print*,'ig=',ig 43 print*,'alim_star2',alim_star2(ig) 44 print*,'zmax',zmax(ig) 45 print*,'r_aspect',r_aspect 46 print*,'zdenom',zdenom 47 print*,'alim_star',alim_star(ig,:) 48 print*,'zmax_sec',zmax_sec(ig) 49 print*,'wmax_sec',wmax_sec(ig) 50 stop 51 endif 52 if ((zmax_sec(ig).gt.1.e-10).and.(iflag_thermals_ed.eq.0)) then 53 f(ig)=wmax_sec(ig)*alim_star_tot(ig)/(max(500.,zmax_sec(ig))*r_aspect & 54 & *alim_star2(ig)) 55 ! f(ig)=f(ig)+(f0(ig)-f(ig))*exp((-ptimestep/ & 56 ! & zmax_sec(ig))*wmax_sec(ig)) 57 if(prt_level.GE.10) write(lunout,*)'closure dry',f(ig),wmax_sec(ig),alim_star_tot(ig),zmax_sec(ig) 58 else 59 f(ig)=wmax(ig)*alim_star_tot(ig)/zdenom 60 ! f(ig)=f(ig)+(f0(ig)-f(ig))*exp((-ptimestep/ & 61 ! & zmax(ig))*wmax(ig)) 62 if(prt_level.GE.10) print*,'closure moist',f(ig),wmax(ig),alim_star_tot(ig),zmax(ig) 63 endif 64 endif 65 ! f0(ig)=f(ig) 66 enddo 67 if (prt_level.ge.1) print*,'apres fermeture' 43 alim_star2(:)=0. 44 alim_star_tot(:)=0. 45 f(:)=0. 68 46 69 ! 47 ! Indice vertical max (max de lalim) atteint par les thermiques sur le domaine 48 llmax=1 49 do ig=1,ngrid 50 if (lalim(ig)>llmax) llmax=lalim(ig) 51 enddo 52 53 54 ! Calcul des integrales sur la verticale de alim_star et de 55 ! alim_star^2/(rho dz) 56 do k=1,llmax-1 57 do ig=1,ngrid 58 if (k<lalim(ig)) then 59 alim_star2(ig)=alim_star2(ig)+alim_star(ig,k)**2 & 60 & /(rho(ig,k)*(zlev(ig,k+1)-zlev(ig,k))) 61 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,k) 62 endif 63 enddo 64 enddo 65 66 67 do ig=1,ngrid 68 if (alim_star2(ig)>1.e-10) then 69 f(ig)=wmax(ig)*alim_star_tot(ig)/ & 70 & (max(500.,zmax(ig))*r_aspect*alim_star2(ig)) 71 endif 72 enddo 73 74 75 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 76 ! TESTS POUR UNE NOUVELLE FERMETURE DANS LAQUELLE ALIM_STAR NE SERAIT 77 ! PAS NORMALISE 78 ! f(ig)=f(ig)*f_star(ig,2)/(f_star(ig,lalim(ig))) 79 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 80 70 81 return 71 82 end
Note: See TracChangeset
for help on using the changeset viewer.