2016-08-09 31 views
-1

Ich schreibe ein FORTRAN-Programm für die Monte-Carlo-Simulation von Polymerschmelzen. Während ich den Wert der Summe der partiellen Boltzmann-Gewichte in meiner Monte-Carlo-Subroutine an bestimmten Punkten überprüfe, bekomme ich NAN nach dem Ausdruck der Variablen in den Unterprogrammen. Das Unterprogramm ist ziemlich groß. Ich kann es hier nicht posten. Wenn jemand eine Idee hat, was ist der Grund dafür, NAN nach dem Drucken des Wertes der Variablen zu bekommen ??. Bitte helfen Sie mir, da ich nicht weiter fortfahren kann.NAN Problem beim Versuch zu drucken und überprüfen Sie den Wert der Boltzmann Gewicht in meinem Code

Wie können wir eine solche Situation überwinden, um NAN zu vermeiden? Ich benutze einen Gfortran-Compiler, um mein Programm zu schreiben.

+0

Gibt es einen bestimmten Grund, warum Sie sich auf FORTRAN statt Fortran beschränken? Fortran ist mit dem intrinsischen Modul 'ieee_exceptions' ausgestattet, um solche Gleitkommaausnahmen zu behandeln. – jlokimlin

Antwort

0

Wenn in Ihren Ergebnissen ein NaN vorhanden ist, liegt ein Problem vor (ungültige arithmetische Operation). Du musst es korrigieren. Wenn Sie nicht nachvollziehen können, woher diese NaN stammt, empfehlen wir Ihnen, Ihren Code Schritt für Schritt zu profilieren und jede Ihrer Variablen zu überprüfen, bis Sie herausfinden, welche problematisch ist. Der Compiler kann Ihnen jedoch dabei helfen, dieses NaN zu verfolgen. Das Flag -ffpe-trap=invalid stoppt das Programm, wenn ein NaN auftritt, der Compiler sollte Ihnen dann die Zeile mitteilen, wo das NaN entsteht. Siehe den verwandten Beitrag: Force gfortran to stop program at first NaN