2017-05-01 5 views
0

I Ausgangs Fortran Daten im Binärformat einer NxMxL Matrix schreibe wie folgtFortran Binärausgang größer als erwartet

open(94, file = 'mean_flow_sp.dat', status = 'replace', action = 'write', form = 'unformatted') 
    do k = 0,L-1 
    do j = 0,M-1 
     do i = 0,N-1 
     write(94) u(i,j,k), v(i,j,k), w(i,j,k) 
     enddo 
    enddo 
    enddo 
close(94) 

wo u, v, w wie z.B. single precision Werte zugeordnet u(0:N-1,0:M-1,0:L-1). Dann habe ich gelesen, die Ausgabedatei in Python als

f = open('mean_flow_sp.dat', 'rb') 
data = np.fromfile(file=f, dtype=np.single).reshape(N,M,L) 
f.close() 

Das erste ungerade, was ich ist bemerken folge, daß der Ausgang Fortran Datei 10066329600 Bytes lang ist (dies wird unter Verwendung von L = 640, M = 512, N = 1536). Also die Frage ist, warum diese Datei nicht 1536 * 512 * 640 * 3 (Variablen) * 4 (Bytes) = 6.039.797.760 Bytes lang ist?

Offensichtlich löst das Python-Skript einen Fehler aus, wenn ich versuche, die gelesenen Daten umzuformen, da es nicht die Größe von NxLxM x3 (in einfacher Genauigkeit) hat.

Warum ist die Ausgabedatei so groß?

+1

Ihr Compiler fügt wahrscheinlich Kopf-/Fußdaten zu jedem geschriebenen Datensatz hinzu, den Sie nicht berücksichtigen. Sie können entweder nach anderen Fragen suchen, die Ihrem Setup entsprechen, oder nach Stream-Ausgaben suchen. – francescalus

+0

Danke, das habe ich ein bisschen später bemerkt und die Antwort gepostet. –

Antwort

0

Ok, also habe ich gerade festgestellt, dass, wie geschrieben here, "Fortran Compiler in der Regel die Länge des Datensatzes am Anfang und Ende des Datensatzes schreiben.", So dann überprüft die Größe der Ausgabedatei.