Quoted from John-Silver
(I'll have to source an oxygen mask ready to stop me from passing out from laughing when you tell me 😉 )
John,
I am not sure of your pre-conceived view of 'large'
Any problem that exceeds the size that is allowed for in the particular part of the program will be too big, especially when stack usage has been included.
My finite element program is typically limited to 400,000 nodes, but have worked with up to 10 million nodes for some special applications. (I was surprised by the ease of use and speed of my large application models.)
Some of my modelling that is much smaller have presented size limitations and overflowed Clearwin+ capabilities.
When moving to 64-bit, it is important to assess resource limitations, especially when using multiple virtual windows.
Issues of heap vs stack, physical memory available and extrapolating 32-bit clearwin usage concepts to 64-bit problems needs to be carefully adapted.
Ralf, Your problem may be related to memory usage, so if you are able to run your large models, I would recommend including some resource usage reports, including memory usage as below. Task manager is also a useful indicator. There are also API routines for reporting stack size and usage (I can't find examples at the moment)
module memparam
integer*4, parameter :: million = 1000000
logical :: bit_64 = .true. ! change for 32-bit or 64-bit compile
integer*8 :: one_Mb = 2**20 ! size of 1 Mb
integer*8 :: one_Gb = 2**30
end module memparam
PROGRAM BIG
use memparam
!
integer*4, parameter :: n = 50*million
!
REAL*8, allocatable :: A(:),B(:),C(:) !a
REAL*8, allocatable :: D(:),E(:),F(:) !a
REAL*8, allocatable :: X(:),Y(:),Z(:) !b
INTEGER*4 J, stat
integer*4 addr(2)
integer*8, external :: jloc
!
call report_memory_usage ('FTN95_64_Version : start of usage')
!
allocate ( A(n), stat=stat )
call report_memory_usage ('FTN95_64_Version : A allocated')
if ( stat == 0 ) then
!z A(:)=(/(j,j=1,n)/)
do j = 1,n
A(j) = j
end do
J = n
call Gb_loc (A, addr)
write (*,11) 'A allocated at', jloc(A), addr, A(j)
else
write (*,12) 'A NOT allocated : stat=', stat
end if
!
allocate ( B(n), stat=stat )
call report_memory_usage ('FTN95_64_Version : B allocated')
if ( stat == 0 ) then
B = A+1 !a
call Gb_loc (B, addr)
write (*,11) 'B allocated at', jloc(B), addr, B(j)
else
write (*,12) 'B NOT allocated : stat=', stat
end if
!
allocate ( C(n), stat=stat )
call report_memory_usage ('FTN95_64_Version : C allocated')
if ( stat == 0 ) then
C = A+2 !a
call Gb_loc (C, addr)
write (*,11) 'C allocated at', jloc(C), addr, C(j)
else
write (*,12) 'C NOT allocated : stat=', stat
end if
!
allocate ( d(n), stat=stat )
call report_memory_usage ('FTN95_64_Version : D allocated')
if ( stat == 0 ) then
D = A+3 !a
call Gb_loc (D, addr)
write (*,11) 'D allocated at', jloc(D), addr, D(j)
else
write (*,12) 'D NOT allocated : stat=', stat
end if
!
Where is the larger post size ???