Changeset 2127 for trunk/LMDZ.GENERIC/libf/phystd/thermcell_closure.F90
- Timestamp:
- Apr 29, 2019, 10:07:47 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/phystd/thermcell_closure.F90
r2064 r2127 2 2 ! 3 3 ! 4 SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev, & 5 & lalim,alim_star,f_star, & 6 & zmax,wmax,f,lev_out) 4 SUBROUTINE thermcell_closure(ngrid,nlay,ptimestep,rho,zlev, & 5 lmax,alim_star,zmax,wmax,f) 7 6 8 !============================================================================== 9 ! thermcell_closure: fermeture, determination de f7 !=============================================================================== 8 ! Purpose: fermeture, determination de f 10 9 ! 11 10 ! Modification 7 septembre 2009 … … 15 14 ! l'idee etant que le choix se fasse a l'appel de thermcell_closure 16 15 ! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if 17 !============================================================================== 16 !=============================================================================== 18 17 19 18 USE thermcell_mod … … 22 21 23 22 24 !============================================================================= 23 !=============================================================================== 25 24 ! Declaration 26 !============================================================================= 25 !=============================================================================== 27 26 28 ! inputs:29 ! 27 ! Inputs: 28 ! ------- 30 29 31 INTEGER ngrid,nlay 32 INTEGER lalim(ngrid) 33 INTEGER lev_out ! niveau pour les print 30 INTEGER ngrid, nlay 31 INTEGER lmax(ngrid) 34 32 35 REAL alim_star(ngrid,nlay) 36 REAL f_star(ngrid,nlay+1) 33 REAL ptimestep 37 34 REAL rho(ngrid,nlay) 38 35 REAL zlev(ngrid,nlay) 36 REAL alim_star(ngrid,nlay) 39 37 REAL zmax(ngrid) 40 38 REAL wmax(ngrid) 41 REAL ptimestep42 39 43 ! outputs:44 ! 40 ! Outputs: 41 ! -------- 45 42 46 43 REAL f(ngrid) 47 44 48 ! local:49 ! 45 ! Local: 46 ! ------ 50 47 51 INTEGER ig, k48 INTEGER ig, l 52 49 INTEGER llmax 53 50 … … 56 53 REAL zdenom(ngrid) 57 54 58 !============================================================================== 55 !=============================================================================== 59 56 ! Initialization 60 !============================================================================== 57 !=============================================================================== 61 58 62 59 alim_star2(:) = 0. … … 67 64 llmax = 1 68 65 69 !============================================================================== 66 !=============================================================================== 70 67 ! Closure 71 !============================================================================== 68 !=============================================================================== 72 69 73 !------------------------------------------------------------------------------ 74 ! Indice vertical max (max de lalim)atteint par les thermiques sur le domaine75 !------------------------------------------------------------------------------ 70 !------------------------------------------------------------------------------- 71 ! Indice vertical max atteint par les thermiques sur le domaine 72 !------------------------------------------------------------------------------- 76 73 77 74 DO ig=1,ngrid 78 IF (l alim(ig)>llmax) THEN79 llmax = l alim(ig)75 IF (lmax(ig).GT.llmax) THEN 76 llmax = lmax(ig) 80 77 ENDIF 81 78 ENDDO 82 79 83 !------------------------------------------------------------------------------ 80 !------------------------------------------------------------------------------- 84 81 ! Calcul des integrales sur la verticale de alim_star et de alim_star^2/(rho dz) 85 !------------------------------------------------------------------------------ 82 !------------------------------------------------------------------------------- 86 83 87 DO k=1,llmax-184 DO l=1,llmax-1 88 85 DO ig=1,ngrid 89 IF ( k<lalim(ig)) THEN90 alim_star2(ig) = alim_star2(ig) + alim_star(ig, k)**2 &91 & / (rho(ig, k) * (zlev(ig,k+1) - zlev(ig,k)))92 alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig, k)86 IF (l < lmax(ig)) THEN 87 alim_star2(ig) = alim_star2(ig) + alim_star(ig,l)**2 & 88 & / (rho(ig,l) * (zlev(ig,l+1) - zlev(ig,l))) 89 alim_star_tot(ig) = alim_star_tot(ig) + alim_star(ig,l) 93 90 ENDIF 94 91 ENDDO … … 96 93 97 94 DO ig=1,ngrid 98 IF (alim_star2(ig) >1.e-10) THEN95 IF (alim_star2(ig).GT.0.) THEN 99 96 f(ig) = wmax(ig) * alim_star_tot(ig) & 100 & / (max(500.,zmax(ig)) * r_aspect_thermals * alim_star2(ig)) 97 & / (max(1.,zmax(ig)) * r_aspect_thermals * alim_star2(ig)) 98 ELSE 99 f(ig) = 0. 101 100 ENDIF 102 101 ENDDO 103 102 103 104 104 RETURN 105 105 END
Note: See TracChangeset
for help on using the changeset viewer.