--- trunk/Sources/phylmd/physiq.f 2016/03/16 11:11:27 182 +++ trunk/Sources/phylmd/physiq.f 2016/03/29 15:20:23 189 @@ -108,9 +108,6 @@ LOGICAL:: firstcal = .true. - LOGICAL ok_gust ! pour activer l'effet des gust sur flux surface - PARAMETER (ok_gust = .FALSE.) - LOGICAL, PARAMETER:: check = .FALSE. ! Verifier la conservation du modele en eau @@ -148,12 +145,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 +153,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 @@ -208,23 +194,15 @@ REAL zulow(klon), zvlow(klon) INTEGER igwd, itest(klon) - REAL agesno(klon, nbsrf) - SAVE agesno ! age de la neige + REAL, save:: agesno(klon, nbsrf) ! age de la neige + REAL, save:: run_off_lic_0(klon) - REAL run_off_lic_0(klon) - SAVE run_off_lic_0 - !KE43 - ! Variables liees a la convection de K. Emanuel (sb): - - REAL Ma(klon, llm) ! undilute upward mass flux - SAVE Ma - REAL qcondc(klon, llm) ! in-cld water content from convect - SAVE qcondc + ! Variables li\'ees \`a la convection d'Emanuel : + REAL, save:: Ma(klon, llm) ! undilute upward mass flux + REAL, save:: qcondc(klon, llm) ! in-cld water content from convect REAL, save:: sig1(klon, llm), w01(klon, llm) - REAL, save:: wd(klon) - - ! Variables pour la couche limite (al1): + ! Variables pour la couche limite (Alain Lahellec) : REAL cdragh(klon) ! drag coefficient pour T and Q REAL cdragm(klon) ! drag coefficient pour vent @@ -331,7 +309,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 +321,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 +359,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 +476,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, & @@ -861,12 +839,12 @@ 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, pmflxr, & + da, phi, mp) + snow_con = 0. clwcon0 = qcondc mfu = upwd + dnwd - IF (.NOT. ok_gust) wd = 0. IF (thermcep) THEN zqsat = MIN(0.5, r2es * FOEEW(t_seri, rtt >= t_seri) / play) @@ -880,6 +858,7 @@ 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. @@ -1395,6 +1374,7 @@ ! Ecriture des sorties use dimens_m, only: iim, jjm + use gr_phy_write_m, only: gr_phy_write USE histsync_m, ONLY: histsync USE histwrite_m, ONLY: histwrite @@ -1408,208 +1388,213 @@ itau_w = itau_phy + itap - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, pphis, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(pphis) CALL histwrite(nid_ins, "phis", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, airephy, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(airephy) CALL histwrite(nid_ins, "aire", itau_w, zx_tmp_2d) DO i = 1, klon zx_tmp_fi2d(i) = paprs(i, 1) ENDDO - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "psol", itau_w, zx_tmp_2d) DO i = 1, klon zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) ENDDO - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "precip", itau_w, zx_tmp_2d) DO i = 1, klon zx_tmp_fi2d(i) = rain_lsc(i) + snow_lsc(i) ENDDO - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "plul", itau_w, zx_tmp_2d) DO i = 1, klon zx_tmp_fi2d(i) = rain_con(i) + snow_con(i) ENDDO - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "pluc", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zxtsol, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zxtsol) CALL histwrite(nid_ins, "tsol", itau_w, zx_tmp_2d) !ccIM - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zt2m, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zt2m) CALL histwrite(nid_ins, "t2m", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zq2m, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zq2m) CALL histwrite(nid_ins, "q2m", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zu10m, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zu10m) CALL histwrite(nid_ins, "u10m", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zv10m, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zv10m) CALL histwrite(nid_ins, "v10m", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, snow_fall, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(snow_fall) CALL histwrite(nid_ins, "snow", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, cdragm, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(cdragm) CALL histwrite(nid_ins, "cdrm", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, cdragh, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(cdragh) CALL histwrite(nid_ins, "cdrh", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, toplw, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(toplw) CALL histwrite(nid_ins, "topl", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, evap, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(evap) CALL histwrite(nid_ins, "evap", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, solsw, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(solsw) CALL histwrite(nid_ins, "sols", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, sollw, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(sollw) CALL histwrite(nid_ins, "soll", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, sollwdown, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(sollwdown) CALL histwrite(nid_ins, "solldown", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, bils, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(bils) CALL histwrite(nid_ins, "bils", itau_w, zx_tmp_2d) zx_tmp_fi2d(1:klon) = - sens(1:klon) - ! CALL gr_fi_ecrit(1, klon, iim, jjm + 1, sens, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + ! zx_tmp_2d = gr_phy_write(sens) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "sens", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, fder, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(fder) CALL histwrite(nid_ins, "fder", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, d_ts(1, is_oce), zx_tmp_2d) + zx_tmp_2d = gr_phy_write(d_ts(:, is_oce)) CALL histwrite(nid_ins, "dtsvdfo", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, d_ts(1, is_ter), zx_tmp_2d) + zx_tmp_2d = gr_phy_write(d_ts(:, is_ter)) CALL histwrite(nid_ins, "dtsvdft", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, d_ts(1, is_lic), zx_tmp_2d) + zx_tmp_2d = gr_phy_write(d_ts(:, is_lic)) CALL histwrite(nid_ins, "dtsvdfg", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, d_ts(1, is_sic), zx_tmp_2d) + zx_tmp_2d = gr_phy_write(d_ts(:, is_sic)) CALL histwrite(nid_ins, "dtsvdfi", itau_w, zx_tmp_2d) DO nsrf = 1, nbsrf !XXX zx_tmp_fi2d(1 : klon) = pctsrf(1 : klon, nsrf)*100. - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "pourc_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = pctsrf(1 : klon, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "fract_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = fluxt(1 : klon, 1, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "sens_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = fluxlat(1 : klon, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "lat_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = ftsol(1 : klon, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "tsol_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = fluxu(1 : klon, 1, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "taux_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = fluxv(1 : klon, 1, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "tauy_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = frugs(1 : klon, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "rugs_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) zx_tmp_fi2d(1 : klon) = falbe(:, nsrf) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zx_tmp_fi2d, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zx_tmp_fi2d) CALL histwrite(nid_ins, "albe_"//clnsurf(nsrf), itau_w, & zx_tmp_2d) END DO - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, albsol, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(albsol) CALL histwrite(nid_ins, "albs", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, zxrugs, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(zxrugs) CALL histwrite(nid_ins, "rugs", itau_w, zx_tmp_2d) !HBTM2 - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_pblh, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_pblh) CALL histwrite(nid_ins, "s_pblh", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_pblt, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_pblt) CALL histwrite(nid_ins, "s_pblt", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_lcl, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_lcl) CALL histwrite(nid_ins, "s_lcl", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_capCL, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_capCL) CALL histwrite(nid_ins, "s_capCL", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_oliqCL, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_oliqCL) CALL histwrite(nid_ins, "s_oliqCL", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_cteiCL, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_cteiCL) CALL histwrite(nid_ins, "s_cteiCL", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_therm, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_therm) CALL histwrite(nid_ins, "s_therm", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_trmb1, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_trmb1) CALL histwrite(nid_ins, "s_trmb1", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_trmb2, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_trmb2) CALL histwrite(nid_ins, "s_trmb2", itau_w, zx_tmp_2d) - CALL gr_fi_ecrit(1, klon, iim, jjm + 1, s_trmb3, zx_tmp_2d) + zx_tmp_2d = gr_phy_write(s_trmb3) CALL histwrite(nid_ins, "s_trmb3", itau_w, zx_tmp_2d) + if (conv_emanuel) then + zx_tmp_2d = gr_phy_write(ema_pct) + 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) + zx_tmp_3d = gr_phy_write(t_seri) CALL histwrite(nid_ins, "temp", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, u_seri, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(u_seri) CALL histwrite(nid_ins, "vitu", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, v_seri, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(v_seri) CALL histwrite(nid_ins, "vitv", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, zphi, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(zphi) CALL histwrite(nid_ins, "geop", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, play, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(play) CALL histwrite(nid_ins, "pres", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, d_t_vdf, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(d_t_vdf) CALL histwrite(nid_ins, "dtvdf", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, d_q_vdf, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(d_q_vdf) CALL histwrite(nid_ins, "dqvdf", itau_w, zx_tmp_3d) - CALL gr_fi_ecrit(llm, klon, iim, jjm + 1, zx_rh, zx_tmp_3d) + zx_tmp_3d = gr_phy_write(zx_rh) CALL histwrite(nid_ins, "rhum", itau_w, zx_tmp_3d) call histsync(nid_ins)