Changeset 6053 for LMDZ6


Ignore:
Timestamp:
Jan 23, 2026, 1:11:53 PM (2 months ago)
Author:
evignon
Message:

corrections dans la routine simplehydrol et ajout de diagnostiques
pour quantifier les flux d'eau liés à la fonte de la neige sur les surfaces
englacees

Location:
LMDZ6/trunk/libf/phylmd
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/clesphys_mod_h.f90

    r5977 r6053  
    4343          , ip_ebil_phy                                                &
    4444          , iflag_gusts, iflag_z0_oce                                  &
    45           , ok_lic_melt, ok_lic_cond, aer_type                        &
     45          , ok_lic_melt, ok_lic_cond, chasno_tun, forc_ts_melt, aer_type &
    4646          , iflag_rrtm, ok_strato, ok_hines, ok_qch4                   &
    4747          , iflag_ice_thermo, ok_ice_supersat                          &
     
    6868  INTEGER iflag_physiq
    6969  REAL tau_thermals
     70  REAL chasno_tun
    7071
    7172  !FC
     
    8687  !OM Fonte calotte dans bilan eau
    8788  LOGICAL ok_lic_melt
     89  ! impose surface temperature during snow melting
     90  LOGICAL forc_ts_melt
    8891  !OB Depot de vapeur d eau sur la calotte pour le bilan eau
    8992  LOGICAL ok_lic_cond
     
    204207  !$OMP      , ip_ebil_phy                                                &
    205208  !$OMP      , iflag_gusts, iflag_z0_oce                                  &
    206   !$OMP      , ok_lic_melt, ok_lic_cond, aer_type                         &
     209  !$OMP      , ok_lic_melt, ok_lic_cond, chasno_tun, forc_ts_melt, aer_type  &
    207210  !$OMP      , iflag_rrtm, ok_strato, ok_hines, ok_qch4                    &
    208211  !$OMP      , iflag_ice_thermo, ok_ice_supersat                            &
  • LMDZ6/trunk/libf/phylmd/conf_phys_m.f90

    r6005 r6053  
    176176    REAL,SAVE :: inertie_sol_omp,inertie_sno_omp,inertie_sic_omp
    177177    REAL,SAVE :: inertie_lic_omp
     178    REAL,SAVE :: chasno_tun_omp
     179    LOGICAL,SAVE :: forc_ts_melt_omp
    178180    REAL,SAVE :: qsol0_omp
    179181    REAL,SAVE :: evap0_omp
     
    16231625
    16241626
     1627    !Config Key = forc_ts_melt
     1628    !Config Desc = force surface temperature when snow melts
     1629    !Config Def  = .TRUE.
     1630    !Config Help = set to .FALSE. to avoid unrealistically forcing ts=273.15 during snow melt
     1631    forc_ts_melt = .TRUE.
     1632    CALL getin('forc_ts_melt', forc_ts_melt)
     1633   
     1634
    16251635    !Config Key = ok_lic_cond
    16261636    !Config Desc = Prise en compte depot de vapeur d'eau sur la calotte dans le bilan d'eau
     
    20602070    z0min_omp = 0.000015
    20612071    CALL getin('z0min',z0min_omp)
    2062 
     2072 
     2073    ! PARAMETERS FOR SNOW AND ICE MELTING
     2074    chasno_tun_omp=0.15
     2075    CALL getin('chasno_tun',chasno_tun_omp)
    20632076
    20642077    ! PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS
     
    26402653    cvl_sig2feed = cvl_sig2feed_omp
    26412654    cvl_corr = cvl_corr_omp
     2655    forc_ts_melt = forc_ts_melt_omp
    26422656    ok_lic_melt = ok_lic_melt_omp
    26432657    ok_lic_cond = ok_lic_cond_omp
     
    26582672    ratio_z0hz0m_landice=ratio_z0hz0m_landice_omp
    26592673
     2674    chasno_tun=chasno_tun_omp
    26602675    f_rugoro=f_rugoro_omp
    26612676
     
    28822897    WRITE(lunout,*) ' ok_lic_melt=', ok_lic_melt
    28832898    WRITE(lunout,*) ' ok_lic_cond=', ok_lic_cond
     2899    WRITE(lunout,*) ' forc_ts_melt=', forc_ts_melt
    28842900    WRITE(lunout,*) ' iflag_cycle_diurne=',iflag_cycle_diurne
    28852901    WRITE(lunout,*) ' soil_model=',soil_model
     
    29782994    WRITE(lunout,*) ' iflag_sic = ', iflag_sic
    29792995    WRITE(lunout,*) ' iflag_inertie = ', iflag_inertie
     2996    WRITE(lunout,*) ' chasno_tun = ', chasno_tun
    29802997    WRITE(lunout,*) ' inertie_sol = ', inertie_sol
    29812998    WRITE(lunout,*) ' inertie_sic = ', inertie_sic
  • LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90

    r6033 r6053  
    299299       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    300300       AcoefU, AcoefV, BcoefU, BcoefV, &
    301 !GG       ps, u1, v1, gustiness, &
    302301       ps, u1, v1, gustiness, pctsrf, &
    303 !GG
    304302       radsol, snow, qsol, agesno, tsoil, &
    305303       qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    306 !GG       tsurf_new, dflux_s, dflux_l, rhoa)
     304       icesub, icemelt, &
    307305       tsurf_new, dflux_s, dflux_l, rhoa, swnet, hice, tice, bilg_cumul, &
    308306       fcds, fcdi, dh_basal_growth, dh_basal_melt, dh_top_melt, dh_snow2sic, &
    309307       dtice_melt, dtice_snow2sic &
    310 !GG
    311308#ifdef ISO
    312309       ,xtprecip_rain, xtprecip_snow, xtspechum,Roce, &
     
    413410    REAL, DIMENSION(knon), INTENT(OUT)            :: flux_u1, flux_v1
    414411    REAL, DIMENSION(knon), INTENT(OUT)            :: tsurf_new
    415     REAL, DIMENSION(knon), INTENT(OUT)            :: dflux_s, dflux_l     
     412    REAL, DIMENSION(knon), INTENT(OUT)            :: dflux_s, dflux_l     
     413    REAL, DIMENSION(knon), INTENT(OUT)            :: icesub, icemelt
    416414#ifdef ISO     
    417415    REAL, DIMENSION(ntiso,knon), INTENT(OUT)      :: xtevap
     
    424422    REAL                        :: zfra
    425423    REAL, PARAMETER             :: t_grnd=271.35
    426     REAL, DIMENSION(knon)       :: cal, beta, dif_grnd, capsol, icesub
     424    REAL, DIMENSION(knon)       :: cal, beta, dif_grnd, capsol
    427425    REAL, DIMENSION(knon)       :: alb_neig, tsurf_tmp
    428426    REAL, DIMENSION(knon)       :: soilcap, soilflux
     
    678676    CALL simplehydrol( knon, is_sic, knindex, dtime, &
    679677         tsurf_tmp, precip_rain, precip_snow, &
    680          snow, qsol, tsurf_new, evap, icesub &
     678         snow, qsol, tsurf_new, evap, icesub, icemelt &
    681679#ifdef ISO   
    682680     &  ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
  • LMDZ6/trunk/libf/phylmd/pbl_surface_main_mod.F90

    r6014 r6053  
    584584       beta, &
    585585       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,      &
    586        icesub_lic, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
     586       icesub_ice, icemelt_ice, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    587587       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout,                 &
    588588       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss,            &
     
    791791    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
    792792    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    793     REAL, DIMENSION(klon),        INTENT(OUT)       :: icesub_lic ! ice (no snow!) sublimation over ice sheet
     793    REAL, DIMENSION(klon),        INTENT(OUT)       :: icesub_ice ! ice (no snow!) sublimation flux over iced surfaces [kg/m2/s]
     794    REAL, DIMENSION(klon),        INTENT(OUT)       :: icemelt_ice ! ice (no snow!) meltin flux over iced surfaces [kg/m2/s]
    794795    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    795796    REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_t_w      !   !
     
    10121013       cdragh,    cdragm,   zu1,    zv1,              &
    10131014       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,      &
    1014        icesub_lic, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
     1015       icesub_ice, icemelt_ice, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    10151016       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout,                 &
    10161017       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss,            &
     
    10811082       cdragh,    cdragm,                             &
    10821083       beta, &
    1083        icesub_lic, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
     1084       icesub_ice, icemelt_ice, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    10841085       qsat2m,                 &
    10851086       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss,            &
  • LMDZ6/trunk/libf/phylmd/pbl_surface_subsrf_mod.F90

    r6028 r6053  
    5454       cdragh,    cdragm,                             &
    5555       beta, &
    56        icesub_lic, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
     56       icesub_ice, icemelt_ice, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    5757       qsat2m,                 &
    5858       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss,            &
     
    277277    REAL, DIMENSION(klon),        INTENT(INOUT)       :: cdragm     ! drag coefficient for wind
    278278    REAL, DIMENSION(klon),        INTENT(INOUT)       :: alb3_lic
    279     REAL, DIMENSION(klon),        INTENT(INOUT)       :: icesub_lic ! ice (no snow!) sublimation over ice sheet
     279    REAL, DIMENSION(klon),        INTENT(INOUT)       :: icesub_ice ! ice (no snow!) sublimation flux over ice sheet and sea ice
     280    REAL, DIMENSION(klon),        INTENT(INOUT)       :: icemelt_ice ! ice (no snow!) melting flux over ice sheet and sea ice
    280281    REAL, DIMENSION(klon,klev),   INTENT(INOUT)       :: d_t_w      !   !
    281282    REAL, DIMENSION(klon,klev),   INTENT(INOUT)       :: d_q_w      !      !  Tendances dans les poches
     
    529530    REAL, DIMENSION(knon)              :: AcoefQBS, BcoefQBS
    530531    REAL, DIMENSION(knon)              :: ypsref
    531     REAL, DIMENSION(knon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new, yicesub_lic
     532    REAL, DIMENSION(knon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new, yicesub, yicemelt
    532533    REAL, DIMENSION(knon,nsw)          :: yalb_dir_new, yalb_dif_new
    533534    REAL, DIMENSION(knon,klev)         :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs
     
    16371638                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    16381639                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    1639                   ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yicesub_lic, yfluxsens,yfluxlat, &
     1640                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yicesub, yicemelt, yfluxsens,yfluxlat, &
    16401641                  yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    16411642                  yzmea, yzsig, ycldt, &
     
    16571658                sissnow(i)   = ysissnow(j)
    16581659                runoff(i)    = yrunoff(j)
    1659                 icesub_lic(i) = yicesub_lic(j)*ypct(j)
     1660                icesub_ice(i) = icesub_ice(i) + yicesub(j)*ypct(j)
     1661                icemelt_ice(i) = icemelt_ice(i) + yicemelt(j)*ypct(j)
    16601662             ENDDO
    16611663             ! Martin
     
    17831785               ypsref, yu1, yv1, ygustiness, pctsrf, &
    17841786               ysnow, yqsurf, yqsol, yagesno, ytsoil, &
    1785                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
     1787               yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yicesub, yicemelt, yfluxsens,yfluxlat,&
    17861788               ytsurf_new, y_dflux_t, y_dflux_q, &
    17871789               y_flux_u1, y_flux_v1, &
     
    17941796#endif               
    17951797         &      )
    1796          
     1798
     1799             DO j = 1, knon
     1800                i = ni(j)
     1801                icesub_ice(i) = icesub_ice(i) + yicesub(j)*ypct(j)
     1802                icemelt_ice(i) = icemelt_ice(i) + yicemelt(j)*ypct(j)
     1803             ENDDO
    17971804! Special DICE MPL 05082013 puis BOMEX MPL 20150410
    17981805       IF (ok_prescr_ust) THEN
  • LMDZ6/trunk/libf/phylmd/pbl_surface_uncompress_pre_mod.F90

    r6014 r6053  
    4848       cdragh,    cdragm,   zu1,    zv1,              &
    4949       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,      &
    50        icesub_lic, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
     50       icesub_ice, icemelt_ice, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    5151       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout,                 &
    5252       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss,            &
     
    238238    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
    239239    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    240     REAL, DIMENSION(klon),        INTENT(OUT)       :: icesub_lic ! ice (no snow!) sublimation over ice sheet
     240    REAL, DIMENSION(klon),        INTENT(OUT)       :: icesub_ice ! ice (no snow!) sublimation flux over iced surfaces [kg/m2/s]
     241    REAL, DIMENSION(klon),        INTENT(OUT)       :: icemelt_ice ! ice (no snow!) melting flux over iced surfaces [kg/m2/s]
    241242    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    242243    REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_t_w      !   !
     
    559560 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    560561 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    561  runoff(:)=0. ; icesub_lic(:)=0.
     562 runoff(:)=0. ; icesub_ice(:)=0. ; icemelt_ice(:)=0.
    562563 l_mixmin(:,:,:)=0.
    563564 l_mix(:,:,:) = 0.
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r5927 r6053  
    414414      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw, water_budget
    415415!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw, water_budget)
    416       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: icesub_lic
    417 !$OMP THREADPRIVATE(icesub_lic)
     416      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: icesub_ice, icemelt_ice
     417!$OMP THREADPRIVATE(icesub_ice, icemelt_ice)
    418418      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    419419!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    10951095      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    10961096      ALLOCATE(JrNt(klon))
    1097       ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon), icesub_lic(klon))
     1097      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon), icesub_ice(klon), icemelt_ice(klon))
    10981098      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), water_budget(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    10991099      ALLOCATE(s_lcl(klon))
     
    15641564      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    15651565      DEALLOCATE(JrNt)
    1566       DEALLOCATE(dthmin, evap, snowerosion, icesub_lic, fder, plcl, plfc)
     1566      DEALLOCATE(dthmin, evap, snowerosion, icesub_ice, icemelt_ice, fder, plcl, plfc)
    15671567      DEALLOCATE(prw, prlw, prsw, prbsw, water_budget, zustar, zu10m, zv10m, rh2m, s_lcl)
    15681568      DEALLOCATE(s_pblh, s_pblt, s_therm)
  • LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r5927 r6053  
    384384  TYPE(ctrl_out), SAVE :: o_snowerosion = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    385385   'snowerosion', 'blowing snow flux', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    386   TYPE(ctrl_out), SAVE :: o_icesub_lic = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    387    'icesub_lic', 'sublimation of ice over landice tiles, mesh-averaged', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     386  TYPE(ctrl_out), SAVE :: o_icesub_ice = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     387   'icesub_ice', 'sublimation flux of ice over iced surfaces, mesh-averaged', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     388  TYPE(ctrl_out), SAVE :: o_icemelt_ice = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     389   'icemelt_ice', 'melting flux of ice over iced surfaces, mesh-averaged', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    388390  TYPE(ctrl_out), SAVE :: o_ustart_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
    389391    'ustart_lic', 'threshold velocity', 'm/s', (/ ('', i=1, 10) /))
  • LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90

    r6048 r6053  
    5151         o_precip, o_rain_fall, o_rain_con, o_ndayrain, o_plul, o_pluc, o_plun, &
    5252         o_snow, o_msnow, o_fsnow, o_evap, o_snowerosion, o_ustart_lic, o_qsalt_lic, o_rhosnow_lic, o_bsfall, &
    53          o_icesub_lic, &
     53         o_icesub_ice, o_icemelt_ice, &
    5454         o_ep,o_epmax_diag, & ! epmax_cape
    5555         o_tops, o_tops0, o_topl, o_topl0, &
     
    360360    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
    361361         zn2mout, t2m_min_mon, t2m_max_mon, evap, &
    362          snowerosion, icesub_lic, zxustartlic, zxrhoslic, zxqsaltlic, &
     362         snowerosion, icesub_ice, icemelt_ice, zxustartlic, zxrhoslic, zxqsaltlic, &
    363363         l_mixmin,l_mix, pbl_eps, tke_shear, tke_buoy, tke_trans, &
    364364         zu10m, zv10m, zq2m, zustar, zxqsurf, &
     
    980980       CALL histwrite_phy(o_fsnow, zfra_o)
    981981       CALL histwrite_phy(o_evap, evap)
    982        CALL histwrite_phy(o_icesub_lic, icesub_lic)
     982       CALL histwrite_phy(o_icesub_ice, icesub_ice)
     983       CALL histwrite_phy(o_icemelt_ice, icemelt_ice)
    983984
    984985       IF (ok_bs) THEN
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r6048 r6053  
    275275         cldh, cldl,cldm, cldq, cldt,      &
    276276         JrNt,                             &
    277          dthmin, evap, snowerosion, icesub_lic, fder, plcl, plfc,   &
     277         dthmin, evap, snowerosion, icesub_ice, icemelt_ice, fder, plcl, plfc,   &
    278278         prw, prlw, prsw, prbsw, water_budget,         &
    279279         s_lcl, s_pblh, s_pblt, s_therm,   &
     
    29502950            cdragh,    cdragm,  u1,    v1,            &
    29512951            beta_aridity, &
    2952             albsol_dir,   albsol_dif,   sens,    evap, snowerosion, icesub_lic, &
     2952            albsol_dir,   albsol_dif,   sens,    evap, snowerosion, icesub_ice, icemelt_ice, &
    29532953            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    29542954            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
  • LMDZ6/trunk/libf/phylmd/simplehydrol_mod.F90

    r6034 r6053  
    224224   SUBROUTINE simplehydrol(knon, nisurf, knindex, dtime, &
    225225                           tsurf, precip_rain, precip_snow, &
    226                            snow, qsol, tsurf_new, evap, ice_sub &
     226                           snow, qsol, tsurf_new, evap, ice_sub, ice_melt &
    227227#ifdef ISO
    228228                           , fq_fonte_diag, fqfonte_diag, snow_sub_diag, fqcalving_diag &
     
    280280!-----------------
    281281
    282       REAL, DIMENSION(knon), INTENT(OUT)   :: ice_sub ! sublimation flux from ice over landice surfaces [kg/m2/s]
     282      REAL, DIMENSION(knon), INTENT(OUT)   :: ice_sub ! sublimation flux from ice over iced surfaces [kg/m2/s]
     283      REAL, DIMENSION(knon), INTENT(OUT)   :: ice_melt ! melting flux from ice over iced surfaces [kg/m2/s]
     284
    283285#ifdef ISO
    284286      ! diagnostics for isotopes
     
    298300      INTEGER               :: i, j
    299301      REAL                  :: fq_fonte ! quantify of snow that is melted [kg/m2]
    300       REAL                  :: coeff_rel
     302      REAL                  :: coeff_rel, chasno
    301303      REAL, PARAMETER       :: snow_max = 3000. ! maximum snow amount over ice sheets [kg/m2]
    302304      REAL, PARAMETER       :: max_eau_sol = 150.0 ! maximum water amount in the soil [kg/m2]
    303       REAL, PARAMETER       :: chasno = 3.334E+05/(2.3867E+06*0.15) ! Latent heat of ice melting / (cp water) / tuning param=0.15
    304305      REAL, DIMENSION(knon) :: ffonte    ! flux of energy associated with snow melting [W/m2]
    305306      REAL, DIMENSION(knon) :: fqcalving ! flux of water associated with calving [kg/m2]
     
    319320      coeff_rel = dtime/(tau_calv*rday)
    320321      bil_eau_s(:) = 0.
     322      chasno = 3.334E+05/(2.3867E+06*chasno_tun)
    321323
    322324! Snow increment snow due to precipitation and sublimation
     
    346348      END IF
    347349
    348 !---diagnostics of sublimation/condensation of ice over landice surfaces (when all the snow above has been sublimated)
    349 !---in principle it should be 0 when ok_lic_cond that is when surface water condensation over landice was not allowed
    350       IF (nisurf == is_lic) THEN
     350!---diagnostics of sublimation/condensation of ice over ice surfaces (when all the snow above has been sublimated)
     351!---in principle it should be 0 when ok_lic_cond that is when surface water condensation over ice was not allowed
     352      IF (nisurf .EQ. is_lic .OR. nisurf .EQ. is_sic) THEN
    351353         DO i = 1, knon
    352354            ice_sub(i) = evap(i) - snow_sub(i)
     
    365367
    366368! Snow melting and calving (we remove the excess of snow wrt snowmax over ice sheets)
    367 ! + update surface temperature
     369! + update of surface temperature
    368370!****************************************************************************************
    369371
     
    371373      fqcalving(:) = 0.0
    372374      fqfonte(:) = 0.0
     375      ice_melt(:) = 0.0
    373376
    374377      ! snow melting
     
    398401
    399402            ! snow/ice melting over ice surfaces
    400             IF (nisurf == is_sic .OR. nisurf == is_lic) THEN
    401                ! pay attention, melting over sea ice and landice
    402                ! is not bounded by the amount of available snow (no MIN)
    403                ! so when snow has been completely melted, the ice below melts
     403            IF ((nisurf == is_sic .OR. nisurf == is_lic) .AND. ok_lic_melt .AND. snow(i) .GT. 0.) THEN
     404               ! when snow has been completely melted, the ice below can melt
    404405               ! which is an infinite source of water for the model
    405                ! BUT:
    406                ! when snow has been fully melted, the flux due to ice melting should be explicitly computed
    407                ! why are we adding the flux to that previously computed (double counting).
    408                ! why ffonte and tsurf_new updates are not in ok_lic_melt?
    409                ! why over lic and sic we impose tsurf=RTT and not over lands when snow remains?
    410                ! now by default, ok_lic_melt = false which means ffonte and fqfonte are not consistent
    411                ! moreover, imposing tsurf_new=RTT means that the update in tsurf is not consistent
    412                ! with the quantity of melting snow.
    413                !
    414                ! Suggestion:
    415                ! -  compute separately fq_fonte over lic/sic only if ok_lic_melt (lower-bound by 0 and not snow)
    416                ! - add an output variable ice_melt = max(0,fq_fonte - snow)/dtime to quantify the melt of ice (net water source)
    417                !   and update snow with the melt of snow only i.e. fq_fonte - ice_melt
    418                ! - remove the tsurf_new = RTT over lic and sic but implies a loss of convergence
    419 
    420406               fq_fonte = MAX((tsurf_new(i) - RTT)/chasno, 0.0)
    421407               ffonte(i) = ffonte(i) + fq_fonte*RLMLT/dtime
    422 
    423                IF (ok_lic_melt) THEN
    424                   fqfonte(i) = fqfonte(i) + fq_fonte/dtime
    425                   bil_eau_s(i) = bil_eau_s(i) + fq_fonte
    426                END IF
     408               fqfonte(i) = fqfonte(i) + fq_fonte/dtime
     409               bil_eau_s(i) = bil_eau_s(i) + fq_fonte
     410               tsurf_new(i) = tsurf_new(i) - fq_fonte*chasno
     411               ice_melt(i) = fq_fonte/dtime
     412            END IF
     413
     414            ! surface temperature tendency associated with snow and icemelting
     415            IF (forc_ts_melt) THEN
    427416               tsurf_new(i) = RTT
    428             END IF
     417            ENDIF
     418     
    429419            d_ts(i) = tsurf_new(i) - tsurf(i)
    430          END IF
     420         
     421       END IF
    431422
    432423         ! so called 'calving', if there is an excess of snow wrt snowmax
  • LMDZ6/trunk/libf/phylmd/surf_land_bucket_hetero_mod.F90

    r6033 r6053  
    108108    REAL, DIMENSION(knon) :: soilcap, soilflux
    109109    REAL, DIMENSION(knon) :: cal, beta, dif_grnd, capsol
    110     REAL, DIMENSION(knon) :: alb_neig, alb_lim, icesub
     110    REAL, DIMENSION(knon) :: alb_neig, alb_lim, icesub, icemelt
    111111    REAL, DIMENSION(knon) :: zfra
    112112    REAL, DIMENSION(knon) :: radsol
     
    239239      CALL simplehydrol( knon, is_ter, knindex, dtime, &
    240240           tsurf, precip_rain, precip_snow, &
    241            snow, qsol, tsurf_new, evap, icesub &
     241           snow, qsol, tsurf_new, evap, icesub, icemelt &
    242242#ifdef ISO   
    243243     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
     
    363363        CALL simplehydrol( knon, is_ter, knindex, dtime, &
    364364             tsurf_tersrf(:,j), precip_rain, precip_snow, &
    365              snow, qsol, tsurf_new_tersrf(:,j), evap_tersrf(:,j), icesub &
     365             snow, qsol, tsurf_new_tersrf(:,j), evap_tersrf(:,j), icesub, icemelt &
    366366#ifdef ISO   
    367367     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
  • LMDZ6/trunk/libf/phylmd/surf_land_bucket_mod.F90

    r6033 r6053  
    108108    REAL, DIMENSION(knon) :: soilcap, soilflux
    109109    REAL, DIMENSION(knon) :: cal, beta, dif_grnd, capsol
    110     REAL, DIMENSION(knon) :: alb_neig, alb_lim, icesub
     110    REAL, DIMENSION(knon) :: alb_neig, alb_lim, icesub, icemelt
    111111    REAL, DIMENSION(knon) :: zfra
    112112    REAL, DIMENSION(knon) :: radsol       ! total net radiance at surface
     
    250250    CALL simplehydrol( knon, is_ter, knindex, dtime, &
    251251         tsurf, precip_rain, precip_snow, &
    252          snow, qsol, tsurf_new, evap, icesub &
     252         snow, qsol, tsurf_new, evap, icesub, icemelt &
    253253#ifdef ISO   
    254254     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
  • LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90

    r6034 r6053  
    5757       ps, u1, v1, gustiness, rugoro, pctsrf, &
    5858       snow, qsurf, qsol, qbs1, agesno, &
    59        tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, icesub_lic, fluxsens, fluxlat, fluxbs, &
     59       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, icesub, icemelt, fluxsens, fluxlat, fluxbs, &
    6060       tsurf_new, dflux_s, dflux_l, &
    6161       alt, slope, cloudf, &
     
    161161    REAL, DIMENSION(knon,nsw), INTENT(OUT)        :: alb_dir,alb_dif
    162162!albedo SB <<<
    163     REAL, DIMENSION(knon), INTENT(OUT)            :: evap, fluxsens, fluxlat, icesub_lic
     163    REAL, DIMENSION(knon), INTENT(OUT)            :: evap, fluxsens, fluxlat, icesub, icemelt
    164164    REAL, DIMENSION(knon), INTENT(OUT)            :: fluxbs
    165165    REAL, DIMENSION(knon), INTENT(OUT)            :: tsurf_new
     
    644644    CALL simplehydrol(knon, is_lic, knindex, dtime, &
    645645         tsurf, precip_rain, precip_totsnow, &
    646          snow, qsol, tsurf_new, evap_totsnow, icesub_lic &
     646         snow, qsol, tsurf_new, evap_totsnow, icesub, icemelt &
    647647#ifdef ISO   
    648648     &  ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag     &
  • LMDZ6/trunk/libf/phylmd/surf_seaice_mod.F90

    r5989 r6053  
    1919       ps, u1, v1, gustiness, pctsrf, &
    2020       snow, qsurf, qsol, agesno, tsoil, &
    21        z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 
     21       z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, icesub, icemelt, fluxsens, fluxlat, & 
    2222       tsurf_new, dflux_s, dflux_l, &
    2323!GG       flux_u1, flux_v1)
     
    105105!albedo SB <<<
    106106    REAL, DIMENSION(knon), INTENT(OUT)       :: evap, fluxsens, fluxlat
     107    REAL, DIMENSION(knon), INTENT(OUT)       :: icesub, icemelt ! sublimation and melting fluxes of ice over iced surfaces [kg/m2/s]
    107108    REAL, DIMENSION(knon), INTENT(OUT)       :: tsurf_new
    108109    REAL, DIMENSION(knon), INTENT(OUT)       :: dflux_s, dflux_l     
     
    184185            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    185186            AcoefU, AcoefV, BcoefU, BcoefV, &
    186 !GG            ps, u1, v1, gustiness, &
    187187            ps, u1, v1, gustiness,pctsrf, &
    188 !GG
    189188            radsol, snow, qsol, agesno, tsoil, &
    190189            qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    191 !GG            tsurf_new, dflux_s, dflux_l, rhoa)
     190            icesub, icemelt, &
    192191            tsurf_new, dflux_s, dflux_l,rhoa,swnet,hice, tice, bilg_cumul, &
    193192            fcds, fcdi, dh_basal_growth, dh_basal_melt, dh_top_melt, dh_snow2sic, &
Note: See TracChangeset for help on using the changeset viewer.