Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  ANSYS
  Userelement unter Winx64 kompilieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Ansys
Autor Thema:  Userelement unter Winx64 kompilieren (1929 mal gelesen)
0lli
Mitglied


Sehen Sie sich das Profil von 0lli an!   Senden Sie eine Private Message an 0lli  Schreiben Sie einen Gästebucheintrag für 0lli

Beiträge: 3
Registriert: 19.02.2013

erstellt am: 19. Feb. 2013 13:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


1elem_vergleich_grafik.png


1elem_vergleich.png


spheregitter_winx64.png

 
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

ChristophN
Mitglied
Berechnungsingenieur


Sehen Sie sich das Profil von ChristophN an!   Senden Sie eine Private Message an ChristophN  Schreiben Sie einen Gästebucheintrag für ChristophN

Beiträge: 773
Registriert: 13.12.2008

erstellt am: 19. Feb. 2013 13:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 0lli 10 Unities + Antwort hilfreich

Das ist schon ein sehr seltsamer Fehler. Wenn alles richtig programmiert wurde, sollte das Ergebnis bei solchen einfachen Subroutinen plattformunabhängig sein. Bist Du Dir sicher, dass die Programmierung richtig ist? Hast Du mal versucht, den Quellcode mit allen möglichen Compilerwarnungen zu übersetzen (z.B. -warn all und -check all)? Solche Fehler treten teilweise auf, wenn auf Speicher falsch zugegriffen wird. Ein gutes Werkzeug, um soetwas herauszufinden, ist auch ValGrind, das kannst du am besten in der IDE Code::Blocks (unter Linux) verwenden.
Wenn es daran nicht liegt, könnte es noch die Compilerversion sein, die sich unterscheidet (ist aber eher unwahrscheinlich). Verwendest Du die gleiche Version unter Linux und Windows?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

0lli
Mitglied


Sehen Sie sich das Profil von 0lli an!   Senden Sie eine Private Message an 0lli  Schreiben Sie einen Gästebucheintrag für 0lli

Beiträge: 3
Registriert: 19.02.2013

erstellt am: 20. Feb. 2013 11:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich nehme es an, dass es die gleicher Version ist. Wenn ich auf Linux Ansys starte und mir die Version ausgeben lasse, dann erhalte ich V14.0 und bei Windows das gleiche. Sofern die Jungs von Ansys keinen kranken Humor haben, sollte es die gleiche Version aber unterschiedliches Betriebsystem sein.

Hat sich vielleicht was in der Funktionsstruktur bei Ansys geändert von V12 zu V14? Wo kann man das nachsehen? Gibt es eine Liste im Netz? Es werden verschiedene Dateien "included"


Code:
#include "impcom.inc"
#include "ansysdef.inc"
#include "elparm.inc"
#include "echprm.inc"
#include "seldcm.inc"
#include "echprm.inc"

und "call"s ausgeführt


Code:

      call svrput (svindx(1),1,nssvr,ssvr(1))

c     --- write out the svr index vector
      call svpidx (locsvrL,svindx(1))

      call TrackEnd ('uel104')

...

call propev(elem,elmdat(1),lmprop(1),0,mprop(1),15)
call nminfo (ielc(1),'USER104 ')
call erhandler...


external erhandler
external  nminfo,erinqr



eventuell haben sich ja hier Bezeichnungen geändert?

Wie genau muss eigentlich bei fortran fixed format die Formatierung eingehalten werden? Stört sich der Compiler daran oder "macht er schon das richtige"?

Danke
0lli

[Diese Nachricht wurde von 0lli am 20. Feb. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

0lli
Mitglied


Sehen Sie sich das Profil von 0lli an!   Senden Sie eine Private Message an 0lli  Schreiben Sie einen Gästebucheintrag für 0lli

Beiträge: 3
Registriert: 19.02.2013

erstellt am: 07. Mai. 2013 21:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

um das hier nochmal up2date zu halten. Nach langem Versuchen hat es nun doch endlich geklappt. Anscheint liegt das Problem darin, dass im Userelement eine Wurzelfunktion aufgerufen wird und so wie es aussieht die Mathe-Bibliotheke von Ansys in der Version hier einen Bug in der Wurzelfunktion hat. Nachdem ich mir eine Testversion vom neusten Intel Compiler besorgt und das ganze noch einmal normal kompiliert habe + überschreiben der Mathelib Dateien mit denen, die beim Compiler mitgeliefert werden, hat es funktioniert.

P.S. Hat jemand eine kurze Anleitung wie ich das Userelement nicht in Ansys.exe kompiliere sondern dies als DLL machen kann? Muß ich hier ein bestimmte DLL-Bezeichnung wählen und was genau muss ich in die Registry eintragen, damit die DLL für das Userelement gefunden wird?

Danke
0lli

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz