Ignore:
Timestamp:
Jul 24, 2023, 4:46:18 PM (16 months ago)
Author:
evignon
Message:

modification de Lea pour inclure une dependance de la phase a la temperature du sommet du nuage

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

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lscp_ini_mod.F90

    r4563 r4639  
    3030  REAL ztfondue                                 ! parameter to calculate melting fraction of precipitation
    3131  PARAMETER (ztfondue=278.15)
     32
     33  REAL temp_nowater                             ! temperature below which liquid water no longer exists
     34  PARAMETER (temp_nowater=233.15)
    3235
    3336  REAL, SAVE    :: rain_int_min=0.001           ! Minimum local rain intensity [mm/s] before the decrease in associated precipitation fraction
  • LMDZ6/trunk/libf/phylmd/lscp_mod.F90

    r4563 r4639  
    1515     ztv, zpspsk, ztla, zthl, iflag_cld_th,             &
    1616     iflag_ice_thermo, ok_ice_sursat, qsatl, qsats,     &
    17      distcltop,                                         &
     17     distcltop,temp_cltop,                               &
    1818     qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss,   &
    1919     Tcontr, qcontr, qcontr2, fcontrN, fcontrP)
     
    167167  REAL, DIMENSION(klon,klev+1),    INTENT(OUT)  :: psfl             ! large-scale snowfall flux in the column [kg/s/m2]
    168168  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: distcltop        ! distance to cloud top [m]
    169 
     169  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: temp_cltop       ! temperature of cloud top [K]
    170170  ! fraction of aerosol scavenging through impaction and nucleation (for on-line)
    171171 
     
    239239  REAL radocondi(klon,klev), radocondl(klon,klev)
    240240  REAL effective_zneb
    241   REAL distcltop1D(klon)
     241  REAL distcltop1D(klon), temp_cltop1D(klon)
    242242
    243243
     
    320320qzero(:) = 0.0
    321321distcltop1D(:)=0.0
    322 
     322temp_cltop1D(:) = 0.0
    323323!--ice supersaturation
    324324gamma_ss(:,:) = 1.0
     
    729729                  IF (iflag_t_glace.GE.4) THEN
    730730                  ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top
    731                        CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D)
     731                       CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D,temp_cltop1D)
    732732                  ENDIF
    733                   CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),zfice(:),dzfice(:))
     733                  CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),temp_cltop1D(:),zfice(:),dzfice(:))
    734734
    735735                  DO i=1,klon !todoan : check if loop in i is needed
     
    827827        ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top
    828828        IF (iflag_t_glace.GE.4) THEN
    829             CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D)
     829            CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D,temp_cltop1D)
    830830            distcltop(:,k)=distcltop1D(:)
     831            temp_cltop(:,k)=temp_cltop1D(:)
    831832        ENDIF   
    832833
    833834        ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)
    834         CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),zfice(:), dzfice(:))
     835        CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),temp_cltop1D(:),zfice(:), dzfice(:))
    835836
    836837
  • LMDZ6/trunk/libf/phylmd/lscp_tools_mod.F90

    r4562 r4639  
    102102
    103103!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    104 SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, icefrac, dicefracdT)
     104SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, temp_cltop, icefrac, dicefracdT)
    105105!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    106106 
     
    114114    USE print_control_mod, ONLY: lunout, prt_level
    115115    USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace
    116     USE lscp_ini_mod, ONLY : RTT, dist_liq
     116    USE lscp_ini_mod, ONLY : RTT, dist_liq, temp_nowater
    117117
    118118    IMPLICIT NONE
    119119
    120120
    121     INTEGER, INTENT(IN)                 :: klon       ! number of horizontal grid points
    122     REAL, INTENT(IN), DIMENSION(klon)   :: temp       ! temperature
    123     REAL, INTENT(IN), DIMENSION(klon)   :: distcltop       ! distance to cloud top
     121    INTEGER, INTENT(IN)                 :: klon              ! number of horizontal grid points
     122    REAL, INTENT(IN), DIMENSION(klon)   :: temp              ! temperature
     123    REAL, INTENT(IN), DIMENSION(klon)   :: distcltop         ! distance to cloud top
     124    REAL, INTENT(IN), DIMENSION(klon)   :: temp_cltop        ! temperature of cloud top
    124125    INTEGER, INTENT(IN)                 :: iflag_ice_thermo
    125126    REAL, INTENT(OUT), DIMENSION(klon)  :: icefrac
     
    224225        ENDIF
    225226
     227        ! if temperature of cloud top <-40°C,
     228        IF (iflag_t_glace .GE. 4) THEN
     229                IF ((temp_cltop(i) .LE. temp_nowater) .AND. (temp(i) .LE. t_glace_max)) THEN
     230                        icefrac(i) = 1.
     231                        dicefracdT(i) = 0.
     232                ENDIF
     233        ENDIF
    226234
    227235
     
    376384
    377385!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    378 SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D)
     386SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D,temp_cltop)
    379387!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    380388   
     
    391399
    392400   REAL, INTENT(OUT), DIMENSION(klon) :: distcltop1D  ! distance from cloud top
    393 
     401   REAL, INTENT(OUT), DIMENSION(klon) :: temp_cltop     ! temperature of cloud top
     402   
    394403   REAL dzlay(klon,klev)
    395404   REAL zlay(klon,klev)
     
    415424   ENDDO
    416425   
    417    k_top = k
    418426   DO i=1,klon
     427          k_top = k
    419428          IF (rneb(i,k) .LE. tresh_cl) THEN
    420429                 bool_cl = .FALSE.
     
    437446          !interf for layer of cloud top
    438447          distcltop1D(i) = zlay(i,k_top) - zlay(i,k) + dzlay(i,k_top)/2
     448          temp_cltop(i)  = temp(i,k_top)
    439449   ENDDO ! klon
    440450
  • LMDZ6/trunk/libf/phylmd/newmicro.F90

    r4562 r4639  
    33SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, picefra, pclc, &
    44    pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, &
    5     mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg,distcltop, re, fl, reliq, reice, &
     5    mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg, distcltop, temp_cltop, re, fl, reliq, reice, &
    66    reliq_pi, reice_pi)
    77
     
    4343  ! latitude_deg-input latitude in degrees
    4444  ! distcltop ---input- distance from cloud top
     45  ! temp_cltop  -input- temperature of cloud top
    4546
    4647  ! re------output-R-Cloud droplet effective radius multiplied by fl [um]
     
    100101
    101102  REAL distcltop(klon,klev)
     103  REAL temp_cltop(klon,klev)
    102104  LOGICAL lo
    103105
     
    244246
    245247      IF (ok_new_lscp) THEN
    246           CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:,k),dzfice(:,k))
     248          CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),temp_cltop(:,k),zfice(:,k),dzfice(:,k))
    247249      ELSE
    248250          CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k))
  • LMDZ6/trunk/libf/phylmd/nuage.F90

    r4562 r4639  
    33SUBROUTINE nuage(paprs, pplay, t, pqlwp,picefra, pclc, pcltau, pclemi, pch, pcl, pcm, &
    44    pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, distcltop, &
    5     cldtaupi, re, fl)
     5    temp_cltop, cldtaupi, re, fl)
    66  USE dimphy
    77  USE lscp_tools_mod, only: icefrac_lscp
     
    5151  REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon)
    5252  REAL distcltop(klon,klev)
     53  REAL temp_cltop(klon,klev)
    5354  LOGICAL lo
    5455
     
    113114!                           t_glace_max, exposant_glace)
    114115        IF (ok_new_lscp) THEN
    115             CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:),dzfice(:))
     116            CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),temp_cltop(:,k),zfice(:),dzfice(:))
    116117        ELSE
    117118            CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:))
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r4636 r4639  
    537537      REAL, SAVE, ALLOCATABLE :: distcltop(:,:)
    538538      !$OMP THREADPRIVATE(distcltop)
     539      REAL, SAVE, ALLOCATABLE :: temp_cltop(:,:)
     540      !$OMP THREADPRIVATE(temp_cltop)     
    539541
    540542
     
    908910      pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined
    909911      ALLOCATE(distcltop(klon,klev))
    910 
     912      ALLOCATE(temp_cltop(klon,klev))
    911913
    912914      ALLOCATE (zxsnow(klon),snowhgt(klon),qsnow(klon),to_ice(klon))
     
    12231225      DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic)
    12241226      DEALLOCATE(distcltop)
     1227      DEALLOCATE(temp_cltop)
    12251228      DEALLOCATE (p_tropopause)
    12261229      DEALLOCATE (z_tropopause)
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4636 r4639  
    299299       rneblsvol, &
    300300       pfraclr,pfracld, &
    301        distcltop, &
     301       distcltop,temp_cltop, &
    302302       zqsatl, zqsats, &
    303303       qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     
    37393739         prfl, psfl, rhcl,  &
    37403740         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    3741          iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &
     3741         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, &
    37423742         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    37433743         Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     
    43124312               flwp, fiwp, flwc, fiwc, &
    43134313               mass_solu_aero, mass_solu_aero_pi, &
    4314                cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &
     4314               cldtaupi, latitude_deg, distcltop, temp_cltop, re, fl, ref_liq, ref_ice, &
    43154315               ref_liq_pi, ref_ice_pi)
    43164316       ELSE
     
    43204320               ok_aie, &
    43214321               mass_solu_aero, mass_solu_aero_pi, &
    4322                bl95_b0, bl95_b1, distcltop, &
     4322               bl95_b0, bl95_b1, distcltop, temp_cltop, &
    43234323               cldtaupi, re, fl)
    43244324       ENDIF
Note: See TracChangeset for help on using the changeset viewer.