- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If you want to be able to change the allocation status of an array, that array has to be allocatable or be a pointer. Without those attributes and without invoking a compiler option such as /heap-arrays, you will get the array allocated on the stack and deallocated when control leaves the subprogram of which the array is a local variable.
A different way of reducing the memory requirement is to examine your algorithm to see if you can do the processing in chunks. Does the whole 2-D array have to in memory at the same time? Could you, instead, process it a row at a time, or a column at a time, or in blocks of other shapes?
Another question is related to what you wish to do with any memory that is released. If you have no use for it in the remaining portions of the program, you can simply let the RTL and the OS do the garbage collection.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
PROGRAM opinion_dynamic IMPLICIT NONE INTEGER, PARAMETER :: N= 20000 !No. of nodes INTEGER, PARAMETER :: nt= 500 !No. of time steps INTEGER, PARAMETER :: ne= 100 !No. of ensembles INTEGER, PARAMETER :: q= 20 REAL, PARAMETER :: re_prop= 0.99 !rewiring probability of w-s INTEGER, PARAMETER :: nw= 4 INTEGER :: nw1, i, j, k, u, l integer :: istat integer, allocatable :: a(:.:) REAL :: x, p OPEN (1, FILE= 'out') !HERE I need a matrix allocate( a(n,n), stat = istat) if (istat /= 0 ) stop ! allocation failed tell user /do something nw1= nw/2 a= 0 DO i= 1, n Do j=-nw1,-1 u= MOD(i+j, n) IF(u <= 0) u= u+ n a(i,u)= 1 ENDDO DO j=1,nw1 u= MOD(i+j, n) IF(u == 0) u= u+ n a(i,u)= 1 ENDDO ENDDO DO i= 1, n DO j= 1, nw1 CALL RANDOM_NUMBER (x) IF ( x > p) GOTO 125 128 CALL RANDOM_NUMBER(x) x= 1.0+ n*x l= FLOOR (x) ! new node IF (l == i) GOTO 128 !avoiding selfloop IF (a(l,i) == 1) GOTO 128 !avoiding multi link u= MOD(i+j, n) !pervious node IF(u == 0) u= u+ n a(i,u)= 0; a(u,i)= 0 a(i,l)= 1; a(l,i)= 1 125 CONTINUE !IF(sum(a) .ne. k*nw)print*,sum(a), i, u, l ENDDO ENDDO !After this, I do not need a matrix deallocate( a, stat = istat) ! clean up !other part of my code ENDPROGRAM opinion_dynamic !*******************************

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page