wigner_seitz_opt_setup Subroutine

private subroutine wigner_seitz_opt_setup(ws_distance, ws_region, wigner_seitz, num_wann, real_lattice, nrpts, error, comm)

Uses

  • proc~~wigner_seitz_opt_setup~~UsesGraph proc~wigner_seitz_opt_setup wigner_seitz_opt_setup module~w90_comms w90_comms proc~wigner_seitz_opt_setup->module~w90_comms module~w90_constants w90_constants proc~wigner_seitz_opt_setup->module~w90_constants module~w90_postw90_types w90_postw90_types proc~wigner_seitz_opt_setup->module~w90_postw90_types module~w90_types w90_types proc~wigner_seitz_opt_setup->module~w90_types module~w90_ws_distance w90_ws_distance proc~wigner_seitz_opt_setup->module~w90_ws_distance module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base module~w90_postw90_types->module~w90_comms module~w90_postw90_types->module~w90_constants module~w90_types->module~w90_constants module~w90_ws_distance->module~w90_constants module~w90_error w90_error module~w90_ws_distance->module~w90_error module~w90_error->module~w90_comms module~w90_error->module~w90_error_base

If use_ws_distance = true, get list of all R vectors that appear in irdist_ws and write them to irvec_pw90. Set the index map ir_ind_ws_to_pw90

If use_ws_distance = false, copy irvec to irvec_pw90.

Arguments

Type IntentOptional Attributes Name
type(ws_distance_type), intent(inout) :: ws_distance
type(ws_region_type), intent(in) :: ws_region
type(wigner_seitz_type), intent(inout) :: wigner_seitz
integer, intent(in) :: num_wann
real(kind=dp), intent(in) :: real_lattice(3,3)
integer, intent(in) :: nrpts
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

Calls

proc~~wigner_seitz_opt_setup~~CallsGraph proc~wigner_seitz_opt_setup wigner_seitz_opt_setup proc~set_error_alloc set_error_alloc proc~wigner_seitz_opt_setup->proc~set_error_alloc proc~ws_expand_rvec ws_expand_rvec proc~wigner_seitz_opt_setup->proc~ws_expand_rvec proc~comms_sync_error comms_sync_error proc~set_error_alloc->proc~comms_sync_error proc~set_base_error set_base_error proc~set_error_alloc->proc~set_base_error proc~ws_expand_rvec->proc~set_error_alloc proc~set_error_dealloc set_error_dealloc proc~ws_expand_rvec->proc~set_error_dealloc proc~set_error_fatal set_error_fatal proc~ws_expand_rvec->proc~set_error_fatal proc~set_error_dealloc->proc~comms_sync_error proc~set_error_dealloc->proc~set_base_error proc~set_error_fatal->proc~comms_sync_error proc~set_error_fatal->proc~set_base_error

Called by

proc~~wigner_seitz_opt_setup~~CalledByGraph proc~wigner_seitz_opt_setup wigner_seitz_opt_setup proc~pw90common_wanint_setup pw90common_wanint_setup proc~pw90common_wanint_setup->proc~wigner_seitz_opt_setup program~postw90 postw90 program~postw90->proc~pw90common_wanint_setup

Source Code

  subroutine wigner_seitz_opt_setup(ws_distance, ws_region, wigner_seitz, num_wann, real_lattice, &
                                    nrpts, error, comm)
    !==========================================================================
    !
    !! If use_ws_distance = true, get list of all R vectors that appear in
    !! irdist_ws and write them to irvec_pw90. Set the index map ir_ind_ws_to_pw90
    !!
    !! If use_ws_distance = false, copy irvec to irvec_pw90.
    !
    !==========================================================================

    use w90_constants, only: dp
    use w90_types, only: ws_region_type, ws_distance_type
    use w90_comms, only: w90_comm_type
    use w90_postw90_types, only: wigner_seitz_type
    use w90_ws_distance, only: ws_expand_rvec

    implicit none

    type(ws_distance_type), intent(inout) :: ws_distance
    type(ws_region_type), intent(in) :: ws_region
    type(wigner_seitz_type), intent(inout) :: wigner_seitz
    type(w90_error_type), allocatable, intent(out) :: error
    type(w90_comm_type), intent(in) :: comm

    real(kind=dp), intent(in) :: real_lattice(3, 3)
    integer, intent(in) :: num_wann
    integer, intent(in) :: nrpts

    integer :: ir, ierr, ir_origin

    call ws_expand_rvec(ws_distance, ws_region%use_ws_distance, num_wann, nrpts, &
                        wigner_seitz%irvec, wigner_seitz%ndegen, wigner_seitz%irvec_pw90, &
                        wigner_seitz%nrpts_pw90, wigner_seitz%ir_ind_ws_to_pw90, ir_origin, &
                        error, comm)
    if (allocated(error)) return

    allocate (wigner_seitz%crvec_pw90(3, wigner_seitz%nrpts_pw90), stat=ierr)
    if (ierr /= 0) then
      call set_error_alloc(error, 'Error in allocating crvec_pw90 in wigner_seitz_opt_setup', comm)
      return
    end if
    do ir = 1, wigner_seitz%nrpts_pw90
      wigner_seitz%crvec_pw90(:, ir) = matmul(transpose(real_lattice), &
                                              real(wigner_seitz%irvec_pw90(:, ir), dp))
    end do

  end subroutine wigner_seitz_opt_setup