Changeset 4562


Ignore:
Timestamp:
Jun 7, 2023, 3:33:57 PM (12 months ago)
Author:
evignon
Message:

nettoyage et reecriture propre de icefrac_lscp_mod
+ ajoute d'une option pour faire dependre la phase du nuage
de la distance / sommet
travail de Lea Raillard et Meryl Wimmer

Location:
LMDZ6/trunk/libf
Files:
9 edited

Legend:

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

    r4559 r4562  
    116116  PARAMETER (dice_velo=0.16)
    117117
     118  REAL, SAVE :: dist_liq=300.                    ! typical deph of cloud-top liquid layer in mpcs
     119  !$OMP THREADPRIVATE(dist_liq)
     120
     121  REAL, SAVE    :: tresh_cl=0.0                  ! cloud fraction threshold for cloud top search
     122  !$OMP THREADPRIVATE(tresh_cl)
    118123
    119124CONTAINS
     
    178183    CALL getin_p('coef_eva_i',coef_eva_i)
    179184    CALL getin_p('iflag_autoconversion',iflag_autoconversion)
     185    CALL getin_p('dist_liq',dist_liq)
     186    CALL getin_p('tresh_cl',tresh_cl)
    180187
    181188
     
    211218    WRITE(lunout,*) 'lscp, coef_eva_i', coef_eva_i
    212219    WRITE(lunout,*) 'lscp, iflag_autoconversion', iflag_autoconversion
     220    WRITE(lunout,*) 'lscp, dist_liq', dist_liq
     221    WRITE(lunout,*) 'lscp, tresh_cl', tresh_cl
    213222
    214223
  • LMDZ6/trunk/libf/phylmd/lscp_mod.F90

    r4559 r4562  
    1515     ztv, zpspsk, ztla, zthl, iflag_cld_th,             &
    1616     iflag_ice_thermo, ok_ice_sursat, qsatl, qsats,     &
     17     distcltop,                                         &
    1718     qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss,   &
    1819     Tcontr, qcontr, qcontr2, fcontrN, fcontrP)
     
    9091USE print_control_mod, ONLY: prt_level, lunout
    9192USE cloudth_mod, ONLY : cloudth, cloudth_v3, cloudth_v6, cloudth_mpc
    92 USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat, fallice_velocity
     93USE lscp_tools_mod, ONLY : calc_qsat_ecmwf, icefrac_lscp, calc_gammasat
     94USE lscp_tools_mod, ONLY : fallice_velocity, distance_to_cloud_top
    9395USE ice_sursat_mod, ONLY : ice_sursat
    9496
     
    125127  LOGICAL, DIMENSION(klon,klev),   INTENT(IN)   :: ptconv          ! grid points where deep convection scheme is active
    126128
    127 
    128129  !Inputs associated with thermal plumes
    129130
     
    133134  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: zpspsk          ! exner potential (p/100000)**(R/cp)
    134135  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: ztla            ! liquid temperature within thermals [K]
    135   REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: zthl         ! liquid potential temperature [K]
    136136
    137137  ! INPUT/OUTPUT variables
    138138  !------------------------
    139 
     139 
     140  REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: zthl         ! liquid potential temperature [K]
    140141  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: ratqs            ! function of pressure that sets the large-scale
    141142  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: beta             ! conversion rate of condensed water
     
    165166  REAL, DIMENSION(klon,klev+1),    INTENT(OUT)  :: prfl             ! large-scale rainfall flux in the column [kg/s/m2]
    166167  REAL, DIMENSION(klon,klev+1),    INTENT(OUT)  :: psfl             ! large-scale snowfall flux in the column [kg/s/m2]
     168  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: distcltop        ! distance to cloud top [m]
    167169
    168170  ! fraction of aerosol scavenging through impaction and nucleation (for on-line)
     
    237239  REAL radocondi(klon,klev), radocondl(klon,klev)
    238240  REAL effective_zneb
     241  REAL distcltop1D(klon)
     242
    239243
    240244  INTEGER i, k, n, kk
     
    258262
    259263! Few initial checks
    260 
    261 IF (iflag_t_glace.EQ.0) THEN
    262     abort_message = 'lscp cannot be used if iflag_t_glace=0'
    263     CALL abort_physic(modname,abort_message,1)
    264 ENDIF
    265 
    266 IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN
    267     abort_message = 'lscp cannot be used without ice thermodynamics'
    268     CALL abort_physic(modname,abort_message,1)
    269 ENDIF
    270264
    271265IF (iflag_fisrtilp_qsat .LT. 0) THEN
     
    325319d_tot_zneb(:) = 0.0
    326320qzero(:) = 0.0
     321distcltop1D(:)=0.0
    327322
    328323!--ice supersaturation
     
    726721                  ! saturation may occur at a humidity different from qsat (gamma qsat), so gamma correction for dqs
    727722                  zdqs(:) = gammasat(:)*zdqs(:)+zqs(:)*dgammasatdt(:)
    728                   CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, pplay(:,k)/paprs(:,1),zfice(:),dzfice(:))
     723                  ! cloud phase determination
     724                  IF (iflag_t_glace.GE.4) THEN
     725                  ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top
     726                       CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D)
     727                  ENDIF
     728                  CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),zfice(:),dzfice(:))
    729729
    730730                  DO i=1,klon !todoan : check if loop in i is needed
     
    814814        !   zcond: mean condensed water in the mesh
    815815        !   zqn  : mean water vapor in the mesh
     816        !   zfice: ice fraction in clouds
    816817        !   zt   : temperature
    817818        !   rhcl : clear-sky relative humidity
    818819        ! ----------------------------------------------------------------
    819820
     821
     822        ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top
     823        IF (iflag_t_glace.GE.4) THEN
     824            CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D)
     825            distcltop(:,k)=distcltop1D(:)
     826        ENDIF   
     827
     828        ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)
     829        CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),zfice(:), dzfice(:))
     830
     831
    820832        ! Water vapor update, Phase determination and subsequent latent heat exchange
    821 
    822         ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)
    823         CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,pplay(:,k)/paprs(:,1),zfice(:), dzfice(:))
    824 
    825833        DO i=1, klon
    826 
    827834
    828835            IF (mpc_bl_points(i,k) .GT. 0) THEN
  • LMDZ6/trunk/libf/phylmd/lscp_tools_mod.F90

    r4559 r4562  
    102102
    103103!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    104 SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, sig, icefrac, dicefracdT)
     104SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, 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
     116    USE lscp_ini_mod, ONLY : RTT, dist_liq
    117117
    118118    IMPLICIT NONE
     
    121121    INTEGER, INTENT(IN)                 :: klon       ! number of horizontal grid points
    122122    REAL, INTENT(IN), DIMENSION(klon)   :: temp       ! temperature
    123     REAL, INTENT(IN), DIMENSION(klon)   :: sig
     123    REAL, INTENT(IN), DIMENSION(klon)   :: distcltop       ! distance to cloud top
    124124    INTEGER, INTENT(IN)                 :: iflag_ice_thermo
    125125    REAL, INTENT(OUT), DIMENSION(klon)  :: icefrac
     
    128128
    129129    INTEGER i
    130     REAL    sig0,www,tmin_tmp,liqfrac_tmp
     130    REAL    liqfrac_tmp, dicefrac_tmp
    131131    REAL    Dv, denomdep,beta,qsi,dqsidt
    132     INTEGER exposant_glace_old
    133     REAL t_glace_min_old
    134132    LOGICAL ice_thermo
    135133
    136     sig0=0.8
    137     t_glace_min_old = RTT - 15.0
    138     ice_thermo = (iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3)
    139     IF (ice_thermo) THEN
    140       exposant_glace_old = 2
    141     ELSE
    142       exposant_glace_old = 6
     134    CHARACTER (len = 20) :: modname = 'lscp_tools'
     135    CHARACTER (len = 80) :: abort_message
     136
     137    IF ((iflag_t_glace.LT.2) .OR. (iflag_t_glace.GT.6)) THEN
     138       abort_message = 'lscp cannot be used if iflag_t_glace<2 or >6'
     139       CALL abort_physic(modname,abort_message,1)
    143140    ENDIF
    144141
    145 
    146 ! calculation of icefrac and dicefrac/dT
     142    IF (.NOT.((iflag_ice_thermo .EQ. 1).OR.(iflag_ice_thermo .GE. 3))) THEN
     143       abort_message = 'lscp cannot be used without ice thermodynamics'
     144       CALL abort_physic(modname,abort_message,1)
     145    ENDIF
     146
    147147
    148148    DO i=1,klon
    149 
    150     IF (iflag_t_glace.EQ.1) THEN
    151             ! Transition to ice close to surface for T<Tmax
    152             ! w=1 at the surface and 0 for sig < sig0
    153             www=(max(sig(i)-sig0,0.))/(1.-sig0)
    154     ELSEIF (iflag_t_glace.GE.2) THEN
    155             ! No convertion to ice close to surface
    156             www = 0.
    157     ENDIF
    158      
    159     tmin_tmp=www*t_glace_max+(1.-www)*t_glace_min
    160     liqfrac_tmp=  (temp(i)-tmin_tmp) / (t_glace_max-tmin_tmp)
    161     liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
    162        
    163     IF (iflag_t_glace.GE.3) THEN
    164             icefrac(i) = 1.0-liqfrac_tmp**exposant_glace
    165             IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0)) THEN
    166                  dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) &
    167                            / (t_glace_min - t_glace_max)
    168             ELSE
    169 
    170                  dicefracdT(i)=0.
    171             ENDIF
    172 
    173     ELSE
     149 
     150        ! old function with sole dependence upon temperature
     151        IF (iflag_t_glace .EQ. 2) THEN
     152            liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     153            liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
    174154            icefrac(i) = (1.0-liqfrac_tmp)**exposant_glace
    175155            IF (icefrac(i) .GT.0.) THEN
     
    182162            ENDIF
    183163
    184     ENDIF
    185    
    186     ENDDO
    187 
    188 
    189     RETURN
    190 
     164        ENDIF
     165
     166        ! function of temperature used in CMIP6 physics
     167        IF (iflag_t_glace .EQ. 3) THEN
     168            liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     169            liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
     170            icefrac(i) = 1.0-liqfrac_tmp**exposant_glace
     171            IF ((icefrac(i) .GT.0.) .AND. (liqfrac_tmp .GT. 0.)) THEN
     172                dicefracdT(i)= exposant_glace * ((liqfrac_tmp)**(exposant_glace-1.)) &
     173                          / (t_glace_min - t_glace_max)
     174            ELSE
     175                dicefracdT(i)=0.
     176            ENDIF
     177        ENDIF
     178
     179        ! for iflag_t_glace .GE. 4, the liquid fraction depends upon temperature at cloud top
     180        ! and then decreases with decreasing height
     181
     182        !with linear function of temperature at cloud top
     183        IF (iflag_t_glace .EQ. 4) THEN 
     184                liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     185                liqfrac_tmp = MIN(MAX(liqfrac_tmp,0.0),1.0)
     186                icefrac(i)    =  MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.)
     187                dicefrac_tmp = - temp(i)/(t_glace_max-t_glace_min)
     188                dicefracdT(i) = dicefrac_tmp*exp(-distcltop(i)/dist_liq)
     189                IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN
     190                        dicefracdT(i) = 0.
     191                ENDIF
     192        ENDIF
     193
     194        ! with CMIP6 function of temperature at cloud top
     195        IF (iflag_t_glace .EQ. 5) THEN
     196                liqfrac_tmp = (temp(i)-t_glace_min) / (t_glace_max-t_glace_min)
     197                liqfrac_tmp =  MIN(MAX(liqfrac_tmp,0.0),1.0)
     198                liqfrac_tmp = liqfrac_tmp**exposant_glace
     199                icefrac(i)  =  MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.)
     200                IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN
     201                        dicefracdT(i) = 0.
     202                ELSE
     203                        dicefracdT(i) = exposant_glace*((liqfrac_tmp)**(exposant_glace-1.))/(t_glace_min- t_glace_max) &
     204                                        *exp(-distcltop(i)/dist_liq)
     205                ENDIF
     206        ENDIF
     207
     208        ! with modified function of temperature at cloud top
     209        ! to get largere values around 260 K, works well with t_glace_min = 241K
     210        IF (iflag_t_glace .EQ. 6) THEN
     211                IF (temp(i) .GT. t_glace_max) THEN
     212                        liqfrac_tmp = 1.
     213                ELSE
     214                        liqfrac_tmp = -((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))**2+1.
     215                ENDIF
     216                liqfrac_tmp  = MIN(MAX(liqfrac_tmp,0.0),1.0)
     217                icefrac(i)   = MAX(MIN(1.,1.0 - liqfrac_tmp*exp(-distcltop(i)/dist_liq)),0.)       
     218                IF ((liqfrac_tmp .LE.0) .OR. (liqfrac_tmp .GE. 1)) THEN
     219                        dicefracdT(i) = 0.
     220                ELSE
     221                        dicefracdT(i) = 2*((temp(i)-t_glace_max) / (t_glace_max-t_glace_min))/(t_glace_max-t_glace_min) &
     222                                  *exp(-distcltop(i)/dist_liq)
     223                ENDIF
     224        ENDIF
     225
     226
     227
     228     ENDDO ! klon
     229 
     230     RETURN
     231 
    191232END SUBROUTINE ICEFRAC_LSCP
    192233!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
    331372
    332373END SUBROUTINE CALC_GAMMASAT
    333 
    334 
     374!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     375
     376
     377!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     378SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D)
     379!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     380   
     381   USE lscp_ini_mod, ONLY : rd,rg,tresh_cl
     382
     383   IMPLICIT NONE
     384   
     385   INTEGER, INTENT(IN) :: klon,klev                !number of horizontal and vertical grid points
     386   INTEGER, INTENT(IN) :: k                        ! vertical index
     387   REAL, INTENT(IN), DIMENSION(klon,klev) :: temp  ! temperature in K
     388   REAL, INTENT(IN), DIMENSION(klon,klev) :: pplay ! pressure middle layer in Pa
     389   REAL, INTENT(IN), DIMENSION(klon,klev+1) :: paprs ! pressure interfaces in Pa
     390   REAL, INTENT(IN), DIMENSION(klon,klev) :: rneb  ! cloud fraction
     391
     392   REAL, INTENT(OUT), DIMENSION(klon) :: distcltop1D  ! distance from cloud top
     393
     394   REAL dzlay(klon,klev)
     395   REAL zlay(klon,klev)
     396   REAL dzinterf
     397   INTEGER i,k_top, kvert
     398   LOGICAL bool_cl
     399
     400
     401   DO i=1,klon
     402         ! Initialization height middle of first layer
     403          dzlay(i,1) = Rd * temp(i,1) / rg * log(paprs(i,1)/paprs(i,2))
     404          zlay(i,1) = dzlay(i,1)/2
     405
     406          DO kvert=2,klev
     407                 IF (kvert.EQ.klev) THEN
     408                       dzlay(i,kvert) = 2*(rd * temp(i,kvert) / rg * log(paprs(i,kvert)/pplay(i,kvert)))
     409                 ELSE
     410                       dzlay(i,kvert) = rd * temp(i,kvert) / rg * log(paprs(i,kvert)/paprs(i,kvert+1))
     411                 ENDIF
     412                       dzinterf       = rd * temp(i,kvert) / rg * log(pplay(i,kvert-1)/pplay(i,kvert))
     413                       zlay(i,kvert)  = zlay(i,kvert-1) + dzinterf
     414           ENDDO
     415   ENDDO
     416   
     417   k_top = k
     418   DO i=1,klon
     419          IF (rneb(i,k) .LE. tresh_cl) THEN
     420                 bool_cl = .FALSE.
     421          ELSE
     422                 bool_cl = .TRUE.
     423          ENDIF
     424
     425          DO WHILE ((bool_cl) .AND. (k_top .LE. klev))
     426          ! find cloud top
     427                IF (rneb(i,k_top) .GT. tresh_cl) THEN
     428                      k_top = k_top + 1
     429                ELSE
     430                      bool_cl = .FALSE.
     431                      k_top   = k_top - 1
     432                ENDIF
     433          ENDDO
     434          k_top=min(k_top,klev)
     435
     436          !dist to top is dist between current layer and layer of cloud top (from middle to middle) + dist middle to
     437          !interf for layer of cloud top
     438          distcltop1D(i) = zlay(i,k_top) - zlay(i,k) + dzlay(i,k_top)/2
     439   ENDDO ! klon
     440
     441END SUBROUTINE DISTANCE_TO_CLOUD_TOP
    335442!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    336443
  • LMDZ6/trunk/libf/phylmd/newmicro.F90

    r4535 r4562  
    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,re, fl, reliq, reice, &
     5    mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg,distcltop, re, fl, reliq, reice, &
    66    reliq_pi, reice_pi)
    77
     
    4242  ! bl95_b1-input-R-a PARAMETER, may be varied for tests (    -"-      )
    4343  ! latitude_deg-input latitude in degrees
     44  ! distcltop ---input- distance from cloud top
    4445
    4546  ! re------output-R-Cloud droplet effective radius multiplied by fl [um]
     
    9899  REAL pctlwp(klon)
    99100
     101  REAL distcltop(klon,klev)
    100102  LOGICAL lo
    101103
     
    242244
    243245      IF (ok_new_lscp) THEN
    244           CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,pplay(:,k)/paprs(:,1),zfice(:,k),dzfice(:,k))
     246          CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:,k),dzfice(:,k))
    245247      ELSE
    246248          CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k))
  • LMDZ6/trunk/libf/phylmd/nuage.F90

    r4535 r4562  
    22
    33SUBROUTINE nuage(paprs, pplay, t, pqlwp,picefra, pclc, pcltau, pclemi, pch, pcl, pcm, &
    4     pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, &
     4    pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, distcltop, &
    55    cldtaupi, re, fl)
    66  USE dimphy
     
    5050
    5151  REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon)
    52 
     52  REAL distcltop(klon,klev)
    5353  LOGICAL lo
    5454
     
    113113!                           t_glace_max, exposant_glace)
    114114        IF (ok_new_lscp) THEN
    115             CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,pplay(:,k)/paprs(:,1),zfice(:),dzfice(:))
     115            CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),zfice(:),dzfice(:))
    116116        ELSE
    117117            CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:))
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r4530 r4562  
    531531      REAL, SAVE, ALLOCATABLE :: fcontrP(:,:)
    532532      !$OMP THREADPRIVATE(fcontrP)
     533      REAL, SAVE, ALLOCATABLE :: distcltop(:,:)
     534      !$OMP THREADPRIVATE(disctcltop)
     535
    533536
    534537#ifdef CPP_StratAer
     
    888891      ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev))
    889892      pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined
     893      ALLOCATE(distcltop(klon,klev))
    890894
    891895
     
    11971201      DEALLOCATE(pfraclr,pfracld)
    11981202      DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic)
    1199 
     1203      DEALLOCATE(distcltop)
    12001204      DEALLOCATE (p_tropopause)
    12011205      DEALLOCATE (z_tropopause)
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4547 r4562  
    295295       rneblsvol, &
    296296       pfraclr,pfracld, &
     297       distcltop, &
    297298       zqsatl, zqsats, &
    298299       qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     
    37233724         prfl, psfl, rhcl,  &
    37243725         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    3725          iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &
     3726         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &
    37263727         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    37273728         Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     
    42964297               flwp, fiwp, flwc, fiwc, &
    42974298               mass_solu_aero, mass_solu_aero_pi, &
    4298                cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &
     4299               cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &
    42994300               ref_liq_pi, ref_ice_pi)
    43004301       ELSE
     
    43044305               ok_aie, &
    43054306               mass_solu_aero, mass_solu_aero_pi, &
    4306                bl95_b0, bl95_b1, &
     4307               bl95_b0, bl95_b1, distcltop, &
    43074308               cldtaupi, re, fl)
    43084309       ENDIF
  • LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90

    r4530 r4562  
    593593      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld
    594594!$OMP THREADPRIVATE(pfraclr,pfracld)
     595      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: distcltop
     596!$OMP THREADPRIVATE(distcltop)
    595597
    596598! variables de sorties MM
     
    10801082      ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev))
    10811083      pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined
    1082 
     1084      ALLOCATE(distcltop(klon,klev))
    10831085
    10841086      ALLOCATE (zxsnow(klon),snowhgt(klon),qsnow(klon),to_ice(klon))
     
    14521454      DEALLOCATE(rneb)
    14531455      DEALLOCATE(pfraclr,pfracld)
     1456      DEALLOCATE(distcltop)
    14541457      DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic)
    14551458#ifdef ISO
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r4541 r4562  
    332332       rneblsvol, &
    333333       pfraclr,pfracld, &
     334       distcltop, &
    334335       zqsatl, zqsats, &
    335336       qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     
    47944795         prfl, psfl, rhcl,  &
    47954796         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    4796          iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &
     4797         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &
    47974798         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    47984799         Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     
    55625563               flwp, fiwp, flwc, fiwc, &
    55635564               mass_solu_aero, mass_solu_aero_pi, &
    5564                cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &
     5565               cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &
    55655566               ref_liq_pi, ref_ice_pi)
    55665567       ELSE
     
    55705571               ok_aie, &
    55715572               mass_solu_aero, mass_solu_aero_pi, &
    5572                bl95_b0, bl95_b1, &
     5573               bl95_b0, bl95_b1, distcltop, &
    55735574               cldtaupi, re, fl)
    55745575       ENDIF
Note: See TracChangeset for help on using the changeset viewer.