anchor.diff:          end do
                   
       end subroutine distribute_precip
  +    
  +    subroutine apply_rain_fraction(current_date, rain_fraction, current_precip, last_precip, precip_delta)
  +        implicit none
  +        double precision                        :: current_date
  +        real, dimension(:,:,:), intent(in)      :: rain_fraction
  +        real, dimension(:,:),   intent(inout)   :: current_precip, last_precip
  +        logical,                intent(in)      :: precip_delta
  +        ! relies on module variable this_precip as a temporary array
  +        
  +        integer :: i,j, nx,ny
  +        integer :: x,y, point
  +        integer :: n_correction_points, correction_step
  +        real    :: year_fraction
  +        
  +        nx=size(current_precip,1)
  +        ny=size(current_precip,2)
  +        
  +        n_correction_points = size(rain_fraction,3)
  +        year_fraction = calc_year_fraction(current_date)
  +        correction_step = nint(n_correction_points * year_fraction)
  +        
  +        if (precip_delta) then
  +            do j=2,ny-1
  +                do i=2,nx-1
  +                    this_precip(i,j)    = current_precip(i,j)-last_precip(i,j)
  +                    current_precip(i,j) = last_precip(i,j)
  +                end do
  +            end do
  +        else
  +            do j=2,ny-1
  +                do i=2,nx-1
  +                    this_precip(i,j)    = last_precip(i,j)
  +                    current_precip(i,j) = current_precip(i,j)-last_precip(i,j)
  +                end do
  +            end do
  +        endif
  +        
  +        do j=2,ny-1
  +            do i=2,nx-1
  +                current_precip(i,j) = current_precip(i,j)+this_precip(i,j)*rain_fraction(i,j,correction_step)
  +            end do
  +        end do
  +                
  +    end subroutine apply_rain_fraction
  +
       
       !>----------------------------------------------------------
       !! Microphysical driver
  
positive.code:     !!
      !!----------------------------------------------------------
      subroutine distribute_precip(current_precip, last_precip, local_fraction, precip_delta)
          real, dimension(:,:), intent(inout) :: current_precip, last_precip
          real, intent(in) :: local_fraction
          logical, intent(in) :: precip_delta
  
negative.code:     use module_mp_wsm6,             only: wsm6, wsm6init
      use module_mp_simple,           only: mp_simple_driver
      use mod_wrf_constants !,          only: rhoair0, rhowater, rhosnow, cliq, cpv
      use time,                       only: calc_year_fraction
      implicit none
  
      ! permit the microphysics to update on a longer time step than the advection
  