Hallo, ich bin Student und neu hier im Forum. Für eine Arbeit in Ansys ist es notwendig ein Userlement zu verwenden, welches von meinem Vorgänger in seiner Arbeit programmiert wurde.
Dieses, in Fortran programmierte Userelement, wurde erfolgreich unter Linux64 + AnsysV12 bis Ansys V14 kompiliert und angewandt. Nun wollte ich diesen Code unter Windows7 X64 und Ansys V14 kompilieren und dies funktioniert auch soweit. Allerdings ist das berechnete Ergebnis falsch. Meine Vorgehensweise war folgende:
1. Microsoft Visual Studio 2008 über MSDNAA unserer Uni bekommen und installiert.
2. ServicePack 1 und patches für VS2008 installiert (wegen Fehler im Linker usw.)
3. Intel Fortran Compiler 30 Tage Testversion in Version 10.1.034 und 11.1.051 verwendet (beides mit dem gleichen Ergebnis)
4. Unter \ANSYS Inc\v140\ansys\custom\user\winx64 die ANSCUST.bat zum erstellen der ANSYS.exe über "cmd" von Windows gestartet. Im selben Ordner befinden sich die 6 Fortran Dateien, welche den Userelementecode beinhalten.
5. Es wird eine ANSYS.exe ohne Fehlermeldung erstellt, welche ich über den Ansys Launcher einbinde und starte.
6. Über den Befehl "/input,1elem,inp" lade ich einen Script, welcher 1 Userelement zusammen baut und durchrechnet. Das Ergebnis ist im Anhang unter oder hier zu finden:
Die linke Seite ist das Bild unter Linux64 mit dem Userelement die rechte Seite unter Winx64. Wie man erkennen kann gibt es eine Abweichung. Anbei habe ich noch beie Ausgaben mittels Notepad++ und dem Plugin Compare einem Vergleich unterzogen. Die wenigen Unterschiede (rot) belaufen sich auf unterschiedliche "CP=" Zeiten und Computername bzw Lizensangaben.
Dies war aber nicht der hauptsächliche Test. Dieser wurde mit einer "sphere.inp" gemacht und dort gestaltet sich die Sache noch etwas extremer.
Wie man erkennen kann, zerreißt das Gitter in der Winx64 kompilierten Variante. Ich habe gerade kein Bild der Linuxvariante hier, kann aber sagen, dass hier das Gitter vollständig bleibt und das richtige Ergebnis heraus kommt. Ein ausführlicher Codevergleich über Notepad++ und dem Plugin Compare ergibt hier, dass alle Matrizen übereinstimmen nur am Ende bei der Berechnung der größten Kräfte weichen diese in der Windowsvariante enorm ab.
Nun stellt sich die Frage, wo liegen die Unterschiede. Gab es Änderungen in Ansys selbst zwischen Version V12 und V14, das eventuell Funktionen anders im Fortrancode behandelt werden müssen? Kann es Fehler beim Kompilieren geben, obwohl diese nicht angezeigt werden? Was machen die gleichen Intel Fortran Compiler Varianten unter Linux anders als unter Windows? Gibt es einen Unterschied zwischen Ansys unter Linux und Ansys unter Windows, wenn man die gleiche Versionsnummer verwendet? Wirken sich verschiedene Lizenzen von Ansys (Linux/Windows, Academic Research/normale Lizenz) auf die Ergebnisse aus?
Darf man eigentlich die Compilerangaben in der ANSCUST.bat einfach so übernehmen oder muss ich diese auf das Userelement anpassen?
Code:
for %%p in ( "*.F" ) do ifort -D__EFL -DNOSTDCALL -DARGTRAIL -O3 -DPCWIN64_SYS -DPCWINX64_SYS -DPCWINNT_SYS -DCADOE_ANSYS -Qfpp -nbs -4Yportlib -4Ya /c /Fo.\ /DFORTRAN /MD /W0 %%p >>f_comp.log 2>&1
Hat jemand sonst noch eine Idee, wo der Fehler zu suchen ist?
Vielen Dank schon einmal für eure Hilfe.
0lli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP