subroutine NECIReceiveVASPData(vasp_nbands, vasp_nkpts, vasp_kpnts, vasp_kpmsh, vasp_xi, vasp_kpntind, vasp_eigv, vasp_umat2D, vasp_nEl)
use constants, only: dp
use SystemData, only: nEl
use UMatCache, only: SetupUMatCache, UMat2D, tagUMat2D, tUMat2D
use global_utilities
use HElem
implicit none
integer :: vasp_nbands, vasp_nkpts, vasp_kpntind(vasp_nbands * vasp_nkpts), vasp_kpmsh(3)
real(dp) :: vasp_kpnts(3, vasp_nkpts), vasp_xi, vasp_eigv(vasp_nbands * vasp_nkpts)
integer :: vasp_nEl
#ifdef CMPLX_
complex(dp) :: vasp_umat2d(vasp_nbands * vasp_nkpts, vasp_nbands * vasp_nkpts)
#else
real(dp) :: vasp_umat2d(vasp_nbands * vasp_nkpts, vasp_nbands * vasp_nkpts)
#endif
integer :: i, j, ierr
character(*), parameter :: thisroutine = 'NECIReceiveVASPData'
nKP = vasp_nkpts
nStates = vasp_nbands * vasp_nkpts
write(stdout, *) 'nkp', nKP
write(stdout, *) 'kp'
do i = 1, nKP
write(stdout, *) vasp_kpnts(:, i)
end do
nEl = vasp_nEl * nKP
allocate(KPNTInd(nStates))
allocate(eigv(nStates))
allocate(kpnts(3, nKP))
KPMsh(:) = vasp_kpmsh(:)
KPNTInd(:) = vasp_kpntind(:)
eigv(:) = vasp_eigv(:)
kpnts(:, :) = vasp_kpnts(:, :)
xi = vasp_xi
! Set up UMat2D
tUMat2D = .TRUE.
allocate(UMat2D(nStates, nStates), STAT=ierr)
call LogMemAlloc('UMat2D', nStates**2, HElement_t_size * 8, thisroutine, tagUMat2D, ierr)
do i = 1, nStates
do j = 1, nStates
UMat2D(i, j) = (vasp_umat2d(i, j))
end do
end do
return
end subroutine NECIReceiveVASPData