dispersion_rel_ole Function

private function dispersion_rel_ole(this, k_vec) result(disp)

Type Bound

ole

Arguments

Type IntentOptional Attributes Name
class(ole) :: this
integer, intent(in) :: k_vec(3)

Return Value real(kind=dp)


Contents

Source Code


Source Code

    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