Index: /palm/trunk/SOURCE/lpm_droplet_condensation.f90
===================================================================
--- /palm/trunk/SOURCE/lpm_droplet_condensation.f90	(revision 1889)
+++ /palm/trunk/SOURCE/lpm_droplet_condensation.f90	(revision 1890)
@@ -19,5 +19,9 @@
 ! Current revisions:
 ! ------------------
-!
+! Some improvements of the Rosenbrock method. If the Rosenbrock method needs more
+! than 40 iterations to find a sufficient time setp, the model is not aborted.
+! This might lead to small erros. But they can be assumend as negligible, since 
+! the maximum timesetp of the Rosenbrock method after 40 iterations will be 
+! smaller than 10^-16 s.  
 ! 
 ! Former revisions:
@@ -131,16 +135,13 @@
     IMPLICIT NONE
 
-    INTEGER(iwp) :: i                          !<
     INTEGER(iwp) :: ip                         !<
     INTEGER(iwp) :: internal_timestep_count    !<
-    INTEGER(iwp) :: j                          !<
     INTEGER(iwp) :: jp                         !<
     INTEGER(iwp) :: jtry                       !<
-    INTEGER(iwp) :: k                          !<
     INTEGER(iwp) :: kp                         !<
     INTEGER(iwp) :: n                          !<
     INTEGER(iwp) :: ros_count                  !<
  
-    INTEGER(iwp), PARAMETER ::  maxtry = 100   !<
+    INTEGER(iwp), PARAMETER ::  maxtry = 40    !<
 
     LOGICAL ::  repeat                         !<
@@ -328,5 +329,5 @@
 !--          Internal time step should not be > 1.0E-2 and < 1.0E-6 
              IF ( dt_ros_next > 1.0E-2_wp )  THEN
-                dt_ros_next = 1.0E-3_wp
+                dt_ros_next = 1.0E-2_wp
              ELSEIF ( dt_ros_next < 1.0E-6_wp )  THEN
                 dt_ros_next = 1.0E-6_wp
@@ -366,5 +367,5 @@
                 drdt_ini       = drdt
                 dt_ros_sum_ini = dt_ros_sum
-                r_ros_ini      = MAX( r_ros, particles(n)%rvar2 )
+                r_ros_ini      = r_ros
 
 !
@@ -380,12 +381,12 @@
 
                    IF ( jtry == maxtry+1 )  THEN
-                      message_string = 'maxtry > 100 in Rosenbrock method'
-                      CALL message( 'lpm_droplet_condensation', 'PA0347', 2,   &
-                                    2, 0, 6, 0 )
+                      message_string = 'maxtry > 40 in Rosenbrock method'
+                      CALL message( 'lpm_droplet_condensation', 'PA0347', 0,   &
+                                    1, 0, 6, 0 )
                    ENDIF
 
                    aa    = 1.0_wp / ( gam * dt_ros ) - d2rdtdr
                    g1    = drdt_ini / aa
-                   r_ros = MAX( r_ros_ini + a21 * g1, particles(n)%rvar2 )
+                   r_ros = r_ros_ini + a21 * g1
                    drdt  = ddenom * ventilation_effect(n) * ( e_a / e_s - 1.0_wp - &
                                                               afactor / r_ros +    &
@@ -395,5 +396,5 @@
                    g2    = ( drdt + c21 * g1 / dt_ros )&
                            / aa
-                   r_ros = MAX( r_ros_ini + a31 * g1 + a32 * g2, particles(n)%rvar2 )
+                   r_ros = r_ros_ini + a31 * g1 + a32 * g2
                    drdt  = ddenom * ventilation_effect(n) * ( e_a / e_s - 1.0_wp - &
                                                               afactor / r_ros +    &
@@ -405,6 +406,5 @@
                    g4    = ( drdt +  &
                              ( c41 * g1 + c42 * g2 + c43 * g3 ) / dt_ros ) / aa
-                   r_ros = MAX( r_ros_ini + b1 * g1 + b2 * g2 + b3 * g3 +      &
-                                b4 * g4, particles(n)%rvar2 )
+                   r_ros = r_ros_ini + b1 * g1 + b2 * g2 + b3 * g3 + b4 * g4
 
                    dt_ros_sum = dt_ros_sum_ini + dt_ros
@@ -426,7 +426,6 @@
                       EXIT
                    ELSE
-                      dt_ros = SIGN( MAX( ABS( 0.9_wp * dt_ros *               &
-                                               errmax**pshrnk ),               &
-                                               shrnk * ABS( dt_ros ) ), dt_ros )
+                      dt_ros = MAX( ABS( 0.9_wp * dt_ros * errmax**pshrnk ),   &
+                                    shrnk * ABS( dt_ros ) )
                    ENDIF
 
@@ -483,16 +482,11 @@
 !--    volume (this is needed later in lpm_calc_liquid_water_content for
 !--    calculating the release of latent heat)
-       i = ip
-       j = jp
-       k = kp
-           ! only exact if equidistant
-
-       ql_c(k,j,i) = ql_c(k,j,i) + particles(n)%weight_factor *                &
+       ql_c(kp,jp,ip) = ql_c(kp,jp,ip) + particles(n)%weight_factor *          &
                                    rho_l * 1.33333333_wp * pi *                &
                                    ( new_r(n)**3 - particles(n)%radius**3 ) /  &
                                    ( rho_surface * dx * dy * dz )
-       IF ( ql_c(k,j,i) > 100.0_wp )  THEN
-          WRITE( message_string, * ) 'k=',k,' j=',j,' i=',i,      &
-                       ' ql_c=',ql_c(k,j,i), ' &part(',n,')%wf=', &
+       IF ( ql_c(kp,jp,ip) > 100.0_wp )  THEN
+          WRITE( message_string, * ) 'k=',kp,' j=',jp,' i=',ip,      &
+                       ' ql_c=',ql_c(kp,jp,ip), ' &part(',n,')%wf=', &
                        particles(n)%weight_factor,' delta_r=',delta_r
           CALL message( 'lpm_droplet_condensation', 'PA0143', 2, 2, -1, 6, 1 )
@@ -501,9 +495,9 @@
 !
 !--    Change the droplet radius
-       IF ( ( new_r(n) - particles(n)%radius ) < 0.0_wp  .AND.                 &
+       IF ( ( new_r(n) - particles(n)%radius ) < 0.0_wp  .AND.        &
             new_r(n) < 0.0_wp )  THEN
-          WRITE( message_string, * ) '#1 k=',k,' j=',j,' i=',i,                &
+          WRITE( message_string, * ) '#1 k=',kp,' j=',jp,' i=',ip,    &
                        ' e_s=',e_s, ' e_a=',e_a,' t_int=',t_int,      &
-                       ' &delta_r=',delta_r,                                   &
+                       ' &delta_r=',delta_r,                          &
                        ' particle_radius=',particles(n)%radius
           CALL message( 'lpm_droplet_condensation', 'PA0144', 2, 2, -1, 6, 1 )
@@ -513,5 +507,5 @@
 !--    Sum up the total volume of liquid water (needed below for
 !--    re-calculating the weighting factors)
-       ql_v(k,j,i) = ql_v(k,j,i) + particles(n)%weight_factor * new_r(n)**3
+       ql_v(kp,jp,ip) = ql_v(kp,jp,ip) + particles(n)%weight_factor * new_r(n)**3
 
        particles(n)%radius = new_r(n)
Index: /palm/trunk/SOURCE/lpm_init.f90
===================================================================
--- /palm/trunk/SOURCE/lpm_init.f90	(revision 1889)
+++ /palm/trunk/SOURCE/lpm_init.f90	(revision 1890)
@@ -19,5 +19,7 @@
 ! Current revisions:
 ! -----------------
-! 
+! Initialization of aerosol equilibrium radius not possible in supersaturated 
+! environments. Therefore, a maximum supersaturation of -1 % is assumed during
+! initialization.
 ! 
 ! Former revisions:
@@ -811,5 +813,5 @@
     REAL(wp)  :: weight_sum         !< sum of all weighting factors
 
-    INTEGER(iwp), DIMENSION(:,:,:), INTENT(IN) ::  local_start !<
+    INTEGER(iwp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg), INTENT(IN) ::  local_start !<
 
     INTEGER(iwp)  :: n              !<
@@ -980,7 +982,7 @@
 
 !
-!--          The formula is only valid for subsaturated environments. In (super-)
-!--          saturated air, the inital radius is used.
-             IF ( e_a / e_s < 1.0_wp )  THEN
+!--          The formula is only valid for subsaturated environments. For 
+!--          supersaturations higher than -1 %, the supersaturation is set to -1%.
+             IF ( e_a / e_s < 0.99_wp )  THEN
 
                 DO  n = local_start(kp,jp,ip), number_of_particles  !only new particles 
@@ -995,4 +997,17 @@
                 ENDDO
 
+             ELSE
+
+                DO  n = local_start(kp,jp,ip), number_of_particles  !only new particles 
+
+                   bfactor             = vanthoff * molecular_weight_of_water *    &
+                                         rho_s * particles(n)%rvar2**3 /           &
+                                         ( molecular_weight_of_solute * rho_l )
+                   particles(n)%radius = particles(n)%rvar2 * ( bfactor /          &
+                                         particles(n)%rvar2**3 )**(1.0_wp/3.0_wp) *&
+                                         0.01_wp**(-1.0_wp/3.0_wp)
+
+                ENDDO
+
              ENDIF
 
