Fix Gfortran stack to static warning
GCC / Gfortran 10 brought new warnings for arrays too big for the current stack settings, that may cause unexpected behavior. The warnings are triggered like:
real :: big2(1000,1000)
Warning: Array ‘big2’ at (1) is larger than limit set by ‘-fmax-stack-var-size=’, moved from stack to static storage. This makes the procedure unsafe when called recursively, or concurrently from multiple threads. Consider using ‘-frecursive’, or increase the ‘-fmax-stack-var-size=’ limit, or change the code to use an ALLOCATABLE array. [-Wsurprising]
This is generally a true warning when one has assigned arrays as above too large for the stack. Simply making the procedure recursive may lead to segfaults.
Correct the example above like:
real, allocatable :: big2(:,:)
allocate(big2(1000,1000))
For multiple arrays of the same shape do like:
integer :: M=1000,N=2000,P=500
real, allocatable, dimension(:,:,:) :: w,x, y, z
allocate(w(M,N,P))
allocate(x,y,z, mold=x)
As with the Intel oneAPI heap-arrays
command-line options, there could be a penalty in speed by having large arrays drive off the stack into heap memory.