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
- ncid = integer returned by an 'open' NetCDF call. The file can be either in define or write mode. This status can be changed by the call.
- k_dependent = (optional) use this argument to set the attribute flag 'k_dependent' to 'yes' or 'no' on variables that have it. If no variable in the group has the attribute 'k_dependent', this argument has no effect. The default value is .true. (which puts 'yes' in the file).
- flags = (optional) One can choose the variables of the group that will be defined (and disk allocated) using this flag. This is a sum of values taken from #FLAGS_VARIABLES.
- split <type(etsf_split)> = (optional) for each array associated in the type, the dimension used to declared the variables sizes will be 'my_/something/'.
OUTPUT
- lstat = return .true. if all the actions succeed, if not the status of the file is undefined.
- error_data <type(etsf_io_low_error)> = contains the details of the error is @lstat is false.
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