anchor.diff:  
     integer(int32)              :: alphabet_size
     integer(int32)              :: ndata
  -  integer(int32)              :: ngtz
  -  integer(int32), allocatable :: fgtz(:)
  -  integer(int32), allocatable :: multi_gtz(:)
  +  integer(int32)              :: nmulti
  +  integer(int32), allocatable :: multi_x(:)
  +  integer(int32), allocatable :: multi(:)
   
   contains
   
  
positive.code:     
      real(real64), intent(in) :: alpha
      integer(int32) :: i
      real(real64)   :: a(ngtz)
  
      hdir = 0.0_real64
      do i = 1,ngtz 
         a(i) = - multi_gtz(i) * (fgtz(i) - one + alpha) * digamma(fgtz(i) + alpha) 
      end do
      hdir = sum(a)
      hdir = hdir / (ndata + alpha * alphabet_size)
  
negative.code:     end do
  
       ! working arrays on bins visited at leat once 
      nmulti = count(multiplicities > 0) 
      allocate(multi_x(nmulti),stat=err)
      allocate(multi(nmulti),stat=err)
  
      k = 0
      do i = 1,nmax+1
         if (multiplicities(i) > 0) then 
            k = k + 1
            multi_x(k) = i
            multi(k) = multiplicities(i)
         end if
      end do
      deallocate(multiplicities)
  