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(3)
10 integer,
intent(in),
optional :: nccount(3)
11 integer,
intent(out),
optional :: errcode
12 integer ncerr, nvar, n, nd, ndim, ncount
13 integer,
allocatable,
dimension(:) :: start, count
15 logical return_errcode
17 if(
present(errcode))
then
21 return_errcode=.false.
24 if (
present(nslice))
then
29 nvar = get_nvar(dset,varname)
30 allocate(start(dset%variables(nvar)%ndims),count(dset%variables(nvar)%ndims))
34 if (
present(slicedim))
then
37 nd = dset%variables(nvar)%ndims
40 do n=1,dset%variables(nvar)%ndims
46 count(n) = dset%variables(nvar)%dimlens(n)
47 dimlens(ndim) = dset%variables(nvar)%dimlens(n)
52 if (dset%variables(nvar)%ndims /= 3 .and. dset%variables(nvar)%ndims /= 4)
then
53 if (return_errcode)
then
54 call nccheck(ncerr,halt=.false.)
58 print *,
'rank of data array != variable ndims (or ndims-1)'
63 if (
allocated(values))
deallocate(values)
64 if (
present(ncstart) .and.
present(nccount))
then
65 allocate(values(nccount(1),nccount(2),nccount(3)))
66 start(1)=ncstart(1); count(1)=nccount(1)
67 start(2)=ncstart(2); count(2)=nccount(2)
68 start(3)=ncstart(3); count(3)=nccount(3)
69 if (dset%variables(nvar)%ndims == 4)
then
70 start(4)=1; count(4)=1
72 ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,&
73 start=start, count=count)
75 if (dset%variables(nvar)%ndims == 4)
then
76 allocate(values(dimlens(1),dimlens(2),dimlens(3)))
77 ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values,&
78 start=start, count=count)
80 allocate(values(dset%variables(nvar)%dimlens(1),&
81 dset%variables(nvar)%dimlens(2),&
82 dset%variables(nvar)%dimlens(3)))
83 ncerr = nf90_get_var(dset%ncid, dset%variables(nvar)%varid, values)
87 if (return_errcode)
then
88 call nccheck(ncerr,halt=.false.)