MODULE lmdz_thermcell_closure ! ! $Header$ ! CONTAINS SUBROUTINE thermcell_closure(ngrid,nlay,r_aspect,ptimestep,rho, & & zlev,lalim,alim_star,zmax,wmax,f) !------------------------------------------------------------------------- !thermcell_closure: fermeture, determination de f ! ! Modification 7 septembre 2009 ! 1. On enleve alim_star_tot des arguments pour le recalculer et etre ainis ! coherent avec l'integrale au numerateur. ! 2. On ne garde qu'une version des couples wmax,zmax et wmax_sec,zmax_sec ! l'idee etant que le choix se fasse a l'appel de thermcell_closure ! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if !------------------------------------------------------------------------- IMPLICIT NONE ! --- arguments ------------------------------------------ integer, intent(in) :: ngrid,nlay real, intent(in) :: r_aspect,ptimestep real, intent(in), dimension(ngrid,nlay) :: alim_star,rho,zlev integer, intent(in), dimension(ngrid) :: lalim real, intent(in), dimension(ngrid) :: zmax,wmax real, intent(out), dimension(ngrid) :: f ! --- local ------------------------------------------ real, dimension(ngrid) :: zdenom,alim_star2,alim_star_tot INTEGER llmax INTEGER ig,k !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !print*,'THERMCELL CLOSURE 26E' alim_star2(:)=0. alim_star_tot(:)=0. f(:)=0. ! Indice vertical max (max de lalim) atteint par les thermiques sur le domaine llmax=1 do ig=1,ngrid if (lalim(ig)>llmax) llmax=lalim(ig) enddo ! Calcul des integrales sur la verticale de alim_star et de ! alim_star^2/(rho dz) do k=1,llmax-1 do ig=1,ngrid if (k1.e-10) then f(ig)=wmax(ig)*alim_star_tot(ig)/ & & (max(500.,zmax(ig))*r_aspect*alim_star2(ig)) endif enddo RETURN end END MODULE lmdz_thermcell_closure