gtdata_internal_map Module Reference

Data Types

interface  dimrange
 
type  gt_dimmap
 
type  map_table_entry
 

Functions/Subroutines

subroutine dimrange_by_dimno (var, dimno, dimlo, dimhi)
 
subroutine map_dup (var, source_var)
 
subroutine, public map_create (var, class, cid, ndims, allcount, stat)
 
subroutine, public maptabadd (mapid, vid)
 
subroutine, public maptabdelete (var, err)
 
subroutine, public map_lookup (var, vid, map, ndims)
 
subroutine map_set (var, map, stat)
 
subroutine, public var_class (var, class, cid)
 
subroutine map_set_ndims (var, ndims, stat)
 
subroutine map_set_rank (var, rank, stat)
 
subroutine, public map_to_internal_specs (var, specs, ndims)
 
subroutine map_allocate (map, ndims)
 
subroutine map_apply (var, map)
 
subroutine map_resize (var, ndims)
 
subroutine gtvar_dump (var)
 
integer function dimord_skip_compact (dimord, map)
 

Variables

type(map_table_entry), dimension(:), allocatable, target, save, private maptab
 
integer, parameter, private maptab_init_size = 16
 

Function/Subroutine Documentation

◆ dimord_skip_compact()

integer function gtdata_internal_map::dimord_skip_compact ( integer, intent(in)  dimord,
type(gt_dimmap), dimension(:), intent(in)  map 
)

Definition at line 520 of file gtdata_internal_map.f90.

References dc_trace::dbgmessage().

Referenced by gtvarexchdim(), gtvargetslice(), and gtvaropenbydimord().

520  ! 次元表の中で非縮退次元だけを数えた次元番号 dimord の次元を
521  ! 特定し、外部向けの次元番号を返す。
522  use dc_trace, only: dbgmessage
523  integer, intent(in):: dimord
524  type(gt_dimmap), intent(in):: map(:)
525  integer:: nd, id
526  result = -1
527  nd = 0
528  do, id = 1, size(map)
529  if (map(id)%count < 2) cycle
530  nd = nd + 1
531  if (nd < dimord) cycle
532  result = id
533  call dbgmessage('compact dim skip: %d <= %d', i=(/result, dimord/))
534  exit
535  enddo
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
integer, save, private i
Definition: dcunits_com.f90:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dimrange_by_dimno()

subroutine gtdata_internal_map::dimrange_by_dimno ( type(gt_variable), intent(in)  var,
integer, intent(in)  dimno,
integer, intent(out)  dimlo,
integer, intent(out)  dimhi 
)

Definition at line 84 of file gtdata_internal_map.f90.

References map_lookup().

84  ! 変数と次元番号を指定して、当該次元の内部的添字番号範囲を得る
85  use gtdata_types, only: gt_variable
86  use gtdata_generic, only: open, close
88  type(gt_variable), intent(in):: var
89  integer, intent(in):: dimno
90  integer, intent(out):: dimlo, dimhi
91  type(gt_variable):: dimvar
92  integer:: vid
93  call open(dimvar, var, dimno, count_compact=.true.)
94  call map_lookup(dimvar, vid=vid)
95  call dimrange(vid, dimlo, dimhi)
96  call close(dimvar)
Here is the call graph for this function:

◆ gtvar_dump()

subroutine gtdata_internal_map::gtvar_dump ( type(gt_variable), intent(in)  var)

Definition at line 482 of file gtdata_internal_map.f90.

References dc_trace::dbgmessage(), maptab, and gtdata_internal_vartable::vartable_dump().

Referenced by gtvarcreate(), gtvarcreated(), gtvargetdouble(), gtvargetint(), gtvargetreal(), gtvarlimit(), gtvaropen(), gtvarslice(), gtvarslicec(), and gtvarxformbinary().

482  ! 変数のプロパティを出力
483  use gtdata_types, only: gt_variable
485  use dc_trace, only: debug, dbgmessage
486  type(gt_variable), intent(in):: var
487  integer:: idim, imap
488  logical:: dbg_mode
489  continue
490  call debug( dbg_mode )
491  if (.not. dbg_mode) return
492  imap = var%mapid
493  if (imap < 1 .or. imap > size(maptab)) then
494  call dbgmessage('[gt_variable %d: invalid id]', i=(/imap/))
495  return
496  endif
497  if (associated(maptab(imap)%map)) then
498  call dbgmessage('[gt_variable %d: ndims=%d, map.size=%d]', &
499  & i=(/imap, maptab(imap)%ndims, size(maptab(imap)%map)/))
500  do, idim = 1, size(maptab(imap)%map)
501  call dbgmessage('[dim%d dimno=%d ofs=%d step=%d' &
502  &// ' all=%d start=%d count=%d stride=%d url=%c]', &
503  & c1=trim(maptab(imap)%map(idim)%url), &
504  & i=(/idim, maptab(imap)%map(idim)%dimno, &
505  & maptab(imap)%map(idim)%offset, &
506  & maptab(imap)%map(idim)%step, &
507  & maptab(imap)%map(idim)%allcount, &
508  & maptab(imap)%map(idim)%start, &
509  & maptab(imap)%map(idim)%count, &
510  & maptab(imap)%map(idim)%stride/))
511  enddo
512  else
513  call dbgmessage('[gt_variable %d: ndims=%d, map=null]', &
514  & i=(/imap, maptab(imap)%ndims/))
515  endif
516  call vartable_dump(maptab(imap)%vid)
subroutine, public vartable_dump(vid)
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
integer, save, private i
Definition: dcunits_com.f90:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ map_allocate()

subroutine gtdata_internal_map::map_allocate ( type(gt_dimmap), dimension(:), pointer  map,
integer, intent(in)  ndims 
)

Definition at line 404 of file gtdata_internal_map.f90.

Referenced by gtvarxformbinary(), map_create(), and map_resize().

404  ! 次元表エントリに ndims 個のエントリを割り付け初期化する。
405  type(gt_dimmap), pointer:: map(:)
406  integer, intent(in):: ndims
407  if (ndims <= 0) then
408  nullify(map)
409  return
410  endif
411  allocate(map(1:ndims))
412  map(1:ndims)%dimno = -1
413  map(1:ndims)%url = ' '
414  map(1:ndims)%allcount = 0
415  map(1:ndims)%offset = 0
416  map(1:ndims)%step = 1
417  map(1:ndims)%start = 1
418  map(1:ndims)%count = 0
419  map(1:ndims)%stride = 1
420  map(1:ndims)%scalar = .false.
Here is the caller graph for this function:

◆ map_apply()

subroutine gtdata_internal_map::map_apply ( type(gt_variable), intent(inout)  var,
type(gt_dimmap), dimension(:), pointer  map 
)

Definition at line 424 of file gtdata_internal_map.f90.

References maptab.

Referenced by gtvarxformbinary().

424  ! 変数 var にマップ表 map を組み合わせる
425  use gtdata_types, only: gt_variable
426  type(gt_variable), intent(inout):: var
427  type(gt_dimmap), pointer:: map(:)
428  type(gt_dimmap), pointer:: tmpmap(:), varmap
429  integer:: i, nd
430  nd = size(map)
431  allocate(tmpmap(nd))
432  do, i = 1, nd
433  tmpmap(i)%allcount = map(i)%allcount
434  tmpmap(i)%count = map(i)%count
435  if (map(i)%dimno > 0) then
436  varmap => maptab(var%mapid)%map(map(i)%dimno)
437  tmpmap(i)%url = varmap%url
438  tmpmap(i)%dimno = varmap%dimno
439  tmpmap(i)%offset = varmap%offset + map(i)%offset
440  tmpmap(i)%step = varmap%step * map(i)%step
441  else
442  tmpmap(i)%url = map(i)%url
443  tmpmap(i)%dimno = 0
444  tmpmap(i)%offset = map(i)%offset
445  tmpmap(i)%step = map(i)%step
446  endif
447  enddo
448  deallocate(map)
449  map => tmpmap
integer, save, private i
Definition: dcunits_com.f90:42
Here is the caller graph for this function:

◆ map_create()

subroutine, public gtdata_internal_map::map_create ( type(gt_variable), intent(out)  var,
integer, intent(in)  class,
integer, intent(in)  cid,
integer, intent(in)  ndims,
integer, dimension(:), intent(in)  allcount,
integer, intent(out)  stat 
)

Definition at line 134 of file gtdata_internal_map.f90.

References dc_error::dc_noerr, dc_error::gt_enomoredims, map_allocate(), maptab, maptabadd(), and gtdata_internal_vartable::vartableadd().

Referenced by gtvarcreate(), gtvarcreated(), gtvaropen(), and gtvaropenbydimord().

134  ! 変数 var を作成する。内部種別 class, 内部識別子 cid,
135  ! 外見的次元数 ndims, 外見的次元長 allcount(:) を与える。
136  ! オフセットゼロを仮定して諸元の初期化が行われる。
137  use gtdata_types, only: gt_variable
139  use dc_error, only: nf90_enotvar, gt_enomoredims, dc_noerr
140  type(gt_variable), intent(out):: var
141  integer, intent(in):: class, cid, ndims, allcount(:)
142  integer, intent(out):: stat
143  type(gt_dimmap), pointer:: map(:)
144  integer:: vid, i
145  continue
146 
147  stat = dc_noerr
148  if ( ndims < 0 ) then
149  stat = gt_enomoredims
150  goto 999
151  end if
152  call vartableadd(vid, class, cid)
153  call maptabadd(var%mapid, vid)
154  if (ndims > 0) then
155  call map_allocate(map, ndims)
156  maptab(var%mapid)%ndims = ndims
157  maptab(var%mapid)%map => map
158 
159  do, i = 1, ndims
160  map(i)%dimno = i
161  map(i)%allcount = allcount(i)
162  map(i)%count = allcount(i)
163  map(i)%offset = 0
164  map(i)%start = 1
165  map(i)%step = 1
166  map(i)%stride = 1
167  map(i)%scalar = .false.
168  enddo
169  else
170  ! スカラー変数 (ndims = 0) の場合
171  call map_allocate(map, 1)
172  maptab(var%mapid)%ndims = 0
173  maptab(var%mapid)%map => map
174  map(1)%dimno = 1
175  map(1)%allcount = 1
176  map(1)%count = 1
177  map(1)%offset = 0
178  map(1)%start = 1
179  map(1)%step = 1
180  map(1)%stride = 1
181  map(1)%scalar = .true.
182  end if
183 
184 999 continue
185  return
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine, public vartableadd(vid, class, cid)
integer, parameter, public gt_enomoredims
Definition: dc_error.f90:528
integer, save, private i
Definition: dcunits_com.f90:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ map_dup()

subroutine gtdata_internal_map::map_dup ( type(gt_variable), intent(out)  var,
type(gt_variable), intent(in)  source_var 
)

Definition at line 100 of file gtdata_internal_map.f90.

References dc_trace::dbgmessage(), map_lookup(), maptab, maptabadd(), gtdata_internal_vartable::vartableadd(), and gtdata_internal_vartable::vartablelookup().

Referenced by gtvaropenbydimord().

100  ! 変数 source_var の複写 var を作成する
101  use gtdata_types, only: gt_variable
103  use dc_trace, only: dbgmessage
104  type(gt_variable), intent(out):: var
105  type(gt_variable), intent(in):: source_var
106  integer:: vid, mid1, mid2, vid2, nd, class, cid
107  call map_lookup(source_var, vid=vid)
108  if (vid < 0) then
109  var = gt_variable(-1)
110  return
111  endif
112  if (vid == 0) then
113  vid2 = 0
114  else
115  call vartablelookup(vid, class=class, cid=cid)
116  call vartableadd(vid2, class, cid)
117  endif
118  call maptabadd(var%mapid, vid2)
119  mid1 = source_var%mapid
120  mid2 = var%mapid
121  maptab(mid2)%ndims = maptab(mid1)%ndims
122  if (associated(maptab(mid1)%map)) then
123  nd = size(maptab(mid1)%map)
124  allocate(maptab(mid2)%map(nd))
125  maptab(mid2)%map(1:nd) = maptab(mid1)%map(1:nd)
126  else
127  nullify(maptab(mid2)%map)
128  endif
129  call dbgmessage('map_dup mapid(%d from %d) vid(%d from %d)', &
130  & i=(/mid2, mid1, maptab(mid2)%vid, maptab(mid1)%vid/))
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
subroutine, public vartablelookup(vid, class, cid)
subroutine, public vartableadd(vid, class, cid)
integer, save, private i
Definition: dcunits_com.f90:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ map_lookup()

subroutine, public gtdata_internal_map::map_lookup ( type(gt_variable), intent(in)  var,
integer, intent(out), optional  vid,
type(gt_dimmap), dimension(:), intent(out), optional  map,
integer, intent(out), optional  ndims 
)

Definition at line 252 of file gtdata_internal_map.f90.

References maptab, and gtdata_internal_vartable::vid_invalid.

Referenced by dimrange_by_dimno(), gtvaradddim(), gtvarclose(), gtvardeldim(), gtvarexchdim(), gtvargetslice(), gtvarlimit_iiii(), gtvaropenbydimord(), gtvarslice(), gtvarslicenext(), internal_get_allcount(), internal_get_alldims(), internal_get_rank(), internal_get_size(), map_dup(), map_set_ndims(), map_set_rank(), map_to_internal_specs(), and var_class().

252  ! 同じファイル番号の変数表の中身を返す
253  use gtdata_types, only: gt_variable
254  type(gt_variable), intent(in):: var
255  integer, intent(out), optional:: vid
256  type(gt_dimmap), intent(out), optional:: map(:)
257  integer, intent(out), optional:: ndims
258  if (.not. allocated(maptab)) goto 999
259  if (var%mapid <= 0 .or. var%mapid > size(maptab)) goto 999
260  if (maptab(var%mapid)%vid == vid_invalid) goto 999
261  if (present(vid)) vid = maptab(var%mapid)%vid
262  if (present(map)) map(:) = maptab(var%mapid)%map(1:size(map))
263  if (present(ndims)) ndims = maptab(var%mapid)%ndims
264  return
265 999 continue
266  if (present(vid)) vid = vid_invalid
267  if (present(map)) then
268  map(:)%dimno = -1
269  map(:)%url = " "
270  endif
271  if (present(ndims)) ndims = 0
Here is the caller graph for this function:

◆ map_resize()

subroutine gtdata_internal_map::map_resize ( type(gt_variable), intent(in)  var,
integer, intent(in)  ndims 
)

Definition at line 453 of file gtdata_internal_map.f90.

References map_allocate(), and maptab.

Referenced by gtvaradddim().

453  ! 変数 var の次元表の大きさを変える
454  use gtdata_types, only: gt_variable
455  type(gt_variable), intent(in):: var
456  integer, intent(in):: ndims
457  type(gt_dimmap), pointer:: newmap(:)
458  type(gt_dimmap), pointer:: tmpmap(:)
459  integer:: n
460  if (associated(maptab(var%mapid)%map)) then
461  tmpmap => maptab(var%mapid)%map
462  call map_allocate(newmap, ndims)
463  n = min(size(tmpmap), ndims)
464  newmap(1:n) = tmpmap(1:n)
465  deallocate(tmpmap)
466  maptab(var%mapid)%map => newmap
467  newmap(n+1:ndims)%dimno = -1
468  newmap(n+1:ndims)%url = ' '
469  newmap(n+1:ndims)%allcount = 0
470  newmap(n+1:ndims)%offset = 0
471  newmap(n+1:ndims)%step = 1
472  newmap(n+1:ndims)%start = 1
473  newmap(n+1:ndims)%count = 0
474  newmap(n+1:ndims)%stride = 1
475  else
476  call map_allocate(maptab(var%mapid)%map, ndims)
477  n = 1
478  endif
Here is the call graph for this function:
Here is the caller graph for this function:

◆ map_set()

subroutine gtdata_internal_map::map_set ( type(gt_variable), intent(in)  var,
type(gt_dimmap), dimension(:), intent(in)  map,
integer, intent(out)  stat 
)

Definition at line 275 of file gtdata_internal_map.f90.

References dc_error::dc_noerr, dc_error::gt_enomoredims, maptab, and gtdata_internal_vartable::vid_invalid.

Referenced by gtvaradddim(), gtvardeldim(), gtvarexchdim(), gtvarlimit_iiii(), gtvaropenbydimord(), gtvarslice(), and gtvarslicenext().

275  ! 同じファイル番号の変数表の値を設定する
276  use gtdata_types, only: gt_variable
277  use dc_error, only: nf90_enotvar, gt_enomoredims, dc_noerr
278  type(gt_variable), intent(in):: var
279  type(gt_dimmap), intent(in):: map(:)
280  integer, intent(out):: stat
281  if (.not. allocated(maptab)) goto 999
282  if (var%mapid <= 0 .or. var%mapid > size(maptab)) goto 999
283  if (maptab(var%mapid)%vid == vid_invalid) goto 999
284  if (size(map) > size(maptab(var%mapid)%map)) then
285  stat = gt_enomoredims
286  return
287  endif
288  maptab(var%mapid)%map(1:size(map)) = map(:)
289  stat = dc_noerr
290  return
291 999 continue
292  stat = nf90_enotvar
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
integer, parameter, public gt_enomoredims
Definition: dc_error.f90:528
Here is the caller graph for this function:

◆ map_set_ndims()

subroutine gtdata_internal_map::map_set_ndims ( type(gt_variable), intent(in)  var,
integer, intent(in)  ndims,
integer, intent(out)  stat 
)

Definition at line 308 of file gtdata_internal_map.f90.

References dc_error::dc_noerr, dc_error::gt_enomoredims, map_lookup(), maptab, and gtdata_internal_vartable::vartablelookup().

Referenced by gtvaradddim(), gtvardeldim(), and gtvarexchdim().

308  ! 変数 var の次元数を ndims に変える。
309  use gtdata_types, only: gt_variable
311  use dc_error, only: nf90_enotvar, gt_enomoredims, dc_noerr
312  type(gt_variable), intent(in):: var
313  integer, intent(in):: ndims
314  integer, intent(out):: stat
315  integer:: vid
316  call map_lookup(var, vid=vid)
317  if (vid == vid_invalid) then
318  stat = nf90_enotvar
319  return
320  endif
321  if (.not. associated(maptab(var%mapid)%map)) then
322  if (ndims == 0) then
323  stat = dc_noerr
324  maptab(var%mapid)%ndims = 0
325  else
326  stat = gt_enomoredims
327  endif
328  else
329  if (ndims > size(maptab(var%mapid)%map)) then
330  stat = gt_enomoredims
331  else
332  stat = dc_noerr
333  maptab(var%mapid)%ndims = ndims
334  endif
335  endif
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine, public vartablelookup(vid, class, cid)
integer, parameter, public gt_enomoredims
Definition: dc_error.f90:528
Here is the call graph for this function:
Here is the caller graph for this function:

◆ map_set_rank()

subroutine gtdata_internal_map::map_set_rank ( type(gt_variable), intent(in)  var,
integer, intent(in)  rank,
integer, intent(out)  stat 
)

Definition at line 339 of file gtdata_internal_map.f90.

References dc_error::dc_noerr, dc_error::gt_enomoredims, map_lookup(), maptab, and gtdata_internal_vartable::vartablelookup().

Referenced by gtvargetpointerdouble1(), gtvargetpointerdouble2(), gtvargetpointerdouble3(), gtvargetpointerdouble4(), gtvargetpointerdouble5(), gtvargetpointerdouble6(), gtvargetpointerdouble7(), gtvargetpointerint1(), gtvargetpointerint2(), gtvargetpointerint3(), gtvargetpointerint4(), gtvargetpointerint5(), gtvargetpointerint6(), gtvargetpointerint7(), gtvargetpointerreal1(), gtvargetpointerreal2(), gtvargetpointerreal3(), gtvargetpointerreal4(), gtvargetpointerreal5(), gtvargetpointerreal6(), and gtvargetpointerreal7().

339  ! 変数 var のランク(非縮退次元数)を rank に減らすように
340  ! count 値を1に減らす。ランクを増やすことや外見次元数の操作はしない。
341  use gtdata_types, only: gt_variable
343  use dc_error, only: nf90_enotvar, gt_enomoredims, dc_noerr
344  type(gt_variable), intent(in):: var
345  integer, intent(in):: rank
346  integer, intent(out):: stat
347  type(gt_dimmap), pointer:: tmpmap(:)
348  integer:: ndims
349  integer:: vid, nd
350  call map_lookup(var, vid, ndims=ndims)
351  if (vid == vid_invalid) then
352  stat = nf90_enotvar
353  return
354  endif
355  if (ndims < rank) then
356  stat = gt_enomoredims
357  return
358  endif
359  tmpmap => maptab(var%mapid)%map
360  do, nd = ndims, 1, -1
361  if (count(tmpmap(1:ndims)%count > 1) <= rank) exit
362  tmpmap(nd)%count = 1
363  enddo
364  stat = dc_noerr
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine, public vartablelookup(vid, class, cid)
integer, parameter, public gt_enomoredims
Definition: dc_error.f90:528
Here is the call graph for this function:
Here is the caller graph for this function:

◆ map_to_internal_specs()

subroutine, public gtdata_internal_map::map_to_internal_specs ( type(gt_variable), intent(in)  var,
integer, dimension(:, :), pointer  specs,
integer, intent(out), optional  ndims 
)

Definition at line 368 of file gtdata_internal_map.f90.

References map_lookup(), maptab, and gtdata_internal_vartable::ndims().

Referenced by gtvargetdouble(), gtvargetint(), gtvargetreal(), gtvarputchar(), gtvarputdouble(), gtvarputint(), and gtvarputreal().

368  ! マップ表から netCDF の引数にふさわしい start, count, stride, imap
369  ! を作成する。ただし、stride が負になるばあいは対策されていない。
370  ! (暫定的に gdncvarget/gdncvarput が対応している)
371  use gtdata_types, only: gt_variable
372  use gtdata_internal_vartable, only: num_dimensions => ndims
373  type(gt_variable), intent(in):: var
374  integer, pointer:: specs(:, :)
375  integer, intent(out), optional:: ndims
376  type(gt_dimmap), pointer:: it
377  integer:: vid, i, j, imap, internal_ndims
378  integer:: external_ndims
379  continue
380  call map_lookup(var, vid, ndims=external_ndims)
381  internal_ndims = num_dimensions(vid)
382  if (present(ndims)) ndims = internal_ndims
383  allocate(specs(max(1, internal_ndims), 4))
384  specs(:, 1) = 1
385  specs(:, 2) = 1
386  specs(:, 3) = 1
387  specs(:, 4) = 0
388  imap = 1
389  do, i = 1, size(maptab(var%mapid)%map)
390  it => maptab(var%mapid)%map(i)
391  j = it%dimno
392  if (j > 0 .and. j <= internal_ndims) then
393  specs(j, 1) = it%start + it%offset
394  specs(j, 2) = it%count
395  if (i > external_ndims) specs(j, 2) = 1
396  specs(j, 3) = it%stride * it%step
397  specs(j, 4) = imap
398  endif
399  imap = imap * it%count
400  enddo
integer function, public ndims(vid)
integer, save, private i
Definition: dcunits_com.f90:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ maptabadd()

subroutine, public gtdata_internal_map::maptabadd ( integer, intent(out)  mapid,
integer, intent(in)  vid 
)

Definition at line 189 of file gtdata_internal_map.f90.

References maptab, maptab_init_size, and gtdata_internal_vartable::vid_invalid.

Referenced by map_create(), and map_dup().

189  ! すでに実体表に追加されたエントリ番号 vid を指定して、
190  ! マップ表にエントリを追加する。
191  integer, intent(out):: mapid
192  integer, intent(in):: vid
193  type(map_table_entry), allocatable:: tmp_maptab(:)
194  integer:: i, n
195  ! 必要なら初期確保
196  if (.not. allocated(maptab)) then
197  allocate(maptab(maptab_init_size))
198  maptab(:)%vid = vid_invalid
199  do, n = 1, maptab_init_size
200  nullify(maptab(n)%map)
201  enddo
202  endif
203  ! 空き地があればそこに割り当て
204  do, i = 1, size(maptab)
205  if (maptab(i)%vid == vid_invalid) then
206  mapid = i
207  maptab(mapid)%vid = vid
208  return
209  endif
210  enddo
211  ! 空き地はなかったのだから倍幅確保
212  n = size(maptab)
213  allocate(tmp_maptab(n))
214  tmp_maptab(:) = maptab(:)
215  deallocate(maptab)
216  allocate(maptab(n * 2))
217  ! 確保したところはクリア
218  maptab(1:n) = tmp_maptab(1:n)
219  do, i = n + 1, (2 * size(tmp_maptab))
220  maptab(i)%vid = vid_invalid
221  nullify(maptab(i)%map)
222  enddo
223  deallocate(tmp_maptab)
224  mapid = n + 1
225  maptab(mapid)%vid = vid
integer, save, private i
Definition: dcunits_com.f90:42
Here is the caller graph for this function:

◆ maptabdelete()

subroutine, public gtdata_internal_map::maptabdelete ( type(gt_variable), intent(in)  var,
logical, intent(out), optional  err 
)

Definition at line 229 of file gtdata_internal_map.f90.

References dc_trace::dbgmessage(), dc_error::dc_noerr, maptab, dc_error::storeerror(), and gtdata_internal_vartable::vid_invalid.

Referenced by gtvarclose().

229  ! 変数 var をマップ表から削除する。
230  ! 実体表には手をつけない。
231  use dc_error, only: nf90_enotvar, storeerror, dc_noerr
232  use gtdata_types, only: gt_variable
233  use dc_trace, only: dbgmessage
234  implicit none
235  type(gt_variable), intent(in):: var
236  logical, intent(out), optional:: err
237  integer:: mapid
238  mapid = var%mapid
239  if (.not. allocated(maptab)) goto 999
240  if (mapid <= 0 .or. mapid > size(maptab)) goto 999
241  if (maptab(mapid)%vid == vid_invalid) goto 999
242  maptab(mapid)%vid = vid_invalid
243  if (associated(maptab(mapid)%map)) deallocate(maptab(mapid)%map)
244  call storeerror(dc_noerr, 'maptabdelete', err)
245  call dbgmessage('gtdata_internal_map table %d deleted', i=(/mapid/))
246  return
247 999 continue
248  call storeerror(nf90_enotvar, 'maptabdelete', err)
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
integer, save, private i
Definition: dcunits_com.f90:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ var_class()

subroutine, public gtdata_internal_map::var_class ( type(gt_variable), intent(in)  var,
integer, intent(out), optional  class,
integer, intent(out), optional  cid 
)

Definition at line 297 of file gtdata_internal_map.f90.

References map_lookup(), and gtdata_internal_vartable::vartablelookup().

Referenced by gtvarattrnext(), gtvarattrrewind(), gtvarattrtrue(), gtvarcopyattr(), gtvarcreate(), gtvardelattr(), gtvardimname2ord(), gtvarequivalent(), gtvargetattrcc(), gtvargetattrd(), gtvargetattrda(), gtvargetattrdp(), gtvargetattri(), gtvargetattria(), gtvargetattrip(), gtvargetattrr(), gtvargetattrra(), gtvargetattrrp(), gtvargetdouble(), gtvargetint(), gtvargetreal(), gtvarinquire(), gtvarinquirea(), gtvaropenbydimord(), gtvarputattrchar(), gtvarputattrdouble(), gtvarputattrint(), gtvarputattrlogical(), gtvarputattrreal(), gtvarputchar(), gtvarputdouble(), gtvarputint(), gtvarputreal(), and gtvarsync().

297  ! 変数 var を指定して、内部種別 class, 内部識別子 cid を得る。
298  use gtdata_types, only: gt_variable
300  type(gt_variable), intent(in):: var
301  integer, intent(out), optional:: class, cid
302  integer:: vid
303  call map_lookup(var, vid=vid)
304  call vartablelookup(vid, class=class, cid=cid)
subroutine, public vartablelookup(vid, class, cid)
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ maptab

type(map_table_entry), dimension(:), allocatable, target, save, private gtdata_internal_map::maptab
private

◆ maptab_init_size

integer, parameter, private gtdata_internal_map::maptab_init_size = 16
private

Definition at line 69 of file gtdata_internal_map.f90.

Referenced by maptabadd().

69  integer, parameter:: maptab_init_size = 16