|
58 | 58 | integer :: ier, drank, i |
59 | 59 | integer(HID_T) :: dcpl |
60 | 60 | integer(HSIZE_T), dimension(:), allocatable :: ddims, maxdims |
| 61 | +character(:), allocatable :: emsg |
61 | 62 |
|
62 | 63 |
|
63 | 64 | call H5Tcopy_f(dtype, dtype_id, ier) |
|
80 | 81 | call estop(ier, "create:H5Dget_space", self%filename, dname) |
81 | 82 |
|
82 | 83 |
|
83 | | - if (present(istart)) then |
84 | | - if(any(istart < 1)) error stop 'ERROR:h5fortran:create: istart must be >= 1' |
85 | | - if(any(iend <= istart)) error stop 'ERROR:h5fortran:create: iend must be > istart' |
86 | | - |
| 84 | + if (present(istart) .and. present(iend)) then |
87 | 85 | call H5Sget_simple_extent_ndims_f(filespace_id, drank, ier) |
88 | 86 | call estop(ier, "create:H5Sget_simple_extent_ndims", self%filename, dname) |
89 | 87 |
|
| 88 | + if (size(istart) /= drank) then |
| 89 | + write(stderr,*) "ERROR:h5fortran:create: " // dname // " istart ", istart, " length ", size(istart), " /= rank ", drank |
| 90 | + error stop |
| 91 | + endif |
| 92 | + if (size(iend) /= drank) then |
| 93 | + write(stderr,*) "ERROR:h5fortran:create: " // dname // " iend ", iend, " length ", size(iend), " /= rank ", drank |
| 94 | + error stop |
| 95 | + endif |
| 96 | + if(any(istart < 1)) error stop 'ERROR:h5fortran:create: ' // dname // ' istart must be >= 1' |
| 97 | + do i = 1, drank |
| 98 | + if(iend(i) < istart(i)) emsg = 'ERROR:h5fortran:create: ' // dname // ' iend must be > istart' |
| 99 | + enddo |
| 100 | + if (allocated(emsg)) then |
| 101 | + write(stderr,*) emsg // " dataset: " // dname // " file: " // self%filename // " istart: ", & |
| 102 | + istart, " iend: ", iend |
| 103 | + error stop |
| 104 | + endif |
| 105 | + |
90 | 106 | allocate(ddims(drank), maxdims(drank)) |
91 | 107 |
|
92 | 108 | call H5Sget_simple_extent_dims_f(filespace_id, ddims, maxdims, ier) |
93 | 109 | if (ier /= drank) error stop 'ERROR:h5fortran:create: H5Sget_simple_extent_dims: ' // dname // ' in ' // self%filename |
94 | 110 |
|
95 | | - if(any(iend > ddims)) error stop 'ERROR:h5fortran:create: iend > dset_dims' // dname // ' in ' // self%filename |
| 111 | + do i = 1, drank |
| 112 | + if (iend(i) - istart(i) > ddims(i)) emsg = 'ERROR:h5fortran:create: iend - istart > dset_dims' |
| 113 | + enddo |
| 114 | + if (allocated(emsg)) then |
| 115 | + write(stderr,*) emsg // " dataset: " // dname // " file: " // self%filename // " istart: ", & |
| 116 | + istart, " iend: ", iend, " ddims: ", ddims, " maxdims: ", maxdims |
| 117 | + error stop |
| 118 | + endif |
| 119 | + |
96 | 120 | else |
97 | 121 | if (size(mem_dims) == 0) then |
98 | 122 | !! scalar |
|
0 commit comments