Add new subroutine read_restart_params_h5().
- this subroutine reads the number of processors and the maximum level from the first restart file; these two parameters are required before restoring the data for a job restart if we want to restart it with a different number of processors or with a different maximum level;
This commit is contained in:
parent
3dcd8ad2b9
commit
740236958c
209
src/io.F90
209
src/io.F90
@ -36,6 +36,11 @@ module io
|
|||||||
!
|
!
|
||||||
integer(kind=4), save :: nfile = -1, nrest = 0
|
integer(kind=4), save :: nfile = -1, nrest = 0
|
||||||
|
|
||||||
|
! local variables to store the number of processors and maximum level read from
|
||||||
|
! the restart file
|
||||||
|
!
|
||||||
|
integer(kind=4), save :: rmaxlev = 1, rncpus = 1
|
||||||
|
|
||||||
! the coefficient related to the difference between the maximum level stored in
|
! the coefficient related to the difference between the maximum level stored in
|
||||||
! the restart file and set through the configuration file
|
! the restart file and set through the configuration file
|
||||||
!
|
!
|
||||||
@ -354,7 +359,7 @@ module io
|
|||||||
!
|
!
|
||||||
character(len=64) :: fl
|
character(len=64) :: fl
|
||||||
integer(hid_t) :: fid
|
integer(hid_t) :: fid
|
||||||
integer :: err, lcpus, lcpu
|
integer :: err, lcpu
|
||||||
logical :: info
|
logical :: info
|
||||||
!
|
!
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
@ -367,24 +372,18 @@ module io
|
|||||||
!
|
!
|
||||||
if (err .ge. 0) then
|
if (err .ge. 0) then
|
||||||
|
|
||||||
! find the number of processors counting all restart files
|
! read restart parameters, such as, the number of processors and maximum level
|
||||||
!
|
!
|
||||||
lcpus = 0
|
call read_restart_params_h5()
|
||||||
info = .true.
|
|
||||||
do while(info)
|
|
||||||
lcpus = lcpus + 1
|
|
||||||
write (fl,'("r",i6.6,"_",i5.5,a3)') nrest, lcpus, '.h5'
|
|
||||||
inquire(file = fl, exist = info)
|
|
||||||
end do
|
|
||||||
|
|
||||||
! if the number of processors is larger then the number of files, use the last
|
! if the number of processors is larger then the number of files, use the last
|
||||||
! file for the remaining processors
|
! file for the remaining processors
|
||||||
!
|
!
|
||||||
lcpu = ncpu
|
lcpu = ncpu
|
||||||
if (lcpus .lt. ncpus) then
|
if (rncpus .lt. ncpus) then
|
||||||
lcpu = min(lcpus - 1, ncpu)
|
lcpu = min(rncpus - 1, ncpu)
|
||||||
end if
|
end if
|
||||||
if (lcpus .gt. ncpus) then
|
if (rncpus .gt. ncpus) then
|
||||||
call print_error("io::read_data_h5", "This is not supported yet!")
|
call print_error("io::read_data_h5", "This is not supported yet!")
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -509,6 +508,192 @@ module io
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
|
! read_restart_params_h5: subroutine reads parameters required to decide how to
|
||||||
|
! restart the job
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
subroutine read_restart_params_h5()
|
||||||
|
|
||||||
|
! references to other modules
|
||||||
|
!
|
||||||
|
use error , only : print_error
|
||||||
|
use hdf5 , only : hid_t
|
||||||
|
use hdf5 , only : H5F_ACC_RDONLY_F
|
||||||
|
use hdf5 , only : h5open_f, h5close_f, h5fis_hdf5_f, h5fopen_f &
|
||||||
|
, h5fclose_f, h5gopen_f, h5gclose_f &
|
||||||
|
, h5aopen_by_name_f, h5aclose_f
|
||||||
|
|
||||||
|
! declare variables
|
||||||
|
!
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! local variables
|
||||||
|
!
|
||||||
|
character(len=64) :: fl
|
||||||
|
integer(hid_t) :: fid, gid, aid
|
||||||
|
integer :: err
|
||||||
|
logical :: info
|
||||||
|
!
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
! prepare the filename
|
||||||
|
!
|
||||||
|
write (fl,'("r",i6.6,"_",i5.5,a3)') nrest, 0, '.h5'
|
||||||
|
|
||||||
|
! check if the HDF5 file exists
|
||||||
|
!
|
||||||
|
inquire(file = fl, exist = info)
|
||||||
|
|
||||||
|
if (info) then
|
||||||
|
|
||||||
|
! check if this is an HDF5 file
|
||||||
|
!
|
||||||
|
call h5fis_hdf5_f(fl, info, err)
|
||||||
|
|
||||||
|
! check if it was possible to verify the file format
|
||||||
|
!
|
||||||
|
if (err .ge. 0) then
|
||||||
|
|
||||||
|
! check if the file is in HDF5 format
|
||||||
|
!
|
||||||
|
if (info) then
|
||||||
|
|
||||||
|
! opent the current HDF5 file
|
||||||
|
!
|
||||||
|
call h5fopen_f(fl, H5F_ACC_RDONLY_F, fid, err)
|
||||||
|
|
||||||
|
! check if the file has been opened successfuly
|
||||||
|
!
|
||||||
|
if (err .ge. 0) then
|
||||||
|
|
||||||
|
! read attribute 'ncpus'
|
||||||
|
!
|
||||||
|
call h5aopen_by_name_f(fid, "/attributes", "ncpus", aid, err)
|
||||||
|
|
||||||
|
! check if the attribute has been opened successfully
|
||||||
|
!
|
||||||
|
if (err .ge. 0) then
|
||||||
|
|
||||||
|
! read the attribute ncpus
|
||||||
|
!
|
||||||
|
call read_attribute_integer_h5(aid, "ncpus", rncpus)
|
||||||
|
|
||||||
|
! close the attribute
|
||||||
|
!
|
||||||
|
call h5aclose_f(aid, err)
|
||||||
|
|
||||||
|
! check if the attribute has been closed successfully
|
||||||
|
!
|
||||||
|
if (err .gt. 0) then
|
||||||
|
|
||||||
|
! print error about the problem with closing the current file
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot close the attribute ncpus!")
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! print error about the problem with opening the attribute
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot open the attribute ncpus!")
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
! read attribute 'maxlev'
|
||||||
|
!
|
||||||
|
call h5aopen_by_name_f(fid, "/attributes", "maxlev", aid, err)
|
||||||
|
|
||||||
|
! check if the attribute has been opened successfully
|
||||||
|
!
|
||||||
|
if (err .ge. 0) then
|
||||||
|
|
||||||
|
! read the attribute maxlev
|
||||||
|
!
|
||||||
|
call read_attribute_integer_h5(aid, "maxlev", rmaxlev)
|
||||||
|
|
||||||
|
! close the attribute
|
||||||
|
!
|
||||||
|
call h5aclose_f(aid, err)
|
||||||
|
|
||||||
|
! check if the attribute has been closed successfully
|
||||||
|
!
|
||||||
|
if (err .gt. 0) then
|
||||||
|
|
||||||
|
! print error about the problem with closing the current file
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot close the attribute maxlev!")
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! print error about the problem with opening the attribute
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot open the attribute maxlev!")
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
! terminate access to the current file
|
||||||
|
!
|
||||||
|
call h5fclose_f(fid, err)
|
||||||
|
|
||||||
|
! check if the file has been closed successfully
|
||||||
|
!
|
||||||
|
if (err .gt. 0) then
|
||||||
|
|
||||||
|
! print error about the problem with closing the current file
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot close file: " // trim(fl))
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! print error about the problem with opening the HDF5 file
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot open file: " // trim(fl))
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! print error about the wrong file format
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5", "File " // trim(fl) &
|
||||||
|
// " is not an HDF5 file!")
|
||||||
|
end if
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! print error about the problem with checking the file format
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5" &
|
||||||
|
, "Cannot check the file format!")
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
! print error if the file does not exist
|
||||||
|
!
|
||||||
|
call print_error("io::read_restart_params_h5", "File " // trim(fl) &
|
||||||
|
// " does not exist!")
|
||||||
|
end if
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
end subroutine read_restart_params_h5
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
! write_attributes_h5: subroutine writes attributes in the HDF5 format
|
! write_attributes_h5: subroutine writes attributes in the HDF5 format
|
||||||
! connected to the provided identificator
|
! connected to the provided identificator
|
||||||
!
|
!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user