153 character(len=*),
intent(in) :: name
154 character(len=*),
intent(in) :: mem_path
155 character(len=LENMEMTYPE),
intent(out) :: var_type
158 logical(LGP) :: found
164 var_type = mt%memtype
173 character(len=*),
intent(in) :: name
174 character(len=*),
intent(in) :: mem_path
175 integer(I4B),
intent(out) :: rank
178 logical(LGP) :: found
189 if (
associated(mt%logicalsclr)) rank = 0
190 if (
associated(mt%intsclr)) rank = 0
191 if (
associated(mt%dblsclr)) rank = 0
192 if (
associated(mt%alogical1d)) rank = 1
193 if (
associated(mt%aint1d)) rank = 1
194 if (
associated(mt%aint2d)) rank = 2
195 if (
associated(mt%aint3d)) rank = 3
196 if (
associated(mt%adbl1d)) rank = 1
197 if (
associated(mt%adbl2d)) rank = 2
198 if (
associated(mt%adbl3d)) rank = 3
199 if (
associated(mt%strsclr)) rank = 0
200 if (
associated(mt%astr1d)) rank = 1
201 if (
associated(mt%acharstr1d)) rank = 1
210 character(len=*),
intent(in) :: name
211 character(len=*),
intent(in) :: mem_path
212 integer(I4B),
intent(out) :: size
215 logical(LGP) :: found
226 size = mt%element_size
236 character(len=*),
intent(in) :: name
237 character(len=*),
intent(in) :: mem_path
238 integer(I4B),
dimension(:),
intent(out) :: mem_shape
241 logical(LGP) :: found
249 if (
associated(mt%logicalsclr)) mem_shape = shape(mt%logicalsclr)
250 if (
associated(mt%intsclr)) mem_shape = shape(mt%logicalsclr)
251 if (
associated(mt%dblsclr)) mem_shape = shape(mt%dblsclr)
252 if (
associated(mt%alogical1d)) mem_shape = shape(mt%alogical1d)
253 if (
associated(mt%aint1d)) mem_shape = shape(mt%aint1d)
254 if (
associated(mt%aint2d)) mem_shape = shape(mt%aint2d)
255 if (
associated(mt%aint3d)) mem_shape = shape(mt%aint3d)
256 if (
associated(mt%adbl1d)) mem_shape = shape(mt%adbl1d)
257 if (
associated(mt%adbl2d)) mem_shape = shape(mt%adbl2d)
258 if (
associated(mt%adbl3d)) mem_shape = shape(mt%adbl3d)
259 if (
associated(mt%strsclr)) mem_shape = shape(mt%strsclr)
260 if (
associated(mt%astr1d)) mem_shape = shape(mt%astr1d)
261 if (
associated(mt%acharstr1d)) mem_shape = shape(mt%acharstr1d)
274 character(len=*),
intent(in) :: name
275 character(len=*),
intent(in) :: mem_path
276 integer(I4B),
intent(out) :: isize
279 logical(LGP) :: found
280 logical(LGP) :: terminate
304 character(len=*),
intent(in) :: name
305 character(len=*),
intent(in) :: mem_path
306 type(
memorytype),
pointer,
intent(inout) :: mt
307 logical(LGP),
intent(out) :: found
308 logical(LGP),
intent(in),
optional :: check
311 logical(LGP) check_opt
314 found =
associated(mt)
317 if (
present(check))
then
321 if (.not. found)
then
322 errmsg =
"Programming error in memory manager. Variable '"// &
323 trim(name)//
"' in '"//trim(mem_path)//
"' cannot be "// &
324 "assigned because it does not exist in memory manager."
333 character(len=*),
intent(in) :: varname
334 character(len=*),
intent(in) :: mem_path
335 integer(I4B),
intent(in) :: istat
336 integer(I4B),
intent(in) :: isize
338 character(len=20) :: csize
339 character(len=20) :: cstat
343 write (csize,
'(i0)') isize
344 write (cstat,
'(i0)') istat
347 errmsg =
"Error trying to allocate memory. Path '"//trim(mem_path)// &
348 "' variable name '"//trim(varname)//
"' size '"//trim(csize)// &
349 "'. Error message is '"//trim(adjustl(
errmsg))// &
350 "'. Status code is "//trim(cstat)//
'.'
359 logical(LGP),
pointer,
intent(inout) :: sclr
360 character(len=*),
intent(in) :: name
361 character(len=*),
intent(in) :: mem_path
363 integer(I4B) :: istat
383 mt%logicalsclr => sclr
384 mt%element_size = lgp
388 write (mt%memtype,
"(a)")
'LOGICAL'
397 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
398 integer(I4B),
intent(in) :: nrow
399 character(len=*),
intent(in) :: name
400 character(len=*),
intent(in) :: mem_path
403 integer(I4B) :: istat
404 integer(I4B) :: isize
426 mt%alogical1d => alog
427 mt%element_size = lgp
431 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', isize
440 integer(I4B),
intent(in) :: ilen
441 character(len=ilen),
pointer,
intent(inout) :: sclr
442 character(len=*),
intent(in) :: name
443 character(len=*),
intent(in) :: mem_path
445 integer(I4B) :: istat
452 errmsg =
'Programming error in allocate_str. ILEN must be greater than 0.'
460 allocate (
character(len=ilen) :: sclr, stat=istat,
errmsg=
errmsg)
476 mt%element_size = ilen
480 write (mt%memtype,
"(a,' LEN=',i0)")
'STRING', ilen
489 integer(I4B),
intent(in) :: ilen
490 character(len=ilen),
dimension(:), &
491 pointer,
contiguous,
intent(inout) :: astr1d
492 integer(I4B),
intent(in) :: nrow
493 character(len=*),
intent(in) :: name
494 character(len=*),
intent(in) :: mem_path
497 character(len=ilen) :: string
499 integer(I4B) :: istat
500 integer(I4B) :: isize
508 errmsg =
'Programming error in allocate_str1d. '// &
509 'ILEN must be greater than 0.'
520 allocate (
character(len=ilen) :: astr1d(nrow), stat=istat,
errmsg=
errmsg)
540 mt%element_size = ilen
544 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
554 pointer,
contiguous,
intent(inout) :: acharstr1d
555 integer(I4B),
intent(in) :: ilen
556 integer(I4B),
intent(in) :: nrow
557 character(len=*),
intent(in) :: name
558 character(len=*),
intent(in) :: mem_path
560 character(len=ilen) :: string
563 integer(I4B) :: istat
564 integer(I4B) :: isize
586 acharstr1d(n) = string
596 mt%acharstr1d => acharstr1d
597 mt%element_size = ilen
601 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
610 integer(I4B),
pointer,
intent(inout) :: sclr
611 character(len=*),
intent(in) :: name
612 character(len=*),
intent(in) :: mem_path
615 integer(I4B) :: istat
635 mt%element_size = i4b
639 write (mt%memtype,
"(a)")
'INTEGER'
648 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
649 integer(I4B),
intent(in) :: nrow
650 character(len=*),
intent(in) :: name
651 character(len=*),
intent(in) :: mem_path
654 integer(I4B) :: istat
655 integer(I4B) :: isize
678 mt%element_size = i4b
682 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', isize
691 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
692 integer(I4B),
intent(in) :: ncol
693 integer(I4B),
intent(in) :: nrow
694 character(len=*),
intent(in) :: name
695 character(len=*),
intent(in) :: mem_path
698 integer(I4B) :: istat
699 integer(I4B) :: isize
722 mt%element_size = i4b
726 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
735 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
736 integer(I4B),
intent(in) :: ncol
737 integer(I4B),
intent(in) :: nrow
738 integer(I4B),
intent(in) :: nlay
739 character(len=*),
intent(in) :: name
740 character(len=*),
intent(in) :: mem_path
743 integer(I4B) :: istat
744 integer(I4B) :: isize
751 isize = ncol * nrow * nlay
754 allocate (aint(ncol, nrow, nlay), stat=istat,
errmsg=
errmsg)
767 mt%element_size = i4b
771 write (mt%memtype,
"(a,' (',i0,',',i0,',',i0,')')")
'INTEGER', ncol, &
781 real(DP),
pointer,
intent(inout) :: sclr
782 character(len=*),
intent(in) :: name
783 character(len=*),
intent(in) :: mem_path
786 integer(I4B) :: istat
810 write (mt%memtype,
"(a)")
'DOUBLE'
819 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
820 integer(I4B),
intent(in) :: nrow
821 character(len=*),
intent(in) :: name
822 character(len=*),
intent(in) :: mem_path
825 integer(I4B) :: istat
826 integer(I4B) :: isize
853 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
862 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
863 integer(I4B),
intent(in) :: ncol
864 integer(I4B),
intent(in) :: nrow
865 character(len=*),
intent(in) :: name
866 character(len=*),
intent(in) :: mem_path
869 integer(I4B) :: istat
870 integer(I4B) :: isize
897 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
906 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
907 integer(I4B),
intent(in) :: ncol
908 integer(I4B),
intent(in) :: nrow
909 integer(I4B),
intent(in) :: nlay
910 character(len=*),
intent(in) :: name
911 character(len=*),
intent(in) :: mem_path
914 integer(I4B) :: istat
915 integer(I4B) :: isize
922 isize = ncol * nrow * nlay
925 allocate (adbl(ncol, nrow, nlay), stat=istat,
errmsg=
errmsg)
942 write (mt%memtype,
"(a,' (',i0,',',i0,',',i0,')')")
'DOUBLE', ncol, &
952 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(in) :: alog
953 character(len=*),
intent(in) :: name
954 character(len=*),
intent(in) :: mem_path
955 character(len=*),
intent(in) :: name2
956 character(len=*),
intent(in) :: mem_path2
959 integer(I4B) :: isize
972 mt%alogical1d => alog
973 mt%element_size = lgp
977 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', isize
981 mt%mastername = name2
982 mt%masterPath = mem_path2
991 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: aint
992 character(len=*),
intent(in) :: name
993 character(len=*),
intent(in) :: mem_path
994 character(len=*),
intent(in) :: name2
995 character(len=*),
intent(in) :: mem_path2
998 integer(I4B) :: isize
1012 mt%element_size = i4b
1016 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', isize
1020 mt%mastername = name2
1021 mt%masterPath = mem_path2
1030 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint2d
1031 character(len=*),
intent(in) :: name
1032 character(len=*),
intent(in) :: mem_path
1033 character(len=*),
intent(in) :: name2
1034 character(len=*),
intent(in) :: mem_path2
1037 integer(I4B) :: ncol, nrow, isize
1044 ncol =
size(aint2d, dim=1)
1045 nrow =
size(aint2d, dim=2)
1056 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
1060 mt%mastername = name2
1061 mt%masterPath = mem_path2
1070 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1071 character(len=*),
intent(in) :: name
1072 character(len=*),
intent(in) :: mem_path
1073 character(len=*),
intent(in) :: name2
1074 character(len=*),
intent(in) :: mem_path2
1077 integer(I4B) :: isize
1091 mt%element_size = dp
1095 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
1099 mt%mastername = name2
1100 mt%masterPath = mem_path2
1109 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl2d
1110 character(len=*),
intent(in) :: name
1111 character(len=*),
intent(in) :: mem_path
1112 character(len=*),
intent(in) :: name2
1113 character(len=*),
intent(in) :: mem_path2
1116 integer(I4B) :: ncol, nrow, isize
1123 ncol =
size(adbl2d, dim=1)
1124 nrow =
size(adbl2d, dim=2)
1135 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
1139 mt%mastername = name2
1140 mt%masterPath = mem_path2
1150 pointer,
contiguous,
intent(inout) :: acharstr1d
1151 integer(I4B),
intent(in) :: ilen
1152 character(len=*),
intent(in) :: name
1153 character(len=*),
intent(in) :: mem_path
1154 character(len=*),
intent(in) :: name2
1155 character(len=*),
intent(in) :: mem_path2
1158 integer(I4B) :: isize
1165 isize =
size(acharstr1d)
1171 mt%acharstr1d => acharstr1d
1172 mt%element_size = ilen
1176 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, isize
1180 mt%mastername = name2
1181 mt%masterPath = mem_path2
1190 integer(I4B),
intent(in) :: ilen
1191 integer(I4B),
intent(in) :: nrow
1192 character(len=ilen),
dimension(:),
pointer,
contiguous,
intent(inout) :: astr
1193 character(len=*),
intent(in) :: name
1194 character(len=*),
intent(in) :: mem_path
1197 logical(LGP) :: found
1198 character(len=ilen),
dimension(:),
allocatable :: astrtemp
1199 integer(I4B) :: istat
1200 integer(I4B) :: isize
1201 integer(I4B) :: isize_old
1202 integer(I4B) :: nrow_old
1210 isize_old = mt%isize
1211 if (isize_old > 0)
then
1212 nrow_old =
size(astr)
1222 if (istat /= 0)
then
1228 astrtemp(n) = astr(n)
1232 do n = nrow_old + 1, nrow
1241 if (istat /= 0)
then
1247 astr(n) = astrtemp(n)
1251 deallocate (astrtemp)
1255 mt%element_size = ilen
1257 mt%nrealloc = mt%nrealloc + 1
1260 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
1262 errmsg =
"Programming error, variable '"//trim(name)//
"' from '"// &
1263 trim(mem_path)//
"' is not defined in the memory manager. Use "// &
1264 "mem_allocate instead."
1273 intent(inout) :: acharstr1d
1274 integer(I4B),
intent(in) :: ilen
1275 integer(I4B),
intent(in) :: nrow
1276 character(len=*),
intent(in) :: name
1277 character(len=*),
intent(in) :: mem_path
1280 logical(LGP) :: found
1282 character(len=ilen) :: string
1283 integer(I4B) :: istat
1284 integer(I4B) :: isize
1285 integer(I4B) :: isize_old
1286 integer(I4B) :: nrow_old
1297 isize_old = mt%isize
1298 if (isize_old > 0)
then
1299 nrow_old =
size(acharstr1d)
1309 if (istat /= 0)
then
1315 astrtemp(n) = acharstr1d(n)
1316 call acharstr1d(n)%destroy()
1320 do n = nrow_old + 1, nrow
1321 astrtemp(n) = string
1325 deallocate (acharstr1d)
1329 if (istat /= 0)
then
1335 acharstr1d(n) = astrtemp(n)
1336 call astrtemp(n)%destroy()
1340 deallocate (astrtemp)
1343 mt%acharstr1d => acharstr1d
1344 mt%element_size = ilen
1346 mt%nrealloc = mt%nrealloc + 1
1349 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
1351 errmsg =
"Programming error, variable '"//trim(name)//
"' from '"// &
1352 trim(mem_path)//
"' is not defined in the memory manager. Use "// &
1353 "mem_allocate instead."
1361 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1362 integer(I4B),
intent(in) :: nrow
1363 character(len=*),
intent(in) :: name
1364 character(len=*),
intent(in) :: mem_path
1367 logical(LGP) :: found
1368 integer(I4B) :: istat
1369 integer(I4B) :: isize
1371 integer(I4B) :: isizeold
1372 integer(I4B) :: ifill
1380 isizeold =
size(mt%alogical1d)
1381 ifill = min(isizeold, isize)
1383 if (istat /= 0)
then
1387 alog(i) = mt%alogical1d(i)
1391 deallocate (mt%alogical1d)
1392 mt%alogical1d => alog
1393 mt%element_size = lgp
1395 mt%nrealloc = mt%nrealloc + 1
1403 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1404 integer(I4B),
intent(in) :: nrow
1405 character(len=*),
intent(in) :: name
1406 character(len=*),
intent(in) :: mem_path
1409 logical(LGP) :: found
1410 integer(I4B) :: istat
1411 integer(I4B) :: isize
1413 integer(I4B) :: isizeold
1414 integer(I4B) :: ifill
1422 isizeold =
size(mt%aint1d)
1423 ifill = min(isizeold, isize)
1425 if (istat /= 0)
then
1429 aint(i) = mt%aint1d(i)
1433 deallocate (mt%aint1d)
1435 mt%element_size = i4b
1437 mt%nrealloc = mt%nrealloc + 1
1445 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1446 integer(I4B),
intent(in) :: ncol
1447 integer(I4B),
intent(in) :: nrow
1448 character(len=*),
intent(in) :: name
1449 character(len=*),
intent(in) :: mem_path
1452 logical(LGP) :: found
1453 integer(I4B) :: istat
1454 integer(I4B),
dimension(2) :: ishape
1457 integer(I4B) :: isize
1458 integer(I4B) :: isizeold
1465 ishape = shape(mt%aint2d)
1467 isizeold = ishape(1) * ishape(2)
1469 if (istat /= 0)
then
1474 aint(j, i) = mt%aint2d(j, i)
1479 deallocate (mt%aint2d)
1481 mt%element_size = i4b
1483 mt%nrealloc = mt%nrealloc + 1
1486 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
1492 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1493 integer(I4B),
intent(in) :: nrow
1494 character(len=*),
intent(in) :: name
1495 character(len=*),
intent(in) :: mem_path
1498 integer(I4B) :: istat
1499 integer(I4B) :: isize
1501 integer(I4B) :: isizeold
1502 integer(I4B) :: ifill
1503 logical(LGP) :: found
1511 isizeold =
size(mt%adbl1d)
1512 ifill = min(isizeold, isize)
1514 if (istat /= 0)
then
1518 adbl(i) = mt%adbl1d(i)
1522 deallocate (mt%adbl1d)
1524 mt%element_size = dp
1526 mt%nrealloc = mt%nrealloc + 1
1529 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
1535 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1536 integer(I4B),
intent(in) :: ncol
1537 integer(I4B),
intent(in) :: nrow
1538 character(len=*),
intent(in) :: name
1539 character(len=*),
intent(in) :: mem_path
1542 logical(LGP) :: found
1543 integer(I4B) :: istat
1544 integer(I4B),
dimension(2) :: ishape
1547 integer(I4B) :: isize
1548 integer(I4B) :: isizeold
1555 ishape = shape(mt%adbl2d)
1557 isizeold = ishape(1) * ishape(2)
1559 if (istat /= 0)
then
1564 adbl(j, i) = mt%adbl2d(j, i)
1569 deallocate (mt%adbl2d)
1571 mt%element_size = dp
1573 mt%nrealloc = mt%nrealloc + 1
1576 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
1582 logical(LGP),
pointer,
intent(inout) :: sclr
1583 character(len=*),
intent(in) :: name
1584 character(len=*),
intent(in) :: mem_path
1587 logical(LGP) :: found
1590 sclr => mt%logicalsclr
1596 integer(I4B),
pointer,
intent(inout) :: sclr
1597 character(len=*),
intent(in) :: name
1598 character(len=*),
intent(in) :: mem_path
1601 logical(LGP) :: found
1610 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1611 character(len=*),
intent(in) :: name
1612 character(len=*),
intent(in) :: mem_path
1615 logical(LGP) :: found
1618 alog => mt%alogical1d
1624 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1625 character(len=*),
intent(in) :: name
1626 character(len=*),
intent(in) :: mem_path
1629 logical(LGP) :: found
1638 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1639 character(len=*),
intent(in) :: name
1640 character(len=*),
intent(in) :: mem_path
1643 logical(LGP) :: found
1652 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
1653 character(len=*),
intent(in) :: name
1654 character(len=*),
intent(in) :: mem_path
1657 logical(LGP) :: found
1666 real(DP),
pointer,
intent(inout) :: sclr
1667 character(len=*),
intent(in) :: name
1668 character(len=*),
intent(in) :: mem_path
1671 logical(LGP) :: found
1680 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1681 character(len=*),
intent(in) :: name
1682 character(len=*),
intent(in) :: mem_path
1685 logical(LGP) :: found
1694 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1695 character(len=*),
intent(in) :: name
1696 character(len=*),
intent(in) :: mem_path
1699 logical(LGP) :: found
1708 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
1709 character(len=*),
intent(in) :: name
1710 character(len=*),
intent(in) :: mem_path
1713 logical(LGP) :: found
1722 character(len=:),
pointer :: asrt
1723 character(len=*),
intent(in) :: name
1724 character(len=*),
intent(in) :: mem_path
1727 logical(LGP) :: found
1736 character(len=:),
dimension(:), &
1737 pointer,
contiguous,
intent(inout) :: astr1d
1738 character(len=*),
intent(in) :: name
1739 character(len=*),
intent(in) :: mem_path
1742 logical(LGP) :: found
1745 select type (item => mt%astr1d)
1746 type is (
character(*))
1757 intent(inout) :: acharstr1d
1758 character(len=*),
intent(in) :: name
1759 character(len=*),
intent(in) :: mem_path
1762 logical(LGP) :: found
1765 acharstr1d => mt%acharstr1d
1771 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1772 character(len=*),
intent(in) :: name
1773 character(len=*),
intent(in) :: mem_path
1774 character(len=*),
intent(in),
optional :: mem_path_copy
1779 logical(LGP) :: found
1785 if (
present(mem_path_copy))
then
1789 allocate (alog(
size(mt%alogical1d)))
1791 do n = 1,
size(mt%alogical1d)
1792 alog(n) = mt%alogical1d(n)
1799 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1800 character(len=*),
intent(in) :: name
1801 character(len=*),
intent(in) :: mem_path
1802 character(len=*),
intent(in),
optional :: mem_path_copy
1807 logical(LGP) :: found
1813 if (
present(mem_path_copy))
then
1814 call allocate_int1d(aint,
size(mt%aint1d), mt%name, mem_path_copy)
1817 allocate (aint(
size(mt%aint1d)))
1819 do n = 1,
size(mt%aint1d)
1820 aint(n) = mt%aint1d(n)
1827 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1828 character(len=*),
intent(in) :: name
1829 character(len=*),
intent(in) :: mem_path
1830 character(len=*),
intent(in),
optional :: mem_path_copy
1835 logical(LGP) :: found
1838 integer(I4B) :: ncol
1839 integer(I4B) :: nrow
1843 ncol =
size(mt%aint2d, dim=1)
1844 nrow =
size(mt%aint2d, dim=2)
1846 if (
present(mem_path_copy))
then
1850 allocate (aint(ncol, nrow))
1854 aint(j, i) = mt%aint2d(j, i)
1862 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1863 character(len=*),
intent(in) :: name
1864 character(len=*),
intent(in) :: mem_path
1865 character(len=*),
intent(in),
optional :: mem_path_copy
1870 logical(LGP) :: found
1876 if (
present(mem_path_copy))
then
1877 call allocate_dbl1d(adbl,
size(mt%adbl1d), mt%name, mem_path_copy)
1880 allocate (adbl(
size(mt%adbl1d)))
1882 do n = 1,
size(mt%adbl1d)
1883 adbl(n) = mt%adbl1d(n)
1890 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1891 character(len=*),
intent(in) :: name
1892 character(len=*),
intent(in) :: mem_path
1893 character(len=*),
intent(in),
optional :: mem_path_copy
1898 logical(LGP) :: found
1901 integer(I4B) :: ncol
1902 integer(I4B) :: nrow
1906 ncol =
size(mt%adbl2d, dim=1)
1907 nrow =
size(mt%adbl2d, dim=2)
1909 if (
present(mem_path_copy))
then
1913 allocate (adbl(ncol, nrow))
1917 adbl(j, i) = mt%adbl2d(j, i)
1925 real(dp),
dimension(:),
intent(inout) :: adbl
1926 character(len=*),
intent(in) :: name
1927 character(len=*),
intent(in) :: mem_path
1930 logical(LGP) :: found
1934 do n = 1,
size(mt%adbl1d)
1935 adbl(n) = mt%adbl1d(n)
1942 integer(I4B),
pointer,
intent(inout) :: sclr
1943 character(len=*),
intent(in) :: name
1944 character(len=*),
intent(in) :: mem_path
1945 character(len=*),
intent(in) :: name_target
1946 character(len=*),
intent(in) :: mem_path_target
1950 logical(LGP) :: found
1954 if (
associated(sclr))
then
1960 mt%element_size = i4b
1962 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', mt%isize
1966 mt%mastername = name_target
1967 mt%masterPath = mem_path_target
1974 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1975 character(len=*),
intent(in) :: name
1976 character(len=*),
intent(in) :: mem_path
1977 character(len=*),
intent(in) :: name_target
1978 character(len=*),
intent(in) :: mem_path_target
1982 logical(LGP) :: found
1986 if (
size(alog) > 0)
then
1990 alog => mt2%alogical1d
1991 mt%alogical1d => alog
1992 mt%element_size = lgp
1993 mt%isize =
size(alog)
1994 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', mt%isize
1998 mt%mastername = name_target
1999 mt%masterPath = mem_path_target
2005 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
2006 character(len=*),
intent(in) :: name
2007 character(len=*),
intent(in) :: mem_path
2008 character(len=*),
intent(in) :: name_target
2009 character(len=*),
intent(in) :: mem_path_target
2013 logical(LGP) :: found
2017 if (
size(aint) > 0)
then
2023 mt%element_size = i4b
2024 mt%isize =
size(aint)
2025 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', mt%isize
2029 mt%mastername = name_target
2030 mt%masterPath = mem_path_target
2036 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
2037 character(len=*),
intent(in) :: name
2038 character(len=*),
intent(in) :: mem_path
2039 character(len=*),
intent(in) :: name_target
2040 character(len=*),
intent(in) :: mem_path_target
2044 logical(LGP) :: found
2045 integer(I4B) :: ncol
2046 integer(I4B) :: nrow
2050 if (
size(aint) > 0)
then
2056 mt%element_size = i4b
2057 mt%isize =
size(aint)
2058 ncol =
size(aint, dim=1)
2059 nrow =
size(aint, dim=2)
2060 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
2064 mt%mastername = name_target
2065 mt%masterPath = mem_path_target
2071 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
2072 character(len=*),
intent(in) :: name
2073 character(len=*),
intent(in) :: mem_path
2074 character(len=*),
intent(in) :: name_target
2075 character(len=*),
intent(in) :: mem_path_target
2079 logical(LGP) :: found
2083 if (
size(adbl) > 0)
then
2089 mt%element_size = dp
2090 mt%isize =
size(adbl)
2091 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', mt%isize
2095 mt%mastername = name_target
2096 mt%masterPath = mem_path_target
2102 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
2103 character(len=*),
intent(in) :: name
2104 character(len=*),
intent(in) :: mem_path
2105 character(len=*),
intent(in) :: name_target
2106 character(len=*),
intent(in) :: mem_path_target
2110 logical(LGP) :: found
2111 integer(I4B) :: ncol
2112 integer(I4b) :: nrow
2116 if (
size(adbl) > 0)
then
2122 mt%element_size = dp
2123 mt%isize =
size(adbl)
2124 ncol =
size(adbl, dim=1)
2125 nrow =
size(adbl, dim=2)
2126 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
2130 mt%mastername = name_target
2131 mt%masterPath = mem_path_target
2137 character(len=*),
pointer,
intent(inout) :: sclr
2138 character(len=*),
intent(in),
optional :: name
2139 character(len=*),
intent(in),
optional :: mem_path
2148 character(len=*),
dimension(:),
pointer,
contiguous,
intent(inout) :: astr1d
2149 character(len=*),
optional,
intent(in) :: name
2150 character(len=*),
optional,
intent(in) :: mem_path
2161 intent(inout) :: astr1d
2162 character(len=*),
optional,
intent(in) :: name
2163 character(len=*),
optional,
intent(in) :: mem_path
2171 logical(LGP),
pointer,
intent(inout) :: sclr
2179 integer(I4B),
pointer,
intent(inout) :: sclr
2187 real(DP),
pointer,
intent(inout) :: sclr
2195 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
2196 character(len=*),
optional :: name
2197 character(len=*),
optional :: mem_path
2205 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
2206 character(len=*),
optional :: name
2207 character(len=*),
optional :: mem_path
2215 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
2216 character(len=*),
optional :: name
2217 character(len=*),
optional :: mem_path
2225 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
2226 character(len=*),
optional :: name
2227 character(len=*),
optional :: mem_path
2235 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
2236 character(len=*),
optional :: name
2237 character(len=*),
optional :: mem_path
2245 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
2246 character(len=*),
optional :: name
2247 character(len=*),
optional :: mem_path
2255 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
2256 character(len=*),
optional :: name
2257 character(len=*),
optional :: mem_path
2265 integer(I4B),
intent(in) :: iout
2266 character(len=*),
intent(in) :: keyword
2267 character(len=*),
intent(inout) :: error_msg
2271 select case (keyword)
2274 write (iout,
'(4x, a)') &
2275 'LIMITED MEMORY INFORMATION WILL BE WRITTEN.'
2278 write (iout,
'(4x, a)') &
2279 'A SUMMARY OF SIMULATION MEMORY INFORMATION WILL BE WRITTEN.'
2282 write (iout,
'(4x, a)') &
2283 'ALL SIMULATION MEMORY INFORMATION WILL BE WRITTEN.'
2285 error_msg =
"Unknown memory print option '"//trim(keyword)//
"."
2292 integer(I4B),
intent(in) :: iout
2293 integer(I4B),
intent(in) :: nrows
2294 character(len=*),
intent(in) :: cunits
2296 character(len=LINELENGTH) :: title
2297 character(len=LINELENGTH) :: text
2298 integer(I4B) :: nterms
2304 title =
'SUMMARY INFORMATION ON VARIABLES STORED IN THE MEMORY MANAGER, '// &
2309 call memtab%table_df(nrows, nterms, iout)
2339 integer(I4B),
intent(in) :: iout
2340 integer(I4B),
intent(in) :: nrows
2342 character(len=LINELENGTH) :: title
2343 character(len=LINELENGTH) :: text
2344 integer(I4B) :: nterms
2350 title =
'DETAILED INFORMATION ON VARIABLES STORED IN THE MEMORY MANAGER'
2354 call memtab%table_df(nrows, nterms, iout)
2361 text =
'VARIABLE NAME'
2369 text =
'NUMBER OF ITEMS'
2373 text =
'ASSOCIATED VARIABLE'
2380 character(len=*),
intent(in) :: component
2381 real(DP),
intent(in) :: rchars
2382 real(DP),
intent(in) :: rlog
2383 real(DP),
intent(in) :: rint
2384 real(DP),
intent(in) :: rreal
2385 real(DP),
intent(in) :: bytes
2390 call memtab%add_term(component)
2391 call memtab%add_term(rchars)
2392 call memtab%add_term(rlog)
2393 call memtab%add_term(rint)
2394 call memtab%add_term(rreal)
2395 call memtab%add_term(bytes)
2402 real(DP),
intent(in) :: bytes
2403 real(DP),
intent(inout) :: fact
2404 character(len=*),
intent(inout) :: cunits
2414 if (bytes <
dep3)
then
2417 else if (bytes <
dep6)
then
2419 cunits =
'KILOBYTES'
2420 else if (bytes <
dep9)
then
2422 cunits =
'MEGABYTES'
2425 cunits =
'GIGABYTES'
2432 integer(I4B),
intent(in) :: iout
2433 real(DP),
intent(in) :: bytes
2435 character(len=LINELENGTH) :: title
2436 character(len=LINELENGTH) :: text
2437 character(LEN=10) :: cunits
2438 integer(I4B) :: nterms
2439 integer(I4B) :: nrows
2453 title =
'MEMORY MANAGER TOTAL STORAGE BY DATA TYPE, IN '//trim(cunits)
2457 call memtab%table_df(nrows, nterms, iout)
2464 text =
'ALLOCATED MEMORY'
2471 call memtab%add_term(
'Character')
2472 call memtab%add_term(smb)
2476 call memtab%add_term(
'Logical')
2477 call memtab%add_term(smb)
2481 call memtab%add_term(
'Integer')
2482 call memtab%add_term(smb)
2486 call memtab%add_term(
'Real')
2487 call memtab%add_term(smb)
2490 call memtab%print_separator()
2492 call memtab%add_term(
'Total')
2493 call memtab%add_term(smb)
2497 call memtab%add_term(
'Virtual')
2498 call memtab%add_term(smb)
2522 integer(I4B),
intent(in) :: iout
2525 character(len=LENMEMADDRESS),
allocatable,
dimension(:) :: cunique
2527 character(len=LENMEMPATH) :: context
2528 character(len=LENCOMPONENTNAME) :: component
2529 character(len=LENCOMPONENTNAME) :: subcomponent
2530 character(len=LENMEMADDRESS) :: context_component
2531 character(LEN=10) :: cunits
2533 integer(I4B) :: icomp
2534 integer(I4B) :: ilen
2535 integer(I8B) :: nchars
2536 integer(I8B) :: nlog
2537 integer(I8B) :: nint
2538 integer(I8B) :: nreal
2539 real(dp) :: simbytes
2554 simbytes = real(simbytes, dp)
2565 do icomp = 1,
size(cunique)
2571 ilen = len_trim(cunique(icomp))
2573 do while (itr%has_next())
2578 context_component = trim(context)//component
2579 if (cunique(icomp) /= context_component(1:ilen)) cycle
2580 if (.not. mt%master) cycle
2581 if (mt%memtype(1:6) ==
'STRING')
then
2582 nchars = nchars + mt%isize * mt%element_size
2583 else if (mt%memtype(1:7) ==
'LOGICAL')
then
2584 nlog = nlog + mt%isize
2585 else if (mt%memtype(1:7) ==
'INTEGER')
then
2586 nint = nint + mt%isize
2587 else if (mt%memtype(1:6) ==
'DOUBLE')
then
2588 nreal = nreal + mt%isize
2593 rchars = real(nchars, dp) * fact
2594 rlog = real(nlog * lgp, dp) * fact
2595 rint = real(nint * i4b, dp) * fact
2596 rreal = real(nreal * dp, dp) * fact
2599 bytes = rchars + rlog + rint + rreal
2617 integer(I4B) :: iout
2624 do while (itr%has_next())
2627 call mt%table_entry(
memtab)
2636 real(dp) :: vmem_size
2643 do while (itr%has_next())
2646 if (index(mt%path,
"__P") == 1)
then
2647 vmem_size = mt%element_size * mt%isize + vmem_size
2663 do while (itr%has_next())
2666 call mt%mt_deallocate()
2673 call store_error(
'Could not clear memory list.', terminate=.true.)
2683 character(len=LINELENGTH) :: error_msg
2684 character(len=LENVARNAME) :: ucname
2687 if (mt%mt_associated() .and. mt%element_size == -1)
then
2688 error_msg = trim(adjustl(mt%path))//
' '// &
2689 trim(adjustl(mt%name))//
' has invalid element size'
2694 if (mt%mt_associated() .and. mt%isize > 0)
then
2695 error_msg = trim(adjustl(mt%path))//
' '// &
2696 trim(adjustl(mt%name))//
' not deallocated'
2703 if (mt%name /= ucname)
then
2704 error_msg = trim(adjustl(mt%path))//
' '// &
2705 trim(adjustl(mt%name))//
' not upper case'
2717 character(len=LENMEMADDRESS),
allocatable,
dimension(:),
intent(inout) :: &
2721 character(len=LENMEMPATH) :: context
2722 character(len=LENCOMPONENTNAME) :: component
2723 character(len=LENCOMPONENTNAME) :: subcomponent
2724 character(len=LENMEMADDRESS) :: context_component
2730 allocate (cunique(0))
2734 do while (itr%has_next())
2739 context_component = trim(context)//component
2740 ipa =
ifind(cunique, context_component)
2743 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 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.