Index: palm/trunk/SOURCE/bulk_cloud_model_mod.f90
===================================================================
--- palm/trunk/SOURCE/bulk_cloud_model_mod.f90	(revision 4026)
+++ palm/trunk/SOURCE/bulk_cloud_model_mod.f90	(revision 4027)
@@ -25,4 +25,7 @@
 ! -----------------
 ! $Id$
+! Added microphyics scheme 'morrision_no_rain'
+! 
+! 3931 2019-04-24 16:34:28Z schwenkel
 ! Added bcm_exchange_horiz which is called after non_transport_physics
 ! 
@@ -301,4 +304,5 @@
     LOGICAL ::  microphysics_morrison = .FALSE.                  !< use 2-moment Morrison (add. prog. eq. for nc and qc)
     LOGICAL ::  microphysics_seifert = .FALSE.                   !< use 2-moment Seifert and Beheng scheme
+    LOGICAL ::  microphysics_morrison_no_rain = .FALSE.          !< use 2-moment Morrison     
     LOGICAL ::  precipitation = .FALSE.                          !< namelist parameter
 
@@ -391,4 +395,5 @@
            dt_precipitation, &
            microphysics_morrison, &
+           microphysics_morrison_no_rain, &           
            microphysics_sat_adjust, &
            microphysics_seifert, &
@@ -548,4 +553,7 @@
 !
 !--    Check cloud scheme
+!--    This scheme considers only saturation adjustment,
+!--    i.e. water vapor surplus is converted into liquid
+!--    water. No other microphysical processes are considered
        IF ( cloud_scheme == 'saturation_adjust' )  THEN
           microphysics_sat_adjust = .TRUE.
@@ -553,4 +561,13 @@
           microphysics_kessler    = .FALSE.
           precipitation           = .FALSE.
+          microphysics_morrison_no_rain = .FALSE.
+!
+!--    This scheme includes all process of the seifert 
+!--    beheng scheme (2001,2006). Especially rain processes are 
+!--    considered with prognostic quantities of qr and nr. 
+!--    Cloud droplet concentration is assumed to be constant and 
+!--    qc is diagnostic.
+!--    Technical remark: The switch 'microphysics_seifert' allocates
+!--    fields of qr and nr and enables all rain processes.
        ELSEIF ( cloud_scheme == 'seifert_beheng' )  THEN
           microphysics_sat_adjust = .FALSE.
@@ -559,4 +576,9 @@
           microphysics_morrison  = .FALSE.
           precipitation           = .TRUE.
+          microphysics_morrison_no_rain = .FALSE.
+!
+!--    The kessler scheme is a simplified scheme without any
+!--    prognostic quantities for microphyical variables but 
+!--    considering autoconversion.
        ELSEIF ( cloud_scheme == 'kessler' )  THEN
           microphysics_sat_adjust = .FALSE.
@@ -565,4 +587,15 @@
           microphysics_morrison   = .FALSE.
           precipitation           = .TRUE.
+          microphysics_morrison_no_rain = .FALSE.
+!
+!--    The morrison scheme is an extension of the seifer beheng scheme
+!--    including also relevant processes for cloud droplet size particles
+!--    such as activation and an diagnostic mehtod for diffusional growth.
+!--    I.e. here all processes of Seifert and Beheng as well as of the 
+!--    morrision scheme are used. Therefore, ztis includes prognostic 
+!--    quantities for qc and nc.
+!--    Technical remark: The switch 'microphysics_morrison' allocates
+!--    fields of qc and nc and enables diagnostic diffusional growth and 
+!--    activation.
        ELSEIF ( cloud_scheme == 'morrison' )  THEN
           microphysics_sat_adjust = .FALSE.
@@ -571,4 +604,17 @@
           microphysics_morrison   = .TRUE.
           precipitation           = .TRUE.
+          microphysics_morrison_no_rain = .FALSE.    
+!          
+!--    The 'morrision_no_rain' scheme includes only processes of morrision scheme
+!--    without the rain processes of seifert beheng. Therfore, the prog. quantities
+!--    of qr and nr remain unallocated. This might be appropiate for cloud in which 
+!--    the size distribution is narrow, e.g. fog. 
+       ELSEIF ( cloud_scheme == 'morrison_no_rain' )  THEN
+          microphysics_sat_adjust = .FALSE.
+          microphysics_seifert    = .FALSE.
+          microphysics_kessler    = .FALSE.
+          microphysics_morrison   = .TRUE.
+          microphysics_morrison_no_rain = .TRUE.          
+          precipitation           = .FALSE.     
        ELSE
           message_string = 'unknown cloud microphysics scheme cloud_scheme ="' // &
@@ -1226,14 +1272,14 @@
 !
 !--       Compute cloud physics
+!--       Here the the simple kessler scheme is used.
           IF ( microphysics_kessler )  THEN
-
              CALL autoconversion_kessler
              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud
-
-          ELSEIF ( microphysics_seifert )  THEN
-
+             
+!
+!--       Here the seifert beheng scheme is used. Cloud concentration is assumed to
+!--       a constant value an qc a diagnostic value.
+          ELSEIF ( microphysics_seifert  .AND.  .NOT. microphysics_morrison )  THEN
              CALL adjust_cloud
-             IF ( microphysics_morrison )  CALL activation
-             IF ( microphysics_morrison )  CALL condensation
              CALL autoconversion
              CALL accretion
@@ -1242,4 +1288,26 @@
              CALL sedimentation_rain
              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud
+             
+!
+!--       Here the morrison scheme is used. No rain processes are considered and qr and nr 
+!--       are not allocated
+          ELSEIF ( microphysics_morrison_no_rain  .AND.  .NOT. microphysics_seifert )  THEN
+             CALL activation
+             CALL condensation
+             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud   
+             
+!
+!--       Here the full morrison scheme is used and all processes of Seifert and Beheng are 
+!--       included
+          ELSEIF ( microphysics_morrison  .AND.  microphysics_seifert )  THEN
+             CALL adjust_cloud
+             CALL activation
+             CALL condensation
+             CALL autoconversion
+             CALL accretion
+             CALL selfcollection_breakup
+             CALL evaporation_rain
+             CALL sedimentation_rain
+             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud            
 
           ENDIF
@@ -1296,14 +1364,14 @@
 !
 !--       Compute cloud physics
+!--       Here the the simple kessler scheme is used.
           IF( microphysics_kessler )  THEN
-
              CALL autoconversion_kessler_ij( i,j )
              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )
 
-          ELSEIF ( microphysics_seifert )  THEN
-
+!
+!--       Here the seifert beheng scheme is used. Cloud concentration is assumed to
+!--       a constant value an qc a diagnostic value.             
+          ELSEIF ( microphysics_seifert  .AND.  .NOT. microphysics_morrison )  THEN
              CALL adjust_cloud_ij( i,j )
-             IF ( microphysics_morrison ) CALL activation_ij( i,j )
-             IF ( microphysics_morrison ) CALL condensation_ij( i,j )
              CALL autoconversion_ij( i,j )
              CALL accretion_ij( i,j )
@@ -1312,4 +1380,26 @@
              CALL sedimentation_rain_ij( i,j )
              IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )
+             
+!
+!--       Here the morrison scheme is used. No rain processes are considered and qr and nr 
+!--       are not allocated
+          ELSEIF ( microphysics_morrison_no_rain  .AND.  .NOT. microphysics_seifert )  THEN
+             CALL activation_ij( i,j )
+             CALL condensation_ij( i,j )
+             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j ) 
+             
+!
+!--       Here the full morrison scheme is used and all processes of Seifert and Beheng are 
+!--       included             
+          ELSEIF ( microphysics_morrison  .AND.  microphysics_seifert )  THEN
+             CALL adjust_cloud_ij( i,j )
+             CALL activation_ij( i,j )
+             CALL condensation_ij( i,j )
+             CALL autoconversion_ij( i,j )
+             CALL accretion_ij( i,j )
+             CALL selfcollection_breakup_ij( i,j )
+             CALL evaporation_rain_ij( i,j )
+             CALL sedimentation_rain_ij( i,j )
+             IF ( cloud_water_sedimentation )  CALL sedimentation_cloud_ij( i,j )           
 
           ENDIF
@@ -3269,5 +3359,9 @@
 !
 !--             Actual temperature:
-                temp = t_l + lv_d_cp * ( qc(k,j,i) + qr(k,j,i) )
+                IF ( microphysics_seifert ) THEN
+                   temp = t_l + lv_d_cp * ( qc(k,j,i) + qr(k,j,i) )
+                ELSEIF ( microphysics_morrison_no_rain ) THEN
+                   temp = t_l + lv_d_cp * qc(k,j,i) 
+                ENDIF  
 
                 g_fac  = 1.0_wp / ( ( l_v / ( r_v * temp ) - 1.0_wp ) *        &
@@ -3293,5 +3387,9 @@
 !--                (see: Khairoutdinov + Kogan, 2000, Mon. Wea. Rev.,128)
                    cond      = 2.0_wp * pi * nc_0 * g_fac * sat / hyrho(k)
-                   cond_max  = q(k,j,i) - q_s - qc(k,j,i) - qr(k,j,i)
+                   IF ( microphysics_seifert ) THEN
+                      cond_max  = q(k,j,i) - q_s - qc(k,j,i) - qr(k,j,i)
+                   ELSEIF ( microphysics_morrison_no_rain ) THEN
+                      cond_max  = q(k,j,i) - q_s - qc(k,j,i) 
+                   ENDIF
                    cond      = MIN( cond, cond_max / dt_micro )
 
@@ -3348,5 +3446,9 @@
 !
 !--       Actual temperature:
-          temp = t_l + lv_d_cp * ( qc(k,j,i) + qr(k,j,i) )
+          IF ( microphysics_seifert ) THEN
+             temp = t_l + lv_d_cp * ( qc(k,j,i) + qr(k,j,i) )
+          ELSEIF ( microphysics_morrison_no_rain ) THEN
+             temp = t_l + lv_d_cp * qc(k,j,i) 
+          ENDIF  
 
           g_fac  = 1.0_wp / ( ( l_v / ( r_v * temp ) - 1.0_wp ) *        &
@@ -3372,5 +3474,9 @@
 !--          (see: Khairoutdinov + Kogan, 2000, Mon. Wea. Rev.,128)
              cond      = 2.0_wp * pi * nc_0 * g_fac * sat / hyrho(k)
-             cond_max  = q(k,j,i) - q_s - qc(k,j,i) - qr(k,j,i)
+             IF ( microphysics_seifert ) THEN
+                cond_max  = q(k,j,i) - q_s - qc(k,j,i) - qr(k,j,i)
+             ELSEIF ( microphysics_morrison_no_rain ) THEN
+                cond_max  = q(k,j,i) - q_s - qc(k,j,i) 
+             ENDIF
              cond      = MIN( cond, cond_max / dt_micro )
 
@@ -4997,7 +5103,8 @@
 !--    Not in case of microphysics_kessler or microphysics_sat_adjust
 !--    since qr is unallocated
-       IF ( .NOT. microphysics_kessler  .AND.                                  &
-            .NOT.  microphysics_sat_adjust )  THEN
-          sat   = ( q(k,j,i) - qr(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
+       IF ( microphysics_seifert ) THEN
+          sat = ( q(k,j,i) - qr(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
+       ELSEIF ( microphysics_morrison_no_rain ) THEN
+          sat = ( q(k,j,i) - qc(k,j,i) ) / q_s - 1.0_wp
        ENDIF
 
@@ -5032,10 +5139,10 @@
                 flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_0(k,j,i), 0 ) )
 
-   !
-   !--          Call calculation of supersaturation located
+!
+!--             Call calculation of supersaturation located
                 CALL supersaturation( i, j, k )
 
-   !
-   !--          Compute the liquid water content
+!
+!--             Compute the liquid water content
                 IF ( microphysics_seifert  .AND. .NOT. microphysics_morrison ) &
                 THEN
@@ -5048,6 +5155,8 @@
                       ql(k,j,i) = qr(k,j,i) * flag
                    ENDIF
-                ELSEIF ( microphysics_morrison )  THEN
+                ELSEIF ( microphysics_morrison  .AND.  microphysics_seifert )  THEN
                    ql(k,j,i) = qc(k,j,i) + qr(k,j,i) * flag
+                ELSEIF ( microphysics_morrison  .AND.  .NOT. microphysics_seifert )  THEN
+                   ql(k,j,i) = qc(k,j,i)                    
                 ELSE
                    IF ( ( q(k,j,i) - q_s ) > 0.0_wp )  THEN
