2016-07-07 25 views
-2

Ich habe mit einem FORTRAN-Programm gearbeitet. Ich habe scheinbar zufällige Änderungen in einer 1D-Matrix bemerkt, mit der ich arbeite. Es ist eine Matrix von 4000 ganzen Zahlen. Die Werte werden der Matrix einzeln hinzugefügt, wobei mit Index 1 begonnen und für jeden hinzugefügten Wert um 1 iteriert wird. Die Matrix wird nicht vollständig "gefüllt", derzeit werden nur 100 Werte in der Matrix platziert. Man würde also erwarten, dass die ersten 100 Einträge der Matrix nicht Null sind (alle addierten Werte sind nicht Null) und die verbleibenden 3900 Einträge werden 0. Einige der Einträge der Matrix sind jedoch große negative Zahlen , aber ich bin mir sicher, dass kein Teil meines Codes diese Einträge berührt.Fortran Einträge von Array ändern scheinbar zufällig

Was könnte dieses Problem verursachen? Es tut mir leid, aber ich kann den Code nicht für euch alle veröffentlichen.

Der Code verfügt über mehrere andere große Matrizen, die insgesamt ~ 100 MB Speicherplatz einnehmen. Könnte dies möglicherweise ein Speicherproblem sein?

Danke!

Antwort

-2

Eine "Matrix" ist zweidimensional; Ihr Array ist eindimensional.

Die Dinge ändern sich nicht, es sei denn, Sie bitten sie um Änderung.

FORTRAN initialisiert keine anderen Variablen als (wie ich mich erinnere) in einem COMMON. Als solche sind sie garantiert mit Garbage-Werten zu beginnen. Versuchen Sie, Ihre Daten mit einer DATA-Anweisung zu initialisieren. Wenn Sie ein markiertes COMMON initialisieren müssen, müssen Sie ein BLOCK DATA-Unterprogramm angeben.

+0

Dank! Das scheint das Problem geheilt zu haben. –

+2

Keine Notwendigkeit, allgemeine Blöcke und Datenanweisungen zu verwenden, können Sie Variablen in der Deklaration wie integer :: arr (10,10) = 0 initialisieren. – haraldkl

+1

Richtig, um klar zu sein, löste ich das Problem durch Initialisierung mit X (:) = 0 –

0

Sie müssen Ihr Array initialisieren, sonst wird es fast immer Müll enthalten. Dies würde es tun:

array = 0.0e0 ! real array 

oder

array = 0.0e0 ! double precision 

oder

array = 0 ! integer 
+1

Es ist vielleicht mit zwei Punkten zu beachten. In Fortran bedeutet "initialisieren" etwas Spezifisches und nicht die gezeigte Zuordnung. Wahrscheinlich meinen Sie nicht, 0.0e0 'als doppelte Genauigkeit (und für jedes der Beispiele gibt es eine Typkonvertierung). – francescalus

+0

Sie können einfach '= 0' verwenden, um jede Fortran numerische Variable zu initialisieren (definieren). Kleine ganze Zahlen sind genau darstellbar. –