- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello
For some reason I get the error message
BandStruc.f90(1): catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report. Note: File and line given may not be explicit cause of this error.
program BandStruc
when trying to compile my program (BandStruc.f90, attached to this post). The error began when writing the sub routine below
subroutine DivideBZ
implicit none
double precision, dimension(4,3,8**Ndiv) :: IBZ1,IBZ2,IBZ3
IBZ1 = DoDivide(reshape((/X,W,U,G/),(/4,3/)),Ndiv);
IBZ2 = DoDivide(reshape((/L,W,U,G/),(/4,3/)),Ndiv);
IBZ3 = DoDivide(reshape((/L,W,U,G/),(/4,3/)),Ndiv);
call WriteMat(IBZ1(:,:,2))
end subroutine
The strange thing is that i only get the error message when the line "IBZ3 = ..." is present - thus the program runs fine with only the "IBZ1 = ..." and "IBZ2 = ..." lines (or actually any two of the above). It does not help to assemble the arrays into one (instead of three), and it does not matter what data I put in (G,W,L,W and U are vectors). For some reason a test program which only includes this subroutine do not produce any errors... I compile my program using the line
ifort BandStruc.f90 -L(path to lib/32) -I(path to include/32 (Path to lib/32)libmkl_solver_sequential.a -Wl,--start-group (Path to lib/32)/libmkl_intel.a (Path to lib/32)libmkl_sequential.a (Path to lib/32)libmkl_core.a (Path to lib/32)/libmkl_lapack95.a (Path to lib 32)/libmkl_blas95.a -I/opt/intel (Path to lib/32)/mkl_lapack -Wl,--end-group -lpthread -p gnufor2.f90
I am wondering whether this is my fault or an error with the compiler (as the error message states)...? Any help or comments will be much appreciated!
My system is AMD Turion x2, Ubuntu 9.04 (32 bit), intel Fortran 11.1 + mkl installed from the intel Fortran installation file.
- Mads Trolle
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
For some reason this problem is solved by introducing a temporary array, which is allocated before and deallocated after each call to the DoDivide function. Thus my subroutine is now
subroutine DivideBZ
implicit none
double precision, dimension(4,3,8**Ndiv) :: IBZ1,IBZ2,IBZ3
double precision, allocatable :: IBZt(:,:,:)
allocate(IBZt(4,3,8**Ndiv))
IBZt = DoDivide(reshape((/X,W,U,G/),(/4,3/)),Ndiv);
IBZ1 = IBZt
deallocate(IBZt)
allocate(IBZt(4,3,8**Ndiv))
IBZt = DoDivide(reshape((/L,W,U,G/),(/4,3/)),Ndiv);
IBZ2 = IBZt
deallocate(IBZt)
allocate(IBZt(4,3,8**Ndiv))
IBZt = DoDivide(reshape((/L,W,U,G/),(/4,3/)),Ndiv);
IBZ3 = IBZt
deallocate(IBZt)
call WriteMat(IBZ1(:,:,2))
end subroutine
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Still a problem -
this time the catastrophic error ocurs simply if a add an empty line between two subroutines (or add any more program lines to my program)... This is quite frustrating, and i can only conclude that the intel Fortran compiler is too unstable to use on my specific platform.
- Regards
Mads Trolle
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page