Fortran question, read from file

  • Context: Fortran 
  • Thread starter Thread starter _Andreas
  • Start date Start date
  • Tags Tags
    File Fortran
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
5 replies · 18K views
_Andreas
Messages
141
Reaction score
1
Hello. I'm completely new to programming, and I'm having some troubles with a Fortran program I'm writing.

I have an input file containing three columns, where each column contains a couple of cartesian coordinates (column 1 contains various x coordinates, and so on). What I would like my program to do is to keep one (or two) coordinate constant, while varying the rest. The relevant part of my code looks like this:

open(11, file="filnamn")
do i=1,N
read(11, *) 1, 2, 3
...

Here all the columns are read. But if I want the program to read only column 2 and 3 I can't write

read(11,*) 2, 3

since this of course would make it read column 1 and 2. So my question is: How can I make the program read a specific column?
 
Physics news on Phys.org
You need to learn how to use fromatted read statements. What you are using now is free format reading.
Example:
read(11,100)x_coordinate,y_coordinate
100 format(3x,F12.9,3x,F12.9)

this will skip 3 spaces and read a real number in the format nn.nnnnnnnnn then skip another 3 spaces and read another real number in the format nn.nnnnnnnnn
Take some time to learn different formats
 
Just read all three each time anytimes, but keep the previous values stored
Code:
DO n=1,nPts
 READ(11,*) A(n),B(n),C(n)

 IF (whatever) THEN
   A(n) = Alast
 END IF

 Alast = A(n)
 Blast = B(n)
 Clast = C(n)

END DO
Something like that
 
Thanks for trying to help me, guys. I found out that I was on the wrong track, though.
 
I program in c++ however I have used fortran. If you have a pointer with the
address of the starting data ( your mem mapped data) write a struct which
coresponds to the data i.e. struct{
 
I program in c++ however I have used fortran. If you have a pointer with the
address of the starting data ( your mem mapped data) write a struct which
coresponds to the data i.e. struct memmap {
int a
float b
double int
+,
ect...
}
Then point the struct to the starting address and if you created the struct to
match your data your finished. I don't know the fortran syntax for a struct of hand.
however you should be able to find that. Trick is declaring it a pointer.
If all goes wrong write a c routine then link it via a call from fortran. You can also
write an assembler interface between a C routine and fortran

Geo.