Changeset 5626 for LMDZ6


Ignore:
Timestamp:
Apr 23, 2025, 10:51:22 AM (7 weeks ago)
Author:
aborella
Message:

Corrections coupling with convective clouds

Location:
LMDZ6/branches/contrails/libf
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.f90

    r5609 r5626  
    4444          solsw, solswfdiff, radsol, t_ancien, wake_deltat, wake_s,  rain_fall, qsol, z0h, &
    4545          sollw,sollwdown, rugoro, q_ancien, wake_deltaq, wake_pe, snow_fall, ratqs,w01, &
    46     sig1, ftsol, cwcon, clwcon, fm_therm, wake_Cstar,  pctsrf,  entr_therm,radpas, f0,&
     46    sig1, ftsol, clwcon, fm_therm, wake_Cstar,  pctsrf,  entr_therm,radpas, f0,&
    4747    zmax0,fevap, rnebcon,falb_dir, falb_dif, wake_fip,    agesno,  detr_therm, pbl_tke,  &
    4848    phys_state_var_init, ql_ancien, qs_ancien, prlw_ancien, prsw_ancien, &
     
    5050    ale_bl, ale_bl_trig, alp_bl, &
    5151    ale_wake, ale_bl_stat, AWAKE_S, &
    52     cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien
     52    cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien
    5353
    5454  USE comconst_mod, ONLY: pi, dtvr
     
    243243  cf_ancien = 0.
    244244  qvc_ancien = 0.
    245   cwcon = 0.
     245  qvcon = 0.
     246  qccon = 0.
    246247  cfa_ancien = 0.
    247248  pcf_ancien = 0.
  • LMDZ6/branches/contrails/libf/phylmd/create_etat0_unstruct_mod.f90

    r5609 r5626  
    260260    cf_ancien = 0.
    261261    qvc_ancien = 0.
    262     cwcon = 0.
     262    qvcon = 0.
     263    qccon = 0.
    263264
    264265    wake_delta_pbl_TKE(:,:,:)=0
  • LMDZ6/branches/contrails/libf/phylmd/dyn1d/old_lmdz1d.f90

    r5609 r5626  
    1010      USE ioipsl, only: ju2ymds, ymds2ju, ioconf_calendar,getin
    1111   USE phys_state_var_mod, ONLY : phys_state_var_init, phys_state_var_end, &
    12        cwcon, clwcon, detr_therm, &
     12       clwcon, detr_therm, &
    1313       qsol, fevap, z0m, z0h, agesno, &
    1414       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
     
    2323       zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, &
    2424       ql_ancien, qs_ancien, qbs_ancien, &
    25        cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &
     25       cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &
    2626       prlw_ancien, prsw_ancien, prbsw_ancien, prw_ancien, &
    2727       u10m,v10m,ale_wake,ale_bl_stat
     
    874874          cf_ancien = 0.
    875875          qvc_ancien = 0.
    876           cwcon = 0.
     876          qvcon = 0.
     877          qccon = 0.
    877878        ENDIF
    878879        IF ( ok_plane_contrail ) THEN
  • LMDZ6/branches/contrails/libf/phylmd/dyn1d/scm.f90

    r5609 r5626  
    66   USE ioipsl, only: ju2ymds, ymds2ju, ioconf_calendar,getin
    77   USE phys_state_var_mod, ONLY : phys_state_var_init, phys_state_var_end, &
    8        cwcon, clwcon, detr_therm, &
     8       clwcon, detr_therm, &
    99       qsol, fevap, z0m, z0h, agesno, &
    1010       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
     
    1919       zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, &
    2020       ql_ancien, qs_ancien, qbs_ancien, &
    21        cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &
     21       cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &
    2222       prlw_ancien, prsw_ancien, prbsw_ancien, prw_ancien, &
    2323       u10m,v10m,ale_wake,ale_bl_stat, ratqs_inter_
     
    616616          cf_ancien = 0.
    617617          qvc_ancien = 0.
    618           cwcon = 0.
     618          qvcon = 0.
     619          qccon = 0.
    619620        ENDIF
    620621        IF ( ok_plane_contrail ) THEN
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90

    r5625 r5626  
    156156  LOGICAL, DIMENSION(klon,klev),   INTENT(IN)   :: ptconv          ! grid points where deep convection scheme is active
    157157  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: cfcon_old       ! cloud fraction from deep convection from previous timestep [-]
    158   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qvcon_old       ! in-cloud vapor specific humidity from deep convection from previous timestep [kg/kg]
    159   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qccon_old       ! in-cloud condensed specific humidity from deep convection from previous timestep [kg/kg]
     158  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: qvcon_old       ! in-cloud vapor specific humidity from deep convection from previous timestep [kg/kg]
     159  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: qccon_old       ! in-cloud condensed specific humidity from deep convection from previous timestep [kg/kg]
    160160  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: cfcon           ! cloud fraction from deep convection [-]
    161161  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qvcon           ! in-cloud vapor specific humidity from deep convection [kg/kg]
     
    683683                  zq_nodeep(i) = zq(i) - ( qvcon(i,k) + qccon(i,k) ) * cfcon(i,k)
    684684
    685               IF ( ( cfcon(i,k) * qccon(i,k) ) .LT. ( cfcon_old(i,k) * qccon_old(i,k) ) ) THEN
     685              IF ( cfcon(i,k) .LT. cfcon_old(i,k) ) THEN
    686686                !--If deep convection is weakening, we add the clouds that are not anymore
    687687                !--'in' deep convection to the advected clouds
    688                 cldfra_in(i) = cldfra_in(i) + MAX(0., cfcon_old(i,k) - cfcon(i,k))
    689                 qvc_in(i) = qvc_in(i) + qvcon_old(i,k) * MAX(0., cfcon_old(i,k) - cfcon(i,k))
    690                 qice_in(i) = qice_in(i) + ( qccon_old(i,k) * cfcon_old(i,k) &
    691                                           - qccon(i,k) * cfcon(i,k) )
    692               ELSEIF ( cfcon(i,k) .GT. cfcon_old(i,k) ) THEN
     688                cldfra_in(i) = cldfra_in(i) + ( cfcon_old(i,k) - cfcon(i,k) )
     689                qvc_in(i) = qvc_in(i) + qvcon_old(i,k) * ( cfcon_old(i,k) - cfcon(i,k) )
     690                qice_in(i) = qice_in(i) + qccon_old(i,k) * ( cfcon_old(i,k) - cfcon(i,k) )
     691              ELSE
    693692                !--Else if deep convection is strengthening, it consumes the existing cloud
    694693                !--fraction (which does not at this moment represent deep convection)
    695                 !--NB. if deep convection is strengthening while the fraction decreases,
    696                 !--clear sky water vapor will be transfered in priority
    697694                cldfra_in(i) = cldfra_in(i) * ( 1. &
    698695                             - ( cfcon(i,k) - cfcon_old(i,k) ) / ( 1. - cfcon_old(i,k) ) )
     
    12311228        qvc_seri(i,k) = qvc(i)
    12321229
     1230        !--We keep convective clouds properties in memory, and account for
     1231        !--the sink of condensed water from precipitation
     1232        IF ( ptconv(i,k) ) THEN
     1233          qvcon_old(i,k) = qvcon(i,k)
     1234          qccon_old(i,k) = qccon(i,k) * zcond(i) / zoliq(i)
     1235        ELSE
     1236          qvcon_old(i,k) = 0.
     1237          qccon_old(i,k) = 0.
     1238        ENDIF
     1239
    12331240        !--Deep convection clouds properties are removed from radiative properties
    12341241        !--outputed from lscp (NB. rneb and radocond are only used for the radiative
     
    12371244        IF ( ptconv(i,k) .AND. pt_pron_clds(i) ) THEN
    12381245          rneb(i,k) = rneb(i,k) - cfcon(i,k)
    1239           radocond(i,k) = radocond(i,k) - qccon(i,k) * cfcon(i,k)
     1246          radocond(i,k) = radocond(i,k) - qccon_old(i,k) * cfcon(i,k)
    12401247        ENDIF
    12411248
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90

    r5625 r5626  
    238238! for unadjusted clouds
    239239REAL :: qiceincld, qvapincld, qvapincld_new
     240REAL :: qice_ratio
    240241!
    241242! for deposition / sublimation
     
    538539              !--Exact explicit integration (qvc exact, qice explicit)
    539540              tauinv_depsub = depo_coef_cirrus * qiceincld**(1./3.) * kappa_depsub
     541              qvapincld_new = qsat(i) + ( qvapincld - qsat(i) ) * EXP( - dtime * tauinv_depsub )
    540542            ELSE
    541543              !--If the cloud is initially subsaturated
    542               !--Exact explicit integration (qvc exact, qice explicit)
    543               !--Same but depo_coef_cirrus = 1
     544              !!--Exact explicit integration (qvc exact, qice explicit)
     545              !!--Same but depo_coef_cirrus = 1
     546              !tauinv_depsub = qiceincld**(1./3.) * kappa_depsub
     547              !qvapincld_new = qsat(i) + ( qvapincld - qsat(i) ) * EXP( - dtime * tauinv_depsub )
     548              !--Exact explicit integration (qice exact, qvc explicit)
     549              !--The barrier is set so that the resulting vapor in cloud
     550              !--cannot be greater than qsat
     551              !--qice_ratio is the ratio between the new ice content and
     552              !--the old one, it is comprised between 0 and 1
    544553              tauinv_depsub = qiceincld**(1./3.) * kappa_depsub
     554              qice_ratio = tauinv_depsub * dtime / 1.5 / qiceinmix * ( qsat(i) - qvapincld )
     555              !--The new vapor in the cloud is increased with the
     556              !--sublimated ice
     557              qvapincld_new = qvapincld + qiceincld * ( 1. - MAX(0., 1. - qice_ratio)**1.5 )
     558              !--The new vapor in the cloud cannot be greater than qsat
     559              qvapincld_new = MIN(qvapincld_new, qsat(i))
     560              !--If all the ice is sublimated
     561              IF ( qvapincld_new .GE. ( qvapincld + qiceincld ) ) qvapincld_new = 0.
    545562            ENDIF ! qvapincld .GT. qsat
    546             qvapincld_new = qsat(i) + ( qvapincld - qsat(i) ) * EXP( - dtime * tauinv_depsub )
    547             !--If all the ice is sublimated
    548             IF ( qvapincld_new .GE. ( qvapincld + qiceincld ) ) qvapincld_new = 0.
    549563          ELSE
    550564            !--We keep the saturation adjustment hypothesis, and the vapor in the
     
    836850          qiceinmix = ( qcld(i) - qvc(i) ) / cldfra(i) / ( 1. + clrfra_mix / cldfra_mix )
    837851          tauinv_depsub = qiceinmix**(1./3.) * kappa_depsub
    838           qvapinmix_lim = qsat(i) - qiceinmix / ( 1. - EXP( - dtime * tauinv_depsub ) )
     852          !qvapinmix_lim = qsat(i) - qiceinmix / ( 1. - EXP( - dtime * tauinv_depsub ) )
     853          qvapinmix_lim = qsat(i) - qiceinmix * MAX(1., 1.5 / ( dtime * tauinv_depsub ))
    839854          qvapinclr_lim = qvapinmix_lim * ( 1. + cldfra_mix / clrfra_mix ) &
    840855                        - qvc(i) / cldfra(i) * cldfra_mix / clrfra_mix
  • LMDZ6/branches/contrails/libf/phylmd/phyetat0_mod.f90

    r5618 r5626  
    1818  USE surface_data,     ONLY : type_ocean, version_ocean
    1919  USE phyetat0_get_mod, ONLY : phyetat0_get, phyetat0_srf
    20   USE phys_state_var_mod, ONLY : ancien_ok, cwcon, clwcon, detr_therm, phys_tstep, &
     20  USE phys_state_var_mod, ONLY : ancien_ok, clwcon, detr_therm, phys_tstep, &
    2121       qsol, fevap, z0m, z0h, agesno, &
    2222       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
    2323       falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, &
    2424       ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, &
    25        cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &
     25       cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &
    2626       radpas, radsol, rain_fall, &
    2727       ratqs, rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, &
     
    416416    ancien_ok=ancien_ok.AND.phyetat0_get(cf_ancien,"CFANCIEN","CFANCIEN",0.)
    417417    ancien_ok=ancien_ok.AND.phyetat0_get(qvc_ancien,"QVCANCIEN","QVCANCIEN",0.)
    418     found=phyetat0_get(cwcon,"CWCON","CWCON",0.)
     418    found=phyetat0_get(qvcon,"QVCON","QVCON",0.)
     419    found=phyetat0_get(qccon,"QCCON","QCCON",0.)
    419420  ELSE
    420421    cf_ancien(:,:)=0.
  • LMDZ6/branches/contrails/libf/phylmd/phyredem.f90

    r5618 r5626  
    2323                                prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien,      &
    2424                                ql_ancien, qs_ancien, qbs_ancien, cf_ancien, &
     25                                qvcon, qccon,                                &
    2526                                qvc_ancien, cfa_ancien, pcf_ancien,          &
    2627                                qva_ancien, qia_ancien, u_ancien, v_ancien,  &
    27                                 cwcon, clwcon, rnebcon, ratqs, pbl_tke,      &
     28                                clwcon, rnebcon, ratqs, pbl_tke,             &
    2829                                wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
    2930                                wake_deltat, wake_deltaq, wake_s, awake_s,   &
     
    255256      CALL put_field(pass,"CFANCIEN", "CFANCIEN", cf_ancien)
    256257      CALL put_field(pass,"QVCANCIEN", "QVCANCIEN", qvc_ancien)
    257       CALL put_field(pass,"CWCON", "CWCON", cwcon)
     258      CALL put_field(pass,"QVCON", "QVCON", qvcon)
     259      CALL put_field(pass,"QCCON", "QCCON", qccon)
    258260    ENDIF
    259261
  • LMDZ6/branches/contrails/libf/phylmd/phys_state_var_mod.F90

    r5618 r5626  
    9494      REAL, ALLOCATABLE, SAVE :: cf_ancien(:,:), qvc_ancien(:,:)
    9595!$OMP THREADPRIVATE(cf_ancien, qvc_ancien)
     96      REAL, ALLOCATABLE, SAVE :: qvcon(:,:), qccon(:,:)
     97!$OMP THREADPRIVATE(qvcon, qccon)
    9698      REAL, ALLOCATABLE, SAVE :: cfa_ancien(:,:), pcf_ancien(:,:)
    9799!$OMP THREADPRIVATE(cfa_ancien, pcf_ancien)
    98100      REAL, ALLOCATABLE, SAVE :: qva_ancien(:,:), qia_ancien(:,:)
    99101!$OMP THREADPRIVATE(qva_ancien, qia_ancien)
    100       REAL, ALLOCATABLE, SAVE :: cwcon(:,:), cwcon0(:,:)
    101 !$OMP THREADPRIVATE(cwcon, cwcon0)
    102102!!! RomP >>>
    103103      REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:)
     
    596596      ALLOCATE(cfa_ancien(klon,klev), pcf_ancien(klon,klev))
    597597      ALLOCATE(qva_ancien(klon,klev), qia_ancien(klon,klev))
    598       ALLOCATE(cwcon(klon,klev), cwcon0(klon,klev))
     598      ALLOCATE(qvcon(klon,klev), qccon(klon,klev))
    599599!!! Rom P >>>
    600600      ALLOCATE(tr_ancien(klon,klev,nbtr))
     
    826826      DEALLOCATE(cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien)
    827827      DEALLOCATE(qva_ancien, qia_ancien)
    828       DEALLOCATE(cwcon, cwcon0)
     828      DEALLOCATE(qvcon, qccon)
    829829      DEALLOCATE(tr_ancien)                           !RomP
    830830      DEALLOCATE(ratqs, pbl_tke,coefh,coefm)
  • LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90

    r5623 r5626  
    16281628       clwcon(:,:) = 0.0
    16291629       !--AB for prognostic clouds
    1630        cwcon0(:,:) = 0.0
    1631        cwcon(:,:) = 0.0
     1630       qvcon(:,:) = 0.0
     1631       qccon(:,:) = 0.0
    16321632
    16331633       !
     
    39503950        DO i = 1, klon
    39513951          qvc_seri(i,k) = qvc_seri(i,k) * q_seri(i,k)
    3952           cwcon0(i,k) = zqsat(i,k)
    39533952        ENDDO
    39543953      ENDDO
     
    39713970    CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay,omega, &
    39723971         t_seri, q_seri, ql_seri_lscp, qi_seri_lscp, ratqs, sigma_qtherm, &
    3973          ptconv, rnebcon, cwcon, clwcon, rnebcon0, cwcon0, clwcon0, &
     3972         ptconv, rnebcon, qvcon, qccon, rnebcon0, zqsat, clwcon0, &
    39743973         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, &
    39753974         pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb,  &
     
    39913990         dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez, &
    39923991         dqised, dcfsed, dqvcsed)
    3993 
    3994     IF (ok_ice_supersat) cwcon(:,:) = cwcon0(:,:)
    39953992
    39963993    ELSE
Note: See TracChangeset for help on using the changeset viewer.