gtdata_memory_internal Module Reference

Data Types

interface  memtab_add
 
interface  memtab_lookup
 

Functions/Subroutines

integer function, public memtab_add (var, name)
 
integer function, public memtab_lookup (var, ent)
 

Variables

type(gd_mem_variable_entry), dimension(:), allocatable, target, save, public memtab
 

Function/Subroutine Documentation

◆ memtab_add()

integer function, public gtdata_memory_internal::memtab_add ( type(gd_mem_variable), intent(out)  var,
character(len = *), intent(in)  name 
)

Definition at line 38 of file gtdata_memory_internal.f90.

References dc_error::gt_enomem, and memtab.

39  use dc_error, only: gt_enomem
40  type(gd_mem_variable), intent(out):: var
41  character(len = *), intent(in):: name
42  type(gd_mem_variable_entry), allocatable:: tmptab(:)
43  integer:: i, n
44 
45  if (.not. allocated(memtab)) then
46  allocate(memtab(16), stat=stat)
47  if (stat /= 0) then
48  stat = gt_enomem
49  return
50  endif
51  do, i = 1, size(memtab)
52  memtab(i)%name = ""
53  memtab(i)%xtype = ""
54  nullify(memtab(i)%dbuf)
55  nullify(memtab(i)%attr, memtab(i)%current)
56  enddo
57  endif
58  do, i = 1, size(memtab)
59  if (memtab(i)%name == "") then
60  stat = 0
61  var = gd_mem_variable(i)
62  memtab(i)%name = name
63  return
64  endif
65  end do
66 
67  n = size(memtab)
68  allocate(tmptab(n), stat=stat)
69  if (stat /= 0) then
70  stat = gt_enomem
71  return
72  endif
73  tmptab(:) = memtab(:)
74  deallocate(memtab)
75  allocate(memtab(n * 2), stat=stat)
76  if (stat /= 0) then
77  stat = gt_enomem
78  return
79  endif
80  memtab(1:n) = tmptab(1:n)
81  deallocate(tmptab)
82  do, i = n + 1, n * 2
83  memtab(i)%name = ""
84  nullify(memtab(i)%dbuf)
85  nullify(memtab(i)%attr, memtab(i)%current)
86  enddo
87 
88  i = n + 1
89  var = gd_mem_variable(i)
90  memtab(i)%name = name
integer, parameter, public gt_enomem
Definition: dc_error.f90:534
type(gd_mem_variable_entry), dimension(:), allocatable, target, save, public memtab
integer, save, private i
Definition: dcunits_com.f90:42

◆ memtab_lookup()

integer function, public gtdata_memory_internal::memtab_lookup ( type(gd_mem_variable), intent(in)  var,
type(gd_mem_variable_entry), pointer  ent 
)

Definition at line 94 of file gtdata_memory_internal.f90.

References memtab.

95  use netcdf, only: nf90_enotvar
96  type(gd_mem_variable), intent(in):: var
97  type(gd_mem_variable_entry), pointer:: ent
98 
99  if (.not. allocated(memtab)) goto 999
100  if (var%id <= 0 .or. var%id > size(memtab)) goto 999
101  if (memtab(var%id)%name == "") goto 999
102  ent => memtab(var%id)
103  stat = 0
104 999 continue
105  nullify(ent)
106  stat = nf90_enotvar
type(gd_mem_variable_entry), dimension(:), allocatable, target, save, public memtab

Variable Documentation

◆ memtab

type(gd_mem_variable_entry), dimension(:), allocatable, target, save, public gtdata_memory_internal::memtab

Definition at line 23 of file gtdata_memory_internal.f90.

Referenced by gdmemvarcreated(), memtab_add(), and memtab_lookup().

23  type(gd_mem_variable_entry), allocatable, save, target:: memtab(:)
type(gd_mem_variable_entry), dimension(:), allocatable, target, save, public memtab