Prev: array in read statement
Next: Maths constants
From: kiwanuka on 16 Jan 2010 10:44 On Jan 16, 3:31 pm, Gordon Sande <g.sa...(a)worldnet.att.net> wrote: > On 2010-01-16 11:01:43 -0400, kiwanuka <robert.kiwan...(a)gmail.com> said: > > > > > Dear all, > > > I wonder if anyone has come across this problem before or has any idea > > how to go about solving it. > > > Problem: > > When I run abaqus with fortran 90 subroutines in which I use typical > > fortran 90 functions like mutmul, then if > > (1) I use the ifort compiler, no problem, job runs well. > > (2) if I use the gfortran compiler, I get "Abaqus Error: The > > executable [snip]/standard.exe aborted with system error "Illegal > > memory reference" (signal 11)." > > > Other info: > > - On the same computer where I have gfortran installed, jobs run fine > > if I use Abaqus +gfortran+fortran 77 standard code, i.e. no special > > functions or statements applicable to the fortran 90 standard but not > > fortran 77. > > > -The version of abaqus on the computer with gfortran is 6.8.4 and the > > gfortran version is "gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu8)" > > > -The version of abaqus on the computer with ifort is 6.6.3 and the > > ifort version is "Version 9.1" > > > -When I build stand-alone programs in complete fortran 90 standard, > > with whatever fortran 90 statements, they work perfectly with gfortran > > on the same computer (which is running on Ubuntu 9.10)! IT IS ONLY > > WHEN I WRITE ABAQUS SUBROUTINES IN FORTRAN 90 THAT I HAVE PROBLEMS! - > > sorry not shouting but emphasising. > > > Any ideas around this would be welcome. > > > Thanks in advance, > > > Robert > > Under a minute with Google etc leads to Abaqus system requirement of IFORT. > There is no mention of any other compiler. Fortran runtime support is The abaqus environment file is written to expect ifort, but if made aware of other compilers it calls them instead. It has always used gfortran for my f77 user subroutines. > rarely if ever compatable between different compilers. Most suppliers > of subroutine packages sell separate versions for each compiler they > support. A few will give you a discount for a second compiler but many > will not. I have never used any supplier of supplier of subroutine packages. We write our own user element subroutines according to our element models and other things like elastic - plastic constitutive behaviour. Regards, Robert
From: Richard Maine on 16 Jan 2010 12:05 kiwanuka <robert.kiwanuka(a)gmail.com> wrote: > On Jan 16, 3:31 pm, Gordon Sande <g.sa...(a)worldnet.att.net> wrote: > > Under a minute with Google etc leads to Abaqus system requirement of IFORT. > > There is no mention of any other compiler. Fortran runtime support is > > The abaqus environment file is written to expect ifort, but if made > aware of other compilers it calls them instead. It has always used > gfortran for my f77 user subroutines. I'm sorry, but the fact that you can make Abaqus call some other compiler is not substantial argument that there is any reason to expect it to work. Nor, as it happens, is the fact that you can make it work with some code (f77 code in particular), substantial evidence to expect it to work with other code (such as code using f90 features). See below. >> rarely if ever compatable between different compilers. Most suppliers >> of subroutine packages sell separate versions for each compiler they >> support. A few will give you a discount for a second compiler but >> many will not. > I have never used any supplier of supplier of subroutine packages. We > write our own user element subroutines according to our element models > and other things like elastic - plastic constitutive behaviour. And here you just completely miss the point. It matters not whether the code in question comes from some 3rd-party supplier or from yourself. The point is that a product that supports code from one compiler does not necessarily support the same code compiled with a different compiler. This is true in general, as experts like Gordon and Tim (both of who made essentially the same point) well know. Your reported data is completely consistent with expectations based on such experience. Your observation that your f77 code appears to work while your f90 code does not work is consistent with this explanation. F90 introduced *MAJOR* (If I may indulge in my own shouting) new features relating to procedure interfaces. The implementation of those features does not tend to be compatable at an object code level between compilers. The implementation of f77 procedure interfaces does sometimes also have incompatibilities, but the odds there are far better. Based on your description, I'd saythat the odds were very high that the object-code-level incompatibility of procedure interfaces is exactly the problem. I will add my own experience to that of Gordon and Tim in saying that if Abaqus only supports IFORT, then you can't count on it working with anything else. That also applies to f77 code, I might add. Just because you got it to work with some f77 code doesn't mean it would work with all f77 code. This is more than idle speculation on my part. I have plenty of experience such cases of limitted compatibility. You could find, for example, that things fail if you have arguments of character type (or are ok with one such argument, but fail with multiple ones). You could also find that things fail if I/O is involved. Those two examples are specific ones that I have seen, but they are by no means all of the possibilities. Heck, I recall cases of some products being quite picky about the exact version of compilers. A different version from the same vendor wouldn't do. I once ran into that with Matlab on Sun computers (the specific case I recall being quite a while back). -- Richard Maine | Good judgment comes from experience; email: last name at domain . net | experience comes from bad judgment. domain: summertriangle | -- Mark Twain
From: dpb on 16 Jan 2010 12:16 kiwanuka wrote: > On Jan 16, 3:01 pm, kiwanuka <robert.kiwan...(a)gmail.com> wrote: >> Dear all, >> >> I wonder if anyone has come across this problem before or has any idea >> how to go about solving it. >> >> Problem: >> When I run abaqus with fortran 90 subroutines in which I use typical >> fortran 90 functions like mutmul, then if >> (1) I use the ifort compiler, no problem, job runs well. >> (2) if I use the gfortran compiler, I get "Abaqus Error: The >> executable [snip]/standard.exe aborted with system error "Illegal >> memory reference" (signal 11)." .... > Abaqus + ifort +f90 standard subroutines is fine > Abaqus +gfortran + f90 gives illegal memory reference <=== > > So far the problems have been noted with usage of mutmul, allocate and > pointers; the first separately, the other two in combination. .... As others have said so I'm simply reinforcing it in less politic terms the short story is you're trying to push water up a rope w/ the last combination above unless Abaqus has another set of runtimes consistent w/ the gfortran F90 implementation details. There's no point in even trying to solve the problem outside what the vendor supports when there's fundamental mismatch between implementations involved. Machinations that seem to work in some cases will still not necessarily be ok in others and could even break on different data for cases that appear to work on some tests. Trying to work around such issues is just not a fruitful way to spend one's time... --
From: kiwanuka on 16 Jan 2010 13:20 [snip] > The point is that a product that supports code from one compiler does > not necessarily support the same code compiled with a different > compiler. This is true in general, as experts like Gordon and Tim (both Thanks Richard. That's a useful reminder [snip] > does not work is consistent with this explanation. F90 introduced > *MAJOR* (If I may indulge in my own shouting) new features relating to > procedure interfaces. The implementation of those features does not tend > to be compatable at an object code level between compilers. The > implementation of f77 procedure interfaces does sometimes also have > incompatibilities, but the odds there are far better. Based on your > description, I'd saythat the odds were very high that the > object-code-level incompatibility of procedure interfaces is exactly the > problem. Thanks again. That's likely the problem indeed! In that case I will not waste time trying to solve it. > > I will add my own experience to that of Gordon and Tim in saying that if > Abaqus only supports IFORT, then you can't count on it working with > anything else. That also applies to f77 code, I might add. Just because > you got it to work with some f77 code doesn't mean it would work with > all f77 code. This is more than idle speculation on my part. I have > plenty of experience such cases of limitted compatibility. You could > find, for example, that things fail if you have arguments of character > type (or are ok with one such argument, but fail with multiple ones). > You could also find that things fail if I/O is involved. Those two > examples are specific ones that I have seen, but they are by no means > all of the possibilities. That is useful to know. > > Heck, I recall cases of some products being quite picky about the exact > version of compilers. A different version from the same vendor wouldn't > do. I once ran into that with Matlab on Sun computers (the specific case > I recall being quite a while back). I've seen this before myself but the fact that I have always gotten Abaqus and gfortran to work with all my f77 code led me to expect that something similar should be possible with f90 code. Regards, Robert
From: kiwanuka on 16 Jan 2010 13:27
On Jan 16, 5:16 pm, dpb <n...(a)non.net> wrote: > kiwanuka wrote: > > On Jan 16, 3:01 pm, kiwanuka <robert.kiwan...(a)gmail.com> wrote: > >> Dear all, > > >> I wonder if anyone has come across this problem before or has any idea > >> how to go about solving it. > > >> Problem: > >> When I run abaqus with fortran 90 subroutines in which I use typical > >> fortran 90 functions like mutmul, then if > >> (1) I use the ifort compiler, no problem, job runs well. > >> (2) if I use the gfortran compiler, I get "Abaqus Error: The > >> executable [snip]/standard.exe aborted with system error "Illegal > >> memory reference" (signal 11)." > ... > > Abaqus + ifort +f90 standard subroutines is fine > > Abaqus +gfortran + f90 gives illegal memory reference <=== > > > So far the problems have been noted with usage of mutmul, allocate and > > pointers; the first separately, the other two in combination. > > ... > As others have said so I'm simply reinforcing it in less politic terms > the short story is you're trying to push water up a rope w/ the last > combination above unless Abaqus has another set of runtimes consistent > w/ the gfortran F90 implementation details. > > There's no point in even trying to solve the problem outside what the > vendor supports when there's fundamental mismatch between > implementations involved. > > Machinations that seem to work in some cases will still not necessarily > be ok in others and could even break on different data for cases that > appear to work on some tests. > > Trying to work around such issues is just not a fruitful way to spend > one's time... > > -- Many thanks. I usually prefer to try and fail rather than failing to try so I gave it ago but now I see the depth of the complications I was digging into in this particular case. Thanks for all the information. Regards Robert |