25 character(len=nf90_max_name) :: name
26 integer,
allocatable,
dimension(:) :: dimids
27 integer,
allocatable,
dimension(:) :: dimindxs
28 character(len=nf90_max_name),
allocatable,
dimension(:) :: dimnames
29 integer,
allocatable,
dimension(:) :: dimlens
30 integer,
allocatable,
dimension(:) :: chunksizes
37 character(len=nf90_max_name) :: name
48 character(len=500) filename
49 type(Variable),
allocatable,
dimension(:) :: variables
50 type(Dimension),
allocatable,
dimension(:) :: dimensions
72 interface read_vardata
73 module procedure read_vardata_1d_r4, read_vardata_2d_r4, read_vardata_3d_r4,&
74 read_vardata_4d_r4, read_vardata_5d_r4, &
75 read_vardata_1d_r8, read_vardata_2d_r8, read_vardata_3d_r8,&
76 read_vardata_4d_r8, read_vardata_5d_r8, &
77 read_vardata_1d_int, read_vardata_2d_int, &
78 read_vardata_3d_int, read_vardata_4d_int, read_vardata_5d_int, &
79 read_vardata_1d_short, read_vardata_2d_short, &
80 read_vardata_3d_short, read_vardata_4d_short, read_vardata_5d_short , &
81 read_vardata_1d_byte, read_vardata_2d_byte, &
82 read_vardata_3d_byte, read_vardata_4d_byte, read_vardata_5d_byte, &
83 read_vardata_1d_char, read_vardata_2d_char, &
84 read_vardata_3d_char, read_vardata_4d_char, read_vardata_5d_char
85 end interface read_vardata
107 interface write_vardata
108 module procedure write_vardata_1d_r4, write_vardata_2d_r4, write_vardata_3d_r4,&
109 write_vardata_4d_r4, write_vardata_1d_r8, write_vardata_2d_r8, write_vardata_3d_r8,&
110 write_vardata_4d_r8, write_vardata_1d_int, write_vardata_2d_int, &
111 write_vardata_3d_int, write_vardata_4d_int, &
112 write_vardata_5d_int, write_vardata_5d_r4, write_vardata_5d_r8, &
113 write_vardata_1d_short, write_vardata_2d_short, write_vardata_3d_short, &
114 write_vardata_4d_short, write_vardata_5d_short, &
115 write_vardata_1d_byte, write_vardata_2d_byte, write_vardata_3d_byte, &
116 write_vardata_4d_byte, write_vardata_5d_byte, &
117 write_vardata_1d_char, write_vardata_2d_char, write_vardata_3d_char, &
118 write_vardata_4d_char, write_vardata_5d_char
119 end interface write_vardata
126 interface read_attribute
127 module procedure read_attribute_r4_scalar, read_attribute_int_scalar,&
128 read_attribute_r8_scalar, read_attribute_r4_1d,&
129 read_attribute_int_1d, read_attribute_r8_1d, read_attribute_char, &
130 read_attribute_short_scalar, read_attribute_short_1d, &
131 read_attribute_byte_scalar, read_attribute_byte_1d
132 end interface read_attribute
138 interface write_attribute
139 module procedure write_attribute_r4_scalar, write_attribute_int_scalar,&
140 write_attribute_r8_scalar, write_attribute_r4_1d,&
141 write_attribute_int_1d, write_attribute_r8_1d, write_attribute_char, &
142 write_attribute_short_scalar, write_attribute_short_1d, &
143 write_attribute_byte_scalar, write_attribute_byte_1d
144 end interface write_attribute
149 interface quantize_data
150 module procedure quantize_data_2d, quantize_data_3d, &
151 quantize_data_4d, quantize_data_5d
152 end interface quantize_data
154 read_vardata, read_attribute, write_vardata, write_attribute,
get_ndim, &
165 subroutine nccheck(status,halt,fname)
167 integer,
intent (in) :: status
168 logical,
intent(in),
optional :: halt
169 character(len=500),
intent(in),
optional :: fname
171 if (
present(halt))
then
176 if (status /= nf90_noerr)
then
177 write(0,*) status, trim(nf90_strerror(status))
178 if (
present(fname))
then
179 write(0,*) trim(fname)
183 end subroutine nccheck
190 type(dataset) :: dset
191 type(dimension) :: dim
192 character(len=*),
intent(in) :: dimname
195 dim = dset%dimensions(ndim)
206 type(dataset),
intent(in) :: dset
207 character(len=*),
intent(in) :: dimname
211 if (trim(dset%dimensions(ndim)%name) == trim(dimname))
then
225 type(dataset) :: dset
226 type(variable) :: var
227 character(len=*) :: varname
230 var = dset%variables(nvar)
239 type(dataset) :: dset
240 character(len=*) :: varname
259 type(dataset) :: dset
260 character(len=*) :: attname
261 character(len=*),
optional :: varname
262 integer nvar, varid, ncerr
264 if(
present(varname))
then
270 varid = dset%variables(nvar)%varid
274 ncerr = nf90_inquire_attribute(dset%ncid, varid, attname)
289 type(dataset),
intent(in) :: dset
290 character(len=*),
intent(in) :: varname
294 if (trim(dset%variables(nvar)%name) == trim(varname))
then
307 subroutine set_varunlimdimlens_(dset,errcode)
308 type(dataset),
intent(inout) :: dset
309 integer,
intent(out),
optional :: errcode
310 integer ndim,n,nvar,ncerr
311 logical return_errcode
312 if(
present(errcode))
then
313 return_errcode=.true.
316 return_errcode=.false.
321 if (dset%variables(nvar)%hasunlim)
then
323 do ndim=1,dset%variables(nvar)%ndims
324 n = dset%variables(nvar)%dimindxs(ndim)
327 if (dset%dimensions(n)%isunlimited)
then
328 ncerr = nf90_inquire_dimension(dset%ncid,&
329 dset%dimensions(n)%dimid, &
330 len=dset%variables(nvar)%dimlens(ndim))
331 if (return_errcode)
then
332 call nccheck(ncerr,halt=.false.)
339 dset%dimensions(n)%len = dset%variables(nvar)%dimlens(ndim)
344 end subroutine set_varunlimdimlens_
360 character(len=*),
intent(in) :: filename
361 type(dataset) :: dset
362 integer,
intent(out),
optional :: errcode
363 logical,
intent(in),
optional :: paropen
364 integer,
intent(in),
optional :: mpicomm
365 integer ncerr,nunlimdim,ndim,nvar,n,formatnum
366 logical return_errcode
367 if(
present(errcode))
then
368 return_errcode=.true.
371 return_errcode=.false.
373 if (
present(paropen))
then
375 dset%isparallel = .true.
377 dset%isparallel = .false.
380 dset%isparallel = .false.
383 if (dset%isparallel)
then
384 if (
present(mpicomm))
then
385 ncerr = nf90_open(trim(filename), ior(nf90_nowrite, nf90_mpiio), &
386 comm=mpicomm, info = mpi_info_null, ncid=dset%ncid)
388 ncerr = nf90_open(trim(filename), ior(nf90_nowrite, nf90_mpiio), &
389 comm=mpi_comm_world, info = mpi_info_null, ncid=dset%ncid)
392 ncerr = nf90_open(trim(filename), nf90_nowrite, ncid=dset%ncid)
394 if (return_errcode)
then
395 call nccheck(ncerr,halt=.false.,fname=filename)
397 if (ncerr /= 0)
return
399 call nccheck(ncerr,fname=filename)
401 ncerr = nf90_inquire(dset%ncid, dset%ndims, dset%nvars, dset%natts, nunlimdim, formatnum=formatnum)
402 if (return_errcode)
then
404 call nccheck(ncerr,halt=.false.,fname=filename)
405 if (ncerr /= 0)
return
407 call nccheck(ncerr,fname=filename)
409 if (formatnum == nf90_format_netcdf4 .or. formatnum == nf90_format_netcdf4_classic)
then
412 dset%ishdf5 = .false.
414 dset%filename = trim(filename)
415 allocate(dset%variables(dset%nvars))
416 allocate(dset%dimensions(dset%ndims))
418 dset%dimensions(ndim)%dimid = ndim
419 ncerr = nf90_inquire_dimension(dset%ncid, ndim, name=dset%dimensions(ndim)%name, &
420 len=dset%dimensions(ndim)%len)
421 if (return_errcode)
then
423 call nccheck(ncerr,halt=.false.,fname=filename)
424 if (ncerr /= 0)
return
426 call nccheck(ncerr,fname=filename)
428 if (ndim == nunlimdim)
then
429 dset%dimensions(ndim)%isunlimited = .true.
431 dset%dimensions(ndim)%isunlimited = .false.
435 dset%variables(nvar)%hasunlim = .false.
436 dset%variables(nvar)%varid = nvar
437 ncerr = nf90_inquire_variable(dset%ncid, nvar,&
438 name=dset%variables(nvar)%name,&
439 natts=dset%variables(nvar)%natts,&
440 xtype=dset%variables(nvar)%dtype,&
441 ndims=dset%variables(nvar)%ndims)
442 if (return_errcode)
then
444 call nccheck(ncerr,halt=.false.,fname=filename)
445 if (ncerr /= 0)
return
447 call nccheck(ncerr,fname=filename)
449 allocate(dset%variables(nvar)%dimids(dset%variables(nvar)%ndims))
450 allocate(dset%variables(nvar)%dimindxs(dset%variables(nvar)%ndims))
451 allocate(dset%variables(nvar)%dimlens(dset%variables(nvar)%ndims))
452 allocate(dset%variables(nvar)%chunksizes(dset%variables(nvar)%ndims))
453 allocate(dset%variables(nvar)%dimnames(dset%variables(nvar)%ndims))
454 if (dset%ishdf5)
then
455 ncerr = nf90_inquire_variable(dset%ncid, nvar,&
456 dimids=dset%variables(nvar)%dimids,&
457 deflate_level=dset%variables(nvar)%deflate_level,&
458 chunksizes=dset%variables(nvar)%chunksizes,&
459 shuffle=dset%variables(nvar)%shuffle)
461 ncerr = nf90_inquire_variable(dset%ncid, nvar,&
462 dimids=dset%variables(nvar)%dimids)
464 if (return_errcode)
then
466 call nccheck(ncerr,halt=.false.,fname=filename)
467 if (ncerr /= 0)
return
469 call nccheck(ncerr,fname=filename)
471 do ndim=1,dset%variables(nvar)%ndims
473 if (dset%variables(nvar)%dimids(ndim) == dset%dimensions(n)%dimid)
then
477 dset%variables(nvar)%dimindxs(ndim) = n
478 dset%variables(nvar)%dimlens(ndim) = dset%dimensions(n)%len
479 dset%variables(nvar)%dimnames(ndim) = dset%dimensions(n)%name
480 if (dset%dimensions(n)%isunlimited)
then
481 dset%variables(nvar)%hasunlim = .true.
506 function create_dataset(filename, dsetin, copy_vardata, paropen, nocompress, mpicomm, errcode)
result(dset)
508 character(len=*),
intent(in) :: filename
509 character(len=nf90_max_name) :: attname, varname
510 logical,
intent(in),
optional :: copy_vardata
511 type(dataset) :: dset
512 type(dataset),
intent(in) :: dsetin
513 logical,
intent(in),
optional :: paropen
514 integer,
intent(in),
optional :: mpicomm
515 logical,
intent(in),
optional :: nocompress
516 integer,
intent(out),
optional :: errcode
517 integer ncerr,ndim,nvar,n,ishuffle,natt
518 logical copyd, coordvar, compress
519 real(8),
allocatable,
dimension(:) :: values_1d
520 real(8),
allocatable,
dimension(:,:) :: values_2d
521 real(8),
allocatable,
dimension(:,:,:) :: values_3d
522 real(8),
allocatable,
dimension(:,:,:,:) :: values_4d
523 real(8),
allocatable,
dimension(:,:,:,:,:) :: values_5d
524 integer,
allocatable,
dimension(:) :: ivalues_1d
525 integer,
allocatable,
dimension(:,:) :: ivalues_2d
526 integer,
allocatable,
dimension(:,:,:) :: ivalues_3d
527 integer,
allocatable,
dimension(:,:,:,:) :: ivalues_4d
528 integer,
allocatable,
dimension(:,:,:,:,:) :: ivalues_5d
529 character,
allocatable,
dimension(:) :: cvalues_1d
530 character,
allocatable,
dimension(:,:) :: cvalues_2d
531 character,
allocatable,
dimension(:,:,:) :: cvalues_3d
532 character,
allocatable,
dimension(:,:,:,:) :: cvalues_4d
533 character,
allocatable,
dimension(:,:,:,:,:) :: cvalues_5d
534 logical return_errcode
535 if(
present(errcode))
then
536 return_errcode=.true.
539 return_errcode=.false.
541 if (
present(copy_vardata))
then
548 if (
present(paropen))
then
550 dset%isparallel = .true.
552 dset%isparallel = .false.
555 dset%isparallel = .false.
558 if (
present(nocompress))
then
564 if (dsetin%ishdf5)
then
565 if (dset%isparallel)
then
566 if (
present(mpicomm))
then
567 ncerr = nf90_create(trim(filename), &
568 cmode=ior(nf90_clobber,nf90_netcdf4), ncid=dset%ncid, &
569 comm = mpicomm, info = mpi_info_null)
571 ncerr = nf90_create(trim(filename), &
572 cmode=ior(nf90_clobber,nf90_netcdf4), ncid=dset%ncid, &
573 comm = mpi_comm_world, info = mpi_info_null)
576 ncerr = nf90_create(trim(filename), &
577 cmode=ior(nf90_clobber,nf90_netcdf4), &
582 ncerr = nf90_create(trim(filename), &
583 cmode=ior(nf90_clobber,nf90_cdf5), &
585 dset%ishdf5 = .false.
587 if (return_errcode)
then
589 call nccheck(ncerr,halt=.false.,fname=filename)
590 if (ncerr /= 0)
return
592 call nccheck(ncerr,fname=filename)
595 do natt=1,dsetin%natts
596 ncerr = nf90_inq_attname(dsetin%ncid, nf90_global, natt, attname)
597 if (return_errcode)
then
599 call nccheck(ncerr,halt=.false.)
600 if (ncerr /= 0)
return
604 ncerr = nf90_copy_att(dsetin%ncid, nf90_global, attname, dset%ncid, nf90_global)
605 if (return_errcode)
then
607 call nccheck(ncerr,halt=.false.)
608 if (ncerr /= 0)
return
613 dset%natts = dsetin%natts
614 dset%filename = trim(filename)
615 dset%ndims = dsetin%ndims
616 dset%nvars = dsetin%nvars
617 allocate(dset%variables(dsetin%nvars))
618 allocate(dset%dimensions(dsetin%ndims))
620 do ndim=1,dsetin%ndims
621 if (dsetin%dimensions(ndim)%isunlimited)
then
622 ncerr = nf90_def_dim(dset%ncid, trim(dsetin%dimensions(ndim)%name), &
624 dset%dimensions(ndim)%dimid)
625 if (return_errcode)
then
627 call nccheck(ncerr,halt=.false.)
628 if (ncerr /= 0)
return
632 dset%dimensions(ndim)%isunlimited = .true.
633 dset%nunlimdim = ndim
634 dset%dimensions(ndim)%len = 0
635 dset%dimensions(ndim)%name = trim(dsetin%dimensions(ndim)%name)
637 ncerr = nf90_def_dim(dset%ncid, trim(dsetin%dimensions(ndim)%name),&
638 dsetin%dimensions(ndim)%len, &
639 dset%dimensions(ndim)%dimid)
640 if (return_errcode)
then
642 call nccheck(ncerr,halt=.false.)
643 if (ncerr /= 0)
return
647 dset%dimensions(ndim)%len = dsetin%dimensions(ndim)%len
648 dset%dimensions(ndim)%isunlimited = .false.
649 dset%dimensions(ndim)%name = trim(dsetin%dimensions(ndim)%name)
653 do nvar=1,dsetin%nvars
654 dset%variables(nvar)%hasunlim = .false.
655 dset%variables(nvar)%ndims = dsetin%variables(nvar)%ndims
656 allocate(dset%variables(nvar)%dimids(dset%variables(nvar)%ndims))
657 allocate(dset%variables(nvar)%dimindxs(dset%variables(nvar)%ndims))
658 allocate(dset%variables(nvar)%dimnames(dset%variables(nvar)%ndims))
659 allocate(dset%variables(nvar)%dimlens(dset%variables(nvar)%ndims))
660 allocate(dset%variables(nvar)%chunksizes(dset%variables(nvar)%ndims))
661 dset%variables(nvar)%chunksizes = dsetin%variables(nvar)%chunksizes
662 do ndim=1,dset%variables(nvar)%ndims
664 if (trim(dsetin%variables(nvar)%dimnames(ndim)) == &
665 trim(dset%dimensions(n)%name))
then
669 dset%variables(nvar)%dimindxs(ndim) = n
670 dset%variables(nvar)%dimids(ndim) = dset%dimensions(n)%dimid
671 dset%variables(nvar)%dimlens(ndim) = dset%dimensions(n)%len
672 dset%variables(nvar)%dimnames(ndim) = dset%dimensions(n)%name
673 if (dset%dimensions(n)%isunlimited)
then
674 dset%variables(nvar)%hasunlim = .true.
677 dset%variables(nvar)%name = dsetin%variables(nvar)%name
678 dset%variables(nvar)%dtype = dsetin%variables(nvar)%dtype
679 if (maxval(dset%variables(nvar)%chunksizes) > 0 .and. dset%ishdf5)
then
682 ncerr = nf90_def_var(dset%ncid, &
683 trim(dset%variables(nvar)%name),&
684 dset%variables(nvar)%dtype, &
685 dset%variables(nvar)%dimids, &
686 dset%variables(nvar)%varid, &
687 chunksizes=dset%variables(nvar)%chunksizes)
689 ncerr = nf90_def_var(dset%ncid, &
690 trim(dset%variables(nvar)%name),&
691 dset%variables(nvar)%dtype, &
692 dset%variables(nvar)%dimids, &
693 dset%variables(nvar)%varid)
695 if (return_errcode)
then
697 call nccheck(ncerr,halt=.false.)
698 if (ncerr /= 0)
return
702 if (dsetin%variables(nvar)%deflate_level > 0 .and. dset%ishdf5 .and. compress)
then
703 if (dsetin%variables(nvar)%shuffle)
then
708 ncerr = nf90_def_var_deflate(dset%ncid, dset%variables(nvar)%varid,&
709 ishuffle,1,dsetin%variables(nvar)%deflate_level)
710 if (return_errcode)
then
712 call nccheck(ncerr,halt=.false.)
713 if (ncerr /= 0)
return
717 dset%variables(nvar)%shuffle = dsetin%variables(nvar)%shuffle
718 dset%variables(nvar)%deflate_level = &
719 dsetin%variables(nvar)%deflate_level
722 do natt=1,dsetin%variables(nvar)%natts
723 ncerr = nf90_inq_attname(dsetin%ncid, dsetin%variables(nvar)%varid, natt, attname)
724 if (return_errcode)
then
726 call nccheck(ncerr,halt=.false.)
727 if (ncerr /= 0)
return
731 if (.not. compress)
then
732 if (trim(attname) ==
'max_abs_compression_error' &
733 .or. trim(attname) ==
'nbits')
then
737 ncerr = nf90_copy_att(dsetin%ncid, dsetin%variables(nvar)%varid, attname, dset%ncid, dset%variables(nvar)%varid)
738 if (return_errcode)
then
740 call nccheck(ncerr,halt=.false.)
741 if (ncerr /= 0)
return
747 ncerr = nf90_enddef(dset%ncid)
748 if (return_errcode)
then
750 call nccheck(ncerr,halt=.false.)
751 if (ncerr /= 0)
return
757 do nvar=1,dsetin%nvars
758 varname = trim(dsetin%variables(nvar)%name)
761 if (trim(varname) ==
'lats' .or. trim(varname) ==
'lons' .or. &
762 trim(varname) ==
'lat' .or. trim(varname) ==
'lon')
then
766 if (trim(varname) == trim(dset%dimensions(ndim)%name))
then
773 if (.not. coordvar .and. .not. copyd) cycle
775 if (dsetin%variables(nvar)%dtype == nf90_float .or.&
776 dsetin%variables(nvar)%dtype == nf90_double)
then
777 if (dsetin%variables(nvar)%ndims == 1)
then
778 call read_vardata(dsetin, varname, values_1d)
779 call write_vardata(dset, varname, values_1d)
780 else if (dsetin%variables(nvar)%ndims == 2)
then
781 call read_vardata(dsetin, varname, values_2d)
782 call write_vardata(dset, varname, values_2d)
783 else if (dsetin%variables(nvar)%ndims == 3)
then
784 call read_vardata(dsetin, varname, values_3d)
785 call write_vardata(dset, varname, values_3d)
786 else if (dsetin%variables(nvar)%ndims == 4)
then
787 call read_vardata(dsetin, varname, values_4d)
788 call write_vardata(dset, varname, values_4d)
789 else if (dsetin%variables(nvar)%ndims == 5)
then
790 call read_vardata(dsetin, varname, values_5d)
791 call write_vardata(dset, varname, values_5d)
794 elseif (dsetin%variables(nvar)%dtype == nf90_int .or.&
795 dsetin%variables(nvar)%dtype == nf90_byte .or.&
796 dsetin%variables(nvar)%dtype == nf90_short)
then
798 if (dsetin%variables(nvar)%ndims == 1)
then
799 call read_vardata(dsetin, varname, ivalues_1d)
800 call write_vardata(dset, varname, ivalues_1d)
801 else if (dsetin%variables(nvar)%ndims == 2)
then
802 call read_vardata(dsetin, varname, ivalues_2d)
803 call write_vardata(dset, varname, ivalues_2d)
804 else if (dsetin%variables(nvar)%ndims == 3)
then
805 call read_vardata(dsetin, varname, ivalues_3d)
806 call write_vardata(dset, varname, ivalues_3d)
807 else if (dsetin%variables(nvar)%ndims == 4)
then
808 call read_vardata(dsetin, varname, ivalues_4d)
809 call write_vardata(dset, varname, ivalues_4d)
810 else if (dsetin%variables(nvar)%ndims == 5)
then
811 call read_vardata(dsetin, varname, ivalues_5d)
812 call write_vardata(dset, varname, ivalues_5d)
814 elseif (dsetin%variables(nvar)%dtype == nf90_char)
then
815 if (dsetin%variables(nvar)%ndims == 1)
then
816 call read_vardata(dsetin, varname, cvalues_1d)
817 call write_vardata(dset, varname, cvalues_1d)
818 else if (dsetin%variables(nvar)%ndims == 2)
then
819 call read_vardata(dsetin, varname, cvalues_2d)
820 call write_vardata(dset, varname, cvalues_2d)
821 else if (dsetin%variables(nvar)%ndims == 3)
then
822 call read_vardata(dsetin, varname, cvalues_3d)
823 call write_vardata(dset, varname, cvalues_3d)
824 else if (dsetin%variables(nvar)%ndims == 4)
then
825 call read_vardata(dsetin, varname, cvalues_4d)
826 call write_vardata(dset, varname, cvalues_4d)
827 else if (dsetin%variables(nvar)%ndims == 5)
then
828 call read_vardata(dsetin, varname, cvalues_5d)
829 call write_vardata(dset, varname, cvalues_5d)
832 print *,
'not copying variable ',trim(adjustl(varname)),&
833 ' (unsupported data type or rank)'
846 type(dataset),
intent(inout) :: dset
847 integer,
intent(out),
optional :: errcode
849 logical return_errcode
850 if(
present(errcode))
then
851 return_errcode=.true.
854 return_errcode=.false.
856 ncerr = nf90_close(ncid=dset%ncid)
857 if (return_errcode)
then
859 call nccheck(ncerr,halt=.false.)
860 if (ncerr /= 0)
return
865 deallocate(dset%variables(nvar)%dimids)
866 deallocate(dset%variables(nvar)%dimindxs)
867 deallocate(dset%variables(nvar)%dimlens)
868 deallocate(dset%variables(nvar)%chunksizes)
869 deallocate(dset%variables(nvar)%dimnames)
871 deallocate(dset%variables,dset%dimensions)
874 subroutine read_vardata_1d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
875 real(4),
allocatable,
dimension(:),
intent(inout) :: values
876 include
"read_vardata_code_1d.f90"
877 end subroutine read_vardata_1d_r4
879 subroutine read_vardata_2d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
880 real(4),
allocatable,
dimension(:,:),
intent(inout) :: values
881 include
"read_vardata_code_2d.f90"
882 end subroutine read_vardata_2d_r4
884 subroutine read_vardata_3d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
885 real(4),
allocatable,
dimension(:,:,:),
intent(inout) :: values
886 include
"read_vardata_code_3d.f90"
887 end subroutine read_vardata_3d_r4
889 subroutine read_vardata_4d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
890 real(4),
allocatable,
dimension(:,:,:,:),
intent(inout) :: values
891 include
"read_vardata_code_4d.f90"
892 end subroutine read_vardata_4d_r4
894 subroutine read_vardata_5d_r4(dset, varname, values, errcode)
895 real(4),
allocatable,
dimension(:,:,:,:,:),
intent(inout) :: values
896 include
"read_vardata_code_5d.f90"
897 end subroutine read_vardata_5d_r4
899 subroutine read_vardata_1d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
900 real(8),
allocatable,
dimension(:),
intent(inout) :: values
901 include
"read_vardata_code_1d.f90"
902 end subroutine read_vardata_1d_r8
904 subroutine read_vardata_2d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
905 real(8),
allocatable,
dimension(:,:),
intent(inout) :: values
906 include
"read_vardata_code_2d.f90"
907 end subroutine read_vardata_2d_r8
909 subroutine read_vardata_3d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
910 real(8),
allocatable,
dimension(:,:,:),
intent(inout) :: values
911 include
"read_vardata_code_3d.f90"
912 end subroutine read_vardata_3d_r8
914 subroutine read_vardata_4d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
915 real(8),
allocatable,
dimension(:,:,:,:),
intent(inout) :: values
916 include
"read_vardata_code_4d.f90"
917 end subroutine read_vardata_4d_r8
919 subroutine read_vardata_5d_r8(dset, varname, values, errcode)
920 real(8),
allocatable,
dimension(:,:,:,:,:),
intent(inout) :: values
921 include
"read_vardata_code_5d.f90"
922 end subroutine read_vardata_5d_r8
924 subroutine read_vardata_1d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
925 integer,
allocatable,
dimension(:),
intent(inout) :: values
926 include
"read_vardata_code_1d.f90"
927 end subroutine read_vardata_1d_int
929 subroutine read_vardata_2d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
930 integer,
allocatable,
dimension(:,:),
intent(inout) :: values
931 include
"read_vardata_code_2d.f90"
932 end subroutine read_vardata_2d_int
934 subroutine read_vardata_3d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
935 integer,
allocatable,
dimension(:,:,:),
intent(inout) :: values
936 include
"read_vardata_code_3d.f90"
937 end subroutine read_vardata_3d_int
939 subroutine read_vardata_4d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
940 integer,
allocatable,
dimension(:,:,:,:),
intent(inout) :: values
941 include
"read_vardata_code_4d.f90"
942 end subroutine read_vardata_4d_int
944 subroutine read_vardata_5d_int(dset, varname, values, errcode)
945 integer,
allocatable,
dimension(:,:,:,:,:),
intent(inout) :: values
946 include
"read_vardata_code_5d.f90"
947 end subroutine read_vardata_5d_int
949 subroutine read_vardata_1d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
950 integer(2),
allocatable,
dimension(:),
intent(inout) :: values
951 include
"read_vardata_code_1d.f90"
952 end subroutine read_vardata_1d_short
954 subroutine read_vardata_2d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
955 integer(2),
allocatable,
dimension(:,:),
intent(inout) :: values
956 include
"read_vardata_code_2d.f90"
957 end subroutine read_vardata_2d_short
959 subroutine read_vardata_3d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
960 integer(2),
allocatable,
dimension(:,:,:),
intent(inout) :: values
961 include
"read_vardata_code_3d.f90"
962 end subroutine read_vardata_3d_short
964 subroutine read_vardata_4d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
965 integer(2),
allocatable,
dimension(:,:,:,:),
intent(inout) :: values
966 include
"read_vardata_code_4d.f90"
967 end subroutine read_vardata_4d_short
969 subroutine read_vardata_5d_short(dset, varname, values, errcode)
970 integer(2),
allocatable,
dimension(:,:,:,:,:),
intent(inout) :: values
971 include
"read_vardata_code_5d.f90"
972 end subroutine read_vardata_5d_short
974 subroutine read_vardata_1d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
975 integer(1),
allocatable,
dimension(:),
intent(inout) :: values
976 include
"read_vardata_code_1d.f90"
977 end subroutine read_vardata_1d_byte
979 subroutine read_vardata_2d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
980 integer(1),
allocatable,
dimension(:,:),
intent(inout) :: values
981 include
"read_vardata_code_2d.f90"
982 end subroutine read_vardata_2d_byte
984 subroutine read_vardata_3d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
985 integer(1),
allocatable,
dimension(:,:,:),
intent(inout) :: values
986 include
"read_vardata_code_3d.f90"
987 end subroutine read_vardata_3d_byte
989 subroutine read_vardata_4d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
990 integer(1),
allocatable,
dimension(:,:,:,:),
intent(inout) :: values
991 include
"read_vardata_code_4d.f90"
992 end subroutine read_vardata_4d_byte
994 subroutine read_vardata_5d_byte(dset, varname, values, errcode)
995 integer(1),
allocatable,
dimension(:,:,:,:,:),
intent(inout) :: values
996 include
"read_vardata_code_5d.f90"
997 end subroutine read_vardata_5d_byte
999 subroutine read_vardata_1d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1000 character,
allocatable,
dimension(:),
intent(inout) :: values
1001 include
"read_vardata_code_1d.f90"
1002 end subroutine read_vardata_1d_char
1004 subroutine read_vardata_2d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1005 character,
allocatable,
dimension(:,:),
intent(inout) :: values
1006 include
"read_vardata_code_2d.f90"
1007 end subroutine read_vardata_2d_char
1009 subroutine read_vardata_3d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1010 character,
allocatable,
dimension(:,:,:),
intent(inout) :: values
1011 include
"read_vardata_code_3d.f90"
1012 end subroutine read_vardata_3d_char
1014 subroutine read_vardata_4d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1015 character,
allocatable,
dimension(:,:,:,:),
intent(inout) :: values
1016 include
"read_vardata_code_4d.f90"
1017 end subroutine read_vardata_4d_char
1019 subroutine read_vardata_5d_char(dset, varname, values, errcode)
1020 character,
allocatable,
dimension(:,:,:,:,:),
intent(inout) :: values
1021 include
"read_vardata_code_5d.f90"
1022 end subroutine read_vardata_5d_char
1024 subroutine write_vardata_1d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1025 real(4),
dimension(:),
intent(in) :: values
1026 integer,
intent(in),
optional :: ncstart(1)
1027 integer,
intent(in),
optional :: nccount(1)
1028 include
"write_vardata_code.f90"
1029 end subroutine write_vardata_1d_r4
1031 subroutine write_vardata_2d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1032 real(4),
dimension(:,:),
intent(in) :: values
1033 integer,
intent(in),
optional :: ncstart(2)
1034 integer,
intent(in),
optional :: nccount(2)
1035 include
"write_vardata_code.f90"
1036 end subroutine write_vardata_2d_r4
1038 subroutine write_vardata_3d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1039 real(4),
dimension(:,:,:),
intent(in) :: values
1040 integer,
intent(in),
optional :: ncstart(3)
1041 integer,
intent(in),
optional :: nccount(3)
1042 include
"write_vardata_code.f90"
1043 end subroutine write_vardata_3d_r4
1045 subroutine write_vardata_4d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1046 real(4),
dimension(:,:,:,:),
intent(in) :: values
1047 integer,
intent(in),
optional :: ncstart(4)
1048 integer,
intent(in),
optional :: nccount(4)
1049 include
"write_vardata_code.f90"
1050 end subroutine write_vardata_4d_r4
1052 subroutine write_vardata_5d_r4(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1053 real(4),
dimension(:,:,:,:,:),
intent(in) :: values
1054 integer,
intent(in),
optional :: ncstart(5)
1055 integer,
intent(in),
optional :: nccount(5)
1056 include
"write_vardata_code.f90"
1057 end subroutine write_vardata_5d_r4
1059 subroutine write_vardata_1d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1060 real(8),
dimension(:),
intent(in) :: values
1061 integer,
intent(in),
optional :: ncstart(1)
1062 integer,
intent(in),
optional :: nccount(1)
1063 include
"write_vardata_code.f90"
1064 end subroutine write_vardata_1d_r8
1066 subroutine write_vardata_2d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1067 real(8),
dimension(:,:),
intent(in) :: values
1068 integer,
intent(in),
optional :: ncstart(2)
1069 integer,
intent(in),
optional :: nccount(2)
1070 include
"write_vardata_code.f90"
1071 end subroutine write_vardata_2d_r8
1073 subroutine write_vardata_3d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1074 real(8),
dimension(:,:,:),
intent(in) :: values
1075 integer,
intent(in),
optional :: ncstart(3)
1076 integer,
intent(in),
optional :: nccount(3)
1077 include
"write_vardata_code.f90"
1078 end subroutine write_vardata_3d_r8
1080 subroutine write_vardata_4d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1081 real(8),
dimension(:,:,:,:),
intent(in) :: values
1082 integer,
intent(in),
optional :: ncstart(4)
1083 integer,
intent(in),
optional :: nccount(4)
1084 include
"write_vardata_code.f90"
1085 end subroutine write_vardata_4d_r8
1087 subroutine write_vardata_5d_r8(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1088 real(8),
dimension(:,:,:,:,:),
intent(in) :: values
1089 integer,
intent(in),
optional :: ncstart(5)
1090 integer,
intent(in),
optional :: nccount(5)
1091 include
"write_vardata_code.f90"
1092 end subroutine write_vardata_5d_r8
1094 subroutine write_vardata_1d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1095 integer,
dimension(:),
intent(in) :: values
1096 integer,
intent(in),
optional :: ncstart(1)
1097 integer,
intent(in),
optional :: nccount(1)
1098 include
"write_vardata_code.f90"
1099 end subroutine write_vardata_1d_int
1101 subroutine write_vardata_2d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1102 integer,
dimension(:,:),
intent(in) :: values
1103 integer,
intent(in),
optional :: ncstart(2)
1104 integer,
intent(in),
optional :: nccount(2)
1105 include
"write_vardata_code.f90"
1106 end subroutine write_vardata_2d_int
1108 subroutine write_vardata_3d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1109 integer,
dimension(:,:,:),
intent(in) :: values
1110 integer,
intent(in),
optional :: ncstart(3)
1111 integer,
intent(in),
optional :: nccount(3)
1112 include
"write_vardata_code.f90"
1113 end subroutine write_vardata_3d_int
1115 subroutine write_vardata_4d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1116 integer,
dimension(:,:,:,:),
intent(in) :: values
1117 integer,
intent(in),
optional :: ncstart(4)
1118 integer,
intent(in),
optional :: nccount(4)
1119 include
"write_vardata_code.f90"
1120 end subroutine write_vardata_4d_int
1122 subroutine write_vardata_5d_int(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1123 integer,
dimension(:,:,:,:,:),
intent(in) :: values
1124 integer,
intent(in),
optional :: ncstart(5)
1125 integer,
intent(in),
optional :: nccount(5)
1126 include
"write_vardata_code.f90"
1127 end subroutine write_vardata_5d_int
1129 subroutine write_vardata_1d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1130 integer(2),
dimension(:),
intent(in) :: values
1131 integer,
intent(in),
optional :: ncstart(1)
1132 integer,
intent(in),
optional :: nccount(1)
1133 include
"write_vardata_code.f90"
1134 end subroutine write_vardata_1d_short
1136 subroutine write_vardata_2d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1137 integer(2),
dimension(:,:),
intent(in) :: values
1138 integer,
intent(in),
optional :: ncstart(2)
1139 integer,
intent(in),
optional :: nccount(2)
1140 include
"write_vardata_code.f90"
1141 end subroutine write_vardata_2d_short
1143 subroutine write_vardata_3d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1144 integer(2),
dimension(:,:,:),
intent(in) :: values
1145 integer,
intent(in),
optional :: ncstart(3)
1146 integer,
intent(in),
optional :: nccount(3)
1147 include
"write_vardata_code.f90"
1148 end subroutine write_vardata_3d_short
1150 subroutine write_vardata_4d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1151 integer(2),
dimension(:,:,:,:),
intent(in) :: values
1152 integer,
intent(in),
optional :: ncstart(4)
1153 integer,
intent(in),
optional :: nccount(4)
1154 include
"write_vardata_code.f90"
1155 end subroutine write_vardata_4d_short
1157 subroutine write_vardata_5d_short(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1158 integer(2),
dimension(:,:,:,:,:),
intent(in) :: values
1159 integer,
intent(in),
optional :: ncstart(5)
1160 integer,
intent(in),
optional :: nccount(5)
1161 include
"write_vardata_code.f90"
1162 end subroutine write_vardata_5d_short
1164 subroutine write_vardata_1d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1165 integer(1),
dimension(:),
intent(in) :: values
1166 integer,
intent(in),
optional :: ncstart(1)
1167 integer,
intent(in),
optional :: nccount(1)
1168 include
"write_vardata_code.f90"
1169 end subroutine write_vardata_1d_byte
1171 subroutine write_vardata_2d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1172 integer(1),
dimension(:,:),
intent(in) :: values
1173 integer,
intent(in),
optional :: ncstart(2)
1174 integer,
intent(in),
optional :: nccount(2)
1175 include
"write_vardata_code.f90"
1176 end subroutine write_vardata_2d_byte
1178 subroutine write_vardata_3d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1179 integer(1),
dimension(:,:,:),
intent(in) :: values
1180 integer,
intent(in),
optional :: ncstart(3)
1181 integer,
intent(in),
optional :: nccount(3)
1182 include
"write_vardata_code.f90"
1183 end subroutine write_vardata_3d_byte
1185 subroutine write_vardata_4d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1186 integer(1),
dimension(:,:,:,:),
intent(in) :: values
1187 integer,
intent(in),
optional :: ncstart(4)
1188 integer,
intent(in),
optional :: nccount(4)
1189 include
"write_vardata_code.f90"
1190 end subroutine write_vardata_4d_byte
1192 subroutine write_vardata_5d_byte(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1193 integer(1),
dimension(:,:,:,:,:),
intent(in) :: values
1194 integer,
intent(in),
optional :: ncstart(5)
1195 integer,
intent(in),
optional :: nccount(5)
1196 include
"write_vardata_code.f90"
1197 end subroutine write_vardata_5d_byte
1199 subroutine write_vardata_1d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1200 character,
dimension(:),
intent(in) :: values
1201 integer,
intent(in),
optional :: ncstart(1)
1202 integer,
intent(in),
optional :: nccount(1)
1203 include
"write_vardata_code.f90"
1204 end subroutine write_vardata_1d_char
1206 subroutine write_vardata_2d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1207 character,
dimension(:,:),
intent(in) :: values
1208 integer,
intent(in),
optional :: ncstart(2)
1209 integer,
intent(in),
optional :: nccount(2)
1210 include
"write_vardata_code.f90"
1211 end subroutine write_vardata_2d_char
1213 subroutine write_vardata_3d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1214 character,
dimension(:,:,:),
intent(in) :: values
1215 integer,
intent(in),
optional :: ncstart(3)
1216 integer,
intent(in),
optional :: nccount(3)
1217 include
"write_vardata_code.f90"
1218 end subroutine write_vardata_3d_char
1220 subroutine write_vardata_4d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1221 character,
dimension(:,:,:,:),
intent(in) :: values
1222 integer,
intent(in),
optional :: ncstart(4)
1223 integer,
intent(in),
optional :: nccount(4)
1224 include
"write_vardata_code.f90"
1225 end subroutine write_vardata_4d_char
1227 subroutine write_vardata_5d_char(dset, varname, values, nslice, slicedim, ncstart, nccount, errcode)
1228 character,
dimension(:,:,:,:,:),
intent(in) :: values
1229 integer,
intent(in),
optional :: ncstart(5)
1230 integer,
intent(in),
optional :: nccount(5)
1231 include
"write_vardata_code.f90"
1232 end subroutine write_vardata_5d_char
1234 subroutine read_attribute_int_scalar(dset, attname, values, varname, errcode)
1235 integer,
intent(inout) :: values
1236 include
"read_scalar_attribute_code.f90"
1237 end subroutine read_attribute_int_scalar
1239 subroutine read_attribute_short_scalar(dset, attname, values, varname, errcode)
1240 integer(2),
intent(inout) :: values
1241 include
"read_scalar_attribute_code.f90"
1242 end subroutine read_attribute_short_scalar
1244 subroutine read_attribute_byte_scalar(dset, attname, values, varname, errcode)
1245 integer(1),
intent(inout) :: values
1246 include
"read_scalar_attribute_code.f90"
1247 end subroutine read_attribute_byte_scalar
1249 subroutine read_attribute_r4_scalar(dset, attname, values, varname, errcode)
1250 real(4),
intent(inout) :: values
1251 include
"read_scalar_attribute_code.f90"
1252 end subroutine read_attribute_r4_scalar
1254 subroutine read_attribute_r8_scalar(dset, attname, values, varname, errcode)
1255 real(8),
intent(inout) :: values
1256 include
"read_scalar_attribute_code.f90"
1257 end subroutine read_attribute_r8_scalar
1259 subroutine read_attribute_r4_1d(dset, attname, values, varname, errcode)
1260 real(4),
intent(inout),
allocatable,
dimension(:) :: values
1261 include
"read_attribute_code.f90"
1262 end subroutine read_attribute_r4_1d
1264 subroutine read_attribute_r8_1d(dset, attname, values, varname, errcode)
1265 real(8),
intent(inout),
allocatable,
dimension(:) :: values
1266 include
"read_attribute_code.f90"
1267 end subroutine read_attribute_r8_1d
1269 subroutine read_attribute_int_1d(dset, attname, values, varname, errcode)
1270 integer,
intent(inout),
allocatable,
dimension(:) :: values
1271 include
"read_attribute_code.f90"
1272 end subroutine read_attribute_int_1d
1274 subroutine read_attribute_short_1d(dset, attname, values, varname, errcode)
1275 integer(2),
intent(inout),
allocatable,
dimension(:) :: values
1276 include
"read_attribute_code.f90"
1277 end subroutine read_attribute_short_1d
1279 subroutine read_attribute_byte_1d(dset, attname, values, varname, errcode)
1280 integer(1),
intent(inout),
allocatable,
dimension(:) :: values
1281 include
"read_attribute_code.f90"
1282 end subroutine read_attribute_byte_1d
1284 subroutine read_attribute_char(dset, attname, values, varname, errcode)
1285 character(len=*),
intent(inout) :: values
1286 include
"read_scalar_attribute_code.f90"
1287 end subroutine read_attribute_char
1289 subroutine write_attribute_int_scalar(dset, attname, values, varname, errcode)
1290 integer,
intent(in) :: values
1291 include
"write_attribute_code.f90"
1292 end subroutine write_attribute_int_scalar
1294 subroutine write_attribute_short_scalar(dset, attname, values, varname, errcode)
1295 integer(2),
intent(in) :: values
1296 include
"write_attribute_code.f90"
1297 end subroutine write_attribute_short_scalar
1299 subroutine write_attribute_byte_scalar(dset, attname, values, varname, errcode)
1300 integer(1),
intent(in) :: values
1301 include
"write_attribute_code.f90"
1302 end subroutine write_attribute_byte_scalar
1304 subroutine write_attribute_r4_scalar(dset, attname, values, varname, errcode)
1305 real(4),
intent(in) :: values
1306 include
"write_attribute_code.f90"
1307 end subroutine write_attribute_r4_scalar
1309 subroutine write_attribute_r8_scalar(dset, attname, values, varname, errcode)
1310 real(8),
intent(in) :: values
1311 include
"write_attribute_code.f90"
1312 end subroutine write_attribute_r8_scalar
1314 subroutine write_attribute_r4_1d(dset, attname, values, varname, errcode)
1315 real(4),
intent(in),
allocatable,
dimension(:) :: values
1316 include
"write_attribute_code.f90"
1317 end subroutine write_attribute_r4_1d
1319 subroutine write_attribute_r8_1d(dset, attname, values, varname, errcode)
1320 real(8),
intent(in),
allocatable,
dimension(:) :: values
1321 include
"write_attribute_code.f90"
1322 end subroutine write_attribute_r8_1d
1324 subroutine write_attribute_int_1d(dset, attname, values, varname, errcode)
1325 integer,
intent(in),
allocatable,
dimension(:) :: values
1326 include
"write_attribute_code.f90"
1327 end subroutine write_attribute_int_1d
1329 subroutine write_attribute_short_1d(dset, attname, values, varname, errcode)
1330 integer(2),
intent(in),
allocatable,
dimension(:) :: values
1331 include
"write_attribute_code.f90"
1332 end subroutine write_attribute_short_1d
1334 subroutine write_attribute_byte_1d(dset, attname, values, varname, errcode)
1335 integer(1),
intent(in),
allocatable,
dimension(:) :: values
1336 include
"write_attribute_code.f90"
1337 end subroutine write_attribute_byte_1d
1339 subroutine write_attribute_char(dset, attname, values, varname, errcode)
1340 character(len=*),
intent(in) :: values
1341 include
"write_attribute_code.f90"
1342 end subroutine write_attribute_char
1347 type(dataset),
intent(in) :: dset
1349 character(len=nf90_max_name) :: time_units
1351 call read_attribute(dset,
'units', time_units,
'time')
1352 ipos1 = scan(time_units,
"since",back=.true.)+1
1353 ipos2 = scan(time_units,
"-",back=.false.)-1
1354 read(time_units(ipos1:ipos2),*) idate(1)
1355 ipos1 = ipos2+2; ipos2=ipos1+1
1356 read(time_units(ipos1:ipos2),*) idate(2)
1357 ipos1 = ipos2+2; ipos2=ipos1+1
1358 read(time_units(ipos1:ipos2),*) idate(3)
1359 ipos1 = scan(time_units,
":")-2
1361 read(time_units(ipos1:ipos2),*) idate(4)
1364 read(time_units(ipos1:ipos2),*) idate(5)
1367 read(time_units(ipos1:ipos2),*) idate(6)
1374 character(len=*),
intent(in),
optional :: time_measure
1375 integer,
intent(in) :: idate(6)
1376 character(len=12) :: timechar
1377 character(len=nf90_max_name) :: time_units
1378 if (
present(time_measure))
then
1379 timechar = trim(time_measure)
1383 write(time_units,101) idate
1384 101
format(
' since ',i4.4,
'-',i2.2,
'-',i2.2,
' ',&
1385 i2.2,
':',i2.2,
':',i2.2)
1386 time_units = trim(adjustl(timechar))//time_units
1389 subroutine quantize_data_2d(dataIn, dataOut, nbits, compress_err)
1390 real(4),
intent(in) :: datain(:,:)
1391 real(4),
intent(out) :: dataout(:,:)
1392 include
"quantize_data_code.f90"
1393 end subroutine quantize_data_2d
1395 subroutine quantize_data_3d(dataIn, dataOut, nbits, compress_err)
1396 real(4),
intent(in) :: datain(:,:,:)
1397 real(4),
intent(out) :: dataout(:,:,:)
1398 include
"quantize_data_code.f90"
1399 end subroutine quantize_data_3d
1401 subroutine quantize_data_4d(dataIn, dataOut, nbits, compress_err)
1402 real(4),
intent(in) :: datain(:,:,:,:)
1403 real(4),
intent(out) :: dataout(:,:,:,:)
1404 include
"quantize_data_code.f90"
1405 end subroutine quantize_data_4d
1407 subroutine quantize_data_5d(dataIn, dataOut, nbits, compress_err)
1408 real(4),
intent(in) :: datain(:,:,:,:,:)
1409 real(4),
intent(out) :: dataout(:,:,:,:,:)
1410 include
"quantize_data_code.f90"
1411 end subroutine quantize_data_5d