--- trunk/Sources/phylmd/physiq.f 2016/03/15 17:07:47 180 +++ trunk/Sources/phylmd/physiq.f 2016/03/22 16:31:39 188 @@ -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 @@ -148,12 +148,6 @@ REAL lwup0(klon, llm + 1), lwup(klon, llm + 1) SAVE lwdn0, lwdn, lwup0, lwup - ! Amip2 - ! variables a une pression donnee - - integer nlevSTD - PARAMETER(nlevSTD = 17) - ! prw: precipitable water real prw(klon) @@ -162,11 +156,6 @@ REAL flwp(klon), fiwp(klon) REAL flwc(klon, llm), fiwc(klon, llm) - INTEGER kmax, lmax - PARAMETER(kmax = 8, lmax = 8) - INTEGER kmaxm1, lmaxm1 - PARAMETER(kmaxm1 = kmax - 1, lmaxm1 = lmax - 1) - ! Variables propres a la physique INTEGER, save:: radpas @@ -331,7 +320,7 @@ REAL, PARAMETER:: t_coup = 234. REAL zphi(klon, llm) - ! cf. AM Variables pour la CLA (hbtm2) + ! cf. Anne Mathieu variables pour la couche limite atmosphérique (hbtm) REAL, SAVE:: pblh(klon, nbsrf) ! Hauteur de couche limite REAL, SAVE:: plcl(klon, nbsrf) ! Niveau de condensation de la CLA @@ -343,7 +332,7 @@ REAL, SAVE:: trmb1(klon, nbsrf) ! deep_cape REAL, SAVE:: trmb2(klon, nbsrf) ! inhibition REAL, SAVE:: trmb3(klon, nbsrf) ! Point Omega - ! Grdeurs de sorties + ! Grandeurs de sorties REAL s_pblh(klon), s_lcl(klon), s_capCL(klon) REAL s_oliqCL(klon), s_cteiCL(klon), s_pblt(klon) REAL s_therm(klon), s_trmb1(klon), s_trmb2(klon) @@ -381,9 +370,10 @@ REAL prfl(klon, llm + 1), psfl(klon, llm + 1) INTEGER, save:: ibas_con(klon), itop_con(klon) + real ema_pct(klon) ! Emanuel pressure at cloud top, in Pa REAL rain_con(klon), rain_lsc(klon) - REAL, save:: snow_con(klon) + REAL, save:: snow_con(klon) ! neige (mm / s) real snow_lsc(klon) REAL d_ts(klon, nbsrf) @@ -497,7 +487,6 @@ real zmasse(klon, llm) ! (column-density of mass of air in a cell, in kg m-2) - real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 integer, save:: ncid_startphy, itau_phy namelist /physiq_nml/ ok_journe, ok_mensuel, ok_instan, fact_cldcon, & @@ -579,7 +568,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 +845,15 @@ ! 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, da, phi, mp) + w01, d_t_con, d_q_con, d_u_con, d_v_con, rain_con, ibas_con, & + itop_con, upwd, dnwd, dnwd0, Ma, cape, iflagctrl, qcondc, wd, & + pmflxr, da, phi, mp) + snow_con = 0. clwcon0 = qcondc mfu = upwd + dnwd IF (.NOT. ok_gust) wd = 0. @@ -895,11 +870,25 @@ call clouds_gno(klon, llm, q_seri, zqsat, clwcon0, ptconv, ratqsc, & rnebcon0) + forall (i = 1:klon) ema_pct(i) = paprs(i,itop_con(i) + 1) mfd = 0. pen_u = 0. 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 +922,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 @@ -1397,6 +1386,7 @@ ! Ecriture des sorties use dimens_m, only: iim, jjm + use gr_fi_ecrit_m, only: gr_fi_ecrit USE histsync_m, ONLY: histsync USE histwrite_m, ONLY: histwrite @@ -1588,6 +1578,11 @@ CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_trmb3, zx_tmp_2d) CALL histwrite(nid_ins, "s_trmb3", itau_w, zx_tmp_2d) + if (conv_emanuel) then + CALL gr_fi_ecrit(1, klon, iim, jjm + 1, ema_pct, zx_tmp_2d) + CALL histwrite(nid_ins, "ptop", itau_w, zx_tmp_2d) + end if + ! Champs 3D: CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, t_seri, zx_tmp_3d)