Can Fortran help with data file problem?

In summary, Fortran is a programming language commonly used for scientific and numerical computing. It has been in use since the 1950s and is praised for its efficiency and reliability in handling complex mathematical operations. A data file in Fortran is a file that contains data in a specific format that can be processed by a Fortran program. Common problems with data files in Fortran include incorrect format, missing or incorrect data, and compatibility issues. Fortran has built-in functions for reading and writing data files, such as READ, WRITE, OPEN, and CLOSE. Some tips for troubleshooting data file problems in Fortran include checking the file format, verifying data accuracy, using appropriate file handling functions, and seeking assistance from other Fortran programmers or using
  • #1
hcelik
4
0
Hello guys. I want to save the numbers between 0 and 1 with 0.01 increasement to a dat file. I wrote a code for this using Fortran however, after a point I get 0.314999 instead of 0.315000. Can you help me to solve my problem?


<code>
REAL, DIMENSION(:), ALLOCATABLE :: Y
REAL STEP, JEND, PX, GR, RE, RATIO
INTEGER N, I, J
JEND = 1.00
STEP = 1E-3
N = JEND/STEP+1
RE=1
GR=1
RATIO=GR/RE
PX=-12.00
ALLOCATE (Y(N))
Y(1) = 0.0
OPEN(UNIT=8, FILE='HEATLINE.DAT', STATUS='OLD', FORM='FORMATTED')
DO I = 2, N
Y(I) = Y(I-1)+STEP
END DO
PRINT *, 'N IS:' , N
PRINT *, 'I IS:',I
53 format('VARIABLES = "Y"')

WRITE(8,53)

do i=1,n
write(8,*) Y(I)
end do

CLOSE(8)
END



</code>
 

Attachments

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    10.8 KB · Views: 506
Technology news on Phys.org
  • #2
If you want to increment Y by 0.01 each time, why is STEP = 1E-3?
 
  • #3
hcelik said:
Hello guys. I want to save the numbers between 0 and 1 with 0.01 increasement to a dat file. I wrote a code for this using Fortran however, after a point I get 0.314999 instead of 0.315000. Can you help me to solve my problem?


<code>
REAL, DIMENSION(:), ALLOCATABLE :: Y
REAL STEP, JEND, PX, GR, RE, RATIO
INTEGER N, I, J
JEND = 1.00
STEP = 1E-3
N = JEND/STEP+1
RE=1
GR=1
RATIO=GR/RE
PX=-12.00
ALLOCATE (Y(N))
Y(1) = 0.0
OPEN(UNIT=8, FILE='HEATLINE.DAT', STATUS='OLD', FORM='FORMATTED')
DO I = 2, N
Y(I) = Y(I-1)+STEP
END DO
PRINT *, 'N IS:' , N
PRINT *, 'I IS:',I
53 format('VARIABLES = "Y"')

WRITE(8,53)

do i=1,n
write(8,*) Y(I)
end do

CLOSE(8)
END



</code>

I humbly suggest that you do all divisions, multiplications , operations with real values when you are dealing with real numbers.

i.e: if RE is a real and you want to declare it

try RE=(1.0) instead of RE=1 ( 1 is an integer so may affect the operation )

Use real numbers when dealing with real numbers, I can humbly suggest.

Good Luck !
 
  • #4
SteamKing said:
If you want to increment Y by 0.01 each time, why is STEP = 1E-3?

And yes beides you should set STEP=1.*(10.)**-2 for 0.01 increments, else it will increment by 0.001 and print out 1001 values, where it should make 101 values.
 
  • #5
I assume you already know that floating point values stored in real variables are almost never exact. If you set STEP = 1E-3, the value will not be exactly 0.001, though it should be accurate to about 6 or 7 significant figures.

The problem with your code is that you are adding STEP to itself a very large number of times, so these small errors accumulate.

If you add STEP to itself 10 times, instead of 6 or 7 signifincat digits of accuracy you will only have about 5 or 6 digits. If you add it to itself 100 times, the accuracy reduces to 4 or 5 digits. For 1000 times, 3 or 4 digits, etc.

The best way to avoid this problem is to calculate each value of Y independently of the others. Instead of
Code:
Y(1) = 0.0
do I = 2,N
Y(I) = Y(I-1) + STEP
end do
write something like
Code:
do i = 1,n
Y(i) = (i-1)*STEP
enddo
Then every entry in the Y array will be as accurate (6 or 7 significant figures) as the value of STEP.
 
Last edited:
  • #6
stallionx said:
Itry RE=(1.0) instead of RE=1

That will make no difference. Integer constants (at least if they have less than about 6 decimal digits) are converted to reals exactly. That certainly applies to constants like 0 and 1. The paretheses ( ) don't have any purpose here either.
 

FAQ: Can Fortran help with data file problem?

What is Fortran and how is it used?

Fortran is a programming language used for scientific and numerical computing. It was developed in the 1950s and is still widely used today for its efficiency and reliability in handling complex mathematical operations.

What is a data file in Fortran?

A data file in Fortran is a file that contains data in a specific format that can be read and processed by a Fortran program. This data can include numbers, characters, and other types of information.

What are the common problems encountered with data files in Fortran?

Some common problems with data files in Fortran include incorrect file format, missing or incorrect data, and compatibility issues with different versions of Fortran or different operating systems.

How can I read and write data files in Fortran?

Fortran has built-in functions for reading and writing data files. These include READ and WRITE statements, as well as OPEN and CLOSE statements for opening and closing files. These functions allow for easy manipulation of data files within a Fortran program.

What are some tips for troubleshooting data file problems in Fortran?

Some tips for troubleshooting data file problems in Fortran include checking that the file format is correct, double-checking the data for accuracy, and making sure to use the correct file handling functions for the specific task. It can also be helpful to use debugging tools or seek assistance from other Fortran programmers.

Similar threads

Replies
12
Views
2K
Replies
4
Views
2K
Replies
4
Views
2K
Replies
5
Views
4K
Replies
3
Views
2K
Replies
8
Views
1K
Replies
2
Views
1K
Replies
6
Views
1K
Back
Top