- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am using Intel Fortran to compile User Subroutines to be used with Simulia Abaqus FEA. I have posted on here before, but still having some issues with the Subroutine. It is the aim that progressing bit by bit with the help of the combination of Fortran and Engineering experts, I hope to solve the problems i am currently dealing with.
My current question is regarding the arrays in Fortran, are there any predefined ARRAY rules, I should be aware of in Fortran? I assume the ARRAY(1), ARRAY(2) and ARRAY(3) in this case will call the ARRAY declared in Abaqus and not some other predefined ARRAY in Fortran?
[fxfortran] CPRESS = ARRAY(1) CSHEAR = SQRT(ARRAY(2)**2+ARRAY(3)**2) write (7,*) 'cshear is', CSHEAR write (7,*) 'cpress is', CSTRESS[/fxfortran]
Thanks
Link Copied
- 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
There is no intrinsic function called ARRAY in Fortran
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If there is any other information I can provide, please do not hesitate to let me know.
- 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
Thanks mecej4,
If I do not define the following as:
then I seem to get warnings and error messages such as:
***NOTE: Message from utility routine GETPARTINFO: Utility routine GETPARTINFO
was called with an incorrect value of the flag, jtyp=4063924. The
flag must be equal to 0 to look up a node or 1 to look up an element.
***WARNING: NODE NUMBER 0 SPECIFIED IN UTILITY ROUTINE GETVRMAVGATNODE IS NOT
AVAILABLE IN THE ADAPTIVE MESH DOMAIN.
cslip is 5.567171222590833E-318
COPEN is 3.489682493443309E-317
AVAILABLE IN THE ADAPTIVE MESH DOMAIN.
cshear is 0.000000000000000E+000
cpress is -7.748604185489346E-304
I have uploaded the .msg file after the analysis with the subroutine has been completed.
Unfortunetly, the help in the Abaqus documentation is very limited. This is somethingI have raised to there technical team. I hope this will improve in the future.
This does not seem to affect the reason why I seem to be getting values so massively different to the actually results in the results files. i.e. cpress is -7.748604185489346E-304???
Any more input or ideas would be very much appreciated.
FYI, JYPT is a variable to be provided the utility routine, where:
JYPT is the Integer flag indicating if INTNUM is a node of element number
If JTYP = 0, look up node number. If JTYP = 1 look up element number
(this should be set by the user)
Thank you very much for all your help everyone.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The messages that you obtained indicate that one or more subroutine arguments are not being passed correctly. For example, -7.748604185489346E-304 has the same bit representation as the integer (in hexadecimal) 8101010101010100. The simplicity of this pattern suggests that some uninitialized memory location is being read, because of errors in the subroutine arguments.
You must take up these questions at some Abaqus support forum/site.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I wonder if I can manually feed the results into the subroutine, I don't know if this would mean having to change the code very much to get this to work? Seems like the wrong data is being pulled into the subroutine, but I don't know why?
Unfortunetly, this problem seems to go beyond the help that can be provided by most Abaqus users (I have tried a few forums on this) and our research centre can not afford the support Abaqus directly.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have tried the following but still no further in solving the problem:
1) Running all files and analysis from the C: drive directly
2) Making adjustments to the coding and running these variations, but the same problem still exists.
3) Checking through the code many times
4) Reading through the Abaqus manuals and asking who I can to provide help and input
5) Posting on Abaqus forums, but no feedback has been provided thus far.
6) Breaking the code down into and checking each part individually
7) Checking line by line
8) Simplifying the model
I have uploaded the latest code and output .msg file, and tried to explain different parts of the code... I am running out of ideas.. need some inspiration. Any input is much appreciated.
As mentioned above the problem still remains to be the following "CPRESS"output result which a strange number (nothing like in the Abaqus output results .odb file):
cslip is 0.000000000000000E+000
COPEN is -1.000000000000000E+036
cshear is 0.000000000000000E+000
cpress is 4.243991582424610E-314
Thanks everyone. I look forward to your input.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You're still showing us numbers like E+36 which look like a result of an uninitialized default real somewhere, and e-314 which look like uninitialized real(8), or possibly a data storage over-run.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Quite so; a second cause of such numbers can be passing integers where reals should have been passed, and the converse.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You need to obtain the Abaqus API documentation for the version that you are using and make sure that your code adheres to the requirements of the API.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have been through the standard training of using subroutines with Abaqus and familiar with using Abaqus. I feel my weakness is with programming (especially with fortran), writing subroutines and software skills.
The ideal solution would be that we can have tech support with Abaqus, but unfortunetly our research budget will not allow for this. So I am having to learn the hard way. I would also prefer not to use any commercial software, but this also does not seem possible at the moment.
I really appreciate your input and critisisms, and will take a look at uninitialized defaults as suggested, as currently this is something I know nothing about and not sure why this would cause me problems in my code.
Many Thanks.
- 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
Thanks jimdempseyatthevoce,
Would you mind expanding on this a little? As I could not find anything about this in Fortran User manual or Compiler manual. Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Although this is a common source of error in calling C from Fortran, I doubt that Abaqus would call a subroutine designated to be written in Fortran 77 with any arguments passed by value.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi everyone,
I solved this problem, the worrying thing is that I still don't know exactly what was causing the problem. The approach I am going to take now will be to add more and more detail to the code and hopefully debug as I go along. Thanks for your help, advice and patience.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page