Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Debugging einer UMAT und SDV Probleme

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
Autor Thema:  Debugging einer UMAT und SDV Probleme (3219 mal gelesen)
J.Hund
Mitglied
Student

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

Beiträge: 7
Registriert: 10.11.2011

Abaqus 6.12-1
Visual Studio 2008 mit Intel Fortran Compiler 11

erstellt am: 12. Nov. 2012 10:49    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

Hallo,

im Rahmen eines Praktikums bin ich gerade dabei ein User Material für Abaqus zu schreiben. Ich habe meinen Code in Fortran soweit fertig und mache mich nun ans Debuggen. Deshalb meine erste Frage: Gibt es einen bequemen Weg zum Debugging mit Hilfe von Visual Studio 2008? Den Intel Fortran Compiler habe ich installiert.
Momentan behelfe ich mir mit write- und read-Anweisungen.

Womit ich bei meinem eigentlichen Problem angelangt bin:


  • In meiner UMAT rufe ich eine selbstgeschriebene Subroutine zur Berechnung von DDSDDE auf. Solange nach diesem Aufruf keine write-Anweisung einfüge, bricht die Berechnung sofort ab und die .log-Datei liefert:
    Code:
    11/12/2012 9:47:32 AM
    Abaqus Error: The executable standard.exe
    aborted with system error code 1073741819.

    Füge ich nun nach dem Aufruf der Subroutine für DDSDDE einen beliebigen write-Befehl ein, wird die Berechnung vollständig und korrekt durchgeführt. Hat jemand eine Idee woran das liegt?

  • Eine andere Merkwürdigkeit, die ich mir bisher nicht erklären kann, hängt mit meinen lösungsabhängigen Variablen zusammen. Ich habe insgesamt zehn verschiedene lösungsabhängige Variablen eingeführt, die ich am Ende meiner UMAT Routine folgendermaßen dem Feld statev zuweise:
    Code:
    statev(1) = Bruchfunktion
          statev(2) = Variable_2
          statev(3) = Winkel
          statev(4) = Variable_4
          statev(5) = Variable_5
          statev(6) = Variable_6
          statev(7) = Variable_7
          statev(8) = Variable_8
          statev(9) = Variable_9
          statev(10)= Variable_10

    Die Berechnung der Variable_x erfolgt in Subroutinen, die ich übernommen habe und funktioniert ohne Probleme. Ich habe nun eine Subroutine eingefügt, die "Bruchfunktion" und "Winkel" ermittelt. Die Subroutine liefert auch die gewünschten Ergebnisse. Die Ausgabe dieser Variablen, sodass ich sie in der ODB Datei betrachten kann, funktioniert jedoch nicht ohne weiteres.
    Erst wenn ich nach dem Aufruf der Subroutine noch einen write-Befehl einfüge, der eine der beiden Variablen ausgibt, kann ich mir die beiden Variablen auch in der ODB anschauen.
    Weiß jemand wo mein Fehler liegt?

Die berechneten Spannungen und Verschiebungen stimmen mit einer Referenzlösung überein. Im Grunde bin ich schon froh, dass die UMAT Routine arbeitet. Da ich nun aber weitere Funktionen einfügen soll, möchte ich meine Fehler gerne nachvollziehen, um sie zukünftig von vorne herein ausschließen zu können.

Vielen Dank im Voraus

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

J.Hund
Mitglied
Student

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

Beiträge: 7
Registriert: 10.11.2011

Abaqus 6.12-1
Visual Studio 2008 mit Intel Fortran Compiler 11

erstellt am: 26. Nov. 2012 07:36    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

Hallo,

ich habe nach wie vor ein Problem mit der Zuweisung der lösungsabhängigen Variablen.

Momentan ist es leider so, dass eine lösungsabhängige Variable in der ODB mehr oder weniger beliebige Werte anzeigt, die nicht einmal im Wertebereich der Funktionen liegen, die der Berechnung der Variablen zugrunde liegen. Lasse ich mir die betreffende lösungsabhängige Variable jedoch mithilfe eines write-Befehls direkt in die log-Datei schreiben, sehe ich, dass die Berechnung korrekt abläuft und nur die Darstellung in der ODB nicht gelingt.

Code:
      write(*,*) 'Variable_1 =', Variable_1
      write(*,*) 'Variable_2=', Variable_2
      write(*,*) 'Variable_3 =', Variable_3
      statev(1) = Variable_1
      statev(2) = Variable_2
      statev(3) = Variable_3

Kurioserweise wird nicht immer die selbe Variable falsch dargestellt. Je nach Job ist mal die eine, mal die andere falsch. Ich habe bisher keinen blassen Schimmer womit das zu tun haben könnte.

Hat hier jemand eine Idee?

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

Nicksen
Mitglied
wissenschaftlicher Mitarbeiter


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

Beiträge: 239
Registriert: 04.05.2007

erstellt am: 26. Nov. 2012 10: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 Nur für J.Hund 10 Unities + Antwort hilfreich

Hmm...
Ist jetzt nur eine Vermutung, aber vielleicht liegt es an der Deklaration der Variablen. Sind die richtigen Spezifikationen definiert (real, integer, usw.)?
Manchmal führt das Schreiben eines Wertes auf eine falsch deklarierte Variable zu nicht reproduzierbaren Fehlern. Ich hatte eine Weile mal falsche Werte, die sich als ZAHL+E310 darstellten und das mal so und mal so. Mein Fehler war damals, dass ich double precision und "normales" real gleichzeitig genutzt habe.

Du sagst noch, dass du weitere SDVs anfügst. Hast du im inp-file die *depvar Anzahl hochgesetzt? Wenn dort eine 8 steht und du aber einen statev-Vektor mit 10 Stellen beschreibst, kann es sein, dass kein Fehler gemeldet wird, sondern einfach falsche Schreibbefehle ausgeführt werden. Die berechneten Werte stimmen deiner Aussage nach, also vermute ich, dass es ein Zuweisungsproblem ist, welches mit den Speicherplätzen von Abaqus zusammen hängt. Check m.H. von write Anweisungen die Zuweisung deiner Werte auf die Plätze im statev-Vektor.

Bsp.:
write(*,*)'Variable_10: ',Variable_10
statev(10)=Variable_10
write(*,*)'statev(10): ',statev(10)

Warum die UMAT nur mit einer write-Ausgabe funktioniert und sonst nicht, kann ich mir derzeit nicht erklären. Dieses Phänomen ist mir bisher nicht untergekommen.
Wenn du dahingehend etwas herausfindest, dann teile uns dies bitte mit. Für den Fall dass jemandem Ähnliches passiert, ist das eine sehr nützliche Information.

besten Dank und viel Erfolg

mfg NxxN

------------------
===============
==  Dingsen  ==
===============

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

Viktor M.
Mitglied
Wissenschaftlicher Mitarbeiter


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

Beiträge: 55
Registriert: 27.10.2008

erstellt am: 26. Nov. 2012 13:11    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 J.Hund 10 Unities + Antwort hilfreich

Hallo,

wenn die write-Anweisung derart dein Ergebnis beeinflusst, dann kontrolliere mal im Detail die Array-Dimensionen.
Deine Beschreibung deutet für mich auf einen Speicherfehler hin.

Zu dem zweiten Problem:
Wenn die Dimensionen der SDV und der restlichen Arrays in den Routinen korrekt sind, dann sollte in der ODB genau das stehen, was du speicherst. Egal, ob du etwas mit per write in die Konsole ausgeben lässt.
Daher auch hier der Vorschlag die Array-Dimension zu kontrollieren.
Dann muss man auch beachten, dass die Kontur-Plots in ABQ auf Basis der Knotenwerte angezeigt werden. Die SDVs sind jedoch auf den Integrationspunkten definiert. Ist der Gradient zwischen zwei Integrationspunkten eines Elements ungünstig, kann es durchaus passieren, dass auf die Knoten Werte extrapoliert werden, die nicht im Soll-Wertebereich liegen.

Zudem in allen Routinen (umat, sdvini) die Reihenfolge der Übergabeparameter nochmal mit der verwendeten ABQ-Version abgleichen.

MfG,Viktor

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

J.Hund
Mitglied
Student

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

Beiträge: 7
Registriert: 10.11.2011

Abaqus 6.12-1
Visual Studio 2008 mit Intel Fortran Compiler 11

erstellt am: 27. Nov. 2012 08:09    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

Hallo,

also das Problem mit der write-Anweisung und der Jacobi-Matrix hat sich schon vor einiger Zeit dadurch beheben lassen, dass ich noch einmal die Übergabe der Formalparameter an meine Subroutinen, die das Hookesche Gesetz auswerten, korrigiert habe. Seitdem ich besser darauf achte, dass alle Parameter die richtigen Dimensionen haben, sind diese Fehler glücklicherweise nicht mehr aufgetreten.

Zu den SDV-Problemen habe ich bisher leider keine Lösung. Die write-Anweisung sowohl vor als auch nach der Zuweisung wie sie Nicksen vorgeschlagen hat, zeigt mir nur, dass in der ODB eigentlich auch die richtigen Werte stehen müssten. Ebenfalls sind alle Variablen als double precision deklariert.
Die *Depvar Option in der Input-File stimmt ebenfalls. Die Dimensionen aller verwendeten Arrays werde ich noch einmal prüfen, aber da ich Module verwende, bin ich mir relativ sicher, dass sie in jeder subroutine und function stimmen.

Ich habe auch mal das User subroutine interface direkt aus der Abaqus Dokumentation verwendet - ohne Erfolg. Dieses Interface sieht allerdings genauso aus wie in den alten Abaqus Versionen.
@Viktor: Oder meintest du etwas anderes?

Bleibt lediglich die (unwahrscheinliche) Möglichkeit, dass die Gradienten zwischen den Gausspunkten wirklich so wild aussehen.

Hoffentlich bringt die Überprüfung aller Array-Grössen die Lösung.

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

Viktor M.
Mitglied
Wissenschaftlicher Mitarbeiter


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

Beiträge: 55
Registriert: 27.10.2008

erstellt am: 27. Nov. 2012 08:14    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 J.Hund 10 Unities + Antwort hilfreich

Hallo,

prüfe einfach die tatsächlichen Integrationpunkt-Werte im Viewer über die Query-Funktion.


MfG,Viktor

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