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
191 if (
associated(mt%logicalsclr)) rank = 0
192 if (
associated(mt%intsclr)) rank = 0
193 if (
associated(mt%dblsclr)) rank = 0
194 if (
associated(mt%alogical1d)) rank = 1
195 if (
associated(mt%aint1d)) rank = 1
196 if (
associated(mt%aint2d)) rank = 2
197 if (
associated(mt%aint3d)) rank = 3
198 if (
associated(mt%adbl1d)) rank = 1
199 if (
associated(mt%adbl2d)) rank = 2
200 if (
associated(mt%adbl3d)) rank = 3
201 if (
associated(mt%strsclr)) rank = 0
202 if (
associated(mt%astr1d)) rank = 1
203 if (
associated(mt%acharstr1d)) rank = 1
212 character(len=*),
intent(in) :: name
213 character(len=*),
intent(in) :: mem_path
214 integer(I4B),
intent(out) :: size
217 logical(LGP) :: found
228 size = mt%element_size
238 character(len=*),
intent(in) :: name
239 character(len=*),
intent(in) :: mem_path
240 integer(I4B),
dimension(:),
intent(out) :: mem_shape
243 logical(LGP) :: found
251 if (
associated(mt%logicalsclr)) mem_shape = shape(mt%logicalsclr)
252 if (
associated(mt%intsclr)) mem_shape = shape(mt%logicalsclr)
253 if (
associated(mt%dblsclr)) mem_shape = shape(mt%dblsclr)
254 if (
associated(mt%alogical1d)) mem_shape = shape(mt%alogical1d)
255 if (
associated(mt%aint1d)) mem_shape = shape(mt%aint1d)
256 if (
associated(mt%aint2d)) mem_shape = shape(mt%aint2d)
257 if (
associated(mt%aint3d)) mem_shape = shape(mt%aint3d)
258 if (
associated(mt%adbl1d)) mem_shape = shape(mt%adbl1d)
259 if (
associated(mt%adbl2d)) mem_shape = shape(mt%adbl2d)
260 if (
associated(mt%adbl3d)) mem_shape = shape(mt%adbl3d)
261 if (
associated(mt%strsclr)) mem_shape = shape(mt%strsclr)
262 if (
associated(mt%astr1d)) mem_shape = shape(mt%astr1d)
263 if (
associated(mt%acharstr1d)) mem_shape = shape(mt%acharstr1d)
276 character(len=*),
intent(in) :: name
277 character(len=*),
intent(in) :: mem_path
278 integer(I4B),
intent(out) :: isize
281 logical(LGP) :: found
282 logical(LGP) :: terminate
306 character(len=*),
intent(in) :: name
307 character(len=*),
intent(in) :: mem_path
308 type(
memorytype),
pointer,
intent(inout) :: mt
309 logical(LGP),
intent(out) :: found
310 logical(LGP),
intent(in),
optional :: check
313 logical(LGP) check_opt
316 found =
associated(mt)
319 if (
present(check))
then
323 if (.not. found)
then
324 errmsg =
"Programming error in memory manager. Variable '"// &
325 trim(name)//
"' in '"//trim(mem_path)//
"' cannot be "// &
326 "assigned because it does not exist in memory manager."
335 character(len=*),
intent(in) :: varname
336 character(len=*),
intent(in) :: mem_path
337 integer(I4B),
intent(in) :: istat
338 integer(I4B),
intent(in) :: isize
340 character(len=20) :: csize
341 character(len=20) :: cstat
345 write (csize,
'(i0)') isize
346 write (cstat,
'(i0)') istat
349 errmsg =
"Error trying to allocate memory. Path '"//trim(mem_path)// &
350 "' variable name '"//trim(varname)//
"' size '"//trim(csize)// &
351 "'. Error message is '"//trim(adjustl(
errmsg))// &
352 "'. Status code is "//trim(cstat)//
'.'
361 logical(LGP),
pointer,
intent(inout) :: sclr
362 character(len=*),
intent(in) :: name
363 character(len=*),
intent(in) :: mem_path
365 integer(I4B) :: istat
385 mt%logicalsclr => sclr
386 mt%element_size = lgp
390 write (mt%memtype,
"(a)")
'LOGICAL'
399 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
400 integer(I4B),
intent(in) :: nrow
401 character(len=*),
intent(in) :: name
402 character(len=*),
intent(in) :: mem_path
405 integer(I4B) :: istat
406 integer(I4B) :: isize
428 mt%alogical1d => alog
429 mt%element_size = lgp
433 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', isize
442 integer(I4B),
intent(in) :: ilen
443 character(len=ilen),
pointer,
intent(inout) :: sclr
444 character(len=*),
intent(in) :: name
445 character(len=*),
intent(in) :: mem_path
447 integer(I4B) :: istat
454 errmsg =
'Programming error in allocate_str. ILEN must be greater than 0.'
462 allocate (
character(len=ilen) :: sclr, stat=istat,
errmsg=
errmsg)
478 mt%element_size = ilen
482 write (mt%memtype,
"(a,' LEN=',i0)")
'STRING', ilen
491 integer(I4B),
intent(in) :: ilen
492 character(len=ilen),
dimension(:), &
493 pointer,
contiguous,
intent(inout) :: astr1d
494 integer(I4B),
intent(in) :: nrow
495 character(len=*),
intent(in) :: name
496 character(len=*),
intent(in) :: mem_path
499 character(len=ilen) :: string
501 integer(I4B) :: istat
502 integer(I4B) :: isize
510 errmsg =
'Programming error in allocate_str1d. '// &
511 'ILEN must be greater than 0.'
522 allocate (
character(len=ilen) :: astr1d(nrow), stat=istat,
errmsg=
errmsg)
542 mt%element_size = ilen
546 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
556 pointer,
contiguous,
intent(inout) :: acharstr1d
557 integer(I4B),
intent(in) :: ilen
558 integer(I4B),
intent(in) :: nrow
559 character(len=*),
intent(in) :: name
560 character(len=*),
intent(in) :: mem_path
562 character(len=ilen) :: string
565 integer(I4B) :: istat
566 integer(I4B) :: isize
588 acharstr1d(n) = string
598 mt%acharstr1d => acharstr1d
599 mt%element_size = ilen
603 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
612 integer(I4B),
pointer,
intent(inout) :: sclr
613 character(len=*),
intent(in) :: name
614 character(len=*),
intent(in) :: mem_path
617 integer(I4B) :: istat
637 mt%element_size = i4b
641 write (mt%memtype,
"(a)")
'INTEGER'
650 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
651 integer(I4B),
intent(in) :: nrow
652 character(len=*),
intent(in) :: name
653 character(len=*),
intent(in) :: mem_path
656 integer(I4B) :: istat
657 integer(I4B) :: isize
680 mt%element_size = i4b
684 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', isize
693 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
694 integer(I4B),
intent(in) :: ncol
695 integer(I4B),
intent(in) :: nrow
696 character(len=*),
intent(in) :: name
697 character(len=*),
intent(in) :: mem_path
700 integer(I4B) :: istat
701 integer(I4B) :: isize
724 mt%element_size = i4b
728 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
737 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
738 integer(I4B),
intent(in) :: ncol
739 integer(I4B),
intent(in) :: nrow
740 integer(I4B),
intent(in) :: nlay
741 character(len=*),
intent(in) :: name
742 character(len=*),
intent(in) :: mem_path
745 integer(I4B) :: istat
746 integer(I4B) :: isize
753 isize = ncol * nrow * nlay
756 allocate (aint(ncol, nrow, nlay), stat=istat,
errmsg=
errmsg)
769 mt%element_size = i4b
773 write (mt%memtype,
"(a,' (',i0,',',i0,',',i0,')')")
'INTEGER', ncol, &
783 real(DP),
pointer,
intent(inout) :: sclr
784 character(len=*),
intent(in) :: name
785 character(len=*),
intent(in) :: mem_path
788 integer(I4B) :: istat
812 write (mt%memtype,
"(a)")
'DOUBLE'
821 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
822 integer(I4B),
intent(in) :: nrow
823 character(len=*),
intent(in) :: name
824 character(len=*),
intent(in) :: mem_path
827 integer(I4B) :: istat
828 integer(I4B) :: isize
855 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
864 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
865 integer(I4B),
intent(in) :: ncol
866 integer(I4B),
intent(in) :: nrow
867 character(len=*),
intent(in) :: name
868 character(len=*),
intent(in) :: mem_path
871 integer(I4B) :: istat
872 integer(I4B) :: isize
899 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
908 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
909 integer(I4B),
intent(in) :: ncol
910 integer(I4B),
intent(in) :: nrow
911 integer(I4B),
intent(in) :: nlay
912 character(len=*),
intent(in) :: name
913 character(len=*),
intent(in) :: mem_path
916 integer(I4B) :: istat
917 integer(I4B) :: isize
924 isize = ncol * nrow * nlay
927 allocate (adbl(ncol, nrow, nlay), stat=istat,
errmsg=
errmsg)
944 write (mt%memtype,
"(a,' (',i0,',',i0,',',i0,')')")
'DOUBLE', ncol, &
954 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(in) :: alog
955 character(len=*),
intent(in) :: name
956 character(len=*),
intent(in) :: mem_path
957 character(len=*),
intent(in) :: name2
958 character(len=*),
intent(in) :: mem_path2
961 integer(I4B) :: isize
974 mt%alogical1d => alog
975 mt%element_size = lgp
979 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', isize
983 mt%mastername = name2
984 mt%masterPath = mem_path2
993 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: aint
994 character(len=*),
intent(in) :: name
995 character(len=*),
intent(in) :: mem_path
996 character(len=*),
intent(in) :: name2
997 character(len=*),
intent(in) :: mem_path2
1000 integer(I4B) :: isize
1014 mt%element_size = i4b
1018 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', isize
1022 mt%mastername = name2
1023 mt%masterPath = mem_path2
1032 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint2d
1033 character(len=*),
intent(in) :: name
1034 character(len=*),
intent(in) :: mem_path
1035 character(len=*),
intent(in) :: name2
1036 character(len=*),
intent(in) :: mem_path2
1039 integer(I4B) :: ncol, nrow, isize
1046 ncol =
size(aint2d, dim=1)
1047 nrow =
size(aint2d, dim=2)
1058 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
1062 mt%mastername = name2
1063 mt%masterPath = mem_path2
1072 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1073 character(len=*),
intent(in) :: name
1074 character(len=*),
intent(in) :: mem_path
1075 character(len=*),
intent(in) :: name2
1076 character(len=*),
intent(in) :: mem_path2
1079 integer(I4B) :: isize
1093 mt%element_size = dp
1097 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
1101 mt%mastername = name2
1102 mt%masterPath = mem_path2
1111 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl2d
1112 character(len=*),
intent(in) :: name
1113 character(len=*),
intent(in) :: mem_path
1114 character(len=*),
intent(in) :: name2
1115 character(len=*),
intent(in) :: mem_path2
1118 integer(I4B) :: ncol, nrow, isize
1125 ncol =
size(adbl2d, dim=1)
1126 nrow =
size(adbl2d, dim=2)
1137 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
1141 mt%mastername = name2
1142 mt%masterPath = mem_path2
1152 pointer,
contiguous,
intent(inout) :: acharstr1d
1153 integer(I4B),
intent(in) :: ilen
1154 character(len=*),
intent(in) :: name
1155 character(len=*),
intent(in) :: mem_path
1156 character(len=*),
intent(in) :: name2
1157 character(len=*),
intent(in) :: mem_path2
1160 integer(I4B) :: isize
1167 isize =
size(acharstr1d)
1173 mt%acharstr1d => acharstr1d
1174 mt%element_size = ilen
1178 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, isize
1182 mt%mastername = name2
1183 mt%masterPath = mem_path2
1192 integer(I4B),
intent(in) :: ilen
1193 integer(I4B),
intent(in) :: nrow
1194 character(len=ilen),
dimension(:),
pointer,
contiguous,
intent(inout) :: astr
1195 character(len=*),
intent(in) :: name
1196 character(len=*),
intent(in) :: mem_path
1199 logical(LGP) :: found
1200 character(len=ilen),
dimension(:),
allocatable :: astrtemp
1201 integer(I4B) :: istat
1202 integer(I4B) :: isize
1203 integer(I4B) :: isize_old
1204 integer(I4B) :: nrow_old
1212 isize_old = mt%isize
1213 if (isize_old > 0)
then
1214 nrow_old =
size(astr)
1224 if (istat /= 0)
then
1229 do n = 1, min(nrow_old, nrow)
1230 astrtemp(n) = astr(n)
1234 do n = nrow_old + 1, nrow
1243 if (istat /= 0)
then
1249 astr(n) = astrtemp(n)
1253 deallocate (astrtemp)
1257 mt%element_size = ilen
1259 mt%nrealloc = mt%nrealloc + 1
1262 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
1264 errmsg =
"Programming error, variable '"//trim(name)//
"' from '"// &
1265 trim(mem_path)//
"' is not defined in the memory manager. Use "// &
1266 "mem_allocate instead."
1275 intent(inout) :: acharstr1d
1276 integer(I4B),
intent(in) :: ilen
1277 integer(I4B),
intent(in) :: nrow
1278 character(len=*),
intent(in) :: name
1279 character(len=*),
intent(in) :: mem_path
1282 logical(LGP) :: found
1284 character(len=ilen) :: string
1285 integer(I4B) :: istat
1286 integer(I4B) :: isize
1287 integer(I4B) :: isize_old
1288 integer(I4B) :: nrow_old
1299 isize_old = mt%isize
1300 if (isize_old > 0)
then
1301 nrow_old =
size(acharstr1d)
1311 if (istat /= 0)
then
1316 do n = 1, min(nrow_old, nrow)
1317 astrtemp(n) = acharstr1d(n)
1318 call acharstr1d(n)%destroy()
1322 do n = nrow + 1, nrow_old
1323 call acharstr1d(n)%destroy()
1327 do n = nrow_old + 1, nrow
1328 astrtemp(n) = string
1332 deallocate (acharstr1d)
1336 if (istat /= 0)
then
1342 acharstr1d(n) = astrtemp(n)
1343 call astrtemp(n)%destroy()
1347 deallocate (astrtemp)
1350 mt%acharstr1d => acharstr1d
1351 mt%element_size = ilen
1353 mt%nrealloc = mt%nrealloc + 1
1356 write (mt%memtype,
"(a,' LEN=',i0,' (',i0,')')")
'STRING', ilen, nrow
1358 errmsg =
"Programming error, variable '"//trim(name)//
"' from '"// &
1359 trim(mem_path)//
"' is not defined in the memory manager. Use "// &
1360 "mem_allocate instead."
1368 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1369 integer(I4B),
intent(in) :: nrow
1370 character(len=*),
intent(in) :: name
1371 character(len=*),
intent(in) :: mem_path
1374 logical(LGP) :: found
1375 integer(I4B) :: istat
1376 integer(I4B) :: isize
1378 integer(I4B) :: isizeold
1379 integer(I4B) :: ifill
1387 isizeold =
size(mt%alogical1d)
1388 ifill = min(isizeold, isize)
1390 if (istat /= 0)
then
1394 alog(i) = mt%alogical1d(i)
1398 deallocate (mt%alogical1d)
1399 mt%alogical1d => alog
1400 mt%element_size = lgp
1402 mt%nrealloc = mt%nrealloc + 1
1410 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1411 integer(I4B),
intent(in) :: nrow
1412 character(len=*),
intent(in) :: name
1413 character(len=*),
intent(in) :: mem_path
1416 logical(LGP) :: found
1417 integer(I4B) :: istat
1418 integer(I4B) :: isize
1420 integer(I4B) :: isizeold
1421 integer(I4B) :: ifill
1429 isizeold =
size(mt%aint1d)
1430 ifill = min(isizeold, isize)
1432 if (istat /= 0)
then
1436 aint(i) = mt%aint1d(i)
1440 deallocate (mt%aint1d)
1442 mt%element_size = i4b
1444 mt%nrealloc = mt%nrealloc + 1
1452 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1453 integer(I4B),
intent(in) :: ncol
1454 integer(I4B),
intent(in) :: nrow
1455 character(len=*),
intent(in) :: name
1456 character(len=*),
intent(in) :: mem_path
1459 logical(LGP) :: found
1460 integer(I4B) :: istat
1461 integer(I4B),
dimension(2) :: ishape
1464 integer(I4B) :: isize
1465 integer(I4B) :: isizeold
1472 ishape = shape(mt%aint2d)
1474 isizeold = ishape(1) * ishape(2)
1476 if (istat /= 0)
then
1480 do i = 1, min(ishape(2), nrow)
1481 do j = 1, min(ishape(1), ncol)
1482 aint(j, i) = mt%aint2d(j, i)
1487 deallocate (mt%aint2d)
1489 mt%element_size = i4b
1491 mt%nrealloc = mt%nrealloc + 1
1494 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
1500 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1501 integer(I4B),
intent(in) :: nrow
1502 character(len=*),
intent(in) :: name
1503 character(len=*),
intent(in) :: mem_path
1506 integer(I4B) :: istat
1507 integer(I4B) :: isize
1509 integer(I4B) :: isizeold
1510 integer(I4B) :: ifill
1511 logical(LGP) :: found
1519 isizeold =
size(mt%adbl1d)
1520 ifill = min(isizeold, isize)
1522 if (istat /= 0)
then
1526 adbl(i) = mt%adbl1d(i)
1530 deallocate (mt%adbl1d)
1532 mt%element_size = dp
1534 mt%nrealloc = mt%nrealloc + 1
1537 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', isize
1543 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1544 integer(I4B),
intent(in) :: ncol
1545 integer(I4B),
intent(in) :: nrow
1546 character(len=*),
intent(in) :: name
1547 character(len=*),
intent(in) :: mem_path
1550 logical(LGP) :: found
1551 integer(I4B) :: istat
1552 integer(I4B),
dimension(2) :: ishape
1555 integer(I4B) :: isize
1556 integer(I4B) :: isizeold
1563 ishape = shape(mt%adbl2d)
1565 isizeold = ishape(1) * ishape(2)
1567 if (istat /= 0)
then
1571 do i = 1, min(ishape(2), nrow)
1572 do j = 1, min(ishape(1), ncol)
1573 adbl(j, i) = mt%adbl2d(j, i)
1578 deallocate (mt%adbl2d)
1580 mt%element_size = dp
1582 mt%nrealloc = mt%nrealloc + 1
1585 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
1591 logical(LGP),
pointer,
intent(inout) :: sclr
1592 character(len=*),
intent(in) :: name
1593 character(len=*),
intent(in) :: mem_path
1596 logical(LGP) :: found
1599 sclr => mt%logicalsclr
1605 integer(I4B),
pointer,
intent(inout) :: sclr
1606 character(len=*),
intent(in) :: name
1607 character(len=*),
intent(in) :: mem_path
1610 logical(LGP) :: found
1619 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1620 character(len=*),
intent(in) :: name
1621 character(len=*),
intent(in) :: mem_path
1624 logical(LGP) :: found
1627 alog => mt%alogical1d
1633 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1634 character(len=*),
intent(in) :: name
1635 character(len=*),
intent(in) :: mem_path
1638 logical(LGP) :: found
1647 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1648 character(len=*),
intent(in) :: name
1649 character(len=*),
intent(in) :: mem_path
1652 logical(LGP) :: found
1661 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
1662 character(len=*),
intent(in) :: name
1663 character(len=*),
intent(in) :: mem_path
1666 logical(LGP) :: found
1675 real(DP),
pointer,
intent(inout) :: sclr
1676 character(len=*),
intent(in) :: name
1677 character(len=*),
intent(in) :: mem_path
1680 logical(LGP) :: found
1689 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1690 character(len=*),
intent(in) :: name
1691 character(len=*),
intent(in) :: mem_path
1694 logical(LGP) :: found
1703 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1704 character(len=*),
intent(in) :: name
1705 character(len=*),
intent(in) :: mem_path
1708 logical(LGP) :: found
1717 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
1718 character(len=*),
intent(in) :: name
1719 character(len=*),
intent(in) :: mem_path
1722 logical(LGP) :: found
1731 character(len=:),
pointer :: asrt
1732 character(len=*),
intent(in) :: name
1733 character(len=*),
intent(in) :: mem_path
1736 logical(LGP) :: found
1745 character(len=:),
dimension(:), &
1746 pointer,
contiguous,
intent(inout) :: astr1d
1747 character(len=*),
intent(in) :: name
1748 character(len=*),
intent(in) :: mem_path
1751 logical(LGP) :: found
1754 select type (item => mt%astr1d)
1755 type is (
character(*))
1766 intent(inout) :: acharstr1d
1767 character(len=*),
intent(in) :: name
1768 character(len=*),
intent(in) :: mem_path
1771 logical(LGP) :: found
1774 acharstr1d => mt%acharstr1d
1780 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1781 character(len=*),
intent(in) :: name
1782 character(len=*),
intent(in) :: mem_path
1783 character(len=*),
intent(in),
optional :: mem_path_copy
1788 logical(LGP) :: found
1794 if (
present(mem_path_copy))
then
1798 allocate (alog(
size(mt%alogical1d)))
1800 do n = 1,
size(mt%alogical1d)
1801 alog(n) = mt%alogical1d(n)
1808 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
1809 character(len=*),
intent(in) :: name
1810 character(len=*),
intent(in) :: mem_path
1811 character(len=*),
intent(in),
optional :: mem_path_copy
1816 logical(LGP) :: found
1822 if (
present(mem_path_copy))
then
1823 call allocate_int1d(aint,
size(mt%aint1d), mt%name, mem_path_copy)
1826 allocate (aint(
size(mt%aint1d)))
1828 do n = 1,
size(mt%aint1d)
1829 aint(n) = mt%aint1d(n)
1836 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
1837 character(len=*),
intent(in) :: name
1838 character(len=*),
intent(in) :: mem_path
1839 character(len=*),
intent(in),
optional :: mem_path_copy
1844 logical(LGP) :: found
1847 integer(I4B) :: ncol
1848 integer(I4B) :: nrow
1852 ncol =
size(mt%aint2d, dim=1)
1853 nrow =
size(mt%aint2d, dim=2)
1855 if (
present(mem_path_copy))
then
1859 allocate (aint(ncol, nrow))
1863 aint(j, i) = mt%aint2d(j, i)
1871 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
1872 character(len=*),
intent(in) :: name
1873 character(len=*),
intent(in) :: mem_path
1874 character(len=*),
intent(in),
optional :: mem_path_copy
1879 logical(LGP) :: found
1885 if (
present(mem_path_copy))
then
1886 call allocate_dbl1d(adbl,
size(mt%adbl1d), mt%name, mem_path_copy)
1889 allocate (adbl(
size(mt%adbl1d)))
1891 do n = 1,
size(mt%adbl1d)
1892 adbl(n) = mt%adbl1d(n)
1899 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
1900 character(len=*),
intent(in) :: name
1901 character(len=*),
intent(in) :: mem_path
1902 character(len=*),
intent(in),
optional :: mem_path_copy
1907 logical(LGP) :: found
1910 integer(I4B) :: ncol
1911 integer(I4B) :: nrow
1915 ncol =
size(mt%adbl2d, dim=1)
1916 nrow =
size(mt%adbl2d, dim=2)
1918 if (
present(mem_path_copy))
then
1922 allocate (adbl(ncol, nrow))
1926 adbl(j, i) = mt%adbl2d(j, i)
1934 real(dp),
dimension(:),
intent(inout) :: adbl
1935 character(len=*),
intent(in) :: name
1936 character(len=*),
intent(in) :: mem_path
1939 logical(LGP) :: found
1943 do n = 1,
size(mt%adbl1d)
1944 adbl(n) = mt%adbl1d(n)
1951 integer(I4B),
pointer,
intent(inout) :: sclr
1952 character(len=*),
intent(in) :: name
1953 character(len=*),
intent(in) :: mem_path
1954 character(len=*),
intent(in) :: name_target
1955 character(len=*),
intent(in) :: mem_path_target
1959 logical(LGP) :: found
1963 if (
associated(sclr))
then
1969 mt%element_size = i4b
1971 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', mt%isize
1975 mt%mastername = name_target
1976 mt%masterPath = mem_path_target
1983 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
1984 character(len=*),
intent(in) :: name
1985 character(len=*),
intent(in) :: mem_path
1986 character(len=*),
intent(in) :: name_target
1987 character(len=*),
intent(in) :: mem_path_target
1991 logical(LGP) :: found
1995 if (
size(alog) > 0)
then
1999 alog => mt2%alogical1d
2000 mt%alogical1d => alog
2001 mt%element_size = lgp
2002 mt%isize =
size(alog)
2003 write (mt%memtype,
"(a,' (',i0,')')")
'LOGICAL', mt%isize
2007 mt%mastername = name_target
2008 mt%masterPath = mem_path_target
2014 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
2015 character(len=*),
intent(in) :: name
2016 character(len=*),
intent(in) :: mem_path
2017 character(len=*),
intent(in) :: name_target
2018 character(len=*),
intent(in) :: mem_path_target
2022 logical(LGP) :: found
2026 if (
size(aint) > 0)
then
2032 mt%element_size = i4b
2033 mt%isize =
size(aint)
2034 write (mt%memtype,
"(a,' (',i0,')')")
'INTEGER', mt%isize
2038 mt%mastername = name_target
2039 mt%masterPath = mem_path_target
2045 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
2046 character(len=*),
intent(in) :: name
2047 character(len=*),
intent(in) :: mem_path
2048 character(len=*),
intent(in) :: name_target
2049 character(len=*),
intent(in) :: mem_path_target
2053 logical(LGP) :: found
2054 integer(I4B) :: ncol
2055 integer(I4B) :: nrow
2059 if (
size(aint) > 0)
then
2065 mt%element_size = i4b
2066 mt%isize =
size(aint)
2067 ncol =
size(aint, dim=1)
2068 nrow =
size(aint, dim=2)
2069 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'INTEGER', ncol, nrow
2073 mt%mastername = name_target
2074 mt%masterPath = mem_path_target
2080 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
2081 character(len=*),
intent(in) :: name
2082 character(len=*),
intent(in) :: mem_path
2083 character(len=*),
intent(in) :: name_target
2084 character(len=*),
intent(in) :: mem_path_target
2088 logical(LGP) :: found
2092 if (
size(adbl) > 0)
then
2098 mt%element_size = dp
2099 mt%isize =
size(adbl)
2100 write (mt%memtype,
"(a,' (',i0,')')")
'DOUBLE', mt%isize
2104 mt%mastername = name_target
2105 mt%masterPath = mem_path_target
2111 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
2112 character(len=*),
intent(in) :: name
2113 character(len=*),
intent(in) :: mem_path
2114 character(len=*),
intent(in) :: name_target
2115 character(len=*),
intent(in) :: mem_path_target
2119 logical(LGP) :: found
2120 integer(I4B) :: ncol
2121 integer(I4b) :: nrow
2125 if (
size(adbl) > 0)
then
2131 mt%element_size = dp
2132 mt%isize =
size(adbl)
2133 ncol =
size(adbl, dim=1)
2134 nrow =
size(adbl, dim=2)
2135 write (mt%memtype,
"(a,' (',i0,',',i0,')')")
'DOUBLE', ncol, nrow
2139 mt%mastername = name_target
2140 mt%masterPath = mem_path_target
2146 character(len=*),
pointer,
intent(inout) :: sclr
2147 character(len=*),
intent(in),
optional :: name
2148 character(len=*),
intent(in),
optional :: mem_path
2157 character(len=*),
dimension(:),
pointer,
contiguous,
intent(inout) :: astr1d
2158 character(len=*),
optional,
intent(in) :: name
2159 character(len=*),
optional,
intent(in) :: mem_path
2170 intent(inout) :: astr1d
2171 character(len=*),
optional,
intent(in) :: name
2172 character(len=*),
optional,
intent(in) :: mem_path
2180 logical(LGP),
pointer,
intent(inout) :: sclr
2188 integer(I4B),
pointer,
intent(inout) :: sclr
2196 real(DP),
pointer,
intent(inout) :: sclr
2204 logical(LGP),
dimension(:),
pointer,
contiguous,
intent(inout) :: alog
2205 character(len=*),
optional :: name
2206 character(len=*),
optional :: mem_path
2214 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: aint
2215 character(len=*),
optional :: name
2216 character(len=*),
optional :: mem_path
2224 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: aint
2225 character(len=*),
optional :: name
2226 character(len=*),
optional :: mem_path
2234 integer(I4B),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: aint
2235 character(len=*),
optional :: name
2236 character(len=*),
optional :: mem_path
2244 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: adbl
2245 character(len=*),
optional :: name
2246 character(len=*),
optional :: mem_path
2254 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: adbl
2255 character(len=*),
optional :: name
2256 character(len=*),
optional :: mem_path
2264 real(DP),
dimension(:, :, :),
pointer,
contiguous,
intent(inout) :: adbl
2265 character(len=*),
optional :: name
2266 character(len=*),
optional :: mem_path
2274 integer(I4B),
intent(in) :: iout
2275 character(len=*),
intent(in) :: keyword
2276 character(len=*),
intent(inout) :: error_msg
2280 select case (keyword)
2283 write (iout,
'(4x, a)') &
2284 'LIMITED MEMORY INFORMATION WILL BE WRITTEN.'
2287 write (iout,
'(4x, a)') &
2288 'A SUMMARY OF SIMULATION MEMORY INFORMATION WILL BE WRITTEN.'
2291 write (iout,
'(4x, a)') &
2292 'ALL SIMULATION MEMORY INFORMATION WILL BE WRITTEN.'
2294 error_msg =
"Unknown memory print option '"//trim(keyword)//
"."
2301 integer(I4B),
intent(in) :: iout
2302 integer(I4B),
intent(in) :: nrows
2303 character(len=*),
intent(in) :: cunits
2305 character(len=LINELENGTH) :: title
2306 character(len=LINELENGTH) :: text
2307 integer(I4B) :: nterms
2313 title =
'SUMMARY INFORMATION ON VARIABLES STORED IN THE MEMORY MANAGER, '// &
2318 call memtab%table_df(nrows, nterms, iout)
2348 integer(I4B),
intent(in) :: iout
2349 integer(I4B),
intent(in) :: nrows
2351 character(len=LINELENGTH) :: title
2352 character(len=LINELENGTH) :: text
2353 integer(I4B) :: nterms
2359 title =
'DETAILED INFORMATION ON VARIABLES STORED IN THE MEMORY MANAGER'
2363 call memtab%table_df(nrows, nterms, iout)
2370 text =
'VARIABLE NAME'
2378 text =
'NUMBER OF ITEMS'
2382 text =
'ASSOCIATED VARIABLE'
2389 character(len=*),
intent(in) :: component
2390 real(DP),
intent(in) :: rchars
2391 real(DP),
intent(in) :: rlog
2392 real(DP),
intent(in) :: rint
2393 real(DP),
intent(in) :: rreal
2394 real(DP),
intent(in) :: bytes
2399 call memtab%add_term(component)
2400 call memtab%add_term(rchars)
2401 call memtab%add_term(rlog)
2402 call memtab%add_term(rint)
2403 call memtab%add_term(rreal)
2404 call memtab%add_term(bytes)
2411 real(DP),
intent(in) :: bytes
2412 real(DP),
intent(inout) :: fact
2413 character(len=*),
intent(inout) :: cunits
2423 if (bytes <
dep3)
then
2426 else if (bytes <
dep6)
then
2428 cunits =
'KILOBYTES'
2429 else if (bytes <
dep9)
then
2431 cunits =
'MEGABYTES'
2434 cunits =
'GIGABYTES'
2441 integer(I4B),
intent(in) :: iout
2442 real(DP),
intent(in) :: bytes
2444 character(len=LINELENGTH) :: title
2445 character(len=LINELENGTH) :: text
2446 character(LEN=10) :: cunits
2447 integer(I4B) :: nterms
2448 integer(I4B) :: nrows
2462 title =
'MEMORY MANAGER TOTAL STORAGE BY DATA TYPE, IN '//trim(cunits)
2466 call memtab%table_df(nrows, nterms, iout)
2473 text =
'ALLOCATED MEMORY'
2480 call memtab%add_term(
'Character')
2481 call memtab%add_term(smb)
2485 call memtab%add_term(
'Logical')
2486 call memtab%add_term(smb)
2490 call memtab%add_term(
'Integer')
2491 call memtab%add_term(smb)
2495 call memtab%add_term(
'Real')
2496 call memtab%add_term(smb)
2499 call memtab%print_separator()
2501 call memtab%add_term(
'Total')
2502 call memtab%add_term(smb)
2506 call memtab%add_term(
'Virtual')
2507 call memtab%add_term(smb)
2531 integer(I4B),
intent(in) :: iout
2534 character(len=LENMEMADDRESS),
allocatable,
dimension(:) :: cunique
2536 character(len=LENMEMPATH) :: context
2537 character(len=LENCOMPONENTNAME) :: component
2538 character(len=LENCOMPONENTNAME) :: subcomponent
2539 character(len=LENMEMADDRESS) :: context_component
2540 character(LEN=10) :: cunits
2542 integer(I4B) :: icomp
2543 integer(I4B) :: ilen
2544 integer(I8B) :: nchars
2545 integer(I8B) :: nlog
2546 integer(I8B) :: nint
2547 integer(I8B) :: nreal
2548 real(dp) :: simbytes
2563 simbytes = real(simbytes, dp)
2574 do icomp = 1,
size(cunique)
2580 ilen = len_trim(cunique(icomp))
2582 do while (itr%has_next())
2587 context_component = trim(context)//component
2588 if (cunique(icomp) /= context_component(1:ilen)) cycle
2589 if (.not. mt%master) cycle
2590 if (mt%memtype(1:6) ==
'STRING')
then
2591 nchars = nchars + mt%isize * mt%element_size
2592 else if (mt%memtype(1:7) ==
'LOGICAL')
then
2593 nlog = nlog + mt%isize
2594 else if (mt%memtype(1:7) ==
'INTEGER')
then
2595 nint = nint + mt%isize
2596 else if (mt%memtype(1:6) ==
'DOUBLE')
then
2597 nreal = nreal + mt%isize
2602 rchars = real(nchars, dp) * fact
2603 rlog = real(nlog * lgp, dp) * fact
2604 rint = real(nint * i4b, dp) * fact
2605 rreal = real(nreal * dp, dp) * fact
2608 bytes = rchars + rlog + rint + rreal
2626 integer(I4B) :: iout
2633 do while (itr%has_next())
2636 call mt%table_entry(
memtab)
2645 real(dp) :: vmem_size
2652 do while (itr%has_next())
2655 if (index(mt%path,
"__P") == 1)
then
2656 vmem_size = mt%element_size * mt%isize + vmem_size
2670 type(
memorytype),
pointer,
intent(inout) :: mt
2672 if (.not. mt%mt_associated())
return
2675 if (mt%memtype(1:6) ==
'STRING')
then
2679 if (mt%isize == 1)
then
2684 else if (mt%memtype(1:7) ==
'LOGICAL')
then
2686 else if (mt%memtype(1:7) ==
'INTEGER')
then
2688 else if (mt%memtype(1:6) ==
'DOUBLE')
then
2693 call mt%mt_deallocate()
2707 do while (itr%has_next())
2710 call mt%mt_deallocate()
2717 call store_error(
'Could not clear memory list.', terminate=.true.)
2727 character(len=LINELENGTH) :: error_msg
2728 character(len=LENVARNAME) :: ucname
2731 if (mt%mt_associated() .and. mt%element_size == -1)
then
2732 error_msg = trim(adjustl(mt%path))//
' '// &
2733 trim(adjustl(mt%name))//
' has invalid element size'
2738 if (mt%mt_associated() .and. mt%isize > 0)
then
2739 error_msg = trim(adjustl(mt%path))//
' '// &
2740 trim(adjustl(mt%name))//
' not deallocated'
2747 if (mt%name /= ucname)
then
2748 error_msg = trim(adjustl(mt%path))//
' '// &
2749 trim(adjustl(mt%name))//
' not upper case'
2761 character(len=LENMEMADDRESS),
allocatable,
dimension(:),
intent(inout) :: &
2765 character(len=LENMEMPATH) :: context
2766 character(len=LENCOMPONENTNAME) :: component
2767 character(len=LENCOMPONENTNAME) :: subcomponent
2768 character(len=LENMEMADDRESS) :: context_component
2774 allocate (cunique(0))
2778 do while (itr%has_next())
2783 context_component = trim(context)//component
2784 ipa =
ifind(cunique, context_component)
2787 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.