subroutine allocate_grid(nNuc,ZNuc,max_ang_mom,min_exponent,max_exponent, & 
                         radial_precision,nAng,nGrid)

! Allocate quadrature grid with numgrid (Radovan Bast)

  use numgrid
  use, intrinsic :: iso_c_binding, only: c_ptr

  implicit none
  include 'parameters.h'

! Input variables

  integer,intent(in)            :: nNuc
  double precision,intent(in)   :: ZNuc(nNuc)

  integer,intent(in)            :: max_ang_mom(nNuc)
  double precision,intent(in)   :: min_exponent(nNuc,maxL+1)
  double precision,intent(in)   :: max_exponent(nNuc)

  double precision              :: radial_precision
  integer,intent(in)            :: nAng

! Local variables
 
  integer                       :: iNuc

  integer                       :: min_num_angular_points
  integer                       :: max_num_angular_points

  type(c_ptr)                   :: context

! Output variables

  integer,intent(out)           :: nGrid

! Set useful variables

  min_num_angular_points = nAng
  max_num_angular_points = nAng

! Get total number of grid points

  nGrid = 0

  do iNuc=1,nNuc

    context = numgrid_new_atom_grid(radial_precision,min_num_angular_points,max_num_angular_points, &
                                    int(ZNuc(iNuc)),max_exponent(iNuc),max_ang_mom(iNuc),           &
                                    min_exponent(iNuc,1:max_ang_mom(iNuc)+1))

    nGrid = nGrid + numgrid_get_num_grid_points(context)

    call numgrid_free_atom_grid(context)

  end do

end subroutine allocate_grid
