TABLE OF CONTENTS


etsf_io_dielectric_def

[ Top ] [ etsf_dielectric ] [ Methods ]

NAME

etsf_io_dielectric_def

FUNCTION

The given ETSF file must be opened and in define state (see etsf_io_low_set_define_mode() to change it). Then, all variable of the group are defined. All required dimensions must have already defined (see etsf_io_dims_def(). If some dimensions are missing, then the variable is not defined and no error are generated.

One can specify which variable may be splitted using the optional argument @split. For each associated array in this structure, variable with appropriated dimensions will use my_<something> instead of <something>.

INPUTS

OUTPUT

NOTES

This file has been automatically generated by the autogen_subroutines.py script. Any change you would bring to it will systematically be overwritten.

SOURCE

subroutine etsf_io_dielectric_def(ncid, lstat, error_data, k_dependent, flags, &
  & split)

  !Arguments ------------------------------------
  integer, intent(in) :: ncid
  logical, intent(out) :: lstat
  type(etsf_io_low_error), intent(out) :: error_data
  logical, optional, intent(in) :: k_dependent
  integer, optional, intent(in) :: flags
  type(etsf_split), optional, intent(in) :: split

  !Local variables-------------------------------
  character(len = *), parameter :: my_name = 'etsf_io_dielectric_def'
  logical :: my_k_dependent
  integer :: my_flags
  type(etsf_split) :: my_split
  integer :: ivar
  type(split_dim_names) :: split_dims


  ! *************************************************************************

!DEBUG
!write (*,*) 'etsf_io_dielectric_def : enter'
!ENDDEBUG

  ! Get values for optional arguments, set default.
  if (present(k_dependent)) then
    my_k_dependent = k_dependent
  else
    my_k_dependent = .true.
  end if
  if (present(flags)) then
    my_flags = flags
  else
    my_flags = etsf_dielectric_all
  end if
  ! Consistency checks.
  if (my_flags < etsf_dielectric_none .or. my_flags > etsf_dielectric_all) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_DEF, ERROR_TYPE_ARG, my_name, &
                             & tgtname = "flags", errmess = "value out of bounds")
    lstat = .false.
    return
  end if
  
  ! Set the name for dimensions that could be splitted.
  if (present(split)) then
    if (associated(split%my_spins)) then
      write(split_dims%number_of_spins, "(A)") &
        & "my_number_of_spins"
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_frequencies) /= 0) then
    call etsf_io_low_def_var(ncid, "frequencies_dielectric_function", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_qpt) /= 0) then
    call etsf_io_low_def_var(ncid, "qpoints_dielectric_function", &
      & etsf_io_low_double, &
      & (/ pad("number_of_reduced_dimensions"), &
      &    pad("number_of_qpoints_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_qpt_g_lim) /= 0) then
    call etsf_io_low_def_var(ncid, "qpoints_gamma_limit", &
      & etsf_io_low_double, &
      & (/ pad("number_of_reduced_dimensions"), &
      &    pad("number_of_qpoints_gamma_limit") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function) /= 0) then
    call etsf_io_low_def_var(ncid, "dielectric_function", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_head) /= 0) then
    call etsf_io_low_def_var(ncid, "dielectric_function_head", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_lower) /= 0) then
    call etsf_io_low_def_var(ncid, "dielectric_function_lower_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_upper) /= 0) then
    call etsf_io_low_def_var(ncid, "dielectric_function_upper_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_inv) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_dielectric_function", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_inv_head) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_dielectric_function_head", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_inv_lower) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_dielectric_function_lower_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_function_inv_upper) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_dielectric_function_upper_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_polarizability) /= 0) then
    call etsf_io_low_def_var(ncid, "polarizability", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_pol_head) /= 0) then
    call etsf_io_low_def_var(ncid, "polarizability_head", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_pol_lower) /= 0) then
    call etsf_io_low_def_var(ncid, "polarizability_lower_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_pol_upper) /= 0) then
    call etsf_io_low_def_var(ncid, "polarizability_upper_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_polarizability_inv) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_polarizability", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_pol_inv_head) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_polarizability_head", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_dielectric_function"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_pol_inv_lower) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_polarizability_lower_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  
  if (iand(my_flags, etsf_dielectric_pol_inv_upper) /= 0) then
    call etsf_io_low_def_var(ncid, "inverse_polarizability_upper_wing", &
      & etsf_io_low_double, &
      & (/ pad("complex"), &
      &    pad("number_of_coefficients_dielectric_function"), &
      &    split_dims%number_of_spins, &
      &    split_dims%number_of_spins, &
      &    pad("number_of_qpoints_gamma_limit"), &
      &    pad("number_of_frequencies_dielectric_function") /), &
      & lstat, ncvarid = ivar, error_data = error_data)
    ! We raise don't raise an error if a dimension is missing.
    if (.not. lstat .and. (error_data%access_mode_id /= ERROR_MODE_INQ .or. &
      & error_data%target_type_id /= ERROR_TYPE_DID)) then
      call etsf_io_low_error_update(error_data, my_name)
      return
    end if
  end if
  ! If we reach the end, then it should be OK.
  lstat = .true.


!DEBUG
!write (*,*) 'etsf_io_dielectric_def : exit'
!ENDDEBUG

end subroutine etsf_io_dielectric_def