--- trunk/Sources/phylmd/physiq.f 2016/09/01 10:30:53 207 +++ trunk/Sources/phylmd/physiq.f 2017/01/12 12:31:31 212 @@ -20,8 +20,7 @@ use calltherm_m, only: calltherm USE clesphys, ONLY: cdhmax, cdmmax, ecrit_ins, ksta, ksta_ter, ok_kzmin, & ok_instan - USE clesphys2, ONLY: cycle_diurne, conv_emanuel, nbapp_rad, new_oliq, & - ok_orodr, ok_orolf + USE clesphys2, ONLY: conv_emanuel, nbapp_rad, new_oliq, ok_orodr, ok_orolf USE clmain_m, ONLY: clmain use clouds_gno_m, only: clouds_gno use comconst, only: dtphys @@ -58,7 +57,7 @@ USE phytrac_m, ONLY: phytrac use radlwsw_m, only: radlwsw use yoegwd, only: sugwd - USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt + USE suphec_m, ONLY: rcpd, retv, rg, rlvtt, romega, rsigma, rtt, rmo3, md use time_phylmdz, only: itap, increment_itap use transp_m, only: transp use transp_lay_m, only: transp_lay @@ -146,7 +145,6 @@ ! "physiq". REAL, save:: radsol(klon) ! bilan radiatif au sol calcule par code radiatif - REAL, save:: ftsol(klon, nbsrf) ! skin temperature of surface fraction REAL, save:: ftsoil(klon, nsoilmx, nbsrf) @@ -240,6 +238,7 @@ REAL, save:: pctsrf(klon, nbsrf) ! percentage of surface REAL, save:: albsol(klon) ! albedo du sol total visible REAL, SAVE:: wo(klon, llm) ! column density of ozone in a cell, in kDU + real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 real, save:: clwcon(klon, llm), rnebcon(klon, llm) real, save:: clwcon0(klon, llm), rnebcon0(klon, llm) @@ -569,9 +568,6 @@ forall (k = 1: llm) zmasse(:, k) = (paprs(:, k) - paprs(:, k + 1)) / rg - ! Prescrire l'ozone : - wo = ozonecm(REAL(julien), paprs) - ! \'Evaporation de l'eau liquide nuageuse : DO k = 1, llm DO i = 1, klon @@ -590,11 +586,7 @@ ! la surface. CALL orbite(REAL(julien), longi, dist) - IF (cycle_diurne) THEN - CALL zenang(longi, time, dtphys * radpas, mu0, fract) - ELSE - mu0 = - 999.999 - ENDIF + CALL zenang(longi, time, dtphys * radpas, mu0, fract) ! Calcul de l'abedo moyen par maille albsol = sum(falbe * pctsrf, dim = 2) @@ -613,11 +605,11 @@ CALL clmain(dtphys, pctsrf, t_seri, q_seri, u_seri, v_seri, julien, mu0, & ftsol, cdmmax, cdhmax, ksta, ksta_ter, ok_kzmin, ftsoil, qsol, & paprs, play, fsnow, fqsurf, fevap, falbe, fluxlat, rain_fall, & - snow_fall, fsolsw, fsollw, fder, rlat, frugs, agesno, rugoro, & - d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_ts, flux_t, flux_q, flux_u, & - flux_v, cdragh, cdragm, q2, dsens, devap, ycoefh, yu1, yv1, t2m, q2m, & - u10m, v10m, pblh, capCL, oliqCL, cteiCL, pblT, therm, trmb1, trmb2, & - trmb3, plcl, fqcalving, ffonte, run_off_lic_0) + snow_fall, fsolsw, fsollw, fder, frugs, agesno, rugoro, d_t_vdf, & + d_q_vdf, d_u_vdf, d_v_vdf, d_ts, flux_t, flux_q, flux_u, flux_v, & + cdragh, cdragm, q2, dsens, devap, ycoefh, yu1, yv1, t2m, q2m, u10m, & + v10m, pblh, capCL, oliqCL, cteiCL, pblT, therm, trmb1, trmb2, trmb3, & + plcl, fqcalving, ffonte, run_off_lic_0) ! Incr\'ementation des flux @@ -636,55 +628,26 @@ ! Update surface temperature: - DO i = 1, klon - zxfluxlat(i) = 0. - - zt2m(i) = 0. - zq2m(i) = 0. - zu10m(i) = 0. - zv10m(i) = 0. - zxffonte(i) = 0. - zxfqcalving(i) = 0. - - s_pblh(i) = 0. - s_lcl(i) = 0. - s_capCL(i) = 0. - s_oliqCL(i) = 0. - s_cteiCL(i) = 0. - s_pblT(i) = 0. - s_therm(i) = 0. - s_trmb1(i) = 0. - s_trmb2(i) = 0. - s_trmb3(i) = 0. - ENDDO - call assert(abs(sum(pctsrf, dim = 2) - 1.) <= EPSFRA, 'physiq: pctsrf') - ftsol = ftsol + d_ts ztsol = sum(ftsol * pctsrf, dim = 2) - DO nsrf = 1, nbsrf - DO i = 1, klon - zxfluxlat(i) = zxfluxlat(i) + fluxlat(i, nsrf) * pctsrf(i, nsrf) - - zt2m(i) = zt2m(i) + t2m(i, nsrf) * pctsrf(i, nsrf) - zq2m(i) = zq2m(i) + q2m(i, nsrf) * pctsrf(i, nsrf) - zu10m(i) = zu10m(i) + u10m(i, nsrf) * pctsrf(i, nsrf) - zv10m(i) = zv10m(i) + v10m(i, nsrf) * pctsrf(i, nsrf) - zxffonte(i) = zxffonte(i) + ffonte(i, nsrf) * pctsrf(i, nsrf) - zxfqcalving(i) = zxfqcalving(i) + & - fqcalving(i, nsrf) * pctsrf(i, nsrf) - s_pblh(i) = s_pblh(i) + pblh(i, nsrf) * pctsrf(i, nsrf) - s_lcl(i) = s_lcl(i) + plcl(i, nsrf) * pctsrf(i, nsrf) - s_capCL(i) = s_capCL(i) + capCL(i, nsrf) * pctsrf(i, nsrf) - s_oliqCL(i) = s_oliqCL(i) + oliqCL(i, nsrf) * pctsrf(i, nsrf) - s_cteiCL(i) = s_cteiCL(i) + cteiCL(i, nsrf) * pctsrf(i, nsrf) - s_pblT(i) = s_pblT(i) + pblT(i, nsrf) * pctsrf(i, nsrf) - s_therm(i) = s_therm(i) + therm(i, nsrf) * pctsrf(i, nsrf) - s_trmb1(i) = s_trmb1(i) + trmb1(i, nsrf) * pctsrf(i, nsrf) - s_trmb2(i) = s_trmb2(i) + trmb2(i, nsrf) * pctsrf(i, nsrf) - s_trmb3(i) = s_trmb3(i) + trmb3(i, nsrf) * pctsrf(i, nsrf) - ENDDO - ENDDO + zxfluxlat = sum(fluxlat * pctsrf, dim = 2) + zt2m = sum(t2m * pctsrf, dim = 2) + zq2m = sum(q2m * pctsrf, dim = 2) + zu10m = sum(u10m * pctsrf, dim = 2) + zv10m = sum(v10m * pctsrf, dim = 2) + zxffonte = sum(ffonte * pctsrf, dim = 2) + zxfqcalving = sum(fqcalving * pctsrf, dim = 2) + s_pblh = sum(pblh * pctsrf, dim = 2) + s_lcl = sum(plcl * pctsrf, dim = 2) + s_capCL = sum(capCL * pctsrf, dim = 2) + s_oliqCL = sum(oliqCL * pctsrf, dim = 2) + s_cteiCL = sum(cteiCL * pctsrf, dim = 2) + s_pblT = sum(pblT * pctsrf, dim = 2) + s_therm = sum(therm * pctsrf, dim = 2) + s_trmb1 = sum(trmb1 * pctsrf, dim = 2) + s_trmb2 = sum(trmb2 * pctsrf, dim = 2) + s_trmb3 = sum(trmb3 * pctsrf, dim = 2) ! Si une sous-fraction n'existe pas, elle prend la valeur moyenne : DO nsrf = 1, nbsrf @@ -955,6 +918,9 @@ endif IF (MOD(itap - 1, radpas) == 0) THEN + ! Prescrire l'ozone : + wo = ozonecm(REAL(julien), paprs) + ! Appeler le rayonnement mais calculer tout d'abord l'albedo du sol. ! Calcul de l'abedo moyen par maille albsol = sum(falbe * pctsrf, dim = 2) @@ -969,7 +935,6 @@ ENDIF ! Ajouter la tendance des rayonnements (tous les pas) - DO k = 1, llm DO i = 1, klon t_seri(i, k) = t_seri(i, k) + (heat(i, k) - cool(i, k)) * dtphys & @@ -978,19 +943,10 @@ ENDDO ! Calculer l'hydrologie de la surface - DO i = 1, klon - zxqsurf(i) = 0. - zxsnow(i) = 0. - ENDDO - DO nsrf = 1, nbsrf - DO i = 1, klon - zxqsurf(i) = zxqsurf(i) + fqsurf(i, nsrf) * pctsrf(i, nsrf) - zxsnow(i) = zxsnow(i) + fsnow(i, nsrf) * pctsrf(i, nsrf) - ENDDO - ENDDO + zxqsurf = sum(fqsurf * pctsrf, dim = 2) + zxsnow = sum(fsnow * pctsrf, dim = 2) ! Calculer le bilan du sol et la d\'erive de temp\'erature (couplage) - DO i = 1, klon bils(i) = radsol(i) - sens(i) + zxfluxlat(i) ENDDO @@ -1174,6 +1130,7 @@ END DO CALL histwrite_phy("albs", albsol) + CALL histwrite_phy("tro3", wo * dobson_u * 1e3 / zmasse / rmo3 * md) CALL histwrite_phy("rugs", zxrugs) CALL histwrite_phy("s_pblh", s_pblh) CALL histwrite_phy("s_pblt", s_pblt)