Próbuję napisać tablicę do pliku, gdzie mam otwarciu pliku w ten sposób:Fortran I/O: Określanie dużą rekord wielkości
open(unit=20, FILE="output.txt", form='unformatted', access='direct', recl=sizeof(u))
tu u
jest tablicą i sizeof(u)
jest 2730025920, której to ~ 2,5 GB. Po uruchomieniu programu pojawia się błąd Fortran runtime error: RECL parameter is non-positive in OPEN statement
, co moim zdaniem oznacza, że rekord jest zbyt duży.
Czy istnieje sposób, aby sobie z tym poradzić? Jedną opcją byłoby zapisanie tablicy w więcej niż jednym wywołaniu zapisu, tak aby rozmiar rekordu w każdym zapisie był mniejszy niż 2,5 GB. Ale zastanawiam się, czy mogę napisać całą tablicę w jednym wywołaniu.
Edit: u
została zadeklarowana jako double precision u(5,0:408,0:408,0:407)
Program został skompilowany jako gfortran -O3 -fopenmp -mcmodel=medium test.f
Jest jakiś kod OpenMP w tym programie, ale plik I/O jest sekwencyjna.
gfortran v 4.5.0, OS: openSUSE 11.3 na 64 bitowych AMD Opteron
Dzięki za pomoc.
wystarczy dodać: 'sizeof' zwraca liczbę bajtów, a' recl' niekoniecznie w bajtach, więc 'inquire' to właściwy sposób na zrobienie tego. – steabert
@steabert Dzięki za dodanie, jest to poprawne. Przykładem tego jest kod z OP, który zepsułby się na przykład ifort - ifort zakłada, że recl jest długością tablicy, jak w liczbie elementów, a nie liczbą bajtów. – milancurcic
Nadal dostaję ten sam błąd. Wygląda na to, ponieważ maksymalna wartość 'recl' wynosi 2147483648 (2 GB). – jitihsk