function dispersion_rel_chain_k(this, k_vec) result(disp)
class(chain) :: this
integer, intent(in) :: k_vec(3)
real(dp) :: disp
#ifdef DEBUG_
character(*), parameter :: this_routine = "dispersion_rel_chain"
#endif
! for now only do it for periodic boundary conditions..
ASSERT(this%is_periodic())
! and for now only for nearest neighbor interaction!
! although this is just the nearest neighbor band..
! for next nearest and additional function should be implemented!
! i need to bring in the length of the chain and stuff..
! and i should consider twisted boundary conditions and nearest
! neigbhors here too..? i think so..
disp = 2.0_dp * cos(2.0_dp * pi * (k_vec(1) + twisted_bc(1)) / this%length)
end function dispersion_rel_chain_k