TABLE OF CONTENTS


etsf_io_file_check_dielectric_function_data

[ Top ] [ etsf_io_file ] [ Methods ]

NAME

etsf_io_file_check_dielectric_function_data

FUNCTION

This is a high level routine to inquire a file about a specifications. It returns .true. in lstat if the file is a valid 'dielectric_function_data' file. It tests the existence of variables and their definition (type, shape. and dimension names).

INPUTS

OUTPUT

SOURCE

subroutine etsf_io_file_check_dielectric_function_data(ncid, lstat, error_data)
  integer, intent(in)                  :: ncid
  logical, intent(out)                 :: lstat
  type(etsf_io_low_error), intent(out) :: error_data

  character(len = *), parameter        :: me = "etsf_io_file_check_dielectric_function_data"
  type(etsf_io_low_var_infos)          :: var_infos
  logical                              :: valid
  character(len = etsf_charlen)        :: string_value
  type(etsf_dims)                      :: dims
  type(etsf_split)                     :: split

  ! Read the dimensions
  call etsf_io_dims_get(ncid, dims, lstat, error_data)
  if (.not. lstat) then
     call etsf_io_low_error_update(error_data, me)
     return
  end if

  ! Allocate the split and read it (this will verify variable exist.
  call etsf_io_split_allocate(split, dims)
  call etsf_io_split_get(ncid, split, lstat, error_data)
  if (.not. lstat) then
     call etsf_io_low_error_update(error_data, me)
     return
  end if

  ! Variable basis_set
  write(var_infos%name, "(A)") "basis_set"
  var_infos%nctype  = etsf_io_low_character
  var_infos%ncshape = 1
  allocate(var_infos%ncdimnames(1))
  write(var_infos%ncdimnames(1), "(A)") "character_string_length"
  call test_var(ncid, var_infos, lstat, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. lstat) then
    call etsf_io_split_free(split)
    call etsf_io_low_error_update(error_data, me)
    return
  end if
  
  ! Variable frequencies_dielectric_function
  write(var_infos%name, "(A)") "frequencies_dielectric_function"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 2
  allocate(var_infos%ncdimnames(2))
  write(var_infos%ncdimnames(2), "(A)") "number_of_frequencies_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "complex"
  call test_var(ncid, var_infos, lstat, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. lstat) then
    call etsf_io_split_free(split)
    call etsf_io_low_error_update(error_data, me)
    return
  end if
  
  ! Variable qpoints_dielectric_function
  write(var_infos%name, "(A)") "qpoints_dielectric_function"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 2
  allocate(var_infos%ncdimnames(2))
  write(var_infos%ncdimnames(2), "(A)") "number_of_qpoints_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "number_of_reduced_dimensions"
  call test_var(ncid, var_infos, lstat, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. lstat) then
    call etsf_io_split_free(split)
    call etsf_io_low_error_update(error_data, me)
    return
  end if
  
  ! Variable qpoints_gamma_limit
  write(var_infos%name, "(A)") "qpoints_gamma_limit"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 2
  allocate(var_infos%ncdimnames(2))
  write(var_infos%ncdimnames(2), "(A)") "number_of_qpoints_gamma_limit"
  write(var_infos%ncdimnames(1), "(A)") "number_of_reduced_dimensions"
  call test_var(ncid, var_infos, lstat, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. lstat) then
    call etsf_io_split_free(split)
    call etsf_io_low_error_update(error_data, me)
    return
  end if
  
  ! Variable reduced_coordinates_of_plane_waves_dielectric_function
  write(var_infos%name, "(A)") "reduced_coordinates_of_plane_waves_dielectric_function"
  var_infos%nctype  = etsf_io_low_integer
  var_infos%ncshape = 3
  allocate(var_infos%ncdimnames(3))
  write(var_infos%ncdimnames(3), "(A)") "number_of_qpoints_dielectric_function"
  write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "number_of_reduced_dimensions"
  call test_var(ncid, var_infos, lstat, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. lstat) then
    call etsf_io_split_free(split)
    call etsf_io_low_error_update(error_data, me)
    return
  end if
  
  ! Check from a list.
  lstat = .false.
  ! Variable dielectric_function
  write(var_infos%name, "(A)") "dielectric_function"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 7
  allocate(var_infos%ncdimnames(7))
  write(var_infos%ncdimnames(7), "(A)") "number_of_frequencies_dielectric_function"
  write(var_infos%ncdimnames(6), "(A)") "number_of_qpoints_dielectric_function"
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(5), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(5), "(A)") "number_of_spins"
  end if
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
  end if
  write(var_infos%ncdimnames(3), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "complex"
  call test_var(ncid, var_infos, valid, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. valid .and. error_data%access_mode_id == ERROR_MODE_SPEC) return
  lstat = lstat .or. valid
  ! Variable inverse_dielectric_function
  write(var_infos%name, "(A)") "inverse_dielectric_function"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 7
  allocate(var_infos%ncdimnames(7))
  write(var_infos%ncdimnames(7), "(A)") "number_of_frequencies_dielectric_function"
  write(var_infos%ncdimnames(6), "(A)") "number_of_qpoints_dielectric_function"
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(5), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(5), "(A)") "number_of_spins"
  end if
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
  end if
  write(var_infos%ncdimnames(3), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "complex"
  call test_var(ncid, var_infos, valid, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. valid .and. error_data%access_mode_id == ERROR_MODE_SPEC) return
  lstat = lstat .or. valid
  ! Variable polarizability
  write(var_infos%name, "(A)") "polarizability"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 7
  allocate(var_infos%ncdimnames(7))
  write(var_infos%ncdimnames(7), "(A)") "number_of_frequencies_dielectric_function"
  write(var_infos%ncdimnames(6), "(A)") "number_of_qpoints_dielectric_function"
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(5), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(5), "(A)") "number_of_spins"
  end if
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
  end if
  write(var_infos%ncdimnames(3), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "complex"
  call test_var(ncid, var_infos, valid, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. valid .and. error_data%access_mode_id == ERROR_MODE_SPEC) return
  lstat = lstat .or. valid
  ! Variable inverse_polarizability
  write(var_infos%name, "(A)") "inverse_polarizability"
  var_infos%nctype  = etsf_io_low_double
  var_infos%ncshape = 7
  allocate(var_infos%ncdimnames(7))
  write(var_infos%ncdimnames(7), "(A)") "number_of_frequencies_dielectric_function"
  write(var_infos%ncdimnames(6), "(A)") "number_of_qpoints_dielectric_function"
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(5), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(5), "(A)") "number_of_spins"
  end if
  if (associated(split%my_spins)) then
    write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
  else
    write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
  end if
  write(var_infos%ncdimnames(3), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
  write(var_infos%ncdimnames(1), "(A)") "complex"
  call test_var(ncid, var_infos, valid, error_data)
  deallocate(var_infos%ncdimnames)
  if (.not. valid .and. error_data%access_mode_id == ERROR_MODE_SPEC) return
  lstat = lstat .or. valid
  if (.not. lstat) then
    call etsf_io_split_free(split)
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
                             & ERROR_TYPE_ARG, me, &
   & tgtname = "dielectric_function, inverse_dielectric_function, polarizability, inverse_...", &
                             & errmess = "missing one among the list.")
    return
  end if
  
  ! Check a list of conditions if a variable is set.
  ! Test the existence of a variable.
  lstat = .false.
  call etsf_io_low_read_var_infos(ncid, "dielectric_function", var_infos, &
                                & lstat, error_data = error_data)
  if (lstat) then
    ! Apply the conditions since variable exists.
    ! Variable dielectric_function_head
    write(var_infos%name, "(A)") "dielectric_function_head"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 5
    allocate(var_infos%ncdimnames(5))
    write(var_infos%ncdimnames(5), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(4), "(A)") "number_of_qpoints_dielectric_function"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(2), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(2), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
    ! Variable dielectric_function_upper_wing
    write(var_infos%name, "(A)") "dielectric_function_upper_wing"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 6
    allocate(var_infos%ncdimnames(6))
    write(var_infos%ncdimnames(6), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(5), "(A)") "number_of_qpoints_gamma_limit"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
  end if
  ! Check a list of conditions if a variable is set.
  ! Test the existence of a variable.
  lstat = .false.
  call etsf_io_low_read_var_infos(ncid, "inverse_dielectric_function", var_infos, &
                                & lstat, error_data = error_data)
  if (lstat) then
    ! Apply the conditions since variable exists.
    ! Variable inverse_dielectric_function_head
    write(var_infos%name, "(A)") "inverse_dielectric_function_head"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 5
    allocate(var_infos%ncdimnames(5))
    write(var_infos%ncdimnames(5), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(4), "(A)") "number_of_qpoints_dielectric_function"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(2), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(2), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
    ! Variable inverse_dielectric_function_upper_wing
    write(var_infos%name, "(A)") "inverse_dielectric_function_upper_wing"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 6
    allocate(var_infos%ncdimnames(6))
    write(var_infos%ncdimnames(6), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(5), "(A)") "number_of_qpoints_gamma_limit"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
  end if
  ! Check a list of conditions if a variable is set.
  ! Test the existence of a variable.
  lstat = .false.
  call etsf_io_low_read_var_infos(ncid, "polarizability", var_infos, &
                                & lstat, error_data = error_data)
  if (lstat) then
    ! Apply the conditions since variable exists.
    ! Variable polarizability_head
    write(var_infos%name, "(A)") "polarizability_head"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 5
    allocate(var_infos%ncdimnames(5))
    write(var_infos%ncdimnames(5), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(4), "(A)") "number_of_qpoints_dielectric_function"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(2), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(2), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
    ! Variable polarizability_upper_wing
    write(var_infos%name, "(A)") "polarizability_upper_wing"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 6
    allocate(var_infos%ncdimnames(6))
    write(var_infos%ncdimnames(6), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(5), "(A)") "number_of_qpoints_gamma_limit"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
  end if
  ! Check a list of conditions if a variable is set.
  ! Test the existence of a variable.
  lstat = .false.
  call etsf_io_low_read_var_infos(ncid, "inverse_polarizability", var_infos, &
                                & lstat, error_data = error_data)
  if (lstat) then
    ! Apply the conditions since variable exists.
    ! Variable inverse_polarizability_head
    write(var_infos%name, "(A)") "inverse_polarizability_head"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 5
    allocate(var_infos%ncdimnames(5))
    write(var_infos%ncdimnames(5), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(4), "(A)") "number_of_qpoints_dielectric_function"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(2), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(2), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
    ! Variable inverse_polarizability_upper_wing
    write(var_infos%name, "(A)") "inverse_polarizability_upper_wing"
    var_infos%nctype  = etsf_io_low_double
    var_infos%ncshape = 6
    allocate(var_infos%ncdimnames(6))
    write(var_infos%ncdimnames(6), "(A)") "number_of_frequencies_dielectric_function"
    write(var_infos%ncdimnames(5), "(A)") "number_of_qpoints_gamma_limit"
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(4), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(4), "(A)") "number_of_spins"
    end if
    if (associated(split%my_spins)) then
      write(var_infos%ncdimnames(3), "(A)") "my_number_of_spins"
    else
      write(var_infos%ncdimnames(3), "(A)") "number_of_spins"
    end if
    write(var_infos%ncdimnames(2), "(A)") "number_of_coefficients_dielectric_function"
    write(var_infos%ncdimnames(1), "(A)") "complex"
    call test_var(ncid, var_infos, lstat, error_data)
    deallocate(var_infos%ncdimnames)
    if (.not. lstat) then
      call etsf_io_split_free(split)
      call etsf_io_low_error_update(error_data, me)
      return
    end if
    
  end if


  ! Deallocate the split data.
  call etsf_io_split_free(split)

  lstat = .true.
end subroutine etsf_io_file_check_dielectric_function_data