7 implicit double precision (a-h,o-z)
26 if (lfree(i,2) .lt. nwords) go to 20
34 25 left = lfree(itake,2) - nwords
36 iendtake = lfree(itake,1) + nwords
37 if (lendim .lt. iendtake) lendim = iendtake
40 if (left .le. 0) go to 30
42 lfree(itake,1) = iendtake
49 lfree(i,1) = lfree(i+1,1)
50 40 lfree(i,2) = lfree(i+1,2)
53 900
write(outunit,901) nwords
55 901
format(
' require ',i10,
' words - either none left or not big',
57 write(outunit,902) ((lfree(i,j),j=1,2),i=1,lenf)
58 write(*,902) ((lfree(i,j),j=1,2),i=1,lenf)
59 902
format(
' free list: ',//,2x,50(i10,4x,i10,/,2x))
66 do while (istatus > 0)
67 factor = 0.5d0 * factor
68 if (factor < 0.1d0)
then
69 print *,
'Allocation failed, not enough memory'
72 new_size = ceiling((1.d0+factor) * memsize)
73 iadd_size = ceiling(factor * memsize)
77 if (lfree(lenf-1,1) + lfree(lenf-1,2) - 1 .eq. old_memsize)
then
80 lfree(lenf-1,2) = iadd_size + lfree(lenf-1,2)
81 lfree(lenf,1) = new_size + 2
84 lfree(lenf,1) = old_memsize+1
85 lfree(lenf,2) = iadd_size
86 lfree(lenf+1,1) = new_size+2
92 99 lentot = lentot + nwords
93 if (lenmax .lt. lentot) lenmax = lentot
94 if (sprint)
write(outunit,100) nwords,
igetsp, lentot, lenmax
95 100
format(
' allocating ',i8,
' words in location ',i8,
96 1
' lentot, lenmax ', 2i10)
subroutine resize_storage(new_size, status)