TABLE OF CONTENTS


etsf_io_dims_merge

[ Top ] [ etsf_dims ] [ Methods ]

NAME

etsf_io_dims_merge

FUNCTION

It is a checking routine. For all variable, it checks that values are the same in source and destination. For my_<something> variables, if values are different then output value is the sum of previous value and input value. This is useful when the dimensions have split definition. In that case, merging all input file dimensions will check classical dimensions and sum all split dimensions. At the end, if my_<something> is equal to <something> then the merging of the files will end up in suppressing the split for the <something> variable. In the other case (my_<something> < <something>), the resulting merge file will still have a split dimension <something> but with more values.

INPUTS

OUTPUT

SIDE EFFECTS

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_dims_merge(output_dims, dims, lstat, error_data)

  !Arguments ------------------------------------
  type(etsf_dims), intent(inout) :: output_dims
  type(etsf_dims), intent(in) :: dims
  logical, intent(out) :: lstat
  type(etsf_io_low_error), intent(out) :: error_data

  !Local variables-------------------------------
  character(len = *), parameter :: my_name = 'etsf_io_dims_merge'


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

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

  lstat = .false.
  
  if (output_dims%character_string_length /= dims%character_string_length) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%complex /= dims%complex) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%max_number_of_angular_momenta /= dims%max_number_of_angular_momenta) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%max_number_of_basis_grid_points /= dims%max_number_of_basis_grid_points) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%max_number_of_coefficients /= dims%max_number_of_coefficients) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%max_number_of_projectors /= dims%max_number_of_projectors) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%max_number_of_states /= dims%max_number_of_states) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_atoms /= dims%number_of_atoms) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_atom_species /= dims%number_of_atom_species) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_cartesian_directions /= dims%number_of_cartesian_directions) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_coefficients_dielectric_function /= dims%number_of_coefficients_dielectric_function) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_components /= dims%number_of_components) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_frequencies_dielectric_function /= dims%number_of_frequencies_dielectric_function) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_grid_points_vector1 /= dims%number_of_grid_points_vector1) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_grid_points_vector2 /= dims%number_of_grid_points_vector2) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_grid_points_vector3 /= dims%number_of_grid_points_vector3) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_kpoints /= dims%number_of_kpoints) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_localization_regions /= dims%number_of_localization_regions) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_qpoints_dielectric_function /= dims%number_of_qpoints_dielectric_function) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_qpoints_gamma_limit /= dims%number_of_qpoints_gamma_limit) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_reduced_dimensions /= dims%number_of_reduced_dimensions) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_spinor_components /= dims%number_of_spinor_components) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_spins /= dims%number_of_spins) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_symmetry_operations /= dims%number_of_symmetry_operations) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%number_of_vectors /= dims%number_of_vectors) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%real_or_complex_coefficients /= dims%real_or_complex_coefficients) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%real_or_complex_density /= dims%real_or_complex_density) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%real_or_complex_gw_corrections /= dims%real_or_complex_gw_corrections) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%real_or_complex_potential /= dims%real_or_complex_potential) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%real_or_complex_wavefunctions /= dims%real_or_complex_wavefunctions) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%symbol_length /= dims%symbol_length) then
    call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
      & ERROR_TYPE_DIM, my_name, &
      & errmess = "incompatible dimension for merge.")
    return
  end if
  
  if (output_dims%my_max_number_of_coefficients /= output_dims%max_number_of_coefficients) then
    output_dims%my_max_number_of_coefficients = output_dims%my_max_number_of_coefficients + &
      & dims%my_max_number_of_coefficients
  end if
  
  if (output_dims%my_max_number_of_states /= output_dims%max_number_of_states) then
    output_dims%my_max_number_of_states = output_dims%my_max_number_of_states + &
      & dims%my_max_number_of_states
  end if
  
  if (output_dims%my_number_of_components /= output_dims%number_of_components) then
    output_dims%my_number_of_components = output_dims%my_number_of_components + &
      & dims%my_number_of_components
  end if
  
  if (output_dims%my_number_of_grid_points_vect1 /= output_dims%number_of_grid_points_vector1) then
    output_dims%my_number_of_grid_points_vect1 = output_dims%my_number_of_grid_points_vect1 + &
      & dims%my_number_of_grid_points_vect1
  end if
  
  if (output_dims%my_number_of_grid_points_vect2 /= output_dims%number_of_grid_points_vector2) then
    output_dims%my_number_of_grid_points_vect2 = output_dims%my_number_of_grid_points_vect2 + &
      & dims%my_number_of_grid_points_vect2
  end if
  
  if (output_dims%my_number_of_grid_points_vect3 /= output_dims%number_of_grid_points_vector3) then
    output_dims%my_number_of_grid_points_vect3 = output_dims%my_number_of_grid_points_vect3 + &
      & dims%my_number_of_grid_points_vect3
  end if
  
  if (output_dims%my_number_of_kpoints /= output_dims%number_of_kpoints) then
    output_dims%my_number_of_kpoints = output_dims%my_number_of_kpoints + &
      & dims%my_number_of_kpoints
  end if
  
  if (output_dims%my_number_of_spins /= output_dims%number_of_spins) then
    output_dims%my_number_of_spins = output_dims%my_number_of_spins + &
      & dims%my_number_of_spins
  end if
  lstat = .true.


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

end subroutine etsf_io_dims_merge