gtdata_internal_vartable Module Reference

Data Types

interface  dimrange
 
type  var_table_entry
 

Functions/Subroutines

subroutine, public vartable_dump (vid)
 
subroutine, private entry_cleanup (vtb_entry)
 
subroutine, public vartableadd (vid, class, cid)
 
subroutine, public vartabledelete (vid, action, err)
 
subroutine, public vartablelookup (vid, class, cid)
 
subroutine, public vartablemore (vid, err)
 
subroutine dimrange_direct (vid, dimlo, dimhi)
 
integer function, public ndims (vid)
 
subroutine, public query_growable (vid, result)
 

Variables

integer, parameter, public vid_invalid = -1
 
integer, parameter, public vtb_class_unused = 0
 
integer, parameter, public vtb_class_memory = 1
 
integer, parameter, public vtb_class_netcdf = 2
 
integer, parameter, public classes_max = 2
 
type(var_table_entry), dimension(:), allocatable, save, private table
 
integer, parameter, private table_ini_size = 16
 
type(gd_nc_variable_search), save, public gdnc_search
 

Function/Subroutine Documentation

◆ dimrange_direct()

subroutine gtdata_internal_vartable::dimrange_direct ( integer, intent(in)  vid,
integer, intent(out)  dimlo,
integer, intent(out)  dimhi 
)
private

Definition at line 188 of file gtdata_internal_vartable.f90.

References dc_error::gt_efake, dc_error::storeerror(), vartablelookup(), vtb_class_memory, and vtb_class_netcdf.

189  use gtdata_netcdf_generic, only: gdncinquire => inquire
190  use dc_error, only: storeerror, nf90_einval, gt_efake
191  integer, intent(in):: vid
192  integer, intent(out):: dimlo, dimhi
193  integer:: class, cid
194  call vartablelookup(vid, class, cid)
195  select case(class)
196  case(vtb_class_memory)
197  call storeerror(gt_efake, 'gtdata::dimrange')
198  case(vtb_class_netcdf)
199  dimlo = 1
200  call gdncinquire(gd_nc_variable(cid), dimlen=dimhi)
201  case default
202  call storeerror(nf90_einval, 'gtdata::dimrange')
203  end select
integer, parameter, public gt_efake
Definition: dc_error.f90:523
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
Here is the call graph for this function:

◆ entry_cleanup()

subroutine, private gtdata_internal_vartable::entry_cleanup ( type(var_table_entry), dimension(:), intent(out)  vtb_entry)
private

Definition at line 89 of file gtdata_internal_vartable.f90.

References vtb_class_unused.

Referenced by vartableadd().

89  type(var_table_entry), intent(out):: vtb_entry(:)
90  vtb_entry(:)%class = vtb_class_unused
91  vtb_entry(:)%cid = -1
92  vtb_entry(:)%refcount = 0
Here is the caller graph for this function:

◆ ndims()

integer function, public gtdata_internal_vartable::ndims ( integer, intent(in)  vid)

Definition at line 207 of file gtdata_internal_vartable.f90.

References dc_error::storeerror(), vartablelookup(), vtb_class_memory, and vtb_class_netcdf.

Referenced by gtdata_internal_map::map_to_internal_specs().

208  use gtdata_netcdf_generic, only: gdncinquire => inquire
209  use dc_error, only: storeerror, nf90_einval
210  integer, intent(in):: vid
211  integer:: class, cid
212  call vartablelookup(vid, class, cid)
213  select case(class)
214  case(vtb_class_memory)
215  result = 1
216  case(vtb_class_netcdf)
217  call gdncinquire(gd_nc_variable(cid), ndims=result)
218  case default
219  call storeerror(nf90_einval, 'gtdata::ndims')
220  end select
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
Here is the call graph for this function:
Here is the caller graph for this function:

◆ query_growable()

subroutine, public gtdata_internal_vartable::query_growable ( integer, intent(in)  vid,
logical, intent(out)  result 
)

Definition at line 224 of file gtdata_internal_vartable.f90.

References dc_error::storeerror(), vartablelookup(), vtb_class_memory, and vtb_class_netcdf.

Referenced by gtvarslice().

225  use gtdata_netcdf_generic, only: inquire
226  use dc_error, only: storeerror, nf90_einval
227  integer, intent(in):: vid
228  logical, intent(out):: result
229  integer:: class, cid
230  call vartablelookup(vid, class, cid)
231  select case(class)
232  case(vtb_class_memory)
233  result = .false.
234  case(vtb_class_netcdf)
235  call inquire(gd_nc_variable(cid), growable=result)
236  case default
237  call storeerror(nf90_einval, 'gtdata::ndims')
238  end select
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
Here is the call graph for this function:
Here is the caller graph for this function:

◆ vartable_dump()

subroutine, public gtdata_internal_vartable::vartable_dump ( integer, intent(in)  vid)

Definition at line 64 of file gtdata_internal_vartable.f90.

References dc_trace::dbgmessage(), table, vtb_class_memory, and vtb_class_netcdf.

Referenced by gtdata_internal_map::gtvar_dump().

64  use dc_trace, only: dbgmessage
67  integer, intent(in):: vid
68  character(10):: class
69  if (.not. allocated(table)) return
70  if (vid <= 0 .or. vid > size(table)) return
71  select case(table(vid)%class)
72  case(vtb_class_netcdf)
73  class = 'netcdf'
74  case(vtb_class_memory)
75  class = 'memory'
76  case default
77  write(class, fmt="(i10)") table(vid)%class
78  end select
79  call dbgmessage('[vartable %d: class=%c cid=%d ref=%d]', &
80  & i=(/vid, table(vid)%cid, table(vid)%refcount/), &
81  & c1=trim(class))
82  select case(table(vid)%class)
83  case(vtb_class_netcdf)
84  call dbgmessage('[%c]', c1=trim(tostring(gd_nc_variable(table(vid)%cid))))
85  end select
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:

◆ vartableadd()

subroutine, public gtdata_internal_vartable::vartableadd ( integer, intent(out)  vid,
integer, intent(in)  class,
integer, intent(in)  cid 
)

Definition at line 96 of file gtdata_internal_vartable.f90.

References dc_trace::dbgmessage(), entry_cleanup(), table, table_ini_size, vid_invalid, and vtb_class_unused.

Referenced by gtdata_internal_map::map_create(), and gtdata_internal_map::map_dup().

96  use dc_trace, only: dbgmessage
97  integer, intent(out):: vid
98  integer, intent(in):: class, cid
99  type(var_table_entry), allocatable:: tmp_table(:)
100  integer:: n
101  continue
102  ! 必要ならば初期幅確保
103  if (.not. allocated(table)) then
104  allocate(table(table_ini_size))
105  call entry_cleanup(table(:))
106  endif
107  ! 該当があれば参照数増加
108  do, n = 1, size(table)
109  if (table(n)%class == class .and. table(n)%cid == cid) then
110  table(n)%refcount = table(n)%refcount + 1
111  call dbgmessage('gtdata_vartable.add(class=%d cid=%d) found (ref=%d)', &
112  & i=(/table(n)%class, table(n)%cid, table(n)%refcount/))
113  vid = n
114  return
115  endif
116  enddo
117  ! もし空きが無ければ表を拡張
118  if (all(table(:)%class /= vtb_class_unused)) then
119  n = size(table)
120  allocate(tmp_table(n))
121  tmp_table(:) = table(:)
122  deallocate(table)
123  allocate(table(n * 2))
124  table(1:n) = tmp_table(1:n)
125  deallocate(tmp_table)
126  table(n+1:n*2) = var_table_entry(vtb_class_unused, -1, 0)
127  endif
128  do, n = 1, size(table)
129  if (table(n)%class == vtb_class_unused) then
130  table(n)%class = class
131  table(n)%cid = cid
132  table(n)%refcount = 1
133  vid = n
134  return
135  endif
136  enddo
137  vid = vid_invalid
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:

◆ vartabledelete()

subroutine, public gtdata_internal_vartable::vartabledelete ( integer, intent(in)  vid,
logical, intent(out)  action,
logical, intent(out), optional  err 
)

Definition at line 141 of file gtdata_internal_vartable.f90.

References classes_max, table, and vtb_class_unused.

Referenced by gtvarclose().

141  integer, intent(in):: vid
142  logical, intent(out):: action
143  logical, intent(out), optional:: err
144  if (.not. allocated(table)) goto 999
145  if (vid <= 0 .or. vid > size(table)) goto 999
146  if (table(vid)%class <= vtb_class_unused) goto 999
147  if (table(vid)%class > classes_max) goto 999
148  table(vid)%refcount = max(table(vid)%refcount - 1, 0)
149  action = (table(vid)%refcount == 0)
150  if (present(err)) err = .false.
151  return
152 999 continue
153  action = .false.
154  if (present(err)) err = .true.
Here is the caller graph for this function:

◆ vartablelookup()

subroutine, public gtdata_internal_vartable::vartablelookup ( integer, intent(in)  vid,
integer, intent(out), optional  class,
integer, intent(out), optional  cid 
)

Definition at line 158 of file gtdata_internal_vartable.f90.

References classes_max, table, and vtb_class_unused.

Referenced by dimrange_direct(), gtvarclose(), gtdata_internal_map::map_dup(), gtdata_internal_map::map_set_ndims(), gtdata_internal_map::map_set_rank(), ndims(), query_growable(), and gtdata_internal_map::var_class().

158  ! 同じファイル番号の変数表の中身を返す
159  integer, intent(in):: vid
160  integer, intent(out), optional:: class, cid
161  if (.not. allocated(table)) goto 999
162  if (vid <= 0 .or. vid > size(table)) goto 999
163  if (table(vid)%class <= vtb_class_unused) goto 999
164  if (table(vid)%class > classes_max) goto 999
165  if (present(class)) class = table(vid)%class
166  if (present(cid)) cid = table(vid)%cid
167  return
168 999 continue
169  if (present(class)) class = vtb_class_unused
Here is the caller graph for this function:

◆ vartablemore()

subroutine, public gtdata_internal_vartable::vartablemore ( integer, intent(in)  vid,
logical, intent(out), optional  err 
)

Definition at line 173 of file gtdata_internal_vartable.f90.

References classes_max, table, and vtb_class_unused.

173  ! 同じファイル番号の参照カウントを増加する。
174  integer, intent(in):: vid
175  logical, intent(out), optional:: err
176  if (.not. allocated(table)) goto 999
177  if (vid <= 0 .or. vid > size(table)) goto 999
178  if (table(vid)%class <= vtb_class_unused) goto 999
179  if (table(vid)%class > classes_max) goto 999
180  table(vid)%refcount = table(vid)%refcount + 1
181  if (present(err)) err = .false.
182  return
183 999 continue
184  if (present(err)) err = .true.

Variable Documentation

◆ classes_max

integer, parameter, public gtdata_internal_vartable::classes_max = 2

Definition at line 38 of file gtdata_internal_vartable.f90.

Referenced by vartabledelete(), vartablelookup(), and vartablemore().

38  integer, parameter, public :: classes_max = 2

◆ gdnc_search

type(gd_nc_variable_search), save, public gtdata_internal_vartable::gdnc_search

Definition at line 49 of file gtdata_internal_vartable.f90.

Referenced by gtvarsearchinit(), and gtvarsearchnext().

◆ table

type(var_table_entry), dimension(:), allocatable, save, private gtdata_internal_vartable::table
private

◆ table_ini_size

integer, parameter, private gtdata_internal_vartable::table_ini_size = 16
private

Definition at line 47 of file gtdata_internal_vartable.f90.

Referenced by vartableadd().

47  integer, parameter:: table_ini_size = 16

◆ vid_invalid

integer, parameter, public gtdata_internal_vartable::vid_invalid = -1

◆ vtb_class_memory

integer, parameter, public gtdata_internal_vartable::vtb_class_memory = 1

Definition at line 36 of file gtdata_internal_vartable.f90.

Referenced by dimrange_direct(), ndims(), query_growable(), and vartable_dump().

36  integer, parameter, public :: vtb_class_memory = 1

◆ vtb_class_netcdf

integer, parameter, public gtdata_internal_vartable::vtb_class_netcdf = 2

Definition at line 37 of file gtdata_internal_vartable.f90.

Referenced by dimrange_direct(), ndims(), query_growable(), and vartable_dump().

37  integer, parameter, public :: vtb_class_netcdf = 2

◆ vtb_class_unused

integer, parameter, public gtdata_internal_vartable::vtb_class_unused = 0

Definition at line 35 of file gtdata_internal_vartable.f90.

Referenced by entry_cleanup(), vartableadd(), vartabledelete(), vartablelookup(), and vartablemore().

35  integer, parameter, public :: vtb_class_unused = 0