function dispersion_rel_ole(this, k_vec) result(disp)
class(ole) :: this
integer, intent(in) :: k_vec(3)
real(dp) :: disp
#ifdef DEBUG_
character(*), parameter :: this_routine = "dispersion_rel_ole"
#endif
ASSERT(this%is_periodic())
! i finally figured out how to do the non-orthogonal
! boundary conditions:
! although i am not sure about the twisted BC in this case!
disp = 2.0_dp * (cos(2 * pi / real(sum(this%length(1:2)), dp) * &
((k_vec(1) + twisted_bc(1)) - (k_vec(2) + twisted_bc(2)))) &
+ cos(2 * pi / real(sum(this%length(1:2)), dp) * &
(this%length(2) / real(this%length(1), dp) * (k_vec(1) + twisted_bc(1)) &
+ (k_vec(2) + twisted_bc(2)))))
end function dispersion_rel_ole