4 SUBROUTINE cv3_cine(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, tvp, &
23 INTEGER ncum, nd, nloc
24 INTEGER icb(nloc), inb(nloc)
25 REAL pbase(nloc), plcl(nloc)
26 REAL p(nloc, nd), ph(nloc, nd+1)
27 REAL tv(nloc, nd), tvp(nloc, nd)
30 REAL cina(nloc), cinb(nloc), plfc(nloc)
34 INTEGER itop(nloc), ineg(nloc), ilow(nloc)
35 INTEGER ifst(nloc), isublcl(nloc)
36 LOGICAL lswitch(nloc), lswitch1(nloc), lswitch2(nloc)
37 LOGICAL exist_lfc(nloc)
40 REAL buoylcl(nloc), tvplcl(nloc), tvlcl(nloc)
42 REAL buoyz(nloc), buoy(nloc, nd)
58 buoy(il, k) = tvp(il, k) - tv(il, k)
69 tvplcl(il) = tvp(il, 1)*(plcl(il)/p(il,1))**(2./7.)
73 IF (plcl(il)>p(il,icb(il)))
THEN
75 isublcl(il) = icb(il) - 1
77 ifst(il) = icb(il) + 1
83 tvlcl(il) = tv(il, ifst(il)-1) + (tv(il,ifst(il))-tv(il,ifst(il)-1))*( &
84 plcl(il)-p(il,ifst(il)-1))/(p(il,ifst(il))-p(il,ifst(il)-1))
88 buoylcl(il) = tvplcl(il) - tvlcl(il)
99 exist_lfc(il) = .
false.
103 IF (k>=ifst(il))
THEN
104 IF (buoy(il,k)>0.)
THEN
106 exist_lfc(il) = .
true.
119 IF (.NOT. exist_lfc(il))
THEN
137 lswitch1(il) = buoylcl(il) >= 0. .AND. exist_lfc(il)
138 lswitch(il) = lswitch1(il)
147 IF (lswitch(il))
THEN
148 IF (p(il,ineg(il))<p(il,icb(il))-dpmax)
THEN
159 lswitch2(il) = p(il, ineg(il)) >= p(il, icb(il)) - dpmax
160 lswitch(il) = lswitch1(il) .AND. lswitch2(il)
164 IF (lswitch(il))
THEN
170 IF (ineg(il)>isublcl(il)+1)
THEN
173 p0(il) = (buoy(il,ineg(il))*p(il,ineg(il)-1)-buoy(il,ineg( &
174 il)-1)*p(il,ineg(il)))/(buoy(il,ineg(il))-buoy(il,ineg(il)-1))
178 p0(il) = (buoy(il,ineg(il))*plcl(il)-buoylcl(il)*p(il,ineg(il)))/ &
179 (buoy(il,ineg(il))-buoylcl(il))
187 IF (lswitch(il))
THEN
194 IF (lswitch(il))
THEN
195 IF (k>=ineg(il) .AND. buoy(il,k)>0)
THEN
205 IF (lswitch(il))
THEN
206 plfc(il) = (buoy(il,itop(il))*p(il,itop(il)-1)-buoy(il,itop( &
207 il)-1)*p(il,itop(il)))/(buoy(il,itop(il))-buoy(il,itop(il)-1))
216 IF (lswitch(il))
THEN
217 deltap = p(il, itop(il)-1) - plfc(il)
218 dcin = rd*buoy(il, itop(il)-1)*deltap/(p(il,itop(il)-1)+plfc(il))
219 cina(il) = min(0., dcin)
226 IF (lswitch(il))
THEN
227 IF (k>=ineg(il) .AND. k<=itop(il)-2)
THEN
228 deltap = p(il, k) - p(il, k+1)
229 dcin = 0.5*rd*(buoy(il,k)+buoy(il,k+1))*deltap/ph(il, k+1)
230 cina(il) = cina(il) + min(0., dcin)
238 IF (lswitch(il))
THEN
239 deltap = p0(il) - p(il, ineg(il))
240 dcin = rd*buoy(il, ineg(il))*deltap/(p(il,ineg(il))+p0(il))
241 cina(il) = cina(il) + min(0., dcin)
251 lswitch1(il) = buoylcl(il) < 0. .AND. exist_lfc(il)
252 lswitch(il) = lswitch1(il)
261 IF (lswitch(il))
THEN
268 IF (lswitch(il) .AND. k<=icb(il)-1)
THEN
269 IF (buoy(il,k)<0.)
THEN
279 IF (lswitch(il))
THEN
281 p0(il) = (buoy(il,ilow(il))*p(il,ilow(il)-1)-buoy(il,ilow( &
282 il)-1)*p(il,ilow(il)))/(buoy(il,ilow(il))-buoy(il,ilow(il)-1))
286 buoyz(il) = buoy(il, 1)
295 lswitch2(il) = (isublcl(il)==1 .AND. ilow(il)==1) .OR. &
296 (isublcl(il)==ilow(il)-1)
297 lswitch(il) = lswitch1(il) .AND. lswitch2(il)
305 IF (lswitch(il))
THEN
306 deltap = p0(il) - plcl(il)
307 dcin = rd*(buoyz(il)+buoylcl(il))*deltap/(p0(il)+plcl(il))
308 cinb(il) = min(0., dcin)
313 lswitch(il) = lswitch1(il) .AND. .NOT. lswitch2(il)
322 IF (lswitch(il))
THEN
323 deltap = p0(il) - p(il, ilow(il))
324 dcin = rd*(buoyz(il)+buoy(il,ilow(il)))*deltap/(p0(il)+p(il,ilow(il)))
325 cinb(il) = min(0., dcin)
334 IF (lswitch(il) .AND. k>=ilow(il) .AND. k<=isublcl(il)-1)
THEN
335 deltap = p(il, k) - p(il, k+1)
336 dcin = 0.5*rd*(buoy(il,k)+buoy(il,k+1))*deltap/ph(il, k+1)
337 cinb(il) = cinb(il) + min(0., dcin)
344 IF (lswitch(il))
THEN
345 deltap = p(il, isublcl(il)) - plcl(il)
346 dcin = rd*(buoy(il,isublcl(il))+buoylcl(il))*deltap/ &
347 (p(il,isublcl(il))+plcl(il))
348 cinb(il) = cinb(il) + min(0., dcin)
359 lswitch2(il) = plcl(il) > p(il, itop(il)-1)
360 lswitch(il) = lswitch1(il) .AND. lswitch2(il)
368 IF (lswitch(il))
THEN
369 plfc(il) = (buoy(il,itop(il))*p(il,itop(il)-1)-buoy(il,itop( &
370 il)-1)*p(il,itop(il)))/(buoy(il,itop(il))-buoy(il,itop(il)-1))
376 IF (lswitch(il))
THEN
377 deltap = p(il, itop(il)-1) - plfc(il)
378 dcin = rd*buoy(il, itop(il)-1)*deltap/(p(il,itop(il)-1)+plfc(il))
379 cina(il) = min(0., dcin)
386 IF (lswitch(il) .AND. k>=icb(il)+1 .AND. k<=itop(il)-2)
THEN
387 deltap = p(il, k) - p(il, k+1)
388 dcin = 0.5*rd*(buoy(il,k)+buoy(il,k+1))*deltap/ph(il, k+1)
389 cina(il) = cina(il) + min(0., dcin)
396 IF (lswitch(il))
THEN
397 IF (plcl(il)>p(il,icb(il)))
THEN
398 IF (icb(il)<itop(il)-1)
THEN
399 deltap = p(il, icb(il)) - p(il, icb(il)+1)
400 dcin = 0.5*rd*(buoy(il,icb(il))+buoy(il,icb(il)+1))*deltap/ &
402 cina(il) = cina(il) + min(0., dcin)
405 deltap = plcl(il) - p(il, icb(il))
406 dcin = rd*(buoylcl(il)+buoy(il,icb(il)))*deltap/ &
407 (plcl(il)+p(il,icb(il)))
408 cina(il) = cina(il) + min(0., dcin)
410 deltap = plcl(il) - p(il, icb(il)+1)
411 dcin = rd*(buoylcl(il)+buoy(il,icb(il)+1))*deltap/ &
412 (plcl(il)+p(il,icb(il)+1))
413 cina(il) = cina(il) + min(0., dcin)
419 lswitch(il) = lswitch1(il) .AND. .NOT. lswitch2(il)
427 IF (lswitch(il))
THEN
428 plfc(il) = (buoy(il,itop(il))*plcl(il)-buoylcl(il)*p(il,itop(il)))/ &
429 (buoy(il,itop(il))-buoylcl(il))
434 IF (lswitch(il))
THEN
435 deltap = plcl(il) - plfc(il)
436 dcin = rd*buoylcl(il)*deltap/(plcl(il)+plfc(il))
437 cina(il) = min(0., dcin)
subroutine cv3_cine(nloc, ncum, nd, icb, inb, pbase, plcl, p, ph, tv, tvp, cina, cinb, plfc)
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true