Ignore:
Timestamp:
Feb 16, 2026, 3:47:40 PM (13 days ago)
Author:
debatzbr
Message:

Pluto PCM: Improvement of Ice Microphysics + some cleans.
Allows for nucleation on spherical, fractal, or both aerosol types.
Add coagulation of ice particles.
BBT

Location:
trunk/LMDZ.PLUTO/libf/muphypluto
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.PLUTO/libf/muphypluto/mp2m_clouds.F90

    r4027 r4073  
    2121    !        - mm_cloud_microphysics  | Evolution of moments tracers through clouds microphysics processes.
    2222    !        - mm_cloud_nucond        | Get moments tendencies through nucleation/condensation/evaporation.
    23     !        - nc_esp                 | Get moments tendencies through nucleation/condensation/evaporation of a given condensible species.
    24     !        - hetnucl_rate_aer       | Get heterogeneous nucleation rate on aerosols.
    25     !        - growth_rate            | Get growth rate through condensation/evaporation process.
     23    !           * nc_esp              | Get moments tendencies through nucleation/condensation/evaporation of a given condensible species.
     24    !           * hetnucl_rate_aer    | Get heterogeneous nucleation rate on aerosols.
     25    !           * growth_rate         | Get growth rate through condensation/evaporation process.
    2626    !        - mm_cloud_sedimentation | Compute the tendency of clouds related moments through sedimentation process.
    27     !        - exchange               | Compute the exchange matrix.
    28     !        - getnzs                 | Compute displacement of a cell under sedimentation process.
    29     !        - wsettle                | Compute the settling velocity of a spherical particle.
    30     !        - get_mass_flux          | Get the mass flux of clouds related moment through sedimention.
     27    !           * exchange            | Compute the exchange matrix.
     28    !           * getnzs              | Compute displacement of a cell under sedimentation process.
     29    !           * wsettle             | Compute the settling velocity of a spherical particle.
     30    !           * get_mass_flux       | Get the mass flux of clouds related moment through sedimention.
     31    !        - mm_cloud_coagulation   | Compute the tendency of clouds related moments through coagulation process.
    3132    !
    3233    !     Authors
     
    8687        !~~~~~~~~~~~~~~~~
    8788        INTEGER :: i
     89        ! Updated tracers with haze and cloud related processes tendencies
     90        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: m0as,m3as
     91        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: m0af,m3af
     92        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: m0ccn,m3ccn
     93        REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: m3ice,mugas
     94        ! Temporary tendencies through nucleation/condensation/sublimation
     95        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: nCdm0as,nCdm3as
     96        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: nCdm0af,nCdm3af
     97        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: nCdm0ccn,nCdm3ccn
     98        REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: nCdm3ice,nCdmugas
     99        ! Temporary tendencies through coagulation
     100        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: cCdm0ccn,cCdm3ccn
    88101        ! Temporary tendencies through sedimentation (usefull for diagnostics)
    89102        REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE   :: zCdm0ccn,zCdm3ccn
     
    92105        ! Initialization:
    93106        !~~~~~~~~~~~~~~~~
     107        ALLOCATE(m0as(mm_nla),m3as(mm_nla),m0af(mm_nla),m3af(mm_nla))
     108        ALLOCATE(m0ccn(mm_nla),m3ccn(mm_nla),m3ice(mm_nla,mm_nesp),mugas(mm_nla,mm_nesp))
     109        ALLOCATE(nCdm0as(mm_nla),nCdm3as(mm_nla),nCdm0af(mm_nla),nCdm3af(mm_nla))
     110        ALLOCATE(nCdm0ccn(mm_nla),nCdm3ccn(mm_nla),nCdm3ice(mm_nla,mm_nesp),nCdmugas(mm_nla,mm_nesp))
     111        ALLOCATE(cCdm0ccn(mm_nla),cCdm3ccn(mm_nla))
    94112        ALLOCATE(zCdm0ccn(mm_nla),zCdm3ccn(mm_nla),zCdm3ice(mm_nla,mm_nesp))
     113       
     114        m0as(:) = mm_m0aer_s + Hdm0as ; m3as(:) = mm_m3aer_s + Hdm3as
     115        m0af(:) = mm_m0aer_f + Hdm0af ; m3af(:) = mm_m3aer_f + Hdm3af
     116        m0ccn(:)   = mm_m0ccn ; m3ccn(:)   = mm_m3ccn
     117        m3ice(:,:) = mm_m3ice ; mugas(:,:) = mm_gas
    95118       
    96119        Cdm0as(:)    = 0._mm_wp ; Cdm3as(:)    = 0._mm_wp
     
    99122        Cdm3ice(:,:) = 0._mm_wp ; Cdmugas(:,:) = 0._mm_wp
    100123
    101         zCdm0ccn(:)   = 0._mm_wp ; zCdm3ccn(:) = 0._mm_wp
     124        nCdm0as(:)    = 0._mm_wp ; nCdm3as(:)    = 0._mm_wp
     125        nCdm0af(:)    = 0._mm_wp ; nCdm3af(:)    = 0._mm_wp
     126        nCdm0ccn(:)   = 0._mm_wp ; nCdm3ccn(:)   = 0._mm_wp
     127        nCdm3ice(:,:) = 0._mm_wp ; nCdmugas(:,:) = 0._mm_wp
     128        cCdm0ccn(:)   = 0._mm_wp ; cCdm3ccn(:)   = 0._mm_wp
     129        zCdm0ccn(:)   = 0._mm_wp ; zCdm3ccn(:)   = 0._mm_wp
    102130        zCdm3ice(:,:) = 0._mm_wp
    103131
     
    105133        ! And update saturation ratio, nucleation rate and growth rate diagnostic.
    106134        !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    107         call mm_cloud_nucond(Hdm0as,Hdm3as,Hdm0af,Hdm3af,Cdm0as,Cdm3as,Cdm0af,Cdm3af,&
    108                             Cdm0ccn,Cdm3ccn,Cdm3ice,Cdmugas,mm_gas_sat,mm_nrate,mm_grate)
    109      
     135        call mm_cloud_nucond(m0as,m3as,m0af,m3af,m0ccn,m3ccn,m3ice,mugas,&
     136                             nCdm0as,nCdm3as,nCdm0af,nCdm3af,&
     137                             nCdm0ccn,nCdm3ccn,nCdm3ice,nCdmugas,mm_gas_sat,mm_nrate,mm_grate)
     138       
     139        ! Update tracers
     140        m0as  = m0as  + nCdm0as  ; m3as  = m3as  + nCdm3as
     141        m0af  = m0af  + nCdm0af  ; m3af  = m3af  + nCdm3af
     142        m0ccn = m0ccn + nCdm0ccn ; m3ccn = m3ccn + nCdm3ccn
     143        m3ice = m3ice + nCdm3ice ; mugas = mugas + nCdmugas
     144
     145        where(m3as > 0._mm_wp .AND. m0as > 0._mm_wp)
     146          mm_rcs = mm_get_rcs(m0as,m3as)
     147        elsewhere
     148          mm_rcs = 0._mm_wp
     149        endwhere
     150        where(m3af > 0._mm_wp .AND. m0af > 0._mm_wp)
     151          mm_rcf = mm_get_rcf(m0af,m3af)
     152        elsewhere
     153          mm_rcf = 0._mm_wp
     154        endwhere
     155        call mm_cloud_properties(m0ccn,m3ccn,m3ice,mm_drad,mm_drho)
     156
     157        ! Calls coagulation:
     158        !~~~~~~~~~~~~~~~~~~~
     159        call mm_cloud_coagulation(m0ccn,m3ccn,m3ice,cCdm0ccn,cCdm3ccn)
     160       
     161        ! Update tracers
     162        m0ccn = m0ccn + cCdm0ccn ; m3ccn = m3ccn + cCdm3ccn
     163        call mm_cloud_properties(m0ccn,m3ccn,m3ice,mm_drad,mm_drho)
     164
    110165        ! Calls sedimentation:
    111166        !~~~~~~~~~~~~~~~~~~~~~
    112         call mm_cloud_sedimentation(zCdm0ccn,zCdm3ccn,zCdm3ice)
    113        
     167        call mm_cloud_sedimentation(m0ccn,m3ccn,m3ice,zCdm0ccn,zCdm3ccn,zCdm3ice)
     168
     169        ! Update tracers
     170        m0ccn = m0ccn + zCdm0ccn ; m3ccn = m3ccn + zCdm3ccn
     171        m3ice = m3ice + zCdm3ice
     172        call mm_cloud_properties(m0ccn,m3ccn,m3ice,mm_drad,mm_drho)
     173
    114174        ! Computes diagnostics:
    115175        !~~~~~~~~~~~~~~~~~~~~~~
     
    118178
    119179        ! Flux [kg.m-2.s-1] and precipitation [kg.m-2] of ccn
    120         mm_ccn_flux(:) = get_mass_flux(mm_rhoaer,mm_m3ccn(:))
     180        mm_ccn_flux(:) = get_mass_flux(mm_rhoaer,m3ccn(:))
    121181        mm_ccn_prec = SUM(zCdm3ccn(:)*mm_dzlev*mm_rhoaer)
    122182
    123183        ! Flux [kg.m-2.s-1] and precipitation [kg.m-2] of ices
    124184        DO i = 1, mm_nesp
    125             mm_ice_fluxes(:,i) = get_mass_flux(mm_xESPS(i)%rho_s,mm_m3ice(:,i))
     185            mm_ice_fluxes(:,i) = get_mass_flux(mm_xESPS(i)%rho_s,m3ice(:,i))
    126186            mm_ice_prec(i) = SUM(zCdm3ice(:,i)*mm_dzlev*mm_xESPS(i)%rho_s)
    127187        ENDDO
     
    129189        ! Updates tendencies:
    130190        !~~~~~~~~~~~~~~~~~~~~
    131         Cdm0ccn = Cdm0ccn + zCdm0ccn
    132         Cdm3ccn = Cdm3ccn + zCdm3ccn
    133         Cdm3ice = Cdm3ice + zCdm3ice
     191        Cdm0as = nCdm0as ; Cdm3as = nCdm3as
     192        Cdm0af = nCdm0af ; Cdm3af = nCdm3af
     193        Cdm0ccn = nCdm0ccn + cCdm0ccn + zCdm0ccn ; Cdm3ccn = nCdm3ccn + cCdm3ccn + zCdm3ccn
     194        Cdm3ice = nCdm3ice + zCdm3ice ; Cdmugas = nCdmugas
     195
    134196    END SUBROUTINE mm_cloud_microphysics
    135197
     
    138200    !============================================================================
    139201
    140     SUBROUTINE mm_cloud_nucond(Hdm0as,Hdm3as,Hdm0af,Hdm3af,Cdm0as,Cdm3as,Cdm0af,Cdm3af,&
    141                                Cdm0ccn,Cdm3ccn,Cdm3ice,Cdmugas,gassat,nrate,grate)
     202    SUBROUTINE mm_cloud_nucond(m0as,m3as,m0af,m3af,m0ccn,m3ccn,m3ice,mugas,&
     203                               dm0s,dm3s,dm0f,dm3f,dm0n,dm3n,dm3i,dmugas,&
     204                               gassat,nrate,grate)
    142205        !! Get moments tendencies through nucleation and condensation/evaporation.
    143206        !!
     
    159222        !! the total volume of CH4 ice and  gazs(i) its vapor mole fraction.
    160223        !!
    161         ! Tendency of the 0th and 3rd order moment of the aerosols (spherical mode) through haze microphysics processes.
    162         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm0as ! (m-3)
    163         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm3as ! (m3.m-3)
    164         ! Tendency of the 0th and 3rd order moment of the aerosols (fractal mode) through haze microphysics processes.
    165         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm0af ! (m-3)
    166         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm3af ! (m3.m-3)
     224        ! 0th and 3rd order moment of the aerosols (spherical mode) component.
     225        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0as ! (m-3)
     226        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3as ! (m3.m-3)
     227        ! 0th and 3rd order moment of the aerosols (fractal mode) component.
     228        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0af ! (m-3)
     229        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3af ! (m3.m-3)
     230        ! 0th and 3rd order moment of the cloud condensation nuclei component.
     231        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0ccn ! (m-3)
     232        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3ccn ! (m3.m-3)
     233        ! 3rd order moment of ices and gases component.
     234        REAL(kind=mm_wp), DIMENSION(:,:), INTENT(in)  :: m3ice ! (m-3)
     235        REAL(kind=mm_wp), DIMENSION(:,:), INTENT(in)  :: mugas ! (m3.m-3)
    167236        ! Tendency of the 0th and 3rd order moment of the aerosols (spherical mode) through cloud microphysics processes.
    168         REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: Cdm0as ! (m-3)
    169         REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: Cdm3as ! (m3.m-3)
     237        REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: dm0s  ! (m-3)
     238        REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: dm3s  ! (m3.m-3)
    170239        ! Tendency of the 0th and 3rd order moment of the aerosols (fractal mode) through cloud microphysics processes.
    171         REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: Cdm0af ! (m-3)
    172         REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: Cdm3af ! (m3.m-3)
     240        REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: dm0f  ! (m-3)
     241        REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: dm3f  ! (m3.m-3)
    173242        ! Tendency of the 0th and 3rd order moment of the ccn distribution through cloud microphysics processes.
    174         REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: Cdm0ccn ! (m-3)
    175         REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: Cdm3ccn ! (m3.m-3)
     243        REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: dm0n  ! (m-3)
     244        REAL(kind=mm_wp), DIMENSION(:), INTENT(out)   :: dm3n  ! (m3.m-3)
    176245        ! Tendencies of the 3rd order moments of each ice components through cloud microphysics processes.
    177         REAL(kind=mm_wp), DIMENSION(:,:), INTENT(out) :: Cdm3ice ! (m3.m-3)
     246        REAL(kind=mm_wp), DIMENSION(:,:), INTENT(out) :: dm3i  ! (m3.m-3)
    178247        ! Tendencies of each condensible gaz species through cloud microphysics processes.
    179         REAL(kind=mm_wp), DIMENSION(:,:), INTENT(out) :: Cdmugas ! (mol.mol-1)
     248        REAL(kind=mm_wp), DIMENSION(:,:), INTENT(out) :: dmugas ! (mol.mol-1)
    180249        ! Saturation ratio of each condensible species.
    181250        REAL(kind=mm_wp), DIMENSION(:,:), INTENT(out) :: gassat
     
    188257        !~~~~~~~~~~~~~~~~~
    189258        INTEGER :: i,idx
    190         REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zCdm0as,zCdm3as
    191         REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zCdm0af,zCdm3af
    192         REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zCdm0ccn,zCdm3ccn
     259        REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zdm0s,zdm3s
     260        REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zdm0f,zdm3f
     261        REAL(kind=mm_wp), DIMENSION(:,:), ALLOCATABLE :: zdm0n,zdm3n
    193262
    194263        ! Initialization:
    195264        !~~~~~~~~~~~~~~~~
    196         ALLOCATE(zCdm0as(mm_nla,mm_nesp),zCdm3as(mm_nla,mm_nesp))
    197         ALLOCATE(zCdm0af(mm_nla,mm_nesp),zCdm3af(mm_nla,mm_nesp))
    198         ALLOCATE(zCdm0ccn(mm_nla,mm_nesp),zCdm3ccn(mm_nla,mm_nesp))
    199        
    200         zCdm0as(:,:)  = 0._mm_wp ; zCdm3as(:,:)  = 0._mm_wp
    201         zCdm0af(:,:)  = 0._mm_wp ; zCdm3af(:,:)  = 0._mm_wp
    202         zCdm0ccn(:,:) = 0._mm_wp ; zCdm3ccn(:,:) = 0._mm_wp
     265        ALLOCATE(zdm0s(mm_nla,mm_nesp),zdm3s(mm_nla,mm_nesp))
     266        ALLOCATE(zdm0f(mm_nla,mm_nesp),zdm3f(mm_nla,mm_nesp))
     267        ALLOCATE(zdm0n(mm_nla,mm_nesp),zdm3n(mm_nla,mm_nesp))
     268       
     269        zdm0s(:,:) = 0._mm_wp ; zdm3s(:,:) = 0._mm_wp
     270        zdm0f(:,:) = 0._mm_wp ; zdm3f(:,:) = 0._mm_wp
     271        zdm0n(:,:) = 0._mm_wp ; zdm3n(:,:) = 0._mm_wp
     272
     273        dm0s(:)   = 0._mm_wp ; dm3s(:)     = 0._mm_wp
     274        dm0f(:)   = 0._mm_wp ; dm3f(:)     = 0._mm_wp
     275        dm0n(:)   = 0._mm_wp ; dm3n(:)     = 0._mm_wp
     276        dm3i(:,:) = 0._mm_wp ; dmugas(:,:) = 0._mm_wp
    203277
    204278        ! Calls nucleation/condensation for each species:
    205279        !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    206280        DO i = 1, mm_nesp
    207           CALL nc_esp(mm_xESPS(i),mm_gas(:,i),mm_m3ice(:,i),                &
    208                       Hdm0as(:),Hdm3as(:),Hdm0af(:),Hdm3af(:),              &
    209                       zCdm0as(:,i),zCdm3as(:,i),zCdm0af(:,i),zCdm3af(:,i),  &
    210                       zCdm0ccn(:,i),zCdm3ccn(:,i),Cdm3ice(:,i),Cdmugas(:,i),&
     281          CALL nc_esp(mm_xESPS(i),mugas(:,i),m3ice(:,i),            &
     282                      m0as(:),m3as(:),m0af(:),m3af(:),m0ccn(:),m3ccn(:),&
     283                      zdm0s(:,i),zdm3s(:,i),zdm0f(:,i),zdm3f(:,i),      &
     284                      zdm0n(:,i),zdm3n(:,i),dm3i(:,i),dmugas(:,i),      &
    211285                      gassat(:,i),nrate(:,i),grate(:,i))
    212286        ENDDO
     
    215289        !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    216290        DO i = 1, mm_nla
    217           idx = MAXLOC(zCdm0ccn(i,:),DIM=1,MASK=(Cdm3ice(i,:) /= 0._mm_wp .OR. mm_m3ice(i,:)+Cdm3ice(i,:) >= 0._mm_wp))
     291          idx = MAXLOC(zdm0n(i,:),DIM=1,MASK=(dm3i(i,:) /= 0._mm_wp .OR. m3ice(i,:)+dm3i(i,:) >= 0._mm_wp))
    218292
    219293          IF (idx == 0) THEN
    220             Cdm0as(i) = 0._mm_wp
    221             Cdm3as(i) = 0._mm_wp
    222             Cdm0af(i) = 0._mm_wp
    223             Cdm3af(i) = 0._mm_wp
    224             Cdm0ccn(i) = 0._mm_wp
    225             Cdm3ccn(i) = 0._mm_wp
     294            dm0s(i) = 0._mm_wp
     295            dm3s(i) = 0._mm_wp
     296            dm0f(i) = 0._mm_wp
     297            dm3f(i) = 0._mm_wp
     298            dm0n(i) = 0._mm_wp
     299            dm3n(i) = 0._mm_wp
    226300
    227301          ELSE
     
    230304              " mbar: Max aer/ccn exchange variation due to species: "//TRIM(mm_xESPS(idx)%name)
    231305            ENDIF
    232             Cdm0as(i)  = zCdm0as(i,idx)
    233             Cdm3as(i)  = zCdm3as(i,idx)
    234             Cdm0af(i)  = zCdm0af(i,idx)
    235             Cdm3af(i)  = zCdm3af(i,idx)
    236             Cdm0ccn(i) = zCdm0ccn(i,idx)
    237             Cdm3ccn(i) = zCdm3ccn(i,idx)
     306            dm0s(i) = zdm0s(i,idx)
     307            dm3s(i) = zdm3s(i,idx)
     308            dm0f(i) = zdm0f(i,idx)
     309            dm3f(i) = zdm3f(i,idx)
     310            dm0n(i) = zdm0n(i,idx)
     311            dm3n(i) = zdm3n(i,idx)
    238312          ENDIF
    239313        ENDDO
     
    241315   
    242316
    243     SUBROUTINE nc_esp(xESP,Xvap,Xm3ice,Hdm0as,Hdm3as,Hdm0af,Hdm3af,&
     317    SUBROUTINE nc_esp(xESP,Xvap,Xm3ice,m0as,m3as,m0af,m3af,m0ccn,m3ccn,&
    244318                      dm0as,dm3as,dm0af,dm3af,dm0ccn,dm3ccn,Xdm3ice,Xdvap,Xsat,Xnrate,Xgrate)
    245319        !! Get moments tendencies through nucleation/condensation/evaporation of a given condensible species.
     
    270344        ! 3rd order moment of the ice component.
    271345        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Xm3ice  ! (m3.m-3)
    272         ! Tendency of the 0th and 3rd order moment of the aerosols (spherical mode) through haze microphysics processes.
    273         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm0as  ! (m-3)
    274         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm3as  ! (m3.m-3)
    275         ! Tendency of the 0th and 3rd order moment of the aerosols (fractal mode) through haze microphysics processes.
    276         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm0af  ! (m-3)
    277         REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: Hdm3af  ! (m3.m-3)   
     346        ! 0th and 3rd order moment of the aerosols (spherical mode) component.
     347        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0as  ! (m-3)
     348        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3as  ! (m3.m-3)
     349        ! 0th and 3rd order moment of the aerosols (fractal mode) component.
     350        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0af  ! (m-3)
     351        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3af  ! (m3.m-3)
     352        ! 0th and 3rd order moment of the cloud condensation nuclei component.
     353        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0ccn ! (m-3)
     354        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3ccn ! (m3.m-3)   
    278355        ! Tendency of the 0th and 3rd order moment of the aerosols (spherical mode) through cloud microphysics processes.
    279356        REAL(kind=mm_wp), DIMENSION(:), INTENT(inout) :: dm0as   ! (m-3)
     
    298375        ! Local variables:
    299376        !~~~~~~~~~~~~~~~~~
    300         INTEGER :: i
     377        INTEGER :: i, nucl_k
    301378        REAL(kind=mm_wp) :: bef,aft
    302379        REAL(kind=mm_wp), DIMENSION(SIZE(Xvap)) :: s_m0as,s_m3as,s_m0af,s_m3af,s_m0ccn,s_m3ccn,s_Xm3ice,s_Xvap
     
    313390        ! Initialization:
    314391        !~~~~~~~~~~~~~~~~
     392        ! Types of Nucleation
     393        ! Default value (0 = Jaerf, 1 = Jaers, else = Jaers + Jaerf)
     394        nucl_k = 2
     395       
    315396        ! Copy input argument and convert units X.m-3 to X.kg-1 or X.mol-1 to X.kg-1.
    316397        ! @warning: we must update the aerosol tracers through haze microphysics processes.
    317398       
    318399        ! s_XXX is the initial converted value saved:
    319         !s_m0as   = mm_m0aer_s/mm_rhoair ; s_m3as  = mm_m3aer_s/mm_rhoair
    320         !s_m0af   = mm_m0aer_f/mm_rhoair ; s_m3af  = mm_m3aer_f/mm_rhoair     
    321         s_m0as   = (mm_m0aer_s+Hdm0as) / mm_rhoair ; s_m3as  = (mm_m3aer_s+Hdm3as) / mm_rhoair
    322         s_m0af   = (mm_m0aer_f+Hdm0af) / mm_rhoair ; s_m3af  = (mm_m3aer_f+Hdm3af) / mm_rhoair
    323         s_m0ccn  = mm_m0ccn / mm_rhoair
    324         s_m3ccn  = mm_m3ccn / mm_rhoair
     400        s_m0as   = m0as / mm_rhoair ; s_m3as = m3as / mm_rhoair
     401        s_m0af   = m0af / mm_rhoair ; s_m3af = m3af / mm_rhoair
     402        s_m0ccn  = m0ccn / mm_rhoair
     403        s_m3ccn  = m3ccn / mm_rhoair
    325404        s_Xm3ice = Xm3ice / mm_rhoair
    326405        s_Xvap   = Xvap * xESP%fmol2fmas
     
    360439        ! Saturation ratio:
    361440        !~~~~~~~~~~~~~~~~~~
    362         where ((z_Xvap / qsat) > 1e8)
    363           Xsat = 1e8
     441        where (qsat > 0._mm_wp)
     442          Xsat = z_Xvap / qsat
    364443        elsewhere
    365           Xsat = z_Xvap / qsat
     444          Xsat = 0._mm_wp
    366445        endwhere       
    367446
     
    370449        !~~~~~~~~~~~~~~~~~~~~~
    371450       
    372         ! Gets heterogeneous nucleation rate on spherical aerosols:
    373         ! Not used yet...
    374         !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    375         !call hetnucl_rate_aer(mm_rcs,mm_temp,xESP,pX,Xsat,Jhet_aers)
    376      
    377         ! Gets heterogeneous nucleation rate on fractal aerosols (ccn radius is the monomer):
    378         !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    379         call hetnucl_rate_aer((/(mm_rm, i=1,mm_nla)/),mm_temp,xESP,pX,Xsat,Jhet_aerf)
     451        ! Gets heterogeneous nucleation rate:
     452        !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     453        if (nucl_k == 1) then
     454          ! Spherical aerosols:
     455          !~~~~~~~~~~~~~~~~~~~~
     456          call hetnucl_rate_aer(mm_rcs,mm_temp,xESP,pX,Xsat,Jhet_aers)
     457
     458          ! We set the drop radius to the spherical radius.
     459          ! Doing so will prevent a nasty bug to occur later when ice volume is updated!
     460          where (drad <= mm_drad_min .AND. Jhet_aers > 0._mm_wp)
     461            drad = mm_rcs
     462          endwhere
     463       
     464        else if (nucl_k == 0) then
     465          ! Fractal aerosols (ccn radius is the monomer):
     466          !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     467          call hetnucl_rate_aer((/(mm_rm, i=1,mm_nla)/),mm_temp,xESP,pX,Xsat,Jhet_aerf)
     468
     469          ! ==> We set the drop radius to the fractal radius.
     470          ! Doing so will prevent a nasty bug to occur later when ice volume is updated!
     471          where (drad <= mm_drad_min .AND. Jhet_aerf > 0._mm_wp)
     472            drad = mm_rm
     473          endwhere
     474
     475        else
     476          ! Spherical aerosols + Fractal aerosols:
     477          !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     478          call hetnucl_rate_aer(mm_rcs,mm_temp,xESP,pX,Xsat,Jhet_aers)
     479          call hetnucl_rate_aer((/(mm_rm, i=1,mm_nla)/),mm_temp,xESP,pX,Xsat,Jhet_aerf)
     480
     481          ! ==> We set the drop radius to the minimum radius.
     482          ! Doing so will prevent a nasty bug to occur later when ice volume is updated!
     483          where (drad <= mm_drad_min .AND. (Jhet_aers > 0._mm_wp .OR. Jhet_aerf > 0._mm_wp))
     484            drad = MIN(mm_rcs,mm_rm)
     485          endwhere
     486
     487        endif
    380488
    381489        ! Diagnostics
     
    392500        ! variation for CCN is due to the most active species exchange.
    393501       
    394         ! Spherical aerosols:
    395         ! Not used yet...
    396         !~~~~~~~~~~~~~~~~~~~~
    397         !cst_m0aers = (4._mm_wp*mm_pi*Jhet_aers) / mm_rm * (mm_alpha_s(3._mm_wp)/mm_alpha_s(0._mm_wp)*mm_rcs**3) * mm_dt
    398         !cst_m3aers = (4._mm_wp*mm_pi*Jhet_aers) / mm_rm * (mm_alpha_s(6._mm_wp)/mm_alpha_s(3._mm_wp)*mm_rcs**3) * mm_dt
    399 
    400         !z_m0as = (1._mm_wp/(1._mm_wp+cst_m0aers)) * z_m0as
    401         !z_m3as = (1._mm_wp/(1._mm_wp+cst_m3aers)) * z_m3as
    402 
    403         !where (z_m0as <= 0._mm_wp .OR. z_m3as <= 0._mm_wp)
    404         !  z_m0as = 0._mm_wp
    405         !  z_m3as = 0._mm_wp
    406         !  z_m0ccn = z_m0ccn + s_m0as
    407         !  z_m3ccn = z_m3ccn + s_m3as
    408         !elsewhere
    409         !  z_m0ccn = z_m0ccn + cst_m0aers*z_m0as
    410         !  z_m3ccn = z_m3ccn + cst_m3aers*z_m3as
    411         !endwhere
    412      
    413         ! Fractal aerosols
    414         !~~~~~~~~~~~~~~~~~
    415         cst_m0aerf = (4._mm_wp*mm_pi*Jhet_aerf) / mm_rm * (mm_alpha_f(3._mm_wp)/mm_alpha_f(0._mm_wp)*mm_rcf**3) * mm_dt
    416         cst_m3aerf = (4._mm_wp*mm_pi*Jhet_aerf) / mm_rm * (mm_alpha_f(6._mm_wp)/mm_alpha_f(3._mm_wp)*mm_rcf**3) * mm_dt
    417 
    418         z_m0af = (1._mm_wp/(1._mm_wp+cst_m0aerf)) * z_m0af
    419         z_m3af = (1._mm_wp/(1._mm_wp+cst_m3aerf)) * z_m3af
    420 
    421         where (z_m0af <= 0._mm_wp .OR. z_m3af <= 0._mm_wp)
    422           z_m0af = 0._mm_wp
    423           z_m3af = 0._mm_wp
    424           z_m0ccn = z_m0ccn + s_m0af
    425           z_m3ccn = z_m3ccn + s_m3af
    426         elsewhere
    427           z_m0ccn = z_m0ccn + cst_m0aerf*z_m0af
    428           z_m3ccn = z_m3ccn + cst_m3aerf*z_m3af
    429         endwhere
    430      
    431         ! Update the drop radius:
    432         !~~~~~~~~~~~~~~~~~~~~~~~~
    433         ! Heterogeneous nucleation rate on fractal aerosols ==> we set the drop radius to the monomer radius.
    434         ! Doing so will prevent a nasty bug to occur later when ice volume is updated !
    435         where (drad <= mm_drad_min .AND. Jhet_aerf > 0._mm_wp)
    436           drad = mm_rm
    437         endwhere
     502        if (nucl_k == 1) then
     503          ! Spherical aerosols:
     504          !~~~~~~~~~~~~~~~~~~~~
     505          cst_m0aers = (4._mm_wp*mm_pi*Jhet_aers) / mm_rm * (mm_alpha_s(3._mm_wp)/mm_alpha_s(0._mm_wp)*mm_rcs**3) * mm_dt
     506          cst_m3aers = (4._mm_wp*mm_pi*Jhet_aers) / mm_rm * (mm_alpha_s(6._mm_wp)/mm_alpha_s(3._mm_wp)*mm_rcs**3) * mm_dt
     507
     508          z_m0as = (1._mm_wp/(1._mm_wp+cst_m0aers)) * z_m0as
     509          z_m3as = (1._mm_wp/(1._mm_wp+cst_m3aers)) * z_m3as
     510
     511          where (z_m0as <= 0._mm_wp .OR. z_m3as <= 0._mm_wp)
     512            z_m0as = 0._mm_wp
     513            z_m3as = 0._mm_wp
     514            z_m0ccn = z_m0ccn + s_m0as
     515            z_m3ccn = z_m3ccn + s_m3as
     516          elsewhere
     517            z_m0ccn = z_m0ccn + cst_m0aers*z_m0as
     518            z_m3ccn = z_m3ccn + cst_m3aers*z_m3as
     519          endwhere
     520
     521        else if (nucl_k == 0) then
     522          ! Fractal aerosols
     523          !~~~~~~~~~~~~~~~~~
     524          cst_m0aerf = (4._mm_wp*mm_pi*Jhet_aerf) / mm_rm * (mm_alpha_f(3._mm_wp)/mm_alpha_f(0._mm_wp)*mm_rcf**3) * mm_dt
     525          cst_m3aerf = (4._mm_wp*mm_pi*Jhet_aerf) / mm_rm * (mm_alpha_f(6._mm_wp)/mm_alpha_f(3._mm_wp)*mm_rcf**3) * mm_dt
     526
     527          z_m0af = (1._mm_wp/(1._mm_wp+cst_m0aerf)) * z_m0af
     528          z_m3af = (1._mm_wp/(1._mm_wp+cst_m3aerf)) * z_m3af
     529
     530          where (z_m0af <= 0._mm_wp .OR. z_m3af <= 0._mm_wp)
     531            z_m0af = 0._mm_wp
     532            z_m3af = 0._mm_wp
     533            z_m0ccn = z_m0ccn + s_m0af
     534            z_m3ccn = z_m3ccn + s_m3af
     535          elsewhere
     536            z_m0ccn = z_m0ccn + cst_m0aerf*z_m0af
     537            z_m3ccn = z_m3ccn + cst_m3aerf*z_m3af
     538          endwhere
     539
     540        else
     541          ! Spherical aerosols + Fractal aerosols:
     542          !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     543          cst_m0aers = (4._mm_wp*mm_pi*Jhet_aers) / mm_rm * (mm_alpha_s(3._mm_wp)/mm_alpha_s(0._mm_wp)*mm_rcs**3) * mm_dt
     544          cst_m3aers = (4._mm_wp*mm_pi*Jhet_aers) / mm_rm * (mm_alpha_s(6._mm_wp)/mm_alpha_s(3._mm_wp)*mm_rcs**3) * mm_dt
     545
     546          z_m0as = (1._mm_wp/(1._mm_wp+cst_m0aers)) * z_m0as
     547          z_m3as = (1._mm_wp/(1._mm_wp+cst_m3aers)) * z_m3as
     548         
     549          where (z_m0as <= 0._mm_wp .OR. z_m3as <= 0._mm_wp)
     550            z_m0as = 0._mm_wp
     551            z_m3as = 0._mm_wp
     552            z_m0ccn = z_m0ccn + s_m0as
     553            z_m3ccn = z_m3ccn + s_m3as
     554          elsewhere
     555            z_m0ccn = z_m0ccn + cst_m0aers*z_m0as
     556            z_m3ccn = z_m3ccn + cst_m3aers*z_m3as
     557          endwhere
     558
     559          cst_m0aerf = (4._mm_wp*mm_pi*Jhet_aerf) / mm_rm * (mm_alpha_f(3._mm_wp)/mm_alpha_f(0._mm_wp)*mm_rcf**3) * mm_dt
     560          cst_m3aerf = (4._mm_wp*mm_pi*Jhet_aerf) / mm_rm * (mm_alpha_f(6._mm_wp)/mm_alpha_f(3._mm_wp)*mm_rcf**3) * mm_dt
     561
     562          z_m0af = (1._mm_wp/(1._mm_wp+cst_m0aerf)) * z_m0af
     563          z_m3af = (1._mm_wp/(1._mm_wp+cst_m3aerf)) * z_m3af
     564
     565          where (z_m0af <= 0._mm_wp .OR. z_m3af <= 0._mm_wp)
     566            z_m0af = 0._mm_wp
     567            z_m3af = 0._mm_wp
     568            z_m0ccn = z_m0ccn + s_m0af
     569            z_m3ccn = z_m3ccn + s_m3af
     570          elsewhere
     571            z_m0ccn = z_m0ccn + cst_m0aerf*z_m0af
     572            z_m3ccn = z_m3ccn + cst_m3aerf*z_m3af
     573          endwhere
     574       
     575        endif
    438576     
    439577        !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    463601
    464602        ! Diagnostics
    465         Xgrate = g_rate
     603        where(z_Xm3ice <= 0._mm_wp .AND. g_rate <= 0._mm_wp)
     604          Xgrate = 0._mm_wp
     605        elsewhere
     606          Xgrate = g_rate
     607        endwhere
    466608
    467609        ! Update ice volume through condensation/evaporation:
     
    471613          IF (z_Xm3ice(i) <= 0._mm_wp .AND. g_rate(i) <= 0._mm_wp) THEN
    472614            z_Xm3ice(i) = 0._mm_wp
    473          
     615           
    474616          ELSE
    475617            z_Xm3ice(i) = z_Xm3ice(i) + (4._mm_wp * mm_pi * drad(i) * g_rate(i) * z_m0ccn(i) * mm_dt)
    476618         
    477619            ! Check if there is ice left in the ccn.
    478             ! @note: only fractal aerosols for now...
     620            ! @note: 0.8/0.2 for now... need to be improve!
    479621            IF (z_Xm3ice(i) <= 0._mm_wp) THEN
    480               z_m0af(i)   = z_m0af(i) + z_m0ccn(i)
    481               z_m3af(i)   = z_m3af(i) + z_m3ccn(i)
     622              IF (nucl_k == 1) THEN
     623                z_m0as(i) = z_m0as(i) + z_m0ccn(i)
     624                z_m3as(i) = z_m3as(i) + z_m3ccn(i)
     625              ELSE IF (nucl_k == 0) THEN
     626                z_m0af(i) = z_m0af(i) + z_m0ccn(i)
     627                z_m3af(i) = z_m3af(i) + z_m3ccn(i)
     628              ELSE
     629                z_m0as(i) = z_m0as(i) + 0.8_mm_wp * z_m0ccn(i)
     630                z_m3as(i) = z_m3as(i) + 0.8_mm_wp * z_m3ccn(i)
     631                z_m0af(i) = z_m0af(i) + 0.2_mm_wp * z_m0ccn(i)
     632                z_m3af(i) = z_m3af(i) + 0.2_mm_wp * z_m3ccn(i)
     633              ENDIF
    482634              z_m0ccn(i)  = 0._mm_wp
    483635              z_m3ccn(i)  = 0._mm_wp
     
    644796
    645797    END SUBROUTINE growth_rate
     798
     799    !============================================================================
     800    ! COAGULATION PROCESS RELATED METHODS
     801    !============================================================================
     802 
     803    SUBROUTINE mm_cloud_coagulation(m0ccn,m3ccn,m3ice,dm0n,dm3n)
     804      !! Get the evolution of the cloud droplets moments vertical column due to coagulation process.
     805      !!
     806      ! 0th and 3rd order moment of the cloud condensation nuclei component.
     807      REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0ccn ! (m-3)
     808      REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3ccn ! (m3.m-3)
     809      ! 3rd order moment of ices and gases component.
     810      REAL(kind=mm_wp), DIMENSION(:,:), INTENT(in)  :: m3ice ! (m-3)
     811      ! Tendency of the 0th order moment of the droplets size-distribution over a time step (m-3).
     812      REAL(kind=mm_wp), INTENT(out), DIMENSION(:)   :: dm0n
     813      ! Tendency of the 3rd order moment of the droplets size-distribution (m3.m-3).
     814      REAL(kind=mm_wp), INTENT(out), DIMENSION(:)   :: dm3n
     815
     816      ! Local variables:
     817      !~~~~~~~~~~~~~~~~~
     818      INTEGER :: i
     819      REAL(kind=mm_wp), DIMENSION(SIZE(dm0n)) :: Gij
     820
     821      ! 0. Initialization:
     822      !~~~~~~~~~~~~~~~~~~~
     823      dm0n(:) = 0._mm_wp ; dm3n(:) = 0._mm_wp
     824
     825      Gij(:) = 0._mm_wp
     826
     827      ! 1. Molecular's case:
     828      !~~~~~~~~~~~~~~~~~~~~~
     829      ! Types of Coagulation
     830      where (mm_drad > 0._mm_wp .and. mm_drho > 0._mm_wp)
     831        ! Pre-factor:
     832        Gij = sqrt((12._mm_wp * mm_kboltz * mm_btemp) / (mm_pi**2 * mm_drad**3 * mm_drho))
     833       
     834        ! Tendencies of the moments:
     835        dm0n = - mm_pi * Gij * m0ccn**2 * mm_drad**2 * (mm_alpha_ccn(1._mm_wp)**2 + mm_alpha_ccn(2._mm_wp)) * mm_dt
     836        dm3n = 0._mm_wp
     837      endwhere
     838
     839      ! 2. Transitory's case:
     840      !~~~~~~~~~~~~~~~~~~~~~~
     841      !where (mm_drad > 0._mm_wp .and. mm_drho > 0._mm_wp)
     842      !  ! Pre-factor:
     843      !  Gij(:) = sqrt((6._mm_wp * mm_kboltz * mm_btemp(:)) / mm_drho(:))
     844      ! 
     845      !  ! Tendencies of the moments:
     846      !  dm0n = - mm_get_btk(3,0) * Gij * m0ccn**2 * mm_drad**(1._mm_wp/2._mm_wp) * &
     847      !           (mm_alpha_ccn(1._mm_wp/2._mm_wp) +                                &
     848      !           mm_alpha_ccn(-3._mm_wp/2._mm_wp)*mm_alpha_ccn(2._mm_wp) +        &
     849      !           2._mm_wp*mm_alpha_ccn(-1._mm_wp/2._mm_wp)*mm_alpha_ccn(1._mm_wp))
     850      !  dm3n = 0._mm_wp
     851      !endwhere
     852
     853      RETURN
     854    END SUBROUTINE mm_cloud_coagulation
    646855   
    647856    !============================================================================
     
    649858    !============================================================================
    650859
    651     SUBROUTINE mm_cloud_sedimentation(dm0n,dm3n,dm3i)
     860    SUBROUTINE mm_cloud_sedimentation(m0ccn,m3ccn,m3ice,dm0n,dm3n,dm3i)
    652861        !! Compute the tendency of clouds related moments through sedimentation process.
    653862        !!
     
    660869        !! product with input moments values to get final tendencies.
    661870        !!
     871        ! 0th and 3rd order moment of the cloud condensation nuclei component.
     872        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m0ccn ! (m-3)
     873        REAL(kind=mm_wp), DIMENSION(:), INTENT(in)    :: m3ccn ! (m3.m-3)
     874        ! 3rd order moment of ices and gases component.
     875        REAL(kind=mm_wp), DIMENSION(:,:), INTENT(in)  :: m3ice ! (m-3)
    662876        ! Tendency of the 0th order moment of the ccn distribution (m-3).
    663877        REAL(kind=mm_wp), INTENT(out), DIMENSION(:)   :: dm0n
     
    673887
    674888        ! Initialization:
    675         !~~~~~~~~~~~~~~~~       
     889        !~~~~~~~~~~~~~~~~
     890        dm0n(:) = 0._mm_wp ; dm3n(:) = 0._mm_wp ; dm3i(:,:) = 0._mm_wp
     891
    676892        nm = 2 + mm_nesp
    677893        ALLOCATE(moms_i(mm_nla,nm),moms_f(mm_nla,nm),chg_matrix(mm_nla,mm_nla))
    678894
    679         moms_i(:,1) = mm_m0ccn * mm_dzlev
    680         moms_i(:,2) = mm_m3ccn * mm_dzlev
     895        moms_i(:,1) = m0ccn * mm_dzlev
     896        moms_i(:,2) = m3ccn * mm_dzlev
    681897        DO i = 1, mm_nesp
    682             moms_i(:,2+i) = mm_m3ice(:,i) * mm_dzlev
     898            moms_i(:,2+i) = m3ice(:,i) * mm_dzlev
    683899        ENDDO
    684900
     
    9761192
    9771193        ! Computes settling velocity
    978         w = mrcoef * mm_effg(z) * (mm_rhoaer/rhoair) * rad / thermal_w
     1194        ! Types of Sedimentation
     1195        w = mrcoef * mm_effg(z) * (rho/rhoair) * rad / thermal_w
     1196        !w = mrcoef * mm_effg(z) * (mm_rhoaer/rhoair) * mm_rm / thermal_w
    9791197
    9801198        ! Hydrodynamical's case
     
    9951213        ! Velocity limit: drop deformation (Lorenz 1993)
    9961214        !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    997         w = 1._mm_wp / ((1._mm_wp / w) + (1._mm_wp / wmax))
     1215        !w = 1._mm_wp / ((1._mm_wp / w) + (1._mm_wp / wmax))
    9981216
    9991217        RETURN
  • trunk/LMDZ.PLUTO/libf/muphypluto/mp2m_globals.F90

    r4032 r4073  
    9393    ! Moments parameters (mm_clouds_init)
    9494    PROTECTED :: mm_m0ccn, mm_m3ccn, mm_m3ice
    95     ! Moments parameters (derived, are updated with moments parameters)
    96     PROTECTED :: mm_drad, mm_drho
    9795    ! Thresholds parameters
    9896    PROTECTED :: mm_m0ccn_min, mm_m3ccn_min, mm_m3cld_min, mm_drad_min, mm_drad_max
     
    12911289 
    12921290      IF (Ntot <= mm_m0ccn_min .OR. Vtot <= mm_m3cld_min) THEN
    1293         drad = mm_drad_min
    1294         IF (PRESENT(drho)) drho = mm_rhoaer
     1291        drad = 0._mm_wp
     1292        IF (PRESENT(drho)) drho = 0._mm_wp
    12951293      ELSE
    12961294        drad = (Vtot / Ntot)**athird
Note: See TracChangeset for help on using the changeset viewer.