ETSF_IO library - documentation pages

### TABLE OF CONTENTS

- etsf_io_data_copy

## etsf_io_data_copy

[ Top ] [ etsf_io_data_group ] [ Methods ]

NAME

etsf_io_data_copy

FUNCTION

High-level routine that copy all ETSF variables from one file to another.

INPUTS

- dest_file = the path to the file to be written.
- source_file = A path to the file from which copy the ETSF variables.
- dims <type(etsf_dims)> = these dimensions correspond to the source_file ones and are used to allocate temporary arrays in memory during the copy.
- split <type(etsf_split)> = (optional) if this argument is given, the values in the split definition (e.g. my_kpoints) are used to put the data in the destination file in a bigger array at the right placed.

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_data_copy(dest_file, source_file, dims, lstat, error_data, &
      & split)

      !Arguments ------------------------------------
      character(len=*), intent(in) :: dest_file
      character(len=*), intent(in) :: source_file
      type(etsf_dims), intent(in) :: dims
      logical, intent(out) :: lstat
      type(etsf_io_low_error), intent(out) :: error_data
      type(etsf_split), optional, intent(in) :: split
      !Local variables-------------------------------
      character(len=*),parameter :: my_name = 'etsf_io_data_copy'
      integer :: ncid, i
      type(etsf_split) :: my_split
      integer :: ncid_to

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

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

      lstat = .false.

      ! Open destination file for writing
      call etsf_io_low_open_modify(ncid_to, trim(dest_file), &
        & lstat, error_data = error_data)
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      ! Open source file for reading
      call etsf_io_low_open_read(ncid, trim(source_file), &
        & lstat, error_data = error_data)
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if

      ! We copy all the global attributes (ETSF and non-ETSF).
      call etsf_io_low_copy_all_att(ncid, ncid_to, etsf_io_low_global_att, etsf_io_low_global_att, &
                                  & lstat, error_data = error_data)
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if

      ! We switch to write mode.
      call etsf_io_low_set_write_mode(ncid_to, lstat, error_data = error_data)
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_gwdata_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_gwdata_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_geometry_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_geometry_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_kpoints_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_kpoints_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_basisdata_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_basisdata_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_electrons_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_electrons_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_main_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_main_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      if (present(split)) then
        call etsf_io_dielectric_copy(ncid_to, ncid, dims, &
          & lstat, error_data, split)
      else
        call etsf_io_dielectric_copy(ncid_to, ncid, dims, &
          & lstat, error_data)
      end if
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      !Close files.
      call etsf_io_low_close(ncid_to, lstat, error_data = error_data)
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if
      call etsf_io_low_close(ncid, lstat, error_data = error_data)
      if (.not. lstat) then
        call etsf_io_low_error_update(error_data, my_name)
        return
      end if

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

    end subroutine etsf_io_data_copy