- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The following program crashes on comapq 6.1 and 6.1A (Win NT 2000 and Win 98) for big entries where as it does not with MS fortran 4.0 nor NAG free F90 compiler (Linux)
For small entries (nb_elem) it is fine
size(v1)=1000
size(v2)=10
Big entries
size(v1)=100000
size(v2)=10
Can someone help?
For small entries (nb_elem) it is fine
size(v1)=1000
size(v2)=10
Big entries
size(v1)=100000
size(v2)=10
Can someone help?
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sorry the program:
program ess
implicit none
! Variables
complex :: j
real , parameter :: PI = 3.14159
integer :: nb_elem
complex, dimension(:),pointer :: resultat
complex, dimension(:),allocatable :: v1
complex, dimension(:),allocatable :: v2
j=cmplx(0,1)
write(6,*) "entrer le nb_elem v1 :"
read(*,*) nb_elem
!nb_elem=100000
allocate(v1(nb_elem))
write(6,*) "entrer le nb_elem v2 :"
read(*,*) nb_elem
!nb_elem=10
allocate(v2(nb_elem))
v1=1+j
v2=3+j
resultat=>conv(v1,v2)
write(6,*) resultat(size(resultat))
deallocate (resultat)
CONTAINS
FUNCTION conv(val_x1,val_x2)
COMPLEX,dimension(:),pointer :: conv
COMPLEX,dimension(:),intent(in),target :: val_x1
COMPLEX,dimension(:),intent(in),target :: val_x2
COMPLEX,dimension(:),pointer :: x1
COMPLEX,dimension(:),pointer :: x2
!COMPLEX,dimension(:),pointer :: temp_conv
INTEGER :: i
allocate(conv(size(val_x1)+size(val_x2)-1))
conv=0
IF (size(val_x1)>size(val_x2)) THEN
x1=>val_x1
x2=>val_x2
ELSE
x1=>val_x2
x2=>val_x1
END IF
!write(6,*) ((size(x1)-1)-(size(x2)+1)+1)
!write(6,*) (size(x1)-size(x2)-2+1)
!write(6,*) x2
conv(1:size(x2))=(/ (dot_product(x1(1:i),x2(i:1:-1)),i=1,size(x2)) /)
conv((size(x2)+1):(size(x1)-1))= &
& (/ (dot_product(x1(i:i+size(x2)-1),x2(size(x2):1:-1)), &
& i=2,size(x1)-size(x2)) /)
conv(size(x1):size(x1)+size(x2)-1) = &
& (/ (dot_product(x1(size(x1)-size(x2)+i:size(x1)), &
& x2(size(x2):i:-1)),i=1,size(x2)) /)
write (6,*) conv(size(conv))
END FUNCTION conv
end program ess
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The error message (which you should have mentioned) is Stack Overflow. The compiler is using the stack to create an array temporary that is larger than the default 1MB. I found that by changing the stack reserve to 5000000, it ran ok. This is under Link..Output.
Steve
Steve
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page