Ignore:
Timestamp:
Jul 14, 2017 8:26:51 PM (7 years ago)
Author:
hoffmann
Message:

various improvements of the LCM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/microphysics_mod.f90

    r2292 r2312  
    2020! Current revisions:
    2121! ------------------
    22 ! 
    23 ! 
     22!
     23!
    2424! Former revisions:
    2525! -----------------
    2626! $Id$
    27 ! Implementation of new microphysic scheme: cloud_scheme = 'morrison'
    28 ! includes two more prognostic equations for cloud drop concentration (nc) 
    29 ! and cloud water content (qc).
    30 ! - The process of activation is parameterized with a simple Twomey
    31 !   activion scheme or with considering solution and curvature
     27! s1 changed to log_sigma
     28!
     29! 2292 2017-06-20 09:51:42Z schwenkel
     30! Implementation of new microphysic scheme: cloud_scheme = 'morrison'
     31! includes two more prognostic equations for cloud drop concentration (nc)
     32! and cloud water content (qc).
     33! - The process of activation is parameterized with a simple Twomey
     34!   activion scheme or with considering solution and curvature
    3235!   effects (Khvorostyanov and Curry ,2006).
    3336! - The saturation adjustment scheme is replaced by the parameterization
    3437!   of condensation rates (Khairoutdinov and Kogan, 2000, Mon. Wea. Rev.,128).
    3538! - All other microphysical processes of Seifert and Beheng are used.
    36 !   Additionally, in those processes the reduction of cloud number concentration 
    37 !   is considered. 
    38 ! 
     39!   Additionally, in those processes the reduction of cloud number concentration
     40!   is considered.
     41!
    3942! 2233 2017-05-30 18:08:54Z suehring
    4043!
    4144! 2232 2017-05-30 17:47:52Z suehring
    4245! Adjustments to new topography and surface concept
    43 ! 
     46!
    4447! 2155 2017-02-21 09:57:40Z hoffmann
    4548! Bugfix in the calculation of microphysical quantities on ghost points.
     
    207210           limiter_sedimentation, na_init, nc_const, sigma_gc,                 &
    208211           ventilation_effect
    209            
     212
    210213
    211214    INTERFACE microphysics_control
     
    463466                   IF ( nr(k,j,i) * xrmin > qr(k,j,i) * hyrho(k) )  THEN
    464467                      nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmin *               &
    465                                        MERGE( 1.0_wp, 0.0_wp,                  &           
     468                                       MERGE( 1.0_wp, 0.0_wp,                  &
    466469                                              BTEST( wall_flags_0(k,j,i), 0 ) )
    467470                   ELSEIF ( nr(k,j,i) * xrmax < qr(k,j,i) * hyrho(k) )  THEN
    468471                      nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmax *               &
    469                                        MERGE( 1.0_wp, 0.0_wp,                  &           
     472                                       MERGE( 1.0_wp, 0.0_wp,                  &
    470473                                              BTEST( wall_flags_0(k,j,i), 0 ) )
    471474                   ENDIF
     
    478481                      IF ( nc(k,j,i) * xcmin > qc(k,j,i) * hyrho(k) )  THEN
    479482                         nc(k,j,i) = qc(k,j,i) * hyrho(k) / xcmin *            &
    480                                           MERGE( 1.0_wp, 0.0_wp,               &           
     483                                          MERGE( 1.0_wp, 0.0_wp,               &
    481484                                              BTEST( wall_flags_0(k,j,i), 0 ) )
    482485                      ENDIF
     
    521524       USE particle_attributes,                                                &
    522525          ONLY:  molecular_weight_of_solute, molecular_weight_of_water, rho_s, &
    523               s1, s2, s3, vanthoff
     526              log_sigma, vanthoff
    524527
    525528       IMPLICIT NONE
     
    578581!--             Prescribe parameters for activation
    579582!--             (see: Bott + Trautmann, 2002, Atm. Res., 64)
    580                 k_act  = 0.7_wp 
     583                k_act  = 0.7_wp
    581584
    582585                IF ( sat >= 0.0 .AND. .NOT. curvature_solution_effects_bulk ) THEN
    583586!
    584 !--                Compute the number of activated Aerosols 
     587!--                Compute the number of activated Aerosols
    585588!--                (see: Twomey, 1959, Pure and applied Geophysics, 43)
    586589                   n_act     = na_init * sat**k_act
     
    592595!
    593596!--                Compute activation rate after Khairoutdinov and Kogan
    594 !--                (see: Khairoutdinov + Kogan, 2000, Mon. Wea. Rev., 128)   
    595                    sat_max = 1.0_wp / 100.0_wp                 
    596                    activ   = MAX( 0.0_wp, ( (na_init + nc(k,j,i) ) * MIN       & 
    597                       ( 1.0_wp, ( sat / sat_max )**k_act) - nc(k,j,i) ) ) /    & 
     597!--                (see: Khairoutdinov + Kogan, 2000, Mon. Wea. Rev., 128)
     598                   sat_max = 1.0_wp / 100.0_wp
     599                   activ   = MAX( 0.0_wp, ( (na_init + nc(k,j,i) ) * MIN       &
     600                      ( 1.0_wp, ( sat / sat_max )**k_act) - nc(k,j,i) ) ) /    &
    598601                       dt_micro
    599602                ELSEIF ( sat >= 0.0 .AND. curvature_solution_effects_bulk ) THEN
    600603!
    601 !--                Curvature effect (afactor) with surface tension 
     604!--                Curvature effect (afactor) with surface tension
    602605!--                parameterization by Straka (2009)
    603606                   sigma = 0.0761_wp - 0.000155_wp * ( t_int - 273.15_wp )
     
    609612
    610613!
    611 !--                Prescribe power index that describes the soluble fraction 
     614!--                Prescribe power index that describes the soluble fraction
    612615!--                of an aerosol particle (beta) and mean geometric radius of
    613616!--                dry aerosol spectrum
     
    616619                   rd0      = 0.05E-6_wp
    617620!
    618 !--                Calculate mean geometric supersaturation (s_0) with 
     621!--                Calculate mean geometric supersaturation (s_0) with
    619622!--                parameterization by Khvorostyanov and Curry (2006)
    620623                   s_0   = rd0 **(- ( 1.0_wp + beta_act ) ) *                  &
     
    622625
    623626!
    624 !--                Calculate number of activated CCN as a function of 
     627!--                Calculate number of activated CCN as a function of
    625628!--                supersaturation and taking Koehler theory into account
    626 !--                (see: Khvorostyanov + Curry, 2006, J. Geo. Res., 111)       
    627                    n_ccn = ( na_init / 2.0_wp ) * ( 1.0_wp - ERF(              & 
    628                       LOG( s_0 / sat ) / ( SQRT(2.0_wp) * LOG(s1) ) ) )     
     629!--                (see: Khvorostyanov + Curry, 2006, J. Geo. Res., 111)
     630                   n_ccn = ( na_init / 2.0_wp ) * ( 1.0_wp - ERF(              &
     631                      LOG( s_0 / sat ) / ( SQRT(2.0_wp) * log_sigma(1) ) ) )
    629632                   activ = MAX( ( n_ccn - nc(k,j,i) ) / dt_micro, 0.0_wp )
    630633                ENDIF
     
    644647! Description:
    645648! ------------
    646 !> Calculate condensation rate for cloud water content (after Khairoutdinov and 
     649!> Calculate condensation rate for cloud water content (after Khairoutdinov and
    647650!> Kogan, 2000).
    648651!------------------------------------------------------------------------------!
     
    724727!--             Mean weight of cloud drops
    725728                IF ( nc(k,j,i) <= 0.0_wp) CYCLE
    726                 xc = MAX( (hyrho(k) * qc(k,j,i) / nc(k,j,i)), xcmin)               
     729                xc = MAX( (hyrho(k) * qc(k,j,i) / nc(k,j,i)), xcmin)
    727730!
    728731!--             Weight averaged diameter of cloud drops:
     
    730733!
    731734!--             Integral diameter of cloud drops
    732                 nc_0 = nc(k,j,i) * dc               
     735                nc_0 = nc(k,j,i) * dc
    733736!
    734737!--             Condensation needs only to be calculated in supersaturated regions
     
    741744                   cond_max  = q(k,j,i) - q_s - qc(k,j,i) - qr(k,j,i)
    742745                   cond      = MIN( cond, cond_max / dt_micro )
    743                
     746
    744747                   qc(k,j,i) = qc(k,j,i) + cond * dt_micro
    745748                ELSEIF ( sat < 0.0_wp ) THEN
     
    891894                                                              * flag
    892895                   IF ( microphysics_morrison ) THEN
    893                       nc(k,j,i) = nc(k,j,i) - MIN( nc(k,j,i), 2.0_wp *         & 
     896                      nc(k,j,i) = nc(k,j,i) - MIN( nc(k,j,i), 2.0_wp *         &
    894897                                    autocon / x0 * hyrho(k) * dt_micro * flag )
    895898                   ENDIF
     
    10331036!
    10341037!--                Mean weight of cloud drops
    1035                    xc = MAX( (hyrho(k) * qc(k,j,i) / nc_accr), xcmin)     
     1038                   xc = MAX( (hyrho(k) * qc(k,j,i) / nc_accr), xcmin)
    10361039!
    10371040!--                Parameterized turbulence effects on autoconversion (Seifert,
     
    13211324
    13221325       USE control_parameters,                                                 &
    1323            ONLY:  call_microphysics_at_all_substeps,                           & 
     1326           ONLY:  call_microphysics_at_all_substeps,                           &
    13241327                  intermediate_timestep_count, microphysics_morrison
    13251328
     
    13661369                IF ( microphysics_morrison ) THEN
    13671370                   IF ( qc(k,j,i) > eps_sb  .AND.  nc(k,j,i) > eps_mr )  THEN
    1368                       sed_nc(k) = sed_qc_const *                               & 
     1371                      sed_nc(k) = sed_qc_const *                               &
    13691372                              ( qc(k,j,i) * hyrho(k) )**( 2.0_wp / 3.0_wp ) *  &
    13701373                              ( nc(k,j,i) )**( 1.0_wp / 3.0_wp )
     
    14491452       USE surface_mod,                                                        &
    14501453           ONLY :  bc_h
    1451        
     1454
    14521455       IMPLICIT NONE
    14531456
     
    14551458       INTEGER(iwp) ::  j             !< running index y direction
    14561459       INTEGER(iwp) ::  k             !< running index z direction
    1457        INTEGER(iwp) ::  k_run         !< 
     1460       INTEGER(iwp) ::  k_run         !<
    14581461       INTEGER(iwp) ::  l             !< running index of surface type
    14591462       INTEGER(iwp) ::  m             !< running index surface elements
     
    15281531             ENDDO
    15291532!
    1530 !--          Adjust boundary values using surface data type. 
     1533!--          Adjust boundary values using surface data type.
    15311534!--          Upward-facing
    1532              surf_s = bc_h(0)%start_index(j,i)   
     1535             surf_s = bc_h(0)%start_index(j,i)
    15331536             surf_e = bc_h(0)%end_index(j,i)
    15341537             DO  m = surf_s, surf_e
     
    15391542!
    15401543!--          Downward-facing
    1541              surf_s = bc_h(1)%start_index(j,i)   
     1544             surf_s = bc_h(1)%start_index(j,i)
    15421545             surf_e = bc_h(1)%end_index(j,i)
    15431546             DO  m = surf_s, surf_e
     
    16071610                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
    16081611!
    1609 !--             Sum up all rain drop number densities which contribute to the flux 
     1612!--             Sum up all rain drop number densities which contribute to the flux
    16101613!--             through k-1/2
    16111614                flux  = 0.0_wp
     
    17301733       THEN
    17311734!
    1732 !--       Run over all upward-facing surface elements, i.e. non-natural, 
     1735!--       Run over all upward-facing surface elements, i.e. non-natural,
    17331736!--       natural and urban
    17341737          DO  m = 1, bc_h(0)%ns
    1735              i = bc_h(0)%i(m)           
     1738             i = bc_h(0)%i(m)
    17361739             j = bc_h(0)%j(m)
    17371740             k = bc_h(0)%k(m)
     
    19611964       USE particle_attributes,                                                &
    19621965          ONLY:  molecular_weight_of_solute, molecular_weight_of_water, rho_s, &
    1963               s1, s2, s3, vanthoff
     1966              log_sigma, vanthoff
    19641967
    19651968       IMPLICIT NONE
     
    20132016!--       Prescribe parameters for activation
    20142017!--       (see: Bott + Trautmann, 2002, Atm. Res., 64)
    2015           k_act  = 0.7_wp 
     2018          k_act  = 0.7_wp
    20162019
    20172020          IF ( sat >= 0.0 .AND. .NOT. curvature_solution_effects_bulk )  THEN
    20182021!
    2019 !--          Compute the number of activated Aerosols 
     2022!--          Compute the number of activated Aerosols
    20202023!--          (see: Twomey, 1959, Pure and applied Geophysics, 43)
    20212024             n_act     = na_init * sat**k_act
     
    20272030!
    20282031!--          Compute activation rate after Khairoutdinov and Kogan
    2029 !--          (see: Khairoutdinov + Kogan, 2000, Mon. Wea. Rev., 128)   
    2030              sat_max = 0.8_wp / 100.0_wp                 
    2031              activ   = MAX( 0.0_wp, ( (na_init + nc_1d(k) ) * MIN              & 
    2032                  ( 1.0_wp, ( sat / sat_max )**k_act) - nc_1d(k) ) ) /          & 
     2032!--          (see: Khairoutdinov + Kogan, 2000, Mon. Wea. Rev., 128)
     2033             sat_max = 0.8_wp / 100.0_wp
     2034             activ   = MAX( 0.0_wp, ( (na_init + nc_1d(k) ) * MIN              &
     2035                 ( 1.0_wp, ( sat / sat_max )**k_act) - nc_1d(k) ) ) /          &
    20332036                  dt_micro
    20342037
     
    20362039          ELSEIF ( sat >= 0.0 .AND. curvature_solution_effects_bulk )  THEN
    20372040!
    2038 !--          Curvature effect (afactor) with surface tension 
     2041!--          Curvature effect (afactor) with surface tension
    20392042!--          parameterization by Straka (2009)
    20402043             sigma = 0.0761_wp - 0.000155_wp * ( t_int - 273.15_wp )
     
    20462049
    20472050!
    2048 !--          Prescribe power index that describes the soluble fraction 
     2051!--          Prescribe power index that describes the soluble fraction
    20492052!--          of an aerosol particle (beta) and mean geometric radius of
    20502053!--          dry aerosol spectrum
     
    20532056             rd0      = 0.05E-6_wp
    20542057!
    2055 !--          Calculate mean geometric supersaturation (s_0) with 
     2058!--          Calculate mean geometric supersaturation (s_0) with
    20562059!--          parameterization by Khvorostyanov and Curry (2006)
    20572060             s_0   = rd0 **(- ( 1.0_wp + beta_act ) ) *                        &
     
    20592062
    20602063!
    2061 !--          Calculate number of activated CCN as a function of 
     2064!--          Calculate number of activated CCN as a function of
    20622065!--          supersaturation and taking Koehler theory into account
    20632066!--          (see: Khvorostyanov + Curry, 2006, J. Geo. Res., 111)
    2064              n_ccn = ( na_init / 2.0_wp ) * ( 1.0_wp - ERF(                     & 
    2065                 LOG( s_0 / sat ) / ( SQRT(2.0_wp) * LOG(s1) ) ) )     
     2067             n_ccn = ( na_init / 2.0_wp ) * ( 1.0_wp - ERF(                     &
     2068                LOG( s_0 / sat ) / ( SQRT(2.0_wp) * log_sigma(1) ) ) )
    20662069             activ = MAX( ( n_ccn ) / dt_micro, 0.0_wp )
    2067                                      
    2068              nc_1d(k) = MIN( (nc_1d(k) + activ * dt_micro), na_init)                   
     2070
     2071             nc_1d(k) = MIN( (nc_1d(k) + activ * dt_micro), na_init)
    20692072          ENDIF
    20702073
     
    20762079! Description:
    20772080! ------------
    2078 !> Calculate condensation rate for cloud water content (after Khairoutdinov and 
     2081!> Calculate condensation rate for cloud water content (after Khairoutdinov and
    20792082!> Kogan, 2000).
    20802083!------------------------------------------------------------------------------!
     
    21542157!--       Mean weight of cloud drops
    21552158          IF ( nc_1d(k) <= 0.0_wp) CYCLE
    2156           xc = MAX( (hyrho(k) * qc_1d(k) / nc_1d(k)), xcmin)               
     2159          xc = MAX( (hyrho(k) * qc_1d(k) / nc_1d(k)), xcmin)
    21572160!
    21582161!--       Weight averaged diameter of cloud drops:
     
    21602163!
    21612164!--       Integral diameter of cloud drops
    2162           nc_0 = nc_1d(k) * dc               
     2165          nc_0 = nc_1d(k) * dc
    21632166!
    21642167!--       Condensation needs only to be calculated in supersaturated regions
     
    21712174             cond_max  = q_1d(k) - q_s - qc_1d(k) - qr_1d(k)
    21722175             cond      = MIN( cond, cond_max / dt_micro )
    2173                
     2176
    21742177             qc_1d(k) = qc_1d(k) + cond * dt_micro
    21752178          ELSEIF ( sat < 0.0_wp ) THEN
     
    23022305             nr_1d(k) = nr_1d(k) + autocon / x0 * hyrho(k) * dt_micro * flag
    23032306             IF ( microphysics_morrison ) THEN
    2304                 nc_1d(k) = nc_1d(k) - MIN( nc_1d(k), 2.0_wp *                & 
     2307                nc_1d(k) = nc_1d(k) - MIN( nc_1d(k), 2.0_wp *                &
    23052308                                    autocon / x0 * hyrho(k) * dt_micro * flag )
    23062309             ENDIF
     
    24252428!
    24262429!--          Mean weight of cloud drops
    2427              xc = MAX( (hyrho(k) * qc_1d(k) / nc_accr), xcmin)     
     2430             xc = MAX( (hyrho(k) * qc_1d(k) / nc_accr), xcmin)
    24282431!
    24292432!--          Parameterized turbulence effects on autoconversion (Seifert,
     
    27162719          IF ( microphysics_morrison ) THEN
    27172720             IF ( qc_1d(k) > eps_sb  .AND.  nc_1d(k) > eps_mr )  THEN
    2718                 sed_nc(k) = sed_qc_const *                                     & 
     2721                sed_nc(k) = sed_qc_const *                                     &
    27192722                            ( qc_1d(k) * hyrho(k) )**( 2.0_wp / 3.0_wp ) *     &
    27202723                            ( nc_1d(k) )**( 1.0_wp / 3.0_wp )
     
    27902793       USE surface_mod,                                                        &
    27912794           ONLY :  bc_h
    2792        
     2795
    27932796       IMPLICIT NONE
    27942797
     
    28592862       ENDDO
    28602863!
    2861 !--    Adjust boundary values using surface data type. 
     2864!--    Adjust boundary values using surface data type.
    28622865!--    Upward facing non-natural
    2863        surf_s = bc_h(0)%start_index(j,i)   
     2866       surf_s = bc_h(0)%start_index(j,i)
    28642867       surf_e = bc_h(0)%end_index(j,i)
    28652868       DO  m = surf_s, surf_e
     
    28702873!
    28712874!--    Downward facing non-natural
    2872        surf_s = bc_h(1)%start_index(j,i)   
     2875       surf_s = bc_h(1)%start_index(j,i)
    28732876       surf_e = bc_h(1)%end_index(j,i)
    28742877       DO  m = surf_s, surf_e
     
    29352938          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
    29362939!
    2937 !--       Sum up all rain drop number densities which contribute to the flux 
     2940!--       Sum up all rain drop number densities which contribute to the flux
    29382941!--       through k-1/2
    29392942          flux  = 0.0_wp
     
    30443047       THEN
    30453048
    3046           surf_s = bc_h(0)%start_index(j,i)   
     3049          surf_s = bc_h(0)%start_index(j,i)
    30473050          surf_e = bc_h(0)%end_index(j,i)
    30483051          DO  m = surf_s, surf_e
Note: See TracChangeset for help on using the changeset viewer.