Index: palm/trunk/SOURCE/lpm_collision_kernels.f90
===================================================================
--- palm/trunk/SOURCE/lpm_collision_kernels.f90	(revision 836)
+++ palm/trunk/SOURCE/lpm_collision_kernels.f90	(revision 849)
@@ -4,5 +4,6 @@
 ! Current revisions:
 ! -----------------
-! 
+! routine collision_efficiency_rogers added (moved from former advec_particles
+! to here)
 !
 ! Former revisions:
@@ -59,6 +60,6 @@
     PRIVATE
 
-    PUBLIC  ckernel, init_kernels,  rclass_lbound, rclass_ubound, &
-            recalculate_kernel            
+    PUBLIC  ckernel, collision_efficiency_rogers, init_kernels, &
+            rclass_lbound, rclass_ubound, recalculate_kernel            
 
     REAL ::  epsilon, eps2, rclass_lbound, rclass_ubound, urms, urms2
@@ -72,4 +73,8 @@
 !
 !-- Public interfaces
+    INTERFACE collision_efficiency_rogers
+       MODULE PROCEDURE collision_efficiency_rogers
+    END INTERFACE collision_efficiency_rogers
+
     INTERFACE init_kernels
        MODULE PROCEDURE init_kernels
@@ -851,3 +856,101 @@
     END SUBROUTINE turb_enhance_eff
 
+
+
+    SUBROUTINE collision_efficiency_rogers( mean_r, r, e)
+!------------------------------------------------------------------------------!
+! Collision efficiencies from table 8.2 in Rogers and Yau (1989, 3rd edition).
+! Values are calculated from table by bilinear interpolation.
+!------------------------------------------------------------------------------!
+
+       IMPLICIT NONE
+
+       INTEGER       ::  i, j, k
+
+       LOGICAL, SAVE ::  first = .TRUE.
+
+       REAL          ::  aa, bb, cc, dd, dx, dy, e, gg, mean_r, mean_rm, r, &
+                         rm, x, y
+
+       REAL, DIMENSION(1:9), SAVE      ::  collected_r = 0.0
+       REAL, DIMENSION(1:19), SAVE     ::  collector_r = 0.0
+       REAL, DIMENSION(1:9,1:19), SAVE ::  ef = 0.0
+
+       mean_rm = mean_r * 1.0E06
+       rm      = r      * 1.0E06
+
+       IF ( first )  THEN
+
+          collected_r = (/ 2.0, 3.0, 4.0, 6.0, 8.0, 10.0, 15.0, 20.0, 25.0 /)
+          collector_r = (/ 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 80.0, 100.0,  &
+                           150.0, 200.0, 300.0, 400.0, 500.0, 600.0, 1000.0, &
+                           1400.0, 1800.0, 2400.0, 3000.0 /)
+
+          ef(:,1) = (/0.017, 0.027, 0.037, 0.052, 0.052, 0.052, 0.052, 0.0, &
+                      0.0 /)
+          ef(:,2) = (/0.001, 0.016, 0.027, 0.060, 0.12, 0.17, 0.17, 0.17, 0.0 /)
+          ef(:,3) = (/0.001, 0.001, 0.02,  0.13,  0.28, 0.37, 0.54, 0.55, 0.47/)
+          ef(:,4) = (/0.001, 0.001, 0.02,  0.23,  0.4,  0.55, 0.7,  0.75, 0.75/)
+          ef(:,5) = (/0.01,  0.01,  0.03,  0.3,   0.4,  0.58, 0.73, 0.75, 0.79/)
+          ef(:,6) = (/0.01,  0.01,  0.13,  0.38,  0.57, 0.68, 0.80, 0.86, 0.91/)
+          ef(:,7) = (/0.01,  0.085, 0.23,  0.52,  0.68, 0.76, 0.86, 0.92, 0.95/)
+          ef(:,8) = (/0.01,  0.14,  0.32,  0.60,  0.73, 0.81, 0.90, 0.94, 0.96/)
+          ef(:,9) = (/0.025, 0.25,  0.43,  0.66,  0.78, 0.83, 0.92, 0.95, 0.96/)
+          ef(:,10)= (/0.039, 0.3,   0.46,  0.69,  0.81, 0.87, 0.93, 0.95, 0.96/)
+          ef(:,11)= (/0.095, 0.33,  0.51,  0.72,  0.82, 0.87, 0.93, 0.96, 0.97/)
+          ef(:,12)= (/0.098, 0.36,  0.51,  0.73,  0.83, 0.88, 0.93, 0.96, 0.97/)
+          ef(:,13)= (/0.1,   0.36,  0.52,  0.74,  0.83, 0.88, 0.93, 0.96, 0.97/)
+          ef(:,14)= (/0.17,  0.4,   0.54,  0.72,  0.83, 0.88, 0.94, 0.98, 1.0 /)
+          ef(:,15)= (/0.15,  0.37,  0.52,  0.74,  0.82, 0.88, 0.94, 0.98, 1.0 /)
+          ef(:,16)= (/0.11,  0.34,  0.49,  0.71,  0.83, 0.88, 0.94, 0.95, 1.0 /)
+          ef(:,17)= (/0.08,  0.29,  0.45,  0.68,  0.8,  0.86, 0.96, 0.94, 1.0 /)
+          ef(:,18)= (/0.04,  0.22,  0.39,  0.62,  0.75, 0.83, 0.92, 0.96, 1.0 /)
+          ef(:,19)= (/0.02,  0.16,  0.33,  0.55,  0.71, 0.81, 0.90, 0.94, 1.0 /)
+
+       ENDIF
+
+       DO  k = 1, 8
+          IF ( collected_r(k) <= mean_rm )  i = k
+       ENDDO
+
+       DO  k = 1, 18
+          IF ( collector_r(k) <= rm )  j = k
+       ENDDO
+
+       IF ( rm < 10.0 )  THEN
+          e = 0.0
+       ELSEIF ( mean_rm < 2.0 )  THEN
+          e = 0.001
+       ELSEIF ( mean_rm >= 25.0 )  THEN
+          IF( j <= 2 )  e = 0.0
+          IF( j == 3 )  e = 0.47
+          IF( j == 4 )  e = 0.8
+          IF( j == 5 )  e = 0.9
+          IF( j >=6  )  e = 1.0
+       ELSEIF ( rm >= 3000.0 )  THEN
+          IF( i == 1 )  e = 0.02
+          IF( i == 2 )  e = 0.16
+          IF( i == 3 )  e = 0.33
+          IF( i == 4 )  e = 0.55
+          IF( i == 5 )  e = 0.71
+          IF( i == 6 )  e = 0.81
+          IF( i == 7 )  e = 0.90
+          IF( i >= 8 )  e = 0.94
+       ELSE
+          x  = mean_rm - collected_r(i)
+          y  = rm - collector_r(j)
+          dx = collected_r(i+1) - collected_r(i)
+          dy = collector_r(j+1) - collector_r(j)
+          aa = x**2 + y**2
+          bb = ( dx - x )**2 + y**2
+          cc = x**2 + ( dy - y )**2
+          dd = ( dx - x )**2 + ( dy - y )**2
+          gg = aa + bb + cc + dd
+
+          e = ( (gg-aa)*ef(i,j) + (gg-bb)*ef(i+1,j) + (gg-cc)*ef(i,j+1) + &
+                (gg-dd)*ef(i+1,j+1) ) / (3.0*gg)
+       ENDIF
+
+    END SUBROUTINE collision_efficiency_rogers
+
  END MODULE lpm_collision_kernels_mod
