Estoy intentando escribir una matriz para presentar, en donde he abierto el archivo de esta manera:Fortran I/O: Especificación de gran récord tamaños
open(unit=20, FILE="output.txt", form='unformatted', access='direct', recl=sizeof(u))
Aquí, u
es una matriz y sizeof(u)
es 2730025920, el cual es ~ 2.5GB. Cuando ejecuto el programa, recibo un error Fortran runtime error: RECL parameter is non-positive in OPEN statement
, lo que creo que significa que el tamaño del registro es demasiado grande.
¿Hay alguna manera de manejar esto? Una opción sería escribir la matriz en más de una llamada de escritura de manera que el tamaño de registro en cada escritura sea inferior a 2,5 GB. Pero me pregunto si puedo escribir toda la matriz en una sola llamada.
Editar: u
ha sido declarado como double precision u(5,0:408,0:408,0:407)
El programa fue compilado como gfortran -O3 -fopenmp -mcmodel=medium test.f
Hay algún código OpenMP en este programa, pero el archivo de E/S es secuencial.
gfortran v 4.5.0, SO: openSUSE 11.3 en 64 bits AMD Opteron
Gracias por su ayuda.
simplemente para agregar esto: 'sizeof' devuelve el número de bytes y' recl' no es necesariamente en bytes, por lo que 'preguntar' es la forma correcta de hacerlo. – steabert
@steabert Gracias por la adición, esto es correcto. Un ejemplo para esto es el código de OP, que se rompería con ifort por ejemplo - ifort supone que recl es la longitud de la matriz como en cantidad de elementos, y no el número de bytes. – milancurcic
Todavía recibo el mismo error. Parece que es porque el valor máximo que 'recl' toma es 2147483648 (2GB). – jitihsk