5 type(Dataset),
intent(in) :: dset
6 character(len=*),
intent(in) :: varname
7 integer,
intent(in),
optional :: nslice
8 integer,
intent(in),
optional :: slicedim
9 integer,
intent(in),
optional :: ncstart(1)
10 integer,
intent(in),
optional :: nccount(1)
11 integer,
intent(out),
optional :: errcode
12 integer ncerr, nvar, n, nd, dimlen, ncount
13 integer,
allocatable,
dimension(:) :: start, count
14 logical return_errcode
16 if(
present(errcode))
then
20 return_errcode=.false.
23 if (
present(nslice))
then
28 nvar = get_nvar(dset,varname)
29 allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims))
32 if (
present(slicedim))
then
35 nd = dset%variables(nvar)%ndims
37 do n=1,dset%variables(nvar)%ndims
43 count(n) = dset%variables(nvar)%dimlens(n)
44 dimlen = dset%variables(nvar)%dimlens(n)
47 if (dset%variables(nvar)%ndims /= 1 .and. dset%variables(nvar)%ndims /= 2)
then
48 if (return_errcode)
then
49 call nccheck(ncerr,halt=.false.)
53 print *,
'rank of data array != variable ndims (or ndims-1)'
58 if (
allocated(values))
deallocate(values)
59 if (
present(ncstart) .and.
present(nccount))
then
60 allocate(values(nccount(1)))
61 start(1)=ncstart(1); count(1)=nccount(1)
62 if (dset%variables(nvar)%ndims == 2)
then
63 start(2)=1; count(2)=1
65 ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,&
66 start=start, count=count)
68 if (dset%variables(nvar)%ndims == 2)
then
69 allocate(values(dimlen))
70 ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,&
71 start=start, count=count)
73 allocate(values(dset%variables(nvar)%dimlens(1)))
74 ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values)
78 if (return_errcode)
then
79 call nccheck(ncerr,halt=.false.)