2016-12-01 2 views
1

Ich bin ausgeführt. Ich stehe auf einer kryptischen Fehlermeldung und bin gespannt, was das OpenMDAO-Team denkt. Wenn ich den Code seriell ausführe, funktioniert das ohne Probleme. Als ich es unter mpirun laufen, wirft OpenMDAO eine kryptische Fehlermeldung:Weird AttributeError: OpenMDAO sagt, Param wurde nicht initialisiert, wenn ich meine Simulation unter mpirun

Traceback (most recent call last): 
    File "test/exampleOptimizationAEP.py", line 129, in <module> 
    prob['ratedPower'] = ratedPower 
    ..... 
    File "/scratch/jquick/test/lib/python2.7/site-packages/openmdao-1.7.3-py2.7.egg/openmdao/core/vec_wrapper.py", line 1316, in __setitem__ 
    (self.name, name)) 
AttributeError: 'params' has not been initialized, setup() must be called before 'ratedPower' can be accessed 

Ich bin nicht sicher, wie dies zu nähern. Die Variable ratedPower im Code unterscheidet sich offensichtlich nicht. Welche Informationen gibt mir dieser Fehler darüber, was falsch läuft?

+0

Können Sie ein in sich geschlossenes einfaches Beispiel finden, das dieses Problem aufweist? –

+0

Was sind Sie bereit, sich selbst zu nennen? Die Software, zu der ich verlinke, ist Open Source. Es erfordert das Akima-Paket https://github.com/WISDEM/Akima. Ich bin mir nicht sicher, ob wir ein einfacher reproduzierbares Beispiel erstellen können. – kilojoules

+0

von selbst, ich meinte eine einfache (einzelne Datei) Testfall mit Spielzeugkomponenten. Ich glaube, das ist ein Fehler im Framework, und ich habe auf etwas verwiesen, das möglicherweise in die openmdao-Testsuite aufgenommen werden könnte. –

Antwort

2

Dies ist ein Fehler in OpenMDAO < = v1.7.2. Schauen Sie sich die Ausgabe von check_setup an und sehen Sie sich die Liste parameters without associated unknowns an. Du wirst diese Variable dort finden. Bei paralleler Ausführung (wegen des Fehlers) können Sie in Ihrem Setup-Skript keine hängenden Parameter (keine ohne zugehörige Unbekannte) festlegen.

Der Weg, es zu beheben, ist, eine IndepVarComp zu jeder Variable hinzuzufügen, die Sie benötigen, um den Wert von zu initialisieren.

+0

Schau dir das Skript an, mit dem ich verlinkt bin. Es passiert nach dem Aufruf von 'setup()' – kilojoules

+0

'prob.setup (check = False)' ... starte es mit check = True. Etwas ist wahrscheinlich im Setup fehlerhaft und du siehst es nicht. Vielleicht bekommst du nicht den richtigen Impl, oder es gibt ein anderes Problem –

+0

Es scheint wie ein Hinweis, dass es nur unter "mpirun" fehlschlägt. Ich bin sicher, dass dies durch einen Fehler tief in unserem FLORISSE-Modell verursacht wird. Die Suche nach diesem Fehler war eine Herausforderung, und wir wollten herausfinden, ob es aufgrund des Fehlers irgendwelche Informationen gibt, die wir über dieses Problem herausfinden können. Möglicherweise haben Sie Recht, dass verschiedene Prozessoren nicht in der richtigen Reihenfolge sind, was dieses Problem verursacht. Ich habe 'prob.setup (check = True)' versucht. Ich habe auch versucht, 'MPI.COMM_WORLD.Barrier()' nach der 'prob.setup (check = False)' Zeile hinzuzufügen. Keiner dieser Versuche hat die Fehlermeldung beeinflusst. – kilojoules

Verwandte Themen