Skip to content

Commit 3bb648d

Browse files
committed
add and check is_open property
1 parent 0ab8d66 commit 3bb648d

File tree

5 files changed

+48
-2
lines changed

5 files changed

+48
-2
lines changed

src/interface.f90

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ subroutine nc_initialize(self,filename,ierr, status,action,comp_lvl,verbose,debu
224224
integer :: ier
225225

226226
if (self%is_open) then
227-
write(stderr,*) 'WARNING:nc4fortran: file handle already open to: '// filename
227+
write(stderr,*) 'WARNING:nc4fortran:initialize file handle already open to: '// filename
228228
return
229229
endif
230230

@@ -287,6 +287,11 @@ subroutine nc_finalize(self, ierr)
287287

288288
integer :: ier
289289

290+
if(.not. self%is_open) then
291+
write(stderr,*) 'WARNING:nc4fortran:finalize file handle is not open'
292+
return
293+
endif
294+
290295
ier = nf90_close(self%ncid)
291296
if (present(ierr)) ierr = ier
292297
if (ier /= NF90_NOERR) then

src/read.f90

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
integer :: i, tempdims(NC_MAXDIM), N, ier
1212
character(NF90_MAX_NAME) :: tempnames(NC_MAXDIM)
1313

14+
15+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:read: file handle not open'
16+
1417
N = 0
1518
do i = 1,NC_MAXDIM
1619
ier = nf90_inquire_dimension(self%ncid, dimid=i, name=tempnames(i), len=tempdims(i))
@@ -28,9 +31,17 @@
2831

2932
module procedure nc_check_exist
3033
integer :: varid, ierr
31-
ierr = nf90_inq_varid(self%ncid, dname, varid)
3234

3335
exists = .false.
36+
37+
if(.not.self%is_open) then
38+
write(stderr,*) 'WARNING:nc4fortran:read: file handle not open ' // self%filename
39+
return
40+
endif
41+
42+
ierr = nf90_inq_varid(self%ncid, dname, varid)
43+
44+
3445
select case (ierr)
3546
case (NF90_NOERR)
3647
exists = .true.

src/reader.f90

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
module procedure nc_read_scalar
99
integer :: varid, ier
10+
11+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
12+
1013
ier = nf90_inq_varid(self%ncid, dname, varid)
1114

1215
if(ier == NF90_NOERR) then
@@ -36,6 +39,9 @@
3639

3740
module procedure nc_read_1d
3841
integer :: varid, ier
42+
43+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
44+
3945
ier = nf90_inq_varid(self%ncid, dname, varid)
4046

4147
if(ier == NF90_NOERR) then
@@ -65,6 +71,9 @@
6571

6672
module procedure nc_read_2d
6773
integer :: varid, ier
74+
75+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
76+
6877
ier = nf90_inq_varid(self%ncid, dname, varid)
6978

7079
if(ier == NF90_NOERR) then
@@ -93,6 +102,9 @@
93102

94103
module procedure nc_read_3d
95104
integer :: varid, ier
105+
106+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
107+
96108
ier = nf90_inq_varid(self%ncid, dname, varid)
97109

98110
if(ier == NF90_NOERR) then
@@ -121,6 +133,9 @@
121133

122134
module procedure nc_read_4d
123135
integer :: varid, ier
136+
137+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
138+
124139
ier = nf90_inq_varid(self%ncid, dname, varid)
125140

126141
if(ier == NF90_NOERR) then
@@ -149,6 +164,9 @@
149164

150165
module procedure nc_read_5d
151166
integer :: varid, ier
167+
168+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
169+
152170
ier = nf90_inq_varid(self%ncid, dname, varid)
153171

154172
if(ier == NF90_NOERR) then
@@ -177,6 +195,9 @@
177195

178196
module procedure nc_read_6d
179197
integer :: varid, ier
198+
199+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
200+
180201
ier = nf90_inq_varid(self%ncid, dname, varid)
181202

182203
if(ier == NF90_NOERR) then
@@ -205,6 +226,9 @@
205226

206227
module procedure nc_read_7d
207228
integer :: varid, ier
229+
230+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:reader file handle not open'
231+
208232
ier = nf90_inq_varid(self%ncid, dname, varid)
209233

210234
if(ier == NF90_NOERR) then

src/write.f90

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
integer :: i, L
1111
character(NF90_MAX_NAME) :: name
1212

13+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:write: file handle not open'
14+
1315
do i=1,size(dims)
1416
if (present(dimnames)) then
1517
ierr = nf90_inq_dimid(self%ncid, dimnames(i), dimids(i))
@@ -34,6 +36,8 @@
3436
module procedure write_attribute
3537
integer :: varid, ier
3638

39+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:write: file handle not open'
40+
3741
ier = nf90_inq_varid(self%ncid, dname, varid)
3842

3943
if(ierr == nf90_noerr) ier = nf90_put_att(self%ncid, varid, attrname, value)

src/writer.f90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
module procedure nc_write_scalar
99
integer :: varid, ier
1010

11+
if(.not.self%is_open) error stop 'ERROR:nc4fortran:writer: file handle not open'
12+
1113
select type (value)
1214
type is (real(real64))
1315
ier = nf90_def_var(self%ncid, dname, NF90_DOUBLE, varid=varid)

0 commit comments

Comments
 (0)