w90_wannier90_readwrite_read_kslice Subroutine

private subroutine w90_wannier90_readwrite_read_kslice(settings, kslicel, pw90_kslice, error, comm)

Uses

  • proc~~w90_wannier90_readwrite_read_kslice~~UsesGraph proc~w90_wannier90_readwrite_read_kslice w90_wannier90_readwrite_read_kslice module~w90_comms w90_comms proc~w90_wannier90_readwrite_read_kslice->module~w90_comms module~w90_error w90_error proc~w90_wannier90_readwrite_read_kslice->module~w90_error module~w90_constants w90_constants module~w90_comms->module~w90_constants module~w90_error_base w90_error_base module~w90_comms->module~w90_error_base module~w90_error->module~w90_comms module~w90_error->module~w90_error_base

Arguments

Type IntentOptional Attributes Name
type(settings_type), intent(inout) :: settings
logical, intent(in) :: kslicel
type(pw90_kslice_mod_type), intent(inout) :: pw90_kslice
type(w90_error_type), intent(out), allocatable :: error
type(w90_comm_type), intent(in) :: comm

Calls

proc~~w90_wannier90_readwrite_read_kslice~~CallsGraph proc~w90_wannier90_readwrite_read_kslice w90_wannier90_readwrite_read_kslice proc~set_error_input set_error_input proc~w90_wannier90_readwrite_read_kslice->proc~set_error_input proc~w90_readwrite_get_keyword w90_readwrite_get_keyword proc~w90_wannier90_readwrite_read_kslice->proc~w90_readwrite_get_keyword proc~w90_readwrite_get_keyword_vector w90_readwrite_get_keyword_vector proc~w90_wannier90_readwrite_read_kslice->proc~w90_readwrite_get_keyword_vector proc~w90_readwrite_get_vector_length w90_readwrite_get_vector_length proc~w90_wannier90_readwrite_read_kslice->proc~w90_readwrite_get_vector_length proc~comms_sync_error comms_sync_error proc~set_error_input->proc~comms_sync_error proc~set_base_error set_base_error proc~set_error_input->proc~set_base_error proc~w90_readwrite_get_keyword->proc~set_error_input proc~set_error_fatal set_error_fatal proc~w90_readwrite_get_keyword->proc~set_error_fatal proc~w90_readwrite_get_keyword_vector->proc~set_error_input proc~w90_readwrite_get_keyword_vector->proc~set_error_fatal proc~w90_readwrite_get_vector_length->proc~set_error_input proc~w90_readwrite_get_vector_length->proc~set_error_fatal proc~set_error_fatal->proc~comms_sync_error proc~set_error_fatal->proc~set_base_error

Called by

proc~~w90_wannier90_readwrite_read_kslice~~CalledByGraph proc~w90_wannier90_readwrite_read_kslice w90_wannier90_readwrite_read_kslice proc~w90_postw90_readwrite_read w90_postw90_readwrite_read proc~w90_postw90_readwrite_read->proc~w90_wannier90_readwrite_read_kslice proc~w90_postw90_readwrite_readall w90_postw90_readwrite_readall proc~w90_postw90_readwrite_readall->proc~w90_wannier90_readwrite_read_kslice program~postw90 postw90 program~postw90->proc~w90_postw90_readwrite_read

Source Code

  subroutine w90_wannier90_readwrite_read_kslice(settings, kslicel, pw90_kslice, error, comm)
    !================================================!

    use w90_error, only: w90_error_type
    use w90_comms, only: w90_comm_type

    implicit none
    logical, intent(in) :: kslicel
    type(pw90_kslice_mod_type), intent(inout) :: pw90_kslice
    type(w90_error_type), allocatable, intent(out) :: error
    type(w90_comm_type), intent(in) :: comm
    type(settings_type), intent(inout) :: settings

    integer :: i
    logical :: found

    call w90_readwrite_get_keyword(settings, 'kslice_task', found, error, comm, &
                                   c_value=pw90_kslice%task)
    if (allocated(error)) return
    if (kslicel .and. index(pw90_kslice%task, 'fermi_lines') == 0 .and. &
        index(pw90_kslice%task, 'curv') == 0 .and. &
        index(pw90_kslice%task, 'morb') == 0 .and. &
        index(pw90_kslice%task, 'shc') == 0) then
      call set_error_input(error, 'Error: value of kslice_task not recognised in w90_wannier90_readwrite_read', comm)
      return
    end if
    if (kslicel .and. index(pw90_kslice%task, 'curv') > 0 .and. &
        index(pw90_kslice%task, 'morb') > 0) then
      call set_error_input(error, "Error: kslice_task cannot include both 'curv' and 'morb'", comm)
      return
    end if
    if (kslicel .and. index(pw90_kslice%task, 'shc') > 0 .and. &
        index(pw90_kslice%task, 'morb') > 0) then
      call set_error_input(error, "Error: kslice_task cannot include both 'shc' and 'morb'", comm)
      return
    end if
    if (kslicel .and. index(pw90_kslice%task, 'shc') > 0 .and. &
        index(pw90_kslice%task, 'curv') > 0) then
      call set_error_input(error, "Error: kslice_task cannot include both 'shc' and 'curv'", comm)
      return
    end if

    call w90_readwrite_get_vector_length(settings, 'kslice_2dkmesh', found, i, error, comm)
    if (allocated(error)) return
    if (found) then
      if (i == 1) then
        call w90_readwrite_get_keyword_vector(settings, 'kslice_2dkmesh', found, 1, error, comm, &
                                              i_value=pw90_kslice%kmesh2d)
        if (allocated(error)) return
        pw90_kslice%kmesh2d(2) = pw90_kslice%kmesh2d(1)
      elseif (i == 2) then
        call w90_readwrite_get_keyword_vector(settings, 'kslice_2dkmesh', found, 2, error, comm, &
                                              i_value=pw90_kslice%kmesh2d)
        if (allocated(error)) return
      else
        call set_error_input(error, 'Error: kslice_2dkmesh must be provided as either' &
                             //' one integer or a vector of two integers', comm)
        return
      end if
      if (any(pw90_kslice%kmesh2d <= 0)) then
        call set_error_input(error, 'Error: kslice_2dkmesh elements must be greater than zero', &
                             comm)
        return
      end if
    end if

    call w90_readwrite_get_keyword_vector(settings, 'kslice_corner', found, 3, error, comm, &
                                          r_value=pw90_kslice%corner)
    if (allocated(error)) return

    call w90_readwrite_get_keyword_vector(settings, 'kslice_b1', found, 3, error, comm, &
                                          r_value=pw90_kslice%b1)
    if (allocated(error)) return

    call w90_readwrite_get_keyword_vector(settings, 'kslice_b2', found, 3, error, comm, &
                                          r_value=pw90_kslice%b2)
    if (allocated(error)) return

    call w90_readwrite_get_keyword(settings, 'kslice_fermi_lines_colour', found, error, comm, &
                                   c_value=pw90_kslice%fermi_lines_colour)
    if (allocated(error)) return
    if (kslicel .and. index(pw90_kslice%fermi_lines_colour, 'none') == 0 .and. &
        index(pw90_kslice%fermi_lines_colour, 'spin') == 0) then
      call set_error_input(error, 'Error: value of kslice_fermi_lines_colour not recognised ' &
                           //'in w90_wannier90_readwrite_read', comm)
      return
    end if
!    slice_plot_format         = 'plotmv'
!    call w90_readwrite_get_keyword(settings, 'slice_plot_format',found,c_value=slice_plot_format)
  end subroutine w90_wannier90_readwrite_read_kslice