79 character(len=STRING):: url
125 integer,
parameter:: maptab_init_size = 16
130 private:: maptab, maptab_init_size
160 integer,
intent(in):: dimno
161 integer,
intent(out):: dimlo, dimhi
164 call open(dimvar, var, dimno, count_compact=.true., &
165 & inherit_slice=.false.)
190 integer:: vid, mid1, mid2, vid2, nd,
class, cid
203 mid1 = source_var%mapid
205 maptab(mid2)%ndims = maptab(mid1)%ndims
206 if (
associated(maptab(mid1)%map))
then
207 nd =
size(maptab(mid1)%map)
208 allocate(maptab(mid2)%map(nd))
209 maptab(mid2)%map(1:nd) = maptab(mid1)%map(1:nd)
211 nullify(maptab(mid2)%map)
213 call dbgmessage(
'map_dup mapid(%d from %d) vid(%d from %d)', &
214 & i=(/mid2, mid1, maptab(mid2)%vid, maptab(mid1)%vid/))
246 subroutine map_create(var, class, cid, ndims, allcount, stat)
251 integer,
intent(in)::
class, cid,
ndims, allcount(:)
252 integer,
intent(out):: stat
258 if (
ndims < 0 )
then
266 maptab(var%mapid)%ndims =
ndims
267 maptab(var%mapid)%map => map
271 map(i)%allcount = allcount(i)
272 map(i)%count = allcount(i)
277 map(i)%scalar = .false.
282 maptab(var%mapid)%ndims = 0
283 maptab(var%mapid)%map => map
291 map(1)%scalar = .true.
318 integer,
intent(out):: mapid
319 integer,
intent(in):: vid
323 if (.not.
allocated(maptab))
then
324 allocate(maptab(maptab_init_size))
325 maptab(:)%vid = vid_invalid
326 do, n = 1, maptab_init_size
327 nullify(maptab(n)%map)
331 do, i = 1,
size(maptab)
332 if (maptab(i)%vid == vid_invalid)
then
334 maptab(mapid)%vid = vid
340 allocate(tmp_maptab(n))
341 tmp_maptab(:) = maptab(:)
343 allocate(maptab(n * 2))
345 maptab(1:n) = tmp_maptab(1:n)
346 do, i = n + 1, (2 *
size(tmp_maptab))
347 maptab(i)%vid = vid_invalid
348 nullify(maptab(i)%map)
350 deallocate(tmp_maptab)
352 maptab(mapid)%vid = vid
380 logical,
intent(out),
optional:: err
383 if (.not.
allocated(maptab))
goto 999
384 if (mapid <= 0 .or. mapid >
size(maptab))
goto 999
385 if (maptab(mapid)%vid == vid_invalid)
goto 999
386 maptab(mapid)%vid = vid_invalid
387 if (
associated(maptab(mapid)%map))
deallocate(maptab(mapid)%map)
389 call dbgmessage(
'gtdata_internal_map table %d deleted', i=(/mapid/))
392 call storeerror(nf90_enotvar,
'maptabdelete', err)
415 integer,
intent(out),
optional:: vid
416 type(
gt_dimmap),
intent(out),
optional:: map(:)
417 integer,
intent(out),
optional:: ndims
418 if (.not.
allocated(maptab))
goto 999
419 if (var%mapid <= 0 .or. var%mapid >
size(maptab))
goto 999
420 if (maptab(var%mapid)%vid == vid_invalid)
goto 999
421 if (
present(vid)) vid = maptab(var%mapid)%vid
422 if (
present(map)) map(:) = maptab(var%mapid)%map(1:
size(map))
423 if (
present(ndims)) ndims = maptab(var%mapid)%ndims
426 if (
present(vid)) vid = vid_invalid
427 if (
present(map))
then
431 if (
present(ndims)) ndims = 0
454 integer,
intent(out):: stat
455 if (.not.
allocated(maptab))
goto 999
456 if (var%mapid <= 0 .or. var%mapid >
size(maptab))
goto 999
457 if (maptab(var%mapid)%vid == vid_invalid)
goto 999
458 if (
size(map) >
size(maptab(var%mapid)%map))
then
462 maptab(var%mapid)%map(1:
size(map)) = map(:)
488 integer,
intent(out),
optional::
class, cid
513 integer,
intent(in):: ndims
514 integer,
intent(out):: stat
517 if (vid == vid_invalid)
then
521 if (.not.
associated(maptab(var%mapid)%map))
then
524 maptab(var%mapid)%ndims = 0
529 if (ndims >
size(maptab(var%mapid)%map))
then
533 maptab(var%mapid)%ndims = ndims
564 integer,
intent(in):: rank
565 integer,
intent(out):: stat
570 if (vid == vid_invalid)
then
574 if (ndims < rank)
then
578 tmpmap => maptab(var%mapid)%map
579 do, nd = ndims, 1, -1
580 if (count(tmpmap(1:ndims)%count > 1) <= rank)
exit
613 integer,
pointer:: specs(:, :)
614 integer,
intent(out),
optional::
ndims
616 integer:: vid, i, j, imap, internal_ndims
617 integer:: external_ndims
620 internal_ndims = num_dimensions(vid)
622 allocate(specs(max(1, internal_ndims), 4))
628 do, i = 1,
size(maptab(var%mapid)%map)
629 it => maptab(var%mapid)%map(i)
631 if (j > 0 .and. j <= internal_ndims)
then
632 specs(j, 1) = it%start + it%offset
633 specs(j, 2) = it%count
634 if (i > external_ndims) specs(j, 2) = 1
635 specs(j, 3) = it%stride * it%step
638 imap = imap * it%count
657 integer,
intent(in):: ndims
662 allocate(map(1:ndims))
663 map(1:ndims)%dimno = -1
664 map(1:ndims)%url =
' '
665 map(1:ndims)%allcount = 0
666 map(1:ndims)%offset = 0
667 map(1:ndims)%step = 1
668 map(1:ndims)%start = 1
669 map(1:ndims)%count = 0
670 map(1:ndims)%stride = 1
671 map(1:ndims)%scalar = .false.
691 type(
gt_dimmap),
pointer:: tmpmap(:), varmap
696 tmpmap(i)%allcount = map(i)%allcount
697 tmpmap(i)%count = map(i)%count
698 if (map(i)%dimno > 0)
then
699 varmap => maptab(var%mapid)%map(map(i)%dimno)
700 tmpmap(i)%url = varmap%url
701 tmpmap(i)%dimno = varmap%dimno
702 tmpmap(i)%offset = varmap%offset + map(i)%offset
703 tmpmap(i)%step = varmap%step * map(i)%step
705 tmpmap(i)%url = map(i)%url
707 tmpmap(i)%offset = map(i)%offset
708 tmpmap(i)%step = map(i)%step
731 integer,
intent(in):: ndims
735 if (
associated(maptab(var%mapid)%map))
then
736 tmpmap => maptab(var%mapid)%map
738 n = min(
size(tmpmap), ndims)
739 newmap(1:n) = tmpmap(1:n)
741 maptab(var%mapid)%map => newmap
742 newmap(n+1:ndims)%dimno = -1
743 newmap(n+1:ndims)%url =
' '
744 newmap(n+1:ndims)%allcount = 0
745 newmap(n+1:ndims)%offset = 0
746 newmap(n+1:ndims)%step = 1
747 newmap(n+1:ndims)%start = 1
748 newmap(n+1:ndims)%count = 0
749 newmap(n+1:ndims)%stride = 1
775 call debug( dbg_mode )
776 if (.not. dbg_mode)
return
778 if (imap < 1 .or. imap >
size(maptab))
then
779 call dbgmessage(
'[gt_variable %d: invalid id]', i=(/imap/))
782 if (
associated(maptab(imap)%map))
then
783 call dbgmessage(
'[gt_variable %d: ndims=%d, map.size=%d]', &
784 & i=(/imap, maptab(imap)%ndims,
size(maptab(imap)%map)/))
785 do, idim = 1,
size(maptab(imap)%map)
786 call dbgmessage(
'[dim%d dimno=%d ofs=%d step=%d' &
787 &//
' all=%d start=%d count=%d stride=%d url=%c]', &
788 & c1=trim(maptab(imap)%map(idim)%url), &
789 & i=(/idim, maptab(imap)%map(idim)%dimno, &
790 & maptab(imap)%map(idim)%offset, &
791 & maptab(imap)%map(idim)%step, &
792 & maptab(imap)%map(idim)%allcount, &
793 & maptab(imap)%map(idim)%start, &
794 & maptab(imap)%map(idim)%count, &
795 & maptab(imap)%map(idim)%stride/))
798 call dbgmessage(
'[gt_variable %d: ndims=%d, map=null]', &
799 & i=(/imap, maptab(imap)%ndims/))
828 integer,
intent(in):: dimord
833 do, id = 1,
size(map)
834 if (map(id)%count < 2) cycle
836 if (nd < dimord) cycle
838 call dbgmessage(
'compact dim skip: %d <= %d', i=(/result, dimord/))
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
エラー等を保持
integer, parameter, public gt_enomoredims
-101 以下: データ構造のエラー
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
subroutine, public map_lookup(var, vid, map, ndims)
subroutine map_apply(var, map)
subroutine map_set_ndims(var, ndims, stat)
subroutine map_set(var, map, stat)
subroutine, public map_to_internal_specs(var, specs, ndims)
integer function dimord_skip_compact(dimord, map)
subroutine, public maptabdelete(var, err)
subroutine map_allocate(map, ndims)
subroutine, public var_class(var, class, cid)
subroutine, public maptabadd(mapid, vid)
subroutine dimrange_by_dimno(var, dimno, dimlo, dimhi)
subroutine, public map_create(var, class, cid, ndims, allcount, stat)
subroutine map_dup(var, source_var)
subroutine gtvar_dump(var)
subroutine map_set_rank(var, rank, stat)
subroutine map_resize(var, ndims)
subroutine, public vartablelookup(vid, class, cid)
integer, parameter, public vid_invalid
subroutine, public vartableadd(vid, class, cid)
integer, parameter, public vtb_class_netcdf
subroutine, public vartable_dump(vid)
integer function, public ndims(vid)
integer, parameter, public vtb_class_unused