--- trunk/Sources/phylmd/physiq.f 2016/03/11 18:47:26 178 +++ trunk/Sources/phylmd/physiq.f 2016/03/16 11:11:27 182 @@ -21,7 +21,7 @@ use calltherm_m, only: calltherm USE clesphys, ONLY: cdhmax, cdmmax, ecrit_hf, ecrit_ins, ecrit_mth, & ecrit_reg, ecrit_tra, ksta, ksta_ter, ok_kzmin - USE clesphys2, ONLY: cycle_diurne, iflag_con, nbapp_rad, new_oliq, & + USE clesphys2, ONLY: cycle_diurne, conv_emanuel, nbapp_rad, new_oliq, & ok_orodr, ok_orolf USE clmain_m, ONLY: clmain use clouds_gno_m, only: clouds_gno @@ -383,7 +383,8 @@ INTEGER, save:: ibas_con(klon), itop_con(klon) REAL rain_con(klon), rain_lsc(klon) - REAL snow_con(klon), snow_lsc(klon) + REAL, save:: snow_con(klon) + real snow_lsc(klon) REAL d_ts(klon, nbsrf) REAL d_u_vdf(klon, llm), d_v_vdf(klon, llm) @@ -486,7 +487,6 @@ SAVE ffonte SAVE fqcalving SAVE rain_con - SAVE snow_con SAVE topswai SAVE topswad SAVE solswai @@ -579,7 +579,7 @@ CALL printflag(radpas, ok_journe, ok_instan, ok_region) ! Initialisation pour le sch\'ema de convection d'Emanuel : - IF (iflag_con >= 3) THEN + IF (conv_emanuel) THEN ibas_con = 1 itop_con = 1 ENDIF @@ -856,29 +856,14 @@ ! Appeler la convection (au choix) - if (iflag_con == 2) then - conv_q = d_q_dyn + d_q_vdf / dtphys - conv_t = d_t_dyn + d_t_vdf / dtphys - z_avant = sum((q_seri + ql_seri) * zmasse, dim=2) - CALL conflx(dtphys, paprs, play, t_seri(:, llm:1:- 1), & - q_seri(:, llm:1:- 1), conv_t, conv_q, zxfluxq(:, 1), omega, & - d_t_con, d_q_con, rain_con, snow_con, mfu(:, llm:1:- 1), & - mfd(:, llm:1:- 1), pen_u, pde_u, pen_d, pde_d, kcbot, kctop, & - kdtop, pmflxr, pmflxs) - WHERE (rain_con < 0.) rain_con = 0. - WHERE (snow_con < 0.) snow_con = 0. - ibas_con = llm + 1 - kcbot - itop_con = llm + 1 - kctop - else - ! iflag_con >= 3 - + if (conv_emanuel) then da = 0. mp = 0. phi = 0. CALL concvl(dtphys, paprs, play, t_seri, q_seri, u_seri, v_seri, sig1, & w01, d_t_con, d_q_con, d_u_con, d_v_con, rain_con, snow_con, & ibas_con, itop_con, upwd, dnwd, dnwd0, Ma, cape, iflagctrl, & - qcondc, wd, pmflxr, pmflxs, da, phi, mp) + qcondc, wd, pmflxr, da, phi, mp) clwcon0 = qcondc mfu = upwd + dnwd IF (.NOT. ok_gust) wd = 0. @@ -900,6 +885,19 @@ pen_d = 0. pde_d = 0. pde_u = 0. + else + conv_q = d_q_dyn + d_q_vdf / dtphys + conv_t = d_t_dyn + d_t_vdf / dtphys + z_avant = sum((q_seri + ql_seri) * zmasse, dim=2) + CALL conflx(dtphys, paprs, play, t_seri(:, llm:1:- 1), & + q_seri(:, llm:1:- 1), conv_t, conv_q, zxfluxq(:, 1), omega, & + d_t_con, d_q_con, rain_con, snow_con, mfu(:, llm:1:- 1), & + mfd(:, llm:1:- 1), pen_u, pde_u, pen_d, pde_d, kcbot, kctop, & + kdtop, pmflxr, pmflxs) + WHERE (rain_con < 0.) rain_con = 0. + WHERE (snow_con < 0.) snow_con = 0. + ibas_con = llm + 1 - kcbot + itop_con = llm + 1 - kctop END if DO k = 1, llm @@ -933,7 +931,7 @@ print *, "Precip = ", zx_t ENDIF - IF (iflag_con == 2) THEN + IF (.not. conv_emanuel) THEN z_apres = sum((q_seri + ql_seri) * zmasse, dim=2) z_factor = (z_avant - (rain_con + snow_con) * dtphys) / z_apres DO k = 1, llm