ETSF_IO library - documentation pages

### TABLE OF CONTENTS

- etsf_io_split_merge

## etsf_io_split_merge

[ Top ] [ etsf_split ] [ Methods ]

NAME

etsf_io_split_merge

FUNCTION

This is a complex routine that create a larger split definition (@output_split) from an input split definition (@split). For each associated array in @split, it copies all values of this array into the corresponding array in @output_split. The position in the corresponding array is the first unused index (i.e. with a negative value).

The input @split definition is then modified to reflect the new position of values in @output_split.

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.

SIDE EFFECTS

- output_split <type(etsf_split)> =
- split <type(etsf_split)> = the value from this structure are copied into the right arrays in @output_split and the values are changed then to be the indexes used in @output_split.

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_split_merge(output_split, split, lstat, error_data)

      !Arguments ------------------------------------
      type(etsf_split), intent(inout) :: output_split
      type(etsf_split), intent(inout) :: split
      logical, intent(out) :: lstat
      type(etsf_io_low_error), intent(out) :: error_data

      !Local variables-------------------------------
      character(len = *), parameter :: my_name = 'etsf_io_split_merge'
      integer :: ivar
      integer :: len

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

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

      lstat = .false.
      if (associated(output_split%my_kpoints)) then
        if (.not. associated(split%my_kpoints)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_kpoints), 1
          if (output_split%my_kpoints(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_kpoints) - 1) > size(output_split%my_kpoints)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_kpoints(ivar:ivar + size(split%my_kpoints) - 1) = &
          & split%my_kpoints
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_kpoints = &
          & (/ (len, len = ivar, ivar + size(split%my_kpoints) - 1, 1) /)
      end if
      if (associated(output_split%my_grid_points_vector3)) then
        if (.not. associated(split%my_grid_points_vector3)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_grid_points_vector3), 1
          if (output_split%my_grid_points_vector3(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_grid_points_vector3) - 1) > size(output_split%my_grid_points_vector3)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_grid_points_vector3(ivar:ivar + size(split%my_grid_points_vector3) - 1) = &
          & split%my_grid_points_vector3
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_grid_points_vector3 = &
          & (/ (len, len = ivar, ivar + size(split%my_grid_points_vector3) - 1, 1) /)
      end if
      if (associated(output_split%my_spins)) then
        if (.not. associated(split%my_spins)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_spins), 1
          if (output_split%my_spins(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_spins) - 1) > size(output_split%my_spins)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_spins(ivar:ivar + size(split%my_spins) - 1) = &
          & split%my_spins
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_spins = &
          & (/ (len, len = ivar, ivar + size(split%my_spins) - 1, 1) /)
      end if
      if (associated(output_split%my_grid_points_vector1)) then
        if (.not. associated(split%my_grid_points_vector1)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_grid_points_vector1), 1
          if (output_split%my_grid_points_vector1(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_grid_points_vector1) - 1) > size(output_split%my_grid_points_vector1)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_grid_points_vector1(ivar:ivar + size(split%my_grid_points_vector1) - 1) = &
          & split%my_grid_points_vector1
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_grid_points_vector1 = &
          & (/ (len, len = ivar, ivar + size(split%my_grid_points_vector1) - 1, 1) /)
      end if
      if (associated(output_split%my_grid_points_vector2)) then
        if (.not. associated(split%my_grid_points_vector2)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_grid_points_vector2), 1
          if (output_split%my_grid_points_vector2(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_grid_points_vector2) - 1) > size(output_split%my_grid_points_vector2)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_grid_points_vector2(ivar:ivar + size(split%my_grid_points_vector2) - 1) = &
          & split%my_grid_points_vector2
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_grid_points_vector2 = &
          & (/ (len, len = ivar, ivar + size(split%my_grid_points_vector2) - 1, 1) /)
      end if
      if (associated(output_split%my_coefficients)) then
        if (.not. associated(split%my_coefficients)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_coefficients), 1
          if (output_split%my_coefficients(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_coefficients) - 1) > size(output_split%my_coefficients)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_coefficients(ivar:ivar + size(split%my_coefficients) - 1) = &
          & split%my_coefficients
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_coefficients = &
          & (/ (len, len = ivar, ivar + size(split%my_coefficients) - 1, 1) /)
      end if
      if (associated(output_split%my_components)) then
        if (.not. associated(split%my_components)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_components), 1
          if (output_split%my_components(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_components) - 1) > size(output_split%my_components)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_components(ivar:ivar + size(split%my_components) - 1) = &
          & split%my_components
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_components = &
          & (/ (len, len = ivar, ivar + size(split%my_components) - 1, 1) /)
      end if
      if (associated(output_split%my_states)) then
        if (.not. associated(split%my_states)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (not allocated).")
          return
        end if
        do ivar = 1, size(output_split%my_states), 1
          if (output_split%my_states(ivar) < 0) then
            exit
          end if
        end do
        if ((ivar + size(split%my_states) - 1) > size(output_split%my_states)) then
          call etsf_io_low_error_set(error_data, ERROR_MODE_SPEC, &
            & ERROR_TYPE_DIM, my_name, &
            & errmess = "incompatible split for merge (wrong length).")
          return
        end if
        output_split%my_states(ivar:ivar + size(split%my_states) - 1) = &
          & split%my_states
        ! We modify the split value to be used in accordance with
        ! the new output_split
        split%my_states = &
          & (/ (len, len = ivar, ivar + size(split%my_states) - 1, 1) /)
      end if
      lstat = .true.

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

    end subroutine etsf_io_split_merge