sto cercando di scrivere una serie di file, dove ho aperto il file in questo modo:Fortran I/O: Specificando grande record di dimensioni
open(unit=20, FILE="output.txt", form='unformatted', access='direct', recl=sizeof(u))
Qui, u
è un array e sizeof(u)
è 2.730.025,92 mila, che è ~ 2,5 GB. Quando eseguo il programma, viene visualizzato un errore Fortran runtime error: RECL parameter is non-positive in OPEN statement
, che a mio avviso significa che la dimensione del record è troppo grande.
C'è un modo per gestire questo? Un'opzione sarebbe quella di scrivere la matrice in più di una chiamata di scrittura in modo tale che la dimensione del record in ciascuna scrittura sia inferiore a 2,5 GB. Ma mi chiedo se posso scrivere l'intero array in una singola chiamata.
Edit: u
è stato dichiarato come double precision u(5,0:408,0:408,0:407)
Il programma è stato compilato come gfortran -O3 -fopenmp -mcmodel=medium test.f
C'è un codice OpenMP in questo programma, ma il file/O è sequenziale io.
gfortran v 4.5.0, OS: openSUSE 11.3 a 64 bit AMD Opteron
Grazie per il vostro aiuto.
solo per aggiungere questo: 'sizeof' restituisce il numero di byte e' recl' non è necessariamente in byte, quindi 'inquire' è il modo corretto per farlo. – steabert
@steabert Grazie per l'aggiunta, questo è corretto. Un esempio per questo è il codice da OP, che si interrompe con ifort ad esempio - ifort assume recl è la lunghezza della matrice come in numero di elementi, e non il numero di byte. – milancurcic
Ho ancora lo stesso errore. Sembra proprio perché il valore massimo richiesto da 'recl' è 2147483648 (2 GB). – jitihsk