Fortran77: Data I/O in big file

  • Context: Fortran 
  • Thread starter Thread starter Bistable
  • Start date Start date
  • Tags Tags
    Data File Fortran77
Click For Summary
SUMMARY

The discussion centers on optimizing data input/output in Fortran77 for handling large files, specifically a 500MB file with over 100,000 lines of formatted data. The user initially considered splitting the file into smaller segments for efficiency but was advised to utilize Fortran's direct access file capabilities instead. This method allows for instant reading of specific records without sequential access, provided a fixed record length is established. The conversation emphasizes the advantages of using unformatted files for faster read/write operations and cautions against the use of pointers for complex operations due to performance concerns.

PREREQUISITES
  • Understanding of Fortran77 programming language
  • Familiarity with file handling concepts in Fortran, including direct access files
  • Knowledge of formatted vs. unformatted file operations
  • Basic understanding of record indexing in file management
NEXT STEPS
  • Research Fortran77 direct access file capabilities
  • Learn about fixed record length file creation in Fortran77
  • Explore the differences between formatted and unformatted file handling in Fortran
  • Investigate external indexing techniques for large data files
USEFUL FOR

Fortran developers, data scientists working with large datasets, and anyone involved in optimizing file I/O operations in Fortran77.

Bistable
Messages
1
Reaction score
0
Hi there,

I have generated a huge data file (approx 500MB large) containing a few 100k lines of formatted data (format(1X, 200ES11.4)). As I believe handling such a large file might over and over again (will be opened by an explicit FE code) might slow down the process significantely, I was thinking to split this file into many smaller files that contain certain columns of data (eg. file element1.txt contains columns 1 and 2, element2.txt contains columns 1 and 3, element3.txt contains columns 1 and 4...element150.txt contains columns 1 and 151) and call those when I need them (I only need a few data points during the calculations). I managed to create those files, but I am struggeling to pass the correct data to those files. Pointers might be good, but I do not know if and how they work with fortran 77. Is there a simple way of doing this?

Thanks a lot.
 
Technology news on Phys.org
It depends on how you use the file.
If it is a huge stiffness matrix which you have to read from A-Z, then you do not have too many options.
If it is a file from which you extract information ("I only need a few data points during the calculations"), then you may seriously consider using the direct access file capability.
You will have to index the records, and your program will be able to read the required records directly, without a sequential read. Even if you have a file of 500 Mb with 100K+ records, the read is instant, and you can read or write in any order. The only catch is you will have to decide on a fixed record length on creation of the file, and the search is by record number. If the point numbers cannot be related to the record number, then external indexing will be required.
See, for example, a description at:
http://rsusu1.rnd.runnet.ru/develop/fortran/prof77/node162.html
or an example at:
http://rainbow.ldgo.columbia.edu/data/fortranreaddata.html

Note: you do not need to dissect the file. A huge record of length 2K is reasonable, and easier for you to work with. There will be less file handles, less indexes, and less I/O overhead.
 
Last edited by a moderator:
Is there any reason you can't read/write it as an unformatted file? MUCH faster. Also, do not directly operate on pointers if you're performing a complex operation, they are very very slow as well.
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K