apply_2D_point_group Function

public function apply_2D_point_group(ilut_list) result(trans_wf)

Arguments

Type IntentOptional Attributes Name
integer(kind=n_int), intent(inout) :: ilut_list(:,:)

Return Value integer(kind=n_int), allocatable, (:,:,:)


Contents

Source Code


Source Code

    function apply_2D_point_group(ilut_list) result(trans_wf)
        ! apply the point group symmetries of a 2D square lattice
        integer(n_int), intent(inout) :: ilut_list(:, :)
        integer(n_int), allocatable :: trans_wf(:, :, :)

        integer :: i, j
        real(dp) :: rot_angle
        character(4) :: mir_axis
        integer :: sort_ind(size(ilut_list, 2))
        integer :: matrix(size(ilut_list, 2), size(ilut_list, 2))
        real(dp) :: signI(lenof_sign), signJ(lenof_sign)

        allocate(trans_wf(0:niftot, size(ilut_list, 2), 9))

        trans_wf = 0_n_int

        rot_angle = 0.0_dp

        do i = 1, 4
            trans_wf(:, :, i) = apply_rotation_wf(ilut_list, rot_angle)

            rot_angle = rot_angle + 90.0_dp

        end do

        mir_axis = 'xydo'

        do i = 5, 8
            trans_wf(:, :, i) = apply_mirror_wf(ilut_list, mir_axis(i - 4:i - 4), sort_ind)
        end do

        trans_wf(:, :, 9) = apply_inversion_wf(ilut_list)

    end function apply_2D_point_group