Changeset 1403 for LMDZ4/trunk/libf/phylmd/thermcell_init.F90
- Timestamp:
- Jul 1, 2010, 11:02:53 AM (14 years ago)
- Location:
- LMDZ4/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk
- Property svn:mergeinfo changed
-
LMDZ4/trunk/libf/phylmd/thermcell_init.F90
r1057 r1403 1 ! 2 ! $Header$ 3 ! 1 4 SUBROUTINE thermcell_init(ngrid,nlay,ztv,zlay,zlev, & 2 5 & lalim,lmin,alim_star,alim_star_tot,lev_out) … … 26 29 !def des alim_star tels que alim=f*alim_star 27 30 28 do l=1,nlay29 do ig=1,ngrid30 alim_star(ig,l)=0.31 enddo32 enddo33 ! determination de la longueur de la couche d entrainement34 do ig=1,ngrid35 lalim(ig)=136 enddo37 31 38 if (iflag_thermals_ed.ge.1) then 39 !si la première couche est instable, on declenche un thermique 32 write(lunout,*)'THERM INIT V20C ' 33 34 alim_star_tot(:)=0. 35 alim_star(:,:)=0. 36 lmin(:)=1 37 lalim(:)=1 38 39 do l=1,nlay-1 40 40 do ig=1,ngrid 41 if (ztv(ig,1).gt.ztv(ig,2)) then 42 lmin(ig)=1 43 lalim(ig)=2 44 alim_star(ig,1)=1. 45 alim_star_tot(ig)=alim_star(ig,1) 46 if(prt_level.GE.10) print*,'init',alim_star(ig,1),alim_star_tot(ig) 47 else 48 lmin(ig)=1 49 lalim(ig)=1 50 alim_star(ig,1)=0. 51 alim_star_tot(ig)=0. 52 endif 53 enddo 54 55 else 56 !else iflag_thermals_ed=0 ancienne def de l alim 57 58 !on ne considere que les premieres couches instables 59 do l=nlay-2,1,-1 60 do ig=1,ngrid 61 if (ztv(ig,l).gt.ztv(ig,l+1).and. & 62 & ztv(ig,l+1).le.ztv(ig,l+2)) then 63 lalim(ig)=l+1 64 endif 65 enddo 66 enddo 67 68 ! determination du lmin: couche d ou provient le thermique 69 70 do ig=1,ngrid 71 ! FH initialisation de lmin a nlay plutot que 1. 72 ! lmin(ig)=nlay 73 lmin(ig)=1 74 enddo 75 do l=nlay,2,-1 76 do ig=1,ngrid 77 if (ztv(ig,l-1).gt.ztv(ig,l)) then 78 lmin(ig)=l-1 41 if (ztv(ig,l)> ztv(ig,l+1) .and. ztv(ig,1)>=ztv(ig,l) ) then 42 alim_star(ig,l)=MAX((ztv(ig,l)-ztv(ig,l+1)),0.) & 43 & *sqrt(zlev(ig,l+1)) 44 lalim(:)=l+1 45 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,l) 79 46 endif 80 47 enddo 81 48 enddo 82 ! 83 zzalim(:)=0. 84 do l=1,nlay-1 49 do l=1,nlay 85 50 do ig=1,ngrid 86 if (l<lalim(ig)) then 87 zzalim(ig)=zzalim(ig)+zlay(ig,l)*(ztv(ig,l)-ztv(ig,l+1)) 88 endif 89 enddo 90 enddo 91 do ig=1,ngrid 92 if (lalim(ig)>1) then 93 zzalim(ig)=zlay(ig,1)+zzalim(ig)/(ztv(ig,1)-ztv(ig,lalim(ig))) 94 else 95 zzalim(ig)=zlay(ig,1) 96 endif 97 enddo 98 99 if(prt_level.GE.10) print*,'ZZALIM LALIM ',zzalim,lalim,zlay(1,lalim(1)) 100 101 ! definition de l'entrainement des couches 102 if (1.eq.1) then 103 do l=1,nlay-1 104 do ig=1,ngrid 105 if (ztv(ig,l).gt.ztv(ig,l+1).and. & 106 & l.ge.lmin(ig).and.l.lt.lalim(ig)) then 107 !def possibles pour alim_star: zdthetadz, dthetadz, zdtheta 108 alim_star(ig,l)=MAX((ztv(ig,l)-ztv(ig,l+1)),0.) & 109 & *sqrt(zlev(ig,l+1)) 110 endif 111 enddo 112 enddo 113 else 114 do l=1,nlay-1 115 do ig=1,ngrid 116 if (ztv(ig,l).gt.ztv(ig,l+1).and. & 117 & l.ge.lmin(ig).and.l.lt.lalim(ig)) then 118 alim_star(ig,l)=max(3.*zzalim(ig)-zlay(ig,l),0.) & 119 & *(zlev(ig,l+1)-zlev(ig,l)) 120 endif 121 enddo 122 enddo 123 endif 124 125 ! pas de thermique si couche 1 stable 126 do ig=1,ngrid 127 !CRnouveau test 128 if (alim_star(ig,1).lt.1.e-10) then 129 do l=1,nlay 130 alim_star(ig,l)=0. 131 enddo 132 lmin(ig)=1 133 endif 134 enddo 135 ! calcul de l alimentation totale 136 do ig=1,ngrid 137 alim_star_tot(ig)=0. 138 enddo 139 do l=1,nlay 140 do ig=1,ngrid 141 alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,l) 142 enddo 143 enddo 144 ! 145 ! Calcul entrainement normalise 146 do l=1,nlay 147 do ig=1,ngrid 148 if (alim_star_tot(ig).gt.1.e-10) then 51 if (alim_star_tot(ig) > 1.e-10 ) then 149 52 alim_star(ig,l)=alim_star(ig,l)/alim_star_tot(ig) 150 53 endif 151 54 enddo 152 55 enddo 153 154 !on remet alim_star_tot a 1 155 do ig=1,ngrid 156 alim_star_tot(ig)=1. 157 enddo 56 alim_star_tot(:)=1. 158 57 159 endif 160 !endif iflag_thermals_ed 161 return 58 return 162 59 end
Note: See TracChangeset
for help on using the changeset viewer.