FORTRAN code question

  • Comp Sci
  • Thread starter RJLiberator
  • Start date
  • #1
RJLiberator
Gold Member
1,095
63

Homework Statement


Working on a FORTRAN based code for some work.
Not sure what's wrong with it.

Homework Equations




The Attempt at a Solution


The section of the code that is causing the problem is:

Code:
  OPEN( UNIT = 17,FILE='updateddata.txt',STATUS='UNKNOWN')
  DO I = 1, 146
  READ( 17, 703) MASSNUMBER2(I), ABUNDANCE2(I)
703  FORMAT( I7, ES15.8)
  WRITE (*,*) MASSNUMBER2(I), ABUNDANCE2(I)
  END DO
  CLOSE ( UNIT = 17 )
My problem is I get a run time error when running the entire code:

At line 31 of Chisquared.f (unit = 17, file='updateddata.txt')
Fortran runtime error: Bad values during floating point read


My question is: Is anything wrong in the fortran code here? Anything noticeable that would cause an error?
 

Answers and Replies

  • #2
SteamKing
Staff Emeritus
Science Advisor
Homework Helper
12,796
1,668

Homework Statement


Working on a FORTRAN based code for some work.
Not sure what's wrong with it.

Homework Equations




The Attempt at a Solution


The section of the code that is causing the problem is:

Code:
  OPEN( UNIT = 17,FILE='updateddata.txt',STATUS='UNKNOWN')
  DO I = 1, 146
  READ( 17, 703) MASSNUMBER2(I), ABUNDANCE2(I)
703  FORMAT( I7, ES15.8)
  WRITE (*,*) MASSNUMBER2(I), ABUNDANCE2(I)
  END DO
  CLOSE ( UNIT = 17 )
My problem is I get a run time error when running the entire code:

At line 31 of Chisquared.f (unit = 17, file='updateddata.txt')
Fortran runtime error: Bad values during floating point read


My question is: Is anything wrong in the fortran code here? Anything noticeable that would cause an error?
Make sure that the arrays MASSNUMBER and ABUNDANCE2 are each declared to have at least 146 members. Make sure MASSNUMBER is type INTEGER and ABUNDANCE2 is type REAL.

Make sure that the data file "updatedata.txt" contains at least 146 records (lines).

If you have fewer than 146 members in each array, then you might want to add the option ERR=label to the READ statement, where label is the statement number for the program to goto if a read error is encountered.

Check the format of the data file "updatedata.txt" to make sure the first 7 columns of each record contain one INTEGER type data and the next 15 columns contain only one floating point number in scientific notation.

It might be a good idea to add the FORM = 'FORMATTED' option to the OPEN statement, to make sure the program knows what type of data to expect. You can also add the option ACCESS = 'SEQUENTIAL' for a regular text file of ASCII data.

The code tags must be in ALL CAPS in order to be recognized properly.
 
  • Like
Likes RJLiberator
  • #3
RJLiberator
Gold Member
1,095
63
Thanks for the pretty awesome help.

So far I've tried some of the suggestions, but no cigar.

I think the problem might lie in the formatting of the updateddata.txt file.

This file has the first 2 columns as mass number until it reaches the triple digit values. Then it has 3 columns dedicated to mass number. IT then tabs over to the abundance numbers in scientific form.
I might have to reformat this to make it work in fortran, is my guess.
 
  • #4
SteamKing
Staff Emeritus
Science Advisor
Homework Helper
12,796
1,668
Thanks for the pretty awesome help.

So far I've tried some of the suggestions, but no cigar.

I think the problem might lie in the formatting of the updateddata.txt file.

This file has the first 2 columns as mass number until it reaches the triple digit values. Then it has 3 columns dedicated to mass number. IT then tabs over to the abundance numbers in scientific form.
I might have to reformat this to make it work in fortran, is my guess.
It might be easier to adjust the FORMAT and READ statements in your program to adapt to the format of the data file. You can judge which is the least amount of work.
 
  • Like
Likes RJLiberator
  • #5
RJLiberator
Gold Member
1,095
63
So, in the end, we decided to change read to: READ( 17, *) MASSNUMBER2(I), ABUNDANCE2(I)

Amongst other small problems, this seemed to solve the problem and the code is running.

FORTRAN is rather touchy.
 
  • #6
34,688
6,394
So, in the end, we decided to change read to: READ( 17, *) MASSNUMBER2(I), ABUNDANCE2(I)

Amongst other small problems, this seemed to solve the problem and the code is running.

FORTRAN is rather touchy.
I think that you'll find that most programming languages are rather touchy. They do what you tell them to do, not necessarily what you want them to do.
 
  • Like
Likes RJLiberator and SteamKing

Related Threads on FORTRAN code question

  • Last Post
Replies
1
Views
2K
Replies
1
Views
1K
  • Last Post
Replies
3
Views
925
  • Last Post
Replies
1
Views
1K
Replies
0
Views
1K
  • Last Post
Replies
0
Views
763
Replies
4
Views
1K
  • Last Post
Replies
7
Views
870
  • Last Post
Replies
2
Views
329
Top