Ignore:
Timestamp:
Apr 17, 2020 4:14:16 PM (4 years ago)
Author:
schwenkel
Message:

Implementation of ice microphysics

File:
1 edited

Legend:

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

    r4495 r4502  
    2525! -----------------
    2626! $Id$
     27! Implementation of ice microphysics
     28!
     29! 4495 2020-04-13 20:11:20Z raasch
    2730! restart data handling with MPI-IO added
    2831!
     
    116119               precipitation_amount, prr, pt, d_exner, pt_init, q, ql, ql_1,   &
    117120               qc, qc_1, qc_2, qc_3, qc_p, qr, qr_1, qr_2, qr_3, qr_p,         &
    118                exner, zu, tnc_m, tnr_m, tqc_m, tqr_m, tend, rdf_sc, &
    119                flux_l_qc, flux_l_qr, flux_l_nc, flux_l_nr, &
    120                flux_s_qc, flux_s_qr, flux_s_nc, flux_s_nr, &
    121                diss_l_qc, diss_l_qr, diss_l_nc, diss_l_nr, &
    122                diss_s_qc, diss_s_qr, diss_s_nc, diss_s_nr
     121               exner, zu, tnc_m, tnr_m, tqc_m, tqr_m, tend, rdf_sc,            &
     122               flux_l_qc, flux_l_qr, flux_l_nc, flux_l_nr,                     &
     123               flux_s_qc, flux_s_qr, flux_s_nc, flux_s_nr,                     &
     124               diss_l_qc, diss_l_qr, diss_l_nc, diss_l_nr,                     &
     125               diss_s_qc, diss_s_qr, diss_s_nc, diss_s_nr,                     &
     126               ni, ni_1, ni_2, ni_3, ni_p, tni_m,                              &
     127               qi, qi_1, qi_2, qi_3, qi_p, tqi_m,                              &
     128               flux_l_qi, flux_l_ni, flux_s_qi, flux_s_ni,                     &
     129               diss_l_qi, diss_l_ni, diss_s_qi, diss_s_ni
     130
    123131
    124132    USE averaging,                                                             &
    125         ONLY:  nc_av, nr_av, prr_av, qc_av, ql_av, qr_av
     133        ONLY:  nc_av, nr_av, prr_av, qc_av, ql_av, qr_av, ni_av, qi_av
    126134
    127135    USE basic_constants_and_equations_mod,                                     &
    128         ONLY:  c_p, g, lv_d_cp, lv_d_rd, l_v, magnus, molecular_weight_of_solute,&
     136        ONLY:  c_p, g, lv_d_cp, lv_d_rd, l_v, magnus, magnus_ice,              &
     137               molecular_weight_of_solute,                                     &
    129138               molecular_weight_of_water, pi, rho_l, rho_s, r_d, r_v, vanthoff,&
    130139               exner_function, exner_function_invers, ideal_gas_law_rho,       &
    131                ideal_gas_law_rho_pt, barometric_formula, rd_d_rv
     140               ideal_gas_law_rho_pt, barometric_formula, rd_d_rv, l_s,         &
     141               ls_d_cp
    132142
    133143    USE control_parameters,                                                    &
     
    143153               dt_3d, dt_do2d_xy, intermediate_timestep_count,                 &
    144154               intermediate_timestep_count_max, large_scale_forcing,           &
    145                lsf_surf, pt_surface, restart_data_format_output, rho_surface, surface_pressure,   &
     155               lsf_surf, pt_surface, restart_data_format_output, rho_surface,  &
     156               surface_pressure,                                               &
    146157               time_do2d_xy, message_string, initializing_actions,             &
    147                ws_scheme_sca, scalar_advec, timestep_scheme, tsc, loop_optimization
     158               ws_scheme_sca, scalar_advec, timestep_scheme, tsc,              &
     159               loop_optimization, simulated_time
    148160
    149161    USE cpulog,                                                                &
     
    167179        ONLY:  threads_per_task
    168180
    169     USE restart_data_mpi_io_mod,                                                                   &
     181    USE restart_data_mpi_io_mod,                                               &
    170182        ONLY:  rrd_mpi_io, wrd_mpi_io
    171183
    172184    USE statistics,                                                            &
    173185        ONLY:  weight_pres, weight_substep, sums_wsncs_ws_l, sums_wsnrs_ws_l,  &
    174                sums_wsqcs_ws_l, sums_wsqrs_ws_l
     186               sums_wsqcs_ws_l, sums_wsqrs_ws_l,                               &
     187               sums_wsqis_ws_l, sums_wsnis_ws_l
    175188
    176189    USE surface_mod,                                                           &
    177190        ONLY :  bc_h,                                                          &
    178191                surf_bulk_cloud_model,                                         &
    179                 surf_microphysics_morrison, surf_microphysics_seifert, &
    180                 surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h, surf_usm_v
     192                surf_microphysics_morrison, surf_microphysics_seifert,         &
     193                surf_microphysics_ice_extension,                               &
     194                surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h,    &
     195                surf_usm_v
    181196
    182197    IMPLICIT NONE
     
    193208    LOGICAL ::  cloud_water_sedimentation = .FALSE.       !< cloud water sedimentation
    194209    LOGICAL ::  curvature_solution_effects_bulk = .FALSE. !< flag for considering koehler theory
     210    LOGICAL ::  ice_crystal_sedimentation = .FALSE.        !< flag for ice crystal sedimentation
    195211    LOGICAL ::  limiter_sedimentation = .TRUE.            !< sedimentation limiter
    196212    LOGICAL ::  collision_turbulence = .FALSE.            !< turbulence effects
     
    198214
    199215    LOGICAL ::  call_microphysics_at_all_substeps = .FALSE.      !< namelist parameter
     216    LOGICAL ::  microphysics_ice_extension = .FALSE.              !< use ice microphysics scheme
    200217    LOGICAL ::  microphysics_sat_adjust = .FALSE.                !< use saturation adjust bulk scheme?
    201218    LOGICAL ::  microphysics_kessler = .FALSE.                   !< use kessler bulk scheme?
    202219    LOGICAL ::  microphysics_morrison = .FALSE.                  !< use 2-moment Morrison (add. prog. eq. for nc and qc)
    203220    LOGICAL ::  microphysics_seifert = .FALSE.                   !< use 2-moment Seifert and Beheng scheme
    204     LOGICAL ::  microphysics_morrison_no_rain = .FALSE.          !< use 2-moment Morrison     
     221    LOGICAL ::  microphysics_morrison_no_rain = .FALSE.          !< use 2-moment Morrison
    205222    LOGICAL ::  precipitation = .FALSE.                          !< namelist parameter
    206223
     
    240257    REAL(wp) ::  w_precipitation = 9.65_wp  !< maximum terminal velocity (m s-1)
    241258    REAL(wp) ::  x0 = 2.6E-10_wp           !< separating drop mass (kg)
    242 !    REAL(wp) ::  xamin = 5.24E-19_wp       !< average aerosol mass (kg) (~ 0.05µm)
     259    REAL(wp) ::  ximin = 4.42E-14_wp       !< minimum mass of ice crystal (kg) (D~10µm)
    243260    REAL(wp) ::  xcmin = 4.18E-15_wp       !< minimum cloud drop size (kg) (~ 1µm)
    244261    REAL(wp) ::  xrmin = 2.6E-10_wp        !< minimum rain drop size (kg)
     
    249266    REAL(wp) ::  dry_aerosol_radius = 0.05E-6_wp !< dry aerosol radius
    250267    REAL(wp) ::  dt_micro                        !< microphysics time step
     268    REAL(wp) ::  in_init = 1000.0_wp             !< initial number of potential ice nucleii
    251269    REAL(wp) ::  sigma_bulk = 2.0_wp             !< width of aerosol spectrum
    252270    REAL(wp) ::  na_init = 100.0E6_wp            !< Total particle/aerosol concentration (cm-3)
     
    254272    REAL(wp) ::  dt_precipitation = 100.0_wp     !< timestep precipitation (s)
    255273    REAL(wp) ::  sed_qc_const                    !< const. for sedimentation of cloud water
    256     REAL(wp) ::  pirho_l                         !< pi * rho_l / 6.0;
     274    REAL(wp) ::  pirho_l                         !< pi * rho_l / 6.0
     275    REAL(wp) ::  start_ice_microphysics = 0.0_wp !< time from which on ice microhysics are executed
    257276
    258277    REAL(wp) ::  e_s     !< saturation water vapor pressure
     278    REAL(wp) ::  e_si    !< saturation water vapor pressure over ice
    259279    REAL(wp) ::  q_s     !< saturation mixing ratio
     280    REAL(wp) ::  q_si    !< saturation mixing ratio over ice
    260281    REAL(wp) ::  sat     !< supersaturation
    261     REAL(wp) ::  t_l     !< actual temperature
     282    REAL(wp) ::  sat_ice !< supersaturation over ice
     283    REAL(wp) ::  t_l     !< liquid-(ice) water temperature
    262284
    263285    SAVE
     
    294316           dt_precipitation, &
    295317           microphysics_morrison, &
    296            microphysics_morrison_no_rain, &           
     318           microphysics_morrison_no_rain, &
    297319           microphysics_sat_adjust, &
    298320           microphysics_seifert, &
     321           microphysics_ice_extension, &
    299322           na_init, &
    300323           nc_const, &
    301324           precipitation, &
    302            sigma_gc
    303 
     325           sigma_gc, &
     326           start_ice_microphysics, &
     327           ice_crystal_sedimentation, &
     328           in_init
    304329
    305330    INTERFACE bcm_parin
     
    420445          nc_const, &
    421446          sigma_bulk, &
    422           ventilation_effect
     447          ventilation_effect, &
     448          ice_crystal_sedimentation, &
     449          microphysics_ice_extension, &
     450          start_ice_microphysics, &
     451          in_init
    423452
    424453       line = ' '
     
    517546          microphysics_kessler    = .FALSE.
    518547          microphysics_morrison   = .TRUE.
    519           microphysics_morrison_no_rain = .TRUE.         
    520           precipitation           = .FALSE.     
     548          microphysics_morrison_no_rain = .TRUE.
     549          precipitation           = .FALSE.
    521550       ELSE
    522551          message_string = 'unknown cloud microphysics scheme cloud_scheme ="' // &
     
    546575       surf_microphysics_morrison = microphysics_morrison
    547576       surf_microphysics_seifert = microphysics_seifert
    548 
     577       surf_microphysics_ice_extension = microphysics_ice_extension
    549578!
    550579!--    Check aerosol
     
    592621             unit = '1/m3'
    593622
     623          CASE ( 'ni' )
     624             IF ( .NOT.  microphysics_ice_extension )  THEN
     625                message_string = 'output of "' // TRIM( var ) // '" ' //       &
     626                                 'requires ' //                                &
     627                                 'microphysics_ice_extension = ".TRUE."'
     628                CALL message( 'check_parameters', 'PA0359', 1, 2, 0, 6, 0 )
     629             ENDIF
     630             unit = '1/m3'
     631
    594632          CASE ( 'nr' )
    595633             IF ( .NOT.  microphysics_seifert )  THEN
     
    611649
    612650          CASE ( 'qc' )
     651             unit = 'kg/kg'
     652
     653          CASE ( 'qi' )
     654             IF ( .NOT.  microphysics_ice_extension ) THEN
     655                message_string = 'output of "' // TRIM( var ) // '" ' //       &
     656                                 'requires ' //                                &
     657                                 'microphysics_ice_extension = ".TRUE."'
     658                CALL message( 'check_parameters', 'PA0359', 1, 2, 0, 6, 0 )
     659             ENDIF
    613660             unit = 'kg/kg'
    614661
     
    698745             ENDIF
    699746             pr_index = 123
     747             dopr_index(var_count) = pr_index
     748             dopr_unit     = '1/m3'
     749             unit = dopr_unit
     750             hom(:,2,pr_index,:)  = SPREAD( zu, 2, statistic_regions+1 )
     751
     752          CASE ( 'ni' )
     753             IF ( .NOT.  microphysics_ice_extension )  THEN
     754                message_string = 'data_output_pr = ' //                        &
     755                                 TRIM( data_output_pr(var_count) ) //          &
     756                                 ' is not implemented for' //                  &
     757                                 ' microphysics_ice_extension = ".F."'
     758                CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
     759             ENDIF
     760             pr_index = 124
    700761             dopr_index(var_count) = pr_index
    701762             dopr_unit     = '1/m3'
     
    730791             unit = dopr_unit
    731792             hom(:,2,pr_index,:)  = SPREAD( zu, 2, statistic_regions+1 )
     793
    732794          CASE ( 'qc' )
    733795             pr_index = 75
     796             dopr_index(var_count) = pr_index
     797             dopr_unit     = 'kg/kg'
     798             unit = dopr_unit
     799             hom(:,2,pr_index,:)  = SPREAD( zu, 2, statistic_regions+1 )
     800
     801          CASE ( 'qi' )
     802             IF ( .NOT.  microphysics_ice_extension )  THEN
     803                message_string = 'data_output_pr = ' //                        &
     804                                 TRIM( data_output_pr(var_count) ) //          &
     805                                 ' is not implemented for' //                  &
     806                                 ' microphysics_ice_extension = ".F."'
     807                CALL message( 'check_parameters', 'PA0358', 1, 2, 0, 6, 0 )
     808             ENDIF
     809             pr_index = 125
    734810             dopr_index(var_count) = pr_index
    735811             dopr_unit     = 'kg/kg'
     
    792868!
    793869!--       3D-cloud drop water content, cloud drop concentration arrays
    794           ALLOCATE( nc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    795                     nc_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    796                     nc_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    797                     qc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    798                     qc_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
     870          ALLOCATE( nc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     871                    nc_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     872                    nc_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     873                    qc_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     874                    qc_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
    799875                    qc_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    800876       ENDIF
     
    803879!
    804880!--       3D-rain water content, rain drop concentration arrays
    805           ALLOCATE( nr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    806                     nr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    807                     nr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    808                     qr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
    809                     qr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                    &
     881          ALLOCATE( nr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     882                    nr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     883                    nr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     884                    qr_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     885                    qr_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
    810886                    qr_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    811887       ENDIF
    812888
     889       IF ( microphysics_ice_extension )  THEN
     890!
     891!--       3D-cloud drop water content, cloud drop concentration arrays
     892          ALLOCATE( ni_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     893                    ni_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     894                    ni_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     895                    qi_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     896                    qi_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                       &
     897                    qi_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     898       ENDIF
     899
    813900       IF ( ws_scheme_sca )  THEN
    814 
    815901          IF ( microphysics_morrison )  THEN
    816902             ALLOCATE( sums_wsqcs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     
    819905             sums_wsncs_ws_l = 0.0_wp
    820906          ENDIF
    821 
    822907          IF ( microphysics_seifert )  THEN
    823908             ALLOCATE( sums_wsqrs_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     
    826911             sums_wsnrs_ws_l = 0.0_wp
    827912          ENDIF
    828 
     913          IF ( microphysics_ice_extension )  THEN
     914             ALLOCATE( sums_wsqis_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     915             ALLOCATE( sums_wsnis_ws_l(nzb:nzt+1,0:threads_per_task-1) )
     916             sums_wsqis_ws_l = 0.0_wp
     917             sums_wsnis_ws_l = 0.0_wp
     918          ENDIF
    829919       ENDIF
    830920
     
    835925!--    advection routines.
    836926       IF ( loop_optimization /= 'vector' )  THEN
    837 
    838927          IF ( ws_scheme_sca )  THEN
    839 
    840928             IF ( microphysics_morrison )  THEN
    841929                ALLOCATE( flux_s_qc(nzb+1:nzt,0:threads_per_task-1),           &
     
    848936                          diss_l_nc(nzb+1:nzt,nys:nyn,0:threads_per_task-1) )
    849937             ENDIF
    850 
    851938             IF ( microphysics_seifert )  THEN
    852939                ALLOCATE( flux_s_qr(nzb+1:nzt,0:threads_per_task-1),           &
     
    859946                          diss_l_nr(nzb+1:nzt,nys:nyn,0:threads_per_task-1) )
    860947             ENDIF
    861 
    862           ENDIF
    863 
     948             IF ( microphysics_ice_extension )  THEN
     949                ALLOCATE( flux_s_qi(nzb+1:nzt,0:threads_per_task-1),           &
     950                          diss_s_qi(nzb+1:nzt,0:threads_per_task-1),           &
     951                          flux_s_ni(nzb+1:nzt,0:threads_per_task-1),           &
     952                          diss_s_ni(nzb+1:nzt,0:threads_per_task-1) )
     953                ALLOCATE( flux_l_qi(nzb+1:nzt,nys:nyn,0:threads_per_task-1),   &
     954                          diss_l_qi(nzb+1:nzt,nys:nyn,0:threads_per_task-1),   &
     955                          flux_l_ni(nzb+1:nzt,nys:nyn,0:threads_per_task-1),   &
     956                          diss_l_ni(nzb+1:nzt,nys:nyn,0:threads_per_task-1) )
     957             ENDIF
     958          ENDIF
    864959       ENDIF
    865960
     
    878973          nr => nr_1;  nr_p  => nr_2;  tnr_m  => nr_3
    879974       ENDIF
     975       IF ( microphysics_ice_extension )  THEN
     976          qi => qi_1;  qi_p  => qi_2;  tqi_m  => qi_3
     977          ni => ni_1;  ni_p  => ni_2;  tni_m  => ni_3
     978       ENDIF
     979
    880980
    881981
     
    9191019             ENDIF
    9201020!
     1021!--          Initialize the remaining quantities
     1022             IF ( microphysics_ice_extension )  THEN
     1023                DO  i = nxlg, nxrg
     1024                   DO  j = nysg, nyng
     1025                      qi(:,j,i) = 0.0_wp
     1026                      ni(:,j,i) = 0.0_wp
     1027                   ENDDO
     1028                ENDDO
     1029             ENDIF
     1030!
    9211031!--          Liquid water content and precipitation amount
    9221032!--          are zero at beginning of the simulation
     
    9381048                qr_p  = qr
    9391049                nr_p  = nr
     1050             ENDIF
     1051             IF ( microphysics_ice_extension )  THEN
     1052                tqi_m = 0.0_wp
     1053                tni_m = 0.0_wp
     1054                qi_p  = qi
     1055                ni_p  = ni
    9401056             ENDIF
    9411057          ENDIF ! Only if not read_restart_data
     
    10801196                sums_wsnrs_ws_l = 0.0_wp
    10811197             ENDIF
     1198             IF ( microphysics_ice_extension )  THEN
     1199                sums_wsqis_ws_l = 0.0_wp
     1200                sums_wsnis_ws_l = 0.0_wp
     1201             ENDIF
    10821202
    10831203          ENDIF
     
    10961216!> Control of microphysics for grid points i,j
    10971217!------------------------------------------------------------------------------!
    1098 
    10991218    SUBROUTINE bcm_actions_ij( i, j, location )
    11001219
     
    11211240                sums_wsnrs_ws_l = 0.0_wp
    11221241             ENDIF
     1242             IF ( microphysics_ice_extension )  THEN
     1243                sums_wsqis_ws_l = 0.0_wp
     1244                sums_wsnis_ws_l = 0.0_wp
     1245             ENDIF
     1246
    11231247
    11241248          ENDIF
     
    11431267       CALL cpu_log( log_point(51), 'microphysics', 'start' )
    11441268
    1145        IF ( .NOT. microphysics_sat_adjust  .AND.         &
    1146             ( intermediate_timestep_count == 1  .OR.                              &
    1147               call_microphysics_at_all_substeps ) )                               &
     1269       IF ( .NOT. microphysics_sat_adjust  .AND.                               &
     1270            ( intermediate_timestep_count == 1  .OR.                           &
     1271              call_microphysics_at_all_substeps ) )                            &
    11481272       THEN
    11491273
     
    11511275!
    11521276!--          Calculate vertical profile of the hydrostatic pressure (hyp)
    1153              hyp    = barometric_formula(zu, pt_surface * exner_function(surface_pressure * 100.0_wp), surface_pressure * 100.0_wp)
     1277             hyp    = barometric_formula(zu, pt_surface *                      &
     1278                      exner_function(surface_pressure * 100.0_wp),             &
     1279                      surface_pressure * 100.0_wp)
    11541280             d_exner = exner_function_invers(hyp)
    11551281             exner = 1.0_wp / exner_function_invers(hyp)
    1156              hyrho  = ideal_gas_law_rho_pt(hyp, pt_init)
     1282             hyrho  = ideal_gas_law_rho_pt(hyp, pt(:, nys, nxl) )
    11571283!
    11581284!--          Compute reference density
    1159              rho_surface = ideal_gas_law_rho(surface_pressure * 100.0_wp, pt_surface * exner_function(surface_pressure * 100.0_wp))
     1285             rho_surface = ideal_gas_law_rho(surface_pressure * 100.0_wp,      &
     1286                           pt_surface *                                        &
     1287                           exner_function(surface_pressure * 100.0_wp))
    11601288          ENDIF
    11611289
     
    11781306             CALL autoconversion_kessler
    11791307             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud
    1180              
     1308
    11811309!
    11821310!--       Here the seifert beheng scheme is used. Cloud concentration is assumed to
     
    11841312          ELSEIF ( microphysics_seifert  .AND.  .NOT. microphysics_morrison )  THEN
    11851313             CALL adjust_cloud
     1314             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1315             CALL ice_nucleation
     1316             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1317             CALL ice_deposition
    11861318             CALL autoconversion
    11871319             CALL accretion
     
    11901322             CALL sedimentation_rain
    11911323             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud
    1192              
    1193 !
    1194 !--       Here the morrison scheme is used. No rain processes are considered and qr and nr
     1324             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1325             CALL adjust_ice
     1326             IF ( ice_crystal_sedimentation .AND. microphysics_ice_extension &
     1327                  .AND. simulated_time > start_ice_microphysics ) CALL sedimentation_ice
     1328
     1329!
     1330!--       Here the morrison scheme is used. No rain processes are considered and qr and nr
    11951331!--       are not allocated
    11961332          ELSEIF ( microphysics_morrison_no_rain  .AND.  .NOT. microphysics_seifert )  THEN
    11971333             CALL activation
    11981334             CALL condensation
    1199              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud   
    1200              
    1201 !
    1202 !--       Here the full morrison scheme is used and all processes of Seifert and Beheng are
     1335             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1336             CALL adjust_ice
     1337             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1338             CALL ice_nucleation
     1339             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1340             CALL ice_deposition
     1341             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud
     1342
     1343!
     1344!--       Here the full morrison scheme is used and all processes of Seifert and Beheng are
    12031345!--       included
    12041346          ELSEIF ( microphysics_morrison  .AND.  microphysics_seifert )  THEN
     
    12061348             CALL activation
    12071349             CALL condensation
     1350             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1351             CALL adjust_ice
     1352             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1353             CALL ice_nucleation
     1354             IF ( microphysics_ice_extension  .AND.  simulated_time > start_ice_microphysics )     &
     1355             CALL ice_deposition
    12081356             CALL autoconversion
    12091357             CALL accretion
     
    12111359             CALL evaporation_rain
    12121360             CALL sedimentation_rain
    1213              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud           
     1361             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud
    12141362
    12151363          ENDIF
     
    12291377!> Control of microphysics for grid points i,j
    12301378!------------------------------------------------------------------------------!
    1231 
    12321379    SUBROUTINE bcm_non_advective_processes_ij( i, j )
    12331380
     
    12361383       INTEGER(iwp) ::  j                 !<
    12371384
    1238        IF ( .NOT. microphysics_sat_adjust  .AND.         &
    1239             ( intermediate_timestep_count == 1  .OR.                              &
    1240               call_microphysics_at_all_substeps ) )                               &
     1385       IF ( .NOT. microphysics_sat_adjust  .AND.                               &
     1386            ( intermediate_timestep_count == 1  .OR.                           &
     1387              call_microphysics_at_all_substeps ) )                            &
    12411388       THEN
    12421389
     
    12441391!
    12451392!--          Calculate vertical profile of the hydrostatic pressure (hyp)
    1246              hyp    = barometric_formula(zu, pt_surface * exner_function(surface_pressure * 100.0_wp), surface_pressure * 100.0_wp)
     1393             hyp    = barometric_formula(zu, pt_surface *                      &
     1394                      exner_function(surface_pressure * 100.0_wp),             &
     1395                      surface_pressure * 100.0_wp)
    12471396             d_exner = exner_function_invers(hyp)
    12481397             exner = 1.0_wp / exner_function_invers(hyp)
    1249              hyrho  = ideal_gas_law_rho_pt(hyp, pt_init)
     1398             hyrho  = ideal_gas_law_rho_pt(hyp, pt(:, nys, nxl) )
    12501399!
    12511400!--          Compute reference density
    1252              rho_surface = ideal_gas_law_rho(surface_pressure * 100.0_wp, pt_surface * exner_function(surface_pressure * 100.0_wp))
     1401             rho_surface = ideal_gas_law_rho(surface_pressure * 100.0_wp,      &
     1402                           pt_surface *                                        &
     1403                           exner_function(surface_pressure * 100.0_wp))
    12531404          ENDIF
    12541405
     
    12731424!
    12741425!--       Here the seifert beheng scheme is used. Cloud concentration is assumed to
    1275 !--       a constant value an qc a diagnostic value.             
     1426!--       a constant value an qc a diagnostic value.
    12761427          ELSEIF ( microphysics_seifert  .AND.  .NOT. microphysics_morrison )  THEN
    12771428             CALL adjust_cloud_ij( i,j )
     1429             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1430                 CALL ice_nucleation_ij( i,j )
     1431             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1432                 CALL ice_deposition_ij( i,j )
    12781433             CALL autoconversion_ij( i,j )
    12791434             CALL accretion_ij( i,j )
     
    12821437             CALL sedimentation_rain_ij( i,j )
    12831438             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )
    1284              
    1285 !
    1286 !--       Here the morrison scheme is used. No rain processes are considered and qr and nr
     1439             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1440                 CALL adjust_ice_ij ( i,j )
     1441             IF ( ice_crystal_sedimentation .AND. microphysics_ice_extension &
     1442                  .AND. simulated_time > start_ice_microphysics )  CALL sedimentation_ice_ij ( i,j )
     1443!
     1444!--       Here the morrison scheme is used. No rain processes are considered and qr and nr
    12871445!--       are not allocated
    12881446          ELSEIF ( microphysics_morrison_no_rain  .AND.  .NOT. microphysics_seifert )  THEN
    12891447             CALL activation_ij( i,j )
    12901448             CALL condensation_ij( i,j )
    1291              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )
    1292              
    1293 !
    1294 !--       Here the full morrison scheme is used and all processes of Seifert and Beheng are
    1295 !--       included             
     1449             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1450                 CALL adjust_ice_ij ( i,j )
     1451             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1452                 CALL ice_nucleation_ij( i,j )
     1453             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1454                 CALL ice_deposition_ij( i,j )
     1455             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )
     1456
     1457!
     1458!--       Here the full morrison scheme is used and all processes of Seifert and Beheng are
     1459!--       included
    12961460          ELSEIF ( microphysics_morrison  .AND.  microphysics_seifert )  THEN
    12971461             CALL adjust_cloud_ij( i,j )
    12981462             CALL activation_ij( i,j )
    12991463             CALL condensation_ij( i,j )
     1464             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1465                 CALL adjust_ice_ij ( i,j )
     1466             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1467                 CALL ice_nucleation_ij( i,j )
     1468             IF ( microphysics_ice_extension .AND. simulated_time > start_ice_microphysics )       &
     1469                 CALL ice_deposition_ij( i,j )
    13001470             CALL autoconversion_ij( i,j )
    13011471             CALL accretion_ij( i,j )
     
    13031473             CALL evaporation_rain_ij( i,j )
    13041474             CALL sedimentation_rain_ij( i,j )
    1305              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )           
     1475             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )
    13061476
    13071477          ENDIF
     
    13311501          IF ( microphysics_morrison )  THEN
    13321502             CALL exchange_horiz( nc, nbgp )
    1333              CALL exchange_horiz( qc, nbgp )         
     1503             CALL exchange_horiz( qc, nbgp )
    13341504          ENDIF
    13351505          IF ( microphysics_seifert ) THEN
     
    13371507             CALL exchange_horiz( nr, nbgp )
    13381508          ENDIF
     1509          IF ( microphysics_ice_extension ) THEN
     1510             CALL exchange_horiz( qi, nbgp )
     1511             CALL exchange_horiz( ni, nbgp )
     1512          ENDIF
    13391513          CALL exchange_horiz( q, nbgp )
    1340           CALL exchange_horiz( pt, nbgp )         
     1514          CALL exchange_horiz( pt, nbgp )
    13411515       ENDIF
    13421516
    13431517
    13441518    END SUBROUTINE bcm_exchange_horiz
    1345    
     1519
    13461520
    13471521
     
    14251599                                             )                                 &
    14261600                                    * MERGE( 1.0_wp, 0.0_wp,                   &
    1427                                        BTEST( wall_flags_total_0(k,j,i), 0 )   &
     1601                                             BTEST( wall_flags_total_0(k,j,i), 0 )   &
    14281602                                          )
    14291603                   IF ( qc_p(k,j,i) < 0.0_wp )  qc_p(k,j,i) = 0.0_wp
     
    15171691                                             )                                 &
    15181692                                   * MERGE( 1.0_wp, 0.0_wp,                    &
    1519                                        BTEST( wall_flags_total_0(k,j,i), 0 )   &
     1693                                             BTEST( wall_flags_total_0(k,j,i), 0 )   &
    15201694                                          )
    15211695                   IF ( nc_p(k,j,i) < 0.0_wp )  nc_p(k,j,i) = 0.0_wp
     
    15511725
    15521726       ENDIF
     1727
     1728!
     1729!--    If required, calculate prognostic equations for ice crystal content
     1730!--    and ice crystal concentration
     1731       IF ( microphysics_ice_extension )  THEN
     1732
     1733          CALL cpu_log( log_point(70), 'qi-equation', 'start' )
     1734
     1735!
     1736!--       Calculate prognostic equation for ice crystal content
     1737          sbt = tsc(2)
     1738          IF ( scalar_advec == 'bc-scheme' )  THEN
     1739
     1740             IF ( timestep_scheme(1:5) /= 'runge' )  THEN
     1741!
     1742!--             Bott-Chlond scheme always uses Euler time step. Thus:
     1743                sbt = 1.0_wp
     1744             ENDIF
     1745             tend = 0.0_wp
     1746             CALL advec_s_bc( qi, 'qi' )
     1747
     1748          ENDIF
     1749
     1750!
     1751!--       qi-tendency terms with no communication
     1752          IF ( scalar_advec /= 'bc-scheme' )  THEN
     1753             tend = 0.0_wp
     1754             IF ( timestep_scheme(1:5) == 'runge' )  THEN
     1755                IF ( ws_scheme_sca )  THEN
     1756                   CALL advec_s_ws( advc_flags_s, qi, 'qi',                    &
     1757                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     1758                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     1759                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     1760                                    bc_dirichlet_s  .OR.  bc_radiation_s )
     1761                ELSE
     1762                   CALL advec_s_pw( qi )
     1763                ENDIF
     1764             ELSE
     1765                CALL advec_s_up( qi )
     1766             ENDIF
     1767          ENDIF
     1768
     1769          CALL diffusion_s( qi,                                                &
     1770                            surf_def_h(0)%qisws, surf_def_h(1)%qisws,          &
     1771                            surf_def_h(2)%qisws,                               &
     1772                            surf_lsm_h%qisws,    surf_usm_h%qisws,             &
     1773                            surf_def_v(0)%qisws, surf_def_v(1)%qisws,          &
     1774                            surf_def_v(2)%qisws, surf_def_v(3)%qisws,          &
     1775                            surf_lsm_v(0)%qisws, surf_lsm_v(1)%qisws,          &
     1776                            surf_lsm_v(2)%qisws, surf_lsm_v(3)%qisws,          &
     1777                            surf_usm_v(0)%qisws, surf_usm_v(1)%qisws,          &
     1778                            surf_usm_v(2)%qisws, surf_usm_v(3)%qisws )
     1779
     1780!
     1781!--       Prognostic equation for ice crystal mixing ratio
     1782          DO  i = nxl, nxr
     1783             DO  j = nys, nyn
     1784                !following directive is required to vectorize on Intel19
     1785                !DIR$ IVDEP
     1786                DO  k = nzb+1, nzt
     1787                   qi_p(k,j,i) = qi(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +   &
     1788                                                      tsc(3) * tqi_m(k,j,i) )  &
     1789                                                    - tsc(5) * rdf_sc(k) *     &
     1790                                                               qi(k,j,i)       &
     1791                                             )                                 &
     1792                                    * MERGE( 1.0_wp, 0.0_wp,                   &
     1793                                             BTEST( wall_flags_total_0(k,j,i), 0 )   &
     1794                                          )
     1795                   IF ( qi_p(k,j,i) < 0.0_wp )  qi_p(k,j,i) = 0.0_wp
     1796                ENDDO
     1797             ENDDO
     1798          ENDDO
     1799
     1800!
     1801!--       Calculate tendencies for the next Runge-Kutta step
     1802          IF ( timestep_scheme(1:5) == 'runge' )  THEN
     1803             IF ( intermediate_timestep_count == 1 )  THEN
     1804                DO  i = nxl, nxr
     1805                   DO  j = nys, nyn
     1806                      DO  k = nzb+1, nzt
     1807                         tqi_m(k,j,i) = tend(k,j,i)
     1808                      ENDDO
     1809                   ENDDO
     1810                ENDDO
     1811             ELSEIF ( intermediate_timestep_count < &
     1812                      intermediate_timestep_count_max )  THEN
     1813                DO  i = nxl, nxr
     1814                   DO  j = nys, nyn
     1815                      DO  k = nzb+1, nzt
     1816                         tqi_m(k,j,i) =   -9.5625_wp * tend(k,j,i)             &
     1817                                         + 5.3125_wp * tqi_m(k,j,i)
     1818                      ENDDO
     1819                   ENDDO
     1820                ENDDO
     1821             ENDIF
     1822          ENDIF
     1823
     1824          CALL cpu_log( log_point(70), 'qi-equation', 'stop' )
     1825
     1826          CALL cpu_log( log_point(69), 'ni-equation', 'start' )
     1827!
     1828!--       Calculate prognostic equation for ice crystal concentration
     1829          sbt = tsc(2)
     1830          IF ( scalar_advec == 'bc-scheme' )  THEN
     1831
     1832             IF ( timestep_scheme(1:5) /= 'runge' )  THEN
     1833!
     1834!--             Bott-Chlond scheme always uses Euler time step. Thus:
     1835                sbt = 1.0_wp
     1836             ENDIF
     1837             tend = 0.0_wp
     1838             CALL advec_s_bc( ni, 'ni' )
     1839
     1840          ENDIF
     1841
     1842!
     1843!--       ni-tendency terms with no communication
     1844          IF ( scalar_advec /= 'bc-scheme' )  THEN
     1845             tend = 0.0_wp
     1846             IF ( timestep_scheme(1:5) == 'runge' )  THEN
     1847                IF ( ws_scheme_sca )  THEN
     1848                   CALL advec_s_ws( advc_flags_s, ni, 'ni',                    &
     1849                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     1850                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     1851                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     1852                                    bc_dirichlet_s  .OR.  bc_radiation_s )
     1853                ELSE
     1854                   CALL advec_s_pw( ni )
     1855                ENDIF
     1856             ELSE
     1857                CALL advec_s_up( ni )
     1858             ENDIF
     1859          ENDIF
     1860
     1861          CALL diffusion_s( ni,                                                &
     1862                            surf_def_h(0)%nisws, surf_def_h(1)%nisws,          &
     1863                            surf_def_h(2)%nisws,                               &
     1864                            surf_lsm_h%nisws,    surf_usm_h%nisws,             &
     1865                            surf_def_v(0)%nisws, surf_def_v(1)%nisws,          &
     1866                            surf_def_v(2)%nisws, surf_def_v(3)%nisws,          &
     1867                            surf_lsm_v(0)%nisws, surf_lsm_v(1)%nisws,          &
     1868                            surf_lsm_v(2)%nisws, surf_lsm_v(3)%nisws,          &
     1869                            surf_usm_v(0)%nisws, surf_usm_v(1)%nisws,          &
     1870                            surf_usm_v(2)%nisws, surf_usm_v(3)%nisws )
     1871
     1872!
     1873!--       Prognostic equation for ice crystal concentration
     1874          DO  i = nxl, nxr
     1875             DO  j = nys, nyn
     1876                !following directive is required to vectorize on Intel19
     1877                !DIR$ IVDEP
     1878                DO  k = nzb+1, nzt
     1879                   ni_p(k,j,i) = ni(k,j,i) + ( dt_3d * ( sbt * tend(k,j,i) +   &
     1880                                                      tsc(3) * tni_m(k,j,i) )  &
     1881                                                    - tsc(5) * rdf_sc(k) *     &
     1882                                                               ni(k,j,i)       &
     1883                                             )                                 &
     1884                                   * MERGE( 1.0_wp, 0.0_wp,                    &
     1885                                             BTEST( wall_flags_total_0(k,j,i), 0 )   &
     1886                                          )
     1887                   IF ( ni_p(k,j,i) < 0.0_wp )  ni_p(k,j,i) = 0.0_wp
     1888                ENDDO
     1889             ENDDO
     1890          ENDDO
     1891
     1892!
     1893!--       Calculate tendencies for the next Runge-Kutta step
     1894          IF ( timestep_scheme(1:5) == 'runge' )  THEN
     1895             IF ( intermediate_timestep_count == 1 )  THEN
     1896                DO  i = nxl, nxr
     1897                   DO  j = nys, nyn
     1898                      DO  k = nzb+1, nzt
     1899                         tni_m(k,j,i) = tend(k,j,i)
     1900                      ENDDO
     1901                   ENDDO
     1902                ENDDO
     1903             ELSEIF ( intermediate_timestep_count < &
     1904                      intermediate_timestep_count_max )  THEN
     1905                DO  i = nxl, nxr
     1906                   DO  j = nys, nyn
     1907                      DO  k = nzb+1, nzt
     1908                         tni_m(k,j,i) =  -9.5625_wp * tend(k,j,i)             &
     1909                                         + 5.3125_wp * tni_m(k,j,i)
     1910                      ENDDO
     1911                   ENDDO
     1912                ENDDO
     1913             ENDIF
     1914          ENDIF
     1915
     1916          CALL cpu_log( log_point(69), 'ni-equation', 'stop' )
     1917
     1918       ENDIF
     1919
    15531920!
    15541921!--    If required, calculate prognostic equations for rain water content
     
    16161983                                             )                                 &
    16171984                                    * MERGE( 1.0_wp, 0.0_wp,                   &
    1618                                        BTEST( wall_flags_total_0(k,j,i), 0 )   &
     1985                                             BTEST( wall_flags_total_0(k,j,i), 0 )   &
    16191986                                          )
    16201987                   IF ( qr_p(k,j,i) < 0.0_wp )  qr_p(k,j,i) = 0.0_wp
     
    17082075                                             )                                 &
    17092076                                   * MERGE( 1.0_wp, 0.0_wp,                    &
    1710                                        BTEST( wall_flags_total_0(k,j,i), 0 )   &
     2077                                             BTEST( wall_flags_total_0(k,j,i), 0 )   &
    17112078                                          )
    17122079                   IF ( nr_p(k,j,i) < 0.0_wp )  nr_p(k,j,i) = 0.0_wp
     
    17512118!> Control of microphysics for grid points i,j
    17522119!------------------------------------------------------------------------------!
    1753 
    17542120    SUBROUTINE bcm_prognostic_equations_ij( i, j, i_omp_start, tn )
    17552121
     
    18052171                                       )                                 &
    18062172                                 * MERGE( 1.0_wp, 0.0_wp,                &
    1807                                     BTEST( wall_flags_total_0(k,j,i), 0 )&
     2173                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
    18082174                                        )
    18092175             IF ( qc_p(k,j,i) < 0.0_wp )  qc_p(k,j,i) = 0.0_wp
     
    18642230                                       )                                 &
    18652231                                 * MERGE( 1.0_wp, 0.0_wp,                &
    1866                                     BTEST( wall_flags_total_0(k,j,i), 0 )&
     2232                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
    18672233                                        )
    18682234             IF ( nc_p(k,j,i) < 0.0_wp )  nc_p(k,j,i) = 0.0_wp
     
    18852251
    18862252       ENDIF
     2253
     2254!
     2255!--    If required, calculate prognostic equations for ice crystal mixing ratio
     2256!--    and ice crystal concentration
     2257       IF ( microphysics_ice_extension )  THEN
     2258!
     2259!--       Calculate prognostic equation for ice crystal mixing ratio
     2260          tend(:,j,i) = 0.0_wp
     2261          IF ( timestep_scheme(1:5) == 'runge' ) &
     2262          THEN
     2263             IF ( ws_scheme_sca )  THEN
     2264                CALL advec_s_ws( advc_flags_s, i, j, qi, 'qi', flux_s_qi,      &
     2265                                 diss_s_qi, flux_l_qi, diss_l_qi,              &
     2266                                 i_omp_start, tn,                              &
     2267                                 bc_dirichlet_l  .OR.  bc_radiation_l,         &
     2268                                 bc_dirichlet_n  .OR.  bc_radiation_n,         &
     2269                                 bc_dirichlet_r  .OR.  bc_radiation_r,         &
     2270                                 bc_dirichlet_s  .OR.  bc_radiation_s )
     2271             ELSE
     2272                CALL advec_s_pw( i, j, qi )
     2273             ENDIF
     2274          ELSE
     2275             CALL advec_s_up( i, j, qi )
     2276          ENDIF
     2277          CALL diffusion_s( i, j, qi,                                   &
     2278                            surf_def_h(0)%qisws, surf_def_h(1)%qisws,   &
     2279                            surf_def_h(2)%qisws,                        &
     2280                            surf_lsm_h%qisws,    surf_usm_h%qisws,      &
     2281                            surf_def_v(0)%qisws, surf_def_v(1)%qisws,   &
     2282                            surf_def_v(2)%qisws, surf_def_v(3)%qisws,   &
     2283                            surf_lsm_v(0)%qisws, surf_lsm_v(1)%qisws,   &
     2284                            surf_lsm_v(2)%qisws, surf_lsm_v(3)%qisws,   &
     2285                            surf_usm_v(0)%qisws, surf_usm_v(1)%qisws,   &
     2286                            surf_usm_v(2)%qisws, surf_usm_v(3)%qisws )
     2287
     2288!
     2289!--       Prognostic equation for ice crystal mixing ratio
     2290          DO  k = nzb+1, nzt
     2291             qi_p(k,j,i) = qi(k,j,i) + ( dt_3d *                         &
     2292                                                ( tsc(2) * tend(k,j,i) + &
     2293                                                  tsc(3) * tqi_m(k,j,i) )&
     2294                                                - tsc(5) * rdf_sc(k)     &
     2295                                                         * qi(k,j,i)     &
     2296                                       )                                 &
     2297                                 * MERGE( 1.0_wp, 0.0_wp,                &
     2298                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
     2299                                        )
     2300             IF ( qi_p(k,j,i) < 0.0_wp )  qi_p(k,j,i) = 0.0_wp
     2301          ENDDO
     2302!
     2303!--       Calculate tendencies for the next Runge-Kutta step
     2304          IF ( timestep_scheme(1:5) == 'runge' )  THEN
     2305             IF ( intermediate_timestep_count == 1 )  THEN
     2306                DO  k = nzb+1, nzt
     2307                   tqi_m(k,j,i) = tend(k,j,i)
     2308                ENDDO
     2309             ELSEIF ( intermediate_timestep_count < &
     2310                      intermediate_timestep_count_max )  THEN
     2311                DO  k = nzb+1, nzt
     2312                   tqi_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +           &
     2313                                     5.3125_wp * tqi_m(k,j,i)
     2314                ENDDO
     2315             ENDIF
     2316          ENDIF
     2317
     2318!
     2319!--       Calculate prognostic equation for ice crystal concentration.
     2320          tend(:,j,i) = 0.0_wp
     2321          IF ( timestep_scheme(1:5) == 'runge' )  THEN
     2322             IF ( ws_scheme_sca )  THEN
     2323                CALL advec_s_ws( advc_flags_s, i, j, ni, 'ni', flux_s_ni,      &
     2324                                 diss_s_ni, flux_l_ni, diss_l_ni,              &
     2325                                 i_omp_start, tn,                              &
     2326                                 bc_dirichlet_l  .OR.  bc_radiation_l,         &
     2327                                 bc_dirichlet_n  .OR.  bc_radiation_n,         &
     2328                                 bc_dirichlet_r  .OR.  bc_radiation_r,         &
     2329                                 bc_dirichlet_s  .OR.  bc_radiation_s )
     2330             ELSE
     2331                CALL advec_s_pw( i, j, ni )
     2332             ENDIF
     2333          ELSE
     2334             CALL advec_s_up( i, j, ni )
     2335          ENDIF
     2336          CALL diffusion_s( i, j, ni,                                    &
     2337                            surf_def_h(0)%nisws, surf_def_h(1)%nisws,    &
     2338                            surf_def_h(2)%nisws,                         &
     2339                            surf_lsm_h%nisws,    surf_usm_h%nisws,       &
     2340                            surf_def_v(0)%nisws, surf_def_v(1)%nisws,    &
     2341                            surf_def_v(2)%nisws, surf_def_v(3)%nisws,    &
     2342                            surf_lsm_v(0)%nisws, surf_lsm_v(1)%nisws,    &
     2343                            surf_lsm_v(2)%nisws, surf_lsm_v(3)%nisws,    &
     2344                            surf_usm_v(0)%nisws, surf_usm_v(1)%nisws,    &
     2345                            surf_usm_v(2)%nisws, surf_usm_v(3)%nisws )
     2346
     2347!
     2348!--       Prognostic equation for ice crystal concentration
     2349          DO  k = nzb+1, nzt
     2350             ni_p(k,j,i) = ni(k,j,i) + ( dt_3d *                         &
     2351                                                ( tsc(2) * tend(k,j,i) + &
     2352                                                  tsc(3) * tni_m(k,j,i) )&
     2353                                                - tsc(5) * rdf_sc(k)     &
     2354                                                         * ni(k,j,i)     &
     2355                                       )                                 &
     2356                                 * MERGE( 1.0_wp, 0.0_wp,                &
     2357                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
     2358                                        )
     2359             IF ( ni_p(k,j,i) < 0.0_wp )  ni_p(k,j,i) = 0.0_wp
     2360          ENDDO
     2361!
     2362!--       Calculate tendencies for the next Runge-Kutta step
     2363          IF ( timestep_scheme(1:5) == 'runge' )  THEN
     2364             IF ( intermediate_timestep_count == 1 )  THEN
     2365                DO  k = nzb+1, nzt
     2366                   tni_m(k,j,i) = tend(k,j,i)
     2367                ENDDO
     2368             ELSEIF ( intermediate_timestep_count < &
     2369                      intermediate_timestep_count_max )  THEN
     2370                DO  k = nzb+1, nzt
     2371                   tni_m(k,j,i) =   -9.5625_wp * tend(k,j,i) +           &
     2372                                     5.3125_wp * tni_m(k,j,i)
     2373                ENDDO
     2374             ENDIF
     2375          ENDIF
     2376
     2377       ENDIF
     2378
    18872379!
    18882380!--    If required, calculate prognostic equations for rain water content
     
    19292421                                       )                                 &
    19302422                                 * MERGE( 1.0_wp, 0.0_wp,                &
    1931                                     BTEST( wall_flags_total_0(k,j,i), 0 )&
     2423                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
    19322424                                        )
    19332425             IF ( qr_p(k,j,i) < 0.0_wp )  qr_p(k,j,i) = 0.0_wp
     
    19882480                                       )                                 &
    19892481                                 * MERGE( 1.0_wp, 0.0_wp,                &
    1990                                     BTEST( wall_flags_total_0(k,j,i), 0 )&
     2482                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
    19912483                                        )
    19922484             IF ( nr_p(k,j,i) < 0.0_wp )  nr_p(k,j,i) = 0.0_wp
     
    20382530                   nr => nr_1;    nr_p => nr_2
    20392531                ENDIF
     2532                IF ( microphysics_ice_extension )  THEN
     2533                   qi => qi_1;    qi_p => qi_2
     2534                   ni => ni_1;    ni_p => ni_2
     2535                ENDIF
    20402536
    20412537             CASE ( 1 )
     
    20492545                   nr => nr_2;    nr_p => nr_1
    20502546                ENDIF
     2547                IF ( microphysics_ice_extension )  THEN
     2548                   qi => qi_2;    qi_p => qi_1
     2549                   ni => ni_2;    ni_p => ni_1
     2550                ENDIF
     2551
    20512552
    20522553          END SELECT
     
    20932594       ENDIF
    20942595
     2596       IF ( microphysics_ice_extension )  THEN
     2597!
     2598!--       Surface conditions ice crysral (Dirichlet)
     2599!--       Run loop over all non-natural and natural walls. Note, in wall-datatype
     2600!--       the k coordinate belongs to the atmospheric grid point, therefore, set
     2601!--       qr_p and nr_p at upward (k-1) and downward-facing (k+1) walls
     2602          DO  l = 0, 1
     2603          !$OMP PARALLEL DO PRIVATE( i, j, k )
     2604             DO  m = 1, bc_h(l)%ns
     2605                i = bc_h(l)%i(m)
     2606                j = bc_h(l)%j(m)
     2607                k = bc_h(l)%k(m)
     2608                qi_p(k+bc_h(l)%koff,j,i) = 0.0_wp
     2609                ni_p(k+bc_h(l)%koff,j,i) = 0.0_wp
     2610             ENDDO
     2611          ENDDO
     2612!
     2613!--       Top boundary condition for ice crystal (Dirichlet)
     2614          qi_p(nzt+1,:,:) = 0.0_wp
     2615          ni_p(nzt+1,:,:) = 0.0_wp
     2616
     2617       ENDIF
     2618
     2619
    20952620       IF ( microphysics_seifert )  THEN
    20962621!
     
    21292654             nr_p(:,nys-1,:) = nr_p(:,nys,:)
    21302655          ENDIF
     2656          IF ( microphysics_ice_extension )  THEN
     2657             qi_p(:,nys-1,:) = qi_p(:,nys,:)
     2658             ni_p(:,nys-1,:) = ni_p(:,nys,:)
     2659          ENDIF
    21312660       ELSEIF ( bc_radiation_n )  THEN
    21322661          IF ( microphysics_morrison )  THEN
     
    21382667             nr_p(:,nyn+1,:) = nr_p(:,nyn,:)
    21392668          ENDIF
     2669          IF ( microphysics_ice_extension )  THEN
     2670             qi_p(:,nyn+1,:) = qi_p(:,nyn,:)
     2671             ni_p(:,nyn+1,:) = ni_p(:,nyn,:)
     2672          ENDIF
    21402673       ELSEIF ( bc_radiation_l )  THEN
    21412674          IF ( microphysics_morrison )  THEN
     
    21472680             nr_p(:,:,nxl-1) = nr_p(:,:,nxl)
    21482681          ENDIF
     2682          IF ( microphysics_ice_extension )  THEN
     2683             qi_p(:,:,nxl-1) = qi_p(:,:,nxl)
     2684             ni_p(:,:,nxl-1) = ni_p(:,:,nxl)
     2685          ENDIF
    21492686       ELSEIF ( bc_radiation_r )  THEN
    21502687          IF ( microphysics_morrison )  THEN
     
    21552692             qr_p(:,:,nxr+1) = qr_p(:,:,nxr)
    21562693             nr_p(:,:,nxr+1) = nr_p(:,:,nxr)
     2694          ENDIF
     2695          IF ( microphysics_ice_extension )  THEN
     2696             qi_p(:,:,nxr+1) = qi_p(:,:,nxr)
     2697             ni_p(:,:,nxr+1) = ni_p(:,:,nxr)
    21572698          ENDIF
    21582699       ENDIF
     
    24332974             ENDIF
    24342975             to_be_resorted => nc_av
     2976          ENDIF
     2977          IF ( mode == 'xy' ) grid = 'zu'
     2978
     2979       CASE ( 'ni_xy', 'ni_xz', 'ni_yz' )
     2980          IF ( av == 0 )  THEN
     2981             to_be_resorted => ni
     2982          ELSE
     2983             IF ( .NOT. ALLOCATED( ni_av ) ) THEN
     2984                ALLOCATE( ni_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2985                ni_av = REAL( fill_value, KIND = wp )
     2986             ENDIF
     2987             to_be_resorted => ni_av
    24352988          ENDIF
    24362989          IF ( mode == 'xy' ) grid = 'zu'
     
    24993052          IF ( mode == 'xy' ) grid = 'zu'
    25003053
     3054       CASE ( 'qi_xy', 'qi_xz', 'qi_yz' )
     3055          IF ( av == 0 )  THEN
     3056             to_be_resorted => qi
     3057          ELSE
     3058             IF ( .NOT. ALLOCATED( qi_av ) ) THEN
     3059                ALLOCATE( qi_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3060                qi_av = REAL( fill_value, KIND = wp )
     3061             ENDIF
     3062             to_be_resorted => qi_av
     3063          ENDIF
     3064          IF ( mode == 'xy' ) grid = 'zu'
     3065
    25013066       CASE ( 'ql_xy', 'ql_xz', 'ql_yz' )
    25023067          IF ( av == 0 )  THEN
     
    25343099             DO  k = nzb_do, nzt_do
    25353100                local_pf(i,j,k) = MERGE( &
    2536                                      to_be_resorted(k,j,i),                      &
    2537                                      REAL( fill_value, KIND = wp ),              &
    2538                                      BTEST( wall_flags_total_0(k,j,i), flag_nr ) &
     3101                                     to_be_resorted(k,j,i),                    &
     3102                                     REAL( fill_value, KIND = wp ),            &
     3103                                     BTEST( wall_flags_total_0(k,j,i), flag_nr )     &
    25393104                                  )
    25403105             ENDDO
     
    25953160             ENDIF
    25963161             to_be_resorted => nc_av
     3162          ENDIF
     3163
     3164       CASE ( 'ni' )
     3165          IF ( av == 0 )  THEN
     3166             to_be_resorted => ni
     3167          ELSE
     3168             IF ( .NOT. ALLOCATED( ni_av ) ) THEN
     3169                ALLOCATE( ni_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3170                ni_av = REAL( fill_value, KIND = wp )
     3171             ENDIF
     3172             to_be_resorted => ni_av
    25973173          ENDIF
    25983174
     
    26433219          ENDIF
    26443220
     3221       CASE ( 'qi' )
     3222          IF ( av == 0 )  THEN
     3223             to_be_resorted => qi
     3224          ELSE
     3225             IF ( .NOT. ALLOCATED( qi_av ) ) THEN
     3226                ALLOCATE( qi_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3227                qi_av = REAL( fill_value, KIND = wp )
     3228             ENDIF
     3229             to_be_resorted => qi_av
     3230          ENDIF
     3231
    26453232       CASE ( 'ql' )
    26463233          IF ( av == 0 )  THEN
     
    26753262          DO  j = nys, nyn
    26763263             DO  k = nzb_do, nzt_do
    2677                 local_pf(i,j,k) = MERGE(                                         &
    2678                                      to_be_resorted(k,j,i),                      &
    2679                                      REAL( fill_value, KIND = wp ),              &
    2680                                      BTEST( wall_flags_total_0(k,j,i), flag_nr ) &
     3264                local_pf(i,j,k) = MERGE(                                       &
     3265                                     to_be_resorted(k,j,i),                    &
     3266                                     REAL( fill_value, KIND = wp ),            &
     3267                                     BTEST( wall_flags_total_0(k,j,i), flag_nr )     &
    26813268                                  )
    26823269             ENDDO
     
    27503337          CASE ( 'curvature_solution_effects_bulk' )
    27513338             READ ( 13 )  curvature_solution_effects_bulk
     3339
     3340          CASE ( 'microphysics_ice_extension' )
     3341             READ ( 13 )  microphysics_ice_extension
     3342
     3343          CASE ( 'ice_crystal_sedimentation' )
     3344             READ ( 13 )  ice_crystal_sedimentation
     3345
     3346          CASE ( 'in_init' )
     3347             READ ( 13 )  in_init
     3348
     3349          CASE ( 'start_ice_microphysics' )
     3350             READ ( 13 )  start_ice_microphysics
    27523351
    27533352          CASE DEFAULT
     
    27823381       CALL rrd_mpi_io( 'aerosol_bulk', aerosol_bulk )
    27833382       CALL rrd_mpi_io( 'curvature_solution_effects_bulk', curvature_solution_effects_bulk )
     3383       CALL rrd_mpi_io( 'start_ice_microphysics', start_ice_microphysics )
     3384       CALL rrd_mpi_io( 'microphysics_ice_extension', microphysics_ice_extension )
     3385       CALL rrd_mpi_io( 'in_init', in_init )
     3386       CALL rrd_mpi_io( 'ice_crystal_sedimentation', ice_crystal_sedimentation )
     3387
     3388
    27843389
    27853390    END SUBROUTINE bcm_rrd_global_mpi
     
    28463451                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    28473452
     3453          CASE ( 'ni' )
     3454             IF ( k == 1 )  READ ( 13 )  tmp_3d
     3455             ni(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
     3456                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3457
     3458          CASE ( 'ni_av' )
     3459             IF ( .NOT. ALLOCATED( ni_av ) )  THEN
     3460                ALLOCATE( ni_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3461             ENDIF
     3462             IF ( k == 1 )  READ ( 13 )  tmp_3d
     3463             ni_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
     3464                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3465
    28483466          CASE ( 'nr' )
    28493467             IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    28863504                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    28873505
     3506          CASE ( 'qi' )
     3507             IF ( k == 1 )  READ ( 13 )  tmp_3d
     3508             qi(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =             &
     3509                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3510
     3511          CASE ( 'qi_av' )
     3512             IF ( .NOT. ALLOCATED( qi_av ) )  THEN
     3513                ALLOCATE( qi_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3514             ENDIF
     3515             IF ( k == 1 )  READ ( 13 )  tmp_3d
     3516             qi_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =          &
     3517                tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3518
    28883519          CASE ( 'qc_av' )
    28893520             IF ( .NOT. ALLOCATED( qc_av ) )  THEN
     
    29843615          CALL wrd_write_string( 'curvature_solution_effects_bulk' )
    29853616          WRITE ( 14 )  curvature_solution_effects_bulk
     3617
     3618          CALL wrd_write_string( 'start_ice_microphysics' )
     3619          WRITE ( 14 )  start_ice_microphysics
     3620
     3621          CALL wrd_write_string( 'microphysics_ice_extension' )
     3622          WRITE ( 14 )  microphysics_ice_extension
     3623
     3624          CALL wrd_write_string( 'in_init' )
     3625          WRITE ( 14 )  in_init
     3626
     3627          CALL wrd_write_string( 'ice_crystal_sedimentation' )
     3628          WRITE ( 14 )  ice_crystal_sedimentation
    29863629
    29873630       ELSEIF ( TRIM( restart_data_format_output ) == 'mpi' )  THEN
     
    30013644          CALL wrd_mpi_io( 'aerosol_bulk', aerosol_bulk )
    30023645          CALL wrd_mpi_io( 'curvature_solution_effects_bulk', curvature_solution_effects_bulk )
     3646          CALL wrd_mpi_io( 'start_ice_microphysics', start_ice_microphysics )
     3647          CALL wrd_mpi_io( 'microphysics_ice_extension', microphysics_ice_extension )
     3648          CALL wrd_mpi_io( 'in_init', in_init )
     3649          CALL wrd_mpi_io( 'ice_crystal_sedimentation', ice_crystal_sedimentation )
    30033650
    30043651       ENDIF
     
    30623709
    30633710          ENDIF
     3711
     3712          IF ( microphysics_ice_extension )  THEN
     3713
     3714             CALL wrd_write_string( 'ni' )
     3715             WRITE ( 14 )  ni
     3716
     3717             IF ( ALLOCATED( ni_av ) )  THEN
     3718                CALL wrd_write_string( 'ni_av' )
     3719                WRITE ( 14 )  ni_av
     3720             ENDIF
     3721
     3722             CALL wrd_write_string( 'qi' )
     3723             WRITE ( 14 )  qi
     3724
     3725             IF ( ALLOCATED( qi_av ) )  THEN
     3726                CALL wrd_write_string( 'qi_av' )
     3727                WRITE ( 14 )  qi_av
     3728             ENDIF
     3729
     3730          ENDIF
     3731
    30643732
    30653733          IF ( microphysics_seifert )  THEN
     
    31043772             IF ( ALLOCATED( qr_av ) )  CALL wrd_mpi_io( 'qr_av', qr_av )
    31053773          ENDIF
     3774          IF ( microphysics_ice_extension )  THEN
     3775             CALL wrd_mpi_io( 'ni', ni )
     3776             IF ( ALLOCATED( ni_av ) )  CALL wrd_mpi_io( 'ni_av', ni_av )
     3777             CALL wrd_mpi_io( 'qi', qi )
     3778             IF ( ALLOCATED( qi_av ) )  CALL wrd_mpi_io( 'qi_av', qi_av )
     3779          ENDIF
    31063780
    31073781       ENDIF
     
    31343808!--             Predetermine flag to mask topography
    31353809                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    3136 
    3137                 IF ( qr(k,j,i) <= eps_sb )  THEN
    3138                    qr(k,j,i) = 0.0_wp
    3139                    nr(k,j,i) = 0.0_wp
    3140                 ELSE
    3141                    IF ( nr(k,j,i) * xrmin > qr(k,j,i) * hyrho(k) )  THEN
    3142                       nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmin * flag
    3143                    ELSEIF ( nr(k,j,i) * xrmax < qr(k,j,i) * hyrho(k) )  THEN
    3144                       nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmax * flag
     3810                IF ( .NOT. microphysics_morrison_no_rain )  THEN
     3811                   IF ( qr(k,j,i) <= eps_sb )  THEN
     3812                      qr(k,j,i) = 0.0_wp
     3813                      nr(k,j,i) = 0.0_wp
     3814                   ELSE
     3815                      IF ( nr(k,j,i) * xrmin > qr(k,j,i) * hyrho(k) )  THEN
     3816                         nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmin * flag
     3817                      ELSEIF ( nr(k,j,i) * xrmax < qr(k,j,i) * hyrho(k) )  THEN
     3818                         nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmax * flag
     3819                      ENDIF
    31453820                   ENDIF
    31463821                ENDIF
     
    31893864          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    31903865
    3191           IF ( qr(k,j,i) <= eps_sb )  THEN
    3192              qr(k,j,i) = 0.0_wp
    3193              nr(k,j,i) = 0.0_wp
    3194           ELSE
    3195 !
    3196 !--          Adjust number of raindrops to avoid nonlinear effects in
    3197 !--          sedimentation and evaporation of rain drops due to too small or
    3198 !--          too big weights of rain drops (Stevens and Seifert, 2008).
    3199              IF ( nr(k,j,i) * xrmin > qr(k,j,i) * hyrho(k) )  THEN
    3200                 nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmin * flag
    3201              ELSEIF ( nr(k,j,i) * xrmax < qr(k,j,i) * hyrho(k) )  THEN
    3202                 nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmax * flag
    3203              ENDIF
    3204 
     3866          IF ( .NOT.  microphysics_morrison_no_rain )  THEN
     3867             IF ( qr(k,j,i) <= eps_sb )  THEN
     3868                qr(k,j,i) = 0.0_wp
     3869                nr(k,j,i) = 0.0_wp
     3870             ELSE
     3871!
     3872!--             Adjust number of raindrops to avoid nonlinear effects in
     3873!--             sedimentation and evaporation of rain drops due to too small or
     3874!--             too big weights of rain drops (Stevens and Seifert, 2008).
     3875                IF ( nr(k,j,i) * xrmin > qr(k,j,i) * hyrho(k) )  THEN
     3876                   nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmin * flag
     3877                ELSEIF ( nr(k,j,i) * xrmax < qr(k,j,i) * hyrho(k) )  THEN
     3878                   nr(k,j,i) = qr(k,j,i) * hyrho(k) / xrmax * flag
     3879                ENDIF
     3880             ENDIF
    32053881          ENDIF
    32063882
     
    32193895
    32203896    END SUBROUTINE adjust_cloud_ij
     3897
     3898!------------------------------------------------------------------------------!
     3899! Description:
     3900! ------------
     3901!> Adjust number of ice crystal to avoid nonlinear effects in sedimentation and
     3902!> evaporation of ice crytals due to too small or too big weights
     3903!> of ice crytals (Stevens and Seifert, 2008).
     3904!------------------------------------------------------------------------------!
     3905    SUBROUTINE adjust_ice
     3906
     3907       IMPLICIT NONE
     3908
     3909       INTEGER(iwp) ::  i                 !<
     3910       INTEGER(iwp) ::  j                 !<
     3911       INTEGER(iwp) ::  k                 !<
     3912
     3913       REAL(wp) ::  flag                  !< flag to indicate first grid level above
     3914
     3915       CALL cpu_log( log_point_s(97), 'adjust_ice', 'start' )
     3916
     3917       DO  i = nxl, nxr
     3918          DO  j = nys, nyn
     3919             DO  k = nzb+1, nzt
     3920!
     3921!--             Predetermine flag to mask topography
     3922                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     3923                IF ( qi(k,j,i) <= ximin )  THEN
     3924                   qi(k,j,i) = 0.0_wp
     3925                   ni(k,j,i) = 0.0_wp
     3926                ELSE
     3927                   IF ( ni(k,j,i) * ximin > qi(k,j,i) * hyrho(k) )  THEN
     3928                      ni(k,j,i) = qi(k,j,i) * hyrho(k) / ximin * flag
     3929                   ENDIF
     3930                ENDIF
     3931             ENDDO
     3932          ENDDO
     3933       ENDDO
     3934
     3935       CALL cpu_log( log_point_s(97), 'adjust_ice', 'stop' )
     3936
     3937    END SUBROUTINE adjust_ice
     3938
     3939!------------------------------------------------------------------------------!
     3940! Description:
     3941! ------------
     3942!> Adjust number of of ice crystal to avoid nonlinear effects in
     3943!> sedimentation and evaporation of ice crystals due to too small or
     3944!> too big weights of ice crytals (Stevens and Seifert, 2008).
     3945!> The same procedure is applied to cloud droplets if they are determined
     3946!> prognostically. Call for grid point i,j
     3947!------------------------------------------------------------------------------!
     3948    SUBROUTINE adjust_ice_ij( i, j )
     3949
     3950       IMPLICIT NONE
     3951
     3952       INTEGER(iwp) ::  i                 !<
     3953       INTEGER(iwp) ::  j                 !<
     3954       INTEGER(iwp) ::  k                 !<
     3955
     3956       REAL(wp) ::  flag                  !< flag to indicate first grid level above surface
     3957
     3958       DO  k = nzb+1, nzt
     3959!
     3960!--       Predetermine flag to mask topography
     3961          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     3962          IF ( qi(k,j,i) <= ximin )  THEN
     3963             qi(k,j,i) = 0.0_wp
     3964             ni(k,j,i) = 0.0_wp
     3965          ELSE
     3966             IF ( ni(k,j,i) * ximin > qi(k,j,i) * hyrho(k) )  THEN
     3967                ni(k,j,i) = qi(k,j,i) * hyrho(k) / ximin * flag
     3968             ENDIF
     3969          ENDIF
     3970       ENDDO
     3971
     3972    END SUBROUTINE adjust_ice_ij
     3973
    32213974
    32223975!------------------------------------------------------------------------------!
     
    34234176    END SUBROUTINE activation_ij
    34244177
     4178!------------------------------------------------------------------------------!
     4179! Description:
     4180! ------------
     4181!> Calculate ice nucleation by applying the deposition-condensation formula as
     4182!> given by Meyers et al 1992 and as described in Seifert and Beheng 2006
     4183!------------------------------------------------------------------------------!
     4184    SUBROUTINE ice_nucleation
     4185
     4186       INTEGER(iwp) ::  i             !< loop index
     4187       INTEGER(iwp) ::  j             !< loop index
     4188       INTEGER(iwp) ::  k             !< loop index
     4189
     4190       LOGICAL :: isdac = .TRUE.
     4191
     4192       REAL(wp) ::  a_m92 = -0.639_wp !< parameter for nucleation
     4193       REAL(wp) ::  b_m92 = 12.96_wp  !< parameter for nucleation
     4194       REAL(wp) ::  flag              !< flag to indicate first grid level
     4195       REAL(wp) ::  n_in              !< number of ice nucleii
     4196       REAL(wp) ::  nucle = 0.0_wp    !< nucleation rate
     4197
     4198       CALL cpu_log( log_point_s(93), 'ice_nucleation', 'start' )
     4199
     4200       IF  ( isdac )  THEN
     4201          DO  i = nxl, nxr
     4202             DO  j = nys, nyn
     4203                DO  k = nzb+1, nzt
     4204!
     4205!--                Predetermine flag to mask topography
     4206                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     4207!
     4208!--                Call calculation of supersaturation located in subroutine
     4209                   CALL supersaturation_ice ( i, j, k )
     4210                   nucle = 0.0_wp
     4211                   !IF ( zu(k) >= 1500.0_wp ) CYCLE
     4212                   IF ( sat_ice >= 0.05_wp  .OR.  ql(k,j,i) >= 0.001E-3_wp  ) THEN
     4213!
     4214!--                   Calculate ice nucleation
     4215                      nucle = MAX( ( in_init - ni(k,j,i) ) / dt_micro, 0.0_wp )
     4216                      !qi(k,j,i) = qi(k,j,i) + nucle * dt_micro * ximin
     4217                      ni(k,j,i) = MIN( (ni(k,j,i) + nucle * dt_micro * flag), in_init)
     4218                   ENDIF
     4219
     4220                ENDDO
     4221             ENDDO
     4222          ENDDO
     4223       ELSE
     4224          DO  i = nxl, nxr
     4225             DO  j = nys, nyn
     4226                DO  k = nzb+1, nzt
     4227!
     4228!--                Predetermine flag to mask topography
     4229                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     4230!
     4231!--                Call calculation of supersaturation located in subroutine
     4232                   CALL supersaturation_ice ( i, j, k )
     4233                   nucle = 0.0_wp
     4234                   IF ( sat_ice > 0.0 ) THEN
     4235!
     4236!--                   Calculate ice nucleation
     4237                      n_in = in_init * EXP( a_m92 + b_m92 * sat_ice )
     4238                      nucle = MAX( ( n_in - ni(k,j,i) ) / dt_micro, 0.0_wp )
     4239                   ENDIF
     4240                   ni(k,j,i) = MIN( (ni(k,j,i) + nucle * dt_micro * flag), 1.0E10_wp )
     4241                ENDDO
     4242             ENDDO
     4243          ENDDO
     4244       ENDIF
     4245
     4246       CALL cpu_log( log_point_s(93), 'ice_nucleation', 'stop' )
     4247
     4248    END SUBROUTINE ice_nucleation
     4249
     4250
     4251!------------------------------------------------------------------------------!
     4252! Description:
     4253! ------------
     4254!> Calculate ice nucleation by applying the deposition-condensation formula as
     4255!> given by Meyers et al 1992 and as described in Seifert and Beheng 2006
     4256!------------------------------------------------------------------------------!
     4257    SUBROUTINE ice_nucleation_ij( i, j )
     4258
     4259       INTEGER(iwp) ::  i             !< loop index
     4260       INTEGER(iwp) ::  j             !< loop index
     4261       INTEGER(iwp) ::  k             !< loop index
     4262
     4263       LOGICAL :: isdac = .TRUE.
     4264
     4265       REAL(wp) ::  a_m92 = -0.639_wp !< parameter for nucleation
     4266       REAL(wp) ::  b_m92 = 12.96_wp  !< parameter for nucleation
     4267       REAL(wp) ::  flag              !< flag to indicate first grid level
     4268       REAL(wp) ::  n_in              !< number of ice nucleii
     4269       REAL(wp) ::  nucle = 0.0_wp    !< nucleation rate
     4270
     4271       IF ( isdac )  THEN
     4272          DO  k = nzb+1, nzt
     4273!
     4274!--          Predetermine flag to mask topography
     4275             flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     4276!
     4277!--          Call calculation of supersaturation located in subroutine
     4278             CALL supersaturation_ice ( i, j, k )
     4279             nucle = 0.0_wp
     4280             !IF ( zu(k) >= 1500.0_wp ) CYCLE
     4281             IF ( sat_ice >= 0.05_wp  .OR.  ql(k,j,i) >= 0.001E-3_wp ) THEN
     4282!
     4283!--             Calculate ice nucleation
     4284                nucle = MAX( ( in_init - ni(k,j,i) ) / dt_micro, 0.0_wp )
     4285                !qi(k,j,i) = qi(k,j,i) + nucle * dt_micro * ximin
     4286                ni(k,j,i) = MIN( (ni(k,j,i) + nucle * dt_micro * flag), in_init)
     4287             ENDIF
     4288          ENDDO
     4289       ELSE
     4290          DO  k = nzb+1, nzt
     4291!
     4292!--          Predetermine flag to mask topography
     4293             flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     4294!
     4295!--          Call calculation of supersaturation located in subroutine
     4296             CALL supersaturation_ice ( i, j, k )
     4297             nucle = 0.0_wp
     4298             IF ( sat_ice > 0.0 ) THEN
     4299!
     4300!--             Calculate ice nucleation
     4301                n_in = in_init * EXP( a_m92 + b_m92 * sat_ice )
     4302                nucle = MAX( ( n_in - ni(k,j,i) ) / dt_micro, 0.0_wp )
     4303             ENDIF
     4304             ni(k,j,i) = MIN( (ni(k,j,i) + nucle * dt_micro * flag), 1.0E10_wp )
     4305          ENDDO
     4306       ENDIF
     4307
     4308
     4309    END SUBROUTINE ice_nucleation_ij
    34254310
    34264311!------------------------------------------------------------------------------!
     
    34344319       IMPLICIT NONE
    34354320
    3436        INTEGER(iwp) ::  i                 !<
    3437        INTEGER(iwp) ::  j                 !<
    3438        INTEGER(iwp) ::  k                 !<
    3439 
    3440        REAL(wp)     ::  cond              !<
    3441        REAL(wp)     ::  cond_max          !<
    3442        REAL(wp)     ::  dc                !<
    3443        REAL(wp)     ::  evap              !<
    3444        REAL(wp)     ::  g_fac             !<
    3445        REAL(wp)     ::  nc_0              !<
    3446        REAL(wp)     ::  temp              !<
    3447        REAL(wp)     ::  xc                !<
    3448 
    3449        REAL(wp) ::  flag                  !< flag to indicate first grid level above
     4321       INTEGER(iwp) ::  i                 !< loop index
     4322       INTEGER(iwp) ::  j                 !< loop index
     4323       INTEGER(iwp) ::  k                 !< loop index
     4324
     4325       REAL(wp)     ::  cond              !< condensation rate
     4326       REAL(wp)     ::  cond_max          !< maximum condensation rate
     4327       REAL(wp)     ::  dc                !< weight avageraed diameter
     4328       REAL(wp)     ::  evap              !< evaporation rate
     4329       REAL(wp)     ::  flag              !< flag to indicate first grid level above surface
     4330       REAL(wp)     ::  g_fac             !< factor 1 / Fk + Fd
     4331       REAL(wp)     ::  nc_0              !< integral diameter
     4332       REAL(wp)     ::  temp              !< actual temperature
     4333       REAL(wp)     ::  xc                !< mean mass droplets
    34504334
    34514335       CALL cpu_log( log_point_s(66), 'condensation', 'start' )
     
    34614345                CALL supersaturation ( i, j, k )
    34624346!
    3463 !--             Actual temperature:
    3464                 IF ( microphysics_seifert ) THEN
    3465                    temp = t_l + lv_d_cp * ( qc(k,j,i) + qr(k,j,i) )
    3466                 ELSEIF ( microphysics_morrison_no_rain ) THEN
    3467                    temp = t_l + lv_d_cp * qc(k,j,i)
    3468                 ENDIF 
     4347!--             Actual temperature, t_l is calculated directly before
     4348!--             in supersaturation
     4349                IF ( microphysics_ice_extension ) THEN
     4350                   temp = t_l + lv_d_cp * ql(k,j,i) + ls_d_cp * qi(k,j,i)
     4351                ELSE
     4352                   temp = t_l + lv_d_cp * ql(k,j,i)
     4353                ENDIF
    34694354
    34704355                g_fac  = 1.0_wp / ( ( l_v / ( r_v * temp ) - 1.0_wp ) *        &
     
    35254410       IMPLICIT NONE
    35264411
    3527        INTEGER(iwp) ::  i                 !<
    3528        INTEGER(iwp) ::  j                 !<
    3529        INTEGER(iwp) ::  k                 !<
    3530 
    3531        REAL(wp)     ::  cond              !<
    3532        REAL(wp)     ::  cond_max          !<
    3533        REAL(wp)     ::  dc                !<
    3534        REAL(wp)     ::  evap              !<
     4412       INTEGER(iwp) ::  i                 !< loop index
     4413       INTEGER(iwp) ::  j                 !< loop index
     4414       INTEGER(iwp) ::  k                 !< loop index
     4415
     4416       REAL(wp)     ::  cond              !< condensation rate
     4417       REAL(wp)     ::  cond_max          !< maximum condensation rate
     4418       REAL(wp)     ::  dc                !< weight avageraed diameter
     4419       REAL(wp)     ::  evap              !< evaporation rate
    35354420       REAL(wp)     ::  flag              !< flag to indicate first grid level above surface
    3536        REAL(wp)     ::  g_fac             !<
    3537        REAL(wp)     ::  nc_0              !<
    3538        REAL(wp)     ::  temp              !<
    3539        REAL(wp)     ::  xc                !<
    3540 
     4421       REAL(wp)     ::  g_fac             !< factor 1 / Fk + Fd
     4422       REAL(wp)     ::  nc_0              !< integral diameter
     4423       REAL(wp)     ::  temp              !< actual temperature
     4424       REAL(wp)     ::  xc                !< mean mass droplets
    35414425
    35424426       DO  k = nzb+1, nzt
     
    35484432          CALL supersaturation ( i, j, k )
    35494433!
    3550 !--       Actual temperature:
    3551           IF ( microphysics_seifert ) THEN
    3552              temp = t_l + lv_d_cp * ( qc(k,j,i) + qr(k,j,i) )
    3553           ELSEIF ( microphysics_morrison_no_rain ) THEN
    3554              temp = t_l + lv_d_cp * qc(k,j,i)
    3555           ENDIF 
    3556 
    3557           g_fac  = 1.0_wp / ( ( l_v / ( r_v * temp ) - 1.0_wp ) *        &
    3558                               l_v / ( thermal_conductivity_l * temp )    &
    3559                               + r_v * temp / ( diff_coeff_l * e_s )      &
     4434!--       Actual temperature, t_l is calculated directly before
     4435!--       in supersaturation
     4436          IF ( microphysics_ice_extension ) THEN
     4437             temp = t_l + lv_d_cp * ql(k,j,i) + ls_d_cp * qi(k,j,i)
     4438          ELSE
     4439             temp = t_l + lv_d_cp * ql(k,j,i)
     4440          ENDIF
     4441
     4442          g_fac  = 1.0_wp / ( ( l_v / ( r_v * temp ) - 1.0_wp ) *              &
     4443                              l_v / ( thermal_conductivity_l * temp )          &
     4444                              + r_v * temp / ( diff_coeff_l * e_s )            &
    35604445                            )
    35614446!
     
    35944479
    35954480    END SUBROUTINE condensation_ij
     4481
     4482!------------------------------------------------------------------------------!
     4483! Description:
     4484! ------------
     4485!> Calculate the growth of ice particles by water vapor deposition (after
     4486!> Seifert and Beheng, 2006).
     4487!------------------------------------------------------------------------------!
     4488    SUBROUTINE ice_deposition
     4489
     4490       INTEGER(iwp) ::  i                 !< loop index
     4491       INTEGER(iwp) ::  j                 !< loop index
     4492       INTEGER(iwp) ::  k                 !< loop index
     4493
     4494       REAL(wp) ::  ac = 0.09_wp        !< parameter for ice capacitance
     4495       REAL(wp) ::  bc = 0.33_wp        !< parameter for ice capacitance
     4496       REAL(wp) ::  fac_gamma = 0.76_wp !< parameter to describe spectral
     4497                                        !< distribution, here following gamma
     4498                                        !< size distribution with µ =1/3 and nu=0
     4499       REAL(wp) ::  deposition_rate     !< depositions rate
     4500       REAL(wp) ::  deposition_rate_max !< maximum deposition rate
     4501       REAL(wp) ::  sublimation_rate    !< sublimations rate
     4502       REAL(wp) ::  gfac_dep            !< factor
     4503       REAL(wp) ::  temp                !< actual temperature
     4504       REAL(wp) ::  xi                  !< mean mass of ice crystal
     4505       REAL(wp) ::  flag                !< flag to indicate first grid level above
     4506
     4507       CALL cpu_log( log_point_s(95), 'ice deposition', 'start' )
     4508
     4509       DO  i = nxl, nxr
     4510          DO  j = nys, nyn
     4511             DO  k = nzb+1, nzt
     4512!
     4513!--             Predetermine flag to mask topography
     4514                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     4515!
     4516!--             Call calculation of supersaturation over a plane ice surface
     4517                CALL supersaturation_ice ( i, j, k )
     4518!
     4519!--             Actual temperature:
     4520                temp = t_l + lv_d_cp * ql(k,j,i) + ls_d_cp * qi(k,j,i)
     4521
     4522                IF ( temp >= 273.15_wp ) CYCLE
     4523!
     4524!--             calculating gfac_dep ( 1/ (Fk + Fd) ) see e.g.
     4525!--             Rogers and Yau, 1989
     4526                gfac_dep  = 1.0_wp / ( ( l_s / ( r_v * temp ) - 1.0_wp ) *     &
     4527                                    l_s / ( thermal_conductivity_l * temp )    &
     4528                                    + r_v * temp / ( diff_coeff_l * e_si )     &
     4529                                    )
     4530!
     4531!--             If there is nothing nucleated, than there is also no
     4532!--             deposition (above -38°C)
     4533                IF ( ni(k,j,i) <= 0.0_wp ) CYCLE
     4534!
     4535!--             calculate mean mass of ice crystal
     4536                xi = 0.0_wp
     4537                xi = MAX( ( qi(k,j,i) * hyrho(k) / ni(k,j,i)), ximin )
     4538!
     4539!--             Condensation needs only to be calculated in supersaturated
     4540!--             regions (regarding ice)
     4541                IF ( sat_ice > 0.0_wp )  THEN
     4542!
     4543!--                Calculate deposition rate assuming ice crystal shape as
     4544!--                prescribed in Ovchinnikov et al., 2014 and a gamma size
     4545!--                distribution according to Seifert and Beheng with to
     4546!--                µ =1/3 and nu=0
     4547                   deposition_rate  = 4.0_wp * pi * sat_ice * gfac_dep *       &
     4548                                      fac_gamma * ac * xi**bc * ni(k,j,i)
     4549                   IF ( microphysics_seifert ) THEN
     4550                      deposition_rate_max  = q(k,j,i) -                        &
     4551                                             q_si - qr(k,j,i) - qi(k,j,i)
     4552                   ELSEIF ( microphysics_morrison_no_rain ) THEN
     4553                      deposition_rate_max  = q(k,j,i) -                        &
     4554                                             q_si - qc(k,j,i) - qi(k,j,i)
     4555                   ENDIF
     4556                   deposition_rate = MIN( deposition_rate,                     &
     4557                                          deposition_rate_max / dt_micro )
     4558
     4559                   qi(k,j,i) = qi(k,j,i) + deposition_rate * dt_micro * flag
     4560                ELSEIF ( sat_ice < 0.0_wp ) THEN
     4561                   sublimation_rate = 4.0_wp * pi * sat_ice * gfac_dep *       &
     4562                                      fac_gamma * ac * xi**bc * ni(k,j,i)
     4563                   sublimation_rate = MAX( sublimation_rate,                   &
     4564                                           -qi(k,j,i) / dt_micro )
     4565                   qi(k,j,i) = qi(k,j,i) + sublimation_rate * dt_micro * flag
     4566                ENDIF
     4567             ENDDO
     4568          ENDDO
     4569       ENDDO
     4570
     4571       CALL cpu_log( log_point_s(95), 'ice deposition', 'stop' )
     4572
     4573    END SUBROUTINE ice_deposition
     4574
     4575!------------------------------------------------------------------------------!
     4576! Description:
     4577! ------------
     4578!> Calculate condensation rate for cloud water content (after Khairoutdinov and
     4579!> Kogan, 2000).
     4580!------------------------------------------------------------------------------!
     4581    SUBROUTINE ice_deposition_ij( i, j )
     4582
     4583       INTEGER(iwp) ::  i                 !< loop index
     4584       INTEGER(iwp) ::  j                 !< loop index
     4585       INTEGER(iwp) ::  k                 !< loop index
     4586
     4587       REAL(wp) ::  ac = 0.09_wp        !< parameter for ice capacitance
     4588       REAL(wp) ::  bc = 0.33_wp        !< parameter for ice capacitance
     4589       REAL(wp) ::  fac_gamma = 0.76_wp !< parameter to describe spectral
     4590                                        !< distribution, here following gamma
     4591                                        !< size distribution with nu=1, v=0
     4592       REAL(wp) ::  deposition_rate     !< depositions rate
     4593       REAL(wp) ::  deposition_rate_max !< maximum deposition rate
     4594       REAL(wp) ::  sublimation_rate    !< sublimations rate
     4595       REAL(wp) ::  gfac_dep            !< factor
     4596       REAL(wp) ::  temp                !< actual temperature
     4597       REAL(wp) ::  xi                  !< mean mass of ice crystal
     4598       REAL(wp) ::  flag                !< flag to indicate first grid level above
     4599
     4600       DO  k = nzb+1, nzt
     4601!
     4602!--       Predetermine flag to mask topography
     4603          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     4604!
     4605!--       Call calculation of supersaturation over a plane ice surface
     4606          CALL supersaturation_ice ( i, j, k )
     4607!
     4608!--       Actual temperature:
     4609          temp = t_l + lv_d_cp * ql(k,j,i) + ls_d_cp * qi(k,j,i)
     4610
     4611          IF ( temp >= 273.15_wp ) CYCLE
     4612!
     4613!--       calculating gfac_dep ( 1/ (Fk + Fd) ) see e.g.
     4614!--       Rogers and Yau, 1989
     4615          gfac_dep  = 1.0_wp / ( ( l_s / ( r_v * temp ) - 1.0_wp ) *           &
     4616                              l_s / ( thermal_conductivity_l * temp )          &
     4617                              + r_v * temp / ( diff_coeff_l * e_si )           &
     4618                              )
     4619!
     4620!--       If there is nothing nucleated, than there is also no
     4621!--       deposition (above -38°C)
     4622          IF ( ni(k,j,i) <= 0.0_wp ) CYCLE
     4623!
     4624!--       calculate mean mass of ice crystal
     4625          xi = 0.0_wp
     4626          xi = MAX( ( qi(k,j,i) * hyrho(k) / ni(k,j,i)), ximin )
     4627!
     4628!--       Condensation needs only to be calculated in supersaturated
     4629!--       regions (regarding ice)
     4630          IF ( sat_ice > 0.0_wp )  THEN
     4631!
     4632!--          Calculate deposition rate assuming ice crystal shape as
     4633!--          prescribed in Ovchinnikov et al., 2014 and a gamma size
     4634!--          distribution according to Seifert and Beheng with to
     4635!--          µ =1/3 and nu=0
     4636             deposition_rate  = 4.0_wp * pi * sat_ice * gfac_dep *             &
     4637                                fac_gamma * ac * xi**bc * ni(k,j,i)
     4638             IF ( microphysics_seifert ) THEN
     4639                deposition_rate_max  = q(k,j,i) -                              &
     4640                                       q_si - qr(k,j,i) - qi(k,j,i)
     4641             ELSEIF ( microphysics_morrison_no_rain ) THEN
     4642                deposition_rate_max  = q(k,j,i) -                              &
     4643                                       q_si - qc(k,j,i) - qi(k,j,i)
     4644             ENDIF
     4645             deposition_rate = MIN( deposition_rate,                           &
     4646                                    deposition_rate_max / dt_micro )
     4647
     4648             qi(k,j,i) = qi(k,j,i) + deposition_rate * dt_micro * flag
     4649          ELSEIF ( sat_ice < 0.0_wp ) THEN
     4650             sublimation_rate = 4.0_wp * pi * sat_ice * gfac_dep *             &
     4651                                fac_gamma * ac * xi**bc * ni(k,j,i)
     4652             sublimation_rate = MAX( sublimation_rate,                         &
     4653                                     -qi(k,j,i) / dt_micro )
     4654             qi(k,j,i) = qi(k,j,i) + sublimation_rate * dt_micro * flag
     4655          ENDIF
     4656       ENDDO
     4657
     4658    END SUBROUTINE ice_deposition_ij
    35964659
    35974660
     
    38234886!--          Autoconversion rate (Seifert and Beheng, 2006):
    38244887             autocon = k_au * ( nu_c + 2.0_wp ) * ( nu_c + 4.0_wp ) /          &
    3825                        ( nu_c + 1.0_wp )**2 * qc(k,j,i)**2 * xc**2 *            &
     4888                       ( nu_c + 1.0_wp )**2 * qc(k,j,i)**2 * xc**2 *           &
    38264889                       ( 1.0_wp + phi_au / ( 1.0_wp - tau_cloud )**2 ) *       &
    38274890                       rho_surface
     
    40555118          ENDIF
    40565119
    4057           IF ( ( qc(k,j,i) > eps_sb )  .AND.  ( qr(k,j,i) > eps_sb )  .AND.  &
     5120          IF ( ( qc(k,j,i) > eps_sb )  .AND.  ( qr(k,j,i) > eps_sb )  .AND.    &
    40585121               ( nc_accr > eps_mr ) )  THEN
    40595122!
     
    40825145!
    40835146!--          Accretion rate (Seifert and Beheng, 2006):
    4084              accr = k_cr * qc(k,j,i) * qr(k,j,i) * phi_ac *                      &
     5147             accr = k_cr * qc(k,j,i) * qr(k,j,i) * phi_ac *                    &
    40855148                    SQRT( rho_surface * hyrho(k) )
    40865149             accr = MIN( accr, qc(k,j,i) / dt_micro )
     
    40895152             qc(k,j,i) = qc(k,j,i) - accr * dt_micro * flag
    40905153             IF ( microphysics_morrison )  THEN
    4091                 nc(k,j,i) = nc(k,j,i) - MIN( nc(k,j,i), accr / xc *               &
     5154                nc(k,j,i) = nc(k,j,i) - MIN( nc(k,j,i), accr / xc *            &
    40925155                                             hyrho(k) * dt_micro * flag        &
    40935156                                         )
     
    45875650             IF ( qc(k,j,i) > eps_sb  .AND.  nc(k,j,i) > eps_mr )  THEN
    45885651                sed_nc(k) = sed_qc_const *                                     &
    4589                             ( qc(k,j,i) * hyrho(k) )**( 2.0_wp / 3.0_wp ) *     &
     5652                            ( qc(k,j,i) * hyrho(k) )**( 2.0_wp / 3.0_wp ) *    &
    45905653                            ( nc(k,j,i) )**( 1.0_wp / 3.0_wp )
    45915654             ELSE
     
    45945657
    45955658             sed_nc(k) = MIN( sed_nc(k), hyrho(k) * dzu(k+1) *                 &
    4596                               nc(k,j,i) / dt_micro + sed_nc(k+1)                &
     5659                              nc(k,j,i) / dt_micro + sed_nc(k+1)               &
    45975660                            ) * flag
    45985661
    4599              nc(k,j,i) = nc(k,j,i) + ( sed_nc(k+1) - sed_nc(k) ) *               &
     5662             nc(k,j,i) = nc(k,j,i) + ( sed_nc(k+1) - sed_nc(k) ) *             &
    46005663                                         ddzu(k+1) / hyrho(k) * dt_micro * flag
    46015664          ENDIF
     
    46085671          ENDIF
    46095672
    4610           sed_qc(k) = MIN( sed_qc(k), hyrho(k) * dzu(k+1) * q(k,j,i) /          &
     5673          sed_qc(k) = MIN( sed_qc(k), hyrho(k) * dzu(k+1) * q(k,j,i) /         &
    46115674                                      dt_micro + sed_qc(k+1)                   &
    46125675                         ) * flag
    46135676
    4614           q(k,j,i)  = q(k,j,i)  + ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /      &
     5677          q(k,j,i)  = q(k,j,i)  + ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /    &
    46155678                                hyrho(k) * dt_micro * flag
    4616           qc(k,j,i) = qc(k,j,i) + ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /      &
     5679          qc(k,j,i) = qc(k,j,i) + ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /    &
    46175680                                hyrho(k) * dt_micro * flag
    4618           pt(k,j,i) = pt(k,j,i) - ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /      &
     5681          pt(k,j,i) = pt(k,j,i) - ( sed_qc(k+1) - sed_qc(k) ) * ddzu(k+1) /    &
    46195682                                hyrho(k) * lv_d_cp * d_exner(k) * dt_micro     &
    46205683                                                                * flag
     
    46325695
    46335696    END SUBROUTINE sedimentation_cloud_ij
     5697
     5698!------------------------------------------------------------------------------!
     5699! Description:
     5700! ------------
     5701!> Sedimentation of ice crystals
     5702!------------------------------------------------------------------------------!
     5703    SUBROUTINE sedimentation_ice
     5704
     5705       INTEGER(iwp) ::  i             !< loop index
     5706       INTEGER(iwp) ::  j             !< loop index
     5707       INTEGER(iwp) ::  k             !< loop index
     5708
     5709       REAL(wp) ::  flag              !< flag to indicate first grid level
     5710       REAL(wp) ::  av = 6.39_wp      !< parameter for calculating fall speed
     5711       REAL(wp) ::  bv = 0.1666_wp    !< parameter (1/6)
     5712       REAL(wp) ::  xi = 0.0_wp       !< mean mass of ice crystal
     5713       REAL(wp) ::  vi = 0.0_wp       !< mean fall speed of ice crystal
     5714       REAL(wp) ::  factor_sed_gamma_k0 = 0.76_wp !< factor for zeroth moment and
     5715                                                  !< µ =1/3 and nu=0
     5716       REAL(wp) ::  factor_sed_gamma_k1 = 1.61_wp !< factor for first moment and
     5717                                                  !< µ =1/3 and nu=0
     5718
     5719       REAL(wp), DIMENSION(nzb:nzt+1) ::  sed_ni  !< sedimentation rate zeroth moment
     5720       REAL(wp), DIMENSION(nzb:nzt+1) ::  sed_qi  !< sedimentation rate fist moment
     5721
     5722       CALL cpu_log( log_point_s(96), 'sed_ice', 'start' )
     5723
     5724       sed_qi(nzt+1) = 0.0_wp
     5725       sed_ni(nzt+1) = 0.0_wp
     5726
     5727       DO  i = nxl, nxr
     5728          DO  j = nys, nyn
     5729             DO  k = nzt, nzb+1, -1
     5730
     5731                IF ( ni(k,j,i) <= 0.0_wp ) THEN
     5732                   xi = 0.0_wp
     5733                ELSE
     5734!--                Calculate mean mass of ice crystal
     5735                   xi = MAX( (hyrho(k) * qi(k,j,i) / ni(k,j,i)), ximin)
     5736                ENDIF
     5737!
     5738!--             calculate fall speed of ice crystal
     5739                vi = av * xi**bv
     5740!
     5741!--             Predetermine flag to mask topography
     5742                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     5743!
     5744!--             Calculate sedimentation rate for each grid box, factors are
     5745!--             calculated using
     5746                IF ( qi(k,j,i) > eps_sb  .AND.  ni(k,j,i) >= 0.0_wp )  THEN
     5747                   sed_qi(k) = qi(k,j,i) * vi * factor_sed_gamma_k1 * flag
     5748                   sed_ni(k) = ni(k,j,i) * vi * factor_sed_gamma_k0 * flag
     5749                ELSE
     5750                   sed_qi(k) = 0.0_wp
     5751                   sed_ni(k) = 0.0_wp
     5752                ENDIF
     5753!
     5754!--             Calculate sedimentation: divergence of sedimentation flux
     5755                sed_qi(k) = MIN( sed_qi(k), hyrho(k) * dzu(k+1) * q(k,j,i) /   &
     5756                                            dt_micro + sed_qi(k+1)             &
     5757                               ) * flag
     5758
     5759                q(k,j,i)  = q(k,j,i)  + ( sed_qi(k+1) - sed_qi(k) ) * ddzu(k+1)&
     5760                                      / hyrho(k) * dt_micro * flag
     5761                qi(k,j,i) = qi(k,j,i) + ( sed_qi(k+1) - sed_qi(k) ) * ddzu(k+1)&
     5762                                      / hyrho(k) * dt_micro * flag
     5763                ni(k,j,i) = ni(k,j,i) + ( sed_ni(k+1) - sed_ni(k) ) * ddzu(k+1)&
     5764                                      / hyrho(k) * dt_micro * flag
     5765
     5766                pt(k,j,i) = pt(k,j,i) - ( sed_qi(k+1) - sed_qi(k) ) * ddzu(k+1)&
     5767                                      / hyrho(k) * l_s / c_p * d_exner(k) *    &
     5768                                        dt_micro * flag
     5769!
     5770!--             Compute the precipitation rate of cloud (fog) droplets
     5771                IF ( call_microphysics_at_all_substeps )  THEN
     5772                   prr(k,j,i) = prr(k,j,i) + sed_qi(k) / hyrho(k) *            &
     5773                                weight_substep(intermediate_timestep_count) *  &
     5774                                flag
     5775                ELSE
     5776                   prr(k,j,i) = prr(k,j,i) + sed_qi(k) / hyrho(k) * flag
     5777                ENDIF
     5778
     5779             ENDDO
     5780          ENDDO
     5781       ENDDO
     5782
     5783       CALL cpu_log( log_point_s(96), 'sed_ice', 'stop' )
     5784
     5785    END SUBROUTINE sedimentation_ice
     5786
     5787
     5788!------------------------------------------------------------------------------!
     5789! Description:
     5790! ------------
     5791!> Sedimentation of ice crystals
     5792!------------------------------------------------------------------------------!
     5793    SUBROUTINE sedimentation_ice_ij( i, j )
     5794
     5795       INTEGER(iwp) ::  i             !<
     5796       INTEGER(iwp) ::  j             !<
     5797       INTEGER(iwp) ::  k             !<
     5798
     5799       REAL(wp) ::  flag           !< flag to indicate first grid level
     5800       REAL(wp) ::  av = 6.39_wp   !< parameter for calculating fall speed
     5801       REAL(wp) ::  bv = 0.1666_wp !<
     5802       REAL(wp) ::  xi = 0.0_wp    !< mean mass of ice crystal
     5803       REAL(wp) ::  vi = 0.0_wp    !< mean fall speed of ice crystal
     5804       REAL(wp) ::  factor_sed_gamma_k0 = 0.76_wp
     5805       REAL(wp) ::  factor_sed_gamma_k1 = 1.61_wp
     5806
     5807       REAL(wp), DIMENSION(nzb:nzt+1) ::  sed_ni  !<
     5808       REAL(wp), DIMENSION(nzb:nzt+1) ::  sed_qi  !<
     5809
     5810       sed_qi(nzt+1) = 0.0_wp
     5811       sed_ni(nzt+1) = 0.0_wp
     5812
     5813       DO  k = nzt, nzb+1, -1
     5814          IF ( ni(k,j,i) <= 0.0_wp ) THEN
     5815             xi = 0.0_wp
     5816          ELSE
     5817!--          Calculate mean mass of ice crystal
     5818             xi = MAX( (hyrho(k) * qi(k,j,i) / ni(k,j,i)), ximin)
     5819          ENDIF
     5820!
     5821!--       calculate fall speed of ice crystal
     5822          vi = av * xi**bv
     5823!
     5824!--       Predetermine flag to mask topography
     5825          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     5826!
     5827!--       Calculate sedimentation rate for each grid box, factors are
     5828!--       calculated using
     5829          IF ( qi(k,j,i) > eps_sb  .AND.  ni(k,j,i) >= 0.0_wp )  THEN
     5830             sed_qi(k) = qi(k,j,i) * vi * factor_sed_gamma_k1 * flag
     5831             sed_ni(k) = ni(k,j,i) * vi * factor_sed_gamma_k0 * flag
     5832          ELSE
     5833             sed_qi(k) = 0.0_wp
     5834             sed_ni(k) = 0.0_wp
     5835          ENDIF
     5836!
     5837!--       calculate fall speed of ice crystal
     5838          vi = av * xi**bv
     5839!
     5840!--       Predetermine flag to mask topography
     5841          flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
     5842
     5843          IF ( qi(k,j,i) > eps_sb  .AND.  ni(k,j,i) >= 0.0_wp )  THEN
     5844             sed_qi(k) = qi(k,j,i) * vi * factor_sed_gamma_k1 * flag
     5845             sed_ni(k) = ni(k,j,i) * vi * factor_sed_gamma_k0 * flag
     5846          ELSE
     5847             sed_qi(k) = 0.0_wp
     5848             sed_ni(k) = 0.0_wp
     5849          ENDIF
     5850
     5851          sed_qi(k) = MIN( sed_qi(k), hyrho(k) * dzu(k+1) * q(k,j,i) /         &
     5852                                      dt_micro + sed_qi(k+1)                   &
     5853                         ) * flag
     5854
     5855          q(k,j,i)  = q(k,j,i)  + ( sed_qi(k+1) - sed_qi(k) ) * ddzu(k+1) /    &
     5856                                hyrho(k) * dt_micro * flag
     5857          qi(k,j,i) = qi(k,j,i) + ( sed_qi(k+1) - sed_qi(k) ) * ddzu(k+1) /    &
     5858                                hyrho(k) * dt_micro * flag
     5859          ni(k,j,i) = ni(k,j,i) + ( sed_ni(k+1) - sed_ni(k) ) * ddzu(k+1) /    &
     5860                                hyrho(k) * dt_micro * flag
     5861          pt(k,j,i) = pt(k,j,i) - ( sed_qi(k+1) - sed_qi(k) ) * ddzu(k+1) /    &
     5862                                hyrho(k) * l_s / c_p * d_exner(k) * dt_micro   &
     5863                                                                  * flag
     5864!
     5865!--       Compute the precipitation rate of cloud (fog) droplets
     5866          IF ( call_microphysics_at_all_substeps )  THEN
     5867             prr(k,j,i) = prr(k,j,i) + sed_qi(k) / hyrho(k) *                  &
     5868                              weight_substep(intermediate_timestep_count) * flag
     5869          ELSE
     5870             prr(k,j,i) = prr(k,j,i) + sed_qi(k) / hyrho(k) * flag
     5871          ENDIF
     5872
     5873       ENDDO
     5874
     5875    END SUBROUTINE sedimentation_ice_ij
     5876
    46345877
    46355878
     
    50536296
    50546297          sed_nr(k) = flux / dt_micro * flag
    5055           nr(k,j,i)  = nr(k,j,i) + ( sed_nr(k+1) - sed_nr(k) ) * ddzu(k+1) /     &
     6298          nr(k,j,i)  = nr(k,j,i) + ( sed_nr(k+1) - sed_nr(k) ) * ddzu(k+1) /   &
    50566299                                    hyrho(k) * dt_micro * flag
    50576300!
     
    50806323          sed_qr(k) = flux / dt_micro * flag
    50816324
    5082           qr(k,j,i) = qr(k,j,i) + ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) /      &
     6325          qr(k,j,i) = qr(k,j,i) + ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) /    &
    50836326                                hyrho(k) * dt_micro * flag
    5084           q(k,j,i)  = q(k,j,i)  + ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) /      &
     6327          q(k,j,i)  = q(k,j,i)  + ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) /    &
    50856328                                hyrho(k) * dt_micro * flag
    5086           pt(k,j,i) = pt(k,j,i) - ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) /      &
     6329          pt(k,j,i) = pt(k,j,i) - ( sed_qr(k+1) - sed_qr(k) ) * ddzu(k+1) /    &
    50876330                                hyrho(k) * lv_d_cp * d_exner(k) * dt_micro     &
    50886331                                                                * flag
     
    52026445!--    (see: Cuijpers + Duynkerke, 1993, JAS, 23)
    52036446       q_s   = q_s * ( 1.0_wp + alpha * q(k,j,i) ) / ( 1.0_wp + alpha * q_s )
     6447
     6448       IF ( .NOT. microphysics_ice_extension ) THEN
     6449          IF ( microphysics_seifert ) THEN
     6450             sat = ( q(k,j,i) - qr(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
     6451          ELSEIF ( microphysics_morrison_no_rain ) THEN
     6452             sat = ( q(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
     6453          ENDIF
     6454       ELSE
     6455          IF ( microphysics_seifert ) THEN
     6456             sat = ( q(k,j,i) - qr(k,j,i) - qc(k,j,i) - qi(k,j,i) ) / q_s - 1.0_wp
     6457          ELSEIF ( microphysics_morrison_no_rain ) THEN
     6458             sat = ( q(k,j,i) - qc(k,j,i) - qi(k,j,i) ) / q_s - 1.0_wp
     6459          ENDIF
     6460       ENDIF
     6461
     6462    END SUBROUTINE supersaturation
     6463
     6464!------------------------------------------------------------------------------!
     6465! Description:
     6466! ------------
     6467!> Computation of the diagnostic supersaturation sat, actual liquid water
     6468!< temperature t_l and saturation water vapor mixing ratio q_s
     6469!------------------------------------------------------------------------------!
     6470    SUBROUTINE supersaturation_ice ( i, j, k )
     6471
     6472       INTEGER(iwp) ::  i   !< running index
     6473       INTEGER(iwp) ::  j   !< running index
     6474       INTEGER(iwp) ::  k   !< running index
     6475
     6476       REAL(wp) ::  e_a     !< water vapor pressure
     6477       REAL(wp) ::  temp    !< actual temperature
     6478!
     6479!--    Actual liquid water temperature:
     6480       t_l = exner(k) * pt(k,j,i)
     6481!
     6482!--    Actual temperature:
     6483       temp = t_l + lv_d_cp * ql(k,j,i) + ls_d_cp * qi(k,j,i)
     6484!
     6485!--    Calculate water vapor saturation pressure with formular using actual
     6486!--    temperature
     6487       e_si = magnus_ice( temp )
     6488!
     6489!--    Computation of ice saturation mixing ratio:
     6490       q_si = rd_d_rv * e_si / ( hyp(k) - e_si )
     6491!
     6492!--    Current vapor pressure
     6493       e_a = (   q(k,j,i) - qr(k,j,i) - qc(k,j,i) - qi(k,j,i) ) * hyp(k) /     &
     6494             ( ( q(k,j,i) - qr(k,j,i) - qc(k,j,i) - qi(k,j,i) ) + rd_d_rv )
    52046495!
    52056496!--    Supersaturation:
    52066497!--    Not in case of microphysics_kessler or microphysics_sat_adjust
    52076498!--    since qr is unallocated
    5208        IF ( microphysics_seifert ) THEN
    5209           sat = ( q(k,j,i) - qr(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
    5210        ELSEIF ( microphysics_morrison_no_rain ) THEN
    5211           sat = ( q(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
    5212        ENDIF
    5213 
    5214     END SUBROUTINE supersaturation
     6499       sat_ice = e_a / e_si - 1.0_wp
     6500
     6501    END SUBROUTINE supersaturation_ice
    52156502
    52166503
     
    52246511    SUBROUTINE calc_liquid_water_content
    52256512
    5226 
    5227 
    5228        IMPLICIT NONE
    5229 
    52306513       INTEGER(iwp) ::  i !<
    52316514       INTEGER(iwp) ::  j !<
     
    52346517       REAL(wp)     ::  flag !< flag to indicate first grid level above surface
    52356518
    5236 
    52376519       DO  i = nxlg, nxrg
    52386520          DO  j = nysg, nyng
     
    52416523!--             Predetermine flag to mask topography
    52426524                flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    5243 
    52446525!
    52456526!--             Call calculation of supersaturation located
    52466527                CALL supersaturation( i, j, k )
    5247 
    52486528!
    52496529!--             Compute the liquid water content
    5250                 IF ( microphysics_seifert  .AND. .NOT. microphysics_morrison ) &
    5251                 THEN
    5252                    IF ( ( q(k,j,i) - q_s - qr(k,j,i) ) > 0.0_wp )  THEN
    5253                       qc(k,j,i) = ( q(k,j,i) - q_s - qr(k,j,i) ) * flag
    5254                       ql(k,j,i) = ( qc(k,j,i) + qr(k,j,i) ) * flag
     6530                IF ( .NOT. microphysics_ice_extension ) THEN
     6531                   IF ( microphysics_seifert  .AND. .NOT.                      &
     6532                        microphysics_morrison )  THEN
     6533!--                   Seifert and Beheng scheme: saturation adjustment
     6534                      IF ( ( q(k,j,i) - q_s - qr(k,j,i) ) > 0.0_wp )  THEN
     6535                         qc(k,j,i) = ( q(k,j,i) - q_s - qr(k,j,i) ) * flag
     6536                         ql(k,j,i) = ( qc(k,j,i) + qr(k,j,i) ) * flag
     6537                      ELSE
     6538                         IF ( q(k,j,i) < qr(k,j,i) )  q(k,j,i) = qr(k,j,i)
     6539                         qc(k,j,i) = 0.0_wp
     6540                         ql(k,j,i) = qr(k,j,i) * flag
     6541                      ENDIF
     6542!
     6543!--                Morrison scheme: explicit condensation (see above)
     6544                   ELSEIF ( microphysics_morrison  .AND.                       &
     6545                            microphysics_seifert )  THEN
     6546                      ql(k,j,i) = qc(k,j,i) + qr(k,j,i) * flag
     6547!--                Morrison without rain: explicit condensation
     6548                   ELSEIF ( microphysics_morrison  .AND.                       &
     6549                            .NOT. microphysics_seifert )  THEN
     6550                      ql(k,j,i) = qc(k,j,i)
     6551!--                Kessler and saturation adjustment scheme
    52556552                   ELSE
    5256                       IF ( q(k,j,i) < qr(k,j,i) )  q(k,j,i) = qr(k,j,i)
    5257                       qc(k,j,i) = 0.0_wp
    5258                       ql(k,j,i) = qr(k,j,i) * flag
     6553                      IF ( ( q(k,j,i) - q_s ) > 0.0_wp )  THEN
     6554                         qc(k,j,i) = ( q(k,j,i) - q_s ) * flag
     6555                         ql(k,j,i) = qc(k,j,i) * flag
     6556                      ELSE
     6557                         qc(k,j,i) = 0.0_wp
     6558                         ql(k,j,i) = 0.0_wp
     6559                      ENDIF
    52596560                   ENDIF
    5260                 ELSEIF ( microphysics_morrison  .AND.  microphysics_seifert )  THEN
    5261                    ql(k,j,i) = qc(k,j,i) + qr(k,j,i) * flag
    5262                 ELSEIF ( microphysics_morrison  .AND.  .NOT. microphysics_seifert )  THEN
    5263                    ql(k,j,i) = qc(k,j,i)                   
     6561!--             Calculations of liquid water content in case of mixed-phase
     6562!--             cloud microphyics
    52646563                ELSE
    5265                    IF ( ( q(k,j,i) - q_s ) > 0.0_wp )  THEN
    5266                       qc(k,j,i) = ( q(k,j,i) - q_s ) * flag
    5267                       ql(k,j,i) = qc(k,j,i) * flag
     6564                   IF ( microphysics_seifert  .AND.                            &
     6565                        .NOT. microphysics_morrison ) &
     6566                   THEN
     6567!
     6568!--                   Seifert and Beheng scheme: saturation adjustment
     6569                      IF ( ( q(k,j,i)                                          &
     6570                             - q_s - qr(k,j,i) - qi(k,j,i) ) > 0.0_wp )  THEN
     6571                         qc(k,j,i) = ( q(k,j,i) - q_s - qr(k,j,i) - qi(k,j,i) )&
     6572                                       * flag
     6573                         ql(k,j,i) = ( qc(k,j,i) + qr(k,j,i) ) * flag
     6574                      ELSE
     6575                         IF ( q(k,j,i) < ( qr(k,j,i) + qi(k,j,i) ) )  THEN
     6576                            q(k,j,i) = qr(k,j,i) + qi(k,j,i)
     6577                         ENDIF
     6578                         qc(k,j,i) = 0.0_wp
     6579                         ql(k,j,i) = qr(k,j,i) * flag
     6580                      ENDIF
     6581!--                Morrison scheme: explicit condensation (see above)
     6582                   ELSEIF ( microphysics_morrison  .AND.                       &
     6583                            microphysics_seifert )  THEN
     6584                      ql(k,j,i) = qc(k,j,i) + qr(k,j,i) * flag
     6585!--                Morrison without rain: explicit condensation
     6586                   ELSEIF ( microphysics_morrison  .AND.                       &
     6587                            .NOT. microphysics_seifert )  THEN
     6588                      ql(k,j,i) = qc(k,j,i)
     6589!--                Kessler and saturation adjustment scheme
    52686590                   ELSE
    5269                       qc(k,j,i) = 0.0_wp
    5270                       ql(k,j,i) = 0.0_wp
     6591                      IF ( ( q(k,j,i) - q_s ) > 0.0_wp )  THEN
     6592                         qc(k,j,i) = ( q(k,j,i) - q_s ) * flag
     6593                         ql(k,j,i) = qc(k,j,i) * flag
     6594                      ELSE
     6595                         qc(k,j,i) = 0.0_wp
     6596                         ql(k,j,i) = 0.0_wp
     6597                      ENDIF
    52716598                   ENDIF
    52726599                ENDIF
Note: See TracChangeset for help on using the changeset viewer.