MODFLOW 6  version 6.5.0.dev2
MODFLOW 6 Code Documentation
Memory.f90
Go to the documentation of this file.
2 
3  use kindmodule, only: dp, lgp, i4b
9  use tablemodule, only: tabletype
11 
12  implicit none
13  private
14  public :: memorytype
15 
17  character(len=LENVARNAME) :: name !< name of the array
18  character(len=LENVARNAME) :: mastername = 'none' !< name of the master array
19  character(len=LENMEMPATH) :: path !< path to memory object
20  character(len=LENMEMPATH) :: masterpath = 'none' !< path to master memory object
21  character(len=LENMEMTYPE) :: memtype !< type (INTEGER or DOUBLE)
22  integer(I4B) :: id !< id, not used
23  integer(I4B) :: nrealloc = 0 !< number of times reallocated
24  integer(I4B) :: isize = -1 !< size of the array, equal to the number of array elements; 1 for scalars
25  integer(I4B) :: element_size = 0 !< byte size of an element; string length
26  integer(I4B) :: set_handler_idx = 0 !< index of side effect handler for external access
27  logical(LGP) :: master = .true. !< master copy, others point to this one
28  character(len=:), pointer :: strsclr => null() !< pointer to the character string
29  logical(LGP), pointer :: logicalsclr => null() !< pointer to the logical
30  integer(I4B), pointer :: intsclr => null() !< pointer to the integer
31  real(dp), pointer :: dblsclr => null() !< pointer to the double
32  character(len=:), dimension(:), pointer, contiguous :: astr1d => null() !< pointer to the 1d character string array
33  integer(I4B), dimension(:), pointer, contiguous :: aint1d => null() !< pointer to 1d integer array
34  integer(I4B), dimension(:, :), pointer, contiguous :: aint2d => null() !< pointer to 2d integer array
35  integer(I4B), dimension(:, :, :), pointer, contiguous :: aint3d => null() !< pointer to 3d integer array
36  real(dp), dimension(:), pointer, contiguous :: adbl1d => null() !< pointer to 1d double array
37  real(dp), dimension(:, :), pointer, contiguous :: adbl2d => null() !< pointer to 2d double array
38  real(dp), dimension(:, :, :), pointer, contiguous :: adbl3d => null() !< pointer to 3d double array
39  type(characterstringtype), dimension(:), pointer, contiguous :: &
40  acharstr1d => null() !< pointer to the 1d character string array
41  contains
42  procedure :: table_entry
43  procedure :: mt_associated
44  procedure :: mt_deallocate
45  end type
46 
47 contains
48 
49  subroutine table_entry(this, memtab)
50  ! -- dummy
51  class(memorytype) :: this
52  type(tabletype), intent(inout) :: memtab
53  ! -- local
54  character(len=16) :: cmem
55  character(len=LENMEMADDRESS) :: cptr
56  integer(I4B) :: ipos
57  ! -- formats
58  !
59  ! -- determine memory type
60  ipos = index(this%memtype, ' (')
61  if (ipos < 1) then
62  ipos = 16
63  else
64  ipos = min(16, ipos - 1)
65  end if
66  cmem = this%memtype(1:ipos)
67  !
68  ! -- Set pointer string
69  cptr = '--'
70  if (.not. this%master) then
71  cptr = create_mem_address(this%masterPath, this%mastername)
72  end if
73  !
74  ! -- write data to the table
75  call memtab%add_term(this%path)
76  call memtab%add_term(this%name)
77  call memtab%add_term(cmem)
78  call memtab%add_term(this%isize)
79  call memtab%add_term(cptr)
80  !
81  ! -- return
82  return
83  end subroutine table_entry
84 
85  function mt_associated(this) result(al)
86  class(memorytype) :: this
87  logical :: al
88  al = .false.
89  if (associated(this%strsclr)) al = .true.
90  if (associated(this%logicalsclr)) al = .true.
91  if (associated(this%intsclr)) al = .true.
92  if (associated(this%dblsclr)) al = .true.
93  if (associated(this%astr1d)) al = .true.
94  if (associated(this%aint1d)) al = .true.
95  if (associated(this%aint2d)) al = .true.
96  if (associated(this%aint3d)) al = .true.
97  if (associated(this%adbl1d)) al = .true.
98  if (associated(this%adbl2d)) al = .true.
99  if (associated(this%adbl3d)) al = .true.
100  if (associated(this%acharstr1d)) al = .true.
101  end function mt_associated
102 
103  subroutine mt_deallocate(this)
104  class(memorytype) :: this
105 
106  if (associated(this%strsclr)) then
107  if (this%master) deallocate (this%strsclr)
108  nullify (this%strsclr)
109  end if
110 
111  if (associated(this%logicalsclr)) then
112  if (this%master) deallocate (this%logicalsclr)
113  nullify (this%logicalsclr)
114  end if
115 
116  if (associated(this%intsclr)) then
117  if (this%master) deallocate (this%intsclr)
118  nullify (this%intsclr)
119  end if
120 
121  if (associated(this%dblsclr)) then
122  if (this%master) deallocate (this%dblsclr)
123  nullify (this%dblsclr)
124  end if
125 
126  if (associated(this%astr1d)) then
127  if (this%master) deallocate (this%astr1d)
128  nullify (this%astr1d)
129  end if
130 
131  if (associated(this%aint1d)) then
132  if (this%master) deallocate (this%aint1d)
133  nullify (this%aint1d)
134  end if
135 
136  if (associated(this%aint2d)) then
137  if (this%master) deallocate (this%aint2d)
138  nullify (this%aint2d)
139  end if
140 
141  if (associated(this%aint3d)) then
142  if (this%master) deallocate (this%aint3d)
143  nullify (this%aint3d)
144  end if
145 
146  if (associated(this%adbl1d)) then
147  if (this%master) deallocate (this%adbl1d)
148  nullify (this%adbl1d)
149  end if
150 
151  if (associated(this%adbl2d)) then
152  if (this%master) deallocate (this%adbl2d)
153  nullify (this%adbl2d)
154  end if
155 
156  if (associated(this%adbl3d)) then
157  if (this%master) deallocate (this%adbl3d)
158  nullify (this%adbl3d)
159  end if
160 
161  if (associated(this%acharstr1d)) then
162  if (this%master) deallocate (this%acharstr1d)
163  nullify (this%acharstr1d)
164  end if
165  end subroutine mt_deallocate
166 
167 end module memorytypemodule
This module contains simulation constants.
Definition: Constants.f90:9
@ tabcenter
centered table column
Definition: Constants.f90:171
@ tabright
right justified table column
Definition: Constants.f90:172
@ tableft
left justified table column
Definition: Constants.f90:170
integer(i4b), parameter lenmemaddress
maximum length of the full memory address, including variable name
Definition: Constants.f90:30
@ tabstring
string table data
Definition: Constants.f90:178
@ tabinteger
integer table data
Definition: Constants.f90:180
integer(i4b), parameter lentimeseriesname
maximum length of a time series name
Definition: Constants.f90:41
integer(i4b), parameter lenvarname
maximum length of a variable name
Definition: Constants.f90:17
integer(i4b), parameter, public maxmemrank
maximum memory manager length (up to 3-dimensional arrays)
Definition: Constants.f90:60
integer(i4b), parameter, public lenmemtype
maximum length of a memory manager type
Definition: Constants.f90:61
integer(i4b), parameter lenmempath
maximum length of the memory path
Definition: Constants.f90:26
This module defines variable data types.
Definition: kind.f90:8
character(len=lenmemaddress) function create_mem_address(mem_path, var_name)
returns the address string of the memory object
subroutine mt_deallocate(this)
Definition: Memory.f90:104
subroutine table_entry(this, memtab)
Definition: Memory.f90:50
logical function mt_associated(this)
Definition: Memory.f90:86
This class is used to store a single deferred-length character string. It was designed to work in an ...
Definition: CharString.f90:23