154 character(len=*),
intent(in) :: name
155 character(len=*),
intent(in) :: mem_path
156 character(len=LENMEMTYPE),
intent(out) :: var_type
159 logical(LGP) :: found
165 var_type = mt%memtype
174 character(len=*),
intent(in) :: name
175 character(len=*),
intent(in) :: mem_path
176 integer(I4B),
intent(out) :: rank
179 logical(LGP) :: found
190 if (
associated(mt%logicalsclr)) rank = 0
191 if (
associated(mt%intsclr)) rank = 0
192 if (
associated(mt%dblsclr)) rank = 0
193 if (
associated(mt%alogical1d)) rank = 1
194 if (
associated(mt%aint1d)) rank = 1
195 if (
associated(mt%aint2d)) rank = 2
196 if (
associated(mt%aint3d)) rank = 3
197 if (
associated(mt%adbl1d)) rank = 1
198 if (
associated(mt%adbl2d)) rank = 2
199 if (
associated(mt%adbl3d)) rank = 3
200 if (
associated(mt%strsclr)) rank = 0
201 if (
associated(mt%astr1d)) rank = 1
202 if (
associated(mt%acharstr1d)) rank = 1
211 character(len=*),
intent(in) :: name
212 character(len=*),
intent(in) :: mem_path
213 integer(I4B),
intent(out) :: size
216 logical(LGP) :: found
227 size = mt%element_size
237 character(len=*),
intent(in) :: name
238 character(len=*),
intent(in) :: mem_path
239 integer(I4B),
dimension(:),
intent(out) :: mem_shape
242 logical(LGP) :: found
250 if (
associated(mt%logicalsclr)) mem_shape = shape(mt%logicalsclr)
251 if (
associated(mt%intsclr)) mem_shape = shape(mt%logicalsclr)
252 if (
associated(mt%dblsclr)) mem_shape = shape(mt%dblsclr)
253 if (
associated(mt%alogical1d)) mem_shape = shape(mt%alogical1d)
254 if (
associated(mt%aint1d)) mem_shape = shape(mt%aint1d)
255 if (
associated(mt%aint2d)) mem_shape = shape(mt%aint2d)
256 if (
associated(mt%aint3d)) mem_shape = shape(mt%aint3d)
257 if (
associated(mt%adbl1d)) mem_shape = shape(mt%adbl1d)
258 if (
associated(mt%adbl2d)) mem_shape = shape(mt%adbl2d)
259 if (
associated(mt%adbl3d)) mem_shape = shape(mt%adbl3d)
260 if (
associated(mt%strsclr)) mem_shape = shape(mt%strsclr)
261 if (
associated(mt%astr1d)) mem_shape = shape(mt%astr1d)
262 if (
associated(mt%acharstr1d)) mem_shape = shape(mt%acharstr1d)
275 character(len=*),
intent(in) :: name
276 character(len=*),
intent(in) :: mem_path
277 integer(I4B),
intent(out) :: isize
280 logical(LGP) :: found
281 logical(LGP) :: terminate
305 character(len=*),
intent(in) :: name
306 character(len=*),
intent(in) :: mem_path
307 type(
memorytype),
pointer,
intent(inout) :: mt
308 logical(LGP),
intent(out) :: found
309 logical(LGP),
intent(in),
optional :: check
312 logical(LGP) check_opt
315 found =
associated(mt)
318 if (
present(check))
then
322 if (.not. found)
then
323 errmsg =
"Programming error in memory manager. Variable '"// &
324 trim(name)//
"' in '"//trim(mem_path)//
"' cannot be "// &
325 "assigned because it does not exist in memory manager."
334 character(len=*),
intent(in) :: varname
335 character(len=*),
intent(in) :: mem_path
336 integer(I4B),
intent(in) :: istat
337 integer(I4B),
intent(in) :: isize
339 character(len=20) :: csize
340 character(len=20) :: cstat
344 write (csize,
'(i0)') isize
345 write (cstat,
'(i0)') istat
348 errmsg =
"Error trying to allocate memory. Path '"//trim(mem_path)// &
349 "' variable name '"//trim(varname)//
"' size '"//trim(csize)// &
350 "'. Error message is '"//trim(adjustl(
errmsg))// &
351 "'. Status code is "//trim(cstat)//
'.'
360 logical(LGP),
pointer,
intent(inout) :: sclr
361 character(len=*),
intent(in) :: name
362 character(len=*),
intent(in) :: mem_path
364 integer(I4B) :: istat
384 mt%logicalsclr => sclr
385 mt%element_size = lgp
389 write (mt%memtype,
"(a)")
'LOGICAL'
398 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
399 integer(I4B),
intent(in) :: nrow
400 character(len=*),
intent(in) :: name
401 character(len=*),
intent(in) :: mem_path
404 integer(I4B) :: istat
405 integer(I4B) :: isize
427 mt%alogical1d => alog
428 mt%element_size = lgp
432 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', isize
441 integer(I4B),
intent(in) :: ilen
442 character(len=ilen),
pointer,
intent(inout) :: sclr
443 character(len=*),
intent(in) :: name
444 character(len=*),
intent(in) :: mem_path
446 integer(I4B) :: istat
453 errmsg =
'Programming error in allocate_str. ILEN must be greater than 0.'
461 allocate (
character(len=ilen) :: sclr, stat=istat,
errmsg=
errmsg)
477 mt%element_size = ilen
481 write (mt%memtype,
"(a,' LEN=',i0)")
'STRING', ilen
490 integer(I4B),
intent(in) :: ilen
491 character(len=ilen),
dimension(:), &
492 pointer,
contiguous,
intent(inout) :: astr1d
493 integer(I4B),
intent(in) :: nrow
494 character(len=*),
intent(in) :: name
495 character(len=*),
intent(in) :: mem_path
498 character(len=ilen) :: string
500 integer(I4B) :: istat
501 integer(I4B) :: isize
509 errmsg =
'Programming error in allocate_str1d. '// &
510 'ILEN must be greater than 0.'
521 allocate (
character(len=ilen) :: astr1d(nrow), stat=istat,
errmsg=
errmsg)
541 mt%element_size = ilen
545 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
555 pointer,
contiguous,
intent(inout) :: acharstr1d
556 integer(I4B),
intent(in) :: ilen
557 integer(I4B),
intent(in) :: nrow
558 character(len=*),
intent(in) :: name
559 character(len=*),
intent(in) :: mem_path
561 character(len=ilen) :: string
564 integer(I4B) :: istat
565 integer(I4B) :: isize
587 acharstr1d(n) = string
597 mt%acharstr1d => acharstr1d
598 mt%element_size = ilen
602 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
611 integer(I4B),
pointer,
intent(inout) :: sclr
612 character(len=*),
intent(in) :: name
613 character(len=*),
intent(in) :: mem_path
616 integer(I4B) :: istat
636 mt%element_size = i4b
640 write (mt%memtype,
"(a)")
'INTEGER'
649 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
650 integer(I4B),
intent(in) :: nrow
651 character(len=*),
intent(in) :: name
652 character(len=*),
intent(in) :: mem_path
655 integer(I4B) :: istat
656 integer(I4B) :: isize
679 mt%element_size = i4b
683 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', isize
692 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
693 integer(I4B),
intent(in) :: ncol
694 integer(I4B),
intent(in) :: nrow
695 character(len=*),
intent(in) :: name
696 character(len=*),
intent(in) :: mem_path
699 integer(I4B) :: istat
700 integer(I4B) :: isize
723 mt%element_size = i4b
727 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
736 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
737 integer(I4B),
intent(in) :: ncol
738 integer(I4B),
intent(in) :: nrow
739 integer(I4B),
intent(in) :: nlay
740 character(len=*),
intent(in) :: name
741 character(len=*),
intent(in) :: mem_path
744 integer(I4B) :: istat
745 integer(I4B) :: isize
752 isize = ncol * nrow * nlay
755 allocate (aint(ncol, nrow, nlay), stat=istat,
errmsg=
errmsg)
768 mt%element_size = i4b
772 write (mt%memtype,
"(a,' (',i0,',',i0,',',i0,')')")
'INTEGER', ncol, &
782 real(DP),
pointer,
intent(inout) :: sclr
783 character(len=*),
intent(in) :: name
784 character(len=*),
intent(in) :: mem_path
787 integer(I4B) :: istat
811 write (mt%memtype,
"(a)")
'DOUBLE'
820 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
821 integer(I4B),
intent(in) :: nrow
822 character(len=*),
intent(in) :: name
823 character(len=*),
intent(in) :: mem_path
826 integer(I4B) :: istat
827 integer(I4B) :: isize
854 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
863 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
864 integer(I4B),
intent(in) :: ncol
865 integer(I4B),
intent(in) :: nrow
866 character(len=*),
intent(in) :: name
867 character(len=*),
intent(in) :: mem_path
870 integer(I4B) :: istat
871 integer(I4B) :: isize
898 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
907 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
908 integer(I4B),
intent(in) :: ncol
909 integer(I4B),
intent(in) :: nrow
910 integer(I4B),
intent(in) :: nlay
911 character(len=*),
intent(in) :: name
912 character(len=*),
intent(in) :: mem_path
915 integer(I4B) :: istat
916 integer(I4B) :: isize
923 isize = ncol * nrow * nlay
926 allocate (adbl(ncol, nrow, nlay), stat=istat,
errmsg=
errmsg)
943 write (mt%memtype,
"(a,' (',i0,',',i0,',',i0,')')")
'DOUBLE', ncol, &
953 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(in) :: alog
954 character(len=*),
intent(in) :: name
955 character(len=*),
intent(in) :: mem_path
956 character(len=*),
intent(in) :: name2
957 character(len=*),
intent(in) :: mem_path2
960 integer(I4B) :: isize
973 mt%alogical1d => alog
974 mt%element_size = lgp
978 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', isize
982 mt%mastername = name2
983 mt%masterPath = mem_path2
992 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: aint
993 character(len=*),
intent(in) :: name
994 character(len=*),
intent(in) :: mem_path
995 character(len=*),
intent(in) :: name2
996 character(len=*),
intent(in) :: mem_path2
999 integer(I4B) :: isize
1013 mt%element_size = i4b
1017 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', isize
1021 mt%mastername = name2
1022 mt%masterPath = mem_path2
1031 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint2d
1032 character(len=*),
intent(in) :: name
1033 character(len=*),
intent(in) :: mem_path
1034 character(len=*),
intent(in) :: name2
1035 character(len=*),
intent(in) :: mem_path2
1038 integer(I4B) :: ncol, nrow, isize
1045 ncol =
size(aint2d, dim=1)
1046 nrow =
size(aint2d, dim=2)
1057 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
1061 mt%mastername = name2
1062 mt%masterPath = mem_path2
1071 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1072 character(len=*),
intent(in) :: name
1073 character(len=*),
intent(in) :: mem_path
1074 character(len=*),
intent(in) :: name2
1075 character(len=*),
intent(in) :: mem_path2
1078 integer(I4B) :: isize
1092 mt%element_size = dp
1096 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
1100 mt%mastername = name2
1101 mt%masterPath = mem_path2
1110 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl2d
1111 character(len=*),
intent(in) :: name
1112 character(len=*),
intent(in) :: mem_path
1113 character(len=*),
intent(in) :: name2
1114 character(len=*),
intent(in) :: mem_path2
1117 integer(I4B) :: ncol, nrow, isize
1124 ncol =
size(adbl2d, dim=1)
1125 nrow =
size(adbl2d, dim=2)
1136 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
1140 mt%mastername = name2
1141 mt%masterPath = mem_path2
1151 pointer,
contiguous,
intent(inout) :: acharstr1d
1152 integer(I4B),
intent(in) :: ilen
1153 character(len=*),
intent(in) :: name
1154 character(len=*),
intent(in) :: mem_path
1155 character(len=*),
intent(in) :: name2
1156 character(len=*),
intent(in) :: mem_path2
1159 integer(I4B) :: isize
1166 isize =
size(acharstr1d)
1172 mt%acharstr1d => acharstr1d
1173 mt%element_size = ilen
1177 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, isize
1181 mt%mastername = name2
1182 mt%masterPath = mem_path2
1191 integer(I4B),
intent(in) :: ilen
1192 integer(I4B),
intent(in) :: nrow
1193 character(len=ilen),
dimension(:),
pointer,
contiguous,
intent(inout) :: astr
1194 character(len=*),
intent(in) :: name
1195 character(len=*),
intent(in) :: mem_path
1198 logical(LGP) :: found
1199 character(len=ilen),
dimension(:),
allocatable :: astrtemp
1200 integer(I4B) :: istat
1201 integer(I4B) :: isize
1202 integer(I4B) :: isize_old
1203 integer(I4B) :: nrow_old
1211 isize_old = mt%isize
1212 if (isize_old > 0)
then
1213 nrow_old =
size(astr)
1223 if (istat /= 0)
then
1228 do n = 1, min(nrow_old, nrow)
1229 astrtemp(n) = astr(n)
1233 do n = nrow_old + 1, nrow
1242 if (istat /= 0)
then
1248 astr(n) = astrtemp(n)
1252 deallocate (astrtemp)
1256 mt%element_size = ilen
1258 mt%nrealloc = mt%nrealloc + 1
1261 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
1263 errmsg =
"Programming error, variable '"//trim(name)//
"' from '"// &
1264 trim(mem_path)//
"' is not defined in the memory manager. Use "// &
1265 "mem_allocate instead."
1274 intent(inout) :: acharstr1d
1275 integer(I4B),
intent(in) :: ilen
1276 integer(I4B),
intent(in) :: nrow
1277 character(len=*),
intent(in) :: name
1278 character(len=*),
intent(in) :: mem_path
1281 logical(LGP) :: found
1283 character(len=ilen) :: string
1284 integer(I4B) :: istat
1285 integer(I4B) :: isize
1286 integer(I4B) :: isize_old
1287 integer(I4B) :: nrow_old
1298 isize_old = mt%isize
1299 if (isize_old > 0)
then
1300 nrow_old =
size(acharstr1d)
1310 if (istat /= 0)
then
1315 do n = 1, min(nrow_old, nrow)
1316 astrtemp(n) = acharstr1d(n)
1317 call acharstr1d(n)%destroy()
1321 do n = nrow + 1, nrow_old
1322 call acharstr1d(n)%destroy()
1326 do n = nrow_old + 1, nrow
1327 astrtemp(n) = string
1331 deallocate (acharstr1d)
1335 if (istat /= 0)
then
1341 acharstr1d(n) = astrtemp(n)
1342 call astrtemp(n)%destroy()
1346 deallocate (astrtemp)
1349 mt%acharstr1d => acharstr1d
1350 mt%element_size = ilen
1352 mt%nrealloc = mt%nrealloc + 1
1355 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
1357 errmsg =
"Programming error, variable '"//trim(name)//
"' from '"// &
1358 trim(mem_path)//
"' is not defined in the memory manager. Use "// &
1359 "mem_allocate instead."
1367 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1368 integer(I4B),
intent(in) :: nrow
1369 character(len=*),
intent(in) :: name
1370 character(len=*),
intent(in) :: mem_path
1373 logical(LGP) :: found
1374 integer(I4B) :: istat
1375 integer(I4B) :: isize
1377 integer(I4B) :: isizeold
1378 integer(I4B) :: ifill
1386 isizeold =
size(mt%alogical1d)
1387 ifill = min(isizeold, isize)
1389 if (istat /= 0)
then
1393 alog(i) = mt%alogical1d(i)
1397 deallocate (mt%alogical1d)
1398 mt%alogical1d => alog
1399 mt%element_size = lgp
1401 mt%nrealloc = mt%nrealloc + 1
1409 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1410 integer(I4B),
intent(in) :: nrow
1411 character(len=*),
intent(in) :: name
1412 character(len=*),
intent(in) :: mem_path
1415 logical(LGP) :: found
1416 integer(I4B) :: istat
1417 integer(I4B) :: isize
1419 integer(I4B) :: isizeold
1420 integer(I4B) :: ifill
1428 isizeold =
size(mt%aint1d)
1429 ifill = min(isizeold, isize)
1431 if (istat /= 0)
then
1435 aint(i) = mt%aint1d(i)
1439 deallocate (mt%aint1d)
1441 mt%element_size = i4b
1443 mt%nrealloc = mt%nrealloc + 1
1451 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1452 integer(I4B),
intent(in) :: ncol
1453 integer(I4B),
intent(in) :: nrow
1454 character(len=*),
intent(in) :: name
1455 character(len=*),
intent(in) :: mem_path
1458 logical(LGP) :: found
1459 integer(I4B) :: istat
1460 integer(I4B),
dimension(2) :: ishape
1463 integer(I4B) :: isize
1464 integer(I4B) :: isizeold
1471 ishape = shape(mt%aint2d)
1473 isizeold = ishape(1) * ishape(2)
1475 if (istat /= 0)
then
1479 do i = 1, min(ishape(2), nrow)
1480 do j = 1, min(ishape(1), ncol)
1481 aint(j, i) = mt%aint2d(j, i)
1486 deallocate (mt%aint2d)
1488 mt%element_size = i4b
1490 mt%nrealloc = mt%nrealloc + 1
1493 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
1499 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1500 integer(I4B),
intent(in) :: nrow
1501 character(len=*),
intent(in) :: name
1502 character(len=*),
intent(in) :: mem_path
1505 integer(I4B) :: istat
1506 integer(I4B) :: isize
1508 integer(I4B) :: isizeold
1509 integer(I4B) :: ifill
1510 logical(LGP) :: found
1518 isizeold =
size(mt%adbl1d)
1519 ifill = min(isizeold, isize)
1521 if (istat /= 0)
then
1525 adbl(i) = mt%adbl1d(i)
1529 deallocate (mt%adbl1d)
1531 mt%element_size = dp
1533 mt%nrealloc = mt%nrealloc + 1
1536 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
1542 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1543 integer(I4B),
intent(in) :: ncol
1544 integer(I4B),
intent(in) :: nrow
1545 character(len=*),
intent(in) :: name
1546 character(len=*),
intent(in) :: mem_path
1549 logical(LGP) :: found
1550 integer(I4B) :: istat
1551 integer(I4B),
dimension(2) :: ishape
1554 integer(I4B) :: isize
1555 integer(I4B) :: isizeold
1562 ishape = shape(mt%adbl2d)
1564 isizeold = ishape(1) * ishape(2)
1566 if (istat /= 0)
then
1570 do i = 1, min(ishape(2), nrow)
1571 do j = 1, min(ishape(1), ncol)
1572 adbl(j, i) = mt%adbl2d(j, i)
1577 deallocate (mt%adbl2d)
1579 mt%element_size = dp
1581 mt%nrealloc = mt%nrealloc + 1
1584 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
1590 logical(LGP),
pointer,
intent(inout) :: sclr
1591 character(len=*),
intent(in) :: name
1592 character(len=*),
intent(in) :: mem_path
1595 logical(LGP) :: found
1598 sclr => mt%logicalsclr
1604 integer(I4B),
pointer,
intent(inout) :: sclr
1605 character(len=*),
intent(in) :: name
1606 character(len=*),
intent(in) :: mem_path
1609 logical(LGP) :: found
1618 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1619 character(len=*),
intent(in) :: name
1620 character(len=*),
intent(in) :: mem_path
1623 logical(LGP) :: found
1626 alog => mt%alogical1d
1632 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1633 character(len=*),
intent(in) :: name
1634 character(len=*),
intent(in) :: mem_path
1637 logical(LGP) :: found
1646 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1647 character(len=*),
intent(in) :: name
1648 character(len=*),
intent(in) :: mem_path
1651 logical(LGP) :: found
1660 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
1661 character(len=*),
intent(in) :: name
1662 character(len=*),
intent(in) :: mem_path
1665 logical(LGP) :: found
1674 real(DP),
pointer,
intent(inout) :: sclr
1675 character(len=*),
intent(in) :: name
1676 character(len=*),
intent(in) :: mem_path
1679 logical(LGP) :: found
1688 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1689 character(len=*),
intent(in) :: name
1690 character(len=*),
intent(in) :: mem_path
1693 logical(LGP) :: found
1702 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1703 character(len=*),
intent(in) :: name
1704 character(len=*),
intent(in) :: mem_path
1707 logical(LGP) :: found
1716 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
1717 character(len=*),
intent(in) :: name
1718 character(len=*),
intent(in) :: mem_path
1721 logical(LGP) :: found
1730 character(len=:),
pointer :: asrt
1731 character(len=*),
intent(in) :: name
1732 character(len=*),
intent(in) :: mem_path
1735 logical(LGP) :: found
1744 character(len=:),
dimension(:), &
1745 pointer,
contiguous,
intent(inout) :: astr1d
1746 character(len=*),
intent(in) :: name
1747 character(len=*),
intent(in) :: mem_path
1750 logical(LGP) :: found
1753 select type (item => mt%astr1d)
1754 type is (
character(*))
1765 intent(inout) :: acharstr1d
1766 character(len=*),
intent(in) :: name
1767 character(len=*),
intent(in) :: mem_path
1770 logical(LGP) :: found
1773 acharstr1d => mt%acharstr1d
1779 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1780 character(len=*),
intent(in) :: name
1781 character(len=*),
intent(in) :: mem_path
1782 character(len=*),
intent(in),
optional :: mem_path_copy
1787 logical(LGP) :: found
1793 if (
present(mem_path_copy))
then
1797 allocate (alog(
size(mt%alogical1d)))
1799 do n = 1,
size(mt%alogical1d)
1800 alog(n) = mt%alogical1d(n)
1807 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1808 character(len=*),
intent(in) :: name
1809 character(len=*),
intent(in) :: mem_path
1810 character(len=*),
intent(in),
optional :: mem_path_copy
1815 logical(LGP) :: found
1821 if (
present(mem_path_copy))
then
1822 call allocate_int1d(aint,
size(mt%aint1d), mt%name, mem_path_copy)
1825 allocate (aint(
size(mt%aint1d)))
1827 do n = 1,
size(mt%aint1d)
1828 aint(n) = mt%aint1d(n)
1835 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1836 character(len=*),
intent(in) :: name
1837 character(len=*),
intent(in) :: mem_path
1838 character(len=*),
intent(in),
optional :: mem_path_copy
1843 logical(LGP) :: found
1846 integer(I4B) :: ncol
1847 integer(I4B) :: nrow
1851 ncol =
size(mt%aint2d, dim=1)
1852 nrow =
size(mt%aint2d, dim=2)
1854 if (
present(mem_path_copy))
then
1858 allocate (aint(ncol, nrow))
1862 aint(j, i) = mt%aint2d(j, i)
1870 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1871 character(len=*),
intent(in) :: name
1872 character(len=*),
intent(in) :: mem_path
1873 character(len=*),
intent(in),
optional :: mem_path_copy
1878 logical(LGP) :: found
1884 if (
present(mem_path_copy))
then
1885 call allocate_dbl1d(adbl,
size(mt%adbl1d), mt%name, mem_path_copy)
1888 allocate (adbl(
size(mt%adbl1d)))
1890 do n = 1,
size(mt%adbl1d)
1891 adbl(n) = mt%adbl1d(n)
1898 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1899 character(len=*),
intent(in) :: name
1900 character(len=*),
intent(in) :: mem_path
1901 character(len=*),
intent(in),
optional :: mem_path_copy
1906 logical(LGP) :: found
1909 integer(I4B) :: ncol
1910 integer(I4B) :: nrow
1914 ncol =
size(mt%adbl2d, dim=1)
1915 nrow =
size(mt%adbl2d, dim=2)
1917 if (
present(mem_path_copy))
then
1921 allocate (adbl(ncol, nrow))
1925 adbl(j, i) = mt%adbl2d(j, i)
1933 real(dp),
dimension(:),
intent(inout) :: adbl
1934 character(len=*),
intent(in) :: name
1935 character(len=*),
intent(in) :: mem_path
1938 logical(LGP) :: found
1942 do n = 1,
size(mt%adbl1d)
1943 adbl(n) = mt%adbl1d(n)
1950 integer(I4B),
pointer,
intent(inout) :: sclr
1951 character(len=*),
intent(in) :: name
1952 character(len=*),
intent(in) :: mem_path
1953 character(len=*),
intent(in) :: name_target
1954 character(len=*),
intent(in) :: mem_path_target
1958 logical(LGP) :: found
1962 if (
associated(sclr))
then
1968 mt%element_size = i4b
1970 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', mt%isize
1974 mt%mastername = name_target
1975 mt%masterPath = mem_path_target
1982 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1983 character(len=*),
intent(in) :: name
1984 character(len=*),
intent(in) :: mem_path
1985 character(len=*),
intent(in) :: name_target
1986 character(len=*),
intent(in) :: mem_path_target
1990 logical(LGP) :: found
1994 if (
size(alog) > 0)
then
1998 alog => mt2%alogical1d
1999 mt%alogical1d => alog
2000 mt%element_size = lgp
2001 mt%isize =
size(alog)
2002 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', mt%isize
2006 mt%mastername = name_target
2007 mt%masterPath = mem_path_target
2013 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
2014 character(len=*),
intent(in) :: name
2015 character(len=*),
intent(in) :: mem_path
2016 character(len=*),
intent(in) :: name_target
2017 character(len=*),
intent(in) :: mem_path_target
2021 logical(LGP) :: found
2025 if (
size(aint) > 0)
then
2031 mt%element_size = i4b
2032 mt%isize =
size(aint)
2033 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', mt%isize
2037 mt%mastername = name_target
2038 mt%masterPath = mem_path_target
2044 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
2045 character(len=*),
intent(in) :: name
2046 character(len=*),
intent(in) :: mem_path
2047 character(len=*),
intent(in) :: name_target
2048 character(len=*),
intent(in) :: mem_path_target
2052 logical(LGP) :: found
2053 integer(I4B) :: ncol
2054 integer(I4B) :: nrow
2058 if (
size(aint) > 0)
then
2064 mt%element_size = i4b
2065 mt%isize =
size(aint)
2066 ncol =
size(aint, dim=1)
2067 nrow =
size(aint, dim=2)
2068 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
2072 mt%mastername = name_target
2073 mt%masterPath = mem_path_target
2079 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
2080 character(len=*),
intent(in) :: name
2081 character(len=*),
intent(in) :: mem_path
2082 character(len=*),
intent(in) :: name_target
2083 character(len=*),
intent(in) :: mem_path_target
2087 logical(LGP) :: found
2091 if (
size(adbl) > 0)
then
2097 mt%element_size = dp
2098 mt%isize =
size(adbl)
2099 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', mt%isize
2103 mt%mastername = name_target
2104 mt%masterPath = mem_path_target
2110 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
2111 character(len=*),
intent(in) :: name
2112 character(len=*),
intent(in) :: mem_path
2113 character(len=*),
intent(in) :: name_target
2114 character(len=*),
intent(in) :: mem_path_target
2118 logical(LGP) :: found
2119 integer(I4B) :: ncol
2120 integer(I4b) :: nrow
2124 if (
size(adbl) > 0)
then
2130 mt%element_size = dp
2131 mt%isize =
size(adbl)
2132 ncol =
size(adbl, dim=1)
2133 nrow =
size(adbl, dim=2)
2134 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
2138 mt%mastername = name_target
2139 mt%masterPath = mem_path_target
2145 character(len=*),
pointer,
intent(inout) :: sclr
2146 character(len=*),
intent(in),
optional :: name
2147 character(len=*),
intent(in),
optional :: mem_path
2156 character(len=*),
dimension(:),
pointer,
contiguous,
intent(inout) :: astr1d
2157 character(len=*),
optional,
intent(in) :: name
2158 character(len=*),
optional,
intent(in) :: mem_path
2169 intent(inout) :: astr1d
2170 character(len=*),
optional,
intent(in) :: name
2171 character(len=*),
optional,
intent(in) :: mem_path
2179 logical(LGP),
pointer,
intent(inout) :: sclr
2187 integer(I4B),
pointer,
intent(inout) :: sclr
2195 real(DP),
pointer,
intent(inout) :: sclr
2203 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
2204 character(len=*),
optional :: name
2205 character(len=*),
optional :: mem_path
2213 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
2214 character(len=*),
optional :: name
2215 character(len=*),
optional :: mem_path
2223 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
2224 character(len=*),
optional :: name
2225 character(len=*),
optional :: mem_path
2233 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
2234 character(len=*),
optional :: name
2235 character(len=*),
optional :: mem_path
2243 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
2244 character(len=*),
optional :: name
2245 character(len=*),
optional :: mem_path
2253 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
2254 character(len=*),
optional :: name
2255 character(len=*),
optional :: mem_path
2263 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
2264 character(len=*),
optional :: name
2265 character(len=*),
optional :: mem_path
2273 integer(I4B),
intent(in) :: iout
2274 character(len=*),
intent(in) :: keyword
2275 character(len=*),
intent(inout) :: error_msg
2279 select case (keyword)
2282 write (iout,
'(4x, a)') &
2283 'LIMITED MEMORY INFORMATION WILL BE WRITTEN.'
2286 write (iout,
'(4x, a)') &
2287 'A SUMMARY OF SIMULATION MEMORY INFORMATION WILL BE WRITTEN.'
2290 write (iout,
'(4x, a)') &
2291 'ALL SIMULATION MEMORY INFORMATION WILL BE WRITTEN.'
2293 error_msg =
"Unknown memory print option '"//trim(keyword)//
"."
2300 integer(I4B),
intent(in) :: iout
2301 integer(I4B),
intent(in) :: nrows
2302 character(len=*),
intent(in) :: cunits
2304 character(len=LINELENGTH) :: title
2305 character(len=LINELENGTH) :: text
2306 integer(I4B) :: nterms
2312 title =
'SUMMARY INFORMATION ON VARIABLES STORED IN THE MEMORY MANAGER, '// &
2317 call memtab%table_df(nrows, nterms, iout)
2347 integer(I4B),
intent(in) :: iout
2348 integer(I4B),
intent(in) :: nrows
2350 character(len=LINELENGTH) :: title
2351 character(len=LINELENGTH) :: text
2352 integer(I4B) :: nterms
2358 title =
'DETAILED INFORMATION ON VARIABLES STORED IN THE MEMORY MANAGER'
2362 call memtab%table_df(nrows, nterms, iout)
2369 text =
'VARIABLE NAME'
2377 text =
'NUMBER OF ITEMS'
2381 text =
'ASSOCIATED VARIABLE'
2388 character(len=*),
intent(in) :: component
2389 real(DP),
intent(in) :: rchars
2390 real(DP),
intent(in) :: rlog
2391 real(DP),
intent(in) :: rint
2392 real(DP),
intent(in) :: rreal
2393 real(DP),
intent(in) :: bytes
2398 call memtab%add_term(component)
2399 call memtab%add_term(rchars)
2400 call memtab%add_term(rlog)
2401 call memtab%add_term(rint)
2402 call memtab%add_term(rreal)
2403 call memtab%add_term(bytes)
2410 real(DP),
intent(in) :: bytes
2411 real(DP),
intent(inout) :: fact
2412 character(len=*),
intent(inout) :: cunits
2422 if (bytes <
dep3)
then
2425 else if (bytes <
dep6)
then
2427 cunits =
'KILOBYTES'
2428 else if (bytes <
dep9)
then
2430 cunits =
'MEGABYTES'
2433 cunits =
'GIGABYTES'
2440 integer(I4B),
intent(in) :: iout
2441 real(DP),
intent(in) :: bytes
2443 character(len=LINELENGTH) :: title
2444 character(len=LINELENGTH) :: text
2445 character(LEN=10) :: cunits
2446 integer(I4B) :: nterms
2447 integer(I4B) :: nrows
2461 title =
'MEMORY MANAGER TOTAL STORAGE BY DATA TYPE, IN '//trim(cunits)
2465 call memtab%table_df(nrows, nterms, iout)
2472 text =
'ALLOCATED MEMORY'
2479 call memtab%add_term(
'Character')
2480 call memtab%add_term(smb)
2484 call memtab%add_term(
'Logical')
2485 call memtab%add_term(smb)
2489 call memtab%add_term(
'Integer')
2490 call memtab%add_term(smb)
2494 call memtab%add_term(
'Real')
2495 call memtab%add_term(smb)
2498 call memtab%print_separator()
2500 call memtab%add_term(
'Total')
2501 call memtab%add_term(smb)
2505 call memtab%add_term(
'Virtual')
2506 call memtab%add_term(smb)
2530 integer(I4B),
intent(in) :: iout
2533 character(len=LENMEMADDRESS),
allocatable,
dimension(:) :: cunique
2535 character(len=LENMEMPATH) :: context
2536 character(len=LENCOMPONENTNAME) :: component
2537 character(len=LENCOMPONENTNAME) :: subcomponent
2538 character(len=LENMEMADDRESS) :: context_component
2539 character(LEN=10) :: cunits
2541 integer(I4B) :: icomp
2542 integer(I4B) :: ilen
2543 integer(I8B) :: nchars
2544 integer(I8B) :: nlog
2545 integer(I8B) :: nint
2546 integer(I8B) :: nreal
2547 real(dp) :: simbytes
2562 simbytes = real(simbytes, dp)
2573 do icomp = 1,
size(cunique)
2579 ilen = len_trim(cunique(icomp))
2581 do while (itr%has_next())
2586 context_component = trim(context)//component
2587 if (cunique(icomp) /= context_component(1:ilen)) cycle
2588 if (.not. mt%master) cycle
2589 if (mt%memtype(1:6) ==
'STRING')
then
2590 nchars = nchars + mt%isize * mt%element_size
2591 else if (mt%memtype(1:7) ==
'LOGICAL')
then
2592 nlog = nlog + mt%isize
2593 else if (mt%memtype(1:7) ==
'INTEGER')
then
2594 nint = nint + mt%isize
2595 else if (mt%memtype(1:6) ==
'DOUBLE')
then
2596 nreal = nreal + mt%isize
2601 rchars = real(nchars, dp) * fact
2602 rlog = real(nlog * lgp, dp) * fact
2603 rint = real(nint * i4b, dp) * fact
2604 rreal = real(nreal * dp, dp) * fact
2607 bytes = rchars + rlog + rint + rreal
2625 integer(I4B) :: iout
2632 do while (itr%has_next())
2635 call mt%table_entry(
memtab)
2644 real(dp) :: vmem_size
2651 do while (itr%has_next())
2654 if (index(mt%path,
"__P") == 1)
then
2655 vmem_size = mt%element_size * mt%isize + vmem_size
2669 type(
memorytype),
pointer,
intent(inout) :: mt
2671 if (.not. mt%mt_associated())
return
2674 if (mt%memtype(1:6) ==
'STRING')
then
2678 if (mt%isize == 1)
then
2683 else if (mt%memtype(1:7) ==
'LOGICAL')
then
2685 else if (mt%memtype(1:7) ==
'INTEGER')
then
2687 else if (mt%memtype(1:6) ==
'DOUBLE')
then
2692 call mt%mt_deallocate()
2706 do while (itr%has_next())
2709 call mt%mt_deallocate()
2716 call store_error(
'Could not clear memory list.', terminate=.true.)
2726 character(len=LINELENGTH) :: error_msg
2727 character(len=LENVARNAME) :: ucname
2730 if (mt%mt_associated() .and. mt%element_size == -1)
then
2731 error_msg = trim(adjustl(mt%path))//
' '// &
2732 trim(adjustl(mt%name))//
' has invalid element size'
2737 if (mt%mt_associated() .and. mt%isize > 0)
then
2738 error_msg = trim(adjustl(mt%path))//
' '// &
2739 trim(adjustl(mt%name))//
' not deallocated'
2746 if (mt%name /= ucname)
then
2747 error_msg = trim(adjustl(mt%path))//
' '// &
2748 trim(adjustl(mt%name))//
' not upper case'
2760 character(len=LENMEMADDRESS),
allocatable,
dimension(:),
intent(inout) :: &
2764 character(len=LENMEMPATH) :: context
2765 character(len=LENCOMPONENTNAME) :: component
2766 character(len=LENCOMPONENTNAME) :: subcomponent
2767 character(len=LENMEMADDRESS) :: context_component
2773 allocate (cunique(0))
2777 do while (itr%has_next())
2782 context_component = trim(context)//component
2783 ipa =
ifind(cunique, context_component)
2786 cunique(
size(cunique)) = context_component
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter lencomponentname
maximum length of a component name
@ tabcenter
centered table column
@ tabright
right justified table column
@ tableft
left justified table column
integer(i4b), parameter lenmemaddress
maximum length of the full memory address, including variable name
real(dp), parameter dep3
real constant 1000
@ tabucstring
upper case string table data
@ tabstring
string table data
@ tabinteger
integer table data
real(dp), parameter dep6
real constant 1000000
integer(i4b), parameter lenmemseparator
maximum length of the memory path separator used, currently a '/'
real(dp), parameter dep9
real constant 1e9
integer(i4b), parameter lenvarname
maximum length of a variable name
integer(i4b), parameter, public lenmemtype
maximum length of a memory manager type
real(dp), parameter dem3
real constant 1e-3
real(dp), parameter dem6
real constant 1e-6
real(dp), parameter dzero
real constant zero
real(dp), parameter dem9
real constant 1e-9
integer(i4b), parameter lenmempath
maximum length of the memory path
real(dp), parameter done
real constant 1
This module defines variable data types.
character(len=lenmempath) function get_mem_path_context(mem_path)
Return the context from the memory path.
subroutine mem_check_length(name, max_length, description)
Generic routine to check the length of (parts of) the memory address.
subroutine strip_context_mem_path(mem_path, mem_path_no_context)
Remove the context from the memory path.
subroutine split_mem_path(mem_path, component, subcomponent)
Split the memory path into component(s)
subroutine reallocate_int2d(aint, ncol, nrow, name, mem_path)
Reallocate a 2-dimensional integer array.
subroutine allocate_logical(sclr, name, mem_path)
Allocate a logical scalar.
subroutine allocate_int2d(aint, ncol, nrow, name, mem_path)
Allocate a 2-dimensional integer array.
subroutine mem_summary_line(component, rchars, rlog, rint, rreal, bytes)
Write a row for the memory_print_option 'SUMMARY' table.
subroutine allocate_dbl3d(adbl, ncol, nrow, nlay, name, mem_path)
Allocate a 3-dimensional real array.
integer(i8b) nvalues_adbl
subroutine deallocate_str1d(astr1d, name, mem_path)
Deallocate an array of defined-length character strings.
subroutine deallocate_int(sclr)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine deallocate_logical1d(alog, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
type(tabletype), pointer memtab
subroutine setptr_int3d(aint, name, mem_path)
Set pointer to 3d integer array.
subroutine mem_detailed_table(iout, nrows)
Create a table if memory_print_option is 'ALL'.
subroutine deallocate_charstr1d(astr1d, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine allocate_charstr1d(acharstr1d, ilen, nrow, name, mem_path)
Allocate a 1-dimensional array of deferred-length CharacterStringType.
subroutine reallocate_charstr1d(acharstr1d, ilen, nrow, name, mem_path)
Reallocate a 1-dimensional deferred length string array.
subroutine, public mem_write_usage(iout)
Write memory manager memory usage based on the user-specified memory_print_option.
subroutine reallocate_dbl2d(adbl, ncol, nrow, name, mem_path)
Reallocate a 2-dimensional real array.
integer(i8b) nvalues_aint
subroutine setptr_int(sclr, name, mem_path)
Set pointer to integer scalar.
subroutine checkin_charstr1d(acharstr1d, ilen, name, mem_path, name2, mem_path2)
Check in an existing 1d CharacterStringType array with a new address (name + path)
subroutine mem_cleanup_table()
Generic function to clean a memory manager table.
subroutine copyptr_int1d(aint, name, mem_path, mem_path_copy)
Make a copy of a 1-dimensional integer array.
subroutine deallocate_dbl1d(adbl, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine allocate_str1d(astr1d, ilen, nrow, name, mem_path)
Allocate a 1-dimensional defined length string array.
subroutine allocate_str(sclr, ilen, name, mem_path)
Allocate a character string.
subroutine, public get_mem_type(name, mem_path, var_type)
@ brief Get the variable memory type
subroutine setptr_int2d(aint, name, mem_path)
Set pointer to 2d integer array.
subroutine, public mem_da()
Deallocate memory in the memory manager.
subroutine deallocate_int1d(aint, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
integer(i8b) nvalues_astr
subroutine deallocate_dbl(sclr)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine copyptr_int2d(aint, name, mem_path, mem_path_copy)
Make a copy of a 2-dimensional integer array.
subroutine mem_da_check(mt)
subroutine allocate_dbl(sclr, name, mem_path)
Allocate a real scalar.
real(dp) function calc_virtual_mem()
Sum up virtual memory, i.e. memory.
subroutine copyptr_dbl2d(adbl, name, mem_path, mem_path_copy)
Make a copy of a 2-dimensional real array.
subroutine reassignptr_int2d(aint, name, mem_path, name_target, mem_path_target)
Set the pointer for a 2-dimensional integer array to.
subroutine reallocate_logical1d(alog, nrow, name, mem_path)
Reallocate a 1-dimensional logical array.
subroutine setptr_dbl(sclr, name, mem_path)
Set pointer to a real scalar.
subroutine deallocate_int3d(aint, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine deallocate_int2d(aint, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine reassignptr_dbl1d(adbl, name, mem_path, name_target, mem_path_target)
Set the pointer for a 1-dimensional real array to.
subroutine, public mem_release(mt)
Release a memory store entry: deallocate data and update counters.
subroutine allocate_int3d(aint, ncol, nrow, nlay, name, mem_path)
Allocate a 3-dimensional integer array.
subroutine, public get_mem_shape(name, mem_path, mem_shape)
@ brief Get the variable memory shape
subroutine deallocate_dbl2d(adbl, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine mem_units(bytes, fact, cunits)
Determine appropriate memory unit and conversion factor.
subroutine setptr_int1d(aint, name, mem_path)
Set pointer to 1d integer array.
subroutine setptr_str1d(astr1d, name, mem_path)
Set pointer to a fixed-length string array.
subroutine checkin_int2d(aint2d, name, mem_path, name2, mem_path2)
Check in an existing 2d integer array with a new address (name + path)
type(memorystoretype), public memorystore
subroutine reallocate_dbl1d(adbl, nrow, name, mem_path)
Reallocate a 1-dimensional real array.
subroutine setptr_dbl2d(adbl, name, mem_path)
Set pointer to a 2d real array.
subroutine deallocate_logical(sclr)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine setptr_logical1d(alog, name, mem_path)
Set pointer to 1d logical array.
subroutine checkin_dbl2d(adbl2d, name, mem_path, name2, mem_path2)
Check in an existing 2d double precision array with a new address (name + path)
subroutine deallocate_dbl3d(adbl, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine reallocate_int1d(aint, nrow, name, mem_path)
Reallocate a 1-dimensional integer array.
subroutine checkin_logical1d(alog, name, mem_path, name2, mem_path2)
Check in an existing 1d logical array with a new address (name + path)
subroutine, public get_from_memorystore(name, mem_path, mt, found, check)
@ brief Get a memory type entry from the memory list
subroutine, public mem_print_detailed(iout)
subroutine reallocate_str1d(astr, ilen, nrow, name, mem_path)
Reallocate a 1-dimensional defined length string array.
subroutine copyptr_dbl1d(adbl, name, mem_path, mem_path_copy)
Make a copy of a 1-dimensional real array.
subroutine allocate_logical1d(alog, nrow, name, mem_path)
Allocate a 1-dimensional logical array.
subroutine reassignptr_dbl2d(adbl, name, mem_path, name_target, mem_path_target)
Set the pointer for a 2-dimensional real array to.
subroutine copyptr_logical1d(alog, name, mem_path, mem_path_copy)
Make a copy of a 1-dimensional logical array.
subroutine allocate_int1d(aint, nrow, name, mem_path)
Allocate a 1-dimensional integer array.
subroutine allocate_int(sclr, name, mem_path)
Allocate a integer scalar.
subroutine reassignptr_int1d(aint, name, mem_path, name_target, mem_path_target)
Set the pointer for a 1-dimensional integer array to.
subroutine mem_summary_total(iout, bytes)
Create and fill a table with the total allocated memory.
subroutine, public get_isize(name, mem_path, isize)
@ brief Get the number of elements for this variable
subroutine allocate_dbl2d(adbl, ncol, nrow, name, mem_path)
Allocate a 2-dimensional real array.
subroutine deallocate_str(sclr, name, mem_path)
DEPRECATED. The memory manager will handle the deallocation of the pointer.
subroutine, public get_mem_rank(name, mem_path, rank)
@ brief Get the variable rank
subroutine checkin_dbl1d(adbl, name, mem_path, name2, mem_path2)
Check in an existing 1d double precision array with a new address (name + path)
subroutine checkin_int1d(aint, name, mem_path, name2, mem_path2)
Check in an existing 1d integer array with a new address (name + path)
subroutine reassignptr_logical1d(alog, name, mem_path, name_target, mem_path_target)
Set the pointer for a 1-dimensional logical array to.
subroutine reassignptr_int(sclr, name, mem_path, name_target, mem_path_target)
Set the pointer for an integer scalar to.
subroutine, public copy_dbl1d(adbl, name, mem_path)
Copy values from a 1-dimensional real array in the memory.
subroutine setptr_dbl3d(adbl, name, mem_path)
Set pointer to a 3d real array.
subroutine, public get_mem_elem_size(name, mem_path, size)
@ brief Get the memory size of a single element of the stored variable
subroutine setptr_dbl1d(adbl, name, mem_path)
Set pointer to a 1d real array.
subroutine setptr_str(asrt, name, mem_path)
Set pointer to a string (scalar)
integer(i8b) nvalues_alogical
subroutine setptr_charstr1d(acharstr1d, name, mem_path)
Set pointer to an array of CharacterStringType.
subroutine mem_unique_origins(cunique)
Create a array with unique first components from all memory paths. Only the first component of the me...
subroutine mem_summary_table(iout, nrows, cunits)
Create a table if memory_print_option is 'SUMMARY'.
subroutine setptr_logical(sclr, name, mem_path)
Set pointer to a logical scalar.
subroutine, public mem_set_print_option(iout, keyword, error_msg)
Set the memory print option.
subroutine allocate_dbl1d(adbl, nrow, name, mem_path)
Allocate a 1-dimensional real array.
subroutine allocate_error(varname, mem_path, istat, isize)
Issue allocation error message and stop program execution.
This module contains simulation methods.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
subroutine, public table_cr(this, name, title)
This module contains version information.
integer(i4b), parameter idevelopmode
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.