33 character(len=*),
intent(in) :: component
34 character(len=*),
intent(in),
optional :: subcomponent
35 character(len=*),
intent(in),
optional :: context
36 character(len=LENMEMPATH) :: memory_path
39 logical(LGP) :: removed
47 do while (itr%has_next())
52 if (mt%path == memory_path .and. mt%mt_associated())
then
53 call mt%mt_deallocate()
68 character(len=*),
intent(in) :: varname
69 character(len=*),
intent(in) :: memory_path
72 logical(LGP) :: checkfail = .false.
75 if (.not. found)
return
76 if (.not. mt%mt_associated())
return
83 logical(LGP),
pointer,
intent(inout) :: p_mem
84 character(len=*),
intent(in) :: varname
85 character(len=*),
intent(in) :: memory_path
86 logical(LGP),
intent(inout) :: found
87 logical(LGP),
intent(in),
optional :: release
89 logical(LGP) :: checkfail = .false.
90 logical(LGP) :: do_release
93 if (
present(release)) do_release = release
96 if (.not. found)
return
97 if (.not. mt%mt_associated())
return
98 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'INTEGER')
then
99 if (mt%intsclr == 0)
then
111 integer(I4B),
pointer,
intent(inout) :: p_mem
112 character(len=*),
intent(in) :: varname
113 character(len=*),
intent(in) :: memory_path
114 logical(LGP),
intent(inout) :: found
115 logical(LGP),
intent(in),
optional :: release
117 logical(LGP) :: checkfail = .false.
118 logical(LGP) :: do_release
121 if (
present(release)) do_release = release
124 if (.not. found)
return
125 if (.not. mt%mt_associated())
return
126 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'INTEGER')
then
134 integer(I4B),
pointer,
intent(inout) :: p_mem
135 character(len=*),
intent(in) :: varname
136 character(len=*),
intent(in) :: memory_path
137 integer(I4B),
intent(in) :: setval
138 logical(LGP),
intent(inout) :: found
139 logical(LGP),
intent(in),
optional :: release
141 logical(LGP) :: checkfail = .false.
142 logical(LGP) :: do_release
145 if (
present(release)) do_release = release
148 if (.not. found)
return
149 if (.not. mt%mt_associated())
return
156 str_list, found, release)
157 integer(I4B),
pointer,
intent(inout) :: p_mem
158 character(len=*),
intent(in) :: varname
159 character(len=*),
intent(in) :: memory_path
160 character(len=*),
dimension(:),
intent(in) :: str_list
161 logical(LGP),
intent(inout) :: found
162 logical(LGP),
intent(in),
optional :: release
164 logical(LGP) :: checkfail = .false.
165 logical(LGP) :: do_release
169 if (
present(release)) do_release = release
172 if (.not. found)
return
173 if (.not. mt%mt_associated())
return
174 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'STRING')
then
175 do i = 1,
size(str_list)
176 if (mt%strsclr == str_list(i))
then
188 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: p_mem
189 character(len=*),
intent(in) :: varname
190 character(len=*),
intent(in) :: memory_path
191 logical(LGP),
intent(inout) :: found
192 logical(LGP),
intent(in),
optional :: release
194 logical(LGP) :: checkfail = .false.
195 logical(LGP) :: do_release
199 if (
present(release)) do_release = release
202 if (.not. found)
return
203 if (.not. mt%mt_associated())
return
204 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'LOGICAL')
then
205 if (
size(mt%alogical1d) /=
size(p_mem))
then
206 call store_error(
'mem_set_value() size mismatch logical1d, varname='//&
207 &trim(varname), terminate=.true.)
209 do n = 1,
size(mt%alogical1d)
210 p_mem(n) = mt%alogical1d(n)
220 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: p_mem
221 character(len=*),
intent(in) :: varname
222 character(len=*),
intent(in) :: memory_path
223 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: map
224 logical(LGP),
intent(inout) :: found
225 logical(LGP),
intent(in),
optional :: release
227 logical(LGP) :: checkfail = .false.
228 logical(LGP) :: do_release
232 if (
present(release)) do_release = release
235 if (.not. found)
return
236 if (.not. mt%mt_associated())
return
237 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'LOGICAL')
then
238 if (
associated(map))
then
239 do n = 1,
size(p_mem)
240 p_mem(n) = mt%alogical1d(map(n))
243 if (
size(mt%alogical1d) /=
size(p_mem))
then
244 call store_error(
'mem_set_value() size mismatch logical1d, varname='//&
245 &trim(varname), terminate=.true.)
247 do n = 1,
size(mt%alogical1d)
248 p_mem(n) = mt%alogical1d(n)
258 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: p_mem
259 character(len=*),
intent(in) :: varname
260 character(len=*),
intent(in) :: memory_path
261 logical(LGP),
intent(inout) :: found
262 logical(LGP),
intent(in),
optional :: release
264 logical(LGP) :: checkfail = .false.
265 logical(LGP) :: do_release
269 if (
present(release)) do_release = release
272 if (.not. found)
return
273 if (.not. mt%mt_associated())
return
274 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'INTEGER')
then
275 if (
size(mt%aint1d) /=
size(p_mem))
then
276 call store_error(
'mem_set_value() size mismatch int1d, varname='//&
277 &trim(varname), terminate=.true.)
279 do n = 1,
size(mt%aint1d)
280 p_mem(n) = mt%aint1d(n)
290 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: p_mem
291 character(len=*),
intent(in) :: varname
292 character(len=*),
intent(in) :: memory_path
293 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: map
294 logical(LGP),
intent(inout) :: found
295 logical(LGP),
intent(in),
optional :: release
297 logical(LGP) :: checkfail = .false.
298 logical(LGP) :: do_release
302 if (
present(release)) do_release = release
305 if (.not. found)
return
306 if (.not. mt%mt_associated())
return
307 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'INTEGER')
then
308 if (
associated(map))
then
309 do n = 1,
size(p_mem)
310 p_mem(n) = mt%aint1d(map(n))
313 if (
size(mt%aint1d) /=
size(p_mem))
then
314 call store_error(
'mem_set_value() size mismatch int1d, varname='//&
315 &trim(varname), terminate=.true.)
317 do n = 1,
size(mt%aint1d)
318 p_mem(n) = mt%aint1d(n)
328 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: p_mem
329 character(len=*),
intent(in) :: varname
330 character(len=*),
intent(in) :: memory_path
331 logical(LGP),
intent(inout) :: found
332 logical(LGP),
intent(in),
optional :: release
334 logical(LGP) :: checkfail = .false.
335 logical(LGP) :: do_release
339 if (
present(release)) do_release = release
342 if (.not. found)
return
343 if (.not. mt%mt_associated())
return
344 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'INTEGER')
then
345 if (
size(mt%aint2d, dim=1) /=
size(p_mem, dim=1) .or. &
346 size(mt%aint2d, dim=2) /=
size(p_mem, dim=2))
then
347 call store_error(
'mem_set_value() size mismatch int2d, varname='//&
348 &trim(varname), terminate=.true.)
350 do j = 1,
size(mt%aint2d, dim=2)
351 do i = 1,
size(mt%aint2d, dim=1)
352 p_mem(i, j) = mt%aint2d(i, j)
362 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: p_mem
363 character(len=*),
intent(in) :: varname
364 character(len=*),
intent(in) :: memory_path
365 logical(LGP),
intent(inout) :: found
366 logical(LGP),
intent(in),
optional :: release
368 logical(LGP) :: checkfail = .false.
369 logical(LGP) :: do_release
370 integer(I4B) :: i, j, k
373 if (
present(release)) do_release = release
376 if (.not. found)
return
377 if (.not. mt%mt_associated())
return
378 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'INTEGER')
then
379 if (
size(mt%aint3d, dim=1) /=
size(p_mem, dim=1) .or. &
380 size(mt%aint3d, dim=2) /=
size(p_mem, dim=2) .or. &
381 size(mt%aint3d, dim=3) /=
size(p_mem, dim=3))
then
382 call store_error(
'mem_set_value() size mismatch int3d, varname='//&
383 &trim(varname), terminate=.true.)
385 do k = 1,
size(mt%aint3d, dim=3)
386 do j = 1,
size(mt%aint3d, dim=2)
387 do i = 1,
size(mt%aint3d, dim=1)
388 p_mem(i, j, k) = mt%aint3d(i, j, k)
399 real(DP),
pointer,
intent(inout) :: p_mem
400 character(len=*),
intent(in) :: varname
401 character(len=*),
intent(in) :: memory_path
402 logical(LGP),
intent(inout) :: found
403 logical(LGP),
intent(in),
optional :: release
405 logical(LGP) :: checkfail = .false.
406 logical(LGP) :: do_release
409 if (
present(release)) do_release = release
412 if (.not. found)
return
413 if (.not. mt%mt_associated())
return
414 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'DOUBLE')
then
423 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: p_mem
424 character(len=*),
intent(in) :: varname
425 character(len=*),
intent(in) :: memory_path
426 logical(LGP),
intent(inout) :: found
427 logical(LGP),
intent(in),
optional :: release
429 logical(LGP) :: checkfail = .false.
430 logical(LGP) :: do_release
434 if (
present(release)) do_release = release
437 if (.not. found)
return
438 if (.not. mt%mt_associated())
return
439 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'DOUBLE')
then
440 if (
size(mt%adbl1d) /=
size(p_mem))
then
441 call store_error(
'mem_set_value() size mismatch dbl1d, varname='//&
442 &trim(varname), terminate=.true.)
444 do n = 1,
size(mt%adbl1d)
445 p_mem(n) = mt%adbl1d(n)
455 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: p_mem
456 character(len=*),
intent(in) :: varname
457 character(len=*),
intent(in) :: memory_path
458 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: map
459 logical(LGP),
intent(inout) :: found
460 logical(LGP),
intent(in),
optional :: release
462 logical(LGP) :: checkfail = .false.
463 logical(LGP) :: do_release
467 if (
present(release)) do_release = release
470 if (.not. found)
return
471 if (.not. mt%mt_associated())
return
472 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'DOUBLE')
then
473 if (
associated(map))
then
474 do n = 1,
size(p_mem)
475 p_mem(n) = mt%adbl1d(map(n))
478 if (
size(mt%adbl1d) /=
size(p_mem))
then
479 call store_error(
'mem_set_value() size mismatch dbl1d, varname='//&
480 &trim(varname), terminate=.true.)
482 do n = 1,
size(mt%adbl1d)
483 p_mem(n) = mt%adbl1d(n)
493 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: p_mem
494 character(len=*),
intent(in) :: varname
495 character(len=*),
intent(in) :: memory_path
496 logical(LGP),
intent(inout) :: found
497 logical(LGP),
intent(in),
optional :: release
499 logical(LGP) :: checkfail = .false.
500 logical(LGP) :: do_release
504 if (
present(release)) do_release = release
507 if (.not. found)
return
508 if (.not. mt%mt_associated())
return
509 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'DOUBLE')
then
510 if (
size(mt%adbl2d, dim=1) /=
size(p_mem, dim=1) .or. &
511 size(mt%adbl2d, dim=2) /=
size(p_mem, dim=2))
then
512 call store_error(
'mem_set_value() size mismatch dbl2d, varname='//&
513 &trim(varname), terminate=.true.)
515 do j = 1,
size(mt%adbl2d, dim=2)
516 do i = 1,
size(mt%adbl2d, dim=1)
517 p_mem(i, j) = mt%adbl2d(i, j)
527 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: p_mem
528 character(len=*),
intent(in) :: varname
529 character(len=*),
intent(in) :: memory_path
530 logical(LGP),
intent(inout) :: found
531 logical(LGP),
intent(in),
optional :: release
533 logical(LGP) :: checkfail = .false.
534 logical(LGP) :: do_release
535 integer(I4B) :: i, j, k
538 if (
present(release)) do_release = release
541 if (.not. found)
return
542 if (.not. mt%mt_associated())
return
543 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'DOUBLE')
then
544 if (
size(mt%adbl3d, dim=1) /=
size(p_mem, dim=1) .or. &
545 size(mt%adbl3d, dim=2) /=
size(p_mem, dim=2) .or. &
546 size(mt%adbl3d, dim=3) /=
size(p_mem, dim=3))
then
547 call store_error(
'mem_set_value() size mismatch dbl3d, varname='//&
548 &trim(varname), terminate=.true.)
550 do k = 1,
size(mt%adbl3d, dim=3)
551 do j = 1,
size(mt%adbl3d, dim=2)
552 do i = 1,
size(mt%adbl3d, dim=1)
553 p_mem(i, j, k) = mt%adbl3d(i, j, k)
562 character(len=*),
intent(inout) :: p_mem
563 character(len=*),
intent(in) :: varname
564 character(len=*),
intent(in) :: memory_path
565 logical(LGP),
intent(inout) :: found
566 logical(LGP),
intent(in),
optional :: release
568 logical(LGP) :: checkfail = .false.
569 logical(LGP) :: do_release
572 if (
present(release)) do_release = release
575 if (.not. found)
return
576 if (.not. mt%mt_associated())
return
577 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'STRING')
then
587 pointer,
contiguous,
intent(inout) :: p_mem
588 character(len=*),
intent(in) :: varname
589 character(len=*),
intent(in) :: memory_path
590 logical(LGP),
intent(inout) :: found
591 logical(LGP),
intent(in),
optional :: release
593 logical(LGP) :: checkfail = .false.
594 logical(LGP) :: do_release
598 if (
present(release)) do_release = release
601 if (.not. found)
return
602 if (.not. mt%mt_associated())
return
603 if (mt%memtype(1:index(mt%memtype,
' ')) ==
'STRING')
then
604 do n = 1,
size(mt%acharstr1d)
605 p_mem(n) = mt%acharstr1d(n)
This module contains simulation constants.
@ mvalidate
validation mode - do not run time steps
integer(i4b), parameter lenmempath
maximum length of the memory path
This module defines variable data types.
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
subroutine mem_set_value_int_setval(p_mem, varname, memory_path, setval, found, release)
subroutine, public memorystore_remove(component, subcomponent, context)
subroutine mem_set_value_logical1d_mapped(p_mem, varname, memory_path, map, found, release)
Set pointer to value of memory list 1d logical array variable with mapping.
subroutine mem_set_value_int2d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 2d int array variable.
subroutine, public memorystore_release(varname, memory_path)
Release a single variable from the memory store.
subroutine mem_set_value_dbl(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list double variable.
subroutine mem_set_value_str_mapped_int(p_mem, varname, memory_path, str_list, found, release)
subroutine mem_set_value_charstr1d(p_mem, varname, memory_path, found, release)
subroutine mem_set_value_dbl1d_mapped(p_mem, varname, memory_path, map, found, release)
Set pointer to value of memory list 1d dbl array variable with mapping.
subroutine mem_set_value_int1d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 1d int array variable.
subroutine mem_set_value_int3d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 3d int array variable.
subroutine mem_set_value_dbl3d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 3d dbl array variable.
subroutine mem_set_value_logical(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list logical variable.
subroutine mem_set_value_logical1d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 1d logical array variable.
subroutine mem_set_value_str(p_mem, varname, memory_path, found, release)
subroutine mem_set_value_dbl2d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 2d dbl array variable.
subroutine mem_set_value_int(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list int variable.
subroutine mem_set_value_dbl1d(p_mem, varname, memory_path, found, release)
Set pointer to value of memory list 1d dbl array variable.
subroutine mem_set_value_int1d_mapped(p_mem, varname, memory_path, map, found, release)
Set pointer to value of memory list 1d int array variable with mapping.
subroutine, public mem_release(mt)
Release a memory store entry: deallocate data and update counters.
type(memorystoretype), public memorystore
subroutine, public get_from_memorystore(name, mem_path, mt, found, check)
@ brief Get a memory type entry from the memory list
This module contains simulation methods.
subroutine, public store_error(msg, terminate)
Store an error message.
This module contains simulation variables.
integer(i4b) isim_mode
simulation mode
This class is used to store a single deferred-length character string. It was designed to work in an ...
An iterator used to iterate through a MemoryContainer.